http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/03bf0cde/windows8/framework/Cordova-Metro/js/default.js
----------------------------------------------------------------------
diff --git a/windows8/framework/Cordova-Metro/js/default.js 
b/windows8/framework/Cordova-Metro/js/default.js
new file mode 100644
index 0000000..8f865ad
--- /dev/null
+++ b/windows8/framework/Cordova-Metro/js/default.js
@@ -0,0 +1,33 @@
+// For an introduction to the Blank template, see the following 
documentation:
+// http://go.microsoft.com/fwlink/?LinkId=232509
+(function () {
+    "use strict";
+
+    var app = WinJS.Application;
+    var activation = Windows.ApplicationModel.Activation;
+    WinJS.strictProcessing();
+
+    app.onactivated = function (args) {
+        if (args.detail.kind === activation.ActivationKind.launch) {
+            if (args.detail.previousExecutionState !== 
activation.ApplicationExecutionState.terminated) {
+                // TODO: This application has been newly launched. Initialize
+                // your application here.
+            } else {
+                // TODO: This application has been reactivated from suspension.
+                // Restore application state here.
+            }
+            args.setPromise(WinJS.UI.processAll());
+        }
+    };
+
+    app.oncheckpoint = function (args) {
+        // TODO: This application is about to be suspended. Save any state
+        // that needs to persist across suspensions here. You might use the
+        // WinJS.Application.sessionState object, which is automatically
+        // saved and restored across suspension. If you need to complete an
+        // asynchronous operation before your application is suspended, call
+        // args.setPromise().
+    };
+
+    app.start();
+})();

http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/03bf0cde/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex-async-agent.js
----------------------------------------------------------------------
diff --git 
a/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex-async-agent.js
 
