This is an automated email from the ASF dual-hosted git repository.

erisu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-ios.git


The following commit(s) were added to refs/heads/master by this push:
     new 72a09a8  build: build cordova.js during npm prepare (#1197)
72a09a8 is described below

commit 72a09a89b4e9a2f581e5e57a65171a1b7f7d900f
Author: エリス <er...@users.noreply.github.com>
AuthorDate: Wed Nov 17 00:26:15 2021 +0900

    build: build cordova.js during npm prepare (#1197)
    
    * build: build cordova.js during npm prepare w/ refactor
    * chore: apply copySync suggestion
    * dep: move cordova-js as devDep
    
    Co-authored-by: Raphael von der Grün <raphine...@gmail.com>
---
 .eslintignore                                      |    1 -
 .gitignore                                         |    1 +
 .npmignore                                         |    1 +
 Cordova.podspec                                    |    2 +-
 CordovaLib/cordova.js                              | 2104 --------------------
 bin/lib/create.js                                  |    9 +-
 package-lock.json                                  |  323 ++-
 package.json                                       |    2 +
 .../CordovaLibTests.xcodeproj/project.pbxproj      |    4 +-
 9 files changed, 261 insertions(+), 2186 deletions(-)

diff --git a/.eslintignore b/.eslintignore
index da46810..27c0ed5 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,7 +1,6 @@
 bin/node_modules/*
 templates/project/*
 tests/spec/unit/fixtures/*
-CordovaLib/cordova.js
 
 # Non-JS binaries
 bin/cordova_plist_to_config_xml
diff --git a/.gitignore b/.gitignore
index 4ce9281..ffa3d51 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,4 @@ node_modules
 coverage/
 npm-debug.log
 .nyc_output/
+**/www/cordova.js
diff --git a/.npmignore b/.npmignore
index a1655ae..5b50bcd 100644
--- a/.npmignore
+++ b/.npmignore
@@ -16,3 +16,4 @@ guides
 hooks
 Cordova.podspec
 update_podspec.sh
+cordova-js-src
diff --git a/Cordova.podspec b/Cordova.podspec
index 96d9a8d..5283dec 100644
--- a/Cordova.podspec
+++ b/Cordova.podspec
@@ -34,7 +34,7 @@ Pod::Spec.new do |s|
   s.platform            = :ios, "11.0"
   s.source              = relSource
   s.requires_arc        = true
-  s.preserve_paths      = 'CordovaLib/cordova.js', 'CordovaLib/VERSION'
+  s.preserve_paths      = 'CordovaLib/VERSION'
   s.frameworks          = 'Foundation'
   s.source_files        = 'CordovaLib/**/*.{h,m}'
   s.public_header_files = 'CordovaLib/include/**/*.h'
diff --git a/CordovaLib/cordova.js b/CordovaLib/cordova.js
deleted file mode 100644
index 2b035af..0000000
--- a/CordovaLib/cordova.js
+++ /dev/null
@@ -1,2104 +0,0 @@
-// Platform: ios
-// cordova-js rel/6.0.0-10-g07379820
-/*
- 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.
-*/
-;(function() {
-var PLATFORM_VERSION_BUILD_LABEL = '7.0.0-dev';
-// file: src/scripts/require.js
-var require;
-var define;
-
-(function () {
-    var modules = {};
-    // Stack of moduleIds currently being built.
-    var requireStack = [];
-    // Map of module ID -> index into requireStack of modules currently being 
built.
-    var inProgressModules = {};
-    var SEPARATOR = '.';
-
-    function build (module) {
-        var factory = module.factory;
-        var localRequire = function (id) {
-            var resultantId = id;
-            // Its a relative path, so lop off the last portion and add the id 
(minus "./")
-            if (id.charAt(0) === '.') {
-                resultantId = module.id.slice(0, 
module.id.lastIndexOf(SEPARATOR)) + SEPARATOR + id.slice(2);
-            }
-            return require(resultantId);
-        };
-        module.exports = {};
-        delete module.factory;
-        factory(localRequire, module.exports, module);
-        return module.exports;
-    }
-
-    require = function (id) {
-        if (!modules[id]) {
-            throw new Error('module ' + id + ' not found');
-        } else if (id in inProgressModules) {
-            var cycle = requireStack.slice(inProgressModules[id]).join('->') + 
'->' + id;
-            throw new Error('Cycle in require graph: ' + cycle);
-        }
-        if (modules[id].factory) {
-            try {
-                inProgressModules[id] = requireStack.length;
-                requireStack.push(id);
-                return build(modules[id]);
-            } finally {
-                delete inProgressModules[id];
-                requireStack.pop();
-            }
-        }
-        return modules[id].exports;
-    };
-
-    define = function (id, factory) {
-        if (Object.prototype.hasOwnProperty.call(modules, id)) {
-            throw new Error('module ' + id + ' already defined');
-        }
-
-        modules[id] = {
-            id: id,
-            factory: factory
-        };
-    };
-
-    define.remove = function (id) {
-        delete modules[id];
-    };
-
-    define.moduleMap = modules;
-})();
-
-// Export for use in node
-if (typeof module === 'object' && typeof require === 'function') {
-    module.exports.require = require;
-    module.exports.define = define;
-}
-
-// file: src/cordova.js
-define("cordova", function(require, exports, module) {
-
-// Workaround for Windows 10 in hosted environment case
-// 
http://www.w3.org/html/wg/drafts/html/master/browsers.html#named-access-on-the-window-object
-if (window.cordova && !(window.cordova instanceof HTMLElement)) {
-    throw new Error('cordova already defined');
-}
-
-var channel = require('cordova/channel');
-var platform = require('cordova/platform');
-
-/**
- * Intercept calls to addEventListener + removeEventListener and handle 
deviceready,
- * resume, and pause events.
- */
-var m_document_addEventListener = document.addEventListener;
-var m_document_removeEventListener = document.removeEventListener;
-var m_window_addEventListener = window.addEventListener;
-var m_window_removeEventListener = window.removeEventListener;
-
-/**
- * Houses custom event handlers to intercept on document + window event 
listeners.
- */
-var documentEventHandlers = {};
-var windowEventHandlers = {};
-
-document.addEventListener = function (evt, handler, capture) {
-    var e = evt.toLowerCase();
-    if (typeof documentEventHandlers[e] !== 'undefined') {
-        documentEventHandlers[e].subscribe(handler);
-    } else {
-        m_document_addEventListener.call(document, evt, handler, capture);
-    }
-};
-
-window.addEventListener = function (evt, handler, capture) {
-    var e = evt.toLowerCase();
-    if (typeof windowEventHandlers[e] !== 'undefined') {
-        windowEventHandlers[e].subscribe(handler);
-    } else {
-        m_window_addEventListener.call(window, evt, handler, capture);
-    }
-};
-
-document.removeEventListener = function (evt, handler, capture) {
-    var e = evt.toLowerCase();
-    // If unsubscribing from an event that is handled by a plugin
-    if (typeof documentEventHandlers[e] !== 'undefined') {
-        documentEventHandlers[e].unsubscribe(handler);
-    } else {
-        m_document_removeEventListener.call(document, evt, handler, capture);
-    }
-};
-
-window.removeEventListener = function (evt, handler, capture) {
-    var e = evt.toLowerCase();
-    // If unsubscribing from an event that is handled by a plugin
-    if (typeof windowEventHandlers[e] !== 'undefined') {
-        windowEventHandlers[e].unsubscribe(handler);
-    } else {
-        m_window_removeEventListener.call(window, evt, handler, capture);
-    }
-};
-
-function createEvent (type, data) {
-    var event = document.createEvent('Events');
-    event.initEvent(type, false, false);
-    if (data) {
-        for (var i in data) {
-            if (Object.prototype.hasOwnProperty.call(data, i)) {
-                event[i] = data[i];
-            }
-        }
-    }
-    return event;
-}
-
-var cordova = {
-    define: define,
-    require: require,
-    version: PLATFORM_VERSION_BUILD_LABEL,
-    platformVersion: PLATFORM_VERSION_BUILD_LABEL,
-    platformId: platform.id,
-
-    /**
-     * Methods to add/remove your own addEventListener hijacking on document + 
window.
-     */
-    addWindowEventHandler: function (event) {
-        return (windowEventHandlers[event] = channel.create(event));
-    },
-    addStickyDocumentEventHandler: function (event) {
-        return (documentEventHandlers[event] = channel.createSticky(event));
-    },
-    addDocumentEventHandler: function (event) {
-        return (documentEventHandlers[event] = channel.create(event));
-    },
-    removeWindowEventHandler: function (event) {
-        delete windowEventHandlers[event];
-    },
-    removeDocumentEventHandler: function (event) {
-        delete documentEventHandlers[event];
-    },
-
-    /**
-     * Retrieve original event handlers that were replaced by Cordova
-     *
-     * @return object
-     */
-    getOriginalHandlers: function () {
-        return {
-            document: {
-                addEventListener: m_document_addEventListener,
-                removeEventListener: m_document_removeEventListener
-            },
-            window: {
-                addEventListener: m_window_addEventListener,
-                removeEventListener: m_window_removeEventListener
-            }
-        };
-    },
-
-    /**
-     * Method to fire event from native code
-     * bNoDetach is required for events which cause an exception which needs 
to be caught in native code
-     */
-    fireDocumentEvent: function (type, data, bNoDetach) {
-        var evt = createEvent(type, data);
-        if (typeof documentEventHandlers[type] !== 'undefined') {
-            if (bNoDetach) {
-                documentEventHandlers[type].fire(evt);
-            } else {
-                setTimeout(function () {
-                    // Fire deviceready on listeners that were registered 
before cordova.js was loaded.
-                    if (type === 'deviceready') {
-                        document.dispatchEvent(evt);
-                    }
-                    documentEventHandlers[type].fire(evt);
-                }, 0);
-            }
-        } else {
-            document.dispatchEvent(evt);
-        }
-    },
-
-    fireWindowEvent: function (type, data) {
-        var evt = createEvent(type, data);
-        if (typeof windowEventHandlers[type] !== 'undefined') {
-            setTimeout(function () {
-                windowEventHandlers[type].fire(evt);
-            }, 0);
-        } else {
-            window.dispatchEvent(evt);
-        }
-    },
-
-    /**
-     * Plugin callback mechanism.
-     */
-    // Randomize the starting callbackId to avoid collisions after refreshing 
or navigating.
-    // This way, it's very unlikely that any new callback would get the same 
callbackId as an old callback.
-    callbackId: Math.floor(Math.random() * 2000000000),
-    callbacks: {},
-    callbackStatus: {
-        NO_RESULT: 0,
-        OK: 1,
-        CLASS_NOT_FOUND_EXCEPTION: 2,
-        ILLEGAL_ACCESS_EXCEPTION: 3,
-        INSTANTIATION_EXCEPTION: 4,
-        MALFORMED_URL_EXCEPTION: 5,
-        IO_EXCEPTION: 6,
-        INVALID_ACTION: 7,
-        JSON_EXCEPTION: 8,
-        ERROR: 9
-    },
-
-    /**
-     * Called by native code when returning successful result from an action.
-     */
-    callbackSuccess: function (callbackId, args) {
-        cordova.callbackFromNative(callbackId, true, args.status, 
[args.message], args.keepCallback);
-    },
-
-    /**
-     * Called by native code when returning error result from an action.
-     */
-    callbackError: function (callbackId, args) {
-        // TODO: Deprecate callbackSuccess and callbackError in favour of 
callbackFromNative.
-        // Derive success from status.
-        cordova.callbackFromNative(callbackId, false, args.status, 
[args.message], args.keepCallback);
-    },
-
-    /**
-     * Called by native code when returning the result from an action.
-     */
-    callbackFromNative: function (callbackId, isSuccess, status, args, 
keepCallback) {
-        try {
-            var callback = cordova.callbacks[callbackId];
-            if (callback) {
-                if (isSuccess && status === cordova.callbackStatus.OK) {
-                    callback.success && callback.success.apply(null, args);
-                } else if (!isSuccess) {
-                    callback.fail && callback.fail.apply(null, args);
-                }
-                /*
-                else
-                    Note, this case is intentionally not caught.
-                    this can happen if isSuccess is true, but callbackStatus 
is NO_RESULT
-                    which is used to remove a callback from the list without 
calling the callbacks
-                    typically keepCallback is false in this case
-                */
-                // Clear callback if not expecting any more results
-                if (!keepCallback) {
-                    delete cordova.callbacks[callbackId];
-                }
-            }
-        } catch (err) {
-            var msg = 'Error in ' + (isSuccess ? 'Success' : 'Error') + ' 
callbackId: ' + callbackId + ' : ' + err;
-            cordova.fireWindowEvent('cordovacallbackerror', { message: msg, 
error: err });
-            throw err;
-        }
-    },
-
-    addConstructor: function (func) {
-        channel.onCordovaReady.subscribe(function () {
-            try {
-                func();
-            } catch (e) {
-                console.log('Failed to run constructor: ' + e);
-            }
-        });
-    }
-};
-
-module.exports = cordova;
-
-});
-
-// file: src/common/argscheck.js
-define("cordova/argscheck", function(require, exports, module) {
-
-var utils = require('cordova/utils');
-
-var moduleExports = module.exports;
-
-var typeMap = {
-    A: 'Array',
-    D: 'Date',
-    N: 'Number',
-    S: 'String',
-    F: 'Function',
-    O: 'Object'
-};
-
-function extractParamName (callee, argIndex) {
-    return (/\(\s*([^)]*?)\s*\)/).exec(callee)[1].split(/\s*,\s*/)[argIndex];
-}
-
-/**
- * Checks the given arguments' types and throws if they are not as expected.
- *
- * `spec` is a string where each character stands for the required type of the
- * argument at the same position. In other words: the character at `spec[i]`
- * specifies the required type for `args[i]`. The characters in `spec` are the
- * first letter of the required type's name. The supported types are:
- *
- *     Array, Date, Number, String, Function, Object
- *
- * Lowercase characters specify arguments that must not be `null` or 
`undefined`
- * while uppercase characters allow those values to be passed.
- *
- * Finally, `*` can be used to allow any type at the corresponding position.
- *
- * @example
- * function foo (arr, opts) {
- *     // require `arr` to be an Array and `opts` an Object, null or undefined
- *     checkArgs('aO', 'my.package.foo', arguments);
- *     // ...
- * }
- * @param {String} spec - the type specification for `args` as described above
- * @param {String} functionName - full name of the callee.
- * Used in the error message
- * @param {Array|arguments} args - the arguments to be checked against `spec`
- * @param {Function} [opt_callee=args.callee] - the recipient of `args`.
- * Used to extract parameter names for the error message
- * @throws {TypeError} if args do not satisfy spec
- */
-function checkArgs (spec, functionName, args, opt_callee) {
-    if (!moduleExports.enableChecks) {
-        return;
-    }
-    var errMsg = null;
-    var typeName;
-    for (var i = 0; i < spec.length; ++i) {
-        var c = spec.charAt(i);
-        var cUpper = c.toUpperCase();
-        var arg = args[i];
-        // Asterix means allow anything.
-        if (c === '*') {
-            continue;
-        }
-        typeName = utils.typeName(arg);
-        if ((arg === null || arg === undefined) && c === cUpper) {
-            continue;
-        }
-        if (typeName !== typeMap[cUpper]) {
-            errMsg = 'Expected ' + typeMap[cUpper];
-            break;
-        }
-    }
-    if (errMsg) {
-        errMsg += ', but got ' + typeName + '.';
-        errMsg = 'Wrong type for parameter "' + extractParamName(opt_callee || 
args.callee, i) + '" of ' + functionName + ': ' + errMsg;
-        // Don't log when running unit tests.
-        if (typeof jasmine === 'undefined') {
-            console.error(errMsg);
-        }
-        throw TypeError(errMsg);
-    }
-}
-
-function getValue (value, defaultValue) {
-    return value === undefined ? defaultValue : value;
-}
-
-moduleExports.checkArgs = checkArgs;
-moduleExports.getValue = getValue;
-moduleExports.enableChecks = true;
-
-});
-
-// file: src/common/base64.js
-define("cordova/base64", function(require, exports, module) {
-
-var base64 = exports;
-
-base64.fromArrayBuffer = function (arrayBuffer) {
-    var array = new Uint8Array(arrayBuffer);
-    return uint8ToBase64(array);
-};
-
-base64.toArrayBuffer = function (str) {
-    var decodedStr = atob(str);
-    var arrayBuffer = new ArrayBuffer(decodedStr.length);
-    var array = new Uint8Array(arrayBuffer);
-    for (var i = 0, len = decodedStr.length; i < len; i++) {
-        array[i] = decodedStr.charCodeAt(i);
-    }
-    return arrayBuffer;
-};
-
-// 
------------------------------------------------------------------------------
-
-/* This code is based on the performance tests at http://jsperf.com/b64tests
- * This 12-bit-at-a-time algorithm was the best performing version on all
- * platforms tested.
- */
-
-var b64_6bit = 
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-var b64_12bit;
-
-var b64_12bitTable = function () {
-    b64_12bit = [];
-    for (var i = 0; i < 64; i++) {
-        for (var j = 0; j < 64; j++) {
-            b64_12bit[i * 64 + j] = b64_6bit[i] + b64_6bit[j];
-        }
-    }
-    b64_12bitTable = function () { return b64_12bit; };
-    return b64_12bit;
-};
-
-function uint8ToBase64 (rawData) {
-    var numBytes = rawData.byteLength;
-    var output = '';
-    var segment;
-    var table = b64_12bitTable();
-    for (var i = 0; i < numBytes - 2; i += 3) {
-        segment = (rawData[i] << 16) + (rawData[i + 1] << 8) + rawData[i + 2];
-        output += table[segment >> 12];
-        output += table[segment & 0xfff];
-    }
-    if (numBytes - i === 2) {
-        segment = (rawData[i] << 16) + (rawData[i + 1] << 8);
-        output += table[segment >> 12];
-        output += b64_6bit[(segment & 0xfff) >> 6];
-        output += '=';
-    } else if (numBytes - i === 1) {
-        segment = (rawData[i] << 16);
-        output += table[segment >> 12];
-        output += '==';
-    }
-    return output;
-}
-
-});
-
-// file: src/common/builder.js
-define("cordova/builder", function(require, exports, module) {
-
-var utils = require('cordova/utils');
-
-function each (objects, func, context) {
-    for (var prop in objects) {
-        if (Object.prototype.hasOwnProperty.call(objects, prop)) {
-            func.apply(context, [objects[prop], prop]);
-        }
-    }
-}
-
-function clobber (obj, key, value) {
-    var needsProperty = false;
-    try {
-        obj[key] = value;
-    } catch (e) {
-        needsProperty = true;
-    }
-    // Getters can only be overridden by getters.
-    if (needsProperty || obj[key] !== value) {
-        utils.defineGetter(obj, key, function () {
-            return value;
-        });
-    }
-}
-
-function assignOrWrapInDeprecateGetter (obj, key, value, message) {
-    if (message) {
-        utils.defineGetter(obj, key, function () {
-            console.log(message);
-            delete obj[key];
-            clobber(obj, key, value);
-            return value;
-        });
-    } else {
-        clobber(obj, key, value);
-    }
-}
-
-function include (parent, objects, clobber, merge) {
-    each(objects, function (obj, key) {
-        try {
-            var result = obj.path ? require(obj.path) : {};
-
-            if (clobber) {
-                // Clobber if it doesn't exist.
-                if (typeof parent[key] === 'undefined') {
-                    assignOrWrapInDeprecateGetter(parent, key, result, 
obj.deprecated);
-                } else if (typeof obj.path !== 'undefined') {
-                    // If merging, merge properties onto parent, otherwise, 
clobber.
-                    if (merge) {
-                        recursiveMerge(parent[key], result);
-                    } else {
-                        assignOrWrapInDeprecateGetter(parent, key, result, 
obj.deprecated);
-                    }
-                }
-                result = parent[key];
-            } else {
-                // Overwrite if not currently defined.
-                if (typeof parent[key] === 'undefined') {
-                    assignOrWrapInDeprecateGetter(parent, key, result, 
obj.deprecated);
-                } else {
-                    // Set result to what already exists, so we can build 
children into it if they exist.
-                    result = parent[key];
-                }
-            }
-
-            if (obj.children) {
-                include(result, obj.children, clobber, merge);
-            }
-        } catch (e) {
-            utils.alert('Exception building Cordova JS globals: ' + e + ' for 
key "' + key + '"');
-        }
-    });
-}
-
-/**
- * Merge properties from one object onto another recursively.  Properties from
- * the src object will overwrite existing target property.
- *
- * @param target Object to merge properties into.
- * @param src Object to merge properties from.
- */
-function recursiveMerge (target, src) {
-    for (var prop in src) {
-        if (Object.prototype.hasOwnProperty.call(src, prop)) {
-            if (target.prototype && target.prototype.constructor === target) {
-                // If the target object is a constructor override off 
prototype.
-                clobber(target.prototype, prop, src[prop]);
-            } else {
-                if (typeof src[prop] === 'object' && typeof target[prop] === 
'object') {
-                    recursiveMerge(target[prop], src[prop]);
-                } else {
-                    clobber(target, prop, src[prop]);
-                }
-            }
-        }
-    }
-}
-
-exports.buildIntoButDoNotClobber = function (objects, target) {
-    include(target, objects, false, false);
-};
-exports.buildIntoAndClobber = function (objects, target) {
-    include(target, objects, true, false);
-};
-exports.buildIntoAndMerge = function (objects, target) {
-    include(target, objects, true, true);
-};
-exports.recursiveMerge = recursiveMerge;
-exports.assignOrWrapInDeprecateGetter = assignOrWrapInDeprecateGetter;
-
-});
-
-// file: src/common/channel.js
-define("cordova/channel", function(require, exports, module) {
-
-var utils = require('cordova/utils');
-var nextGuid = 1;
-
-/**
- * Custom pub-sub "channel" that can have functions subscribed to it
- * This object is used to define and control firing of events for
- * cordova initialization, as well as for custom events thereafter.
- *
- * The order of events during page load and Cordova startup is as follows:
- *
- * onDOMContentLoaded*         Internal event that is received when the web 
page is loaded and parsed.
- * onNativeReady*              Internal event that indicates the Cordova 
native side is ready.
- * onCordovaReady*             Internal event fired when all Cordova 
JavaScript objects have been created.
- * onDeviceReady*              User event fired to indicate that Cordova is 
ready
- * onResume                    User event fired to indicate a start/resume 
lifecycle event
- * onPause                     User event fired to indicate a pause lifecycle 
event
- *
- * The events marked with an * are sticky. Once they have fired, they will 
stay in the fired state.
- * All listeners that subscribe after the event is fired will be executed 
right away.
- *
- * The only Cordova events that user code should register for are:
- *      deviceready           Cordova native code is initialized and Cordova 
APIs can be called from JavaScript
- *      pause                 App has moved to background
- *      resume                App has returned to foreground
- *
- * Listeners can be registered as:
- *      document.addEventListener("deviceready", myDeviceReadyListener, false);
- *      document.addEventListener("resume", myResumeListener, false);
- *      document.addEventListener("pause", myPauseListener, false);
- *
- * The DOM lifecycle events should be used for saving and restoring state
- *      window.onload
- *      window.onunload
- *
- */
-
-/**
- * Channel
- * @constructor
- * @param type  String the channel name
- */
-var Channel = function (type, sticky) {
-    this.type = type;
-    // Map of guid -> function.
-    this.handlers = {};
-    // 0 = Non-sticky, 1 = Sticky non-fired, 2 = Sticky fired.
-    this.state = sticky ? 1 : 0;
-    // Used in sticky mode to remember args passed to fire().
-    this.fireArgs = null;
-    // Used by onHasSubscribersChange to know if there are any listeners.
-    this.numHandlers = 0;
-    // Function that is called when the first listener is subscribed, or when
-    // the last listener is unsubscribed.
-    this.onHasSubscribersChange = null;
-};
-var channel = {
-    /**
-     * Calls the provided function only after all of the channels specified
-     * have been fired. All channels must be sticky channels.
-     */
-    join: function (h, c) {
-        var len = c.length;
-        var i = len;
-        var f = function () {
-            if (!(--i)) h();
-        };
-        for (var j = 0; j < len; j++) {
-            if (c[j].state === 0) {
-                throw Error('Can only use join with sticky channels.');
-            }
-            c[j].subscribe(f);
-        }
-        if (!len) h();
-    },
-
-    create: function (type) {
-        return (channel[type] = new Channel(type, false));
-    },
-    createSticky: function (type) {
-        return (channel[type] = new Channel(type, true));
-    },
-
-    /**
-     * cordova Channels that must fire before "deviceready" is fired.
-     */
-    deviceReadyChannelsArray: [],
-    deviceReadyChannelsMap: {},
-
-    /**
-     * Indicate that a feature needs to be initialized before it is ready to 
be used.
-     * This holds up Cordova's "deviceready" event until the feature has been 
initialized
-     * and Cordova.initComplete(feature) is called.
-     *
-     * @param feature {String}     The unique feature name
-     */
-    waitForInitialization: function (feature) {
-        if (feature) {
-            var c = channel[feature] || this.createSticky(feature);
-            this.deviceReadyChannelsMap[feature] = c;
-            this.deviceReadyChannelsArray.push(c);
-        }
-    },
-
-    /**
-     * Indicate that initialization code has completed and the feature is 
ready to be used.
-     *
-     * @param feature {String}     The unique feature name
-     */
-    initializationComplete: function (feature) {
-        var c = this.deviceReadyChannelsMap[feature];
-        if (c) {
-            c.fire();
-        }
-    }
-};
-
-function checkSubscriptionArgument (argument) {
-    if (typeof argument !== 'function' && typeof argument.handleEvent !== 
'function') {
-        throw new Error(
-            'Must provide a function or an EventListener object ' +
-                'implementing the handleEvent interface.'
-        );
-    }
-}
-
-/**
- * Subscribes the given function to the channel. Any time that
- * Channel.fire is called so too will the function.
- * Optionally specify an execution context for the function
- * and a guid that can be used to stop subscribing to the channel.
- * Returns the guid.
- */
-Channel.prototype.subscribe = function (eventListenerOrFunction, 
eventListener) {
-    checkSubscriptionArgument(eventListenerOrFunction);
-    var handleEvent, guid;
-
-    if (eventListenerOrFunction && typeof eventListenerOrFunction === 
'object') {
-        // Received an EventListener object implementing the handleEvent 
interface
-        handleEvent = eventListenerOrFunction.handleEvent;
-        eventListener = eventListenerOrFunction;
-    } else {
-        // Received a function to handle event
-        handleEvent = eventListenerOrFunction;
-    }
-
-    if (this.state === 2) {
-        handleEvent.apply(eventListener || this, this.fireArgs);
-        return;
-    }
-
-    guid = eventListenerOrFunction.observer_guid;
-    if (typeof eventListener === 'object') {
-        handleEvent = utils.close(eventListener, handleEvent);
-    }
-
-    if (!guid) {
-        // First time any channel has seen this subscriber
-        guid = '' + nextGuid++;
-    }
-    handleEvent.observer_guid = guid;
-    eventListenerOrFunction.observer_guid = guid;
-
-    // Don't add the same handler more than once.
-    if (!this.handlers[guid]) {
-        this.handlers[guid] = handleEvent;
-        this.numHandlers++;
-        if (this.numHandlers === 1) {
-            this.onHasSubscribersChange && this.onHasSubscribersChange();
-        }
-    }
-};
-
-/**
- * Unsubscribes the function with the given guid from the channel.
- */
-Channel.prototype.unsubscribe = function (eventListenerOrFunction) {
-    checkSubscriptionArgument(eventListenerOrFunction);
-    var handleEvent, guid, handler;
-
-    if (eventListenerOrFunction && typeof eventListenerOrFunction === 
'object') {
-        // Received an EventListener object implementing the handleEvent 
interface
-        handleEvent = eventListenerOrFunction.handleEvent;
-    } else {
-        // Received a function to handle event
-        handleEvent = eventListenerOrFunction;
-    }
-
-    guid = handleEvent.observer_guid;
-    handler = this.handlers[guid];
-    if (handler) {
-        delete this.handlers[guid];
-        this.numHandlers--;
-        if (this.numHandlers === 0) {
-            this.onHasSubscribersChange && this.onHasSubscribersChange();
-        }
-    }
-};
-
-/**
- * Calls all functions subscribed to this channel.
- */
-Channel.prototype.fire = function (e) {
-    var fireArgs = Array.prototype.slice.call(arguments);
-    // Apply stickiness.
-    if (this.state === 1) {
-        this.state = 2;
-        this.fireArgs = fireArgs;
-    }
-    if (this.numHandlers) {
-        // Copy the values first so that it is safe to modify it from within
-        // callbacks.
-        var toCall = [];
-        for (var item in this.handlers) {
-            toCall.push(this.handlers[item]);
-        }
-        for (var i = 0; i < toCall.length; ++i) {
-            toCall[i].apply(this, fireArgs);
-        }
-        if (this.state === 2 && this.numHandlers) {
-            this.numHandlers = 0;
-            this.handlers = {};
-            this.onHasSubscribersChange && this.onHasSubscribersChange();
-        }
-    }
-};
-
-// defining them here so they are ready super fast!
-// DOM event that is received when the web page is loaded and parsed.
-channel.createSticky('onDOMContentLoaded');
-
-// Event to indicate the Cordova native side is ready.
-channel.createSticky('onNativeReady');
-
-// Event to indicate that all Cordova JavaScript objects have been created
-// and it's time to run plugin constructors.
-channel.createSticky('onCordovaReady');
-
-// Event to indicate that all automatically loaded JS plugins are loaded and 
ready.
-// FIXME remove this
-channel.createSticky('onPluginsReady');
-
-// Event to indicate that Cordova is ready
-channel.createSticky('onDeviceReady');
-
-// Event to indicate a resume lifecycle event
-channel.create('onResume');
-
-// Event to indicate a pause lifecycle event
-channel.create('onPause');
-
-// Channels that must fire before "deviceready" is fired.
-channel.waitForInitialization('onCordovaReady');
-channel.waitForInitialization('onDOMContentLoaded');
-
-module.exports = channel;
-
-});
-
-// file: ../cordova-ios/cordova-js-src/exec.js
-define("cordova/exec", function(require, exports, module) {
-
-/**
- * Creates the exec bridge used to notify the native code of
- * commands.
- */
-var cordova = require('cordova');
-var utils = require('cordova/utils');
-var base64 = require('cordova/base64');
-
-function massageArgsJsToNative (args) {
-    if (!args || utils.typeName(args) !== 'Array') {
-        return args;
-    }
-    var ret = [];
-    args.forEach(function (arg, i) {
-        if (utils.typeName(arg) === 'ArrayBuffer') {
-            ret.push({
-                CDVType: 'ArrayBuffer',
-                data: base64.fromArrayBuffer(arg)
-            });
-        } else {
-            ret.push(arg);
-        }
-    });
-    return ret;
-}
-
-function massageMessageNativeToJs (message) {
-    if (message.CDVType === 'ArrayBuffer') {
-        var stringToArrayBuffer = function (str) {
-            var ret = new Uint8Array(str.length);
-            for (var i = 0; i < str.length; i++) {
-                ret[i] = str.charCodeAt(i);
-            }
-            return ret.buffer;
-        };
-        var base64ToArrayBuffer = function (b64) {
-            return stringToArrayBuffer(atob(b64)); // eslint-disable-line 
no-undef
-        };
-        message = base64ToArrayBuffer(message.data);
-    }
-    return message;
-}
-
-function convertMessageToArgsNativeToJs (message) {
-    var args = [];
-    if (!message || !Object.prototype.hasOwnProperty.call(message, 'CDVType')) 
{
-        args.push(message);
-    } else if (message.CDVType === 'MultiPart') {
-        message.messages.forEach(function (e) {
-            args.push(massageMessageNativeToJs(e));
-        });
-    } else {
-        args.push(massageMessageNativeToJs(message));
-    }
-    return args;
-}
-
-var iOSExec = function () {
-    var successCallback, failCallback, service, action, actionArgs;
-    var callbackId = null;
-    if (typeof arguments[0] !== 'string') {
-        // FORMAT ONE
-        successCallback = arguments[0];
-        failCallback = arguments[1];
-        service = arguments[2];
-        action = arguments[3];
-        actionArgs = arguments[4];
-
-        // Since we need to maintain backwards compatibility, we have to pass
-        // an invalid callbackId even if no callback was provided since plugins
-        // will be expecting it. The Cordova.exec() implementation allocates
-        // an invalid callbackId and passes it even if no callbacks were given.
-        callbackId = 'INVALID';
-    } else {
-           throw new Error('The old format of this exec call has been removed 
(deprecated since 2.1). Change to: ' + // eslint-disable-line
-            'cordova.exec(null, null, \'Service\', \'action\', [ arg1, arg2 
]);');
-    }
-
-    // If actionArgs is not provided, default to an empty array
-    actionArgs = actionArgs || [];
-
-    // Register the callbacks and add the callbackId to the positional
-    // arguments if given.
-    if (successCallback || failCallback) {
-        callbackId = service + cordova.callbackId++;
-        cordova.callbacks[callbackId] =
-            { success: successCallback, fail: failCallback };
-    }
-
-    actionArgs = massageArgsJsToNative(actionArgs);
-
-    // CB-10133 DataClone DOM Exception 25 guard (fast function remover)
-    var command = [callbackId, service, action, 
JSON.parse(JSON.stringify(actionArgs))];
-    window.webkit.messageHandlers.cordova.postMessage(command);
-};
-
-iOSExec.nativeCallback = function (callbackId, status, message, keepCallback, 
debug) {
-    var success = status === 0 || status === 1;
-    var args = convertMessageToArgsNativeToJs(message);
-    Promise.resolve().then(function () {
-        cordova.callbackFromNative(callbackId, success, status, args, 
keepCallback); // eslint-disable-line
-    });
-};
-
-// for backwards compatibility
-iOSExec.nativeEvalAndFetch = function (func) {
-    try {
-        func();
-    } catch (e) {
-        console.log(e);
-    }
-};
-
-// Proxy the exec for bridge changes. See CB-10106
-
-function cordovaExec () {
-    var cexec = require('cordova/exec');
-    var cexec_valid = (typeof cexec.nativeFetchMessages === 'function') && 
(typeof cexec.nativeEvalAndFetch === 'function') && (typeof 
cexec.nativeCallback === 'function');
-    return (cexec_valid && execProxy !== cexec) ? cexec : iOSExec;
-}
-
-function execProxy () {
-    cordovaExec().apply(null, arguments);
-}
-
-execProxy.nativeFetchMessages = function () {
-    return cordovaExec().nativeFetchMessages.apply(null, arguments);
-};
-
-execProxy.nativeEvalAndFetch = function () {
-    return cordovaExec().nativeEvalAndFetch.apply(null, arguments);
-};
-
-execProxy.nativeCallback = function () {
-    return cordovaExec().nativeCallback.apply(null, arguments);
-};
-
-module.exports = execProxy;
-
-});
-
-// file: src/common/exec/proxy.js
-define("cordova/exec/proxy", function(require, exports, module) {
-
-// internal map of proxy function
-var CommandProxyMap = {};
-
-module.exports = {
-
-    // example: 
cordova.commandProxy.add("Accelerometer",{getCurrentAcceleration: 
function(successCallback, errorCallback, options) {...},...);
-    add: function (id, proxyObj) {
-        console.log('adding proxy for ' + id);
-        CommandProxyMap[id] = proxyObj;
-        return proxyObj;
-    },
-
-    // cordova.commandProxy.remove("Accelerometer");
-    remove: function (id) {
-        var proxy = CommandProxyMap[id];
-        delete CommandProxyMap[id];
-        CommandProxyMap[id] = null;
-        return proxy;
-    },
-
-    get: function (service, action) {
-        return (CommandProxyMap[service] ? CommandProxyMap[service][action] : 
null);
-    }
-};
-
-});
-
-// file: src/common/init.js
-define("cordova/init", function(require, exports, module) {
-
-var channel = require('cordova/channel');
-var cordova = require('cordova');
-var modulemapper = require('cordova/modulemapper');
-var platform = require('cordova/platform');
-var pluginloader = require('cordova/pluginloader');
-
-var platformInitChannelsArray = [channel.onNativeReady, 
channel.onPluginsReady];
-
-function logUnfiredChannels (arr) {
-    for (var i = 0; i < arr.length; ++i) {
-        if (arr[i].state !== 2) {
-            console.log('Channel not fired: ' + arr[i].type);
-        }
-    }
-}
-
-window.setTimeout(function () {
-    if (channel.onDeviceReady.state !== 2) {
-        console.log('deviceready has not fired after 5 seconds.');
-        logUnfiredChannels(platformInitChannelsArray);
-        logUnfiredChannels(channel.deviceReadyChannelsArray);
-    }
-}, 5000);
-
-if (!window.console) {
-    window.console = {
-        log: function () {}
-    };
-}
-if (!window.console.warn) {
-    window.console.warn = function (msg) {
-        this.log('warn: ' + msg);
-    };
-}
-
-// Register pause, resume and deviceready channels as events on document.
-channel.onPause = cordova.addDocumentEventHandler('pause');
-channel.onResume = cordova.addDocumentEventHandler('resume');
-channel.onActivated = cordova.addDocumentEventHandler('activated');
-channel.onDeviceReady = cordova.addStickyDocumentEventHandler('deviceready');
-
-// Listen for DOMContentLoaded and notify our channel subscribers.
-if (document.readyState === 'complete' || document.readyState === 
'interactive') {
-    channel.onDOMContentLoaded.fire();
-} else {
-    document.addEventListener('DOMContentLoaded', function () {
-        channel.onDOMContentLoaded.fire();
-    }, false);
-}
-
-// _nativeReady is global variable that the native side can set
-// to signify that the native code is ready. It is a global since
-// it may be called before any cordova JS is ready.
-if (window._nativeReady) {
-    channel.onNativeReady.fire();
-}
-
-modulemapper.clobbers('cordova', 'cordova');
-modulemapper.clobbers('cordova/exec', 'cordova.exec');
-modulemapper.clobbers('cordova/exec', 'Cordova.exec');
-
-// Call the platform-specific initialization.
-platform.bootstrap && platform.bootstrap();
-
-// Wrap in a setTimeout to support the use-case of having plugin JS appended 
to cordova.js.
-// The delay allows the attached modules to be defined before the plugin 
loader looks for them.
-setTimeout(function () {
-    pluginloader.load(function () {
-        channel.onPluginsReady.fire();
-    });
-}, 0);
-
-/**
- * Create all cordova objects once native side is ready.
- */
-channel.join(function () {
-    modulemapper.mapModules(window);
-
-    platform.initialize && platform.initialize();
-
-    // Fire event to notify that all objects are created
-    channel.onCordovaReady.fire();
-
-    // Fire onDeviceReady event once page has fully loaded, all
-    // constructors have run and cordova info has been received from native
-    // side.
-    channel.join(function () {
-        require('cordova').fireDocumentEvent('deviceready');
-    }, channel.deviceReadyChannelsArray);
-}, platformInitChannelsArray);
-
-});
-
-// file: src/common/modulemapper.js
-define("cordova/modulemapper", function(require, exports, module) {
-
-var builder = require('cordova/builder');
-var moduleMap = define.moduleMap;
-var symbolList;
-var deprecationMap;
-
-exports.reset = function () {
-    symbolList = [];
-    deprecationMap = {};
-};
-
-function addEntry (strategy, moduleName, symbolPath, opt_deprecationMessage) {
-    if (!(moduleName in moduleMap)) {
-        throw new Error('Module ' + moduleName + ' does not exist.');
-    }
-    symbolList.push(strategy, moduleName, symbolPath);
-    if (opt_deprecationMessage) {
-        deprecationMap[symbolPath] = opt_deprecationMessage;
-    }
-}
-
-// Note: Android 2.3 does have Function.bind().
-exports.clobbers = function (moduleName, symbolPath, opt_deprecationMessage) {
-    addEntry('c', moduleName, symbolPath, opt_deprecationMessage);
-};
-
-exports.merges = function (moduleName, symbolPath, opt_deprecationMessage) {
-    addEntry('m', moduleName, symbolPath, opt_deprecationMessage);
-};
-
-exports.defaults = function (moduleName, symbolPath, opt_deprecationMessage) {
-    addEntry('d', moduleName, symbolPath, opt_deprecationMessage);
-};
-
-exports.runs = function (moduleName) {
-    addEntry('r', moduleName, null);
-};
-
-function prepareNamespace (symbolPath, context) {
-    if (!symbolPath) {
-        return context;
-    }
-    return symbolPath.split('.').reduce(function (cur, part) {
-        return (cur[part] = cur[part] || {});
-    }, context);
-}
-
-exports.mapModules = function (context) {
-    var origSymbols = {};
-    context.CDV_origSymbols = origSymbols;
-    for (var i = 0, len = symbolList.length; i < len; i += 3) {
-        var strategy = symbolList[i];
-        var moduleName = symbolList[i + 1];
-        var module = require(moduleName);
-        // <runs/>
-        if (strategy === 'r') {
-            continue;
-        }
-        var symbolPath = symbolList[i + 2];
-        var lastDot = symbolPath.lastIndexOf('.');
-        var namespace = symbolPath.substr(0, lastDot);
-        var lastName = symbolPath.substr(lastDot + 1);
-
-        var deprecationMsg = symbolPath in deprecationMap ? 'Access made to 
deprecated symbol: ' + symbolPath + '. ' + deprecationMsg : null;
-        var parentObj = prepareNamespace(namespace, context);
-        var target = parentObj[lastName];
-
-        if (strategy === 'm' && target) {
-            builder.recursiveMerge(target, module);
-        } else if ((strategy === 'd' && !target) || (strategy !== 'd')) {
-            if (!(symbolPath in origSymbols)) {
-                origSymbols[symbolPath] = target;
-            }
-            builder.assignOrWrapInDeprecateGetter(parentObj, lastName, module, 
deprecationMsg);
-        }
-    }
-};
-
-exports.getOriginalSymbol = function (context, symbolPath) {
-    var origSymbols = context.CDV_origSymbols;
-    if (origSymbols && (symbolPath in origSymbols)) {
-        return origSymbols[symbolPath];
-    }
-    var parts = symbolPath.split('.');
-    var obj = context;
-    for (var i = 0; i < parts.length; ++i) {
-        obj = obj && obj[parts[i]];
-    }
-    return obj;
-};
-
-exports.reset();
-
-});
-
-// file: ../cordova-ios/cordova-js-src/platform.js
-define("cordova/platform", function(require, exports, module) {
-
-module.exports = {
-    id: 'ios',
-    bootstrap: function () {
-        // Attach the console polyfill that is iOS-only to window.console
-        // see the file under plugin/ios/console.js
-        require('cordova/modulemapper').clobbers('cordova/plugin/ios/console', 
'window.console');
-
-        // Attach the wkwebkit utility to window.WkWebView
-        // see the file under plugin/ios/wkwebkit.js
-        
require('cordova/modulemapper').clobbers('cordova/plugin/ios/wkwebkit', 
'window.WkWebView');
-
-        // Attach the splashscreen utility to window.navigator.splashscreen
-        // see the file under plugin/ios/launchscreen.js
-        
require('cordova/modulemapper').clobbers('cordova/plugin/ios/launchscreen', 
'navigator.splashscreen');
-
-        require('cordova/channel').onNativeReady.fire();
-    }
-};
-
-});
-
-// file: ../cordova-ios/cordova-js-src/plugin/ios/console.js
-define("cordova/plugin/ios/console", function(require, exports, module) {
-
-// 
------------------------------------------------------------------------------
-
-var logger = require('cordova/plugin/ios/logger');
-
-// 
------------------------------------------------------------------------------
-// object that we're exporting
-// 
------------------------------------------------------------------------------
-var console = module.exports;
-
-// 
------------------------------------------------------------------------------
-// copy of the original console object
-// 
------------------------------------------------------------------------------
-var WinConsole = window.console;
-
-// 
------------------------------------------------------------------------------
-// whether to use the logger
-// 
------------------------------------------------------------------------------
-var UseLogger = false;
-
-// 
------------------------------------------------------------------------------
-// Timers
-// 
------------------------------------------------------------------------------
-var Timers = {};
-
-// 
------------------------------------------------------------------------------
-// used for unimplemented methods
-// 
------------------------------------------------------------------------------
-function noop () {}
-
-// 
------------------------------------------------------------------------------
-// used for unimplemented methods
-// 
------------------------------------------------------------------------------
-console.useLogger = function (value) {
-    if (arguments.length) UseLogger = !!value;
-
-    if (UseLogger) {
-        if (logger.useConsole()) {
-            throw new Error('console and logger are too intertwingly');
-        }
-    }
-
-    return UseLogger;
-};
-
-// 
------------------------------------------------------------------------------
-console.log = function () {
-    if (logger.useConsole()) return;
-    logger.log.apply(logger, [].slice.call(arguments));
-};
-
-// 
------------------------------------------------------------------------------
-console.error = function () {
-    if (logger.useConsole()) return;
-    logger.error.apply(logger, [].slice.call(arguments));
-};
-
-// 
------------------------------------------------------------------------------
-console.warn = function () {
-    if (logger.useConsole()) return;
-    logger.warn.apply(logger, [].slice.call(arguments));
-};
-
-// 
------------------------------------------------------------------------------
-console.info = function () {
-    if (logger.useConsole()) return;
-    logger.info.apply(logger, [].slice.call(arguments));
-};
-
-// 
------------------------------------------------------------------------------
-console.debug = function () {
-    if (logger.useConsole()) return;
-    logger.debug.apply(logger, [].slice.call(arguments));
-};
-
-// 
------------------------------------------------------------------------------
-console.assert = function (expression) {
-    if (expression) return;
-
-    var message = logger.format.apply(logger.format, [].slice.call(arguments, 
1));
-    console.log('ASSERT: ' + message);
-};
-
-// 
------------------------------------------------------------------------------
-console.clear = function () {};
-
-// 
------------------------------------------------------------------------------
-console.dir = function (object) {
-    console.log('%o', object);
-};
-
-// 
------------------------------------------------------------------------------
-console.dirxml = function (node) {
-    console.log(node.innerHTML);
-};
-
-// 
------------------------------------------------------------------------------
-console.trace = noop;
-
-// 
------------------------------------------------------------------------------
-console.group = console.log;
-
-// 
------------------------------------------------------------------------------
-console.groupCollapsed = console.log;
-
-// 
------------------------------------------------------------------------------
-console.groupEnd = noop;
-
-// 
------------------------------------------------------------------------------
-console.time = function (name) {
-    Timers[name] = new Date().valueOf();
-};
-
-// 
------------------------------------------------------------------------------
-console.timeEnd = function (name) {
-    var timeStart = Timers[name];
-    if (!timeStart) {
-        console.warn('unknown timer: ' + name);
-        return;
-    }
-
-    var timeElapsed = new Date().valueOf() - timeStart;
-    console.log(name + ': ' + timeElapsed + 'ms');
-};
-
-// 
------------------------------------------------------------------------------
-console.timeStamp = noop;
-
-// 
------------------------------------------------------------------------------
-console.profile = noop;
-
-// 
------------------------------------------------------------------------------
-console.profileEnd = noop;
-
-// 
------------------------------------------------------------------------------
-console.count = noop;
-
-// 
------------------------------------------------------------------------------
-console.exception = console.log;
-
-// 
------------------------------------------------------------------------------
-console.table = function (data, columns) {
-    console.log('%o', data);
-};
-
-// 
------------------------------------------------------------------------------
-// return a new function that calls both functions passed as args
-// 
------------------------------------------------------------------------------
-function wrappedOrigCall (orgFunc, newFunc) {
-    return function () {
-        var args = [].slice.call(arguments);
-        try { orgFunc.apply(WinConsole, args); } catch (e) {}
-        try { newFunc.apply(console, args); } catch (e) {}
-    };
-}
-
-// 
------------------------------------------------------------------------------
-// For every function that exists in the original console object, that
-// also exists in the new console object, wrap the new console method
-// with one that calls both
-// 
------------------------------------------------------------------------------
-for (var key in console) {
-    if (typeof WinConsole[key] === 'function') {
-        console[key] = wrappedOrigCall(WinConsole[key], console[key]);
-    }
-}
-
-});
-
-// file: ../cordova-ios/cordova-js-src/plugin/ios/launchscreen.js
-define("cordova/plugin/ios/launchscreen", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-
-var launchscreen = {
-    show: function () {
-        exec(null, null, 'LaunchScreen', 'show', []);
-    },
-    hide: function () {
-        exec(null, null, 'LaunchScreen', 'hide', []);
-    }
-};
-
-module.exports = launchscreen;
-
-});
-
-// file: ../cordova-ios/cordova-js-src/plugin/ios/logger.js
-define("cordova/plugin/ios/logger", function(require, exports, module) {
-
-// 
------------------------------------------------------------------------------
-// The logger module exports the following properties/functions:
-//
-// LOG                          - constant for the level LOG
-// ERROR                        - constant for the level ERROR
-// WARN                         - constant for the level WARN
-// INFO                         - constant for the level INFO
-// DEBUG                        - constant for the level DEBUG
-// logLevel()                   - returns current log level
-// logLevel(value)              - sets and returns a new log level
-// useConsole()                 - returns whether logger is using console
-// useConsole(value)            - sets and returns whether logger is using 
console
-// log(message,...)             - logs a message at level LOG
-// error(message,...)           - logs a message at level ERROR
-// warn(message,...)            - logs a message at level WARN
-// info(message,...)            - logs a message at level INFO
-// debug(message,...)           - logs a message at level DEBUG
-// logLevel(level,message,...)  - logs a message specified level
-//
-// 
------------------------------------------------------------------------------
-
-var logger = exports;
-
-var exec = require('cordova/exec');
-
-var UseConsole = false;
-var UseLogger = true;
-var Queued = [];
-var DeviceReady = false;
-var CurrentLevel;
-
-var originalConsole = console;
-
-/**
- * Logging levels
- */
-
-var Levels = [
-    'LOG',
-    'ERROR',
-    'WARN',
-    'INFO',
-    'DEBUG'
-];
-
-/*
- * add the logging levels to the logger object and
- * to a separate levelsMap object for testing
- */
-
-var LevelsMap = {};
-for (var i = 0; i < Levels.length; i++) {
-    var level = Levels[i];
-    LevelsMap[level] = i;
-    logger[level] = level;
-}
-
-CurrentLevel = LevelsMap.WARN;
-
-/**
- * Getter/Setter for the logging level
- *
- * Returns the current logging level.
- *
- * When a value is passed, sets the logging level to that value.
- * The values should be one of the following constants:
- *    logger.LOG
- *    logger.ERROR
- *    logger.WARN
- *    logger.INFO
- *    logger.DEBUG
- *
- * The value used determines which messages get printed.  The logging
- * values above are in order, and only messages logged at the logging
- * level or above will actually be displayed to the user.  E.g., the
- * default level is WARN, so only messages logged with LOG, ERROR, or
- * WARN will be displayed; INFO and DEBUG messages will be ignored.
- */
-logger.level = function (value) {
-    if (arguments.length) {
-        if (LevelsMap[value] === null) {
-            throw new Error('invalid logging level: ' + value);
-        }
-        CurrentLevel = LevelsMap[value];
-    }
-
-    return Levels[CurrentLevel];
-};
-
-/**
- * Getter/Setter for the useConsole functionality
- *
- * When useConsole is true, the logger will log via the
- * browser 'console' object.
- */
-logger.useConsole = function (value) {
-    if (arguments.length) UseConsole = !!value;
-
-    if (UseConsole) {
-        if (typeof console === 'undefined') {
-            throw new Error('global console object is not defined');
-        }
-
-        if (typeof console.log !== 'function') {
-            throw new Error('global console object does not have a log 
function');
-        }
-
-        if (typeof console.useLogger === 'function') {
-            if (console.useLogger()) {
-                throw new Error('console and logger are too intertwingly');
-            }
-        }
-    }
-
-    return UseConsole;
-};
-
-/**
- * Getter/Setter for the useLogger functionality
- *
- * When useLogger is true, the logger will log via the
- * native Logger plugin.
- */
-logger.useLogger = function (value) {
-    // Enforce boolean
-    if (arguments.length) UseLogger = !!value;
-    return UseLogger;
-};
-
-/**
- * Logs a message at the LOG level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.log = function (message) { logWithArgs('LOG', arguments); };
-
-/**
- * Logs a message at the ERROR level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.error = function (message) { logWithArgs('ERROR', arguments); };
-
-/**
- * Logs a message at the WARN level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.warn = function (message) { logWithArgs('WARN', arguments); };
-
-/**
- * Logs a message at the INFO level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.info = function (message) { logWithArgs('INFO', arguments); };
-
-/**
- * Logs a message at the DEBUG level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.debug = function (message) { logWithArgs('DEBUG', arguments); };
-
-// log at the specified level with args
-function logWithArgs (level, args) {
-    args = [level].concat([].slice.call(args));
-    logger.logLevel.apply(logger, args);
-}
-
-// return the correct formatString for an object
-function formatStringForMessage (message) {
-    return (typeof message === 'string') ? '' : '%o';
-}
-
-/**
- * Logs a message at the specified level.
- *
- * Parameters passed after message are used applied to
- * the message with utils.format()
- */
-logger.logLevel = function (level /* , ... */) {
-    // format the message with the parameters
-    var formatArgs = [].slice.call(arguments, 1);
-    var fmtString = formatStringForMessage(formatArgs[0]);
-    if (fmtString.length > 0) {
-        formatArgs.unshift(fmtString); // add formatString
-    }
-
-    var message = logger.format.apply(logger.format, formatArgs);
-
-    if (LevelsMap[level] === null) {
-        throw new Error('invalid logging level: ' + level);
-    }
-
-    if (LevelsMap[level] > CurrentLevel) return;
-
-    // queue the message if not yet at deviceready
-    if (!DeviceReady && !UseConsole) {
-        Queued.push([level, message]);
-        return;
-    }
-
-    // Log using the native logger if that is enabled
-    if (UseLogger) {
-        exec(null, null, 'Console', 'logLevel', [level, message]);
-    }
-
-    // Log using the console if that is enabled
-    if (UseConsole) {
-        // make sure console is not using logger
-        if (console.useLogger()) {
-            throw new Error('console and logger are too intertwingly');
-        }
-
-        // log to the console
-        switch (level) {
-        case logger.LOG: originalConsole.log(message); break;
-        case logger.ERROR: originalConsole.log('ERROR: ' + message); break;
-        case logger.WARN: originalConsole.log('WARN: ' + message); break;
-        case logger.INFO: originalConsole.log('INFO: ' + message); break;
-        case logger.DEBUG: originalConsole.log('DEBUG: ' + message); break;
-        }
-    }
-};
-
-/**
- * Formats a string and arguments following it ala console.log()
- *
- * Any remaining arguments will be appended to the formatted string.
- *
- * for rationale, see FireBug's Console API:
- *    http://getfirebug.com/wiki/index.php/Console_API
- */
-logger.format = function (formatString, args) {
-    return __format(arguments[0], [].slice.call(arguments, 1)).join(' ');
-};
-
-// 
------------------------------------------------------------------------------
-/**
- * Formats a string and arguments following it ala vsprintf()
- *
- * format chars:
- *   %j - format arg as JSON
- *   %o - format arg as JSON
- *   %c - format arg as ''
- *   %% - replace with '%'
- * any other char following % will format it's
- * arg via toString().
- *
- * Returns an array containing the formatted string and any remaining
- * arguments.
- */
-function __format (formatString, args) {
-    if (formatString === null || formatString === undefined) return [''];
-    if (arguments.length === 1) return [formatString.toString()];
-
-    if (typeof formatString !== 'string') { formatString = 
formatString.toString(); }
-
-    var pattern = /(.*?)%(.)(.*)/;
-    var rest = formatString;
-    var result = [];
-
-    while (args.length) {
-        var match = pattern.exec(rest);
-        if (!match) break;
-
-        var arg = args.shift();
-        rest = match[3];
-        result.push(match[1]);
-
-        if (match[2] === '%') {
-            result.push('%');
-            args.unshift(arg);
-            continue;
-        }
-
-        result.push(__formatted(arg, match[2]));
-    }
-
-    result.push(rest);
-
-    var remainingArgs = [].slice.call(args);
-    remainingArgs.unshift(result.join(''));
-    return remainingArgs;
-}
-
-function __formatted (object, formatChar) {
-    try {
-        switch (formatChar) {
-        case 'j':
-        case 'o': return JSON.stringify(object);
-        case 'c': return '';
-        }
-    } catch (e) {
-        return 'error JSON.stringify()ing argument: ' + e;
-    }
-
-    if ((object === null) || (object === undefined)) {
-        return Object.prototype.toString.call(object);
-    }
-
-    return object.toString();
-}
-
-// 
------------------------------------------------------------------------------
-// when deviceready fires, log queued messages
-logger.__onDeviceReady = function () {
-    if (DeviceReady) return;
-
-    DeviceReady = true;
-
-    for (var i = 0; i < Queued.length; i++) {
-        var messageArgs = Queued[i];
-        logger.logLevel(messageArgs[0], messageArgs[1]);
-    }
-
-    Queued = null;
-};
-
-// add a deviceready event to log queued messages
-document.addEventListener('deviceready', logger.__onDeviceReady, false);
-
-});
-
-// file: ../cordova-ios/cordova-js-src/plugin/ios/wkwebkit.js
-define("cordova/plugin/ios/wkwebkit", function(require, exports, module) {
-
-var exec = require('cordova/exec');
-
-var WkWebKit = {
-    allowsBackForwardNavigationGestures: function (allow) {
-        exec(null, null, 'CDVWebViewEngine', 
'allowsBackForwardNavigationGestures', [allow]);
-    },
-    convertFilePath: function (path) {
-        if (!path || !window.CDV_ASSETS_URL) {
-            return path;
-        }
-        if (path.startsWith('/')) {
-            return window.CDV_ASSETS_URL + '/_app_file_' + path;
-        }
-        if (path.startsWith('file://')) {
-            return window.CDV_ASSETS_URL + path.replace('file://', 
'/_app_file_');
-        }
-        return path;
-    }
-};
-
-module.exports = WkWebKit;
-
-});
-
-// file: src/common/pluginloader.js
-define("cordova/pluginloader", function(require, exports, module) {
-
-var modulemapper = require('cordova/modulemapper');
-
-// Helper function to inject a <script> tag.
-// Exported for testing.
-exports.injectScript = function (url, onload, onerror) {
-    var script = document.createElement('script');
-    // onload fires even when script fails loads with an error.
-    script.onload = onload;
-    // onerror fires for malformed URLs.
-    script.onerror = onerror;
-    script.src = url;
-    document.head.appendChild(script);
-};
-
-function injectIfNecessary (id, url, onload, onerror) {
-    onerror = onerror || onload;
-    if (id in define.moduleMap) {
-        onload();
-    } else {
-        exports.injectScript(url, function () {
-            if (id in define.moduleMap) {
-                onload();
-            } else {
-                onerror();
-            }
-        }, onerror);
-    }
-}
-
-function onScriptLoadingComplete (moduleList, finishPluginLoading) {
-    // Loop through all the plugins and then through their clobbers and merges.
-    for (var i = 0, module; (module = moduleList[i]); i++) {
-        if (module.clobbers && module.clobbers.length) {
-            for (var j = 0; j < module.clobbers.length; j++) {
-                modulemapper.clobbers(module.id, module.clobbers[j]);
-            }
-        }
-
-        if (module.merges && module.merges.length) {
-            for (var k = 0; k < module.merges.length; k++) {
-                modulemapper.merges(module.id, module.merges[k]);
-            }
-        }
-
-        // Finally, if runs is truthy we want to simply require() the module.
-        if (module.runs) {
-            modulemapper.runs(module.id);
-        }
-    }
-
-    finishPluginLoading();
-}
-
-// Handler for the cordova_plugins.js content.
-// See plugman's plugin_loader.js for the details of this object.
-// This function is only called if the really is a plugins array that isn't 
empty.
-// Otherwise the onerror response handler will just call finishPluginLoading().
-function handlePluginsObject (path, moduleList, finishPluginLoading) {
-    // Now inject the scripts.
-    var scriptCounter = moduleList.length;
-
-    if (!scriptCounter) {
-        finishPluginLoading();
-        return;
-    }
-    function scriptLoadedCallback () {
-        if (!--scriptCounter) {
-            onScriptLoadingComplete(moduleList, finishPluginLoading);
-        }
-    }
-
-    for (var i = 0; i < moduleList.length; i++) {
-        injectIfNecessary(moduleList[i].id, path + moduleList[i].file, 
scriptLoadedCallback);
-    }
-}
-
-function findCordovaPath () {
-    var path = null;
-    var scripts = document.getElementsByTagName('script');
-    var term = '/cordova.js';
-    for (var n = scripts.length - 1; n > -1; n--) {
-        var src = scripts[n].src.replace(/\?.*$/, ''); // Strip any query 
param (CB-6007).
-        if (src.indexOf(term) === (src.length - term.length)) {
-            path = src.substring(0, src.length - term.length) + '/';
-            break;
-        }
-    }
-    return path;
-}
-
-// Tries to load all plugins' js-modules.
-// This is an async process, but onDeviceReady is blocked on onPluginsReady.
-// onPluginsReady is fired when there are no plugins to load, or they are all 
done.
-exports.load = function (callback) {
-    var pathPrefix = findCordovaPath();
-    if (pathPrefix === null) {
-        console.log('Could not find cordova.js script tag. Plugin loading may 
fail.');
-        pathPrefix = '';
-    }
-    injectIfNecessary('cordova/plugin_list', pathPrefix + 
'cordova_plugins.js', function () {
-        var moduleList = require('cordova/plugin_list');
-        handlePluginsObject(pathPrefix, moduleList, callback);
-    }, callback);
-};
-
-});
-
-// file: src/common/urlutil.js
-define("cordova/urlutil", function(require, exports, module) {
-
-/**
- * For already absolute URLs, returns what is passed in.
- * For relative URLs, converts them to absolute ones.
- */
-exports.makeAbsolute = function makeAbsolute (url) {
-    var anchorEl = document.createElement('a');
-    anchorEl.href = url;
-    return anchorEl.href;
-};
-
-});
-
-// file: src/common/utils.js
-define("cordova/utils", function(require, exports, module) {
-
-var utils = exports;
-
-/**
- * Defines a property getter / setter for obj[key].
- */
-utils.defineGetterSetter = function (obj, key, getFunc, opt_setFunc) {
-    if (Object.defineProperty) {
-        var desc = {
-            get: getFunc,
-            configurable: true
-        };
-        if (opt_setFunc) {
-            desc.set = opt_setFunc;
-        }
-        Object.defineProperty(obj, key, desc);
-    } else {
-        obj.__defineGetter__(key, getFunc);
-        if (opt_setFunc) {
-            obj.__defineSetter__(key, opt_setFunc);
-        }
-    }
-};
-
-/**
- * Defines a property getter for obj[key].
- */
-utils.defineGetter = utils.defineGetterSetter;
-
-utils.arrayIndexOf = function (a, item) {
-    if (a.indexOf) {
-        return a.indexOf(item);
-    }
-    var len = a.length;
-    for (var i = 0; i < len; ++i) {
-        if (a[i] === item) {
-            return i;
-        }
-    }
-    return -1;
-};
-
-/**
- * Returns whether the item was found in the array.
- */
-utils.arrayRemove = function (a, item) {
-    var index = utils.arrayIndexOf(a, item);
-    if (index !== -1) {
-        a.splice(index, 1);
-    }
-    return index !== -1;
-};
-
-utils.typeName = function (val) {
-    return Object.prototype.toString.call(val).slice(8, -1);
-};
-
-/**
- * Returns an indication of whether the argument is an array or not
- */
-utils.isArray = Array.isArray ||
-                function (a) { return utils.typeName(a) === 'Array'; };
-
-/**
- * Returns an indication of whether the argument is a Date or not
- */
-utils.isDate = function (d) {
-    return (d instanceof Date);
-};
-
-/**
- * Does a deep clone of the object.
- */
-utils.clone = function (obj) {
-    if (!obj || typeof obj === 'function' || utils.isDate(obj) || typeof obj 
!== 'object') {
-        return obj;
-    }
-
-    var retVal, i;
-
-    if (utils.isArray(obj)) {
-        retVal = [];
-        for (i = 0; i < obj.length; ++i) {
-            retVal.push(utils.clone(obj[i]));
-        }
-        return retVal;
-    }
-
-    retVal = {};
-    for (i in obj) {
-        // 'unknown' type may be returned in custom protocol activation case on
-        // Windows Phone 8.1 causing "No such interface supported" exception on
-        // cloning (https://issues.apache.org/jira/browse/CB-11522)
-        // eslint-disable-next-line valid-typeof
-        if ((!(i in retVal) || retVal[i] !== obj[i]) && typeof obj[i] !== 
'undefined' && typeof obj[i] !== 'unknown') {
-            retVal[i] = utils.clone(obj[i]);
-        }
-    }
-    return retVal;
-};
-
-/**
- * Returns a wrapped version of the function
- */
-utils.close = function (context, func, params) {
-    return function () {
-        var args = params || arguments;
-        return func.apply(context, args);
-    };
-};
-
-// 
------------------------------------------------------------------------------
-function UUIDcreatePart (length) {
-    var uuidpart = '';
-    for (var i = 0; i < length; i++) {
-        var uuidchar = parseInt((Math.random() * 256), 10).toString(16);
-        if (uuidchar.length === 1) {
-            uuidchar = '0' + uuidchar;
-        }
-        uuidpart += uuidchar;
-    }
-    return uuidpart;
-}
-
-/**
- * Create a UUID
- */
-utils.createUUID = function () {
-    return UUIDcreatePart(4) + '-' +
-        UUIDcreatePart(2) + '-' +
-        UUIDcreatePart(2) + '-' +
-        UUIDcreatePart(2) + '-' +
-        UUIDcreatePart(6);
-};
-
-/**
- * Extends a child object from a parent object using classical inheritance
- * pattern.
- */
-utils.extend = (function () {
-    // proxy used to establish prototype chain
-    var F = function () {};
-    // extend Child from Parent
-    return function (Child, Parent) {
-        F.prototype = Parent.prototype;
-        Child.prototype = new F();
-        Child.__super__ = Parent.prototype;
-        Child.prototype.constructor = Child;
-    };
-}());
-
-/**
- * Alerts a message in any available way: alert or console.log.
- */
-utils.alert = function (msg) {
-    if (window.alert) {
-        window.alert(msg);
-    } else if (console && console.log) {
-        console.log(msg);
-    }
-};
-
-});
-
-window.cordova = require('cordova');
-// file: src/scripts/bootstrap.js
-require('cordova/init');
-
-})();
diff --git a/bin/lib/create.js b/bin/lib/create.js
index 1fb4918..97e9e0b 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -25,9 +25,10 @@ const { CordovaError, events } = require('cordova-common');
 const utils = require('./utils');
 
 function copyJsAndCordovaLib (projectPath, projectName, use_shared) {
-    fs.copySync(path.join(ROOT, 'CordovaLib', 'cordova.js'), 
path.join(projectPath, 'www/cordova.js'));
-    fs.copySync(path.join(ROOT, 'cordova-js-src'), path.join(projectPath, 
'platform_www/cordova-js-src'));
-    fs.copySync(path.join(ROOT, 'CordovaLib', 'cordova.js'), 
path.join(projectPath, 'platform_www/cordova.js'));
+    fs.copySync(
+        path.join(projectPath, 'www/cordova.js'),
+        path.join(projectPath, 'platform_www/cordova.js')
+    );
 
     const projectAppPath = path.join(projectPath, projectName);
     const cordovaLibPathSrc = path.join(ROOT, 'CordovaLib');
@@ -42,7 +43,7 @@ function copyJsAndCordovaLib (projectPath, projectName, 
use_shared) {
         // like it should).
         fs.symlinkSync(cordovaLibPathSrc, cordovaLibPathDest);
     } else {
-        for (const p of ['include', 'Classes', 'VERSION', 'cordova.js', 
'CordovaLib.xcodeproj/project.pbxproj']) {
+        for (const p of ['include', 'Classes', 'VERSION', 
'CordovaLib.xcodeproj/project.pbxproj']) {
             fs.copySync(path.join(cordovaLibPathSrc, p), 
path.join(cordovaLibPathDest, p));
         }
     }
diff --git a/package-lock.json b/package-lock.json
index 9d77ccb..db30c95 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -23,6 +23,7 @@
       },
       "devDependencies": {
         "@cordova/eslint-config": "^4.0.0",
+        "cordova-js": "^6.1.0",
         "jasmine": "3.5.0",
         "nyc": "^15.1.0",
         "rewire": "^5.0.0",
@@ -116,14 +117,14 @@
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.16.0",
-      "resolved": 
"https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz";,
-      "integrity": 
"sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==",
+      "version": "7.16.3",
+      "resolved": 
"https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz";,
+      "integrity": 
"sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==",
       "dev": true,
       "dependencies": {
         "@babel/compat-data": "^7.16.0",
         "@babel/helper-validator-option": "^7.14.5",
-        "browserslist": "^4.16.6",
+        "browserslist": "^4.17.5",
         "semver": "^6.3.0"
       },
       "engines": {
@@ -293,13 +294,13 @@
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.16.0",
-      "resolved": 
"https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz";,
-      "integrity": 
"sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==",
+      "version": "7.16.3",
+      "resolved": 
"https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz";,
+      "integrity": 
"sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==",
       "dev": true,
       "dependencies": {
         "@babel/template": "^7.16.0",
-        "@babel/traverse": "^7.16.0",
+        "@babel/traverse": "^7.16.3",
         "@babel/types": "^7.16.0"
       },
       "engines": {
@@ -392,9 +393,9 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.16.2",
-      "resolved": 
"https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz";,
-      "integrity": 
"sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==",
+      "version": "7.16.3",
+      "resolved": 
"https://registry.npmjs.org/@babel/parser/-/parser-7.16.3.tgz";,
+      "integrity": 
"sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw==",
       "dev": true,
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -430,9 +431,9 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.16.0",
-      "resolved": 
"https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz";,
-      "integrity": 
"sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==",
+      "version": "7.16.3",
+      "resolved": 
"https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz";,
+      "integrity": 
"sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==",
       "dev": true,
       "dependencies": {
         "@babel/code-frame": "^7.16.0",
@@ -440,7 +441,7 @@
         "@babel/helper-function-name": "^7.16.0",
         "@babel/helper-hoist-variables": "^7.16.0",
         "@babel/helper-split-export-declaration": "^7.16.0",
-        "@babel/parser": "^7.16.0",
+        "@babel/parser": "^7.16.3",
         "@babel/types": "^7.16.0",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
@@ -857,6 +858,15 @@
         "url": "https://github.com/sponsors/ljharb";
       }
     },
+    "node_modules/array-union": {
+      "version": "2.1.0",
+      "resolved": 
"https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz";,
+      "integrity": 
"sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/array.prototype.flat": {
       "version": "1.2.5",
       "resolved": 
"https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz";,
@@ -924,9 +934,9 @@
       ]
     },
     "node_modules/big-integer": {
-      "version": "1.6.50",
-      "resolved": 
"https://registry.npmjs.org/big-integer/-/big-integer-1.6.50.tgz";,
-      "integrity": 
"sha512-+O2uoQWFRo8ysZNo/rjtri2jIwjr3XfeAgRjAUADRqGG+ZITvyn8J1kvXLTaKVr3hhGXk+f23tKfdzmklVM9vQ==",
+      "version": "1.6.51",
+      "resolved": 
"https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz";,
+      "integrity": 
"sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
       "engines": {
         "node": ">=0.6"
       }
@@ -971,13 +981,13 @@
       }
     },
     "node_modules/browserslist": {
-      "version": "4.17.6",
-      "resolved": 
"https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz";,
-      "integrity": 
"sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==",
+      "version": "4.18.1",
+      "resolved": 
"https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz";,
+      "integrity": 
"sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==",
       "dev": true,
       "dependencies": {
-        "caniuse-lite": "^1.0.30001274",
-        "electron-to-chromium": "^1.3.886",
+        "caniuse-lite": "^1.0.30001280",
+        "electron-to-chromium": "^1.3.896",
         "escalade": "^3.1.1",
         "node-releases": "^2.0.1",
         "picocolors": "^1.0.0"
@@ -1040,9 +1050,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001279",
-      "resolved": 
"https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001279.tgz";,
-      "integrity": 
"sha512-VfEHpzHEXj6/CxggTwSFoZBBYGQfQv9Cf42KPlO79sWXCD1QNKWKsKzFeWL7QpZHJQYAvocqV6Rty1yJMkqWLQ==",
+      "version": "1.0.30001280",
+      "resolved": 
"https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001280.tgz";,
+      "integrity": 
"sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA==",
       "dev": true,
       "funding": {
         "type": "opencollective",
@@ -1188,6 +1198,38 @@
         "node": ">=10"
       }
     },
+    "node_modules/cordova-js": {
+      "version": "6.1.0",
+      "resolved": 
"https://registry.npmjs.org/cordova-js/-/cordova-js-6.1.0.tgz";,
+      "integrity": 
"sha512-roVQ3qw0CISeM6E1AjQN+QkuiXoBDiVU2Xf9RXtwXSpT1QMtzS6Zz5+lj/f8pUfBr52zDj7lyV1crghMMjrNqg==",
+      "dev": true,
+      "dependencies": {
+        "execa": "^5.1.1",
+        "fs-extra": "^9.1.0",
+        "globby": "^11.0.4"
+      },
+      "bin": {
+        "cordova-js": "build-tools/cli.js"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/cordova-js/node_modules/fs-extra": {
+      "version": "9.1.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz";,
+      "integrity": 
"sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+      "dev": true,
+      "dependencies": {
+        "at-least-node": "^1.0.0",
+        "graceful-fs": "^4.2.0",
+        "jsonfile": "^6.0.1",
+        "universalify": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/cross-spawn": {
       "version": "7.0.3",
       "resolved": 
"https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz";,
@@ -1262,6 +1304,18 @@
         "node": ">= 0.4"
       }
     },
+    "node_modules/dir-glob": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz";,
+      "integrity": 
"sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+      "dev": true,
+      "dependencies": {
+        "path-type": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/doctrine": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz";,
@@ -1275,9 +1329,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.3.893",
-      "resolved": 
"https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.893.tgz";,
-      "integrity": 
"sha512-ChtwF7qB03INq1SyMpue08wc6cve+ktj2UC/Y7se9vB+JryfzziJeYwsgb8jLaCA5GMkHCdn5M62PfSMWhifZg==",
+      "version": "1.3.899",
+      "resolved": 
"https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.899.tgz";,
+      "integrity": 
"sha512-w16Dtd2zl7VZ4N4Db+FIa7n36sgPGCKjrKvUUmp5ialsikvcQLjcJR9RWnlYNxIyEHLdHaoIZEqKsPxU9MdyBg==",
       "dev": true
     },
     "node_modules/elementtree": {
@@ -1542,9 +1596,9 @@
       }
     },
     "node_modules/eslint-plugin-import": {
-      "version": "2.25.2",
-      "resolved": 
"https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz";,
-      "integrity": 
"sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==",
+      "version": "2.25.3",
+      "resolved": 
"https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz";,
+      "integrity": 
"sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==",
       "dev": true,
       "dependencies": {
         "array-includes": "^3.1.4",
@@ -1552,9 +1606,9 @@
         "debug": "^2.6.9",
         "doctrine": "^2.1.0",
         "eslint-import-resolver-node": "^0.3.6",
-        "eslint-module-utils": "^2.7.0",
+        "eslint-module-utils": "^2.7.1",
         "has": "^1.0.3",
-        "is-core-module": "^2.7.0",
+        "is-core-module": "^2.8.0",
         "is-glob": "^4.0.3",
         "minimatch": "^3.0.4",
         "object.values": "^1.1.5",
@@ -2242,6 +2296,35 @@
         "url": "https://github.com/sponsors/sindresorhus";
       }
     },
+    "node_modules/globby": {
+      "version": "11.0.4",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz";,
+      "integrity": 
"sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
+      "dev": true,
+      "dependencies": {
+        "array-union": "^2.1.0",
+        "dir-glob": "^3.0.1",
+        "fast-glob": "^3.1.1",
+        "ignore": "^5.1.4",
+        "merge2": "^1.3.0",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus";
+      }
+    },
+    "node_modules/globby/node_modules/ignore": {
+      "version": "5.1.9",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz";,
+      "integrity": 
"sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==",
+      "dev": true,
+      "engines": {
+        "node": ">= 4"
+      }
+    },
     "node_modules/graceful-fs": {
       "version": "4.2.8",
       "resolved": 
"https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz";,
@@ -3465,6 +3548,15 @@
       "integrity": 
"sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
       "dev": true
     },
+    "node_modules/path-type": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz";,
+      "integrity": 
"sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/picocolors": {
       "version": "1.0.0",
       "resolved": 
"https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz";,
@@ -4320,6 +4412,15 @@
         "node": ">= 5.10.0"
       }
     },
+    "node_modules/slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz";,
+      "integrity": 
"sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/slice-ansi": {
       "version": "4.0.0",
       "resolved": 
"https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz";,
@@ -4486,9 +4587,9 @@
       }
     },
     "node_modules/table/node_modules/ajv": {
-      "version": "8.7.1",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.7.1.tgz";,
-      "integrity": 
"sha512-gPpOObTO1QjbnN1sVMjJcp1TF9nggMfO4MBR5uQl6ZVTOaEPq5i4oq/6R9q2alMMPB3eg53wFv1RuJBLuxf3Hw==",
+      "version": "8.8.0",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.0.tgz";,
+      "integrity": 
"sha512-L+cJ/+pkdICMueKR6wIx3VP2fjIx3yAhuvadUv/osv9yFD7OVZy442xFF+Oeu3ZvmhBGQzoF6mTSt+LUWBmGQg==",
       "dev": true,
       "dependencies": {
         "fast-deep-equal": "^3.1.1",
@@ -5033,14 +5134,14 @@
       }
     },
     "@babel/helper-compilation-targets": {
-      "version": "7.16.0",
-      "resolved": 
"https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz";,
-      "integrity": 
"sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==",
+      "version": "7.16.3",
+      "resolved": 
"https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz";,
+      "integrity": 
"sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA==",
       "dev": true,
       "requires": {
         "@babel/compat-data": "^7.16.0",
         "@babel/helper-validator-option": "^7.14.5",
-        "browserslist": "^4.16.6",
+        "browserslist": "^4.17.5",
         "semver": "^6.3.0"
       },
       "dependencies": {
@@ -5167,13 +5268,13 @@
       "dev": true
     },
     "@babel/helpers": {
-      "version": "7.16.0",
-      "resolved": 
"https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz";,
-      "integrity": 
"sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==",
+      "version": "7.16.3",
+      "resolved": 
"https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.3.tgz";,
+      "integrity": 
"sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w==",
       "dev": true,
       "requires": {
         "@babel/template": "^7.16.0",
-        "@babel/traverse": "^7.16.0",
+        "@babel/traverse": "^7.16.3",
         "@babel/types": "^7.16.0"
       }
     },
@@ -5247,9 +5348,9 @@
       }
     },
     "@babel/parser": {
-      "version": "7.16.2",
-      "resolved": 
"https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz";,
-      "integrity": 
"sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==",
+      "version": "7.16.3",
+      "resolved": 
"https://registry.npmjs.org/@babel/parser/-/parser-7.16.3.tgz";,
+      "integrity": 
"sha512-dcNwU1O4sx57ClvLBVFbEgx0UZWfd0JQX5X6fxFRCLHelFBGXFfSz6Y0FAq2PEwUqlqLkdVjVr4VASEOuUnLJw==",
       "dev": true
     },
     "@babel/template": {
@@ -5275,9 +5376,9 @@
       }
     },
     "@babel/traverse": {
-      "version": "7.16.0",
-      "resolved": 
"https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz";,
-      "integrity": 
"sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==",
+      "version": "7.16.3",
+      "resolved": 
"https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.3.tgz";,
+      "integrity": 
"sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.16.0",
@@ -5285,7 +5386,7 @@
         "@babel/helper-function-name": "^7.16.0",
         "@babel/helper-hoist-variables": "^7.16.0",
         "@babel/helper-split-export-declaration": "^7.16.0",
-        "@babel/parser": "^7.16.0",
+        "@babel/parser": "^7.16.3",
         "@babel/types": "^7.16.0",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
@@ -5600,6 +5701,12 @@
         "is-string": "^1.0.7"
       }
     },
+    "array-union": {
+      "version": "2.1.0",
+      "resolved": 
"https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz";,
+      "integrity": 
"sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+      "dev": true
+    },
     "array.prototype.flat": {
       "version": "1.2.5",
       "resolved": 
"https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz";,
@@ -5638,9 +5745,9 @@
       "integrity": 
"sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
     },
     "big-integer": {
-      "version": "1.6.50",
-      "resolved": 
"https://registry.npmjs.org/big-integer/-/big-integer-1.6.50.tgz";,
-      "integrity": 
"sha512-+O2uoQWFRo8ysZNo/rjtri2jIwjr3XfeAgRjAUADRqGG+ZITvyn8J1kvXLTaKVr3hhGXk+f23tKfdzmklVM9vQ=="
+      "version": "1.6.51",
+      "resolved": 
"https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz";,
+      "integrity": 
"sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg=="
     },
     "bplist-creator": {
       "version": "0.1.0",
@@ -5676,13 +5783,13 @@
       }
     },
     "browserslist": {
-      "version": "4.17.6",
-      "resolved": 
"https://registry.npmjs.org/browserslist/-/browserslist-4.17.6.tgz";,
-      "integrity": 
"sha512-uPgz3vyRTlEiCv4ee9KlsKgo2V6qPk7Jsn0KAn2OBqbqKo3iNcPEC1Ti6J4dwnz+aIRfEEEuOzC9IBk8tXUomw==",
+      "version": "4.18.1",
+      "resolved": 
"https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz";,
+      "integrity": 
"sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==",
       "dev": true,
       "requires": {
-        "caniuse-lite": "^1.0.30001274",
-        "electron-to-chromium": "^1.3.886",
+        "caniuse-lite": "^1.0.30001280",
+        "electron-to-chromium": "^1.3.896",
         "escalade": "^3.1.1",
         "node-releases": "^2.0.1",
         "picocolors": "^1.0.0"
@@ -5723,9 +5830,9 @@
       "dev": true
     },
     "caniuse-lite": {
-      "version": "1.0.30001279",
-      "resolved": 
"https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001279.tgz";,
-      "integrity": 
"sha512-VfEHpzHEXj6/CxggTwSFoZBBYGQfQv9Cf42KPlO79sWXCD1QNKWKsKzFeWL7QpZHJQYAvocqV6Rty1yJMkqWLQ==",
+      "version": "1.0.30001280",
+      "resolved": 
"https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001280.tgz";,
+      "integrity": 
"sha512-kFXwYvHe5rix25uwueBxC569o53J6TpnGu0BEEn+6Lhl2vsnAumRFWEBhDft1fwyo6m1r4i+RqA4+163FpeFcA==",
       "dev": true
     },
     "chalk": {
@@ -5845,6 +5952,31 @@
         }
       }
     },
