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 2018/08/26 10:40:31 UTC

[cordova-lib] branch master updated: Remove deprecated platform support files (#658)

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 c4f2d64  Remove deprecated platform support files (#658)
c4f2d64 is described below

commit c4f2d64571f5eb71b9fea343f3315dcea505f9d5
Author: Darryl Pogue <dv...@gmail.com>
AuthorDate: Sun Aug 26 03:40:28 2018 -0700

    Remove deprecated platform support files (#658)
    
    Removes some outdated files that were missed for removal when support was dropped for some platforms.
---
 spec/cordova/metadata/browser_parser.spec.js | 102 -----
 spec/plugman/platforms/amazon-fireos.spec.js | 140 -------
 spec/plugman/platforms/tizen.spec.js         |  50 ---
 spec/plugman/util/csproj.spec.js             | 106 -----
 src/cordova/metadata/browser_parser.js       | 107 -----
 src/plugman/platforms/browser.js             |  73 ----
 src/plugman/platforms/tizen.js               |  69 ----
 src/plugman/platforms/ubuntu.js              | 174 --------
 src/plugman/platforms/webos.js               |  73 ----
 src/plugman/util/android-project.js          | 157 -------
 src/plugman/util/plist-helpers.js            |  95 -----
 src/util/windows/csproj.js                   | 177 --------
 src/util/windows/jsprojManager.js            | 588 ---------------------------
 13 files changed, 1911 deletions(-)

diff --git a/spec/cordova/metadata/browser_parser.spec.js b/spec/cordova/metadata/browser_parser.spec.js
deleted file mode 100644
index 8f94c0e..0000000
--- a/spec/cordova/metadata/browser_parser.spec.js
+++ /dev/null
@@ -1,102 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-var browserParser = require('../../../src/cordova/metadata/browser_parser');
-var util = require('../../../src/cordova/util');
-var path = require('path');
-var shell = require('shelljs');
-var fs = require('fs');
-var Parser = require('../../../src/cordova/metadata/parser');
-
-describe('browser project parser', function () {
-    var proj = path.join('some', 'path');
-    var exists;
-
-    beforeEach(function () {
-        exists = spyOn(fs, 'existsSync').and.returnValue(true);
-        spyOn(browserParser, 'dirExists').and.returnValue(true);
-    });
-
-    describe('constructions', function () {
-        it('should create an instance with a path', function () {
-            expect(function () {
-                var p = new browserParser(proj); // eslint-disable-line new-cap
-                expect(p.path).toEqual(proj);
-            }).not.toThrow();
-        });
-        it('should be an instance of Parser', function () {
-            expect(new browserParser(proj) instanceof Parser).toBe(true); // eslint-disable-line new-cap
-        });
-        it('should call super with the correct arguments', function () {
-            var call = spyOn(Parser, 'call');
-            var p = new browserParser(proj); // eslint-disable-line new-cap
-            expect(call).toHaveBeenCalledWith(p, 'browser', proj);
-        });
-    });
-
-    describe('instance', function () {
-        var p;
-        var cp;
-        var rm;
-        var mkdir; // eslint-disable-line no-unused-vars
-        var is_cordova; // eslint-disable-line no-unused-vars
-        var browser_proj = path.join(proj, 'platforms', 'browser');
-
-        beforeEach(function () {
-            p = new browserParser(browser_proj); // eslint-disable-line new-cap
-            cp = spyOn(shell, 'cp');
-            rm = spyOn(shell, 'rm');
-            mkdir = spyOn(shell, 'mkdir');
-            is_cordova = spyOn(util, 'isCordova').and.returnValue(proj);
-        });
-
-        describe('www_dir method', function () {
-            it('should return /www', function () {
-                expect(p.www_dir()).toEqual(path.join(browser_proj, 'www'));
-            });
-        });
-
-        describe('config_xml method', function () {
-            it('should return the location of config.xml', function () {
-                expect(p.config_xml()).toEqual(path.join(proj, 'platforms', 'browser', 'config.xml'));
-            });
-        });
-
-        describe('update_www method', function () {
-            it('should rm project-level www and cp in platform agnostic www', function () {
-                p.update_www();
-                expect(rm).toHaveBeenCalled();
-                expect(cp).toHaveBeenCalled();
-            });
-        });
-
-        describe('update_overrides method', function () {
-            it('should do nothing if merges directory does not exist', function () {
-                exists.and.returnValue(false);
-                p.update_overrides();
-                expect(cp).not.toHaveBeenCalled();
-            });
-
-            it('should copy merges path into www', function () {
-                p.update_overrides();
-                expect(cp).toHaveBeenCalledWith('-rf', path.join(proj, 'merges', 'browser', '*'), path.join(proj, 'platforms', 'browser', 'www'));
-            });
-        });
-    });
-});
diff --git a/spec/plugman/platforms/amazon-fireos.spec.js b/spec/plugman/platforms/amazon-fireos.spec.js
deleted file mode 100644
index c693689..0000000
--- a/spec/plugman/platforms/amazon-fireos.spec.js
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-/*
-var amazon_fireos = require('../../../src/plugman/platforms/amazon-fireos'),
-    common  = require('../../../src/plugman/platforms/common'),
-    install = require('../../../src/plugman/install'),
-    path    = require('path'),
-    fs      = require('fs'),
-    shell   = require('shelljs'),
-    et      = require('elementtree'),
-    os      = require('osenv'),
-    temp    = path.join(os.tmpdir(), 'plugman'),
-    plugins_dir = path.join(temp, 'cordova', 'plugins'),
-    xml_helpers = require('../../../src/util/xml-helpers'),
-    plugins_module = require('../../../src/plugman/util/plugins'),
-    dummyplugin = path.join(__dirname, '..', 'plugins', 'org.test.plugins.dummyplugin'),
-    faultyplugin = path.join(__dirname, '..', 'plugins', 'org.test.plugins.faultyplugin'),
-    amazon_fireos_one_project = path.join(__dirname, '..', 'projects', 'android_one', '*'),
-    amazon_fireos_two_project = path.join(__dirname, '..', 'projects', 'android_two', '*');
-
-var PluginInfo = require('../../../src/PluginInfo');
-
-var dummyPluginInfo = new PluginInfo(dummyplugin);
-var dummy_id = dummyPluginInfo.id;
-var valid_source = dummyPluginInfo.getSourceFiles('amazon-fireos');
-
-var faultyPluginInfo = new PluginInfo(faultyplugin);
-var invalid_source = faultyPluginInfo.getSourceFiles('amazon-fireos');
-
-function copyArray(arr) {
-    return Array.prototype.slice.call(arr, 0);
-}
-*/
-/*
-describe('amazon-fireos project handler', function() {
-    describe('www_dir method', function() {
-        it('should return cordova-amazon-fireos project www location using www_dir', function() {
-            expect(amazon_fireos.www_dir(path.sep)).toEqual(path.sep + path.join('assets', 'www'));
-        });
-    });
-    describe('package_name method', function() {
-        it('should return an amazon-fireos project\'s proper package name', function() {
-            expect(amazon_fireos.package_name(path.join(amazon_fireos_one_project, '..'))).toEqual('com.alunny.childapp');
-        });
-    });
-
-    describe('installation', function() {
-        beforeEach(function() {
-            shell.mkdir('-p', temp);
-        });
-        afterEach(function() {
-            shell.rm('-rf', temp);
-        });
-        describe('of <lib-file> elements', function() {
-            it("should copy jar files to project/libs", function () {
-                var s = spyOn(common, 'copyFile');
-
-                amazon_fireos['lib-file'].install(valid_libs[0], dummyplugin, temp);
-                expect(s).toHaveBeenCalledWith(dummyplugin, 'src/amazon-fireos/TestLib.jar', temp, path.join('libs', 'TestLib.jar'));
-            });
-        });
-        describe('of <source-file> elements', function() {
-            beforeEach(function() {
-                shell.cp('-rf', amazon_fireos_one_project, temp);
-            });
-
-            it('should copy stuff from one location to another by calling common.copyFile', function() {
-                var source = copyArray(valid_source);
-                var s = spyOn(common, 'copyFile');
-                amazon_fireos['source-file'].install(source[0], dummyplugin, temp);
-                expect(s).toHaveBeenCalledWith(dummyplugin, 'src/amazon-fireos/DummyPlugin.java', temp, path.join('src', 'com', 'phonegap', 'plugins', 'dummyplugin', 'DummyPlugin.java'));
-            });
-            it('should throw if source file cannot be found', function() {
-                var source = copyArray(invalid_source);
-                expect(function() {
-                    amazon_fireos['source-file'].install(source[0], faultyplugin, temp);
-                }).toThrow('"' + path.resolve(faultyplugin, 'src/amazon-fireos/NotHere.java') + '" not found!');
-            });
-            it('should throw if target file already exists', function() {
-                // write out a file
-                var target = path.resolve(temp, 'src/com/phonegap/plugins/dummyplugin');
-                shell.mkdir('-p', target);
-                target = path.join(target, 'DummyPlugin.java');
-                fs.writeFileSync(target, 'some bs', 'utf-8');
-
-                var source = copyArray(valid_source);
-                expect(function() {
-                    amazon_fireos['source-file'].install(source[0], dummyplugin, temp);
-                }).toThrow('"' + target + '" already exists!');
-            });
-        });
-    });
-
-    describe('uninstallation', function() {
-        beforeEach(function() {
-            shell.mkdir('-p', temp);
-            shell.mkdir('-p', plugins_dir);
-            shell.cp('-rf', amazon_fireos_two_project, temp);
-        });
-        afterEach(function() {
-            shell.rm('-rf', temp);
-        });
-        describe('of <lib-file> elements', function(done) {
-            it('should remove jar files', function () {
-                var s = spyOn(common, 'removeFile');
-                amazon_fireos['lib-file'].install(valid_libs[0], dummyplugin, temp);
-                amazon_fireos['lib-file'].uninstall(valid_libs[0], temp, dummy_id);
-                expect(s).toHaveBeenCalledWith(temp, path.join('libs', 'TestLib.jar'));
-            });
-        });
-        describe('of <source-file> elements', function() {
-            it('should remove stuff by calling common.deleteJava', function(done) {
-                var s = spyOn(common, 'deleteJava');
-                install('amazon-fireos', temp, dummyplugin, plugins_dir, {})
-                .then(function() {
-                    var source = copyArray(valid_source);
-                    amazon_fireos['source-file'].uninstall(source[0], temp);
-                    expect(s).toHaveBeenCalledWith(temp, path.join('src', 'com', 'phonegap', 'plugins', 'dummyplugin', 'DummyPlugin.java'));
-                    done();
-                });
-            });
-        });
-    });
-}); */
diff --git a/spec/plugman/platforms/tizen.spec.js b/spec/plugman/platforms/tizen.spec.js
deleted file mode 100644
index 1631943..0000000
--- a/spec/plugman/platforms/tizen.spec.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- *
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-var tizen = require('../../../src/plugman/platforms/tizen');
-var os = require('os');
-var path = require('path');
-var tizen_project = path.join(__dirname, '..', 'projects', 'tizen');
-
-path.join(os.tmpdir(), 'plugman-' + ((function () {
-    var index, subIndex;
-    var set = 'abcdefghijklmnopqrstuvwxyz0123456789';
-    var str = '';
-
-    for (index = 0; index < 12; index++) {
-        subIndex = Math.round(Math.random() * (set.length - 1));
-        str += set.substring(subIndex, subIndex + 1);
-    }
-
-    return str;
-})()));
-
-describe('Tizen project handler', function () {
-    describe('www_dir method', function () {
-        it('Test 001 : should append www to the directory passed in', function () {
-            expect(tizen.www_dir(path.sep)).toEqual(path.join(path.sep, 'www'));
-        });
-    });
-    describe('Manipulating project files', function () {
-        describe('package_name method', function () {
-            it('Test 002 : should return the id of the config.xml root element', function () {
-                expect(tizen.package_name(tizen_project)).toEqual('TizenTestPackage');
-            });
-        });
-    });
-});
diff --git a/spec/plugman/util/csproj.spec.js b/spec/plugman/util/csproj.spec.js
deleted file mode 100644
index 973bb98..0000000
--- a/spec/plugman/util/csproj.spec.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-var csproj = require('../../../src/util/windows/csproj');
-var path = require('path');
-
-var wp8_project = path.join(__dirname, '..', 'projects', 'wp8');
-var example_csproj = path.join(wp8_project, 'CordovaAppProj.csproj');
-
-describe('csproj', function () {
-    it('Test 001 : should throw if passed in an invalid xml file path ref', function () {
-        expect(function () {
-            new csproj('blahblah'); // eslint-disable-line
-        }).toThrow();
-    });
-    it('Test 002 : should successfully parse a valid csproj file into an xml document', function () {
-        var doc;
-        expect(function () {
-            doc = new csproj(example_csproj); // eslint-disable-line new-cap
-        }).not.toThrow();
-        expect(doc.xml.getroot()).toBeDefined();
-    });
-
-    describe('write method', function () {
-
-    });
-
-    describe('source file', function () {
-
-        var page_test = path.join('src', 'UI', 'PageTest.xaml');
-        var page_test_cs = path.join('src', 'UI', 'PageTest.xaml.cs');
-        var lib_test = path.join('lib', 'LibraryTest.dll');
-        var file_test = path.join('src', 'FileTest.cs');
-        var content_test = path.join('src', 'Content.img');
-
-        describe('add method', function () {
-            var test_csproj = new csproj(example_csproj); // eslint-disable-line new-cap
-            it('Test 003 : should properly add .xaml files', function () {
-                test_csproj.addSourceFile(page_test);
-                expect(test_csproj.xml.getroot().find('.//Page[@Include="src\\UI\\PageTest.xaml"]')).toBeTruthy();
-                expect(test_csproj.xml.getroot().find('.//Page[@Include="src\\UI\\PageTest.xaml"]/Generator').text).toEqual('MSBuild:Compile');
-                expect(test_csproj.xml.getroot().find('.//Page[@Include="src\\UI\\PageTest.xaml"]/SubType').text).toEqual('Designer');
-            });
-            it('Test 004 : should properly add .xaml.cs files', function () {
-                test_csproj.addSourceFile(page_test_cs);
-                expect(test_csproj.xml.getroot().find('.//Compile[@Include="src\\UI\\PageTest.xaml.cs"]')).toBeTruthy();
-                expect(test_csproj.xml.getroot().find('.//Compile[@Include="src\\UI\\PageTest.xaml.cs"]/DependentUpon').text).toEqual('PageTest.xaml');
-            });
-            it('Test 005 : should properly add .cs files', function () {
-                test_csproj.addSourceFile(file_test);
-                expect(test_csproj.xml.getroot().find('.//Compile[@Include="src\\FileTest.cs"]')).toBeTruthy();
-            });
-            it('Test 006 : should properly add content files', function () {
-                test_csproj.addSourceFile(content_test);
-                expect(test_csproj.xml.getroot().find('.//Content[@Include="src\\Content.img"]')).toBeTruthy();
-            });
-        });
-
-        describe('remove method', function () {
-            var test_csproj = new csproj(example_csproj); // eslint-disable-line new-cap
-            it('Test 007 : should properly remove .xaml pages', function () {
-                test_csproj.removeSourceFile(page_test);
-                expect(test_csproj.xml.getroot().find('.//Page[@Include="src\\UI\\PageTest.xaml"]')).toBeFalsy();
-            });
-            it('Test 008 : should properly remove .xaml.cs files', function () {
-                test_csproj.removeSourceFile(page_test_cs);
-                expect(test_csproj.xml.getroot().find('.//Compile[@Include="src\\UI\\PageTest.xaml.cs"]')).toBeFalsy();
-            });
-            it('Test 009 : should properly remove .cs files', function () {
-                test_csproj.removeSourceFile(file_test);
-                expect(test_csproj.xml.getroot().find('.//Compile[@Include="src\\FileTest.cs"]')).toBeFalsy();
-            });
-            it('Test 010 : should properly remove content files', function () {
-                test_csproj.removeSourceFile(content_test);
-                expect(test_csproj.xml.getroot().find('.//Content[@Include="src\\Content.img"]')).toBeFalsy();
-            });
-            it('Test 011 : should remove all empty ItemGroup\'s', function () {
-                test_csproj.removeSourceFile(page_test);
-                test_csproj.removeSourceFile(page_test_cs);
-                test_csproj.removeSourceFile(lib_test);
-                test_csproj.removeSourceFile(file_test);
-                var item_groups = test_csproj.xml.findall('ItemGroup');
-                for (var i = 0, l = item_groups.length; i < l; i++) {
-                    var group = item_groups[i];
-                    expect(group._children.length).toBeGreaterThan(0);
-                }
-            });
-
-        });
-    });
-});
diff --git a/src/cordova/metadata/browser_parser.js b/src/cordova/metadata/browser_parser.js
deleted file mode 100644
index 94f91e8..0000000
--- a/src/cordova/metadata/browser_parser.js
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-var fs = require('fs');
-var path = require('path');
-var shell = require('shelljs');
-var util = require('../util');
-var CordovaError = require('cordova-common').CordovaError;
-var Q = require('q');
-var Parser = require('./parser');
-
-function dirExists (dir) {
-    return fs.existsSync(dir) && fs.statSync(dir).isDirectory();
-}
-
-function browser_parser (project) {
-    if (!module.exports.dirExists(project) || !module.exports.dirExists(path.join(project, 'cordova'))) {
-        throw new CordovaError('The provided path "' + project + '" is not a valid browser project.');
-    }
-
-    // Call the base class constructor
-    Parser.call(this, 'browser', project);
-
-    this.path = project;
-}
-
-require('util').inherits(browser_parser, Parser);
-
-module.exports = browser_parser;
-
-// Returns a promise.
-browser_parser.prototype.update_from_config = function () {
-    return Q();
-};
-
-browser_parser.prototype.www_dir = function () {
-    return path.join(this.path, 'www');
-};
-
-// Used for creating platform_www in projects created by older versions.
-browser_parser.prototype.cordovajs_path = function (libDir) {
-    var jsPath = path.join(libDir, 'cordova-lib', 'cordova.js');
-    return path.resolve(jsPath);
-};
-
-browser_parser.prototype.cordovajs_src_path = function (libDir) {
-    var jsPath = path.join(libDir, 'cordova-js-src');
-    return path.resolve(jsPath);
-};
-
-// Replace the www dir with contents of platform_www and app www.
-browser_parser.prototype.update_www = function () {
-    var projectRoot = util.isCordova(this.path);
-    var app_www = util.projectWww(projectRoot);
-    var platform_www = path.join(this.path, 'platform_www');
-
-    // Clear the www dir
-    shell.rm('-rf', this.www_dir());
-    shell.mkdir(this.www_dir());
-    // Copy over all app www assets
-    shell.cp('-rf', path.join(app_www, '*'), this.www_dir());
-    // Copy over stock platform www assets (cordova.js)
-    shell.cp('-rf', path.join(platform_www, '*'), this.www_dir());
-};
-
-browser_parser.prototype.update_overrides = function () {
-    var projectRoot = util.isCordova(this.path);
-    var mergesPath = path.join(util.appDir(projectRoot), 'merges', 'browser');
-    if (fs.existsSync(mergesPath)) {
-        var overrides = path.join(mergesPath, '*');
-        shell.cp('-rf', overrides, this.www_dir());
-    }
-};
-
-browser_parser.prototype.config_xml = function () {
-    return path.join(this.path, 'config.xml');
-};
-
-// Returns a promise.
-browser_parser.prototype.update_project = function (cfg) {
-    return this.update_from_config()
-        .then(function () {
-            this.update_overrides();
-            util.deleteSvnFolders(this.www_dir());
-
-            // Copy munged config.xml to platform www dir
-            shell.cp('-rf', path.join(this.www_dir(), '..', 'config.xml'), this.www_dir());
-        }.bind(this));
-};
-
-module.exports.dirExists = dirExists;
diff --git a/src/plugman/platforms/browser.js b/src/plugman/platforms/browser.js
deleted file mode 100644
index 833786f..0000000
--- a/src/plugman/platforms/browser.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-var path = require('path');
-var common = require('./common');
-var events = require('cordova-common').events;
-
-module.exports = {
-    www_dir: function (project_dir) {
-        return path.join(project_dir, 'www');
-    },
-    package_name: function (project_dir) {
-        return common.package_name(project_dir, this.www_dir(project_dir));
-    },
-    'source-file': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {
-            var dest = path.join(obj.targetDir, path.basename(obj.src));
-            common.copyFile(plugin_dir, obj.src, project_dir, dest);
-        },
-        uninstall: function (obj, project_dir, plugin_id, options) {
-            var dest = path.join(obj.targetDir, path.basename(obj.src));
-            common.removeFile(project_dir, dest);
-        }
-    },
-    'header-file': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {
-            events.emit('verbose', 'header-fileinstall is not supported for browser');
-        },
-        uninstall: function (obj, project_dir, plugin_id, options) {
-            events.emit('verbose', 'header-file.uninstall is not supported for browser');
-        }
-    },
-    'resource-file': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {
-            events.emit('verbose', 'resource-file.install is not supported for browser');
-        },
-        uninstall: function (obj, project_dir, plugin_id, options) {
-            events.emit('verbose', 'resource-file.uninstall is not supported for browser');
-        }
-    },
-    'framework': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {
-            events.emit('verbose', 'framework.install is not supported for browser');
-        },
-        uninstall: function (obj, project_dir, plugin_id, options) {
-            events.emit('verbose', 'framework.uninstall is not supported for browser');
-        }
-    },
-    'lib-file': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {
-            events.emit('verbose', 'lib-file.install is not supported for browser');
-        },
-        uninstall: function (obj, project_dir, plugin_id, options) {
-            events.emit('verbose', 'lib-file.uninstall is not supported for browser');
-        }
-    }
-};
diff --git a/src/plugman/platforms/tizen.js b/src/plugman/platforms/tizen.js
deleted file mode 100644
index 42103f4..0000000
--- a/src/plugman/platforms/tizen.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-var path = require('path');
-var fs = require('fs');
-var events = require('cordova-common').events;
-var xml_helpers = require('cordova-common').xmlHelpers;
-
-module.exports = {
-    www_dir: function (project_dir) {
-        return path.join(project_dir, 'www');
-    },
-    package_name: function (project_dir) {
-        // preferred location if cordova >= 3.4
-        var preferred_path = path.join(project_dir, 'config.xml');
-        var config_path;
-        if (!fs.existsSync(preferred_path)) {
-            // older location
-            var old_config_path = path.join(module.exports.www_dir(project_dir), 'config.xml');
-            if (!fs.existsSync(old_config_path)) {
-                // output newer location and fail reading
-                config_path = preferred_path;
-                events.emit('verbose', 'unable to find ' + config_path);
-            } else {
-                config_path = old_config_path;
-            }
-        } else {
-            config_path = preferred_path;
-        }
-        var widget_doc = xml_helpers.parseElementtreeSync(config_path);
-        return widget_doc._root.attrib['id'];
-    },
-    'source-file': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {},
-        uninstall: function (obj, project_dir, plugin_id, options) {}
-    },
-    'header-file': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {},
-        uninstall: function (obj, project_dir, plugin_id, options) {}
-    },
-    'resource-file': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {},
-        uninstall: function (obj, project_dir, plugin_id, options) {}
-    },
-    'framework': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {},
-        uninstall: function (obj, project_dir, plugin_id, options) {}
-    },
-    'lib-file': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {},
-        uninstall: function (obj, project_dir, plugin_id, options) {}
-    }
-};
diff --git a/src/plugman/platforms/ubuntu.js b/src/plugman/platforms/ubuntu.js
deleted file mode 100644
index 21b2891..0000000
--- a/src/plugman/platforms/ubuntu.js
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- *
- * Copyright 2013 Canonical Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-function replaceAt (str, index, char) {
-    return str.substr(0, index) + char + str.substr(index + char.length);
-}
-
-function toCamelCase (str) {
-    return str.split('-').map(function (str) {
-        return replaceAt(str, 0, str[0].toUpperCase());
-    }).join('');
-}
-
-function getPluginXml (plugin_dir) {
-    var et = require('elementtree');
-    var fs = require('fs');
-    var path = require('path');
-
-    var pluginxml;
-    var config_path = path.join(plugin_dir, 'plugin.xml');
-
-    if (fs.existsSync(config_path)) {
-        // Get the current plugin.xml file
-        pluginxml = et.parse(fs.readFileSync(config_path, 'utf-8'));
-    }
-
-    return pluginxml;
-}
-
-function findClassName (pluginxml, plugin_id) {
-    var class_name;
-
-    // first check if we have a class-name parameter in the plugin config
-    if (pluginxml) {
-        var platform = pluginxml.find("./platform/[@name='ubuntu']/");
-        if (platform) {
-            var param = platform.find("./config-file/[@target='config.xml']/feature/param/[@name='ubuntu-package']");
-            if (param && param.attrib) {
-                class_name = param.attrib.value;
-                return class_name;
-            }
-        }
-    }
-
-    // fallback to guess work, based on the plugin package name
-
-    if (plugin_id.match(/\.[^.]+$/)) {
-        // old-style plugin name (Apache Registry)
-        class_name = plugin_id.match(/\.[^.]+$/)[0].substr(1);
-    } else {
-        // new-style (NPM registry)
-        var match = plugin_id.match(/cordova\-plugin\-([\w\-]+)$/); // eslint-disable-line no-useless-escape
-        if (match && match.length > 0) {
-            class_name = match[0].substr(15);
-        } else {
-            // plugins not using a particular naming convention
-            // and missing a parameter in pluginxml can still
-            // fallback to using a class name equal to their
-            // plugin name (in camel case)
-            class_name = plugin_id;
-        }
-    }
-
-    return toCamelCase(class_name);
-}
-
-var shell = require('shelljs');
-var fs = require('fs');
-var path = require('path');
-var common = require('./common');
-var events = require('cordova-common').events;
-var xml_helpers = require('cordova-common').xmlHelpers;
-
-module.exports = {
-    www_dir: function (project_dir) {
-        return path.join(project_dir, 'www');
-    },
-
-    package_name: function (project_dir) {
-        var config_path = path.join(project_dir, 'config.xml');
-        var widget_doc = xml_helpers.parseElementtreeSync(config_path);
-        return widget_doc._root.attrib['id'];
-    },
-    'source-file': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {
-            var dest = path.join('build', 'src', 'plugins', plugin_id, path.basename(obj.src));
-            common.copyFile(plugin_dir, obj.src, project_dir, dest);
-
-            var cmake = path.join(project_dir, 'build', 'CMakeLists.txt');
-            shell.exec('touch ' + cmake);
-        },
-        uninstall: function (obj, project_dir, plugin_id, options) {
-            var dest = path.join(project_dir, 'build', 'src', 'plugins', plugin_id);
-            shell.rm(path.join(dest, path.basename(obj.src)));
-
-            var cmake = path.join(project_dir, 'build', 'CMakeLists.txt');
-            shell.exec('touch ' + cmake);
-        }
-    },
-    'header-file': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {
-            var dest = path.join('build', 'src', 'plugins', plugin_id, path.basename(obj.src));
-            common.copyFile(plugin_dir, obj.src, project_dir, dest);
-
-            var plugins = path.join(project_dir, 'build', 'src', 'coreplugins.cpp');
-            var src = String(fs.readFileSync(plugins));
-
-            src = src.replace('INSERT_HEADER_HERE', '#include "plugins/' + plugin_id + '/' + path.basename(obj.src) + '"\nINSERT_HEADER_HERE');
-
-            var pluginxml = getPluginXml(plugin_dir);
-            var class_name = findClassName(pluginxml, plugin_id);
-            src = src.replace('INSERT_PLUGIN_HERE', 'INIT_PLUGIN(' + class_name + ');INSERT_PLUGIN_HERE');
-
-            fs.writeFileSync(plugins, src);
-        },
-        uninstall: function (obj, project_dir, plugin_id, options) {
-            var dest = path.join(project_dir, 'build', 'src', 'plugins', plugin_id);
-            shell.rm(path.join(dest, path.basename(obj.src)));
-
-            var plugins = path.join(project_dir, 'build', 'src', 'coreplugins.cpp');
-            var src = String(fs.readFileSync(plugins));
-
-            src = src.replace('#include "plugins/' + plugin_id + '/' + path.basename(obj.src) + '"', '');
-            var class_name = findClassName(undefined, plugin_id);
-            src = src.replace('INIT_PLUGIN(' + class_name + ');', '');
-
-            fs.writeFileSync(plugins, src);
-        }
-    },
-    'resource-file': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {
-            var dest = path.join('qml', path.basename(obj.src));
-            if (obj.targetDir) { dest = path.join(obj.targetDir, path.basename(obj.src)); }
-            common.copyFile(plugin_dir, obj.src, project_dir, dest);
-        },
-        uninstall: function (obj, project_dir, plugin_id, options) {
-            var dest = path.join(project_dir, 'qml');
-            if (obj.targetDir) { dest = path.join(project_dir, obj.targetDir); }
-            shell.rm(path.join(dest, path.basename(obj.src)));
-        }
-    },
-    'framework': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {
-            events.emit('verbose', 'framework.install is not supported for ubuntu');
-        },
-        uninstall: function (obj, project_dir, plugin_id, options) {
-            events.emit('verbose', 'framework.uninstall is not supported for ubuntu');
-        }
-    },
-    'lib-file': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {
-            events.emit('verbose', 'lib-file.install is not supported for ubuntu');
-        },
-        uninstall: function (obj, project_dir, plugin_id, options) {
-            events.emit('verbose', 'lib-file.uninstall is not supported for ubuntu');
-        }
-    }
-};
diff --git a/src/plugman/platforms/webos.js b/src/plugman/platforms/webos.js
deleted file mode 100755
index ec2b23f..0000000
--- a/src/plugman/platforms/webos.js
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-var path = require('path');
-var common = require('./common');
-var events = require('cordova-common').events;
-
-module.exports = {
-    www_dir: function (project_dir) {
-        return path.join(project_dir, 'www');
-    },
-    package_name: function (project_dir) {
-        return common.package_name(project_dir, this.www_dir(project_dir));
-    },
-    'source-file': {
-        install: function (obj, plugin_dir, project_dir, plugin_id, options) {
-            var dest = path.join(obj.targetDir, path.basename(obj.src));
-            common.copyFile(plugin_dir, obj.src, project_dir, dest);
-        },
-        uninstall: function (obj, project_dir, plugin_id, options) {
-            var dest = path.join(obj.targetDir, path.basename(obj.src));
-            common.removeFile(project_dir, dest);
-        }
-    },
-    'header-file': {
-        install: function (source_el, plugin_dir, project_dir, plugin_id) {
-            events.emit('verbose', 'header-fileinstall is not supported for webos');
-        },
-        uninstall: function (source_el, project_dir, plugin_id) {
-            events.emit('verbose', 'header-file.uninstall is not supported for webos');
-        }
-    },
-    'resource-file': {
-        install: function (el, plugin_dir, project_dir, plugin_id) {
-            events.emit('verbose', 'resource-file.install is not supported for webos');
-        },
-        uninstall: function (el, project_dir, plugin_id) {
-            events.emit('verbose', 'resource-file.uninstall is not supported for webos');
-        }
-    },
-    'framework': {
-        install: function (source_el, plugin_dir, project_dir, plugin_id) {
-            events.emit('verbose', 'framework.install is not supported for webos');
-        },
-        uninstall: function (source_el, project_dir, plugin_id) {
-            events.emit('verbose', 'framework.uninstall is not supported for webos');
-        }
-    },
-    'lib-file': {
-        install: function (source_el, plugin_dir, project_dir, plugin_id) {
-            events.emit('verbose', 'lib-file.install is not supported for webos');
-        },
-        uninstall: function (source_el, project_dir, plugin_id) {
-            events.emit('verbose', 'lib-file.uninstall is not supported for webos');
-        }
-    }
-};
diff --git a/src/plugman/util/android-project.js b/src/plugman/util/android-project.js
deleted file mode 100644
index cdf820d..0000000
--- a/src/plugman/util/android-project.js
+++ /dev/null
@@ -1,157 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-/*
-    Helper for Android projects configuration
-*/
-
-var fs = require('fs');
-var path = require('path');
-var properties_parser = require('properties-parser');
-var shell = require('shelljs');
-
-function addToPropertyList (projectProperties, key, value) {
-    var i = 1;
-    while (projectProperties.get(key + '.' + i)) { i++; }
-
-    projectProperties.set(key + '.' + i, value);
-    projectProperties.dirty = true;
-}
-
-/* eslint-disable no-cond-assign */
-function removeFromPropertyList (projectProperties, key, value) {
-    var i = 1;
-    var currentValue;
-    while (currentValue = projectProperties.get(key + '.' + i)) {
-        if (currentValue === value) {
-            while (currentValue = projectProperties.get(key + '.' + (i + 1))) {
-                projectProperties.set(key + '.' + i, currentValue);
-                i++;
-            }
-            projectProperties.set(key + '.' + i);
-            break;
-        }
-        i++;
-    }
-    projectProperties.dirty = true;
-}
-/* eslint-enable no-cond-assign */
-
-function AndroidProject (projectDir) {
-    this._propertiesEditors = {};
-    this._subProjectDirs = {};
-    this._dirty = false;
-    this.projectDir = projectDir;
-    this.needsSubLibraryUpdate = false;
-}
-
-AndroidProject.prototype = {
-    addSubProject: function (parentDir, subDir) {
-        var parentProjectFile = path.resolve(parentDir, 'project.properties');
-        var subProjectFile = path.resolve(subDir, 'project.properties');
-        var parentProperties = this._getPropertiesFile(parentProjectFile);
-        // TODO: Setting the target needs to happen only for pre-3.7.0 projects
-        if (fs.existsSync(subProjectFile)) {
-            var subProperties = this._getPropertiesFile(subProjectFile);
-            subProperties.set('target', parentProperties.get('target'));
-            subProperties.dirty = true;
-            this._subProjectDirs[subDir] = true;
-        }
-        addToPropertyList(parentProperties, 'android.library.reference', module.exports.getRelativeLibraryPath(parentDir, subDir));
-
-        this._dirty = true;
-    },
-    removeSubProject: function (parentDir, subDir) {
-        var parentProjectFile = path.resolve(parentDir, 'project.properties');
-        var parentProperties = this._getPropertiesFile(parentProjectFile);
-        removeFromPropertyList(parentProperties, 'android.library.reference', module.exports.getRelativeLibraryPath(parentDir, subDir));
-        delete this._subProjectDirs[subDir];
-        this._dirty = true;
-    },
-    addGradleReference: function (parentDir, subDir) {
-        var parentProjectFile = path.resolve(parentDir, 'project.properties');
-        var parentProperties = this._getPropertiesFile(parentProjectFile);
-        addToPropertyList(parentProperties, 'cordova.gradle.include', module.exports.getRelativeLibraryPath(parentDir, subDir));
-        this._dirty = true;
-    },
-    removeGradleReference: function (parentDir, subDir) {
-        var parentProjectFile = path.resolve(parentDir, 'project.properties');
-        var parentProperties = this._getPropertiesFile(parentProjectFile);
-        removeFromPropertyList(parentProperties, 'cordova.gradle.include', module.exports.getRelativeLibraryPath(parentDir, subDir));
-        this._dirty = true;
-    },
-    addSystemLibrary: function (parentDir, value) {
-        var parentProjectFile = path.resolve(parentDir, 'project.properties');
-        var parentProperties = this._getPropertiesFile(parentProjectFile);
-        addToPropertyList(parentProperties, 'cordova.system.library', value);
-        this._dirty = true;
-    },
-    removeSystemLibrary: function (parentDir, value) {
-        var parentProjectFile = path.resolve(parentDir, 'project.properties');
-        var parentProperties = this._getPropertiesFile(parentProjectFile);
-        removeFromPropertyList(parentProperties, 'cordova.system.library', value);
-        this._dirty = true;
-    },
-    write: function () {
-        if (!this._dirty) {
-            return;
-        }
-        this._dirty = false;
-
-        for (var filename in this._propertiesEditors) {
-            var editor = this._propertiesEditors[filename];
-            if (editor.dirty) {
-                // Check for parent directory existence before attempting write
-                // (when uninstalling a plugin its subprojects' directories are deleted)
-                if (fs.existsSync(path.dirname(filename))) {
-                    fs.writeFileSync(filename, editor.toString());
-                }
-                editor.dirty = false;
-            }
-        }
-
-        // Starting with 3.6.0, the build scripts set ANDROID_HOME, so there is
-        // no reason to keep run this command. Plus - we really want to avoid
-        // relying on the presense of native SDKs within plugman.
-        if (this.needsSubLibraryUpdate) {
-            for (var sub_dir in this._subProjectDirs) {
-                shell.exec('android update lib-project --path "' + sub_dir + '"');
-            }
-        }
-        this._dirty = false;
-    },
-    _getPropertiesFile: function (filename) {
-        if (!this._propertiesEditors[filename]) {
-            if (fs.existsSync(filename)) {
-                this._propertiesEditors[filename] = properties_parser.createEditor(filename);
-            } else {
-                this._propertiesEditors[filename] = properties_parser.createEditor();
-            }
-        }
-
-        return this._propertiesEditors[filename];
-    }
-};
-
-module.exports = {
-    AndroidProject: AndroidProject,
-    getRelativeLibraryPath: function (parentDir, subDir) {
-        var libraryPath = path.relative(parentDir, subDir);
-        return (path.sep === '\\') ? libraryPath.replace(/\\/g, '/') : libraryPath;
-    }
-};
diff --git a/src/plugman/util/plist-helpers.js b/src/plugman/util/plist-helpers.js
deleted file mode 100644
index 230af90..0000000
--- a/src/plugman/util/plist-helpers.js
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-// contains PLIST utility functions
-var __ = require('underscore');
-var plist = require('plist');
-
-// adds node to doc at selector
-module.exports.graftPLIST = graftPLIST;
-function graftPLIST (doc, xml, selector) {
-    var obj = plist.parse('<plist>' + xml + '</plist>');
-
-    var node = doc[selector];
-    if (node && Array.isArray(node) && Array.isArray(obj)) {
-        node = node.concat(obj);
-        for (var i = 0; i < node.length; i++) {
-            for (var j = i + 1; j < node.length; ++j) {
-                if (nodeEqual(node[i], node[j])) { node.splice(j--, 1); }
-            }
-        }
-        doc[selector] = node;
-    } else {
-        // plist uses objects for <dict>. If we have two dicts we merge them instead of
-        // overriding the old one. See CB-6472
-        if (node && __.isObject(node) && __.isObject(obj) && !__.isDate(node) && !__.isDate(obj)) { // arrays checked above
-            __.extend(obj, node);
-        }
-        doc[selector] = obj;
-    }
-
-    return true;
-}
-
-// removes node from doc at selector
-module.exports.prunePLIST = prunePLIST;
-function prunePLIST (doc, xml, selector) {
-    var obj = plist.parse('<plist>' + xml + '</plist>');
-
-    pruneOBJECT(doc, selector, obj);
-
-    return true;
-}
-
-function pruneOBJECT (doc, selector, fragment) {
-    if (Array.isArray(fragment) && Array.isArray(doc[selector])) {
-        var empty = true;
-        for (var i in fragment) {
-            for (var j in doc[selector]) {
-                empty = pruneOBJECT(doc[selector], j, fragment[i]) && empty;
-            }
-        }
-        if (empty) {
-            delete doc[selector];
-            return true;
-        }
-    } else if (nodeEqual(doc[selector], fragment)) {
-        delete doc[selector];
-        return true;
-    }
-
-    return false;
-}
-
-function nodeEqual (node1, node2) {
-    if (typeof node1 !== typeof node2) { return false; } else if (typeof node1 === 'string') {
-        node2 = escapeRE(node2).replace(/\\\$\S+/gm, '(.*?)');
-        return new RegExp('^' + node2 + '$').test(node1);
-    } else {
-        for (var key in node2) {
-            if (!nodeEqual(node1[key], node2[key])) return false;
-        }
-        return true;
-    }
-}
-
-// escape string for use in regex
-function escapeRE (str) {
-    return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); // eslint-disable-line no-useless-escape
-}
diff --git a/src/util/windows/csproj.js b/src/util/windows/csproj.js
deleted file mode 100644
index 51efb5f..0000000
--- a/src/util/windows/csproj.js
+++ /dev/null
@@ -1,177 +0,0 @@
-/**
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
-*/
-
-var xml_helpers = require('cordova-common').xmlHelpers;
-var et = require('elementtree');
-var fs = require('fs');
-var path = require('path');
-
-function csproj (location) {
-    this.location = location;
-    this.xml = xml_helpers.parseElementtreeSync(location);
-    return this;
-}
-
-csproj.prototype = {
-    write: function () {
-        fs.writeFileSync(this.location, this.xml.write({indent: 4}), 'utf-8');
-    },
-    // add/remove the item group for SDKReference
-    // example :
-    // <ItemGroup><SDKReference Include="MSAdvertising, Version=6.1" /></ItemGroup>
-    addSDKRef: function (incText) {
-        var item_group = new et.Element('ItemGroup');
-        var elem = new et.Element('SDKReference');
-        elem.attrib.Include = incText;
-
-        item_group.append(elem);
-        this.xml.getroot().append(item_group);
-    },
-
-    removeSDKRef: function (incText) {
-        var item_group = this.xml.find('ItemGroup/SDKReference[@Include="' + incText + '"]/..');
-        if (item_group) {
-            this.xml.getroot().remove(item_group);
-        }
-    },
-    addReference: function (relPath) {
-        var item = new et.Element('ItemGroup');
-        var extName = path.extname(relPath);
-
-        var elem = new et.Element('Reference');
-        // add dll file name
-        elem.attrib.Include = path.basename(relPath, extName);
-        // add hint path with full path
-        var hint_path = new et.Element('HintPath');
-        hint_path.text = relPath;
-        elem.append(hint_path);
-
-        if (extName === '.winmd') {
-            var mdFileTag = new et.Element('IsWinMDFile');
-            mdFileTag.text = 'true';
-            elem.append(mdFileTag);
-        }
-
-        item.append(elem);
-
-        this.xml.getroot().append(item);
-    },
-
-    removeReference: function (relPath) {
-        var extName = path.extname(relPath);
-        var includeText = path.basename(relPath, extName);
-        // <ItemGroup>
-        //   <Reference Include="WindowsRuntimeComponent1">
-        var item_groups = this.xml.findall('ItemGroup/Reference[@Include="' + includeText + '"]/..');
-
-        if (item_groups.length > 0) {
-            this.xml.getroot().remove(item_groups[0]);
-        }
-    },
-
-    addSourceFile: function (relative_path) {
-        // we allow multiple paths to be passed at once as array so that
-        // we don't create separate ItemGroup for each source file, CB-6874
-        if (!(relative_path instanceof Array)) {
-            relative_path = [relative_path];
-        }
-        var compile;
-        // make ItemGroup to hold file.
-        var item = new et.Element('ItemGroup');
-        var me = this;
-        relative_path.forEach(function (filePath) {
-
-            filePath = filePath.split('/').join('\\');
-            var extName = path.extname(filePath);
-            // check if it's a .xaml page
-            if (extName === '.xaml') {
-                var page = new et.Element('Page');
-                var sub_type = new et.Element('SubType');
-
-                sub_type.text = 'Designer';
-                page.append(sub_type);
-                page.attrib.Include = filePath;
-
-                var gen = new et.Element('Generator');
-                gen.text = 'MSBuild:Compile';
-                page.append(gen);
-                var item_groups = me.xml.findall('ItemGroup');
-                if (item_groups.length === 0) {
-                    item.append(page);
-                } else {
-                    item_groups[0].append(page);
-                }
-
-            } else if (extName === '.cs') {
-                compile = new et.Element('Compile');
-                compile.attrib.Include = filePath;
-                // check if it's a .xaml.cs page that would depend on a .xaml of the same name
-                if (filePath.indexOf('.xaml.cs', filePath.length - 8) > -1) {
-                    var dep = new et.Element('DependentUpon');
-                    var parts = filePath.split('\\');
-                    var xaml_file = parts[parts.length - 1].substr(0, parts[parts.length - 1].length - 3); // Benn, really !?
-                    dep.text = xaml_file;
-                    compile.append(dep);
-                }
-                item.append(compile);
-            } else { // otherwise add it normally
-                compile = new et.Element('Content');
-                compile.attrib.Include = filePath;
-                item.append(compile);
-            }
-        });
-        this.xml.getroot().append(item);
-    },
-
-    removeSourceFile: function (relative_path) {
-        var isRegexp = relative_path instanceof RegExp;
-
-        if (!isRegexp) {
-            // path.normalize(relative_path);// ??
-            relative_path = relative_path.split('/').join('\\');
-        }
-
-        var root = this.xml.getroot();
-        // iterate through all ItemGroup/Content elements and remove all items matched
-        this.xml.findall('ItemGroup').forEach(function (group) {
-            // matched files in current ItemGroup
-            var filesToRemove = group.findall('Compile').concat(group.findall('Page'))
-                .concat(group.findall('Content')).filter(function (item) {
-                    if (!item.attrib.Include) return false;
-                    return isRegexp ? item.attrib.Include.match(relative_path) :
-                        item.attrib.Include === relative_path;
-                });
-
-            // nothing to remove, skip..
-            if (filesToRemove.length < 1) return;
-
-            filesToRemove.forEach(function (file) {
-                // remove file reference
-                group.remove(file);
-            });
-
-            // remove ItemGroup if empty
-            if (group.findall('*').length < 1) {
-                root.remove(group);
-            }
-        });
-    }
-};
-
-module.exports = csproj;
diff --git a/src/util/windows/jsprojManager.js b/src/util/windows/jsprojManager.js
deleted file mode 100644
index c0aec68..0000000
--- a/src/util/windows/jsprojManager.js
+++ /dev/null
@@ -1,588 +0,0 @@
-/**
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements.  See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership.  The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License.  You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied.  See the License for the
- specific language governing permissions and limitations
- under the License.
- */
-
-/*
- Helper for dealing with Windows Store JS app .jsproj files
- */
-
-var util = require('util');
-var xml_helpers = require('cordova-common').xmlHelpers;
-var et = require('elementtree');
-var fs = require('fs');
-var glob = require('glob');
-var shell = require('shelljs');
-var events = require('cordova-common').events;
-var path = require('path');
-var semver = require('semver');
-
-var WinCSharpProjectTypeGUID = '{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}'; // .csproj
-var WinCplusplusProjectTypeGUID = '{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}'; // .vcxproj
-
-/* eslint-disable no-useless-escape */
-
-// Match a JavaScript Project
-var JsProjectRegEx = /(Project\("\{262852C6-CD72-467D-83FE-5EEB1973A190}"\)\s*=\s*"[^"]+",\s*"[^"]+",\s*"\{[0-9a-f\-]+}"[^\r\n]*[\r\n]*)/gi;
-
-// Chars in a string that need to be escaped when used in a RegExp
-var RegExpEscRegExp = /([.?*+\^$\[\]\\(){}|\-])/g;
-
-function jsprojManager (location) {
-    this.isUniversalWindowsApp = path.extname(location).toLowerCase() === '.projitems';
-    this.projects = [];
-    this.master = this.isUniversalWindowsApp ? new proj(location) : new jsproj(location); // eslint-disable-line new-cap
-    this.projectFolder = path.dirname(location);
-}
-/* eslint-enable no-useless-escape */
-
-function getProjectName (pluginProjectXML, relative_path) {
-    var projNameElt = pluginProjectXML.find('PropertyGroup/ProjectName');
-    // Falling back on project file name in case ProjectName is missing
-    return projNameElt ? projNameElt.text : path.basename(relative_path, path.extname(relative_path));
-}
-
-jsprojManager.prototype = {
-    _projects: null,
-
-    write: function () {
-        this.master.write();
-        if (this._projects) {
-            var that = this;
-            this._projects.forEach(function (project) {
-                if (project !== that.master && project.touched) {
-                    project.write();
-                }
-            });
-        }
-    },
-
-    addSDKRef: function (incText, targetConditions) {
-        events.emit('verbose', 'jsprojManager.addSDKRef(incText: ' + incText + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
-
-        var item = createItemGroupElement('ItemGroup/SDKReference', incText, targetConditions);
-        this._getMatchingProjects(targetConditions).forEach(function (project) {
-            project.appendToRoot(item);
-        });
-    },
-
-    removeSDKRef: function (incText, targetConditions) {
-        events.emit('verbose', 'jsprojManager.removeSDKRef(incText: ' + incText + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
-
-        this._getMatchingProjects(targetConditions).forEach(function (project) {
-            project.removeItemGroupElement('ItemGroup/SDKReference', incText, targetConditions);
-        });
-    },
-
-    addResourceFileToProject: function (relPath, targetConditions) {
-        events.emit('verbose', 'jsprojManager.addResourceFile(relPath: ' + relPath + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
-
-        // add hint path with full path
-        var link = new et.Element('Link');
-        link.text = relPath;
-        var children = [link];
-
-        var copyToOutputDirectory = new et.Element('CopyToOutputDirectory');
-        copyToOutputDirectory.text = 'Always';
-        children.push(copyToOutputDirectory);
-
-        var item = createItemGroupElement('ItemGroup/Content', relPath, targetConditions, children);
-        this._getMatchingProjects(targetConditions).forEach(function (project) {
-            project.appendToRoot(item);
-        });
-    },
-
-    removeResourceFileFromProject: function (relPath, targetConditions) {
-        events.emit('verbose', 'jsprojManager.removeResourceFile(relPath: ' + relPath + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
-
-        this._getMatchingProjects(targetConditions).forEach(function (project) {
-            project.removeItemGroupElement('ItemGroup/Content', relPath, targetConditions);
-        });
-    },
-
-    addReference: function (relPath, targetConditions) {
-        events.emit('verbose', 'jsprojManager.addReference(incText: ' + relPath + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
-
-        // add hint path with full path
-        var hint_path = new et.Element('HintPath');
-        hint_path.text = relPath;
-        var children = [hint_path];
-
-        var extName = path.extname(relPath);
-        if (extName === '.winmd') {
-            var mdFileTag = new et.Element('IsWinMDFile');
-            mdFileTag.text = 'true';
-            children.push(mdFileTag);
-        }
-
-        var item = createItemGroupElement('ItemGroup/Reference', path.basename(relPath, extName), targetConditions, children);
-        this._getMatchingProjects(targetConditions).forEach(function (project) {
-            project.appendToRoot(item);
-        });
-
-    },
-
-    removeReference: function (relPath, targetConditions) {
-        events.emit('verbose', 'jsprojManager.removeReference(incText: ' + relPath + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
-
-        var extName = path.extname(relPath);
-        var includeText = path.basename(relPath, extName);
-
-        this._getMatchingProjects(targetConditions).forEach(function (project) {
-            project.removeItemGroupElement('ItemGroup/Reference', includeText, targetConditions);
-        });
-    },
-
-    addSourceFile: function (relative_path) {
-        events.emit('verbose', 'jsprojManager.addSourceFile(relative_path: ' + relative_path + ')');
-        this.master.addSourceFile(relative_path);
-    },
-
-    removeSourceFile: function (relative_path) {
-        events.emit('verbose', 'jsprojManager.removeSourceFile(incText: ' + relative_path + ')');
-        this.master.removeSourceFile(relative_path);
-    },
-
-    addProjectReference: function (relative_path, targetConditions) {
-        events.emit('verbose', 'jsprojManager.addProjectReference(incText: ' + relative_path + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
-
-        // relative_path is the actual path to the file in the current OS, where-as inserted_path is what we write in
-        // the project file, and is always in Windows format.
-        relative_path = path.normalize(relative_path);
-        var inserted_path = relative_path.split('/').join('\\');
-
-        var pluginProjectXML = xml_helpers.parseElementtreeSync(relative_path);
-
-        // find the guid + name of the referenced project
-        var projectGuid = pluginProjectXML.find('PropertyGroup/ProjectGuid').text;
-        var projName = getProjectName(pluginProjectXML, relative_path);
-
-        // get the project type
-        var projectTypeGuid = getProjectTypeGuid(relative_path);
-        if (!projectTypeGuid) {
-            throw new Error('unrecognized project type');
-        }
-
-        var preInsertText = '\tProjectSection(ProjectDependencies) = postProject\r\n' +
-            '\t\t' + projectGuid + '=' + projectGuid + '\r\n' +
-            '\tEndProjectSection\r\n';
-        var postInsertText = '\r\nProject("' + projectTypeGuid + '") = "' +
-            projName + '", "' + inserted_path + '", ' +
-            '"' + projectGuid + '"\r\nEndProject';
-
-        var matchingProjects = this._getMatchingProjects(targetConditions);
-        if (matchingProjects.length === 0) {
-            // No projects meet the specified target and version criteria, so nothing to do.
-            return;
-        }
-
-        // Will we be writing into the .projitems file rather than individual .jsproj files?
-        var useProjItems = this.isUniversalWindowsApp && matchingProjects.length === 1 && matchingProjects[0] === this.master;
-
-        // There may be multiple solution files (for different VS versions) - process them all
-        getSolutionPaths(this.projectFolder).forEach(function (solutionPath) {
-            var solText = fs.readFileSync(solutionPath, {encoding: 'utf8'});
-
-            if (useProjItems) {
-                // Insert a project dependency into every jsproj in the solution.
-                var jsProjectFound = false;
-                solText = solText.replace(JsProjectRegEx, function (match) {
-                    jsProjectFound = true;
-                    return match + preInsertText;
-                });
-
-                if (!jsProjectFound) {
-                    throw new Error('no jsproj found in solution');
-                }
-            } else {
-                // Insert a project dependency only for projects that match specified target and version
-                matchingProjects.forEach(function (project) {
-                    solText = solText.replace(getJsProjRegExForProject(path.basename(project.location)), function (match) {
-                        return match + preInsertText;
-                    });
-                });
-            }
-
-            // Add the project after existing projects. Note that this fairly simplistic check should be fine, since the last
-            // EndProject in the file should actually be an EndProject (and not an EndProjectSection, for example).
-            var pos = solText.lastIndexOf('EndProject');
-            if (pos === -1) {
-                throw new Error('no EndProject found in solution');
-            }
-            pos += 10; // Move pos to the end of EndProject text
-            solText = solText.slice(0, pos) + postInsertText + solText.slice(pos);
-
-            fs.writeFileSync(solutionPath, solText, {encoding: 'utf8'});
-        });
-
-        // Add the ItemGroup/ProjectReference to each matching cordova project :
-        // <ItemGroup><ProjectReference Include="blahblah.csproj"/></ItemGroup>
-        var item = createItemGroupElement('ItemGroup/ProjectReference', inserted_path, targetConditions);
-        matchingProjects.forEach(function (project) {
-            project.appendToRoot(item);
-        });
-    },
-
-    removeProjectReference: function (relative_path, targetConditions) {
-        events.emit('verbose', 'jsprojManager.removeProjectReference(incText: ' + relative_path + ', targetConditions: ' + JSON.stringify(targetConditions) + ')');
-
-        // relative_path is the actual path to the file in the current OS, where-as inserted_path is what we write in
-        // the project file, and is always in Windows format.
-        relative_path = path.normalize(relative_path);
-        var inserted_path = relative_path.split('/').join('\\');
-
-        // find the guid + name of the referenced project
-        var pluginProjectXML = xml_helpers.parseElementtreeSync(relative_path);
-        var projectGuid = pluginProjectXML.find('PropertyGroup/ProjectGuid').text;
-        var projName = getProjectName(pluginProjectXML, relative_path);
-
-        // get the project type
-        var projectTypeGuid = getProjectTypeGuid(relative_path);
-        if (!projectTypeGuid) {
-            throw new Error('unrecognized project type');
-        }
-
-        var preInsertTextRegExp = getProjectReferencePreInsertRegExp(projectGuid);
-        var postInsertTextRegExp = getProjectReferencePostInsertRegExp(projName, projectGuid, inserted_path, projectTypeGuid);
-
-        // There may be multiple solutions (for different VS versions) - process them all
-        getSolutionPaths(this.projectFolder).forEach(function (solutionPath) {
-            var solText = fs.readFileSync(solutionPath, {encoding: 'utf8'});
-
-            // To be safe (to handle subtle changes in formatting, for example), use a RegExp to find and remove
-            // preInsertText and postInsertText
-
-            solText = solText.replace(preInsertTextRegExp, function () {
-                return '';
-            });
-
-            solText = solText.replace(postInsertTextRegExp, function () {
-                return '';
-            });
-
-            fs.writeFileSync(solutionPath, solText, {encoding: 'utf8'});
-        });
-
-        this._getMatchingProjects(targetConditions).forEach(function (project) {
-            project.removeItemGroupElement('ItemGroup/ProjectReference', inserted_path, targetConditions);
-        });
-    },
-
-    _getMatchingProjects: function (targetConditions) {
-        // If specified, target can be 'all' (default), 'phone' or 'windows'. Ultimately should probably allow a comma
-        // separated list, but not needed now.
-        var target = getDeviceTarget(targetConditions);
-        var versions = getVersions(targetConditions);
-
-        if (target || versions) {
-            var matchingProjects = this.projects.filter(function (project) {
-                return (!target || target === project.target) &&
-                    (!versions || semver.satisfies(project.getSemVersion(), versions, /* loose */ true));
-            });
-
-            if (matchingProjects.length < this.projects.length) {
-                return matchingProjects;
-            }
-        }
-
-        // All projects match. If this is a universal project, return the projitems file. Otherwise return our single
-        // project.
-        return [this.master];
-    },
-
-    get projects () {
-        var projects = this._projects;
-        if (!projects) {
-            projects = [];
-            this._projects = projects;
-
-            if (this.isUniversalWindowsApp) {
-                var projectPath = this.projectFolder;
-                var projectFiles = glob.sync('*.jsproj', {cwd: projectPath});
-                projectFiles.forEach(function (projectFile) {
-                    projects.push(new jsproj(path.join(projectPath, projectFile))); // eslint-disable-line new-cap
-                });
-            } else {
-                this.projects.push(this.master);
-            }
-        }
-
-        return projects;
-    }
-};
-
-function getProjectReferencePreInsertRegExp (projectGuid) {
-    projectGuid = escapeRegExpString(projectGuid);
-    return new RegExp('\\s*ProjectSection\\(ProjectDependencies\\)\\s*=\\s*postProject\\s*' + projectGuid + '\\s*=\\s*' + projectGuid + '\\s*EndProjectSection', 'gi');
-}
-
-function getProjectReferencePostInsertRegExp (projName, projectGuid, relative_path, projectTypeGuid) {
-    projName = escapeRegExpString(projName);
-    projectGuid = escapeRegExpString(projectGuid);
-    relative_path = escapeRegExpString(relative_path);
-    projectTypeGuid = escapeRegExpString(projectTypeGuid);
-    return new RegExp('\\s*Project\\("' + projectTypeGuid + '"\\)\\s*=\\s*"' + projName + '"\\s*,\\s*"' + relative_path + '"\\s*,\\s*"' + projectGuid + '"\\s*EndProject', 'gi');
-}
-
-function getSolutionPaths (projectFolder) {
-    return shell.ls(path.join(projectFolder, '*.sln')); // TODO:error handling
-}
-
-function escapeRegExpString (regExpString) {
-    return regExpString.replace(RegExpEscRegExp, '\\$1');
-}
-
-function getJsProjRegExForProject (projectFile) {
-    projectFile = escapeRegExpString(projectFile);
-    return new RegExp('(Project\\("\\{262852C6-CD72-467D-83FE-5EEB1973A190}"\\)\\s*=\\s*"[^"]+",\\s*"' + projectFile + '",\\s*"\\{[0-9a-f\\-]+}"[^\\r\\n]*[\\r\\n]*)', 'gi');
-}
-
-function getProjectTypeGuid (projectPath) {
-    switch (path.extname(projectPath)) {
-    case '.vcxproj':
-        return WinCplusplusProjectTypeGUID;
-
-    case '.csproj':
-        return WinCSharpProjectTypeGUID;
-    }
-    return null;
-}
-
-function createItemGroupElement (path, incText, targetConditions, children) {
-    path = path.split('/');
-    path.reverse();
-
-    var lastElement = null;
-    path.forEach(function (elementName) {
-        var element = new et.Element(elementName);
-        if (lastElement) {
-            element.append(lastElement);
-        } else {
-            element.attrib.Include = incText;
-
-            var condition = createConditionAttrib(targetConditions);
-            if (condition) {
-                element.attrib.Condition = condition;
-            }
-
-            if (children) {
-                children.forEach(function (child) {
-                    element.append(child);
-                });
-            }
-        }
-        lastElement = element;
-    });
-
-    return lastElement;
-}
-
-function getDeviceTarget (targetConditions) {
-    var target = targetConditions.deviceTarget;
-    if (target) {
-        target = target.toLowerCase().trim();
-        if (target === 'all') {
-            target = null;
-        } else if (target === 'win') {
-            // Allow "win" as alternative to "windows"
-            target = 'windows';
-        } else if (target !== 'phone' && target !== 'windows') {
-            throw new Error('Invalid device-target attribute (must be "all", "phone", "windows" or "win"): ' + target);
-        }
-    }
-    return target;
-}
-
-function getVersions (targetConditions) {
-    var versions = targetConditions.versions;
-    if (versions && !semver.validRange(versions, /* loose */ true)) {
-        throw new Error('Invalid versions attribute (must be a valid semantic version range): ' + versions);
-    }
-    return versions;
-}
-
-/* proj */
-
-function proj (location) {
-    // Class to handle simple project xml operations
-    if (!location) {
-        throw new Error('Project file location can\'t be null or empty');
-    }
-    this.location = location;
-    this.xml = xml_helpers.parseElementtreeSync(location);
-}
-
-proj.prototype = {
-    write: function () {
-        fs.writeFileSync(this.location, this.xml.write({indent: 4}), 'utf-8');
-    },
-
-    appendToRoot: function (element) {
-        this.touched = true;
-        this.xml.getroot().append(element);
-    },
-
-    removeItemGroupElement: function (path, incText, targetConditions) {
-        var xpath = path + '[@Include="' + incText + '"]';
-        var condition = createConditionAttrib(targetConditions);
-        if (condition) {
-            xpath += '[@Condition="' + condition + '"]';
-        }
-        xpath += '/..';
-
-        var itemGroup = this.xml.find(xpath);
-        if (itemGroup) {
-            this.touched = true;
-            this.xml.getroot().remove(itemGroup);
-        }
-    },
-
-    addSourceFile: function (relative_path) {
-        // we allow multiple paths to be passed at once as array so that
-        // we don't create separate ItemGroup for each source file, CB-6874
-        if (!(relative_path instanceof Array)) {
-            relative_path = [relative_path];
-        }
-
-        // make ItemGroup to hold file.
-        var item = new et.Element('ItemGroup');
-
-        relative_path.forEach(function (filePath) {
-            // filePath is never used to find the actual file - it determines what we write to the project file, and so
-            // should always be in Windows format.
-            filePath = filePath.split('/').join('\\');
-
-            var content = new et.Element('Content');
-            content.attrib.Include = filePath;
-            item.append(content);
-        });
-
-        this.appendToRoot(item);
-    },
-
-    removeSourceFile: function (relative_path) {
-        var isRegexp = relative_path instanceof RegExp;
-        if (!isRegexp) {
-            // relative_path is never used to find the actual file - it determines what we write to the project file,
-            // and so should always be in Windows format.
-            relative_path = relative_path.split('/').join('\\');
-        }
-
-        var root = this.xml.getroot();
-        var that = this;
-        // iterate through all ItemGroup/Content elements and remove all items matched
-        this.xml.findall('ItemGroup').forEach(function (group) {
-            // matched files in current ItemGroup
-            var filesToRemove = group.findall('Content').filter(function (item) {
-                if (!item.attrib.Include) {
-                    return false;
-                }
-                return isRegexp ? item.attrib.Include.match(relative_path) : item.attrib.Include === relative_path;
-            });
-
-            // nothing to remove, skip..
-            if (filesToRemove.length < 1) {
-                return;
-            }
-
-            filesToRemove.forEach(function (file) {
-                // remove file reference
-                group.remove(file);
-            });
-            // remove ItemGroup if empty
-            if (group.findall('*').length < 1) {
-                that.touched = true;
-                root.remove(group);
-            }
-        });
-    }
-};
-
-/* jsproj */
-
-function jsproj (location) {
-    function targetPlatformIdentifierToDevice (jsprojPlatform) {
-        var index = ['Windows', 'WindowsPhoneApp', 'UAP'].indexOf(jsprojPlatform);
-        if (index < 0) {
-            throw new Error("Unknown TargetPlatformIdentifier '" + jsprojPlatform + "' in project file '" + location + "'");
-        }
-        return ['windows', 'phone', 'windows'][index];
-    }
-
-    function validateVersion (version) {
-        version = version.split('.');
-        while (version.length < 3) {
-            version.push('0');
-        }
-        return version.join('.');
-    }
-
-    // Class to handle a jsproj file
-    proj.call(this, location);
-
-    var propertyGroup = this.xml.find('PropertyGroup[TargetPlatformIdentifier]');
-    if (!propertyGroup) {
-        throw new Error("Unable to find PropertyGroup/TargetPlatformIdentifier in project file '" + this.location + "'");
-    }
-
-    var jsprojPlatform = propertyGroup.find('TargetPlatformIdentifier').text;
-    this.target = targetPlatformIdentifierToDevice(jsprojPlatform);
-
-    var version = propertyGroup.find('TargetPlatformVersion');
-    if (!version) {
-        throw new Error("Unable to find PropertyGroup/TargetPlatformVersion in project file '" + this.location + "'");
-    }
-    this.version = validateVersion(version.text);
-}
-
-util.inherits(jsproj, proj);
-
-jsproj.prototype.target = null;
-jsproj.prototype.version = null;
-
-// Returns valid semantic version (http://semver.org/).
-jsproj.prototype.getSemVersion = function () {
-    // For example, for version 10.0.10240.0 we will return 10.0.10240 (first three components)
-    var semVersion = this.version;
-    var splittedVersion = semVersion.split('.');
-    if (splittedVersion.length > 3) {
-        semVersion = splittedVersion.splice(0, 3).join('.');
-    }
-
-    return semVersion;
-    // Alternative approach could be replacing last dot with plus sign to
-    // be complaint w/ semver specification, for example
-    // 10.0.10240.0 -> 10.0.10240+0
-};
-
-/* Common support functions */
-
-function createConditionAttrib (targetConditions) {
-    var arch = targetConditions.arch;
-    if (arch) {
-        if (arch === 'arm') {
-            // Specifcally allow "arm" as alternative to "ARM"
-            arch = 'ARM';
-        } else if (arch !== 'x86' && arch !== 'x64' && arch !== 'ARM') {
-            throw new Error('Invalid arch attribute (must be "x86", "x64" or "ARM"): ' + arch);
-        }
-        return "'$(Platform)'=='" + arch + "'";
-    }
-    return null;
-}
-
-module.exports = jsprojManager;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org