b/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex-async-agent.js
new file mode 100644
index 0000000..3f25c89
--- /dev/null
+++ 
b/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex-async-agent.js
@@ -0,0 +1,75 @@
+(function () {
+    var init = function (root) {
+        
+        if (!root.modules || !root.modules["async"]) {
+            throw new Error('Missing essential component, please initialize 
"async" module first.');
+        }
+        
+        if (root.modules["async-agent"]) {
+            return;
+        }
+        
+        var Task = root.Async.Task;
+        
+        var Agent = function () {
+            this._messages = [];
+            this._tasks = [];
+        }
+        Agent.prototype = {
+            receive: function () {
+                var _this = this;
+
+                return Task.create(function (t) {
+                    if (_this._messages.length > 0) {
+                        var msg = _this._messages.shift();
+                        t.complete("success", msg);
+                    } else {
+                        _this._tasks.push(t);
+                    }
+                });
+            },
+
+            post: function (msg) {
+                if (this._tasks.length > 0) {
+                    var t = this._tasks.shift();
+                    t.complete("success", msg);
+                } else {
+                    this._messages.push(msg);
+                }
+            },
+            
+            currentQueueLength: function () {
+                return this._messages.length;
+            }
+        };
+        
+        root.Async.Agent = Agent;
+        
+        root.modules["async-agent"] = true;
+    }
+    
+    // CommonJS
+    var isCommonJS = (typeof require === "function" && typeof module !== 
"undefined" && module.exports);
+    // CommongJS Wrapping
+    var isWrapping = (typeof define === "function" && !define.amd);
+    // CommonJS AMD
+    var isAmd = (typeof require === "function" && typeof define === "function" 
&& define.amd);
+
+    if (isCommonJS) {
+        module.exports.init = init;
+    } else if (isWrapping) {
+        define("jscex-async-agent", ["jscex-async"], function (require, 
exports, module) {
+            module.exports.init = init;
+        });
+    } else if (isAmd) {
+        define("jscex-async-agent", ["jscex-async"], function () {
+            return { init: init };
+        });
+    } else {
+        if (typeof Jscex === "undefined") {
+            throw new Error('Missing the root object, please load "jscex" 
module first.');
+        }
+    
+        init(Jscex);
+    }
+})();

http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/03bf0cde/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex-async-include.js
----------------------------------------------------------------------
diff --git 
a/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex-async-include.js
 
b/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex-async-include.js
new file mode 100644
index 0000000..a076b08
--- /dev/null
+++ 
b/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex-async-include.js
@@ -0,0 +1,63 @@
+(function () {
+
+    var init = function (root) {
+        if (root.modules["async-include"]) {
+            return;
+        }
+        
+        if (!root.modules["async"]) {
+            throw new Error('Missing essential components, please initialize 
"jscex-async" module first.');
+        }
+        
+
+        root.modules["async-include"] = true;
+
+        var Async = root.Async;
+        var Task = Async.Task
+        Async.include = function (path) {
+            return Task.create(function (t) {
+                var script = document.createElement("script");
+                if(script.onload == null) {
+                    script.onload = function () {
+                        t.complete("success");
+                    }
+                }
+                else if(script.onreadystatechange == null){
+                    script.onreadystatechange = function () {
+                        if(this.readyState=='load')
+                            t.complete("success");
+                    }
+                }
+                script.src = path;
+                
+                document.getElementsByTagName("head")[0].appendChild(script);  
              
+
+            });
+
+        }
+    }    
+    // CommonJS
+    var isCommonJS = (typeof require === "function" && typeof module !== 
"undefined" && module.exports);
+    // CommongJS Wrapping
+    var isWrapping = (typeof define === "function" && !define.amd);
+    // CommonJS AMD
+    var isAmd = (typeof require === "function" && typeof define === "function" 
&& define.amd);
+    
+    if (isCommonJS) {
+        module.exports.init = init;
+    } else if (isWrapping) {
+        define("jscex-async-include", ["jscex-async"], function (require, 
exports, module) {
+            module.exports.init = init;
+        });
+    } else if (isAmd) {
+        define("jscex-async-include", ["jscex-async"], function () {
+            return { init: init };
+        });
+    } else {
+        if (typeof Jscex === "undefined") {
+            throw new Error('Missing the root object, please load "jscex" 
module first.');
+        }
+    
+        init(Jscex);
+    }
+})();

http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/03bf0cde/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex.async.xhr.js
----------------------------------------------------------------------
diff --git 
a/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex.async.xhr.js 
b/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex.async.xhr.js
new file mode 100644
index 0000000..7adc9a2
--- /dev/null
+++ 
b/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex.async.xhr.js
@@ -0,0 +1,21 @@
+XMLHttpRequest.prototype.receiveAsync = function () {
+    var _this = this;
+
+    var delegate = {
+        "onStart": function (callback) {
+            _this.onreadystatechange = function () {
+                if (_this.readyState == 4) {
+                    callback("success", _this.responseText);
+                }
+            }
+
+            _this.send();
+        },
+
+        "onCancel": function (callback) {
+            _this.abort();
+        }
+    };
+
+    return new Jscex.Async.Task(delegate);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/03bf0cde/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex.seq.js
----------------------------------------------------------------------
diff --git 
a/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex.seq.js 
b/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex.seq.js
new file mode 100644
index 0000000..86c35ba
--- /dev/null
+++ b/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex.seq.js
@@ -0,0 +1,70 @@
+Jscex.Seq = { };
+
+(function () {
+
+    var SeqBuilder = function () { }
+
+    var Iterator = Jscex.Seq.Iterator = function (delegate) {
+        this._delegate = delegate;
+    }
+    Iterator.prototype.moveNext = function () {
+
+        var step = this._delegate();
+        if (step) {
+            this._delegate = step.nextDelegate;
+            this.current = step.item;
+            return true;
+        } else {
+            delete this._delegate;
+            delete this.current;
+            return false;
+        }
+    }
+
+    var TempStep = null;
+
+    SeqBuilder.prototype = {
+        "binder": "$yield",
+
+        "Start": function (_this, step) {
+
+            var delegate = function () {
+                TempStep = null;
+                step.next(_this, function (type, value) {
+                    if (type == "throw") console.log(value);
+                });
+
+                var tempStep = TempStep;
+                TempStep = null;
+                return tempStep;
+            }
+
+            return new Jscex.Seq.Iterator(delegate);
+        },
+
+        "Bind": function (value, generator) {
+            return {
+                "next": function (_this, callback) {
+                    TempStep = {
+                        item: value,
+                        nextDelegate: function () {
+                            TempStep = null;
+                            generator.call(_this).next(_this, callback);
+
+                            var tempStep = TempStep;
+                            TempStep = null;
+                            return tempStep;
+                        }
+                    };
+                }
+            };
+        }
+    }
+
+    for (var m in Jscex.builderBase) {
+        SeqBuilder.prototype[m] = Jscex.builderBase[m];
+    }
+
+    Jscex.builders["seq"] = new SeqBuilder();
+
+})();

http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/03bf0cde/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex.seq.powerpack.js
----------------------------------------------------------------------
diff --git 
a/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex.seq.powerpack.js
 
b/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex.seq.powerpack.js
new file mode 100644
index 0000000..0691005
--- /dev/null
+++ 
b/windows8/framework/Cordova-Metro/lib/Jscex/src/incubations/jscex.seq.powerpack.js
@@ -0,0 +1,61 @@
+(function () {
+
+    var filter = eval(Jscex.compile("seq", function (iter, predicate) {
+        while (iter.moveNext()) {
+            if (predicate(iter.current)) {
+                $yield(iter.current);
+            }
+        }
+    }));
+    
+    var map = eval(Jscex.compile("seq", function (iter, mapper) {
+        while (iter.moveNext()) {
+            $yield(mapper(iter.current));
+        }
+    }));
+
+    var zip = eval(Jscex.compile("seq", function (iter1, iter2) {
+        while (iter1.moveNext() && iter2.moveNext()) {
+            $yield([iter1.current, iter2.current]);
+        }
+    }));
+
+    var skip = eval(Jscex.compile("seq", function (iter, n) {
+        for (var i = 0; i < n; i++) {
+            if (!iter.moveNext()) {
+                return;
+            }
+        }
+
+        while (iter.moveNext()) {
+            $yield(iter.current);
+        }
+    }));
+
+    var take = eval(Jscex.compile("seq", function (iter, n) {
+        var count = 0;
+        while (iter.moveNext()) {
+            if (count++ < n) {
+                $yield(iter.current);
+            } else {
+                return;
+            }
+        }
+    }));
+
+    var each = function (iter, action) {
+        while (iter.moveNext()) {
+            action(iter.current);
+        }
+    };
+
+    var p = Jscex.Seq.Iterator.prototype;
+    p.filter = function (predicate) { return filter(this, predicate); }
+    p.map = function (mapper) { return map(this, mapper); }
+    p.zip = function (iter) { return zip(this, iter); }
+    p.skip = function (n) { return skip(this, n); }
+    p.take = function (n) { return take(this, n); }
+    p.each = function (action) { each(this, action); }
+
+})();
+

http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/03bf0cde/windows8/framework/Cordova-Metro/lib/Jscex/src/jscex-async-powerpack.js
----------------------------------------------------------------------
diff --git 
a/windows8/framework/Cordova-Metro/lib/Jscex/src/jscex-async-powerpack.js 
b/windows8/framework/Cordova-Metro/lib/Jscex/src/jscex-async-powerpack.js
new file mode 100644
index 0000000..a35c1c2
--- /dev/null
+++ b/windows8/framework/Cordova-Metro/lib/Jscex/src/jscex-async-powerpack.js
@@ -0,0 +1,442 @@
+(function () {
+    "use strict";
+
+    var Jscex, Task, CanceledError, _;
+    
+    var collectCallbackArgNames = function (args) {
+        if (args.length <= 1) return null;
+        
+        var result = [];
+        for (var i = 1; i < args.length; i++) {
+            result.push(args[i]);
+        }
+        
+        return result;
+    }
+
+    var collectArgs = function (args, requiredArgs) {
+        var result = [];
+        for (var i = 0; i < args.length; i++) {
+            result.push(args[i]);
+        }
+
+        while (result.length < requiredArgs) {
+            result.push(undefined);
+        }
+
+        return result;
+    }
+    
+    // Async members
+
+    var AggregateErrorTypeID = "4a73efb8-c2e2-4305-a05c-72385288650a";
+    var AggregateError = function (errors) {
+        this.children = [];
+        
+        if (errors) {
+            for (var i = 0; i < errors.length; i++) {
+                this.children.push(errors[i]);
+            }
+        }
+    }
+    AggregateError.prototype = {
+        _typeId: AggregateErrorTypeID,
+        message: "This is an error contains sub-errors, please check the 
'children' collection for more details.",
+        isTypeOf: function (ex) {
+            return ex._typeId == AggregateErrorTypeID;
+        }
+    }
+
+    var sleep = function (delay, /* CancellationToken */ ct) {
+        return Task.create(function (t) {
+            if (ct && ct.isCancellationRequested) {
+                t.complete("failure", new CanceledError());
+            }
+
+            var seed;
+            var cancelHandler;
+            
+            if (ct) {
+                cancelHandler = function () {
+                    clearTimeout(seed);
+                    t.complete("failure", new CanceledError());
+                }
+            }
+            
+            var seed = setTimeout(function () {
+                if (ct) {
+                    ct.unregister(cancelHandler);
+                }
+                
+                t.complete("success");
+            }, delay);
+            
+            if (ct) {
+                ct.register(cancelHandler);
+            }
+        });
+    }
+    
+    var onEvent = function (target, eventName, /* CancellationToken*/ ct) {
+        return Task.create(function (t) {
+            if (ct && ct.isCancellationRequested) {
+                t.complete("failure", new CanceledError());
+            }
+
+            var cleanUp = function () {
+                if (target.removeEventListener) {
+                    target.removeEventListener(eventName, eventHandler);
+                } else if (target.removeListener) {
+                    target.removeListener(eventName, eventHandler);
+                } else {
+                    target.detachEvent(eventName, eventHandler);
+                }
+            }
+            
+            var eventHandler;
+            var cancelHandler;
+
+            if (ct) {
+                cancelHandler = function () {
+                    cleanUp();
+                    t.complete("failure", new CanceledError());
+                }
+            }
+            
+            var eventHandler = function (ev) {
+                if (ct) {
+                    ct.unregister(cancelHandler);
+                }
+                
+                cleanUp();
+                t.complete("success", ev);
+            }
+            
+            if (target.addEventListener) {
+                target.addEventListener(eventName, eventHandler);
+            } else if (target.addListener) {
+                target.addListener(eventName, eventHandler);
+            } else {
+                target.attachEvent(eventName, eventHandler);
+            }
+            
+            if (ct) {
+                ct.register(cancelHandler);
+            }
+        });
+    }
+
+    // Task members
+    
+    var whenAll = function () {
+        var inputTasks;
+
+        if (arguments.length == 1) {
+            var arg = arguments[0];
+
+        if (Task.isTask(arg)) { // a single task
+                inputTasks = [arg];
+            } else {
+                inputTasks = arg;
+            }
+        } else {
+            inputTasks = new Array(arguments.length);
+            for (var i = 0; i < arguments.length; i++) {
+                inputTasks[i] = arguments[i];
+            }
+        }
+    
+        return Task.create(function (taskWhenAll) {
+            var taskKeys = {};
+    
+            _.each(inputTasks, function (key, task) {
+                if (!task) return;
+                
+                if (!Task.isTask(task)) {
+                    inputTasks[key] = task = whenAll(task);
+                }
+                
+                taskKeys[task.id] = key;
+            });
+
+            // start all the tasks
+            _.each(taskKeys, function (id, key) {
+                var task = inputTasks[key];
+                if (task.status === "ready") {
+                    task.start();
+                }
+            });
+
+            var done = function () {
+                var results = _.isArray(inputTasks) ? new 
Array(inputTasks.length) : { };
+                var errors = [];
+
+                _.each(taskKeys, function (id, key) {
+                    var task = inputTasks[key];
+                    if (task.error) {
+                        errors.push(task.error);
+                    } else {
+                        results[key] = task.result;
+                    }
+                });
+
+                if (errors.length > 0) {
+                    taskWhenAll.complete("failure", new 
AggregateError(errors));
+                } else {
+                    taskWhenAll.complete("success", results);
+                }
+            }
+
+            var runningNumber = 0;
+            
+            _.each(taskKeys, function (id, key) {
+                var task = inputTasks[key];
+                
+                if (task.status == "running") {
+                    runningNumber++;
+                    
+                    task.addEventListener("complete", function () {
+                        if (--runningNumber == 0) {
+                            done();
+                        }
+                    });
+                }
+            });
+
+            if (runningNumber == 0) {
+                done();
+            }
+        });
+    };
+    
+    var whenAny = function () {
+    
+        var tasks = { };
+
+        if (arguments.length == 1) {
+            var arg = arguments[0];
+            if (Task.isTask(arg)) {
+                tasks[0] = arg;
+            } else {
+                tasks = arg;
+            }
+        } else {
+            for (var i = 0; i < arguments.length; i++)
+                tasks[i] = arguments[i];
+        }
+        
+        return Task.create(function (taskWhenAny) {
+            var taskKeys = {};
+            for (var key in tasks) {
+                if (tasks.hasOwnProperty(key)) {
+                    var t = tasks[key];
+                    if (Task.isTask(t)) {
+                        taskKeys[t.id] = key;
+                    }
+                }
+            }
+        
+            // start all the tasks
+            for (var id in taskKeys) {
+                var t = tasks[taskKeys[id]];
+                if (t.status == "ready") {
+                    t.start();
+                }
+            }
+            
+            // if there's a task already failed/succeeded, then return
+            for (var id in taskKeys) {
+                var key = taskKeys[id];
+                var t = tasks[key];
+                if (t.error || t.status == "succeeded") {
+                    taskWhenAny.complete("success", { key: key, task: t });
+                    return;
+                }
+            }
+            
+            var onComplete = function (t) {
+                for (var id in taskKeys) {
+                    tasks[taskKeys[id]].removeEventListener("complete", 
onComplete);
+                }
+            
+                taskWhenAny.complete("success", { key: taskKeys[this.id], 
task: this });
+            }
+            
+            // now all the tasks are in "running" status.
+            for (var id in taskKeys) {
+                tasks[taskKeys[id]].addEventListener("complete", onComplete);
+            }
+        });
+    }
+    
+    var then = function (nextGenerator) {
+        var firstTask = this;
+        
+        return Task.create(function (t) {
+            
+            var nextOnComplete = function () {
+                if (this.error) {
+                    t.complete("failure", this.error);
+                } else {
+                    t.complete("success", this.result);
+                }
+            };
+            
+            var processNext = function (nextTask) {
+                if (nextTask.status == "ready") {
+                    nextTask.start();
+                }
+            
+                if (nextTask.status == "running") {
+                    nextTask.addEventListener("complete", nextOnComplete);
+                } else {
+                    nextOnComplete.call(nextTask);
+                }
+            };
+            
+            var firstOnComplete = function () {
+                if (this.error) {
+                    return t.complete("failure", this.error);
+                }
+                
+                var nextTask;
+                try {
+                    nextTask = nextGenerator(this.result);
+                } catch (ex) {
+                    return t.complete("failure", ex);
+                }
+                
+                processNext(nextTask);
+            };
+            
+            if (firstTask.status == "ready") {
+                firstTask.start();
+            }
+            
+            if (firstTask.status == "running") {
+                firstTask.addEventListener("complete", firstOnComplete);
+            } else {
+                firstOnComplete.call(firstTask);
+            }
+        });
+    };
+    
+    // Binding members
+    
+    var fromStandard = function (fn) {
+        var callbackArgNames = collectCallbackArgNames(arguments);
+    
+        return function () {
+            var _this = this;
+            var args = collectArgs(arguments, fn.length - 1);
+
+            return Task.create(function (t) {
+                args.push(function (error, result) {
+                    if (error) {
+                        t.complete("failure", error);
+                    } else if (!callbackArgNames) {
+                        t.complete("success", result);
+                    } else {
+                        var data = {};
+                        for (var i = 0; i < callbackArgNames.length; i++) {
+                            data[callbackArgNames[i]] = arguments[i + 1];
+                        }
+                        
+                        return t.complete("success", data);
+                    }
+                });
+                
+                fn.apply(_this, args);
+            });
+        };
+    };
+    
+    var fromCallback = function (fn) {
+        var callbackArgNames = collectCallbackArgNames(arguments);
+    
+        return function () {
+            var _this = this;
+            var args = collectArgs(arguments, fn.length - 1);
+
+            return Task.create(function (t) {
+                args.push(function (result) {
+                    if (callbackArgNames) {
+                        var data = {};
+                        for (var i = 0; i < callbackArgNames.length; i++) {
+                            data[callbackArgNames[i]] = arguments[i];
+                        }
+                        
+                        t.complete("success", data);
+                    } else {
+                        t.complete("success", result);
+                    }
+                });
+                
+                fn.apply(_this, args);
+            });
+        };
+    };
+
+    // CommonJS
+    var isCommonJS = !!(typeof require === "function" && typeof module !== 
"undefined" && module.exports);
+    // CommonJS AMD
+    var isAmd = !!(typeof require === "function" && typeof define === 
"function" && define.amd);
+
+    var defineModule = function () {
+        Jscex.define({
+            name: "async-powerpack",
+            version: "0.6.5",
+            exports: isCommonJS && module.exports,
+            require: isCommonJS && require,
+            dependencies: { async: "~0.6.5" },
+            init: function () {
+                
+                _ = Jscex._;
+                Task = Jscex.Async.Task;
+                CanceledError = Jscex.Async.CanceledError;
+                
+                var Async = Jscex.Async;
+                Async.sleep = sleep;
+                Async.onEvent = onEvent;
+                Async.AggregateError = AggregateError;
+            
+                Task.whenAll = whenAll;
+                Task.whenAny = whenAny;
+                Task.prototype.then = Task.prototype.continueWith = then;
+            
+                if (!Async.Binding) {
+                    Async.Binding = {};
+                }
+                
+                var Binding = Async.Binding;
+                Async.Jscexify = Binding;
+                
+                Binding.fromStandard = fromStandard;
+                Binding.fromCallback = fromCallback;
+            }
+        });
+    }
+
+    if (isCommonJS) {
+        try {
+            Jscex = require("./jscex");
+        } catch (ex) {
+            Jscex = require("jscex");
+        }
+        
+        defineModule();
+    } else if (isAmd) {
+        require(["jscex"], function (jscex) {
+            Jscex = jscex;
+            defineModule();
+        });
+    } else {
+        var Fn = Function, global = Fn('return this')();
+        if (!global.Jscex) {
+            throw new Error('Missing the root object, please load "jscex" 
component first.');
+        }
+        
+        Jscex = global.Jscex;
+        defineModule();
+    }
+})();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/03bf0cde/windows8/framework/Cordova-Metro/lib/Jscex/src/jscex-async.js
----------------------------------------------------------------------
diff --git a/windows8/framework/Cordova-Metro/lib/Jscex/src/jscex-async.js 
b/windows8/framework/Cordova-Metro/lib/Jscex/src/jscex-async.js
new file mode 100644
index 0000000..50a6779
--- /dev/null
+++ b/windows8/framework/Cordova-Metro/lib/Jscex/src/jscex-async.js
@@ -0,0 +1,283 @@
+(function () {
+    "use strict";
+
+    var Jscex;
+
+    var CanceledErrorTypeID = "670a1076-712b-4edd-9b70-64b152fe1cd9";
+    var isCanceledError = function (ex) { return ex._typeId == 
CanceledErrorTypeID; }
+    var CanceledError = function () { }
+    CanceledError.prototype = {
+        isTypeOf: isCanceledError,
+        _typeId: CanceledErrorTypeID,
+        message: "The task has been cancelled."
+    }
+
+    var Fn = Function, global = Fn('return this')();
+    
+    // seed defined in global
+    if (global.__jscex__async__taskIdSeed === undefined) {
+        global.__jscex__async__taskIdSeed = 0;
+    }
+
+    var isTask = function (t) {
+        return (typeof t.start === "function") && (typeof t.addEventListener) 
=== "function" && (typeof t.removeEventListener) === "function" && (typeof 
t.complete) === "function";
+    }
+        
+    var CancellationToken = function () { }
+    CancellationToken.prototype = {
+        register: function (handler) {
+            if (this.isCancellationRequested) {
+                handler();
+            }
+
+            if (!this._handlers) {
+                this._handlers = [];
+            }
+
+            this._handlers.push(handler);
+        },
+        
+        unregister: function (handler) {
+            if (!this._handlers) {
+                return;
+            }
+            
+            var index = this._handlers.indexOf(handler);
+            if (index >= 0) {
+                this._handlers.splice(index, 1);
+            }
+        },
+        
+        cancel: function () {
+            if (this.isCancellationRequested) {
+                return;
+            }
+
+            this.isCancellationRequested = true;
+
+            var handlers = this._handlers;
+            delete this._handlers;
+
+            for (var i = 0; i < handlers.length; i++) {
+                try {
+                    handlers[i]();
+                } catch (ex) {
+                    Jscex.logger.warn("[WARNING] Cancellation handler threw an 
error: " + ex);
+                }
+            }
+        },
+
+        throwIfCancellationRequested: function () {
+            if (this.isCancellationRequested) {
+                throw new CanceledError();
+            }
+        }
+    };
+    
+    var Task = function (delegate) {
+        this.id = (++__jscex__async__taskIdSeed);
+        this._delegate = delegate;
+        this._listeners = { };
+        this.status = "ready";
+    }
+    Task.prototype = {
+        start: function () {
+            if (this.status != "ready") {
+                throw new Error('Task can only be started in "ready" status.');
+            }
+
+            this.status = "running";
+            this._delegate(this);
+            
+            return this;
+        },
+        
+        complete: function (type, value) {
+            if (this.status != "running") {
+                throw new Error('The "complete" method can only be called in 
"running" status.');
+            }
+
+            var listeners = this._listeners;
+            delete this._listeners;
+            
+            if (type == "success") {
+
+                this.result = value;
+                this.status = "succeeded";
+                this._notify("success", listeners["success"]);
+
+            } else if (type == "failure") {
+
+                this.error = value;
+
+                if (isCanceledError(value)) {
+                    this.status = "canceled";
+                } else {
+                    this.status = "faulted";
+                }
+                
+                this._notify("failure", listeners["failure"]);
+
+            } else {
+                throw new Error("Unsupported type: " + type);
+            }
+            
+            this._notify("complete", listeners["complete"]);
+            
+            if (this.error && !listeners["failure"] && !listeners["complete"]) 
{
+                Jscex.logger.warn("[WARNING] An unhandled error occurred: " + 
this.error);
+            }
+        },
+
+        _notify: function (ev, listeners) {
+            if (!listeners) {
+                return;
+            }
+
+            for (var i = 0; i < listeners.length; i++) {
+                listeners[i].call(this);
+            }
+        },
+
+        addEventListener: function (ev, listener) {
+            if (!this._listeners) {
+                return this;
+            }
+
+            if (!this._listeners[ev]) {
+                this._listeners[ev] = [];
+            }
+            
+            this._listeners[ev].push(listener);
+            return this;
+        },
+
+        removeEventListener: function (ev, listener) {
+            if (!this._listeners) {
+                return this;
+            }
+
+            var evListeners = this._listeners[ev];
+            if (!evListeners) return this;
+            
+            var index = evListeners.indexOf(listener);
+            if (index >= 0) {
+                evListeners.splice(index, 1);
+            }
+            
+            return this;
+        }
+    };
+    
+    Task.create = function (delegate) {
+        return new Task(delegate);
+    }
+    
+    Task.isTask = isTask;
+    
+    var AsyncBuilder = function () { }
+    AsyncBuilder.prototype = {
+        Start: function (_this, task) {
+            return Task.create(function (t) {
+                task.next(_this, function (type, value, target) {
+                    if (type == "normal" || type == "return") {
+                        t.complete("success", value);
+                    } else if (type == "throw") {
+                        t.complete("failure", value);
+                    } else {
+                        throw new Error("Unsupported type: " + type);
+                    }
+                });
+            });
+        },
+
+        Bind: function (task, generator) {
+            return {
+                next: function (_this, callback) {
+                    
+                    var onComplete = function (t) {
+                        if (this.error) {
+                            callback("throw", this.error);
+                        } else {
+                            var nextTask;
+                            try {
+                                nextTask = generator.call(_this, this.result);
+                            } catch (ex) {
+                                callback("throw", ex);
+                                return;
+                            }
+
+                            nextTask.next(_this, callback);
+                        }
+                    }
+
+                    if (task.status == "ready") {
+                        task.addEventListener("complete", onComplete);
+                        task.start();
+                    } else if (task.status == "running") {
+                        task.addEventListener("complete", onComplete);
+                    } else {
+                        onComplete(task);
+                    }
+                }
+            };
+        }
+    }
+    
+    // CommonJS
+    var isCommonJS = !!(typeof require === "function" && typeof module !== 
"undefined" && module.exports);
+    // CommonJS AMD
+    var isAmd = !!(typeof require === "function" && typeof define === 
"function" && define.amd);
+
+    var defineModule = function () {
+        Jscex.define({
+            name: "async",
+            version: "0.6.5",
+            exports: isCommonJS && module.exports,
+            require: isCommonJS && require,
+            autoloads: [ "builderbase" ],
+            dependencies: { builderbase: "~0.6.5" },
+            init: function () {
+                
+                Jscex._.each(Jscex.BuilderBase.prototype, function (m, fn) {
+                    AsyncBuilder.prototype[m] = fn;
+                });
+            
+                if (!Jscex.Async) {
+                    Jscex.Async = {};
+                }
+                
+                var Async = Jscex.Async;
+                Async.CancellationToken = CancellationToken;
+                Async.CanceledError = CanceledError;
+                Async.Task = Task;
+                Async.AsyncBuilder = AsyncBuilder;
+            
+                Jscex.binders["async"] = "$await";
+                Jscex.builders["async"] = new AsyncBuilder();
+            }
+        });
+    }
+
+    if (isCommonJS) {
+        try {
+            Jscex = require("./jscex");
+        } catch (ex) {
+            Jscex = require("jscex");
+        }
+        
+        defineModule();
+    } else if (isAmd) {
+        require(["jscex"], function (jscex) {
+            Jscex = jscex;
+            defineModule();
+        });
+    } else {
+        if (!global.Jscex) {
+            throw new Error('Missing the root object, please load "jscex" 
component first.');
+        }
+        
+        Jscex = global.Jscex;
+        defineModule();
+    }
+})();

http://git-wip-us.apache.org/repos/asf/incubator-cordova-windows/blob/03bf0cde/windows8/framework/Cordova-Metro/lib/Jscex/src/jscex-builderbase.js
----------------------------------------------------------------------
diff --git 
a/windows8/framework/Cordova-Metro/lib/Jscex/src/jscex-builderbase.js 
b/windows8/framework/Cordova-Metro/lib/Jscex/src/jscex-builderbase.js
new file mode 100644
index 0000000..41f6e5d
--- /dev/null
+++ b/windows8/framework/Cordova-Metro/lib/Jscex/src/jscex-builderbase.js
@@ -0,0 +1,334 @@
+(function () {
+    "use strict";
+    
+    var BuilderBase = function () { }
+    BuilderBase.prototype = {
+        For: function (condition, update, body) {
+            return {
+                next: function (_this, callback) {
+                    
+                    var loop = function (skipUpdate) {
+                        try {
+                            if (update && !skipUpdate) {
+                                update.call(_this);
+                            }
+
+                            if (!condition || condition.call(_this)) {
+                                body.next(_this, function (type, value, 
target) {
+                                    if (type == "normal" || type == 
"continue") {
+                                        loop(false);
+                                    } else if (type == "throw" || type == 
"return") {
+                                        callback(type, value);
+                                    } else if (type == "break") {
+                                        callback("normal");
+                                    } else {
+                                        throw new Error('Invalid type for 
"Loop": ' + type);
+                                    }
+                                });
+                            } else {
+                                callback("normal");
+                            }
+                        } catch (ex) {
+                            callback("throw", ex);
+                        }
+                    }
+                    
+                    loop(true);
+                }
+            };
+        },
+        
+        ForIn: function (obj, bodyGenerator) {
+            return {
+                next: function (_this, callback) {
+                
+                    var keys = [];
+                    for (var k in obj) {
+                        keys.push(k);
+                    }
+                    
+                    var loop = function (i) {
+                        try {
+                            if (i < keys.length) {
+                                var body = bodyGenerator(keys[i]);
+                                body.next(_this, function (type, value, 
target) {
+                                    if (type == "normal" || type == 
"continue") {
+                                        loop(i + 1);
+                                    } else if (type == "throw" || type == 
"return") {
+                                        callback(type, value);
+                                    } else if (type == "break") {
+                                        callback("normal");
+                                    } else {
+                                        throw new Error('Invalid type for 
"Loop": ' + type);
+                                    }
+                                });
+                            } else {
+                                callback("normal");
+                            }
+                        } catch (ex) {
+                            callback("throw", ex);
+                        }
+                    }
+                    
+                    loop(0);
+                }
+            };
+        },
+        
+        While: function (condition, body) {
+            return {
+                next: function (_this, callback) {
+                    var loop = function () {
+                        try {
+                            if (condition.call(_this)) {
+                                body.next(_this, function (type, value, 
target) {
+                                    if (type == "normal" || type == 
"continue") {
+                                        loop();
+                                    } else if (type == "throw" || type == 
"return") {
+                                        callback(type, value);
+                                    } else if (type == "break") {
+                                        callback("normal");
+                                    } else {
+                                        throw new Error('Invalid type for 
"Loop": ' + type);
+                                    }
+                                });
+                            } else {
+                                callback("normal");
+                            }
+                        } catch (ex) {
+                            callback("throw", ex);
+                        }
+                    }
+                    
+                    loop();
+                }
+            };
+        },
+        
+        Do: function (body, condition) {
+            return {
+                next: function (_this, callback) {
+                
+                    var loop = function () {
+                        body.next(_this, function (type, value, target) {
+                            if (type == "normal" || type == "continue") {
+                                try {
+                                    if (condition.call(_this)) {
+                                        loop();
+                                    } else {
+                                        callback("normal");
+                                    }
+                                } catch (ex) {
+                                    callback("throw", ex);
+                                }
+                            } else if (type == "throw" || type == "return") {
+                                callback(type, value);
+                            } else if (type == "break") {
+                                callback("normal");
+                            } else {
+                                throw new Error('Invalid type for "Loop": ' + 
type);
+                            }
+                        });
+                    };
+                
+                    loop();
+                }
+            };
+        },
+        
+        Delay: function (generator) {
+            return {
+                next: function (_this, callback) {
+                    try {
+                        var step = generator.call(_this);
+                        step.next(_this, callback);
+                    } catch (ex) {
+                        callback("throw", ex);
+                    }
+                }
+            };
+        },
+
+        Combine: function (s1, s2) {
+            return {
+                next: function (_this, callback) {
+                    s1.next(_this, function (type, value, target) {
+                        if (type == "normal") {
+                            try {
+                                s2.next(_this, callback);
+                            } catch (ex) {
+                                callback("throw", ex);
+                            }
+                        } else {
+                            callback(type, value, target);
+                        }
+                    });
+                }
+            };
+        },
+
+        Return: function (result) {
+            return {
+                next: function (_this, callback) {
+                    callback("return", result);
+                }
+            };
+        },
+
+        Normal: function () {
+            return {
+                next: function (_this, callback) {
+                    callback("normal");
+                }
+            };
+        },
+
+        Break: function () {
+            return {
+                next: function (_this, callback) {
+                    callback("break");
+                }
+            };
+        },
+
+        Continue: function () {
+            return {
+                next: function (_this, callback) {
+                    callback("continue");
+                }
+            };
+        },
+
+        Throw: function (ex) {
+            return {
+                next: function (_this, callback) {
+                    callback("throw", ex);
+                }
+            };
+        },
+
+        Try: function (tryTask, catchGenerator, finallyStep) {
+            return {
+                next: function (_this, callback) {
+                    tryTask.next(_this, function (type, value, target) {
+                        if (type != "throw" || !catchGenerator) {
+                            if (!finallyStep) {
+                                callback(type, value, target);
+                            } else {
+                                finallyStep.next(_this, function (finallyType, 
finallyValue, finallyTarget) {
+                                    if (finallyType == "normal") {
+                                        callback(type, value, target);
+                                    } else {
+                                        callback(finallyType, finallyValue, 
finallyTarget);
+                                    }
+                                });
+                            }
+                        } else {
+
+                            if (catchGenerator) {
+
+                                var catchTask;
+                                try {
+                                    catchTask = catchGenerator.call(_this, 
value);
+                                } catch (ex) {
+                                    if (finallyStep) {
+                                        finallyStep.next(_this, function 
(finallyType, finallyValue, finallyTarget) {
+                                            if (finallyType == "normal") {
+                                                callback("throw", ex);
+                                            } else {
+                                                callback(finallyType, 
finallyValue, finallyTarget);
+                                            }
+                                        });
+                                    } else {
+                                        callback("throw", ex);
+                                    }
+                                }
+                                
+                                if (catchTask) {
+                                    catchTask.next(_this, function (catchType, 
catchValue, catchTarget) {
+                                        if (catchType == "throw") {
+                                            if (finallyStep) {
+                                                finallyStep.next(_this, 
function (finallyType, finallyValue, finallyTarget) {
+                                                    if (finallyType == 
"normal") {
+                                                        callback(catchType, 
catchValue, catchTarget);
+                                                    } else {
+                                                        callback(finallyType, 
finallyValue, finallyTarget);
+                                                    }
+                                                });
+                                            } else {
+                                                callback(catchType, 
catchValue, catchTarget);
+                                            }
+                                        } else {
+                                            if (finallyStep) {
+                                                finallyStep.next(_this, 
function (finallyType, finallyValue, finallyTarget) {
+                                                    if (finallyType == 
"normal") {
+                                                        callback(catchType, 
catchValue, catchTarget);
+                                                    } else {
+                                                        callback(finallyType, 
finallyValue, finallyTarget);
+                                                    }
+                                                });
+                                            } else {
+                                                callback(catchType, 
catchValue, catchTarget);
+                                            }
+                                        }  
+                                    });
+                                }
+                            } else {
+                                finallyStep.next(_this, function (finallyType, 
finallyValue, finallyTarget) {
+                                    if (finallyType == "normal") {
+                                        callback(type, value, target);
+                                    } else {
+                                        callback(finallyType, finallyValue, 
finallyTarget);
+                                    }
+                                });
+                            }
+                        }
+                    });
+                }
+            };
+        }
+    }
+
+    // CommonJS
+    var isCommonJS = !!(typeof require === "function" && typeof module !== 
"undefined" && module.exports);
+    // CommonJS AMD
+    var isAmd = !!(typeof require === "function" && typeof define === 
"function" && define.amd);
+
+    var Jscex;
+
+    var defineModule = function () {
+        Jscex.define({
+            name: "builderbase",
+            version: "0.6.5",
+            exports: isCommonJS && module.exports,
+            require: isCommonJS && require,
+            coreDependency: "~0.6.5",
+            init: function () {
+                Jscex.BuilderBase = BuilderBase;
+            }
+        });
+    }
+
+    if (isCommonJS) {
+        try {
+            Jscex = require("./jscex");
+        } catch (ex) {
+            Jscex = require("jscex");
+        }
+        
+        defineModule();
+    } else if (isAmd) {
+        require(["jscex"], function (jscex) {
+            Jscex = jscex;
+            defineModule();
+        });
+    } else {
+        var Fn = Function, global = Fn('return this')();
+        if (!global.Jscex) {
+            throw new Error('Missing the root object, please load "jscex" 
component first.');
+        }
+        
+        Jscex = global.Jscex;
+        defineModule();
+    }
+})();
\ No newline at end of file

Reply via email to