+    "cordova-js": {
+      "version": "6.1.0",
+      "resolved": 
"https://registry.npmjs.org/cordova-js/-/cordova-js-6.1.0.tgz";,
+      "integrity": 
"sha512-roVQ3qw0CISeM6E1AjQN+QkuiXoBDiVU2Xf9RXtwXSpT1QMtzS6Zz5+lj/f8pUfBr52zDj7lyV1crghMMjrNqg==",
+      "dev": true,
+      "requires": {
+        "execa": "^5.1.1",
+        "fs-extra": "^9.1.0",
+        "globby": "^11.0.4"
+      },
+      "dependencies": {
+        "fs-extra": {
+          "version": "9.1.0",
+          "resolved": 
"https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz";,
+          "integrity": 
"sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+          "dev": true,
+          "requires": {
+            "at-least-node": "^1.0.0",
+            "graceful-fs": "^4.2.0",
+            "jsonfile": "^6.0.1",
+            "universalify": "^2.0.0"
+          }
+        }
+      }
+    },
     "cross-spawn": {
       "version": "7.0.3",
       "resolved": 
"https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz";,
@@ -5899,6 +6031,15 @@
         "object-keys": "^1.0.12"
       }
     },
+    "dir-glob": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz";,
+      "integrity": 
"sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+      "dev": true,
+      "requires": {
+        "path-type": "^4.0.0"
+      }
+    },
     "doctrine": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz";,
