diff --git a/.jshintrc b/.jshintrc index 376e14f..56a8a62 100644 --- a/.jshintrc +++ b/.jshintrc @@ -7,8 +7,5 @@ "trailing":true, "camelcase":true, "quotmark":"single", - "globals": { - "module":true, - "require":true - } + "node":true } \ No newline at end of file diff --git a/Gruntfile.js b/Gruntfile.js index 2156651..729a5e3 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,16 +1,15 @@ module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), - component: { - build:{ - options: { - args: { - out: 'dist', - name: '<%= pkg.name %>', - //"no-require":true, - standalone:'liar' - } - }} + browserify: { + all: { + files: { + 'dist/<%= pkg.name %>.js': ['lib/index.js'], + }, + options: { + standalone: '<%= pkg.name %>' + } + } }, uglify: { options: { @@ -32,7 +31,7 @@ module.exports = function(grunt) { } }); - grunt.loadNpmTasks('grunt-component'); + grunt.loadNpmTasks('grunt-browserify'); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.registerTask('test',function(){ @@ -44,5 +43,5 @@ module.exports = function(grunt) { done(); }); }); - grunt.registerTask('default', ['jshint','component','uglify']); + grunt.registerTask('default', ['jshint','browserify','uglify']); }; \ No newline at end of file diff --git a/component.json b/component.json index bdf297e..4baf92a 100644 --- a/component.json +++ b/component.json @@ -2,10 +2,10 @@ "name": "liar", "repo": "calvinmetcalf/liar", "description": "a toolbelt of deceit", - "version": "0.0.2", + "version": "0.0.3", "keywords": [], "dependencies": { - "calvinmetcalf/lie": "2.0.1" + "calvinmetcalf/lie": "2.0.6" }, "development": {}, "license": "MIT", diff --git a/dist/liar.js b/dist/liar.js index 887ec61..5c07ac6 100644 --- a/dist/liar.js +++ b/dist/liar.js @@ -1,206 +1,229 @@ -;(function(){ - -/** - * Require the given path. - * - * @param {String} path - * @return {Object} exports - * @api public - */ - -function require(path, parent, orig) { - var resolved = require.resolve(path); - - // lookup failed - if (null == resolved) { - orig = orig || path; - parent = parent || 'root'; - var err = new Error('Failed to require "' + orig + '" from "' + parent + '"'); - err.path = orig; - err.parent = parent; - err.require = true; - throw err; - } - - var module = require.modules[resolved]; - - // perform real require() - // by invoking the module's - // registered function - if (!module.exports) { - module.exports = {}; - module.client = module.component = true; - module.call(this, module.exports, require.relative(resolved), module); - } - - return module.exports; -} - -/** - * Registered modules. - */ - -require.modules = {}; - -/** - * Registered aliases. - */ - -require.aliases = {}; - -/** - * Resolve `path`. - * - * Lookup: - * - * - PATH/index.js - * - PATH.js - * - PATH - * - * @param {String} path - * @return {String} path or null - * @api private - */ - -require.resolve = function(path) { - if (path.charAt(0) === '/') path = path.slice(1); - - var paths = [ - path, - path + '.js', - path + '.json', - path + '/index.js', - path + '/index.json' - ]; - - for (var i = 0; i < paths.length; i++) { - var path = paths[i]; - if (require.modules.hasOwnProperty(path)) return path; - if (require.aliases.hasOwnProperty(path)) return require.aliases[path]; - } +!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.liar=e():"undefined"!=typeof global?global.liar=e():"undefined"!=typeof self&&(self.liar=e())}(function(){var define,module,exports; +return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0) { + var fn = queue.shift(); + fn(); + } + } + }, true); - for (var i = 0; i < path.length; ++i) { - if ('..' == path[i]) { - curr.pop(); - } else if ('.' != path[i] && '' != path[i]) { - segs.push(path[i]); + return function nextTick(fn) { + queue.push(fn); + window.postMessage('process-tick', '*'); + }; } - } - return curr.concat(segs).join('/'); -}; + return function nextTick(fn) { + setTimeout(fn, 0); + }; +})(); -/** - * Register module at `path` with callback `definition`. - * - * @param {String} path - * @param {Function} definition - * @api private - */ +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; -require.register = function(path, definition) { - require.modules[path] = definition; -}; +process.binding = function (name) { + throw new Error('process.binding is not supported'); +} -/** - * Alias a module definition. - * - * @param {String} from - * @param {String} to - * @api private - */ - -require.alias = function(from, to) { - if (!require.modules.hasOwnProperty(from)) { - throw new Error('Failed to alias "' + from + '", it does not exist'); - } - require.aliases[to] = from; +// TODO(shtylman) +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); }; -/** - * Return a require function relative to the `parent` path. - * - * @param {String} parent - * @return {Function} - * @api private - */ - -require.relative = function(parent) { - var p = require.normalize(parent, '..'); - - /** - * lastIndexOf helper. - */ - - function lastIndexOf(arr, obj) { - var i = arr.length; - while (i--) { - if (arr[i] === obj) return i; +},{}],3:[function(require,module,exports){ +var immediate = require('immediate'); +// Creates a deferred: an object with a promise and corresponding resolve/reject methods +function Promise(resolver) { + if (!(this instanceof Promise)) { + return new Promise(resolver); } - return -1; - } - - /** - * The relative require() itself. - */ - - function localRequire(path) { - var resolved = localRequire.resolve(path); - return require(resolved, parent, path); - } - - /** - * Resolve relative to the parent. - */ - - localRequire.resolve = function(path) { - var c = path.charAt(0); - if ('/' == c) return path.slice(1); - if ('.' == c) return require.normalize(p, path); - - // resolve deps by returning - // the dep in the nearest "deps" - // directory - var segs = parent.split('/'); - var i = lastIndexOf(segs, 'deps') + 1; - if (!i) i = 0; - path = segs.slice(0, i + 1).join('/') + '/deps/' + path; - return path; - }; - - /** - * Check if module is defined at `path`. - */ - - localRequire.exists = function(path) { - return require.modules.hasOwnProperty(localRequire.resolve(path)); - }; - - return localRequire; -}; -require.register("calvinmetcalf-setImmediate/lib/index.js", function(exports, require, module){ + var sucessQueue = []; + var failureQueue = []; + var resolved = false; + // The `handler` variable points to the function that will + // 1) handle a .then(onFulfilled, onRejected) call + // 2) handle a .resolve or .reject call (if not fulfilled) + // Before 2), `handler` holds a queue of callbacks. + // After 2), `handler` is a simple .then handler. + // We use only one function to save memory and complexity. + // Case 1) handle a .then(onFulfilled, onRejected) call + function pending(onFulfilled, onRejected){ + return Promise(function(success,failure){ + if(typeof onFulfilled === 'function'){ + sucessQueue.push({ + resolve: success, + reject: failure, + callback:onFulfilled + }); + }else{ + sucessQueue.push({ + next: success, + callback:false + }); + } + if(typeof onRejected === 'function'){ + failureQueue.push({ + resolve: success, + reject: failure, + callback:onRejected + }); + }else{ + failureQueue.push({ + next: failure, + callback:false + }); + } + }); + } + this.then = function(onFulfilled, onRejected) { + return resolved?resolved(onFulfilled, onRejected):pending(onFulfilled, onRejected); + }; + // Case 2) handle a .resolve or .reject call + // (`onFulfilled` acts as a sentinel) + // The actual function signature is + // .re[ject|solve](sentinel, success, value) + function resolve(success, value){ + if(resolved){ + return; + } + resolved = createHandler(this, value, success?0:1); + var queue = success ? sucessQueue : failureQueue; + var len = queue.length; + var i = -1; + while(++i < len) { + if (queue[i].callback) { + immediate(execute,queue[i].callback, value, queue[i].resolve, queue[i].reject); + }else if(!queue[i].next){ + console.log(queue[i]); + }else{ + queue[i].next(value); + } + } + // Replace this handler with a simple resolved or rejected handler + } + var fulfill = resolve.bind(this,true); + var reject = resolve.bind(this,false); + try{ + resolver(function(a){ + if(a && typeof a.then==='function'){ + a.then(fulfill,reject); + }else{ + fulfill(a); + } + },reject); + }catch(e){ + reject(e); + } +} + +// Creates a fulfilled or rejected .then function +function createHandler(scope, value, success) { + return function() { + var callback = arguments[success]; + if (typeof callback !== 'function') { + return scope; + } + return Promise(function(resolve,reject){ + immediate(execute,callback,value,resolve,reject); + }); + }; +} + +// Executes the callback with the specified value, +// resolving or rejecting the deferred +function execute(callback, value, resolve, reject) { + try { + var result = callback(value); + if (result && typeof result.then === 'function') { + result.then(resolve, reject); + } + else { + resolve(result); + } + } + catch (error) { + reject(error); + } +} +module.exports = Promise; + +},{"immediate":5}],4:[function(require,module,exports){ +var global=typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {};module.exports = typeof global === "object" && global ? global : this; +},{}],5:[function(require,module,exports){ "use strict"; var types = [ require("./nextTick"), require("./mutation"), + require("./realSetImmediate"), require("./postMessage"), require("./messageChannel"), require("./stateChange"), @@ -246,9 +269,48 @@ retFunc.clear = function (n) { }; module.exports = retFunc; -}); -require.register("calvinmetcalf-setImmediate/lib/nextTick.js", function(exports, require, module){ +},{"./messageChannel":6,"./mutation":7,"./nextTick":8,"./postMessage":9,"./realSetImmediate":10,"./stateChange":11,"./timeout":12}],6:[function(require,module,exports){ "use strict"; +var globe = require("./global"); +exports.test = function () { + return !!globe.MessageChannel; +}; + +exports.install = function (func) { + var channel = new globe.MessageChannel(); + channel.port1.onmessage = func; + return function () { + channel.port2.postMessage(0); + }; +}; +},{"./global":4}],7:[function(require,module,exports){ +"use strict"; +//based off rsvp +//https://github.com/tildeio/rsvp.js/blob/master/lib/rsvp/async.js +var globe = require("./global"); + +var MutationObserver = globe.MutationObserver || globe.WebKitMutationObserver; + +exports.test = function () { + return MutationObserver; +}; + +exports.install = function (handle) { + var observer = new MutationObserver(handle); + var element = globe.document.createElement("div"); + observer.observe(element, { attributes: true }); + + // Chrome Memory Leak: https://bugs.webkit.org/show_bug.cgi?id=93661 + globe.addEventListener("unload", function () { + observer.disconnect(); + observer = null; + }, false); + return function () { + element.setAttribute("drainQueue", "drainQueue"); + }; +}; +},{"./global":4}],8:[function(require,module,exports){ +var process=require("__browserify_process");"use strict"; exports.test = function () { // Don't get fooled by e.g. browserify environments. return typeof process === "object" && Object.prototype.toString.call(process) === "[object process]"; @@ -257,8 +319,7 @@ exports.test = function () { exports.install = function () { return process.nextTick; }; -}); -require.register("calvinmetcalf-setImmediate/lib/postMessage.js", function(exports, require, module){ +},{"__browserify_process":2}],9:[function(require,module,exports){ "use strict"; var globe = require("./global"); exports.test = function () { @@ -296,23 +357,19 @@ exports.install = function (func) { globe.postMessage(codeWord, "*"); }; }; -}); -require.register("calvinmetcalf-setImmediate/lib/messageChannel.js", function(exports, require, module){ +},{"./global":4}],10:[function(require,module,exports){ "use strict"; var globe = require("./global"); exports.test = function () { - return !!globe.MessageChannel; + return globe.setImmediate; }; -exports.install = function (func) { - var channel = new globe.MessageChannel(); - channel.port1.onmessage = func; - return function () { - channel.port2.postMessage(0); - }; +exports.install = function (handle) { + //return globe.setImmediate.bind(globe, handle); + return globe.setTimeout.bind(globe,handle,0); }; -}); -require.register("calvinmetcalf-setImmediate/lib/stateChange.js", function(exports, require, module){ + +},{"./global":4}],11:[function(require,module,exports){ "use strict"; var globe = require("./global"); exports.test = function () { @@ -337,8 +394,7 @@ exports.install = function (handle) { return handle; }; }; -}); -require.register("calvinmetcalf-setImmediate/lib/timeout.js", function(exports, require, module){ +},{"./global":4}],12:[function(require,module,exports){ "use strict"; exports.test = function () { return true; @@ -349,205 +405,7 @@ exports.install = function (t) { setTimeout(t, 0); }; }; +},{}]},{},[1]) +(1) }); -require.register("calvinmetcalf-setImmediate/lib/global.js", function(exports, require, module){ -module.exports = typeof global === "object" && global ? global : this; -}); -require.register("calvinmetcalf-setImmediate/lib/mutation.js", function(exports, require, module){ -"use strict"; -//based off rsvp -//https://github.com/tildeio/rsvp.js/blob/master/lib/rsvp/async.js -var globe = require("./global"); - -var MutationObserver = globe.MutationObserver || globe.WebKitMutationObserver; - -exports.test = function () { - return MutationObserver; -}; - -exports.install = function (handle) { - var observer = new MutationObserver(handle); - var element = globe.document.createElement("div"); - observer.observe(element, { attributes: true }); - - // Chrome Memory Leak: https://bugs.webkit.org/show_bug.cgi?id=93661 - globe.addEventListener("unload", function () { - observer.disconnect(); - observer = null; - }, false); - return function () { - element.setAttribute("drainQueue", "drainQueue"); - }; -}; -}); -require.register("calvinmetcalf-lie/lie.js", function(exports, require, module){ -var immediate = require('immediate'); -// Creates a deferred: an object with a promise and corresponding resolve/reject methods -function Promise(resolver) { - if (!(this instanceof Promise)) { - return new Promise(resolver); - } - // The `handler` variable points to the function that will - // 1) handle a .then(onFulfilled, onRejected) call - // 2) handle a .resolve or .reject call (if not fulfilled) - // Before 2), `handler` holds a queue of callbacks. - // After 2), `handler` is a simple .then handler. - // We use only one function to save memory and complexity. - var handler = function(onFulfilled, onRejected, value) { - // Case 1) handle a .then(onFulfilled, onRejected) call - if (onFulfilled !== handler) { - return Promise(function(resolver,rejecter){ - handler.queue.push({ - resolve: onFulfilled, - reject: onRejected, - resolver:resolver, - rejecter:rejecter - }); - }); - } - - // Case 2) handle a .resolve or .reject call - // (`onFulfilled` acts as a sentinel) - // The actual function signature is - // .re[ject|solve](sentinel, success, value) - var action = onRejected ? 'resolve' : 'reject'; - var queue; - var callback; - for (var i = 0, l = handler.queue.length; i < l; i++) { - queue = handler.queue[i]; - callback = queue[action]; - if (typeof callback === 'function') { - execute(callback, value, queue.resolver, queue.rejecter); - }else if(onRejected){ - queue.resolver(value); - }else{ - queue.rejecter(value); - } - } - // Replace this handler with a simple resolved or rejected handler - handler = createHandler(then, value, onRejected); - }; - function then(onFulfilled, onRejected) { - return handler(onFulfilled, onRejected); - } - - this.then = then; - // The queue of deferreds - handler.queue = []; - resolver(function(value) { - if (handler.queue) { - handler(handler, true, value); - } - },function (reason) { - if (handler.queue) { - handler(handler, false, reason); - } - }); -} - -// Creates a fulfilled or rejected .then function -function createHandler(then, value, success) { - return function(onFulfilled, onRejected) { - var callback = success ? onFulfilled : onRejected; - if (typeof callback !== 'function') { - return {then:then}; - } - return Promise(function(resolve,reject){ - execute(callback, value, resolve, reject); - }); - }; -} - -// Executes the callback with the specified value, -// resolving or rejecting the deferred -function execute(callback, value, resolve, reject) { - immediate(function() { - var result; - try { - result = callback(value); - if (result && typeof result.then === 'function') { - result.then(resolve, reject); - } - else { - resolve(result); - } - } - catch (error) { - reject(error); - } - }); -} - -module.exports = Promise; - -}); -require.register("liar/lib/index.js", function(exports, require, module){ -var promise = require('lie'); -promise.all = function(array) { - return promise(function(fulfill,reject){ - var len = array.length; - var fulfilled = 0; - var out = []; - var onSuccess = function(n) { - return function(v) { - out[n] = v; - if (++fulfilled === len) { - fulfill(out); - } - }; - }; - array.forEach(function(v, i) { - v.then(onSuccess(i), function(a) { - reject(a); - }); - }); - }); -}; -promise.some = function(array) { - return promise(function(fulfill,reject){ - var len = array.length; - var rejected = 0; - var out = []; - function onFailure(n) { - return function(v) { - out[n] = v; - if (++rejected === len) { - reject(out); - } - }; - } - array.forEach(function(v, i) { - v.then(function(a) { - fulfill(a); - },onFailure(i)); - }); - }); -}; - -module.exports = promise; -}); -require.alias("calvinmetcalf-lie/lie.js", "liar/deps/lie/lie.js"); -require.alias("calvinmetcalf-lie/lie.js", "liar/deps/lie/index.js"); -require.alias("calvinmetcalf-lie/lie.js", "lie/index.js"); -require.alias("calvinmetcalf-setImmediate/lib/index.js", "calvinmetcalf-lie/deps/immediate/lib/index.js"); -require.alias("calvinmetcalf-setImmediate/lib/nextTick.js", "calvinmetcalf-lie/deps/immediate/lib/nextTick.js"); -require.alias("calvinmetcalf-setImmediate/lib/postMessage.js", "calvinmetcalf-lie/deps/immediate/lib/postMessage.js"); -require.alias("calvinmetcalf-setImmediate/lib/messageChannel.js", "calvinmetcalf-lie/deps/immediate/lib/messageChannel.js"); -require.alias("calvinmetcalf-setImmediate/lib/stateChange.js", "calvinmetcalf-lie/deps/immediate/lib/stateChange.js"); -require.alias("calvinmetcalf-setImmediate/lib/timeout.js", "calvinmetcalf-lie/deps/immediate/lib/timeout.js"); -require.alias("calvinmetcalf-setImmediate/lib/global.js", "calvinmetcalf-lie/deps/immediate/lib/global.js"); -require.alias("calvinmetcalf-setImmediate/lib/mutation.js", "calvinmetcalf-lie/deps/immediate/lib/mutation.js"); -require.alias("calvinmetcalf-setImmediate/lib/index.js", "calvinmetcalf-lie/deps/immediate/index.js"); -require.alias("calvinmetcalf-setImmediate/lib/index.js", "calvinmetcalf-setImmediate/index.js"); - -require.alias("calvinmetcalf-lie/lie.js", "calvinmetcalf-lie/index.js"); - -require.alias("liar/lib/index.js", "liar/index.js"); - -if (typeof exports == "object") { - module.exports = require("liar"); -} else if (typeof define == "function" && define.amd) { - define(function(){ return require("liar"); }); -} else { - this["liar"] = require("liar"); -}})(); \ No newline at end of file +; \ No newline at end of file diff --git a/dist/liar.min.js b/dist/liar.min.js index 4c52139..d03cf38 100644 --- a/dist/liar.min.js +++ b/dist/liar.min.js @@ -1 +1 @@ -!function(){function a(b,c,d){var e=a.resolve(b);if(null==e){d=d||b,c=c||"root";var f=new Error('Failed to require "'+d+'" from "'+c+'"');throw f.path=d,f.parent=c,f.require=!0,f}var g=a.modules[e];return g.exports||(g.exports={},g.client=g.component=!0,g.call(this,g.exports,a.relative(e),g)),g.exports}a.modules={},a.aliases={},a.resolve=function(b){"/"===b.charAt(0)&&(b=b.slice(1));for(var c=[b,b+".js",b+".json",b+"/index.js",b+"/index.json"],d=0;d1&&"function"==typeof a&&(c=Array.prototype.slice.call(arguments,1),c.unshift(void 0),a=a.bind.apply(a,c)),1===(b=g.push(a))&&e(d),b};h.clear=function(a){return a<=g.length&&(g[a-1]=function(){}),this},c.exports=h}),a.register("calvinmetcalf-setImmediate/lib/nextTick.js",function(a){"use strict";a.test=function(){return"object"==typeof process&&"[object process]"===Object.prototype.toString.call(process)},a.install=function(){return process.nextTick}}),a.register("calvinmetcalf-setImmediate/lib/postMessage.js",function(a,b){"use strict";var c=b("./global");a.test=function(){if(!c.postMessage||c.importScripts)return!1;var a=!0,b=c.onmessage;return c.onmessage=function(){a=!1},c.postMessage("","*"),c.onmessage=b,a},a.install=function(a){function b(b){b.source===c&&b.data===d&&a()}var d="com.calvinmetcalf.setImmediate"+Math.random();return c.addEventListener?c.addEventListener("message",b,!1):c.attachEvent("onmessage",b),function(){c.postMessage(d,"*")}}}),a.register("calvinmetcalf-setImmediate/lib/messageChannel.js",function(a,b){"use strict";var c=b("./global");a.test=function(){return!!c.MessageChannel},a.install=function(a){var b=new c.MessageChannel;return b.port1.onmessage=a,function(){b.port2.postMessage(0)}}}),a.register("calvinmetcalf-setImmediate/lib/stateChange.js",function(a,b){"use strict";var c=b("./global");a.test=function(){return"document"in c&&"onreadystatechange"in c.document.createElement("script")},a.install=function(a){return function(){var b=c.document.createElement("script");return b.onreadystatechange=function(){a(),b.onreadystatechange=null,b.parentNode.removeChild(b),b=null},c.document.documentElement.appendChild(b),a}}}),a.register("calvinmetcalf-setImmediate/lib/timeout.js",function(a){"use strict";a.test=function(){return!0},a.install=function(a){return function(){setTimeout(a,0)}}}),a.register("calvinmetcalf-setImmediate/lib/global.js",function(a,b,c){c.exports="object"==typeof global&&global?global:this}),a.register("calvinmetcalf-setImmediate/lib/mutation.js",function(a,b){"use strict";var c=b("./global"),d=c.MutationObserver||c.WebKitMutationObserver;a.test=function(){return d},a.install=function(a){var b=new d(a),e=c.document.createElement("div");return b.observe(e,{attributes:!0}),c.addEventListener("unload",function(){b.disconnect(),b=null},!1),function(){e.setAttribute("drainQueue","drainQueue")}}}),a.register("calvinmetcalf-lie/lie.js",function(a,b,c){function Promise(a){function b(a,b){return c(a,b)}if(!(this instanceof Promise))return new Promise(a);var c=function(a,f,g){if(a!==c)return Promise(function(b,d){c.queue.push({resolve:a,reject:f,resolver:b,rejecter:d})});for(var h,i,j=f?"resolve":"reject",k=0,l=c.queue.length;l>k;k++)h=c.queue[k],i=h[j],"function"==typeof i?e(i,g,h.resolver,h.rejecter):f?h.resolver(g):h.rejecter(g);c=d(b,g,f)};this.then=b,c.queue=[],a(function(a){c.queue&&c(c,!0,a)},function(a){c.queue&&c(c,!1,a)})}function d(a,b,c){return function(d,f){var g=c?d:f;return"function"!=typeof g?{then:a}:Promise(function(a,c){e(g,b,a,c)})}}function e(a,b,c,d){f(function(){var e;try{e=a(b),e&&"function"==typeof e.then?e.then(c,d):c(e)}catch(f){d(f)}})}var f=b("immediate");c.exports=Promise}),a.register("liar/lib/index.js",function(a,b,c){var d=b("lie");d.all=function(a){return d(function(b,c){var d=a.length,e=0,f=[],g=function(a){return function(c){f[a]=c,++e===d&&b(f)}};a.forEach(function(a,b){a.then(g(b),function(a){c(a)})})})},d.some=function(a){return d(function(b,c){function d(a){return function(b){g[a]=b,++f===e&&c(g)}}var e=a.length,f=0,g=[];a.forEach(function(a,c){a.then(function(a){b(a)},d(c))})})},c.exports=d}),a.alias("calvinmetcalf-lie/lie.js","liar/deps/lie/lie.js"),a.alias("calvinmetcalf-lie/lie.js","liar/deps/lie/index.js"),a.alias("calvinmetcalf-lie/lie.js","lie/index.js"),a.alias("calvinmetcalf-setImmediate/lib/index.js","calvinmetcalf-lie/deps/immediate/lib/index.js"),a.alias("calvinmetcalf-setImmediate/lib/nextTick.js","calvinmetcalf-lie/deps/immediate/lib/nextTick.js"),a.alias("calvinmetcalf-setImmediate/lib/postMessage.js","calvinmetcalf-lie/deps/immediate/lib/postMessage.js"),a.alias("calvinmetcalf-setImmediate/lib/messageChannel.js","calvinmetcalf-lie/deps/immediate/lib/messageChannel.js"),a.alias("calvinmetcalf-setImmediate/lib/stateChange.js","calvinmetcalf-lie/deps/immediate/lib/stateChange.js"),a.alias("calvinmetcalf-setImmediate/lib/timeout.js","calvinmetcalf-lie/deps/immediate/lib/timeout.js"),a.alias("calvinmetcalf-setImmediate/lib/global.js","calvinmetcalf-lie/deps/immediate/lib/global.js"),a.alias("calvinmetcalf-setImmediate/lib/mutation.js","calvinmetcalf-lie/deps/immediate/lib/mutation.js"),a.alias("calvinmetcalf-setImmediate/lib/index.js","calvinmetcalf-lie/deps/immediate/index.js"),a.alias("calvinmetcalf-setImmediate/lib/index.js","calvinmetcalf-setImmediate/index.js"),a.alias("calvinmetcalf-lie/lie.js","calvinmetcalf-lie/index.js"),a.alias("liar/lib/index.js","liar/index.js"),"object"==typeof exports?module.exports=a("liar"):"function"==typeof define&&define.amd?define(function(){return a("liar")}):this.liar=a("liar")}(); \ No newline at end of file +!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.liar=a():"undefined"!=typeof global?global.liar=a():"undefined"!=typeof self&&(self.liar=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g0)){var b=c.shift();b()}},!0),function(a){c.push(a),window.postMessage("process-tick","*")}}return function(a){setTimeout(a,0)}}(),c.title="browser",c.browser=!0,c.env={},c.argv=[],c.binding=function(){throw new Error("process.binding is not supported")},c.cwd=function(){return"/"},c.chdir=function(){throw new Error("process.chdir is not supported")}},{}],3:[function(a,b){function Promise(a){function b(a,b){return Promise(function(c,d){"function"==typeof a?g.push({resolve:c,reject:d,callback:a}):g.push({next:c,callback:!1}),"function"==typeof b?h.push({resolve:c,reject:d,callback:b}):h.push({next:d,callback:!1})})}function f(a,b){if(!i){i=c(this,b,a?0:1);for(var f=a?g:h,j=f.length,k=-1;++k1&&"function"==typeof a&&(e=Array.prototype.slice.call(arguments,1),e.unshift(void 0),a=a.bind.apply(a,e)),1===(b=f.push(a))&&d(c),b};g.clear=function(a){return a<=f.length&&(f[a-1]=function(){}),this},b.exports=g},{"./messageChannel":6,"./mutation":7,"./nextTick":8,"./postMessage":9,"./realSetImmediate":10,"./stateChange":11,"./timeout":12}],6:[function(a,b,c){"use strict";var d=a("./global");c.test=function(){return!!d.MessageChannel},c.install=function(a){var b=new d.MessageChannel;return b.port1.onmessage=a,function(){b.port2.postMessage(0)}}},{"./global":4}],7:[function(a,b,c){"use strict";var d=a("./global"),e=d.MutationObserver||d.WebKitMutationObserver;c.test=function(){return e},c.install=function(a){var b=new e(a),c=d.document.createElement("div");return b.observe(c,{attributes:!0}),d.addEventListener("unload",function(){b.disconnect(),b=null},!1),function(){c.setAttribute("drainQueue","drainQueue")}}},{"./global":4}],8:[function(a,b,c){var d=a("__browserify_process");c.test=function(){return"object"==typeof d&&"[object process]"===Object.prototype.toString.call(d)},c.install=function(){return d.nextTick}},{__browserify_process:2}],9:[function(a,b,c){"use strict";var d=a("./global");c.test=function(){if(!d.postMessage||d.importScripts)return!1;var a=!0,b=d.onmessage;return d.onmessage=function(){a=!1},d.postMessage("","*"),d.onmessage=b,a},c.install=function(a){function b(b){b.source===d&&b.data===c&&a()}var c="com.calvinmetcalf.setImmediate"+Math.random();return d.addEventListener?d.addEventListener("message",b,!1):d.attachEvent("onmessage",b),function(){d.postMessage(c,"*")}}},{"./global":4}],10:[function(a,b,c){"use strict";var d=a("./global");c.test=function(){return d.setImmediate},c.install=function(a){return d.setTimeout.bind(d,a,0)}},{"./global":4}],11:[function(a,b,c){"use strict";var d=a("./global");c.test=function(){return"document"in d&&"onreadystatechange"in d.document.createElement("script")},c.install=function(a){return function(){var b=d.document.createElement("script");return b.onreadystatechange=function(){a(),b.onreadystatechange=null,b.parentNode.removeChild(b),b=null},d.document.documentElement.appendChild(b),a}}},{"./global":4}],12:[function(a,b,c){"use strict";c.test=function(){return!0},c.install=function(a){return function(){setTimeout(a,0)}}},{}]},{},[1])(1)}); \ No newline at end of file diff --git a/lib/index.js b/lib/index.js index fc05aaa..94afc3a 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,4 +1,45 @@ var promise = require('lie'); -promise.utils = require('./util'); -promise.cw = require('catiline'); +promise.all = function(array) { + return promise(function(fulfill,reject){ + var len = array.length; + var fulfilled = 0; + var out = []; + var onSuccess = function(n) { + return function(v) { + out[n] = v; + if (++fulfilled === len) { + fulfill(out); + } + }; + }; + array.forEach(function(v, i) { + v.then(onSuccess(i), function(a) { + reject(a); + }); + }); + }); +}; +promise.some = function(array) { + return promise(function(fulfill,reject){ + var len = array.length; + var rejected = 0; + var out = []; + function onFailure(n) { + return function(v) { + out[n] = v; + if (++rejected === len) { + reject(out); + } + }; + } + array.forEach(function(v, i) { + v.then(function(a) { + fulfill(a); + },onFailure(i)); + }); + }); +}; +promise.map = function(array,func){ + return promise.all(array.map(func)); +}; module.exports = promise; \ No newline at end of file diff --git a/lib/util.js b/lib/util.js deleted file mode 100644 index 354b36f..0000000 --- a/lib/util.js +++ /dev/null @@ -1,73 +0,0 @@ -var promise = require('lie'); - -function isPromise(a){ - return (a && typeof a.then === 'function'); -} - -function qMap(array,func){ - var len = array.length; - var out = new Array(len); - var i = -1; - while(++i