@@ -5909,9 +6050,9 @@
       }
     },
     "electron-to-chromium": {
-      "version": "1.3.893",
-      "resolved": 
"https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.893.tgz";,
-      "integrity": 
"sha512-ChtwF7qB03INq1SyMpue08wc6cve+ktj2UC/Y7se9vB+JryfzziJeYwsgb8jLaCA5GMkHCdn5M62PfSMWhifZg==",
+      "version": "1.3.899",
+      "resolved": 
"https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.899.tgz";,
+      "integrity": 
"sha512-w16Dtd2zl7VZ4N4Db+FIa7n36sgPGCKjrKvUUmp5ialsikvcQLjcJR9RWnlYNxIyEHLdHaoIZEqKsPxU9MdyBg==",
       "dev": true
     },
     "elementtree": {
@@ -6113,9 +6254,9 @@
       }
     },
     "eslint-plugin-import": {
-      "version": "2.25.2",
-      "resolved": 
"https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz";,
-      "integrity": 
"sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==",
+      "version": "2.25.3",
+      "resolved": 
"https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz";,
+      "integrity": 
"sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==",
       "dev": true,
       "requires": {
         "array-includes": "^3.1.4",
@@ -6123,9 +6264,9 @@
         "debug": "^2.6.9",
         "doctrine": "^2.1.0",
         "eslint-import-resolver-node": "^0.3.6",
-        "eslint-module-utils": "^2.7.0",
+        "eslint-module-utils": "^2.7.1",
         "has": "^1.0.3",
-        "is-core-module": "^2.7.0",
+        "is-core-module": "^2.8.0",
         "is-glob": "^4.0.3",
         "minimatch": "^3.0.4",
         "object.values": "^1.1.5",
@@ -6631,6 +6772,28 @@
         "type-fest": "^0.20.2"
       }
     },
+    "globby": {
+      "version": "11.0.4",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz";,
+      "integrity": 
"sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==",
+      "dev": true,
+      "requires": {
+        "array-union": "^2.1.0",
+        "dir-glob": "^3.0.1",
+        "fast-glob": "^3.1.1",
+        "ignore": "^5.1.4",
+        "merge2": "^1.3.0",
+        "slash": "^3.0.0"
+      },
+      "dependencies": {
+        "ignore": {
+          "version": "5.1.9",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz";,
+          "integrity": 
"sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==",
+          "dev": true
+        }
+      }
+    },
     "graceful-fs": {
       "version": "4.2.8",
       "resolved": 
"https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz";,
@@ -7534,6 +7697,12 @@
       "integrity": 
"sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
       "dev": true
     },
+    "path-type": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz";,
+      "integrity": 
"sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+      "dev": true
+    },
     "picocolors": {
       "version": "1.0.0",
       "resolved": 
"https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz";,
@@ -8161,6 +8330,12 @@
         }
       }
     },
+    "slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz";,
+      "integrity": 
"sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+      "dev": true
+    },
     "slice-ansi": {
       "version": "4.0.0",
       "resolved": 
"https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz";,
@@ -8282,9 +8457,9 @@
       },
       "dependencies": {
         "ajv": {
-          "version": "8.7.1",
-          "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.7.1.tgz";,
-          "integrity": 
"sha512-gPpOObTO1QjbnN1sVMjJcp1TF9nggMfO4MBR5uQl6ZVTOaEPq5i4oq/6R9q2alMMPB3eg53wFv1RuJBLuxf3Hw==",
+          "version": "8.8.0",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.0.tgz";,
+          "integrity": 
"sha512-L+cJ/+pkdICMueKR6wIx3VP2fjIx3yAhuvadUv/osv9yFD7OVZy442xFF+Oeu3ZvmhBGQzoF6mTSt+LUWBmGQg==",
           "dev": true,
           "requires": {
             "fast-deep-equal": "^3.1.1",
diff --git a/package.json b/package.json
index 017316c..1e148db 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
     "cordova:platform"
   ],
   "scripts": {
+    "prepare": "cordova-js build > templates/project/www/cordova.js",
     "pretest": "npm run lint",
     "test": "npm run coverage && npm run objc-tests",
     "coverage": "nyc jasmine --config=tests/spec/coverage.json",
@@ -29,6 +30,7 @@
   "license": "Apache-2.0",
   "devDependencies": {
     "@cordova/eslint-config": "^4.0.0",
+    "cordova-js": "^6.1.0",
     "jasmine": "3.5.0",
     "nyc": "^15.1.0",
     "rewire": "^5.0.0",
diff --git a/tests/CordovaLibTests/CordovaLibTests.xcodeproj/project.pbxproj 
b/tests/CordovaLibTests/CordovaLibTests.xcodeproj/project.pbxproj
index b367a92..57341a5 100644
--- a/tests/CordovaLibTests/CordovaLibTests.xcodeproj/project.pbxproj
+++ b/tests/CordovaLibTests/CordovaLibTests.xcodeproj/project.pbxproj
@@ -398,7 +398,7 @@
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "cp ../../CordovaLib/cordova.js 
\"$BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME/www/cordova.js\"";
+                       shellScript = "cp 
../../templates/project/www/cordova.js 
\"$BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME/www/cordova.js\"";
                        showEnvVarsInLog = 0;
                };
                C0FA7CA61E4BB6420077B045 /* Copy cordova.js into www directory 
*/ = {
@@ -414,7 +414,7 @@
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        shellPath = /bin/sh;
-                       shellScript = "cp ../../CordovaLib/cordova.js 
\"$BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME/www/cordova.js\"";
+                       shellScript = "cp 
../../templates/project/www/cordova.js 
\"$BUILT_PRODUCTS_DIR/$FULL_PRODUCT_NAME/www/cordova.js\"";
                        showEnvVarsInLog = 0;
                };
 /* End PBXShellScriptBuildPhase section */

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

Reply via email to