From 83f81c4ae9bed96f984b1ba4afe81ddbdb35b03b Mon Sep 17 00:00:00 2001 From: electricessence Date: Fri, 27 May 2016 00:03:38 -0700 Subject: [PATCH] Finalized Promise module structure and separated out final version of LazyPromise class. This introduces smart defer methods which for LazyPromises do not trigger the underlying promise unless the consumer calls 'then'. --- bower.json | 2 +- dist/amd/System/Promises/LazyPromise.d.ts | 16 ++ dist/amd/System/Promises/LazyPromise.js | 6 + dist/amd/System/Promises/LazyPromise.js.map | 1 + dist/amd/System/Promises/Promise.d.ts | 14 +- dist/amd/System/Promises/Promise.js | 2 +- dist/amd/System/Promises/Promise.js.map | 2 +- .../commonjs/System/Promises/LazyPromise.d.ts | 16 ++ dist/commonjs/System/Promises/LazyPromise.js | 151 ++++++++++++ .../System/Promises/LazyPromise.js.map | 1 + dist/commonjs/System/Promises/Promise.d.ts | 14 +- dist/commonjs/System/Promises/Promise.js | 201 ++++++---------- dist/commonjs/System/Promises/Promise.js.map | 2 +- dist/es6/System/Promises/LazyPromise.d.ts | 16 ++ dist/es6/System/Promises/LazyPromise.js | 98 ++++++++ dist/es6/System/Promises/LazyPromise.js.map | 1 + dist/es6/System/Promises/Promise.d.ts | 14 +- dist/es6/System/Promises/Promise.js | 132 ++++------ dist/es6/System/Promises/Promise.js.map | 2 +- dist/system/System/Promises/LazyPromise.d.ts | 16 ++ dist/system/System/Promises/LazyPromise.js | 127 ++++++++++ .../system/System/Promises/LazyPromise.js.map | 1 + dist/system/System/Promises/Promise.d.ts | 14 +- dist/system/System/Promises/Promise.js | 141 +++++------ dist/system/System/Promises/Promise.js.map | 2 +- dist/umd.min/System/Promises/LazyPromise.d.ts | 16 ++ dist/umd.min/System/Promises/LazyPromise.js | 6 + .../System/Promises/LazyPromise.js.map | 1 + dist/umd.min/System/Promises/Promise.d.ts | 14 +- dist/umd.min/System/Promises/Promise.js | 2 +- dist/umd.min/System/Promises/Promise.js.map | 2 +- package.json | 2 +- source/System/Promises/LazyPromise.js | 121 ++++++++++ source/System/Promises/LazyPromise.js.map | 1 + source/System/Promises/LazyPromise.ts | 202 ++++++++++++++++ source/System/Promises/Promise.js | 139 +++++------ source/System/Promises/Promise.js.map | 2 +- source/System/Promises/Promise.ts | 226 ++++++------------ tests/mocha/System/Promises/Promise.js | 50 ++-- tests/mocha/System/Promises/Promise.js.map | 2 +- tests/mocha/System/Promises/Promise.ts | 110 ++++++--- tests/qunit/Arrays/Compare.js | 3 +- tests/qunit/Arrays/Compare.js.map | 2 +- tests/qunit/Arrays/Procedure.js | 3 +- tests/qunit/Arrays/Procedure.js.map | 2 +- tests/qunit/Arrays/Utility.js | 3 +- tests/qunit/Arrays/Utility.js.map | 2 +- tests/qunit/Arrays/_all.js | 3 +- tests/qunit/Arrays/_all.js.map | 2 +- tests/qunit/Collections/ICollection.js | 3 +- tests/qunit/Collections/ICollection.js.map | 2 +- tests/qunit/Collections/LinkedList.js | 3 +- tests/qunit/Collections/LinkedList.js.map | 2 +- .../Collections/OrderedStringKeyDictionary.js | 3 +- .../OrderedStringKeyDictionary.js.map | 2 +- tests/qunit/Collections/Queue.js | 3 +- tests/qunit/Collections/Queue.js.map | 2 +- tests/qunit/Collections/_all.js | 3 +- tests/qunit/Collections/_all.js.map | 2 +- tests/qunit/Integer.js | 3 +- tests/qunit/Integer.js.map | 2 +- tests/qunit/Linq/_all.js | 3 +- tests/qunit/Linq/_all.js.map | 2 +- tests/qunit/Uri.js | 3 +- tests/qunit/Uri.js.map | 2 +- tests/qunit/main.js | 3 +- tests/qunit/main.js.map | 2 +- tests/qunit/require.config.js | 3 +- tests/qunit/require.config.js.map | 2 +- 69 files changed, 1293 insertions(+), 665 deletions(-) create mode 100644 dist/amd/System/Promises/LazyPromise.d.ts create mode 100644 dist/amd/System/Promises/LazyPromise.js create mode 100644 dist/amd/System/Promises/LazyPromise.js.map create mode 100644 dist/commonjs/System/Promises/LazyPromise.d.ts create mode 100644 dist/commonjs/System/Promises/LazyPromise.js create mode 100644 dist/commonjs/System/Promises/LazyPromise.js.map create mode 100644 dist/es6/System/Promises/LazyPromise.d.ts create mode 100644 dist/es6/System/Promises/LazyPromise.js create mode 100644 dist/es6/System/Promises/LazyPromise.js.map create mode 100644 dist/system/System/Promises/LazyPromise.d.ts create mode 100644 dist/system/System/Promises/LazyPromise.js create mode 100644 dist/system/System/Promises/LazyPromise.js.map create mode 100644 dist/umd.min/System/Promises/LazyPromise.d.ts create mode 100644 dist/umd.min/System/Promises/LazyPromise.js create mode 100644 dist/umd.min/System/Promises/LazyPromise.js.map create mode 100644 source/System/Promises/LazyPromise.js create mode 100644 source/System/Promises/LazyPromise.js.map create mode 100644 source/System/Promises/LazyPromise.ts diff --git a/bower.json b/bower.json index 0b67f0bc..5cfcffb6 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "typescript-dotnet", - "version": "2.16.6", + "version": "2.17.0", "ignore": [ ".bowercc", ".gitignore", diff --git a/dist/amd/System/Promises/LazyPromise.d.ts b/dist/amd/System/Promises/LazyPromise.d.ts new file mode 100644 index 00000000..2c5bb359 --- /dev/null +++ b/dist/amd/System/Promises/LazyPromise.d.ts @@ -0,0 +1,16 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT + */ +import { Promise, PromiseBase } from "./Promise"; +export declare class LazyPromise extends Promise { + private _resolver; + constructor(_resolver: Promise.Executor); + protected _onDispose(): void; + private _onThen(); + thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; + thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; + delayFromNow(milliseconds?: number): PromiseBase; + delayAfterResolve(milliseconds?: number): PromiseBase; +} +export default LazyPromise; diff --git a/dist/amd/System/Promises/LazyPromise.js b/dist/amd/System/Promises/LazyPromise.js new file mode 100644 index 00000000..ed883ade --- /dev/null +++ b/dist/amd/System/Promises/LazyPromise.js @@ -0,0 +1,6 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT + */ +var __extends=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)};define(["require","exports","./Promise","../Threading/defer","../Exceptions/ArgumentNullException"],function(t,e,n,o,r){"use strict";var i=void 0,s=function(t){function e(e){if(t.call(this),this._resolver=e,!e)throw new r.ArgumentNullException("resolver");this._resolvedCalled=!0}return __extends(e,t),e.prototype._onDispose=function(){t.prototype._onDispose.call(this),this._resolver=i},e.prototype._onThen=function(){var t=this._resolver;t&&(this._resolver=i,this._resolvedCalled=!1,this.resolveUsing(t))},e.prototype.thenSynchronous=function(e,n){return this._onThen(),t.prototype.thenSynchronous.call(this,e,n)},e.prototype.thenThis=function(e,n){return this._onThen(),t.prototype.thenThis.call(this,e,n)},e.prototype.delayFromNow=function(n){var r=this;if(void 0===n&&(n=0),this.throwIfDisposed(),!this._resolver||this.isSettled)return t.prototype.delayFromNow.call(this,n);var i,s=!1,u=o.defer(function(){s=!0,i&&i()},n);return new e(function(t,e){i=function(){r.thenThis(function(e){return t(e)},function(t){return e(t)}),u.dispose(),u=null,i=null},s&&i()})},e.prototype.delayAfterResolve=function(n){var r=this;if(void 0===n&&(n=0),this.throwIfDisposed(),!this._resolver||this.isSettled)return t.prototype.delayAfterResolve.call(this,n);var i,s,u=function(){s&&(s.dispose(),s=null),i&&i(),u=null},l=function(){u&&(s=o.defer(u,n))};return t.prototype.thenThis.call(this,l,l),l=null,new e(function(t,e){r.isPending?(r.thenThis(function(e){return o.defer(function(){return t(e)})},function(t){return o.defer(function(){return e(t)})}),u()):(i=function(){r.thenThis(function(e){return t(e)},function(t){return e(t)})},u||i())})},e}(n.Promise);e.LazyPromise=s,Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=s}); +//# sourceMappingURL=LazyPromise.js.map diff --git a/dist/amd/System/Promises/LazyPromise.js.map b/dist/amd/System/Promises/LazyPromise.js.map new file mode 100644 index 00000000..b5817de8 --- /dev/null +++ b/dist/amd/System/Promises/LazyPromise.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["System/Promises/LazyPromise.js","System/Promises/LazyPromise.ts"],"names":["__extends","this","d","b","__","constructor","p","hasOwnProperty","prototype","Object","create","define","require","exports","Promise_1","defer_1","ArgumentNullException_1","VOID0","LazyPromise","_super","_resolver","call","ArgumentNullException","_resolvedCalled","_onDispose","_onThen","r","resolveUsing","thenSynchronous","onFulfilled","onRejected","thenThis","delayFromNow","milliseconds","_this","throwIfDisposed","isSettled","pass","timedOut","timeout","defer","resolve","reject","v","e","dispose","delayAfterResolve","finalize","detector","isPending","Promise","defineProperty","value"],"mappings":"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","file":"System/Promises/LazyPromise.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT\n */\nvar __extends = (this && this.__extends) || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\ndefine([\"require\", \"exports\", \"./Promise\", \"../Threading/defer\", \"../Exceptions/ArgumentNullException\"], function (require, exports, Promise_1, defer_1, ArgumentNullException_1) {\n \"use strict\";\n var VOID0 = void 0;\n var LazyPromise = (function (_super) {\n __extends(LazyPromise, _super);\n function LazyPromise(_resolver) {\n _super.call(this);\n this._resolver = _resolver;\n if (!_resolver)\n throw new ArgumentNullException_1.ArgumentNullException(\"resolver\");\n this._resolvedCalled = true;\n }\n LazyPromise.prototype._onDispose = function () {\n _super.prototype._onDispose.call(this);\n this._resolver = VOID0;\n };\n LazyPromise.prototype._onThen = function () {\n var r = this._resolver;\n if (r) {\n this._resolver = VOID0;\n this._resolvedCalled = false;\n this.resolveUsing(r);\n }\n };\n LazyPromise.prototype.thenSynchronous = function (onFulfilled, onRejected) {\n this._onThen();\n return _super.prototype.thenSynchronous.call(this, onFulfilled, onRejected);\n };\n LazyPromise.prototype.thenThis = function (onFulfilled, onRejected) {\n this._onThen();\n return _super.prototype.thenThis.call(this, onFulfilled, onRejected);\n };\n LazyPromise.prototype.delayFromNow = function (milliseconds) {\n var _this = this;\n if (milliseconds === void 0) { milliseconds = 0; }\n this.throwIfDisposed();\n if (!this._resolver || this.isSettled)\n return _super.prototype.delayFromNow.call(this, milliseconds);\n var pass;\n var timedOut = false;\n var timeout = defer_1.defer(function () {\n timedOut = true;\n if (pass)\n pass();\n }, milliseconds);\n return new LazyPromise(function (resolve, reject) {\n pass = function () {\n _this.thenThis(function (v) { return resolve(v); }, function (e) { return reject(e); });\n timeout.dispose();\n timeout = null;\n pass = null;\n };\n if (timedOut)\n pass();\n });\n };\n LazyPromise.prototype.delayAfterResolve = function (milliseconds) {\n var _this = this;\n if (milliseconds === void 0) { milliseconds = 0; }\n this.throwIfDisposed();\n if (!this._resolver || this.isSettled)\n return _super.prototype.delayAfterResolve.call(this, milliseconds);\n var pass;\n var timeout;\n var finalize = function () {\n if (timeout) {\n timeout.dispose();\n timeout = null;\n }\n if (pass)\n pass();\n finalize = null;\n };\n {\n var detector = function () {\n if (finalize)\n timeout = defer_1.defer(finalize, milliseconds);\n };\n _super.prototype.thenThis.call(this, detector, detector);\n detector = null;\n }\n return new LazyPromise(function (resolve, reject) {\n if (_this.isPending) {\n _this.thenThis(function (v) { return defer_1.defer(function () { return resolve(v); }); }, function (e) { return defer_1.defer(function () { return reject(e); }); });\n finalize();\n }\n else {\n pass = function () {\n _this.thenThis(function (v) { return resolve(v); }, function (e) { return reject(e); });\n };\n if (!finalize)\n pass();\n }\n });\n };\n return LazyPromise;\n }(Promise_1.Promise));\n exports.LazyPromise = LazyPromise;\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.default = LazyPromise;\n});\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT\r\n */\r\n\r\nimport {Promise, PromiseBase} from \"./Promise\";\r\nimport {Closure} from \"../FunctionTypes\";\r\nimport {ICancellable} from \"../Threading/ICancellable\";\r\nimport {defer} from \"../Threading/defer\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\n\r\nconst VOID0:any = void 0;\r\n\r\n/**\r\n * A promise that waits for the first then to trigger the resolver.\r\n */\r\nexport class LazyPromise extends Promise\r\n{\r\n\r\n\tconstructor(private _resolver:Promise.Executor)\r\n\t{\r\n\t\tsuper();\r\n\t\tif(!_resolver) throw new ArgumentNullException(\"resolver\");\r\n\t\tthis._resolvedCalled = true;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._resolver = VOID0;\r\n\t}\r\n\r\n\tprivate _onThen():void\r\n\t{\r\n\t\tvar r = this._resolver;\r\n\t\tif(r)\r\n\t\t{\r\n\t\t\tthis._resolver = VOID0;\r\n\t\t\tthis._resolvedCalled = false;\r\n\t\t\tthis.resolveUsing(r);\r\n\t\t}\r\n\t}\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis._onThen();\r\n\t\treturn super.thenSynchronous(onFulfilled, onRejected);\r\n\t}\r\n\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis._onThen();\r\n\t\treturn super.thenThis(onFulfilled, onRejected);\r\n\t}\r\n\r\n\t// NOTE: For a LazyPromise we need to be careful not to trigger the resolve for delay.\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from the time called before continuing.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a minimum delay.\r\n\t */\r\n\tdelayFromNow(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// If this is already guaranteed to resolve, the go ahead and pass to the super.\r\n\t\tif(!this._resolver || this.isSettled)\r\n\t\t\treturn super.delayFromNow(milliseconds);\r\n\r\n\t\t/*\r\n\t\t * If not triggered yet, then we create a special promise\r\n\t\t * that only requests the resolution from the parent promise\r\n\t\t * if a 'then' is called to ensure the lazy pattern.\r\n\t\t */\r\n\t\tvar pass:Closure;\r\n\t\tvar timedOut:boolean = false;\r\n\r\n\t\t// Setup the timer.\r\n\t\tvar timeout = defer(()=>\r\n\t\t\t{\r\n\t\t\t\ttimedOut = true;\r\n\t\t\t\t// If the promise was requested already go ahead and pass the request on to the parent.\r\n\t\t\t\tif(pass)\r\n\t\t\t\t\tpass();\r\n\t\t\t},\r\n\t\t\tmilliseconds);\r\n\r\n\t\treturn new LazyPromise(\r\n\t\t\t(resolve, reject)=>\r\n\t\t\t{\r\n\t\t\t\t// A lazy promise only enters here if something called for a resolution.\r\n\t\t\t\tpass = ()=>\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.thenThis(\r\n\t\t\t\t\t\tv=> resolve(v),\r\n\t\t\t\t\t\te=> reject(e)\r\n\t\t\t\t\t);\r\n\t\t\t\t\ttimeout.dispose();\r\n\t\t\t\t\ttimeout = null;\r\n\t\t\t\t\tpass = null;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// If the timeout completed already go ahead and pass the request on to the parent.\r\n\t\t\t\tif(timedOut)\r\n\t\t\t\t\tpass();\r\n\t\t\t\t// Otherwise wait for the timeout to do it.\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from after this promise resolves.\r\n\t * If the promise is already resolved, the delay will start from now.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayAfterResolve(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// If this is already guaranteed to resolve, the go ahead and pass to the super.\r\n\t\tif(!this._resolver || this.isSettled)\r\n\t\t\treturn super.delayAfterResolve(milliseconds);\r\n\r\n\t\t/*\r\n\t\t * If not triggered yet, then we create a special promise\r\n\t\t * that only requests the resolution from the parent promise\r\n\t\t * if a 'then' is called to ensure the lazy pattern.\r\n\t\t */\r\n\t\tvar pass:Closure;\r\n\r\n\r\n\t\t// Setup the timer.\r\n\t\tvar timeout:ICancellable;\r\n\r\n\t\tvar finalize = ()=>\r\n\t\t{\r\n\t\t\tif(timeout)\r\n\t\t\t{\r\n\t\t\t\ttimeout.dispose();\r\n\t\t\t\ttimeout = null;\r\n\t\t\t}\r\n\t\t\t// If the promise was requested already go ahead and pass the request on to the parent.\r\n\t\t\tif(pass)\r\n\t\t\t\tpass();\r\n\r\n\t\t\tfinalize = null;\r\n\t\t};\r\n\r\n\t\t{\r\n\t\t\tlet detector = ()=>\r\n\t\t\t{\r\n\t\t\t\tif(finalize) // We may already be wrapped up so never mind!\r\n\t\t\t\t\ttimeout = defer(finalize, milliseconds);\r\n\t\t\t};\r\n\r\n\t\t\t// Calling super.thenThis does not trigger resolution.\r\n\t\t\t// This simply waits for resolution to happen.\r\n\t\t\t// Is effectively the timer by when resolution has occurred.\r\n\t\t\tsuper.thenThis(detector, detector);\r\n\t\t\tdetector = null;\r\n\t\t}\r\n\r\n\t\treturn new LazyPromise(\r\n\t\t\t(resolve, reject)=>\r\n\t\t\t{\r\n\t\t\t\t// Because of the lazy nature of this promise, this could enter here at any time.\r\n\t\t\t\tif(this.isPending)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.thenThis(\r\n\t\t\t\t\t\tv=> defer(()=>resolve(v)),\r\n\t\t\t\t\t\te=> defer(()=>reject(e))\r\n\t\t\t\t\t);\r\n\t\t\t\t\tfinalize();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// We don't know when this resolved and could have happened anytime after calling this delay method.\r\n\t\t\t\t\tpass = ()=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.thenThis(\r\n\t\t\t\t\t\t\tv=> resolve(v),\r\n\t\t\t\t\t\t\te=> reject(e)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// Already finalized (aka resolved after a timeout)? Go now!\r\n\t\t\t\t\tif(!finalize)\r\n\t\t\t\t\t\tpass();\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\r\n\t}\r\n}\r\n\r\nexport default LazyPromise;"]} \ No newline at end of file diff --git a/dist/amd/System/Promises/Promise.d.ts b/dist/amd/System/Promises/Promise.d.ts index ece8587f..4dd52ef6 100644 --- a/dist/amd/System/Promises/Promise.d.ts +++ b/dist/amd/System/Promises/Promise.d.ts @@ -42,23 +42,15 @@ export declare abstract class Resolved extends Resolvable { } export declare class Promise extends Resolvable { private _waiting; - constructor(resolver?: Promise.Executor); + constructor(resolver?: Promise.Executor, forceSynchronous?: boolean); thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; protected _onDispose(): void; protected _resolvedCalled: boolean; - resolveUsing(resolver: Promise.Executor, throwIfSettled?: boolean): void; + resolveUsing(resolver: Promise.Executor, forceSynchronous?: boolean, throwIfSettled?: boolean): void; resolve(result?: T, throwIfSettled?: boolean): void; reject(error: any, throwIfSettled?: boolean): void; } -export declare class LazyPromise extends Promise { - private _resolver; - constructor(_resolver: Promise.Executor); - protected _onDispose(): void; - private _onThen(); - thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; - thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; -} export declare module Promise { enum State { Pending = 0, @@ -85,8 +77,6 @@ export declare module Promise { function resolve(): PromiseBase; function resolve(value: T | PromiseLike): PromiseBase; function reject(reason: T): PromiseBase; - function lazy(resolver: Promise.Executor): LazyPromise; function wrap(target: PromiseLike): PromiseBase; function createFrom(then: Then): PromiseBase; - function pending(resolver?: Promise.Executor): Promise; } diff --git a/dist/amd/System/Promises/Promise.js b/dist/amd/System/Promises/Promise.js index eaef0084..0cf55aae 100644 --- a/dist/amd/System/Promises/Promise.js +++ b/dist/amd/System/Promises/Promise.js @@ -4,5 +4,5 @@ * Although most of the following code is written from scratch, it is * heavily influenced by Q (https://github.com/kriskowal/q) and uses some of Q's spec. */ -var __extends=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)};define(["require","exports","../Types","../Threading/deferImmediate","../Disposable/DisposableBase","../Exceptions/InvalidOperationException","../Exceptions/ArgumentException","../Exceptions/ArgumentNullException","../Disposable/ObjectPool","../Collections/Set","../Threading/defer"],function(t,e,n,r,i,o,s,l,u,a,c){"use strict";function h(t){return n["default"].hasMemberOfType(t,b,n["default"].FUNCTION)}function f(t,e,n){var r=e?e(t):t;return r&&h(r)?C.wrap(r):n(r)}function p(t,e){return function(){t.thenThis(function(t){e.resolve(t)},function(t){e.reject(t)})}}function d(t,e,n){return function(){t.thenThis(function(t){return c.defer(function(){return e.resolve(t)},n)},function(t){return c.defer(function(){return e.reject(t)},n)})}}function v(t,e,n){try{var r=n?n(e):e;t&&t.resolve(r)}catch(i){t.reject(i)}}function _(t,e,n,r){try{var i=r?r(n):n;t&&t(i)}catch(o){e&&e(o)}}function g(t,e,n){t instanceof x?t.thenThis(e,n):t.then(e,n)}var y=void 0,w="Promise",m=w+"State",b="then",S="target",j=function(t){function e(e,n,r){t.call(this),this._state=e,this._result=n,this._error=r,this._disposableObjectName=m}return __extends(e,t),e.prototype._onDispose=function(){this._state=y,this._result=y,this._error=y},e.prototype.getState=function(){return this._state},Object.defineProperty(e.prototype,"state",{get:function(){return this._state},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isPending",{get:function(){return this.getState()===C.State.Pending},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isSettled",{get:function(){return this.getState()!=C.State.Pending},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isFulfilled",{get:function(){return this.getState()===C.State.Fulfilled},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isRejected",{get:function(){return this.getState()===C.State.Rejected},enumerable:!0,configurable:!0}),e.prototype.getResult=function(){return this._result},Object.defineProperty(e.prototype,"result",{get:function(){return this.throwIfDisposed(),this.getResult()},enumerable:!0,configurable:!0}),e.prototype.getError=function(){return this._error},Object.defineProperty(e.prototype,"error",{get:function(){return this.throwIfDisposed(),this.getError()},enumerable:!0,configurable:!0}),e}(i.DisposableBase);e.PromiseState=j;var x=function(t){function e(){t.call(this,C.State.Pending),this._disposableObjectName=w}return __extends(e,t),e.prototype.then=function(t,e){var n=this;return C.pending(function(r,i){n.thenThis(function(e){return _(r,i,e,t)},function(t){return e?_(r,null,t,e):i(t)})})},e.prototype.delayFromNow=function(t){void 0===t&&(t=0),this.throwIfDisposed();var e=C.pending();return c.defer(p(this,e),t),e},e.prototype.delayAfterResolve=function(t){void 0===t&&(t=0),this.throwIfDisposed();var e=C.pending();return d(this,e,t),e},e.prototype["catch"]=function(t){return this.throwIfDisposed(),this.then(y,t)},e.prototype["finally"]=function(t){return this.throwIfDisposed(),this.then(t,t)},e.prototype.finallyThis=function(t){this.throwIfDisposed();var e=function(){return r.deferImmediate(t)};return this.thenThis(e,e),this},e}(j);e.PromiseBase=x;var I=function(t){function e(){t.apply(this,arguments)}return __extends(e,t),e.prototype.thenSynchronous=function(t,e){this.throwIfDisposed();try{switch(this.state){case C.State.Fulfilled:return t?f(this._result,t,C.resolve):this;case C.State.Rejected:return e?f(this._error,e,C.resolve):this}}catch(n){return new E(n)}throw new Error("Invalid state for a resolved promise.")},e.prototype.thenThis=function(t,e){switch(this.throwIfDisposed(),this.state){case C.State.Fulfilled:t&&t(this._result);break;case C.State.Rejected:e&&e(this._error)}return this},e}(x);e.Resolvable=I;var P=function(t){function e(e,n,r){t.call(this),this._result=n,this._error=r,this._state=e}return __extends(e,t),e}(I);e.Resolved=P;var D=function(t){function e(e){t.call(this,C.State.Fulfilled,e)}return __extends(e,t),e}(P),E=function(t){function e(e){t.call(this,C.State.Rejected,y,e)}return __extends(e,t),e}(P),O=function(t){function e(e){var n=this;if(t.call(this),this._target=e,!e)throw new l.ArgumentNullException(S);if(!h(e))throw new s.ArgumentException(S,"Must be a promise-like object.");e.then(function(t){n._state=C.State.Fulfilled,n._result=t,n._error=y,n._target=y},function(t){n._state=C.State.Rejected,n._error=t,n._target=y})}return __extends(e,t),e.prototype.thenSynchronous=function(e,n){this.throwIfDisposed();var r=this._target;if(!r)return t.prototype.thenSynchronous.call(this,e,n);var i=C.pending();return g(r,function(t){return v(i,t,e)},function(t){return n?v(i,t,n):i.reject(t)}),i},e.prototype.thenThis=function(e,n){this.throwIfDisposed();var r=this._target;return r?(g(r,e,n),this):t.prototype.thenThis.call(this,e,n)},e.prototype._onDispose=function(){t.prototype._onDispose.call(this),this._target=y},e}(I),C=function(t){function e(e){t.call(this),e&&this.resolveUsing(e)}return __extends(e,t),e.prototype.thenSynchronous=function(n,r){if(this.throwIfDisposed(),this._state)return t.prototype.thenSynchronous.call(this,n,r);var i=new e;return(this._waiting||(this._waiting=[])).push(R.PromiseCallbacks.init(n,r,i)),i},e.prototype.thenThis=function(e,n){return this.throwIfDisposed(),this._state?t.prototype.thenThis.call(this,e,n):((this._waiting||(this._waiting=[])).push(R.PromiseCallbacks.init(e,n)),this)},e.prototype._onDispose=function(){t.prototype._onDispose.call(this),this._resolvedCalled=y},e.prototype.resolveUsing=function(t,n){var i=this;if(void 0===n&&(n=!1),!t)throw new l.ArgumentNullException("resolver");if(this._resolvedCalled)throw new o.InvalidOperationException(".resolve() already called.");if(this.state)throw new o.InvalidOperationException("Already resolved: "+e.State[this.state]);this._resolvedCalled=!0;var s=function(t){i._resolvedCalled=!1,i.reject(t)},u=function(t){i._resolvedCalled=!1,i.resolve(t)};r.deferImmediate(function(){t(function(t){if(t==i)throw new o.InvalidOperationException("Cannot resolve a promise as itself.");h(t)?g(t,u,s):u(t)},s)})},e.prototype.resolve=function(t,n){if(void 0===n&&(n=!1),this.throwIfDisposed(),t==this)throw new o.InvalidOperationException("Cannot resolve a promise as itself.");if(this._state){if(!n||this._state==e.State.Fulfilled&&this._result===t)return;throw new o.InvalidOperationException("Changing the fulfilled state/value of a promise is not supported.")}if(this._resolvedCalled){if(n)throw new o.InvalidOperationException(".resolve() already called.")}else{this._state=e.State.Fulfilled,this._result=t,this._error=y;var r=this._waiting;if(r){this._waiting=y;for(var i=0,s=r;if;f++)h(f)})}function n(t){for(var e=[],n=1;no;o++){var l=r[o];if(l instanceof x&&l.isSettled)return l}return f(function(t,e){for(var n=function(){e=null,t=null,r.length=0,r=null},i=function(t,e){t&&(n(),t(e))},o=function(e){return i(t,e)},s=function(t){return i(e,t)},l=0,u=r;lf;f++)h(f)})}function n(e){for(var n=[],r=1;ru;u++){var a=i[u];if(a instanceof S&&a.isSettled)return a}return new t(function(t,e){for(var n=function(){e=null,t=null,i.length=0,i=null},r=function(t,e){t&&(n(),t(e))},o=function(e){return r(t,e)},s=function(t){return r(e,t)},l=0,u=i;l(value:any):value is PromiseLike\r\n{\r\n\treturn Type.hasMemberOfType(value, THEN, Type.FUNCTION);\r\n}\r\n\r\nfunction resolve(\r\n\tvalue:Promise.Resolution, resolver:(v:Promise.Resolution)=>any,\r\n\tpromiseFactory:(v:any)=>PromiseBase):PromiseBase\r\n{\r\n\tlet nextValue = resolver\r\n\t\t? resolver(value)\r\n\t\t: value;\r\n\r\n\treturn nextValue && isPromise(nextValue)\r\n\t\t? Promise.wrap(nextValue)\r\n\t\t: promiseFactory(nextValue);\r\n}\r\n\r\nfunction pass(source:PromiseBase, dest:Promise):Closure\r\n{\r\n\treturn ()=>\r\n\t{\r\n\t\tsource.thenThis(\r\n\t\t\tv=>\r\n\t\t\t{\r\n\t\t\t\tdest.resolve(v);\r\n\t\t\t},\r\n\t\t\te=>\r\n\t\t\t{\r\n\t\t\t\tdest.reject(e);\r\n\t\t\t});\r\n\t}\r\n}\r\n\r\nfunction passDelayed(source:PromiseBase, dest:Promise, ms:number):Closure\r\n{\r\n\treturn ()=>\r\n\t{\r\n\t\tsource.thenThis(\r\n\t\t\tv=>defer(()=>dest.resolve(v), ms),\r\n\t\t\te=>defer(()=>dest.reject(e), ms));\r\n\t}\r\n}\r\n\r\nfunction handleResolution(\r\n\tp:Promise,\r\n\tvalue:Promise.Resolution,\r\n\tresolver?:(v:Promise.Resolution)=>any):void\r\n{\r\n\ttry\r\n\t{\r\n\t\tlet v = resolver ? resolver(value) : value;\r\n\t\tif(p) p.resolve(v);\r\n\t}\r\n\tcatch(ex)\r\n\t{ p.reject(ex); }\r\n}\r\n\r\nfunction handleResolutionMethods(\r\n\ttargetFulfill:Promise.Fulfill,\r\n\ttargetReject:Promise.Reject,\r\n\tvalue:Promise.Resolution,\r\n\tresolver?:(v:Promise.Resolution)=>any):void\r\n{\r\n\ttry\r\n\t{\r\n\t\tlet v = resolver ? resolver(value) : value;\r\n\t\tif(targetFulfill) targetFulfill(v);\r\n\t}\r\n\tcatch(ex)\r\n\t{ if(targetReject) targetReject(ex); }\r\n}\r\n\r\nfunction handleDispatch(\r\n\tp:PromiseLike,\r\n\tonFulfilled:Promise.Fulfill,\r\n\tonRejected?:Promise.Reject):void\r\n{\r\n\tif(p instanceof PromiseBase)\r\n\t\tp.thenThis(onFulfilled, onRejected);\r\n\telse\r\n\t\tp.then(onFulfilled, onRejected);\r\n}\r\n\r\nexport class PromiseState\r\nextends DisposableBase\r\n{\r\n\r\n\tconstructor(\r\n\t\tprotected _state:Promise.State,\r\n\t\tprotected _result?:T,\r\n\t\tprotected _error?:any)\r\n\t{\r\n\t\tsuper();\r\n\t\tthis._disposableObjectName = PROMISE_STATE;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tthis._state = VOID0;\r\n\t\tthis._result = VOID0;\r\n\t\tthis._error = VOID0;\r\n\t}\r\n\r\n\tprotected getState():Promise.State\r\n\t{\r\n\t\treturn this._state;\r\n\t}\r\n\r\n\tget state():Promise.State\r\n\t{\r\n\t\treturn this._state;\r\n\t}\r\n\r\n\tget isPending():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Pending;\r\n\t}\r\n\r\n\tget isSettled():boolean\r\n\t{\r\n\t\treturn this.getState()!=Promise.State.Pending; // Will also include undefined==0 aka disposed!=resolved.\r\n\t}\r\n\r\n\tget isFulfilled():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Fulfilled;\r\n\t}\r\n\r\n\tget isRejected():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Rejected;\r\n\t}\r\n\r\n\t/*\r\n\t * Providing overrides allows for special defer or lazy sub classes.\r\n\t */\r\n\tprotected getResult():T\r\n\t{\r\n\t\treturn this._result;\r\n\t}\r\n\r\n\tget result():T\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.getResult();\r\n\t}\r\n\r\n\tprotected getError():any\r\n\t{\r\n\t\treturn this._error;\r\n\t}\r\n\r\n\tget error():any\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.getError();\r\n\t}\r\n\r\n}\r\n\r\nexport abstract class PromiseBase\r\nextends PromiseState implements PromiseLike\r\n{\r\n\tconstructor()\r\n\t{\r\n\t\tsuper(Promise.State.Pending);\r\n\t\tthis._disposableObjectName = PROMISE;\r\n\t}\r\n\r\n\t/**\r\n\t * Calls the respective handlers once the promise is resolved.\r\n\t * @param onFulfilled\r\n\t * @param onRejected\r\n\t */\r\n\tabstract thenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase;\r\n\r\n\t/**\r\n\t * Same as 'thenSynchronous' but does not return the result. Returns the current promise instead.\r\n\t * You may not need an additional promise result, and this will not create a new one.\r\n\t * Errors are not trapped.\r\n\t * @param onFulfilled\r\n\t * @param onRejected\r\n\t */\r\n\tabstract thenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase;\r\n\r\n\tthen(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\treturn Promise.pending((resolve, reject)=>\r\n\t\t{\r\n\t\t\tthis.thenThis(\r\n\t\t\t\tresult=>handleResolutionMethods(resolve, reject, result, onFulfilled),\r\n\t\t\t\terror=>onRejected\r\n\t\t\t\t\t? handleResolutionMethods(resolve, null, error, onRejected)\r\n\t\t\t\t\t: reject(error)\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from the time called before continuing.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayFromNow(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// TODO: need to figure out a way to not force a then call.\r\n\t\tvar p = Promise.pending();\r\n\t\tdefer(pass(this, p), milliseconds);\r\n\t\treturn p;\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from after this promise resolves.\r\n\t * If the promise is already resolved the delay will start from now.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayAfterResolve(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar p = Promise.pending();\r\n\t\tpassDelayed(this, p, milliseconds);\r\n\t\treturn p;\r\n\t}\r\n\r\n\t'catch'(onRejected:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.then(VOID0, onRejected)\r\n\t}\r\n\r\n\t'finally'(fin:()=>Promise.Resolution):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.then(fin, fin);\r\n\t}\r\n\r\n\tfinallyThis(fin:()=>void):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tvar f = ()=>deferImmediate(fin);\r\n\t\tthis.thenThis(f, f);\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n\r\nexport abstract class Resolvable extends PromiseBase\r\n{\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\ttry\r\n\t\t{\r\n\t\t\tswitch(this.state)\r\n\t\t\t{\r\n\t\t\t\tcase Promise.State.Fulfilled:\r\n\t\t\t\t\treturn onFulfilled\r\n\t\t\t\t\t\t? resolve(this._result, onFulfilled, Promise.resolve)\r\n\t\t\t\t\t\t: this; // Provided for catch cases.\r\n\t\t\t\tcase Promise.State.Rejected:\r\n\t\t\t\t\treturn onRejected\r\n\t\t\t\t\t\t? resolve(this._error, onRejected, Promise.resolve)\r\n\t\t\t\t\t\t: this;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\treturn new Rejected(ex);\r\n\t\t}\r\n\r\n\t\tthrow new Error(\"Invalid state for a resolved promise.\");\r\n\t}\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tswitch(this.state)\r\n\t\t{\r\n\t\t\tcase Promise.State.Fulfilled:\r\n\t\t\t\tif(onFulfilled) onFulfilled(this._result);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Promise.State.Rejected:\r\n\t\t\t\tif(onRejected) onRejected(this._error);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * The simplest usable version of a promise which returns synchronously the resolved state provided.\r\n */\r\nexport abstract class Resolved extends Resolvable\r\n{\r\n\tconstructor(state:Promise.State, result:T, error?:any)\r\n\t{\r\n\t\tsuper();\r\n\t\tthis._result = result;\r\n\t\tthis._error = error;\r\n\t\tthis._state = state;\r\n\t}\r\n\r\n\r\n}\r\n\r\n/**\r\n * A fulfilled Resolved. Provided for readability.\r\n */\r\nclass Fulfilled extends Resolved\r\n{\r\n\tconstructor(value?:T)\r\n\t{\r\n\t\tsuper(Promise.State.Fulfilled, value);\r\n\t}\r\n}\r\n\r\n/**\r\n * A rejected Resolved. Provided for readability.\r\n */\r\nclass Rejected extends Resolved\r\n{\r\n\tconstructor(error:any)\r\n\t{\r\n\t\tsuper(Promise.State.Rejected, VOID0, error);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Provided as a means for extending the interface of other PromiseLike objects.\r\n */\r\nclass PromiseWrapper extends Resolvable\r\n{\r\n\tconstructor(private _target:PromiseLike)\r\n\t{\r\n\t\tsuper();\r\n\r\n\t\tif(!_target)\r\n\t\t\tthrow new ArgumentNullException(TARGET);\r\n\r\n\t\tif(!isPromise(_target))\r\n\t\t\tthrow new ArgumentException(TARGET, \"Must be a promise-like object.\");\r\n\r\n\t\t_target.then(\r\n\t\t\tv=>\r\n\t\t\t{\r\n\t\t\t\tthis._state = Promise.State.Fulfilled;\r\n\t\t\t\tthis._result = v;\r\n\t\t\t\tthis._error = VOID0;\r\n\t\t\t\tthis._target = VOID0;\r\n\t\t\t},\r\n\t\t\te=>\r\n\t\t\t{\r\n\t\t\t\tthis._state = Promise.State.Rejected;\r\n\t\t\t\tthis._error = e;\r\n\t\t\t\tthis._target = VOID0;\r\n\t\t\t})\r\n\t}\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar t = this._target;\r\n\t\tif(!t) return super.thenSynchronous(onFulfilled, onRejected);\r\n\r\n\t\tvar p = Promise.pending();\r\n\t\thandleDispatch(t,\r\n\t\t\tresult=>handleResolution(p, result, onFulfilled),\r\n\t\t\terror=>onRejected ? handleResolution(p, error, onRejected) : p.reject(error));\r\n\t\treturn p;\r\n\t}\r\n\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar t = this._target;\r\n\t\tif(!t) return super.thenThis(onFulfilled, onRejected);\r\n\t\thandleDispatch(t, onFulfilled, onRejected);\r\n\t\treturn this;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._target = VOID0;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * This promise class that facilitates pending resolution.\r\n */\r\nexport class Promise extends Resolvable\r\n{\r\n\r\n\tprivate _waiting:IPromiseCallbacks[];\r\n\r\n\t/*\r\n\t * A note about deferring:\r\n\t * The caller can set resolveImmediate to true if they intend to initialize code that will end up being deferred itself.\r\n\t * This eliminates the extra defer that will occur internally.\r\n\t * But for the most part, resolveImmediate = false (the default) will ensure the constructor will not block.\r\n\t *\r\n\t * resolveUsing allows for the same ability but does not defer by default: allowing the caller to take on the work load.\r\n\t * If calling resolve or reject and a deferred response is desired, then use deferImmediate with a closure to do so.\r\n\t */\r\n\r\n\tconstructor(\r\n\t\tresolver?:Promise.Executor)\r\n\t{\r\n\t\tsuper();\r\n\r\n\t\tif(resolver) this.resolveUsing(resolver);\r\n\t}\r\n\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// Already fulfilled?\r\n\t\tif(this._state) return super.thenSynchronous(onFulfilled, onRejected);\r\n\r\n\t\tvar p = new Promise();\r\n\t\t(this._waiting || (this._waiting = []))\r\n\t\t\t.push(pools.PromiseCallbacks.init(onFulfilled, onRejected, p));\r\n\t\treturn p;\r\n\t}\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// Already fulfilled?\r\n\t\tif(this._state) return super.thenThis(onFulfilled, onRejected);\r\n\r\n\t\t(this._waiting || (this._waiting = []))\r\n\t\t\t.push(pools.PromiseCallbacks.init(onFulfilled, onRejected));\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\r\n\tprotected _onDispose()\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._resolvedCalled = VOID0;\r\n\t}\r\n\r\n\t// Protects against double calling.\r\n\tprotected _resolvedCalled:boolean;\r\n\r\n\tresolveUsing(\r\n\t\tresolver:Promise.Executor,\r\n\t\tthrowIfSettled:boolean = false)\r\n\t{\r\n\t\tif(!resolver)\r\n\t\t\tthrow new ArgumentNullException(\"resolver\");\r\n\t\tif(this._resolvedCalled)\r\n\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\tif(this.state)\r\n\t\t\tthrow new InvalidOperationException(\"Already resolved: \" + Promise.State[this.state]);\r\n\r\n\t\tthis._resolvedCalled = true;\r\n\r\n\t\tvar rejectHandler = (reason:any)=>\r\n\t\t{\r\n\t\t\tthis._resolvedCalled = false;\r\n\t\t\tthis.reject(reason);\r\n\t\t};\r\n\r\n\t\tvar fulfillHandler = (v:any)=>\r\n\t\t{\r\n\t\t\tthis._resolvedCalled = false;\r\n\t\t\tthis.resolve(v);\r\n\t\t};\r\n\r\n\t\t// In order to prevent blocking.\r\n\t\t// As much as we'd like to go synchronous here, it's just not how it's done.\r\n\t\tdeferImmediate(()=>\r\n\t\t{\r\n\t\t\tresolver(\r\n\t\t\t\tv=>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(v==this) throw new InvalidOperationException(\"Cannot resolve a promise as itself.\");\r\n\t\t\t\t\tif(isPromise(v)) // If the result is a promise, then it will defer downstream.\r\n\t\t\t\t\t\thandleDispatch(v, fulfillHandler, rejectHandler);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfulfillHandler(v);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t},\r\n\t\t\t\trejectHandler);\r\n\t\t});\r\n\r\n\r\n\t}\r\n\r\n\tresolve(result?:T, throwIfSettled:boolean = false):void\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tif(result==this)\r\n\t\t\tthrow new InvalidOperationException(\"Cannot resolve a promise as itself.\");\r\n\r\n\t\tif(this._state)\r\n\t\t{\r\n\t\t\t// Same value? Ignore...\r\n\t\t\tif(!throwIfSettled || this._state==Promise.State.Fulfilled && this._result===result) return;\r\n\t\t\tthrow new InvalidOperationException(\"Changing the fulfilled state/value of a promise is not supported.\");\r\n\t\t}\r\n\r\n\t\tif(this._resolvedCalled)\r\n\t\t{\r\n\t\t\tif(throwIfSettled)\r\n\t\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._state = Promise.State.Fulfilled;\r\n\r\n\t\tthis._result = result;\r\n\t\tthis._error = VOID0;\r\n\t\tvar o = this._waiting;\r\n\t\tif(o)\r\n\t\t{\r\n\t\t\tthis._waiting = VOID0;\r\n\t\t\tfor(let c of o)\r\n\t\t\t{\r\n\t\t\t\tlet {onFulfilled, promise} = c, p = (>promise);\r\n\t\t\t\tpools.PromiseCallbacks.recycle(c);\r\n\t\t\t\thandleResolution(p, result, onFulfilled);\r\n\t\t\t}\r\n\t\t\to.length = 0;\r\n\t\t}\r\n\t}\r\n\r\n\treject(error:any, throwIfSettled:boolean = false):void\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tif(this._state)\r\n\t\t{\r\n\t\t\t// Same value? Ignore...\r\n\t\t\tif(!throwIfSettled || this._state==Promise.State.Rejected && this._error===error) return;\r\n\t\t\tthrow new InvalidOperationException(\"Changing the rejected state/value of a promise is not supported.\");\r\n\t\t}\r\n\r\n\t\tif(this._resolvedCalled)\r\n\t\t{\r\n\t\t\tif(throwIfSettled)\r\n\t\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._state = Promise.State.Rejected;\r\n\r\n\t\tthis._error = error;\r\n\t\tvar o = this._waiting;\r\n\t\tif(o)\r\n\t\t{\r\n\t\t\tthis._waiting = null; // null = finished. undefined = hasn't started.\r\n\t\t\tfor(let c of o)\r\n\t\t\t{\r\n\t\t\t\tlet {onRejected, promise} = c, p = (>promise);\r\n\t\t\t\tpools.PromiseCallbacks.recycle(c);\r\n\t\t\t\tif(onRejected) handleResolution(p, error, onRejected);\r\n\t\t\t\telse p.reject(error);\r\n\t\t\t}\r\n\t\t\to.length = 0;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * A promise that waits for the first then to trigger the resolver.\r\n */\r\nexport class LazyPromise extends Promise\r\n{\r\n\r\n\tconstructor(private _resolver:Promise.Executor)\r\n\t{\r\n\t\tsuper();\r\n\t\tif(!_resolver) throw new ArgumentNullException(\"resolver\");\r\n\t\tthis._resolvedCalled = true;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._resolver = VOID0;\r\n\t}\r\n\r\n\tprivate _onThen():void\r\n\t{\r\n\t\tvar r = this._resolver;\r\n\t\tif(r)\r\n\t\t{\r\n\t\t\tthis._resolver = VOID0;\r\n\t\t\tthis._resolvedCalled = false;\r\n\t\t\tthis.resolveUsing(r);\r\n\t\t}\r\n\t}\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis._onThen();\r\n\t\treturn super.thenSynchronous(onFulfilled, onRejected);\r\n\t}\r\n\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis._onThen();\r\n\t\treturn super.thenThis(onFulfilled, onRejected);\r\n\t}\r\n}\r\n\r\nmodule pools\r\n{\r\n\r\n\t// export module pending\r\n\t// {\r\n\t//\r\n\t//\r\n\t// \tvar pool:ObjectPool>;\r\n\t//\r\n\t// \tfunction getPool()\r\n\t// \t{\r\n\t// \t\treturn pool || (pool = new ObjectPool>(40, factory, c=>c.dispose()));\r\n\t// \t}\r\n\t//\r\n\t// \tfunction factory():Promise\r\n\t// \t{\r\n\t// \t\treturn new Promise();\r\n\t// \t}\r\n\t//\r\n\t// \texport function get():Promise\r\n\t// \t{\r\n\t// \t\tvar p:any = getPool().take();\r\n\t// \t\tp.__wasDisposed = false;\r\n\t// \t\tp._state = Promise.State.Pending;\r\n\t// \t\treturn p;\r\n\t// \t}\r\n\t//\r\n\t// \texport function recycle(c:Promise):void\r\n\t// \t{\r\n\t// \t\tif(c) getPool().add(c);\r\n\t// \t}\r\n\t//\r\n\t// }\r\n\t//\r\n\t// export function recycle(c:PromiseBase):void\r\n\t// {\r\n\t// \tif(!c) return;\r\n\t// \tif(c instanceof Promise && c.constructor==Promise) pending.recycle(c);\r\n\t// \telse c.dispose();\r\n\t// }\r\n\r\n\r\n\texport module PromiseCallbacks\r\n\t{\r\n\r\n\t\tvar pool:ObjectPool>;\r\n\r\n\t\tfunction getPool()\r\n\t\t{\r\n\t\t\treturn pool\r\n\t\t\t\t|| (pool = new ObjectPool>(40, factory, c=>\r\n\t\t\t\t{\r\n\t\t\t\t\tc.onFulfilled = null;\r\n\t\t\t\t\tc.onRejected = null;\r\n\t\t\t\t\tc.promise = null;\r\n\t\t\t\t}));\r\n\t\t}\r\n\r\n\t\tfunction factory():IPromiseCallbacks\r\n\t\t{\r\n\t\t\treturn {\r\n\t\t\t\tonFulfilled: null,\r\n\t\t\t\tonRejected: null,\r\n\t\t\t\tpromise: null\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\texport function init(\r\n\t\t\tonFulfilled:Promise.Fulfill,\r\n\t\t\tonRejected?:Promise.Reject,\r\n\t\t\tpromise?:PromiseLike):IPromiseCallbacks\r\n\t\t{\r\n\r\n\t\t\tvar c = getPool().take();\r\n\t\t\tc.onFulfilled = onFulfilled;\r\n\t\t\tc.onRejected = onRejected;\r\n\t\t\tc.promise = promise;\r\n\t\t\treturn c;\r\n\t\t}\r\n\r\n\t\texport function recycle(c:IPromiseCallbacks):void\r\n\t\t{\r\n\t\t\tgetPool().add(c);\r\n\t\t}\r\n\t}\r\n\r\n\r\n}\r\n\r\n\r\nexport module Promise\r\n{\r\n\r\n\t/**\r\n\t * The state of a promise.\r\n\t * https://github.com/domenic/promises-unwrapping/blob/master/docs/states-and-fates.md\r\n\t * If a promise is disposed the value will be undefined which will also evaluate (promise.state)==false.\r\n\t */\r\n\texport enum State {\r\n\t\tPending = 0,\r\n\t\tFulfilled = 1,\r\n\t\tRejected = -1\r\n\t}\r\n\tObject.freeze(State);\r\n\r\n\texport type Resolution = PromiseLike|TResult|void;\r\n\r\n\texport interface Fulfill\r\n\t{\r\n\t\t(value:T):Resolution\r\n\t}\r\n\r\n\texport interface Reject\r\n\t{\r\n\t\t(err?:any):Resolution\r\n\t}\r\n\r\n\texport interface Then\r\n\t{\r\n\t\t(\r\n\t\t\tonFulfilled:Fulfill,\r\n\t\t\tonRejected?:Reject):PromiseBase\r\n\t}\r\n\r\n\texport interface Executor\r\n\t{\r\n\t\t(\r\n\t\t\tresolve:(value?:T | PromiseLike) => void,\r\n\t\t\treject:(reason?:any) => void):void;\r\n\t}\r\n\r\n\t// /**\r\n\t// * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved\r\n\t// * or rejected.\r\n\t// * @param values An array of Promises.\r\n\t// * @returns A new Promise.\r\n\t// */\r\n\t// // race(values: Iterable>): Promise;\r\n\r\n\r\n\t/**\r\n\t * Returns a promise that is fulfilled with an array containing the fulfillment value of each promise, or is rejected with the same rejection reason as the first promise to be rejected.\r\n\t */\r\n\texport function all(promises:PromiseLike[]):PromiseBase\r\n\texport function all(promise:PromiseLike, ...rest:PromiseLike[]):PromiseBase\r\n\texport function all(\r\n\t\tfirst:PromiseLike|PromiseLike[],\r\n\t\t...rest:PromiseLike[]):PromiseBase\r\n\t{\r\n\t\tif(!first && !rest.length) throw new ArgumentNullException(\"promises\");\r\n\t\tvar promises = (Array.isArray(first) ? first : [first]).concat(rest); // yay a copy!\r\n\t\tif(!promises.length || promises.every(v=>!v)) return new Fulfilled(promises); // it's a new empty, reuse it. :|\r\n\r\n\t\t// Eliminate deferred and take the parent since all .then calls happen on next cycle anyway.\r\n\t\treturn pending((resolve, reject)=>\r\n\t\t{\r\n\t\t\tlet checkedAll = false;\r\n\t\t\tlet result:any[] = [];\r\n\t\t\tlet len = promises.length;\r\n\t\t\tresult.length = len;\r\n\t\t\t// Using a set instead of -- a number is more reliable if just in case one of the provided promises resolves twice.\r\n\t\t\tlet remaining = new Set(promises.map((v, i)=>i)); // get all the indexes...\r\n\r\n\t\t\tlet cleanup = ()=>\r\n\t\t\t{\r\n\t\t\t\treject = null;\r\n\t\t\t\tresolve = null;\r\n\t\t\t\tpromises.length = 0;\r\n\t\t\t\tpromises = null;\r\n\t\t\t\tremaining.dispose();\r\n\t\t\t\tremaining = null;\r\n\t\t\t};\r\n\r\n\t\t\tlet checkIfShouldResolve = ()=>\r\n\t\t\t{\r\n\t\t\t\tlet r = resolve;\r\n\t\t\t\tif(r && !remaining.count)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(result);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onFulfill = (v:any, i:number)=>\r\n\t\t\t{\r\n\t\t\t\tif(resolve)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult[i] = v;\r\n\t\t\t\t\tremaining.remove(i);\r\n\t\t\t\t\tcheckIfShouldResolve();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onReject = (e?:any)=>\r\n\t\t\t{\r\n\t\t\t\tlet r = reject;\r\n\t\t\t\tif(r)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tfor(let i = 0; remaining && ionFulfill(v, i), onReject);\r\n\t\t\t\telse remaining.remove(i);\r\n\t\t\t\tcheckIfShouldResolve();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a promise for the first of an array of promises to become settled.\r\n\t */\r\n\texport function race(promises:PromiseLike[]):PromiseBase\r\n\texport function race(promise:PromiseLike, ...rest:PromiseLike[]):PromiseBase\r\n\texport function race(\r\n\t\tfirst:PromiseLike|PromiseLike[],\r\n\t\t...rest:PromiseLike[]):PromiseBase\r\n\t{\r\n\t\tvar promises = first && (Array.isArray(first) ? first : [first]).concat(rest); // yay a copy?\r\n\t\tif(!promises || !promises.length || !(promises = promises.filter(v=>v!=null)).length)\r\n\t\t\tthrow new ArgumentException(\"Nothing to wait for.\");\r\n\r\n\t\tvar len = promises.length;\r\n\r\n\t\t// Only one? Nothing to race.\r\n\t\tif(len==1) return wrap(promises[0]);\r\n\r\n\t\t// Look for already resolved promises and the first one wins.\r\n\t\tfor(let i = 0; i\r\n\t\t{\r\n\t\t\tlet cleanup = ()=>\r\n\t\t\t{\r\n\t\t\t\treject = null;\r\n\t\t\t\tresolve = null;\r\n\t\t\t\tpromises.length = 0;\r\n\t\t\t\tpromises = null;\r\n\t\t\t};\r\n\r\n\t\t\tlet onResolve = (r:(x:any)=>void, v:any)=>\r\n\t\t\t{\r\n\t\t\t\tif(r)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(v);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onFulfill = (v:any)=> onResolve(resolve, v);\r\n\t\t\tlet onReject = (e?:any)=> onResolve(reject, e);\r\n\r\n\t\t\tfor(let p of promises)\r\n\t\t\t{\r\n\t\t\t\tif(!resolve) break;\r\n\t\t\t\tp.then(onFulfill, onReject);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new resolved promise .\r\n\t * @returns A resolved promise.\r\n\t */\r\n\texport function resolve():PromiseBase\r\n\r\n\t/**\r\n\t * Creates a new resolved promise for the provided value.\r\n\t * @param value A value or promise.\r\n\t * @returns A promise whose internal state matches the provided promise.\r\n\t */\r\n\texport function resolve(value:T | PromiseLike):PromiseBase;\r\n\texport function resolve(value?:any):PromiseBase\r\n\t{\r\n\r\n\t\treturn isPromise(value) ? wrap(value) : new Fulfilled(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new rejected promise for the provided reason.\r\n\t * @param reason The reason the promise was rejected.\r\n\t * @returns A new rejected Promise.\r\n\t */\r\n\texport function reject(reason:T):PromiseBase\r\n\t{\r\n\t\treturn new Rejected(reason);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Provides a promise that will trigger the resolver at the first 'then' request.\r\n\t * @param resolver\r\n\t * @returns {Promise}\r\n\t */\r\n\texport function lazy(resolver:Promise.Executor):LazyPromise\r\n\t{\r\n\t\treturn new LazyPromise(resolver);\r\n\t}\r\n\r\n\t/**\r\n\t * Takes any Promise-Like object and ensures an extended version of it from this module.\r\n\t * @param target The Promise-Like object\r\n\t * @returns A new target that simply extends the target.\r\n\t */\r\n\texport function wrap(target:PromiseLike):PromiseBase\r\n\t{\r\n\t\tif(!target) throw new ArgumentNullException(TARGET);\r\n\t\treturn target instanceof Promise ? this : new PromiseWrapper(target);\r\n\t}\r\n\r\n\t/**\r\n\t * A function that acts like a 'then' method (aka then-able) can be extended by providing a function that takes an onFulfill and onReject.\r\n\t * @param then\r\n\t * @returns {PromiseWrapper}\r\n\t */\r\n\texport function createFrom(then:Then):PromiseBase\r\n\t{\r\n\t\tif(!then) throw new ArgumentNullException(THEN);\r\n\t\treturn new PromiseWrapper({then: then});\r\n\t}\r\n\r\n\t/**\r\n\t * Provides a promise that can be resolved later.\r\n\t * @returns {Promise}\r\n\t */\r\n\texport function pending(resolver?:Promise.Executor):Promise\r\n\t{\r\n\t\treturn new Promise(resolver);\r\n\t\t// var p = pools.pending.get();\r\n\t\t// if(resolver) p.resolveUsing(resolver);\r\n\t\t// return p;\r\n\t}\r\n\r\n\r\n}\r\n\r\n\r\ninterface IPromiseCallbacks\r\n{\r\n\tonFulfilled:Promise.Fulfill;\r\n\tonRejected:Promise.Reject;\r\n\tpromise?:PromiseLike;\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["System/Promises/Promise.js","System/Promises/Promise.ts"],"names":["__extends","this","d","b","__","constructor","p","hasOwnProperty","prototype","Object","create","define","require","exports","Types_1","deferImmediate_1","DisposableBase_1","InvalidOperationException_1","ArgumentException_1","ArgumentNullException_1","ObjectPool_1","Set_1","defer_1","isPromise","value","hasMemberOfType","THEN","FUNCTION","resolve","resolver","promiseFactory","nextValue","Promise","wrap","handleResolution","v","ex","reject","handleResolutionMethods","targetFulfill","targetReject","handleDispatch","onFulfilled","onRejected","PromiseBase","thenThis","then","VOID0","PROMISE","PROMISE_STATE","TARGET","PromiseState","_super","_state","_result","_error","call","_disposableObjectName","_onDispose","getState","defineProperty","get","enumerable","configurable","State","Pending","Fulfilled","Rejected","getResult","throwIfDisposed","getError","DisposableBase","_this","result","error","delayFromNow","milliseconds","defer","e","delayAfterResolve","isSettled","fin","finallyThis","f","deferImmediate","Resolvable","apply","arguments","thenSynchronous","state","Error","Resolved","PromiseWrapper","_target","ArgumentNullException","ArgumentException","t","forceSynchronous","resolveUsing","_waiting","push","pools","PromiseCallbacks","init","_resolvedCalled","throwIfSettled","InvalidOperationException","rejectHandler","reason","console","warn","fulfillHandler","r","o","_i","o_1","length","c","promise","recycle","o_2","getPool","pool","ObjectPool","factory","take","add","all","first","rest","promises","Array","isArray","concat","every","len","remaining","Set","map","i","cleanup","dispose","checkIfShouldResolve","count","onFulfill","remove","onReject","_loop_1","race","filter","onResolve","promises_1","p_1","target","createFrom","freeze"],"mappings":"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","file":"System/Promises/Promise.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT\n * Although most of the following code is written from scratch, it is\n * heavily influenced by Q (https://github.com/kriskowal/q) and uses some of Q's spec.\n */\nvar __extends = (this && this.__extends) || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\ndefine([\"require\", \"exports\", \"../Types\", \"../Threading/deferImmediate\", \"../Disposable/DisposableBase\", \"../Exceptions/InvalidOperationException\", \"../Exceptions/ArgumentException\", \"../Exceptions/ArgumentNullException\", \"../Disposable/ObjectPool\", \"../Collections/Set\", \"../Threading/defer\"], function (require, exports, Types_1, deferImmediate_1, DisposableBase_1, InvalidOperationException_1, ArgumentException_1, ArgumentNullException_1, ObjectPool_1, Set_1, defer_1) {\n \"use strict\";\n var VOID0 = void 0, PROMISE = \"Promise\", PROMISE_STATE = PROMISE + \"State\", THEN = \"then\", TARGET = \"target\";\n function isPromise(value) {\n return Types_1.default.hasMemberOfType(value, THEN, Types_1.default.FUNCTION);\n }\n function resolve(value, resolver, promiseFactory) {\n var nextValue = resolver\n ? resolver(value)\n : value;\n return nextValue && isPromise(nextValue)\n ? Promise.wrap(nextValue)\n : promiseFactory(nextValue);\n }\n function handleResolution(p, value, resolver) {\n try {\n var v = resolver ? resolver(value) : value;\n if (p)\n p.resolve(v);\n }\n catch (ex) {\n p.reject(ex);\n }\n }\n function handleResolutionMethods(targetFulfill, targetReject, value, resolver) {\n try {\n var v = resolver ? resolver(value) : value;\n if (targetFulfill)\n targetFulfill(v);\n }\n catch (ex) {\n if (targetReject)\n targetReject(ex);\n }\n }\n function handleDispatch(p, onFulfilled, onRejected) {\n if (p instanceof PromiseBase)\n p.thenThis(onFulfilled, onRejected);\n else\n p.then(onFulfilled, onRejected);\n }\n var PromiseState = (function (_super) {\n __extends(PromiseState, _super);\n function PromiseState(_state, _result, _error) {\n _super.call(this);\n this._state = _state;\n this._result = _result;\n this._error = _error;\n this._disposableObjectName = PROMISE_STATE;\n }\n PromiseState.prototype._onDispose = function () {\n this._state = VOID0;\n this._result = VOID0;\n this._error = VOID0;\n };\n PromiseState.prototype.getState = function () {\n return this._state;\n };\n Object.defineProperty(PromiseState.prototype, \"state\", {\n get: function () {\n return this._state;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PromiseState.prototype, \"isPending\", {\n get: function () {\n return this.getState() === Promise.State.Pending;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PromiseState.prototype, \"isSettled\", {\n get: function () {\n return this.getState() != Promise.State.Pending;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PromiseState.prototype, \"isFulfilled\", {\n get: function () {\n return this.getState() === Promise.State.Fulfilled;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PromiseState.prototype, \"isRejected\", {\n get: function () {\n return this.getState() === Promise.State.Rejected;\n },\n enumerable: true,\n configurable: true\n });\n PromiseState.prototype.getResult = function () {\n return this._result;\n };\n Object.defineProperty(PromiseState.prototype, \"result\", {\n get: function () {\n this.throwIfDisposed();\n return this.getResult();\n },\n enumerable: true,\n configurable: true\n });\n PromiseState.prototype.getError = function () {\n return this._error;\n };\n Object.defineProperty(PromiseState.prototype, \"error\", {\n get: function () {\n this.throwIfDisposed();\n return this.getError();\n },\n enumerable: true,\n configurable: true\n });\n return PromiseState;\n }(DisposableBase_1.DisposableBase));\n exports.PromiseState = PromiseState;\n var PromiseBase = (function (_super) {\n __extends(PromiseBase, _super);\n function PromiseBase() {\n _super.call(this, Promise.State.Pending);\n this._disposableObjectName = PROMISE;\n }\n PromiseBase.prototype.then = function (onFulfilled, onRejected) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _this.thenThis(function (result) { return handleResolutionMethods(resolve, reject, result, onFulfilled); }, function (error) { return onRejected\n ? handleResolutionMethods(resolve, null, error, onRejected)\n : reject(error); });\n });\n };\n PromiseBase.prototype.delayFromNow = function (milliseconds) {\n var _this = this;\n if (milliseconds === void 0) { milliseconds = 0; }\n this.throwIfDisposed();\n return new Promise(function (resolve, reject) {\n defer_1.defer(function () {\n _this.thenThis(function (v) { return resolve(v); }, function (e) { return reject(e); });\n }, milliseconds);\n }, true);\n };\n PromiseBase.prototype.delayAfterResolve = function (milliseconds) {\n var _this = this;\n if (milliseconds === void 0) { milliseconds = 0; }\n this.throwIfDisposed();\n if (this.isSettled)\n return this.delayFromNow(milliseconds);\n return new Promise(function (resolve, reject) {\n _this.thenThis(function (v) { return defer_1.defer(function () { return resolve(v); }, milliseconds); }, function (e) { return defer_1.defer(function () { return reject(e); }, milliseconds); });\n }, true);\n };\n PromiseBase.prototype['catch'] = function (onRejected) {\n this.throwIfDisposed();\n return this.then(VOID0, onRejected);\n };\n PromiseBase.prototype['finally'] = function (fin) {\n this.throwIfDisposed();\n return this.then(fin, fin);\n };\n PromiseBase.prototype.finallyThis = function (fin) {\n this.throwIfDisposed();\n var f = function () { return deferImmediate_1.deferImmediate(fin); };\n this.thenThis(f, f);\n return this;\n };\n return PromiseBase;\n }(PromiseState));\n exports.PromiseBase = PromiseBase;\n var Resolvable = (function (_super) {\n __extends(Resolvable, _super);\n function Resolvable() {\n _super.apply(this, arguments);\n }\n Resolvable.prototype.thenSynchronous = function (onFulfilled, onRejected) {\n this.throwIfDisposed();\n try {\n switch (this.state) {\n case Promise.State.Fulfilled:\n return onFulfilled\n ? resolve(this._result, onFulfilled, Promise.resolve)\n : this;\n case Promise.State.Rejected:\n return onRejected\n ? resolve(this._error, onRejected, Promise.resolve)\n : this;\n }\n }\n catch (ex) {\n return new Rejected(ex);\n }\n throw new Error(\"Invalid state for a resolved promise.\");\n };\n Resolvable.prototype.thenThis = function (onFulfilled, onRejected) {\n this.throwIfDisposed();\n switch (this.state) {\n case Promise.State.Fulfilled:\n if (onFulfilled)\n onFulfilled(this._result);\n break;\n case Promise.State.Rejected:\n if (onRejected)\n onRejected(this._error);\n break;\n }\n return this;\n };\n return Resolvable;\n }(PromiseBase));\n exports.Resolvable = Resolvable;\n var Resolved = (function (_super) {\n __extends(Resolved, _super);\n function Resolved(state, result, error) {\n _super.call(this);\n this._result = result;\n this._error = error;\n this._state = state;\n }\n return Resolved;\n }(Resolvable));\n exports.Resolved = Resolved;\n var Fulfilled = (function (_super) {\n __extends(Fulfilled, _super);\n function Fulfilled(value) {\n _super.call(this, Promise.State.Fulfilled, value);\n }\n return Fulfilled;\n }(Resolved));\n var Rejected = (function (_super) {\n __extends(Rejected, _super);\n function Rejected(error) {\n _super.call(this, Promise.State.Rejected, VOID0, error);\n }\n return Rejected;\n }(Resolved));\n var PromiseWrapper = (function (_super) {\n __extends(PromiseWrapper, _super);\n function PromiseWrapper(_target) {\n var _this = this;\n _super.call(this);\n this._target = _target;\n if (!_target)\n throw new ArgumentNullException_1.ArgumentNullException(TARGET);\n if (!isPromise(_target))\n throw new ArgumentException_1.ArgumentException(TARGET, \"Must be a promise-like object.\");\n _target.then(function (v) {\n _this._state = Promise.State.Fulfilled;\n _this._result = v;\n _this._error = VOID0;\n _this._target = VOID0;\n }, function (e) {\n _this._state = Promise.State.Rejected;\n _this._error = e;\n _this._target = VOID0;\n });\n }\n PromiseWrapper.prototype.thenSynchronous = function (onFulfilled, onRejected) {\n this.throwIfDisposed();\n var t = this._target;\n if (!t)\n return _super.prototype.thenSynchronous.call(this, onFulfilled, onRejected);\n return new Promise(function (resolve, reject) {\n handleDispatch(t, function (result) { return handleResolutionMethods(resolve, reject, result, onFulfilled); }, function (error) { return onRejected\n ? handleResolutionMethods(resolve, null, error, onRejected)\n : reject(error); });\n }, true);\n };\n PromiseWrapper.prototype.thenThis = function (onFulfilled, onRejected) {\n this.throwIfDisposed();\n var t = this._target;\n if (!t)\n return _super.prototype.thenThis.call(this, onFulfilled, onRejected);\n handleDispatch(t, onFulfilled, onRejected);\n return this;\n };\n PromiseWrapper.prototype._onDispose = function () {\n _super.prototype._onDispose.call(this);\n this._target = VOID0;\n };\n return PromiseWrapper;\n }(Resolvable));\n var Promise = (function (_super) {\n __extends(Promise, _super);\n function Promise(resolver, forceSynchronous) {\n if (forceSynchronous === void 0) { forceSynchronous = false; }\n _super.call(this);\n if (resolver)\n this.resolveUsing(resolver, forceSynchronous);\n }\n Promise.prototype.thenSynchronous = function (onFulfilled, onRejected) {\n this.throwIfDisposed();\n if (this._state)\n return _super.prototype.thenSynchronous.call(this, onFulfilled, onRejected);\n var p = new Promise();\n (this._waiting || (this._waiting = []))\n .push(pools.PromiseCallbacks.init(onFulfilled, onRejected, p));\n return p;\n };\n Promise.prototype.thenThis = function (onFulfilled, onRejected) {\n this.throwIfDisposed();\n if (this._state)\n return _super.prototype.thenThis.call(this, onFulfilled, onRejected);\n (this._waiting || (this._waiting = []))\n .push(pools.PromiseCallbacks.init(onFulfilled, onRejected));\n return this;\n };\n Promise.prototype._onDispose = function () {\n _super.prototype._onDispose.call(this);\n this._resolvedCalled = VOID0;\n };\n Promise.prototype.resolveUsing = function (resolver, forceSynchronous, throwIfSettled) {\n var _this = this;\n if (forceSynchronous === void 0) { forceSynchronous = false; }\n if (throwIfSettled === void 0) { throwIfSettled = false; }\n if (!resolver)\n throw new ArgumentNullException_1.ArgumentNullException(\"resolver\");\n if (this._resolvedCalled)\n throw new InvalidOperationException_1.InvalidOperationException(\".resolve() already called.\");\n if (this.state)\n throw new InvalidOperationException_1.InvalidOperationException(\"Already resolved: \" + Promise.State[this.state]);\n this._resolvedCalled = true;\n var state = 0;\n var rejectHandler = function (reason) {\n if (state) {\n console.warn(state == -1 ? \"Rejection called multiple times\" : \"Rejection called after fulfilled.\");\n }\n else {\n state = -1;\n _this._resolvedCalled = false;\n _this.reject(reason);\n }\n };\n var fulfillHandler = function (v) {\n if (state) {\n console.warn(state == 1 ? \"Fulfill called multiple times\" : \"Fulfill called after rejection.\");\n }\n else {\n state = 1;\n _this._resolvedCalled = false;\n _this.resolve(v);\n }\n };\n var r = function () { return resolver(function (v) {\n if (v == _this)\n throw new InvalidOperationException_1.InvalidOperationException(\"Cannot resolve a promise as itself.\");\n if (isPromise(v))\n handleDispatch(v, fulfillHandler, rejectHandler);\n else {\n fulfillHandler(v);\n }\n }, rejectHandler); };\n if (forceSynchronous)\n r();\n else\n deferImmediate_1.deferImmediate(r);\n };\n Promise.prototype.resolve = function (result, throwIfSettled) {\n if (throwIfSettled === void 0) { throwIfSettled = false; }\n this.throwIfDisposed();\n if (result == this)\n throw new InvalidOperationException_1.InvalidOperationException(\"Cannot resolve a promise as itself.\");\n if (this._state) {\n if (!throwIfSettled || this._state == Promise.State.Fulfilled && this._result === result)\n return;\n throw new InvalidOperationException_1.InvalidOperationException(\"Changing the fulfilled state/value of a promise is not supported.\");\n }\n if (this._resolvedCalled) {\n if (throwIfSettled)\n throw new InvalidOperationException_1.InvalidOperationException(\".resolve() already called.\");\n return;\n }\n this._state = Promise.State.Fulfilled;\n this._result = result;\n this._error = VOID0;\n var o = this._waiting;\n if (o) {\n this._waiting = VOID0;\n for (var _i = 0, o_1 = o; _i < o_1.length; _i++) {\n var c = o_1[_i];\n var onFulfilled = c.onFulfilled, promise = c.promise, p = promise;\n pools.PromiseCallbacks.recycle(c);\n handleResolution(p, result, onFulfilled);\n }\n o.length = 0;\n }\n };\n Promise.prototype.reject = function (error, throwIfSettled) {\n if (throwIfSettled === void 0) { throwIfSettled = false; }\n this.throwIfDisposed();\n if (this._state) {\n if (!throwIfSettled || this._state == Promise.State.Rejected && this._error === error)\n return;\n throw new InvalidOperationException_1.InvalidOperationException(\"Changing the rejected state/value of a promise is not supported.\");\n }\n if (this._resolvedCalled) {\n if (throwIfSettled)\n throw new InvalidOperationException_1.InvalidOperationException(\".resolve() already called.\");\n return;\n }\n this._state = Promise.State.Rejected;\n this._error = error;\n var o = this._waiting;\n if (o) {\n this._waiting = null;\n for (var _i = 0, o_2 = o; _i < o_2.length; _i++) {\n var c = o_2[_i];\n var onRejected = c.onRejected, promise = c.promise, p = promise;\n pools.PromiseCallbacks.recycle(c);\n if (onRejected)\n handleResolution(p, error, onRejected);\n else\n p.reject(error);\n }\n o.length = 0;\n }\n };\n return Promise;\n }(Resolvable));\n exports.Promise = Promise;\n var pools;\n (function (pools) {\n var PromiseCallbacks;\n (function (PromiseCallbacks) {\n var pool;\n function getPool() {\n return pool\n || (pool = new ObjectPool_1.ObjectPool(40, factory, function (c) {\n c.onFulfilled = null;\n c.onRejected = null;\n c.promise = null;\n }));\n }\n function factory() {\n return {\n onFulfilled: null,\n onRejected: null,\n promise: null\n };\n }\n function init(onFulfilled, onRejected, promise) {\n var c = getPool().take();\n c.onFulfilled = onFulfilled;\n c.onRejected = onRejected;\n c.promise = promise;\n return c;\n }\n PromiseCallbacks.init = init;\n function recycle(c) {\n getPool().add(c);\n }\n PromiseCallbacks.recycle = recycle;\n })(PromiseCallbacks = pools.PromiseCallbacks || (pools.PromiseCallbacks = {}));\n })(pools || (pools = {}));\n var Promise;\n (function (Promise) {\n (function (State) {\n State[State[\"Pending\"] = 0] = \"Pending\";\n State[State[\"Fulfilled\"] = 1] = \"Fulfilled\";\n State[State[\"Rejected\"] = -1] = \"Rejected\";\n })(Promise.State || (Promise.State = {}));\n var State = Promise.State;\n Object.freeze(State);\n function all(first) {\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n if (!first && !rest.length)\n throw new ArgumentNullException_1.ArgumentNullException(\"promises\");\n var promises = (Array.isArray(first) ? first : [first]).concat(rest);\n if (!promises.length || promises.every(function (v) { return !v; }))\n return new Fulfilled(promises);\n return new Promise(function (resolve, reject) {\n var checkedAll = false;\n var result = [];\n var len = promises.length;\n result.length = len;\n var remaining = new Set_1.Set(promises.map(function (v, i) { return i; }));\n var cleanup = function () {\n reject = null;\n resolve = null;\n promises.length = 0;\n promises = null;\n remaining.dispose();\n remaining = null;\n };\n var checkIfShouldResolve = function () {\n var r = resolve;\n if (r && !remaining.count) {\n cleanup();\n r(result);\n }\n };\n var onFulfill = function (v, i) {\n if (resolve) {\n result[i] = v;\n remaining.remove(i);\n checkIfShouldResolve();\n }\n };\n var onReject = function (e) {\n var r = reject;\n if (r) {\n cleanup();\n r(e);\n }\n };\n var _loop_1 = function(i) {\n var p = promises[i];\n if (p)\n p.then(function (v) { return onFulfill(v, i); }, onReject);\n else\n remaining.remove(i);\n checkIfShouldResolve();\n };\n for (var i = 0; remaining && i < len; i++) {\n _loop_1(i);\n }\n });\n }\n Promise.all = all;\n function race(first) {\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n var promises = first && (Array.isArray(first) ? first : [first]).concat(rest);\n if (!promises || !promises.length || !(promises = promises.filter(function (v) { return v != null; })).length)\n throw new ArgumentException_1.ArgumentException(\"Nothing to wait for.\");\n var len = promises.length;\n if (len == 1)\n return wrap(promises[0]);\n for (var i = 0; i < len; i++) {\n var p = promises[i];\n if (p instanceof PromiseBase && p.isSettled)\n return p;\n }\n return new Promise(function (resolve, reject) {\n var cleanup = function () {\n reject = null;\n resolve = null;\n promises.length = 0;\n promises = null;\n };\n var onResolve = function (r, v) {\n if (r) {\n cleanup();\n r(v);\n }\n };\n var onFulfill = function (v) { return onResolve(resolve, v); };\n var onReject = function (e) { return onResolve(reject, e); };\n for (var _i = 0, promises_1 = promises; _i < promises_1.length; _i++) {\n var p_1 = promises_1[_i];\n if (!resolve)\n break;\n p_1.then(onFulfill, onReject);\n }\n });\n }\n Promise.race = race;\n function resolve(value) {\n return isPromise(value) ? wrap(value) : new Fulfilled(value);\n }\n Promise.resolve = resolve;\n function reject(reason) {\n return new Rejected(reason);\n }\n Promise.reject = reject;\n function wrap(target) {\n if (!target)\n throw new ArgumentNullException_1.ArgumentNullException(TARGET);\n return target instanceof Promise ? this : new PromiseWrapper(target);\n }\n Promise.wrap = wrap;\n function createFrom(then) {\n if (!then)\n throw new ArgumentNullException_1.ArgumentNullException(THEN);\n return new PromiseWrapper({ then: then });\n }\n Promise.createFrom = createFrom;\n })(Promise = exports.Promise || (exports.Promise = {}));\n});\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT\r\n * Although most of the following code is written from scratch, it is\r\n * heavily influenced by Q (https://github.com/kriskowal/q) and uses some of Q's spec.\r\n */\r\n\r\n/*\r\n * Note: The Promise herein does NOT defer by default.\r\n * If you require a promise to defer its result then use the .defer() or .delay(ms) methods.\r\n * The API attempts to follow ES6 style promises.\r\n */\r\n\r\nimport Type from \"../Types\";\r\nimport {deferImmediate} from \"../Threading/deferImmediate\";\r\nimport {DisposableBase} from \"../Disposable/DisposableBase\";\r\nimport {InvalidOperationException} from \"../Exceptions/InvalidOperationException\";\r\nimport {ArgumentException} from \"../Exceptions/ArgumentException\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\nimport {ObjectPool} from \"../Disposable/ObjectPool\";\r\nimport {Set} from \"../Collections/Set\";\r\nimport {defer} from \"../Threading/defer\";\r\n\r\n\r\nconst VOID0:any = void 0, PROMISE = \"Promise\", PROMISE_STATE = PROMISE + \"State\", THEN = \"then\", TARGET = \"target\";\r\n\r\nfunction isPromise(value:any):value is PromiseLike\r\n{\r\n\treturn Type.hasMemberOfType(value, THEN, Type.FUNCTION);\r\n}\r\n\r\nfunction resolve(\r\n\tvalue:Promise.Resolution, resolver:(v:Promise.Resolution)=>any,\r\n\tpromiseFactory:(v:any)=>PromiseBase):PromiseBase\r\n{\r\n\tlet nextValue = resolver\r\n\t\t? resolver(value)\r\n\t\t: value;\r\n\r\n\treturn nextValue && isPromise(nextValue)\r\n\t\t? Promise.wrap(nextValue)\r\n\t\t: promiseFactory(nextValue);\r\n}\r\n\r\nfunction handleResolution(\r\n\tp:Promise,\r\n\tvalue:Promise.Resolution,\r\n\tresolver?:(v:Promise.Resolution)=>any):void\r\n{\r\n\ttry\r\n\t{\r\n\t\tlet v = resolver ? resolver(value) : value;\r\n\t\tif(p) p.resolve(v);\r\n\t}\r\n\tcatch(ex)\r\n\t{ p.reject(ex); }\r\n}\r\n\r\nfunction handleResolutionMethods(\r\n\ttargetFulfill:Promise.Fulfill,\r\n\ttargetReject:Promise.Reject,\r\n\tvalue:Promise.Resolution,\r\n\tresolver?:(v:Promise.Resolution)=>any):void\r\n{\r\n\ttry\r\n\t{\r\n\t\tlet v = resolver ? resolver(value) : value;\r\n\t\tif(targetFulfill) targetFulfill(v);\r\n\t}\r\n\tcatch(ex)\r\n\t{ if(targetReject) targetReject(ex); }\r\n}\r\n\r\nfunction handleDispatch(\r\n\tp:PromiseLike,\r\n\tonFulfilled:Promise.Fulfill,\r\n\tonRejected?:Promise.Reject):void\r\n{\r\n\tif(p instanceof PromiseBase)\r\n\t\tp.thenThis(onFulfilled, onRejected);\r\n\telse\r\n\t\tp.then(onFulfilled, onRejected);\r\n}\r\n\r\nexport class PromiseState\r\nextends DisposableBase\r\n{\r\n\r\n\tconstructor(\r\n\t\tprotected _state:Promise.State,\r\n\t\tprotected _result?:T,\r\n\t\tprotected _error?:any)\r\n\t{\r\n\t\tsuper();\r\n\t\tthis._disposableObjectName = PROMISE_STATE;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tthis._state = VOID0;\r\n\t\tthis._result = VOID0;\r\n\t\tthis._error = VOID0;\r\n\t}\r\n\r\n\tprotected getState():Promise.State\r\n\t{\r\n\t\treturn this._state;\r\n\t}\r\n\r\n\tget state():Promise.State\r\n\t{\r\n\t\treturn this._state;\r\n\t}\r\n\r\n\tget isPending():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Pending;\r\n\t}\r\n\r\n\tget isSettled():boolean\r\n\t{\r\n\t\treturn this.getState()!=Promise.State.Pending; // Will also include undefined==0 aka disposed!=resolved.\r\n\t}\r\n\r\n\tget isFulfilled():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Fulfilled;\r\n\t}\r\n\r\n\tget isRejected():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Rejected;\r\n\t}\r\n\r\n\t/*\r\n\t * Providing overrides allows for special defer or lazy sub classes.\r\n\t */\r\n\tprotected getResult():T\r\n\t{\r\n\t\treturn this._result;\r\n\t}\r\n\r\n\tget result():T\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.getResult();\r\n\t}\r\n\r\n\tprotected getError():any\r\n\t{\r\n\t\treturn this._error;\r\n\t}\r\n\r\n\tget error():any\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.getError();\r\n\t}\r\n\r\n}\r\n\r\nexport abstract class PromiseBase\r\nextends PromiseState implements PromiseLike\r\n{\r\n\tconstructor()\r\n\t{\r\n\t\tsuper(Promise.State.Pending);\r\n\t\tthis._disposableObjectName = PROMISE;\r\n\t}\r\n\r\n\t/**\r\n\t * Calls the respective handlers once the promise is resolved.\r\n\t * @param onFulfilled\r\n\t * @param onRejected\r\n\t */\r\n\tabstract thenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase;\r\n\r\n\t/**\r\n\t * Same as 'thenSynchronous' but does not return the result. Returns the current promise instead.\r\n\t * You may not need an additional promise result, and this will not create a new one.\r\n\t * Errors are not trapped.\r\n\t * @param onFulfilled\r\n\t * @param onRejected\r\n\t */\r\n\tabstract thenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase;\r\n\r\n\r\n\tthen(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\treturn new Promise((resolve, reject)=>\r\n\t\t{\r\n\t\t\tthis.thenThis(\r\n\t\t\t\tresult=>handleResolutionMethods(resolve, reject, result, onFulfilled),\r\n\t\t\t\terror=>onRejected\r\n\t\t\t\t\t? handleResolutionMethods(resolve, null, error, onRejected)\r\n\t\t\t\t\t: reject(error)\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from the time called before continuing.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayFromNow(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\treturn new Promise(\r\n\t\t\t(resolve, reject)=>\r\n\t\t\t{\r\n\t\t\t\tdefer(()=>\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.thenThis(\r\n\t\t\t\t\t\tv=> resolve(v),\r\n\t\t\t\t\t\te=> reject(e));\r\n\t\t\t\t}, milliseconds)\r\n\t\t\t},\r\n\t\t\ttrue // Since the resolve/reject is deferred.\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from after this promise resolves.\r\n\t * If the promise is already resolved, the delay will start from now.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayAfterResolve(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tif(this.isSettled) return this.delayFromNow(milliseconds);\r\n\r\n\t\treturn new Promise(\r\n\t\t\t(resolve, reject)=>\r\n\t\t\t{\r\n\t\t\t\tthis.thenThis(\r\n\t\t\t\t\tv=>defer(()=>resolve(v), milliseconds),\r\n\t\t\t\t\te=>defer(()=>reject(e), milliseconds))\r\n\t\t\t},\r\n\t\t\ttrue // Since the resolve/reject is deferred.\r\n\t\t);\r\n\t}\r\n\r\n\t'catch'(onRejected:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.then(VOID0, onRejected)\r\n\t}\r\n\r\n\t'finally'(fin:()=>Promise.Resolution):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.then(fin, fin);\r\n\t}\r\n\r\n\tfinallyThis(fin:()=>void):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tvar f = ()=>deferImmediate(fin);\r\n\t\tthis.thenThis(f, f);\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n\r\nexport abstract class Resolvable extends PromiseBase\r\n{\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\ttry\r\n\t\t{\r\n\t\t\tswitch(this.state)\r\n\t\t\t{\r\n\t\t\t\tcase Promise.State.Fulfilled:\r\n\t\t\t\t\treturn onFulfilled\r\n\t\t\t\t\t\t? resolve(this._result, onFulfilled, Promise.resolve)\r\n\t\t\t\t\t\t: this; // Provided for catch cases.\r\n\t\t\t\tcase Promise.State.Rejected:\r\n\t\t\t\t\treturn onRejected\r\n\t\t\t\t\t\t? resolve(this._error, onRejected, Promise.resolve)\r\n\t\t\t\t\t\t: this;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\treturn new Rejected(ex);\r\n\t\t}\r\n\r\n\t\tthrow new Error(\"Invalid state for a resolved promise.\");\r\n\t}\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tswitch(this.state)\r\n\t\t{\r\n\t\t\tcase Promise.State.Fulfilled:\r\n\t\t\t\tif(onFulfilled) onFulfilled(this._result);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Promise.State.Rejected:\r\n\t\t\t\tif(onRejected) onRejected(this._error);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * The simplest usable version of a promise which returns synchronously the resolved state provided.\r\n */\r\nexport abstract class Resolved extends Resolvable\r\n{\r\n\tconstructor(state:Promise.State, result:T, error?:any)\r\n\t{\r\n\t\tsuper();\r\n\t\tthis._result = result;\r\n\t\tthis._error = error;\r\n\t\tthis._state = state;\r\n\t}\r\n\r\n\r\n}\r\n\r\n/**\r\n * A fulfilled Resolved. Provided for readability.\r\n */\r\nclass Fulfilled extends Resolved\r\n{\r\n\tconstructor(value?:T)\r\n\t{\r\n\t\tsuper(Promise.State.Fulfilled, value);\r\n\t}\r\n}\r\n\r\n/**\r\n * A rejected Resolved. Provided for readability.\r\n */\r\nclass Rejected extends Resolved\r\n{\r\n\tconstructor(error:any)\r\n\t{\r\n\t\tsuper(Promise.State.Rejected, VOID0, error);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Provided as a means for extending the interface of other PromiseLike objects.\r\n */\r\nclass PromiseWrapper extends Resolvable\r\n{\r\n\tconstructor(private _target:PromiseLike)\r\n\t{\r\n\t\tsuper();\r\n\r\n\t\tif(!_target)\r\n\t\t\tthrow new ArgumentNullException(TARGET);\r\n\r\n\t\tif(!isPromise(_target))\r\n\t\t\tthrow new ArgumentException(TARGET, \"Must be a promise-like object.\");\r\n\r\n\t\t_target.then(\r\n\t\t\tv=>\r\n\t\t\t{\r\n\t\t\t\tthis._state = Promise.State.Fulfilled;\r\n\t\t\t\tthis._result = v;\r\n\t\t\t\tthis._error = VOID0;\r\n\t\t\t\tthis._target = VOID0;\r\n\t\t\t},\r\n\t\t\te=>\r\n\t\t\t{\r\n\t\t\t\tthis._state = Promise.State.Rejected;\r\n\t\t\t\tthis._error = e;\r\n\t\t\t\tthis._target = VOID0;\r\n\t\t\t})\r\n\t}\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar t = this._target;\r\n\t\tif(!t) return super.thenSynchronous(onFulfilled, onRejected);\r\n\r\n\t\treturn new Promise((resolve, reject)=>\r\n\t\t{\r\n\t\t\thandleDispatch(t,\r\n\t\t\t\tresult=>handleResolutionMethods(resolve, reject, result, onFulfilled),\r\n\t\t\t\terror=>onRejected\r\n\t\t\t\t\t? handleResolutionMethods(resolve, null, error, onRejected)\r\n\t\t\t\t\t: reject(error)\r\n\t\t\t);\r\n\t\t}, true);\r\n\t}\r\n\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar t = this._target;\r\n\t\tif(!t) return super.thenThis(onFulfilled, onRejected);\r\n\t\thandleDispatch(t, onFulfilled, onRejected);\r\n\t\treturn this;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._target = VOID0;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * This promise class that facilitates pending resolution.\r\n */\r\nexport class Promise extends Resolvable\r\n{\r\n\r\n\tprivate _waiting:IPromiseCallbacks[];\r\n\r\n\t/*\r\n\t * A note about deferring:\r\n\t * The caller can set resolveImmediate to true if they intend to initialize code that will end up being deferred itself.\r\n\t * This eliminates the extra defer that will occur internally.\r\n\t * But for the most part, resolveImmediate = false (the default) will ensure the constructor will not block.\r\n\t *\r\n\t * resolveUsing allows for the same ability but does not defer by default: allowing the caller to take on the work load.\r\n\t * If calling resolve or reject and a deferred response is desired, then use deferImmediate with a closure to do so.\r\n\t */\r\n\r\n\tconstructor(\r\n\t\tresolver?:Promise.Executor, forceSynchronous:boolean = false)\r\n\t{\r\n\t\tsuper();\r\n\r\n\t\tif(resolver) this.resolveUsing(resolver, forceSynchronous);\r\n\t}\r\n\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// Already fulfilled?\r\n\t\tif(this._state) return super.thenSynchronous(onFulfilled, onRejected);\r\n\r\n\t\tvar p = new Promise();\r\n\t\t(this._waiting || (this._waiting = []))\r\n\t\t\t.push(pools.PromiseCallbacks.init(onFulfilled, onRejected, p));\r\n\t\treturn p;\r\n\t}\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// Already fulfilled?\r\n\t\tif(this._state) return super.thenThis(onFulfilled, onRejected);\r\n\r\n\t\t(this._waiting || (this._waiting = []))\r\n\t\t\t.push(pools.PromiseCallbacks.init(onFulfilled, onRejected));\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\r\n\tprotected _onDispose()\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._resolvedCalled = VOID0;\r\n\t}\r\n\r\n\t// Protects against double calling.\r\n\tprotected _resolvedCalled:boolean;\r\n\r\n\tresolveUsing(\r\n\t\tresolver:Promise.Executor,\r\n\t\tforceSynchronous:boolean = false,\r\n\t\tthrowIfSettled:boolean = false)\r\n\t{\r\n\t\tif(!resolver)\r\n\t\t\tthrow new ArgumentNullException(\"resolver\");\r\n\t\tif(this._resolvedCalled)\r\n\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\tif(this.state)\r\n\t\t\tthrow new InvalidOperationException(\"Already resolved: \" + Promise.State[this.state]);\r\n\r\n\t\tthis._resolvedCalled = true;\r\n\r\n\t\tvar state = 0;\r\n\t\tvar rejectHandler = (reason:any)=>\r\n\t\t{\r\n\t\t\tif(state) {\r\n\t\t\t\tconsole.warn(state==-1?\"Rejection called multiple times\":\"Rejection called after fulfilled.\");\r\n\t\t\t} else {\r\n\t\t\t\tstate = -1;\r\n\t\t\t\tthis._resolvedCalled = false;\r\n\t\t\t\tthis.reject(reason);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar fulfillHandler = (v:any)=>\r\n\t\t{\r\n\t\t\tif(state) {\r\n\t\t\t\tconsole.warn(state==1?\"Fulfill called multiple times\":\"Fulfill called after rejection.\");\r\n\t\t\t} else {\r\n\t\t\t\tstate = 1;\r\n\t\t\t\tthis._resolvedCalled = false;\r\n\t\t\t\tthis.resolve(v);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar r = ()=> resolver(\r\n\t\t\tv=>\r\n\t\t\t{\r\n\t\t\t\tif(v==this) throw new InvalidOperationException(\"Cannot resolve a promise as itself.\");\r\n\t\t\t\tif(isPromise(v)) // If the result is a promise, then it will defer downstream.\r\n\t\t\t\t\thandleDispatch(v, fulfillHandler, rejectHandler);\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tfulfillHandler(v);\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t\trejectHandler);\r\n\r\n\t\t// There are some performance edge cases where there caller is not blocking upstream and does not need to defer.\r\n\t\tif(forceSynchronous)\r\n\t\t\tr();\r\n\t\telse\r\n\t\t\tdeferImmediate(r);\r\n\r\n\r\n\t}\r\n\r\n\tresolve(result?:T, throwIfSettled:boolean = false):void\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tif(result==this)\r\n\t\t\tthrow new InvalidOperationException(\"Cannot resolve a promise as itself.\");\r\n\r\n\t\tif(this._state)\r\n\t\t{\r\n\t\t\t// Same value? Ignore...\r\n\t\t\tif(!throwIfSettled || this._state==Promise.State.Fulfilled && this._result===result) return;\r\n\t\t\tthrow new InvalidOperationException(\"Changing the fulfilled state/value of a promise is not supported.\");\r\n\t\t}\r\n\r\n\t\tif(this._resolvedCalled)\r\n\t\t{\r\n\t\t\tif(throwIfSettled)\r\n\t\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._state = Promise.State.Fulfilled;\r\n\r\n\t\tthis._result = result;\r\n\t\tthis._error = VOID0;\r\n\t\tvar o = this._waiting;\r\n\t\tif(o)\r\n\t\t{\r\n\t\t\tthis._waiting = VOID0;\r\n\t\t\tfor(let c of o)\r\n\t\t\t{\r\n\t\t\t\tlet {onFulfilled, promise} = c, p = (>promise);\r\n\t\t\t\tpools.PromiseCallbacks.recycle(c);\r\n\t\t\t\thandleResolution(p, result, onFulfilled);\r\n\t\t\t}\r\n\t\t\to.length = 0;\r\n\t\t}\r\n\t}\r\n\r\n\treject(error:any, throwIfSettled:boolean = false):void\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tif(this._state)\r\n\t\t{\r\n\t\t\t// Same value? Ignore...\r\n\t\t\tif(!throwIfSettled || this._state==Promise.State.Rejected && this._error===error) return;\r\n\t\t\tthrow new InvalidOperationException(\"Changing the rejected state/value of a promise is not supported.\");\r\n\t\t}\r\n\r\n\t\tif(this._resolvedCalled)\r\n\t\t{\r\n\t\t\tif(throwIfSettled)\r\n\t\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._state = Promise.State.Rejected;\r\n\r\n\t\tthis._error = error;\r\n\t\tvar o = this._waiting;\r\n\t\tif(o)\r\n\t\t{\r\n\t\t\tthis._waiting = null; // null = finished. undefined = hasn't started.\r\n\t\t\tfor(let c of o)\r\n\t\t\t{\r\n\t\t\t\tlet {onRejected, promise} = c, p = (>promise);\r\n\t\t\t\tpools.PromiseCallbacks.recycle(c);\r\n\t\t\t\tif(onRejected) handleResolution(p, error, onRejected);\r\n\t\t\t\telse p.reject(error);\r\n\t\t\t}\r\n\t\t\to.length = 0;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\nmodule pools\r\n{\r\n\r\n\t// export module pending\r\n\t// {\r\n\t//\r\n\t//\r\n\t// \tvar pool:ObjectPool>;\r\n\t//\r\n\t// \tfunction getPool()\r\n\t// \t{\r\n\t// \t\treturn pool || (pool = new ObjectPool>(40, factory, c=>c.dispose()));\r\n\t// \t}\r\n\t//\r\n\t// \tfunction factory():Promise\r\n\t// \t{\r\n\t// \t\treturn new Promise();\r\n\t// \t}\r\n\t//\r\n\t// \texport function get():Promise\r\n\t// \t{\r\n\t// \t\tvar p:any = getPool().take();\r\n\t// \t\tp.__wasDisposed = false;\r\n\t// \t\tp._state = Promise.State.Pending;\r\n\t// \t\treturn p;\r\n\t// \t}\r\n\t//\r\n\t// \texport function recycle(c:Promise):void\r\n\t// \t{\r\n\t// \t\tif(c) getPool().add(c);\r\n\t// \t}\r\n\t//\r\n\t// }\r\n\t//\r\n\t// export function recycle(c:PromiseBase):void\r\n\t// {\r\n\t// \tif(!c) return;\r\n\t// \tif(c instanceof Promise && c.constructor==Promise) pending.recycle(c);\r\n\t// \telse c.dispose();\r\n\t// }\r\n\r\n\r\n\texport module PromiseCallbacks\r\n\t{\r\n\r\n\t\tvar pool:ObjectPool>;\r\n\r\n\t\tfunction getPool()\r\n\t\t{\r\n\t\t\treturn pool\r\n\t\t\t\t|| (pool = new ObjectPool>(40, factory, c=>\r\n\t\t\t\t{\r\n\t\t\t\t\tc.onFulfilled = null;\r\n\t\t\t\t\tc.onRejected = null;\r\n\t\t\t\t\tc.promise = null;\r\n\t\t\t\t}));\r\n\t\t}\r\n\r\n\t\tfunction factory():IPromiseCallbacks\r\n\t\t{\r\n\t\t\treturn {\r\n\t\t\t\tonFulfilled: null,\r\n\t\t\t\tonRejected: null,\r\n\t\t\t\tpromise: null\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\texport function init(\r\n\t\t\tonFulfilled:Promise.Fulfill,\r\n\t\t\tonRejected?:Promise.Reject,\r\n\t\t\tpromise?:PromiseLike):IPromiseCallbacks\r\n\t\t{\r\n\r\n\t\t\tvar c = getPool().take();\r\n\t\t\tc.onFulfilled = onFulfilled;\r\n\t\t\tc.onRejected = onRejected;\r\n\t\t\tc.promise = promise;\r\n\t\t\treturn c;\r\n\t\t}\r\n\r\n\t\texport function recycle(c:IPromiseCallbacks):void\r\n\t\t{\r\n\t\t\tgetPool().add(c);\r\n\t\t}\r\n\t}\r\n\r\n\r\n}\r\n\r\n\r\nexport module Promise\r\n{\r\n\r\n\t/**\r\n\t * The state of a promise.\r\n\t * https://github.com/domenic/promises-unwrapping/blob/master/docs/states-and-fates.md\r\n\t * If a promise is disposed the value will be undefined which will also evaluate (promise.state)==false.\r\n\t */\r\n\texport enum State {\r\n\t\tPending = 0,\r\n\t\tFulfilled = 1,\r\n\t\tRejected = -1\r\n\t}\r\n\tObject.freeze(State);\r\n\r\n\texport type Resolution = PromiseLike|TResult|void;\r\n\r\n\texport interface Fulfill\r\n\t{\r\n\t\t(value:T):Resolution\r\n\t}\r\n\r\n\texport interface Reject\r\n\t{\r\n\t\t(err?:any):Resolution\r\n\t}\r\n\r\n\texport interface Then\r\n\t{\r\n\t\t(\r\n\t\t\tonFulfilled:Fulfill,\r\n\t\t\tonRejected?:Reject):PromiseBase\r\n\t}\r\n\r\n\texport interface Executor\r\n\t{\r\n\t\t(\r\n\t\t\tresolve:(value?:T | PromiseLike) => void,\r\n\t\t\treject:(reason?:any) => void):void;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns a promise that is fulfilled with an array containing the fulfillment value of each promise, or is rejected with the same rejection reason as the first promise to be rejected.\r\n\t */\r\n\texport function all(promises:PromiseLike[]):PromiseBase\r\n\texport function all(promise:PromiseLike, ...rest:PromiseLike[]):PromiseBase\r\n\texport function all(\r\n\t\tfirst:PromiseLike|PromiseLike[],\r\n\t\t...rest:PromiseLike[]):PromiseBase\r\n\t{\r\n\t\tif(!first && !rest.length) throw new ArgumentNullException(\"promises\");\r\n\t\tvar promises = (Array.isArray(first) ? first : [first]).concat(rest); // yay a copy!\r\n\t\tif(!promises.length || promises.every(v=>!v)) return new Fulfilled(promises); // it's a new empty, reuse it. :|\r\n\r\n\t\t// Eliminate deferred and take the parent since all .then calls happen on next cycle anyway.\r\n\t\treturn new Promise((resolve, reject)=>\r\n\t\t{\r\n\t\t\tlet checkedAll = false;\r\n\t\t\tlet result:any[] = [];\r\n\t\t\tlet len = promises.length;\r\n\t\t\tresult.length = len;\r\n\t\t\t// Using a set instead of -- a number is more reliable if just in case one of the provided promises resolves twice.\r\n\t\t\tlet remaining = new Set(promises.map((v, i)=>i)); // get all the indexes...\r\n\r\n\t\t\tlet cleanup = ()=>\r\n\t\t\t{\r\n\t\t\t\treject = null;\r\n\t\t\t\tresolve = null;\r\n\t\t\t\tpromises.length = 0;\r\n\t\t\t\tpromises = null;\r\n\t\t\t\tremaining.dispose();\r\n\t\t\t\tremaining = null;\r\n\t\t\t};\r\n\r\n\t\t\tlet checkIfShouldResolve = ()=>\r\n\t\t\t{\r\n\t\t\t\tlet r = resolve;\r\n\t\t\t\tif(r && !remaining.count)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(result);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onFulfill = (v:any, i:number)=>\r\n\t\t\t{\r\n\t\t\t\tif(resolve)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult[i] = v;\r\n\t\t\t\t\tremaining.remove(i);\r\n\t\t\t\t\tcheckIfShouldResolve();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onReject = (e?:any)=>\r\n\t\t\t{\r\n\t\t\t\tlet r = reject;\r\n\t\t\t\tif(r)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tfor(let i = 0; remaining && ionFulfill(v, i), onReject);\r\n\t\t\t\telse remaining.remove(i);\r\n\t\t\t\tcheckIfShouldResolve();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved\r\n\t * or rejected.\r\n\t * @param promises An array of Promises.\r\n\t * @returns A new Promise.\r\n\t */\r\n\texport function race(promises:PromiseLike[]):PromiseBase\r\n\texport function race(promise:PromiseLike, ...rest:PromiseLike[]):PromiseBase\r\n\texport function race(\r\n\t\tfirst:PromiseLike|PromiseLike[],\r\n\t\t...rest:PromiseLike[]):PromiseBase\r\n\t{\r\n\t\tvar promises = first && (Array.isArray(first) ? first : [first]).concat(rest); // yay a copy?\r\n\t\tif(!promises || !promises.length || !(promises = promises.filter(v=>v!=null)).length)\r\n\t\t\tthrow new ArgumentException(\"Nothing to wait for.\");\r\n\r\n\t\tvar len = promises.length;\r\n\r\n\t\t// Only one? Nothing to race.\r\n\t\tif(len==1) return wrap(promises[0]);\r\n\r\n\t\t// Look for already resolved promises and the first one wins.\r\n\t\tfor(let i = 0; i\r\n\t\t{\r\n\t\t\tlet cleanup = ()=>\r\n\t\t\t{\r\n\t\t\t\treject = null;\r\n\t\t\t\tresolve = null;\r\n\t\t\t\tpromises.length = 0;\r\n\t\t\t\tpromises = null;\r\n\t\t\t};\r\n\r\n\t\t\tlet onResolve = (r:(x:any)=>void, v:any)=>\r\n\t\t\t{\r\n\t\t\t\tif(r)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(v);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onFulfill = (v:any)=> onResolve(resolve, v);\r\n\t\t\tlet onReject = (e?:any)=> onResolve(reject, e);\r\n\r\n\t\t\tfor(let p of promises)\r\n\t\t\t{\r\n\t\t\t\tif(!resolve) break;\r\n\t\t\t\tp.then(onFulfill, onReject);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// // race(values: Iterable>): Promise;\r\n\r\n\t/**\r\n\t * Creates a new resolved promise .\r\n\t * @returns A resolved promise.\r\n\t */\r\n\texport function resolve():PromiseBase\r\n\r\n\t/**\r\n\t * Creates a new resolved promise for the provided value.\r\n\t * @param value A value or promise.\r\n\t * @returns A promise whose internal state matches the provided promise.\r\n\t */\r\n\texport function resolve(value:T | PromiseLike):PromiseBase;\r\n\texport function resolve(value?:any):PromiseBase\r\n\t{\r\n\r\n\t\treturn isPromise(value) ? wrap(value) : new Fulfilled(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new rejected promise for the provided reason.\r\n\t * @param reason The reason the promise was rejected.\r\n\t * @returns A new rejected Promise.\r\n\t */\r\n\texport function reject(reason:T):PromiseBase\r\n\t{\r\n\t\treturn new Rejected(reason);\r\n\t}\r\n\r\n\t/**\r\n\t * Takes any Promise-Like object and ensures an extended version of it from this module.\r\n\t * @param target The Promise-Like object\r\n\t * @returns A new target that simply extends the target.\r\n\t */\r\n\texport function wrap(target:PromiseLike):PromiseBase\r\n\t{\r\n\t\tif(!target) throw new ArgumentNullException(TARGET);\r\n\t\treturn target instanceof Promise ? this : new PromiseWrapper(target);\r\n\t}\r\n\r\n\t/**\r\n\t * A function that acts like a 'then' method (aka then-able) can be extended by providing a function that takes an onFulfill and onReject.\r\n\t * @param then\r\n\t * @returns {PromiseWrapper}\r\n\t */\r\n\texport function createFrom(then:Then):PromiseBase\r\n\t{\r\n\t\tif(!then) throw new ArgumentNullException(THEN);\r\n\t\treturn new PromiseWrapper({then: then});\r\n\t}\r\n\r\n}\r\n\r\n\r\ninterface IPromiseCallbacks\r\n{\r\n\tonFulfilled:Promise.Fulfill;\r\n\tonRejected:Promise.Reject;\r\n\tpromise?:PromiseLike;\r\n}\r\n"]} \ No newline at end of file diff --git a/dist/commonjs/System/Promises/LazyPromise.d.ts b/dist/commonjs/System/Promises/LazyPromise.d.ts new file mode 100644 index 00000000..2c5bb359 --- /dev/null +++ b/dist/commonjs/System/Promises/LazyPromise.d.ts @@ -0,0 +1,16 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT + */ +import { Promise, PromiseBase } from "./Promise"; +export declare class LazyPromise extends Promise { + private _resolver; + constructor(_resolver: Promise.Executor); + protected _onDispose(): void; + private _onThen(); + thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; + thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; + delayFromNow(milliseconds?: number): PromiseBase; + delayAfterResolve(milliseconds?: number): PromiseBase; +} +export default LazyPromise; diff --git a/dist/commonjs/System/Promises/LazyPromise.js b/dist/commonjs/System/Promises/LazyPromise.js new file mode 100644 index 00000000..fc9e3a13 --- /dev/null +++ b/dist/commonjs/System/Promises/LazyPromise.js @@ -0,0 +1,151 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT + */ +"use strict"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } }; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var Promise_1 = require("./Promise"); +var defer_1 = require("../Threading/defer"); +var ArgumentNullException_1 = require("../Exceptions/ArgumentNullException"); +var VOID0 = void 0; + +var LazyPromise = function (_Promise_1$Promise) { + _inherits(LazyPromise, _Promise_1$Promise); + + function LazyPromise(_resolver) { + _classCallCheck(this, LazyPromise); + + var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(LazyPromise).call(this)); + + _this._resolver = _resolver; + if (!_resolver) throw new ArgumentNullException_1.ArgumentNullException("resolver"); + _this._resolvedCalled = true; + return _this; + } + + _createClass(LazyPromise, [{ + key: "_onDispose", + value: function _onDispose() { + _get(Object.getPrototypeOf(LazyPromise.prototype), "_onDispose", this).call(this); + this._resolver = VOID0; + } + }, { + key: "_onThen", + value: function _onThen() { + var r = this._resolver; + if (r) { + this._resolver = VOID0; + this._resolvedCalled = false; + this.resolveUsing(r); + } + } + }, { + key: "thenSynchronous", + value: function thenSynchronous(onFulfilled, onRejected) { + this._onThen(); + return _get(Object.getPrototypeOf(LazyPromise.prototype), "thenSynchronous", this).call(this, onFulfilled, onRejected); + } + }, { + key: "thenThis", + value: function thenThis(onFulfilled, onRejected) { + this._onThen(); + return _get(Object.getPrototypeOf(LazyPromise.prototype), "thenThis", this).call(this, onFulfilled, onRejected); + } + }, { + key: "delayFromNow", + value: function delayFromNow() { + var _this2 = this; + + var milliseconds = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0]; + + this.throwIfDisposed(); + if (!this._resolver || this.isSettled) return _get(Object.getPrototypeOf(LazyPromise.prototype), "delayFromNow", this).call(this, milliseconds); + var _pass; + var timedOut = false; + var timeout = defer_1.defer(function () { + timedOut = true; + if (_pass) _pass(); + }, milliseconds); + return new LazyPromise(function (resolve, reject) { + _pass = function pass() { + _this2.thenThis(function (v) { + return resolve(v); + }, function (e) { + return reject(e); + }); + timeout.dispose(); + timeout = null; + _pass = null; + }; + if (timedOut) _pass(); + }); + } + }, { + key: "delayAfterResolve", + value: function delayAfterResolve() { + var _this3 = this; + + var milliseconds = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0]; + + this.throwIfDisposed(); + if (!this._resolver || this.isSettled) return _get(Object.getPrototypeOf(LazyPromise.prototype), "delayAfterResolve", this).call(this, milliseconds); + var pass; + var timeout; + var _finalize = function finalize() { + if (timeout) { + timeout.dispose(); + timeout = null; + } + if (pass) pass(); + _finalize = null; + }; + { + var detector = function detector() { + if (_finalize) timeout = defer_1.defer(_finalize, milliseconds); + }; + _get(Object.getPrototypeOf(LazyPromise.prototype), "thenThis", this).call(this, detector, detector); + detector = null; + } + return new LazyPromise(function (resolve, reject) { + if (_this3.isPending) { + _this3.thenThis(function (v) { + return defer_1.defer(function () { + return resolve(v); + }); + }, function (e) { + return defer_1.defer(function () { + return reject(e); + }); + }); + _finalize(); + } else { + pass = function pass() { + _this3.thenThis(function (v) { + return resolve(v); + }, function (e) { + return reject(e); + }); + }; + if (!_finalize) pass(); + } + }); + } + }]); + + return LazyPromise; +}(Promise_1.Promise); + +exports.LazyPromise = LazyPromise; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = LazyPromise; +//# sourceMappingURL=LazyPromise.js.map diff --git a/dist/commonjs/System/Promises/LazyPromise.js.map b/dist/commonjs/System/Promises/LazyPromise.js.map new file mode 100644 index 00000000..6b724a54 --- /dev/null +++ b/dist/commonjs/System/Promises/LazyPromise.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["System/Promises/LazyPromise.js","System/Promises/LazyPromise.ts"],"names":[],"mappings":"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","file":"System/Promises/LazyPromise.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT\n */\n\"use strict\";\nconst Promise_1 = require(\"./Promise\");\nconst defer_1 = require(\"../Threading/defer\");\nconst ArgumentNullException_1 = require(\"../Exceptions/ArgumentNullException\");\nconst VOID0 = void 0;\nclass LazyPromise extends Promise_1.Promise {\n constructor(_resolver) {\n super();\n this._resolver = _resolver;\n if (!_resolver)\n throw new ArgumentNullException_1.ArgumentNullException(\"resolver\");\n this._resolvedCalled = true;\n }\n _onDispose() {\n super._onDispose();\n this._resolver = VOID0;\n }\n _onThen() {\n var r = this._resolver;\n if (r) {\n this._resolver = VOID0;\n this._resolvedCalled = false;\n this.resolveUsing(r);\n }\n }\n thenSynchronous(onFulfilled, onRejected) {\n this._onThen();\n return super.thenSynchronous(onFulfilled, onRejected);\n }\n thenThis(onFulfilled, onRejected) {\n this._onThen();\n return super.thenThis(onFulfilled, onRejected);\n }\n delayFromNow(milliseconds = 0) {\n this.throwIfDisposed();\n if (!this._resolver || this.isSettled)\n return super.delayFromNow(milliseconds);\n var pass;\n var timedOut = false;\n var timeout = defer_1.defer(() => {\n timedOut = true;\n if (pass)\n pass();\n }, milliseconds);\n return new LazyPromise((resolve, reject) => {\n pass = () => {\n this.thenThis(v => resolve(v), e => reject(e));\n timeout.dispose();\n timeout = null;\n pass = null;\n };\n if (timedOut)\n pass();\n });\n }\n delayAfterResolve(milliseconds = 0) {\n this.throwIfDisposed();\n if (!this._resolver || this.isSettled)\n return super.delayAfterResolve(milliseconds);\n var pass;\n var timeout;\n var finalize = () => {\n if (timeout) {\n timeout.dispose();\n timeout = null;\n }\n if (pass)\n pass();\n finalize = null;\n };\n {\n let detector = () => {\n if (finalize)\n timeout = defer_1.defer(finalize, milliseconds);\n };\n super.thenThis(detector, detector);\n detector = null;\n }\n return new LazyPromise((resolve, reject) => {\n if (this.isPending) {\n this.thenThis(v => defer_1.defer(() => resolve(v)), e => defer_1.defer(() => reject(e)));\n finalize();\n }\n else {\n pass = () => {\n this.thenThis(v => resolve(v), e => reject(e));\n };\n if (!finalize)\n pass();\n }\n });\n }\n}\nexports.LazyPromise = LazyPromise;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = LazyPromise;\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT\r\n */\r\n\r\nimport {Promise, PromiseBase} from \"./Promise\";\r\nimport {Closure} from \"../FunctionTypes\";\r\nimport {ICancellable} from \"../Threading/ICancellable\";\r\nimport {defer} from \"../Threading/defer\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\n\r\nconst VOID0:any = void 0;\r\n\r\n/**\r\n * A promise that waits for the first then to trigger the resolver.\r\n */\r\nexport class LazyPromise extends Promise\r\n{\r\n\r\n\tconstructor(private _resolver:Promise.Executor)\r\n\t{\r\n\t\tsuper();\r\n\t\tif(!_resolver) throw new ArgumentNullException(\"resolver\");\r\n\t\tthis._resolvedCalled = true;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._resolver = VOID0;\r\n\t}\r\n\r\n\tprivate _onThen():void\r\n\t{\r\n\t\tvar r = this._resolver;\r\n\t\tif(r)\r\n\t\t{\r\n\t\t\tthis._resolver = VOID0;\r\n\t\t\tthis._resolvedCalled = false;\r\n\t\t\tthis.resolveUsing(r);\r\n\t\t}\r\n\t}\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis._onThen();\r\n\t\treturn super.thenSynchronous(onFulfilled, onRejected);\r\n\t}\r\n\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis._onThen();\r\n\t\treturn super.thenThis(onFulfilled, onRejected);\r\n\t}\r\n\r\n\t// NOTE: For a LazyPromise we need to be careful not to trigger the resolve for delay.\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from the time called before continuing.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a minimum delay.\r\n\t */\r\n\tdelayFromNow(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// If this is already guaranteed to resolve, the go ahead and pass to the super.\r\n\t\tif(!this._resolver || this.isSettled)\r\n\t\t\treturn super.delayFromNow(milliseconds);\r\n\r\n\t\t/*\r\n\t\t * If not triggered yet, then we create a special promise\r\n\t\t * that only requests the resolution from the parent promise\r\n\t\t * if a 'then' is called to ensure the lazy pattern.\r\n\t\t */\r\n\t\tvar pass:Closure;\r\n\t\tvar timedOut:boolean = false;\r\n\r\n\t\t// Setup the timer.\r\n\t\tvar timeout = defer(()=>\r\n\t\t\t{\r\n\t\t\t\ttimedOut = true;\r\n\t\t\t\t// If the promise was requested already go ahead and pass the request on to the parent.\r\n\t\t\t\tif(pass)\r\n\t\t\t\t\tpass();\r\n\t\t\t},\r\n\t\t\tmilliseconds);\r\n\r\n\t\treturn new LazyPromise(\r\n\t\t\t(resolve, reject)=>\r\n\t\t\t{\r\n\t\t\t\t// A lazy promise only enters here if something called for a resolution.\r\n\t\t\t\tpass = ()=>\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.thenThis(\r\n\t\t\t\t\t\tv=> resolve(v),\r\n\t\t\t\t\t\te=> reject(e)\r\n\t\t\t\t\t);\r\n\t\t\t\t\ttimeout.dispose();\r\n\t\t\t\t\ttimeout = null;\r\n\t\t\t\t\tpass = null;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// If the timeout completed already go ahead and pass the request on to the parent.\r\n\t\t\t\tif(timedOut)\r\n\t\t\t\t\tpass();\r\n\t\t\t\t// Otherwise wait for the timeout to do it.\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from after this promise resolves.\r\n\t * If the promise is already resolved, the delay will start from now.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayAfterResolve(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// If this is already guaranteed to resolve, the go ahead and pass to the super.\r\n\t\tif(!this._resolver || this.isSettled)\r\n\t\t\treturn super.delayAfterResolve(milliseconds);\r\n\r\n\t\t/*\r\n\t\t * If not triggered yet, then we create a special promise\r\n\t\t * that only requests the resolution from the parent promise\r\n\t\t * if a 'then' is called to ensure the lazy pattern.\r\n\t\t */\r\n\t\tvar pass:Closure;\r\n\r\n\r\n\t\t// Setup the timer.\r\n\t\tvar timeout:ICancellable;\r\n\r\n\t\tvar finalize = ()=>\r\n\t\t{\r\n\t\t\tif(timeout)\r\n\t\t\t{\r\n\t\t\t\ttimeout.dispose();\r\n\t\t\t\ttimeout = null;\r\n\t\t\t}\r\n\t\t\t// If the promise was requested already go ahead and pass the request on to the parent.\r\n\t\t\tif(pass)\r\n\t\t\t\tpass();\r\n\r\n\t\t\tfinalize = null;\r\n\t\t};\r\n\r\n\t\t{\r\n\t\t\tlet detector = ()=>\r\n\t\t\t{\r\n\t\t\t\tif(finalize) // We may already be wrapped up so never mind!\r\n\t\t\t\t\ttimeout = defer(finalize, milliseconds);\r\n\t\t\t};\r\n\r\n\t\t\t// Calling super.thenThis does not trigger resolution.\r\n\t\t\t// This simply waits for resolution to happen.\r\n\t\t\t// Is effectively the timer by when resolution has occurred.\r\n\t\t\tsuper.thenThis(detector, detector);\r\n\t\t\tdetector = null;\r\n\t\t}\r\n\r\n\t\treturn new LazyPromise(\r\n\t\t\t(resolve, reject)=>\r\n\t\t\t{\r\n\t\t\t\t// Because of the lazy nature of this promise, this could enter here at any time.\r\n\t\t\t\tif(this.isPending)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.thenThis(\r\n\t\t\t\t\t\tv=> defer(()=>resolve(v)),\r\n\t\t\t\t\t\te=> defer(()=>reject(e))\r\n\t\t\t\t\t);\r\n\t\t\t\t\tfinalize();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// We don't know when this resolved and could have happened anytime after calling this delay method.\r\n\t\t\t\t\tpass = ()=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.thenThis(\r\n\t\t\t\t\t\t\tv=> resolve(v),\r\n\t\t\t\t\t\t\te=> reject(e)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// Already finalized (aka resolved after a timeout)? Go now!\r\n\t\t\t\t\tif(!finalize)\r\n\t\t\t\t\t\tpass();\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\r\n\t}\r\n}\r\n\r\nexport default LazyPromise;"]} \ No newline at end of file diff --git a/dist/commonjs/System/Promises/Promise.d.ts b/dist/commonjs/System/Promises/Promise.d.ts index ece8587f..4dd52ef6 100644 --- a/dist/commonjs/System/Promises/Promise.d.ts +++ b/dist/commonjs/System/Promises/Promise.d.ts @@ -42,23 +42,15 @@ export declare abstract class Resolved extends Resolvable { } export declare class Promise extends Resolvable { private _waiting; - constructor(resolver?: Promise.Executor); + constructor(resolver?: Promise.Executor, forceSynchronous?: boolean); thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; protected _onDispose(): void; protected _resolvedCalled: boolean; - resolveUsing(resolver: Promise.Executor, throwIfSettled?: boolean): void; + resolveUsing(resolver: Promise.Executor, forceSynchronous?: boolean, throwIfSettled?: boolean): void; resolve(result?: T, throwIfSettled?: boolean): void; reject(error: any, throwIfSettled?: boolean): void; } -export declare class LazyPromise extends Promise { - private _resolver; - constructor(_resolver: Promise.Executor); - protected _onDispose(): void; - private _onThen(); - thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; - thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; -} export declare module Promise { enum State { Pending = 0, @@ -85,8 +77,6 @@ export declare module Promise { function resolve(): PromiseBase; function resolve(value: T | PromiseLike): PromiseBase; function reject(reason: T): PromiseBase; - function lazy(resolver: Promise.Executor): LazyPromise; function wrap(target: PromiseLike): PromiseBase; function createFrom(then: Then): PromiseBase; - function pending(resolver?: Promise.Executor): Promise; } diff --git a/dist/commonjs/System/Promises/Promise.js b/dist/commonjs/System/Promises/Promise.js index 8b40a8f7..fdeb17bf 100644 --- a/dist/commonjs/System/Promises/Promise.js +++ b/dist/commonjs/System/Promises/Promise.js @@ -37,28 +37,6 @@ function resolve(value, resolver, promiseFactory) { var nextValue = resolver ? resolver(value) : value; return nextValue && isPromise(nextValue) ? Promise.wrap(nextValue) : promiseFactory(nextValue); } -function pass(source, dest) { - return function () { - source.thenThis(function (v) { - dest.resolve(v); - }, function (e) { - dest.reject(e); - }); - }; -} -function passDelayed(source, dest, ms) { - return function () { - source.thenThis(function (v) { - return defer_1.defer(function () { - return dest.resolve(v); - }, ms); - }, function (e) { - return defer_1.defer(function () { - return dest.reject(e); - }, ms); - }); - }; -} function handleResolution(p, value, resolver) { try { var v = resolver ? resolver(value) : value; @@ -177,7 +155,7 @@ var PromiseBase = function (_PromiseState) { value: function then(onFulfilled, onRejected) { var _this3 = this; - return Promise.pending(function (resolve, reject) { + return new Promise(function (resolve, reject) { _this3.thenThis(function (result) { return handleResolutionMethods(resolve, reject, result, onFulfilled); }, function (error) { @@ -188,22 +166,41 @@ var PromiseBase = function (_PromiseState) { }, { key: "delayFromNow", value: function delayFromNow() { + var _this4 = this; + var milliseconds = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0]; this.throwIfDisposed(); - var p = Promise.pending(); - defer_1.defer(pass(this, p), milliseconds); - return p; + return new Promise(function (resolve, reject) { + defer_1.defer(function () { + _this4.thenThis(function (v) { + return resolve(v); + }, function (e) { + return reject(e); + }); + }, milliseconds); + }, true); } }, { key: "delayAfterResolve", value: function delayAfterResolve() { + var _this5 = this; + var milliseconds = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0]; this.throwIfDisposed(); - var p = Promise.pending(); - passDelayed(this, p, milliseconds); - return p; + if (this.isSettled) return this.delayFromNow(milliseconds); + return new Promise(function (resolve, reject) { + _this5.thenThis(function (v) { + return defer_1.defer(function () { + return resolve(v); + }, milliseconds); + }, function (e) { + return defer_1.defer(function () { + return reject(e); + }, milliseconds); + }); + }, true); } }, { key: 'catch', @@ -286,12 +283,12 @@ var Resolved = function (_Resolvable) { function Resolved(state, result, error) { _classCallCheck(this, Resolved); - var _this5 = _possibleConstructorReturn(this, Object.getPrototypeOf(Resolved).call(this)); + var _this7 = _possibleConstructorReturn(this, Object.getPrototypeOf(Resolved).call(this)); - _this5._result = result; - _this5._error = error; - _this5._state = state; - return _this5; + _this7._result = result; + _this7._error = error; + _this7._state = state; + return _this7; } return Resolved; @@ -329,22 +326,22 @@ var PromiseWrapper = function (_Resolvable2) { function PromiseWrapper(_target) { _classCallCheck(this, PromiseWrapper); - var _this8 = _possibleConstructorReturn(this, Object.getPrototypeOf(PromiseWrapper).call(this)); + var _this10 = _possibleConstructorReturn(this, Object.getPrototypeOf(PromiseWrapper).call(this)); - _this8._target = _target; + _this10._target = _target; if (!_target) throw new ArgumentNullException_1.ArgumentNullException(TARGET); if (!isPromise(_target)) throw new ArgumentException_1.ArgumentException(TARGET, "Must be a promise-like object."); _target.then(function (v) { - _this8._state = Promise.State.Fulfilled; - _this8._result = v; - _this8._error = VOID0; - _this8._target = VOID0; + _this10._state = Promise.State.Fulfilled; + _this10._result = v; + _this10._error = VOID0; + _this10._target = VOID0; }, function (e) { - _this8._state = Promise.State.Rejected; - _this8._error = e; - _this8._target = VOID0; + _this10._state = Promise.State.Rejected; + _this10._error = e; + _this10._target = VOID0; }); - return _this8; + return _this10; } _createClass(PromiseWrapper, [{ @@ -353,13 +350,13 @@ var PromiseWrapper = function (_Resolvable2) { this.throwIfDisposed(); var t = this._target; if (!t) return _get(Object.getPrototypeOf(PromiseWrapper.prototype), "thenSynchronous", this).call(this, onFulfilled, onRejected); - var p = Promise.pending(); - handleDispatch(t, function (result) { - return handleResolution(p, result, onFulfilled); - }, function (error) { - return onRejected ? handleResolution(p, error, onRejected) : p.reject(error); - }); - return p; + return new Promise(function (resolve, reject) { + handleDispatch(t, function (result) { + return handleResolutionMethods(resolve, reject, result, onFulfilled); + }, function (error) { + return onRejected ? handleResolutionMethods(resolve, null, error, onRejected) : reject(error); + }); + }, true); } }, { key: "thenThis", @@ -385,12 +382,14 @@ var Promise = function (_Resolvable3) { _inherits(Promise, _Resolvable3); function Promise(resolver) { + var forceSynchronous = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; + _classCallCheck(this, Promise); - var _this9 = _possibleConstructorReturn(this, Object.getPrototypeOf(Promise).call(this)); + var _this11 = _possibleConstructorReturn(this, Object.getPrototypeOf(Promise).call(this)); - if (resolver) _this9.resolveUsing(resolver); - return _this9; + if (resolver) _this11.resolveUsing(resolver, forceSynchronous); + return _this11; } _createClass(Promise, [{ @@ -419,30 +418,43 @@ var Promise = function (_Resolvable3) { }, { key: "resolveUsing", value: function resolveUsing(resolver) { - var _this10 = this; + var _this12 = this; - var throwIfSettled = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; + var forceSynchronous = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; + var throwIfSettled = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2]; if (!resolver) throw new ArgumentNullException_1.ArgumentNullException("resolver"); if (this._resolvedCalled) throw new InvalidOperationException_1.InvalidOperationException(".resolve() already called."); if (this.state) throw new InvalidOperationException_1.InvalidOperationException("Already resolved: " + Promise.State[this.state]); this._resolvedCalled = true; + var state = 0; var rejectHandler = function rejectHandler(reason) { - _this10._resolvedCalled = false; - _this10.reject(reason); + if (state) { + console.warn(state == -1 ? "Rejection called multiple times" : "Rejection called after fulfilled."); + } else { + state = -1; + _this12._resolvedCalled = false; + _this12.reject(reason); + } }; var fulfillHandler = function fulfillHandler(v) { - _this10._resolvedCalled = false; - _this10.resolve(v); + if (state) { + console.warn(state == 1 ? "Fulfill called multiple times" : "Fulfill called after rejection."); + } else { + state = 1; + _this12._resolvedCalled = false; + _this12.resolve(v); + } }; - deferImmediate_1.deferImmediate(function () { - resolver(function (v) { - if (v == _this10) throw new InvalidOperationException_1.InvalidOperationException("Cannot resolve a promise as itself."); + var r = function r() { + return resolver(function (v) { + if (v == _this12) throw new InvalidOperationException_1.InvalidOperationException("Cannot resolve a promise as itself."); if (isPromise(v)) handleDispatch(v, fulfillHandler, rejectHandler);else { fulfillHandler(v); } }, rejectHandler); - }); + }; + if (forceSynchronous) r();else deferImmediate_1.deferImmediate(r); } }, { key: "resolve", @@ -550,55 +562,6 @@ var Promise = function (_Resolvable3) { }(Resolvable); exports.Promise = Promise; - -var LazyPromise = function (_Promise) { - _inherits(LazyPromise, _Promise); - - function LazyPromise(_resolver) { - _classCallCheck(this, LazyPromise); - - var _this11 = _possibleConstructorReturn(this, Object.getPrototypeOf(LazyPromise).call(this)); - - _this11._resolver = _resolver; - if (!_resolver) throw new ArgumentNullException_1.ArgumentNullException("resolver"); - _this11._resolvedCalled = true; - return _this11; - } - - _createClass(LazyPromise, [{ - key: "_onDispose", - value: function _onDispose() { - _get(Object.getPrototypeOf(LazyPromise.prototype), "_onDispose", this).call(this); - this._resolver = VOID0; - } - }, { - key: "_onThen", - value: function _onThen() { - var r = this._resolver; - if (r) { - this._resolver = VOID0; - this._resolvedCalled = false; - this.resolveUsing(r); - } - } - }, { - key: "thenSynchronous", - value: function thenSynchronous(onFulfilled, onRejected) { - this._onThen(); - return _get(Object.getPrototypeOf(LazyPromise.prototype), "thenSynchronous", this).call(this, onFulfilled, onRejected); - } - }, { - key: "thenThis", - value: function thenThis(onFulfilled, onRejected) { - this._onThen(); - return _get(Object.getPrototypeOf(LazyPromise.prototype), "thenThis", this).call(this, onFulfilled, onRejected); - } - }]); - - return LazyPromise; -}(Promise); - -exports.LazyPromise = LazyPromise; var pools; (function (pools) { var PromiseCallbacks; @@ -650,7 +613,7 @@ var pools; if (!promises.length || promises.every(function (v) { return !v; })) return new Fulfilled(promises); - return pending(function (resolve, reject) { + return new Promise(function (resolve, reject) { var checkedAll = false; var result = []; var len = promises.length; @@ -717,7 +680,7 @@ var pools; var p = promises[i]; if (p instanceof PromiseBase && p.isSettled) return p; } - return pending(function (resolve, reject) { + return new Promise(function (resolve, reject) { var cleanup = function cleanup() { reject = null; resolve = null; @@ -772,10 +735,6 @@ var pools; return new Rejected(reason); } Promise.reject = reject; - function lazy(resolver) { - return new LazyPromise(resolver); - } - Promise.lazy = lazy; function wrap(target) { if (!target) throw new ArgumentNullException_1.ArgumentNullException(TARGET); return target instanceof Promise ? this : new PromiseWrapper(target); @@ -786,9 +745,5 @@ var pools; return new PromiseWrapper({ then: then }); } Promise.createFrom = createFrom; - function pending(resolver) { - return new Promise(resolver); - } - Promise.pending = pending; })(Promise = exports.Promise || (exports.Promise = {})); //# sourceMappingURL=Promise.js.map diff --git a/dist/commonjs/System/Promises/Promise.js.map b/dist/commonjs/System/Promises/Promise.js.map index 92bb1d13..f3763a32 100644 --- a/dist/commonjs/System/Promises/Promise.js.map +++ b/dist/commonjs/System/Promises/Promise.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Promises/Promise.js","System/Promises/Promise.ts"],"names":[],"mappings":"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","file":"System/Promises/Promise.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT\n * Although most of the following code is written from scratch, it is\n * heavily influenced by Q (https://github.com/kriskowal/q) and uses some of Q's spec.\n */\n\"use strict\";\nconst Types_1 = require(\"../Types\");\nconst deferImmediate_1 = require(\"../Threading/deferImmediate\");\nconst DisposableBase_1 = require(\"../Disposable/DisposableBase\");\nconst InvalidOperationException_1 = require(\"../Exceptions/InvalidOperationException\");\nconst ArgumentException_1 = require(\"../Exceptions/ArgumentException\");\nconst ArgumentNullException_1 = require(\"../Exceptions/ArgumentNullException\");\nconst ObjectPool_1 = require(\"../Disposable/ObjectPool\");\nconst Set_1 = require(\"../Collections/Set\");\nconst defer_1 = require(\"../Threading/defer\");\nconst VOID0 = void 0, PROMISE = \"Promise\", PROMISE_STATE = PROMISE + \"State\", THEN = \"then\", TARGET = \"target\";\nfunction isPromise(value) {\n return Types_1.default.hasMemberOfType(value, THEN, Types_1.default.FUNCTION);\n}\nfunction resolve(value, resolver, promiseFactory) {\n let nextValue = resolver\n ? resolver(value)\n : value;\n return nextValue && isPromise(nextValue)\n ? Promise.wrap(nextValue)\n : promiseFactory(nextValue);\n}\nfunction pass(source, dest) {\n return () => {\n source.thenThis(v => {\n dest.resolve(v);\n }, e => {\n dest.reject(e);\n });\n };\n}\nfunction passDelayed(source, dest, ms) {\n return () => {\n source.thenThis(v => defer_1.defer(() => dest.resolve(v), ms), e => defer_1.defer(() => dest.reject(e), ms));\n };\n}\nfunction handleResolution(p, value, resolver) {\n try {\n let v = resolver ? resolver(value) : value;\n if (p)\n p.resolve(v);\n }\n catch (ex) {\n p.reject(ex);\n }\n}\nfunction handleResolutionMethods(targetFulfill, targetReject, value, resolver) {\n try {\n let v = resolver ? resolver(value) : value;\n if (targetFulfill)\n targetFulfill(v);\n }\n catch (ex) {\n if (targetReject)\n targetReject(ex);\n }\n}\nfunction handleDispatch(p, onFulfilled, onRejected) {\n if (p instanceof PromiseBase)\n p.thenThis(onFulfilled, onRejected);\n else\n p.then(onFulfilled, onRejected);\n}\nclass PromiseState extends DisposableBase_1.DisposableBase {\n constructor(_state, _result, _error) {\n super();\n this._state = _state;\n this._result = _result;\n this._error = _error;\n this._disposableObjectName = PROMISE_STATE;\n }\n _onDispose() {\n this._state = VOID0;\n this._result = VOID0;\n this._error = VOID0;\n }\n getState() {\n return this._state;\n }\n get state() {\n return this._state;\n }\n get isPending() {\n return this.getState() === Promise.State.Pending;\n }\n get isSettled() {\n return this.getState() != Promise.State.Pending;\n }\n get isFulfilled() {\n return this.getState() === Promise.State.Fulfilled;\n }\n get isRejected() {\n return this.getState() === Promise.State.Rejected;\n }\n getResult() {\n return this._result;\n }\n get result() {\n this.throwIfDisposed();\n return this.getResult();\n }\n getError() {\n return this._error;\n }\n get error() {\n this.throwIfDisposed();\n return this.getError();\n }\n}\nexports.PromiseState = PromiseState;\nclass PromiseBase extends PromiseState {\n constructor() {\n super(Promise.State.Pending);\n this._disposableObjectName = PROMISE;\n }\n then(onFulfilled, onRejected) {\n return Promise.pending((resolve, reject) => {\n this.thenThis(result => handleResolutionMethods(resolve, reject, result, onFulfilled), error => onRejected\n ? handleResolutionMethods(resolve, null, error, onRejected)\n : reject(error));\n });\n }\n delayFromNow(milliseconds = 0) {\n this.throwIfDisposed();\n var p = Promise.pending();\n defer_1.defer(pass(this, p), milliseconds);\n return p;\n }\n delayAfterResolve(milliseconds = 0) {\n this.throwIfDisposed();\n var p = Promise.pending();\n passDelayed(this, p, milliseconds);\n return p;\n }\n 'catch'(onRejected) {\n this.throwIfDisposed();\n return this.then(VOID0, onRejected);\n }\n 'finally'(fin) {\n this.throwIfDisposed();\n return this.then(fin, fin);\n }\n finallyThis(fin) {\n this.throwIfDisposed();\n var f = () => deferImmediate_1.deferImmediate(fin);\n this.thenThis(f, f);\n return this;\n }\n}\nexports.PromiseBase = PromiseBase;\nclass Resolvable extends PromiseBase {\n thenSynchronous(onFulfilled, onRejected) {\n this.throwIfDisposed();\n try {\n switch (this.state) {\n case Promise.State.Fulfilled:\n return onFulfilled\n ? resolve(this._result, onFulfilled, Promise.resolve)\n : this;\n case Promise.State.Rejected:\n return onRejected\n ? resolve(this._error, onRejected, Promise.resolve)\n : this;\n }\n }\n catch (ex) {\n return new Rejected(ex);\n }\n throw new Error(\"Invalid state for a resolved promise.\");\n }\n thenThis(onFulfilled, onRejected) {\n this.throwIfDisposed();\n switch (this.state) {\n case Promise.State.Fulfilled:\n if (onFulfilled)\n onFulfilled(this._result);\n break;\n case Promise.State.Rejected:\n if (onRejected)\n onRejected(this._error);\n break;\n }\n return this;\n }\n}\nexports.Resolvable = Resolvable;\nclass Resolved extends Resolvable {\n constructor(state, result, error) {\n super();\n this._result = result;\n this._error = error;\n this._state = state;\n }\n}\nexports.Resolved = Resolved;\nclass Fulfilled extends Resolved {\n constructor(value) {\n super(Promise.State.Fulfilled, value);\n }\n}\nclass Rejected extends Resolved {\n constructor(error) {\n super(Promise.State.Rejected, VOID0, error);\n }\n}\nclass PromiseWrapper extends Resolvable {\n constructor(_target) {\n super();\n this._target = _target;\n if (!_target)\n throw new ArgumentNullException_1.ArgumentNullException(TARGET);\n if (!isPromise(_target))\n throw new ArgumentException_1.ArgumentException(TARGET, \"Must be a promise-like object.\");\n _target.then(v => {\n this._state = Promise.State.Fulfilled;\n this._result = v;\n this._error = VOID0;\n this._target = VOID0;\n }, e => {\n this._state = Promise.State.Rejected;\n this._error = e;\n this._target = VOID0;\n });\n }\n thenSynchronous(onFulfilled, onRejected) {\n this.throwIfDisposed();\n var t = this._target;\n if (!t)\n return super.thenSynchronous(onFulfilled, onRejected);\n var p = Promise.pending();\n handleDispatch(t, result => handleResolution(p, result, onFulfilled), error => onRejected ? handleResolution(p, error, onRejected) : p.reject(error));\n return p;\n }\n thenThis(onFulfilled, onRejected) {\n this.throwIfDisposed();\n var t = this._target;\n if (!t)\n return super.thenThis(onFulfilled, onRejected);\n handleDispatch(t, onFulfilled, onRejected);\n return this;\n }\n _onDispose() {\n super._onDispose();\n this._target = VOID0;\n }\n}\nclass Promise extends Resolvable {\n constructor(resolver) {\n super();\n if (resolver)\n this.resolveUsing(resolver);\n }\n thenSynchronous(onFulfilled, onRejected) {\n this.throwIfDisposed();\n if (this._state)\n return super.thenSynchronous(onFulfilled, onRejected);\n var p = new Promise();\n (this._waiting || (this._waiting = []))\n .push(pools.PromiseCallbacks.init(onFulfilled, onRejected, p));\n return p;\n }\n thenThis(onFulfilled, onRejected) {\n this.throwIfDisposed();\n if (this._state)\n return super.thenThis(onFulfilled, onRejected);\n (this._waiting || (this._waiting = []))\n .push(pools.PromiseCallbacks.init(onFulfilled, onRejected));\n return this;\n }\n _onDispose() {\n super._onDispose();\n this._resolvedCalled = VOID0;\n }\n resolveUsing(resolver, throwIfSettled = false) {\n if (!resolver)\n throw new ArgumentNullException_1.ArgumentNullException(\"resolver\");\n if (this._resolvedCalled)\n throw new InvalidOperationException_1.InvalidOperationException(\".resolve() already called.\");\n if (this.state)\n throw new InvalidOperationException_1.InvalidOperationException(\"Already resolved: \" + Promise.State[this.state]);\n this._resolvedCalled = true;\n var rejectHandler = (reason) => {\n this._resolvedCalled = false;\n this.reject(reason);\n };\n var fulfillHandler = (v) => {\n this._resolvedCalled = false;\n this.resolve(v);\n };\n deferImmediate_1.deferImmediate(() => {\n resolver(v => {\n if (v == this)\n throw new InvalidOperationException_1.InvalidOperationException(\"Cannot resolve a promise as itself.\");\n if (isPromise(v))\n handleDispatch(v, fulfillHandler, rejectHandler);\n else {\n fulfillHandler(v);\n }\n }, rejectHandler);\n });\n }\n resolve(result, throwIfSettled = false) {\n this.throwIfDisposed();\n if (result == this)\n throw new InvalidOperationException_1.InvalidOperationException(\"Cannot resolve a promise as itself.\");\n if (this._state) {\n if (!throwIfSettled || this._state == Promise.State.Fulfilled && this._result === result)\n return;\n throw new InvalidOperationException_1.InvalidOperationException(\"Changing the fulfilled state/value of a promise is not supported.\");\n }\n if (this._resolvedCalled) {\n if (throwIfSettled)\n throw new InvalidOperationException_1.InvalidOperationException(\".resolve() already called.\");\n return;\n }\n this._state = Promise.State.Fulfilled;\n this._result = result;\n this._error = VOID0;\n var o = this._waiting;\n if (o) {\n this._waiting = VOID0;\n for (let c of o) {\n let { onFulfilled, promise } = c, p = promise;\n pools.PromiseCallbacks.recycle(c);\n handleResolution(p, result, onFulfilled);\n }\n o.length = 0;\n }\n }\n reject(error, throwIfSettled = false) {\n this.throwIfDisposed();\n if (this._state) {\n if (!throwIfSettled || this._state == Promise.State.Rejected && this._error === error)\n return;\n throw new InvalidOperationException_1.InvalidOperationException(\"Changing the rejected state/value of a promise is not supported.\");\n }\n if (this._resolvedCalled) {\n if (throwIfSettled)\n throw new InvalidOperationException_1.InvalidOperationException(\".resolve() already called.\");\n return;\n }\n this._state = Promise.State.Rejected;\n this._error = error;\n var o = this._waiting;\n if (o) {\n this._waiting = null;\n for (let c of o) {\n let { onRejected, promise } = c, p = promise;\n pools.PromiseCallbacks.recycle(c);\n if (onRejected)\n handleResolution(p, error, onRejected);\n else\n p.reject(error);\n }\n o.length = 0;\n }\n }\n}\nexports.Promise = Promise;\nclass LazyPromise extends Promise {\n constructor(_resolver) {\n super();\n this._resolver = _resolver;\n if (!_resolver)\n throw new ArgumentNullException_1.ArgumentNullException(\"resolver\");\n this._resolvedCalled = true;\n }\n _onDispose() {\n super._onDispose();\n this._resolver = VOID0;\n }\n _onThen() {\n var r = this._resolver;\n if (r) {\n this._resolver = VOID0;\n this._resolvedCalled = false;\n this.resolveUsing(r);\n }\n }\n thenSynchronous(onFulfilled, onRejected) {\n this._onThen();\n return super.thenSynchronous(onFulfilled, onRejected);\n }\n thenThis(onFulfilled, onRejected) {\n this._onThen();\n return super.thenThis(onFulfilled, onRejected);\n }\n}\nexports.LazyPromise = LazyPromise;\nvar pools;\n(function (pools) {\n var PromiseCallbacks;\n (function (PromiseCallbacks) {\n var pool;\n function getPool() {\n return pool\n || (pool = new ObjectPool_1.ObjectPool(40, factory, c => {\n c.onFulfilled = null;\n c.onRejected = null;\n c.promise = null;\n }));\n }\n function factory() {\n return {\n onFulfilled: null,\n onRejected: null,\n promise: null\n };\n }\n function init(onFulfilled, onRejected, promise) {\n var c = getPool().take();\n c.onFulfilled = onFulfilled;\n c.onRejected = onRejected;\n c.promise = promise;\n return c;\n }\n PromiseCallbacks.init = init;\n function recycle(c) {\n getPool().add(c);\n }\n PromiseCallbacks.recycle = recycle;\n })(PromiseCallbacks = pools.PromiseCallbacks || (pools.PromiseCallbacks = {}));\n})(pools || (pools = {}));\n(function (Promise) {\n (function (State) {\n State[State[\"Pending\"] = 0] = \"Pending\";\n State[State[\"Fulfilled\"] = 1] = \"Fulfilled\";\n State[State[\"Rejected\"] = -1] = \"Rejected\";\n })(Promise.State || (Promise.State = {}));\n var State = Promise.State;\n Object.freeze(State);\n function all(first, ...rest) {\n if (!first && !rest.length)\n throw new ArgumentNullException_1.ArgumentNullException(\"promises\");\n var promises = (Array.isArray(first) ? first : [first]).concat(rest);\n if (!promises.length || promises.every(v => !v))\n return new Fulfilled(promises);\n return pending((resolve, reject) => {\n let checkedAll = false;\n let result = [];\n let len = promises.length;\n result.length = len;\n let remaining = new Set_1.Set(promises.map((v, i) => i));\n let cleanup = () => {\n reject = null;\n resolve = null;\n promises.length = 0;\n promises = null;\n remaining.dispose();\n remaining = null;\n };\n let checkIfShouldResolve = () => {\n let r = resolve;\n if (r && !remaining.count) {\n cleanup();\n r(result);\n }\n };\n let onFulfill = (v, i) => {\n if (resolve) {\n result[i] = v;\n remaining.remove(i);\n checkIfShouldResolve();\n }\n };\n let onReject = (e) => {\n let r = reject;\n if (r) {\n cleanup();\n r(e);\n }\n };\n for (let i = 0; remaining && i < len; i++) {\n let p = promises[i];\n if (p)\n p.then(v => onFulfill(v, i), onReject);\n else\n remaining.remove(i);\n checkIfShouldResolve();\n }\n });\n }\n Promise.all = all;\n function race(first, ...rest) {\n var promises = first && (Array.isArray(first) ? first : [first]).concat(rest);\n if (!promises || !promises.length || !(promises = promises.filter(v => v != null)).length)\n throw new ArgumentException_1.ArgumentException(\"Nothing to wait for.\");\n var len = promises.length;\n if (len == 1)\n return wrap(promises[0]);\n for (let i = 0; i < len; i++) {\n var p = promises[i];\n if (p instanceof PromiseBase && p.isSettled)\n return p;\n }\n return pending((resolve, reject) => {\n let cleanup = () => {\n reject = null;\n resolve = null;\n promises.length = 0;\n promises = null;\n };\n let onResolve = (r, v) => {\n if (r) {\n cleanup();\n r(v);\n }\n };\n let onFulfill = (v) => onResolve(resolve, v);\n let onReject = (e) => onResolve(reject, e);\n for (let p of promises) {\n if (!resolve)\n break;\n p.then(onFulfill, onReject);\n }\n });\n }\n Promise.race = race;\n function resolve(value) {\n return isPromise(value) ? wrap(value) : new Fulfilled(value);\n }\n Promise.resolve = resolve;\n function reject(reason) {\n return new Rejected(reason);\n }\n Promise.reject = reject;\n function lazy(resolver) {\n return new LazyPromise(resolver);\n }\n Promise.lazy = lazy;\n function wrap(target) {\n if (!target)\n throw new ArgumentNullException_1.ArgumentNullException(TARGET);\n return target instanceof Promise ? this : new PromiseWrapper(target);\n }\n Promise.wrap = wrap;\n function createFrom(then) {\n if (!then)\n throw new ArgumentNullException_1.ArgumentNullException(THEN);\n return new PromiseWrapper({ then: then });\n }\n Promise.createFrom = createFrom;\n function pending(resolver) {\n return new Promise(resolver);\n }\n Promise.pending = pending;\n})(Promise = exports.Promise || (exports.Promise = {}));\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT\r\n * Although most of the following code is written from scratch, it is\r\n * heavily influenced by Q (https://github.com/kriskowal/q) and uses some of Q's spec.\r\n */\r\n\r\n/*\r\n * Note: The Promise herein does NOT defer by default.\r\n * If you require a promise to defer its result then use the .defer() or .delay(ms) methods.\r\n * The API attempts to follow ES6 style promises.\r\n */\r\n\r\nimport Type from \"../Types\";\r\nimport {Closure} from \"../FunctionTypes\";\r\nimport {deferImmediate} from \"../Threading/deferImmediate\";\r\nimport {DisposableBase} from \"../Disposable/DisposableBase\";\r\nimport {InvalidOperationException} from \"../Exceptions/InvalidOperationException\";\r\nimport {ArgumentException} from \"../Exceptions/ArgumentException\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\nimport {ObjectPool} from \"../Disposable/ObjectPool\";\r\nimport {Set} from \"../Collections/Set\";\r\nimport {defer} from \"../Threading/defer\";\r\n\r\n\r\nconst VOID0:any = void 0, PROMISE = \"Promise\", PROMISE_STATE = PROMISE + \"State\", THEN = \"then\", TARGET = \"target\";\r\n\r\nfunction isPromise(value:any):value is PromiseLike\r\n{\r\n\treturn Type.hasMemberOfType(value, THEN, Type.FUNCTION);\r\n}\r\n\r\nfunction resolve(\r\n\tvalue:Promise.Resolution, resolver:(v:Promise.Resolution)=>any,\r\n\tpromiseFactory:(v:any)=>PromiseBase):PromiseBase\r\n{\r\n\tlet nextValue = resolver\r\n\t\t? resolver(value)\r\n\t\t: value;\r\n\r\n\treturn nextValue && isPromise(nextValue)\r\n\t\t? Promise.wrap(nextValue)\r\n\t\t: promiseFactory(nextValue);\r\n}\r\n\r\nfunction pass(source:PromiseBase, dest:Promise):Closure\r\n{\r\n\treturn ()=>\r\n\t{\r\n\t\tsource.thenThis(\r\n\t\t\tv=>\r\n\t\t\t{\r\n\t\t\t\tdest.resolve(v);\r\n\t\t\t},\r\n\t\t\te=>\r\n\t\t\t{\r\n\t\t\t\tdest.reject(e);\r\n\t\t\t});\r\n\t}\r\n}\r\n\r\nfunction passDelayed(source:PromiseBase, dest:Promise, ms:number):Closure\r\n{\r\n\treturn ()=>\r\n\t{\r\n\t\tsource.thenThis(\r\n\t\t\tv=>defer(()=>dest.resolve(v), ms),\r\n\t\t\te=>defer(()=>dest.reject(e), ms));\r\n\t}\r\n}\r\n\r\nfunction handleResolution(\r\n\tp:Promise,\r\n\tvalue:Promise.Resolution,\r\n\tresolver?:(v:Promise.Resolution)=>any):void\r\n{\r\n\ttry\r\n\t{\r\n\t\tlet v = resolver ? resolver(value) : value;\r\n\t\tif(p) p.resolve(v);\r\n\t}\r\n\tcatch(ex)\r\n\t{ p.reject(ex); }\r\n}\r\n\r\nfunction handleResolutionMethods(\r\n\ttargetFulfill:Promise.Fulfill,\r\n\ttargetReject:Promise.Reject,\r\n\tvalue:Promise.Resolution,\r\n\tresolver?:(v:Promise.Resolution)=>any):void\r\n{\r\n\ttry\r\n\t{\r\n\t\tlet v = resolver ? resolver(value) : value;\r\n\t\tif(targetFulfill) targetFulfill(v);\r\n\t}\r\n\tcatch(ex)\r\n\t{ if(targetReject) targetReject(ex); }\r\n}\r\n\r\nfunction handleDispatch(\r\n\tp:PromiseLike,\r\n\tonFulfilled:Promise.Fulfill,\r\n\tonRejected?:Promise.Reject):void\r\n{\r\n\tif(p instanceof PromiseBase)\r\n\t\tp.thenThis(onFulfilled, onRejected);\r\n\telse\r\n\t\tp.then(onFulfilled, onRejected);\r\n}\r\n\r\nexport class PromiseState\r\nextends DisposableBase\r\n{\r\n\r\n\tconstructor(\r\n\t\tprotected _state:Promise.State,\r\n\t\tprotected _result?:T,\r\n\t\tprotected _error?:any)\r\n\t{\r\n\t\tsuper();\r\n\t\tthis._disposableObjectName = PROMISE_STATE;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tthis._state = VOID0;\r\n\t\tthis._result = VOID0;\r\n\t\tthis._error = VOID0;\r\n\t}\r\n\r\n\tprotected getState():Promise.State\r\n\t{\r\n\t\treturn this._state;\r\n\t}\r\n\r\n\tget state():Promise.State\r\n\t{\r\n\t\treturn this._state;\r\n\t}\r\n\r\n\tget isPending():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Pending;\r\n\t}\r\n\r\n\tget isSettled():boolean\r\n\t{\r\n\t\treturn this.getState()!=Promise.State.Pending; // Will also include undefined==0 aka disposed!=resolved.\r\n\t}\r\n\r\n\tget isFulfilled():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Fulfilled;\r\n\t}\r\n\r\n\tget isRejected():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Rejected;\r\n\t}\r\n\r\n\t/*\r\n\t * Providing overrides allows for special defer or lazy sub classes.\r\n\t */\r\n\tprotected getResult():T\r\n\t{\r\n\t\treturn this._result;\r\n\t}\r\n\r\n\tget result():T\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.getResult();\r\n\t}\r\n\r\n\tprotected getError():any\r\n\t{\r\n\t\treturn this._error;\r\n\t}\r\n\r\n\tget error():any\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.getError();\r\n\t}\r\n\r\n}\r\n\r\nexport abstract class PromiseBase\r\nextends PromiseState implements PromiseLike\r\n{\r\n\tconstructor()\r\n\t{\r\n\t\tsuper(Promise.State.Pending);\r\n\t\tthis._disposableObjectName = PROMISE;\r\n\t}\r\n\r\n\t/**\r\n\t * Calls the respective handlers once the promise is resolved.\r\n\t * @param onFulfilled\r\n\t * @param onRejected\r\n\t */\r\n\tabstract thenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase;\r\n\r\n\t/**\r\n\t * Same as 'thenSynchronous' but does not return the result. Returns the current promise instead.\r\n\t * You may not need an additional promise result, and this will not create a new one.\r\n\t * Errors are not trapped.\r\n\t * @param onFulfilled\r\n\t * @param onRejected\r\n\t */\r\n\tabstract thenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase;\r\n\r\n\tthen(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\treturn Promise.pending((resolve, reject)=>\r\n\t\t{\r\n\t\t\tthis.thenThis(\r\n\t\t\t\tresult=>handleResolutionMethods(resolve, reject, result, onFulfilled),\r\n\t\t\t\terror=>onRejected\r\n\t\t\t\t\t? handleResolutionMethods(resolve, null, error, onRejected)\r\n\t\t\t\t\t: reject(error)\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from the time called before continuing.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayFromNow(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// TODO: need to figure out a way to not force a then call.\r\n\t\tvar p = Promise.pending();\r\n\t\tdefer(pass(this, p), milliseconds);\r\n\t\treturn p;\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from after this promise resolves.\r\n\t * If the promise is already resolved the delay will start from now.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayAfterResolve(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar p = Promise.pending();\r\n\t\tpassDelayed(this, p, milliseconds);\r\n\t\treturn p;\r\n\t}\r\n\r\n\t'catch'(onRejected:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.then(VOID0, onRejected)\r\n\t}\r\n\r\n\t'finally'(fin:()=>Promise.Resolution):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.then(fin, fin);\r\n\t}\r\n\r\n\tfinallyThis(fin:()=>void):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tvar f = ()=>deferImmediate(fin);\r\n\t\tthis.thenThis(f, f);\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n\r\nexport abstract class Resolvable extends PromiseBase\r\n{\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\ttry\r\n\t\t{\r\n\t\t\tswitch(this.state)\r\n\t\t\t{\r\n\t\t\t\tcase Promise.State.Fulfilled:\r\n\t\t\t\t\treturn onFulfilled\r\n\t\t\t\t\t\t? resolve(this._result, onFulfilled, Promise.resolve)\r\n\t\t\t\t\t\t: this; // Provided for catch cases.\r\n\t\t\t\tcase Promise.State.Rejected:\r\n\t\t\t\t\treturn onRejected\r\n\t\t\t\t\t\t? resolve(this._error, onRejected, Promise.resolve)\r\n\t\t\t\t\t\t: this;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\treturn new Rejected(ex);\r\n\t\t}\r\n\r\n\t\tthrow new Error(\"Invalid state for a resolved promise.\");\r\n\t}\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tswitch(this.state)\r\n\t\t{\r\n\t\t\tcase Promise.State.Fulfilled:\r\n\t\t\t\tif(onFulfilled) onFulfilled(this._result);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Promise.State.Rejected:\r\n\t\t\t\tif(onRejected) onRejected(this._error);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * The simplest usable version of a promise which returns synchronously the resolved state provided.\r\n */\r\nexport abstract class Resolved extends Resolvable\r\n{\r\n\tconstructor(state:Promise.State, result:T, error?:any)\r\n\t{\r\n\t\tsuper();\r\n\t\tthis._result = result;\r\n\t\tthis._error = error;\r\n\t\tthis._state = state;\r\n\t}\r\n\r\n\r\n}\r\n\r\n/**\r\n * A fulfilled Resolved. Provided for readability.\r\n */\r\nclass Fulfilled extends Resolved\r\n{\r\n\tconstructor(value?:T)\r\n\t{\r\n\t\tsuper(Promise.State.Fulfilled, value);\r\n\t}\r\n}\r\n\r\n/**\r\n * A rejected Resolved. Provided for readability.\r\n */\r\nclass Rejected extends Resolved\r\n{\r\n\tconstructor(error:any)\r\n\t{\r\n\t\tsuper(Promise.State.Rejected, VOID0, error);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Provided as a means for extending the interface of other PromiseLike objects.\r\n */\r\nclass PromiseWrapper extends Resolvable\r\n{\r\n\tconstructor(private _target:PromiseLike)\r\n\t{\r\n\t\tsuper();\r\n\r\n\t\tif(!_target)\r\n\t\t\tthrow new ArgumentNullException(TARGET);\r\n\r\n\t\tif(!isPromise(_target))\r\n\t\t\tthrow new ArgumentException(TARGET, \"Must be a promise-like object.\");\r\n\r\n\t\t_target.then(\r\n\t\t\tv=>\r\n\t\t\t{\r\n\t\t\t\tthis._state = Promise.State.Fulfilled;\r\n\t\t\t\tthis._result = v;\r\n\t\t\t\tthis._error = VOID0;\r\n\t\t\t\tthis._target = VOID0;\r\n\t\t\t},\r\n\t\t\te=>\r\n\t\t\t{\r\n\t\t\t\tthis._state = Promise.State.Rejected;\r\n\t\t\t\tthis._error = e;\r\n\t\t\t\tthis._target = VOID0;\r\n\t\t\t})\r\n\t}\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar t = this._target;\r\n\t\tif(!t) return super.thenSynchronous(onFulfilled, onRejected);\r\n\r\n\t\tvar p = Promise.pending();\r\n\t\thandleDispatch(t,\r\n\t\t\tresult=>handleResolution(p, result, onFulfilled),\r\n\t\t\terror=>onRejected ? handleResolution(p, error, onRejected) : p.reject(error));\r\n\t\treturn p;\r\n\t}\r\n\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar t = this._target;\r\n\t\tif(!t) return super.thenThis(onFulfilled, onRejected);\r\n\t\thandleDispatch(t, onFulfilled, onRejected);\r\n\t\treturn this;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._target = VOID0;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * This promise class that facilitates pending resolution.\r\n */\r\nexport class Promise extends Resolvable\r\n{\r\n\r\n\tprivate _waiting:IPromiseCallbacks[];\r\n\r\n\t/*\r\n\t * A note about deferring:\r\n\t * The caller can set resolveImmediate to true if they intend to initialize code that will end up being deferred itself.\r\n\t * This eliminates the extra defer that will occur internally.\r\n\t * But for the most part, resolveImmediate = false (the default) will ensure the constructor will not block.\r\n\t *\r\n\t * resolveUsing allows for the same ability but does not defer by default: allowing the caller to take on the work load.\r\n\t * If calling resolve or reject and a deferred response is desired, then use deferImmediate with a closure to do so.\r\n\t */\r\n\r\n\tconstructor(\r\n\t\tresolver?:Promise.Executor)\r\n\t{\r\n\t\tsuper();\r\n\r\n\t\tif(resolver) this.resolveUsing(resolver);\r\n\t}\r\n\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// Already fulfilled?\r\n\t\tif(this._state) return super.thenSynchronous(onFulfilled, onRejected);\r\n\r\n\t\tvar p = new Promise();\r\n\t\t(this._waiting || (this._waiting = []))\r\n\t\t\t.push(pools.PromiseCallbacks.init(onFulfilled, onRejected, p));\r\n\t\treturn p;\r\n\t}\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// Already fulfilled?\r\n\t\tif(this._state) return super.thenThis(onFulfilled, onRejected);\r\n\r\n\t\t(this._waiting || (this._waiting = []))\r\n\t\t\t.push(pools.PromiseCallbacks.init(onFulfilled, onRejected));\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\r\n\tprotected _onDispose()\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._resolvedCalled = VOID0;\r\n\t}\r\n\r\n\t// Protects against double calling.\r\n\tprotected _resolvedCalled:boolean;\r\n\r\n\tresolveUsing(\r\n\t\tresolver:Promise.Executor,\r\n\t\tthrowIfSettled:boolean = false)\r\n\t{\r\n\t\tif(!resolver)\r\n\t\t\tthrow new ArgumentNullException(\"resolver\");\r\n\t\tif(this._resolvedCalled)\r\n\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\tif(this.state)\r\n\t\t\tthrow new InvalidOperationException(\"Already resolved: \" + Promise.State[this.state]);\r\n\r\n\t\tthis._resolvedCalled = true;\r\n\r\n\t\tvar rejectHandler = (reason:any)=>\r\n\t\t{\r\n\t\t\tthis._resolvedCalled = false;\r\n\t\t\tthis.reject(reason);\r\n\t\t};\r\n\r\n\t\tvar fulfillHandler = (v:any)=>\r\n\t\t{\r\n\t\t\tthis._resolvedCalled = false;\r\n\t\t\tthis.resolve(v);\r\n\t\t};\r\n\r\n\t\t// In order to prevent blocking.\r\n\t\t// As much as we'd like to go synchronous here, it's just not how it's done.\r\n\t\tdeferImmediate(()=>\r\n\t\t{\r\n\t\t\tresolver(\r\n\t\t\t\tv=>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(v==this) throw new InvalidOperationException(\"Cannot resolve a promise as itself.\");\r\n\t\t\t\t\tif(isPromise(v)) // If the result is a promise, then it will defer downstream.\r\n\t\t\t\t\t\thandleDispatch(v, fulfillHandler, rejectHandler);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfulfillHandler(v);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t},\r\n\t\t\t\trejectHandler);\r\n\t\t});\r\n\r\n\r\n\t}\r\n\r\n\tresolve(result?:T, throwIfSettled:boolean = false):void\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tif(result==this)\r\n\t\t\tthrow new InvalidOperationException(\"Cannot resolve a promise as itself.\");\r\n\r\n\t\tif(this._state)\r\n\t\t{\r\n\t\t\t// Same value? Ignore...\r\n\t\t\tif(!throwIfSettled || this._state==Promise.State.Fulfilled && this._result===result) return;\r\n\t\t\tthrow new InvalidOperationException(\"Changing the fulfilled state/value of a promise is not supported.\");\r\n\t\t}\r\n\r\n\t\tif(this._resolvedCalled)\r\n\t\t{\r\n\t\t\tif(throwIfSettled)\r\n\t\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._state = Promise.State.Fulfilled;\r\n\r\n\t\tthis._result = result;\r\n\t\tthis._error = VOID0;\r\n\t\tvar o = this._waiting;\r\n\t\tif(o)\r\n\t\t{\r\n\t\t\tthis._waiting = VOID0;\r\n\t\t\tfor(let c of o)\r\n\t\t\t{\r\n\t\t\t\tlet {onFulfilled, promise} = c, p = (>promise);\r\n\t\t\t\tpools.PromiseCallbacks.recycle(c);\r\n\t\t\t\thandleResolution(p, result, onFulfilled);\r\n\t\t\t}\r\n\t\t\to.length = 0;\r\n\t\t}\r\n\t}\r\n\r\n\treject(error:any, throwIfSettled:boolean = false):void\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tif(this._state)\r\n\t\t{\r\n\t\t\t// Same value? Ignore...\r\n\t\t\tif(!throwIfSettled || this._state==Promise.State.Rejected && this._error===error) return;\r\n\t\t\tthrow new InvalidOperationException(\"Changing the rejected state/value of a promise is not supported.\");\r\n\t\t}\r\n\r\n\t\tif(this._resolvedCalled)\r\n\t\t{\r\n\t\t\tif(throwIfSettled)\r\n\t\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._state = Promise.State.Rejected;\r\n\r\n\t\tthis._error = error;\r\n\t\tvar o = this._waiting;\r\n\t\tif(o)\r\n\t\t{\r\n\t\t\tthis._waiting = null; // null = finished. undefined = hasn't started.\r\n\t\t\tfor(let c of o)\r\n\t\t\t{\r\n\t\t\t\tlet {onRejected, promise} = c, p = (>promise);\r\n\t\t\t\tpools.PromiseCallbacks.recycle(c);\r\n\t\t\t\tif(onRejected) handleResolution(p, error, onRejected);\r\n\t\t\t\telse p.reject(error);\r\n\t\t\t}\r\n\t\t\to.length = 0;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * A promise that waits for the first then to trigger the resolver.\r\n */\r\nexport class LazyPromise extends Promise\r\n{\r\n\r\n\tconstructor(private _resolver:Promise.Executor)\r\n\t{\r\n\t\tsuper();\r\n\t\tif(!_resolver) throw new ArgumentNullException(\"resolver\");\r\n\t\tthis._resolvedCalled = true;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._resolver = VOID0;\r\n\t}\r\n\r\n\tprivate _onThen():void\r\n\t{\r\n\t\tvar r = this._resolver;\r\n\t\tif(r)\r\n\t\t{\r\n\t\t\tthis._resolver = VOID0;\r\n\t\t\tthis._resolvedCalled = false;\r\n\t\t\tthis.resolveUsing(r);\r\n\t\t}\r\n\t}\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis._onThen();\r\n\t\treturn super.thenSynchronous(onFulfilled, onRejected);\r\n\t}\r\n\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis._onThen();\r\n\t\treturn super.thenThis(onFulfilled, onRejected);\r\n\t}\r\n}\r\n\r\nmodule pools\r\n{\r\n\r\n\t// export module pending\r\n\t// {\r\n\t//\r\n\t//\r\n\t// \tvar pool:ObjectPool>;\r\n\t//\r\n\t// \tfunction getPool()\r\n\t// \t{\r\n\t// \t\treturn pool || (pool = new ObjectPool>(40, factory, c=>c.dispose()));\r\n\t// \t}\r\n\t//\r\n\t// \tfunction factory():Promise\r\n\t// \t{\r\n\t// \t\treturn new Promise();\r\n\t// \t}\r\n\t//\r\n\t// \texport function get():Promise\r\n\t// \t{\r\n\t// \t\tvar p:any = getPool().take();\r\n\t// \t\tp.__wasDisposed = false;\r\n\t// \t\tp._state = Promise.State.Pending;\r\n\t// \t\treturn p;\r\n\t// \t}\r\n\t//\r\n\t// \texport function recycle(c:Promise):void\r\n\t// \t{\r\n\t// \t\tif(c) getPool().add(c);\r\n\t// \t}\r\n\t//\r\n\t// }\r\n\t//\r\n\t// export function recycle(c:PromiseBase):void\r\n\t// {\r\n\t// \tif(!c) return;\r\n\t// \tif(c instanceof Promise && c.constructor==Promise) pending.recycle(c);\r\n\t// \telse c.dispose();\r\n\t// }\r\n\r\n\r\n\texport module PromiseCallbacks\r\n\t{\r\n\r\n\t\tvar pool:ObjectPool>;\r\n\r\n\t\tfunction getPool()\r\n\t\t{\r\n\t\t\treturn pool\r\n\t\t\t\t|| (pool = new ObjectPool>(40, factory, c=>\r\n\t\t\t\t{\r\n\t\t\t\t\tc.onFulfilled = null;\r\n\t\t\t\t\tc.onRejected = null;\r\n\t\t\t\t\tc.promise = null;\r\n\t\t\t\t}));\r\n\t\t}\r\n\r\n\t\tfunction factory():IPromiseCallbacks\r\n\t\t{\r\n\t\t\treturn {\r\n\t\t\t\tonFulfilled: null,\r\n\t\t\t\tonRejected: null,\r\n\t\t\t\tpromise: null\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\texport function init(\r\n\t\t\tonFulfilled:Promise.Fulfill,\r\n\t\t\tonRejected?:Promise.Reject,\r\n\t\t\tpromise?:PromiseLike):IPromiseCallbacks\r\n\t\t{\r\n\r\n\t\t\tvar c = getPool().take();\r\n\t\t\tc.onFulfilled = onFulfilled;\r\n\t\t\tc.onRejected = onRejected;\r\n\t\t\tc.promise = promise;\r\n\t\t\treturn c;\r\n\t\t}\r\n\r\n\t\texport function recycle(c:IPromiseCallbacks):void\r\n\t\t{\r\n\t\t\tgetPool().add(c);\r\n\t\t}\r\n\t}\r\n\r\n\r\n}\r\n\r\n\r\nexport module Promise\r\n{\r\n\r\n\t/**\r\n\t * The state of a promise.\r\n\t * https://github.com/domenic/promises-unwrapping/blob/master/docs/states-and-fates.md\r\n\t * If a promise is disposed the value will be undefined which will also evaluate (promise.state)==false.\r\n\t */\r\n\texport enum State {\r\n\t\tPending = 0,\r\n\t\tFulfilled = 1,\r\n\t\tRejected = -1\r\n\t}\r\n\tObject.freeze(State);\r\n\r\n\texport type Resolution = PromiseLike|TResult|void;\r\n\r\n\texport interface Fulfill\r\n\t{\r\n\t\t(value:T):Resolution\r\n\t}\r\n\r\n\texport interface Reject\r\n\t{\r\n\t\t(err?:any):Resolution\r\n\t}\r\n\r\n\texport interface Then\r\n\t{\r\n\t\t(\r\n\t\t\tonFulfilled:Fulfill,\r\n\t\t\tonRejected?:Reject):PromiseBase\r\n\t}\r\n\r\n\texport interface Executor\r\n\t{\r\n\t\t(\r\n\t\t\tresolve:(value?:T | PromiseLike) => void,\r\n\t\t\treject:(reason?:any) => void):void;\r\n\t}\r\n\r\n\t// /**\r\n\t// * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved\r\n\t// * or rejected.\r\n\t// * @param values An array of Promises.\r\n\t// * @returns A new Promise.\r\n\t// */\r\n\t// // race(values: Iterable>): Promise;\r\n\r\n\r\n\t/**\r\n\t * Returns a promise that is fulfilled with an array containing the fulfillment value of each promise, or is rejected with the same rejection reason as the first promise to be rejected.\r\n\t */\r\n\texport function all(promises:PromiseLike[]):PromiseBase\r\n\texport function all(promise:PromiseLike, ...rest:PromiseLike[]):PromiseBase\r\n\texport function all(\r\n\t\tfirst:PromiseLike|PromiseLike[],\r\n\t\t...rest:PromiseLike[]):PromiseBase\r\n\t{\r\n\t\tif(!first && !rest.length) throw new ArgumentNullException(\"promises\");\r\n\t\tvar promises = (Array.isArray(first) ? first : [first]).concat(rest); // yay a copy!\r\n\t\tif(!promises.length || promises.every(v=>!v)) return new Fulfilled(promises); // it's a new empty, reuse it. :|\r\n\r\n\t\t// Eliminate deferred and take the parent since all .then calls happen on next cycle anyway.\r\n\t\treturn pending((resolve, reject)=>\r\n\t\t{\r\n\t\t\tlet checkedAll = false;\r\n\t\t\tlet result:any[] = [];\r\n\t\t\tlet len = promises.length;\r\n\t\t\tresult.length = len;\r\n\t\t\t// Using a set instead of -- a number is more reliable if just in case one of the provided promises resolves twice.\r\n\t\t\tlet remaining = new Set(promises.map((v, i)=>i)); // get all the indexes...\r\n\r\n\t\t\tlet cleanup = ()=>\r\n\t\t\t{\r\n\t\t\t\treject = null;\r\n\t\t\t\tresolve = null;\r\n\t\t\t\tpromises.length = 0;\r\n\t\t\t\tpromises = null;\r\n\t\t\t\tremaining.dispose();\r\n\t\t\t\tremaining = null;\r\n\t\t\t};\r\n\r\n\t\t\tlet checkIfShouldResolve = ()=>\r\n\t\t\t{\r\n\t\t\t\tlet r = resolve;\r\n\t\t\t\tif(r && !remaining.count)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(result);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onFulfill = (v:any, i:number)=>\r\n\t\t\t{\r\n\t\t\t\tif(resolve)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult[i] = v;\r\n\t\t\t\t\tremaining.remove(i);\r\n\t\t\t\t\tcheckIfShouldResolve();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onReject = (e?:any)=>\r\n\t\t\t{\r\n\t\t\t\tlet r = reject;\r\n\t\t\t\tif(r)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tfor(let i = 0; remaining && ionFulfill(v, i), onReject);\r\n\t\t\t\telse remaining.remove(i);\r\n\t\t\t\tcheckIfShouldResolve();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a promise for the first of an array of promises to become settled.\r\n\t */\r\n\texport function race(promises:PromiseLike[]):PromiseBase\r\n\texport function race(promise:PromiseLike, ...rest:PromiseLike[]):PromiseBase\r\n\texport function race(\r\n\t\tfirst:PromiseLike|PromiseLike[],\r\n\t\t...rest:PromiseLike[]):PromiseBase\r\n\t{\r\n\t\tvar promises = first && (Array.isArray(first) ? first : [first]).concat(rest); // yay a copy?\r\n\t\tif(!promises || !promises.length || !(promises = promises.filter(v=>v!=null)).length)\r\n\t\t\tthrow new ArgumentException(\"Nothing to wait for.\");\r\n\r\n\t\tvar len = promises.length;\r\n\r\n\t\t// Only one? Nothing to race.\r\n\t\tif(len==1) return wrap(promises[0]);\r\n\r\n\t\t// Look for already resolved promises and the first one wins.\r\n\t\tfor(let i = 0; i\r\n\t\t{\r\n\t\t\tlet cleanup = ()=>\r\n\t\t\t{\r\n\t\t\t\treject = null;\r\n\t\t\t\tresolve = null;\r\n\t\t\t\tpromises.length = 0;\r\n\t\t\t\tpromises = null;\r\n\t\t\t};\r\n\r\n\t\t\tlet onResolve = (r:(x:any)=>void, v:any)=>\r\n\t\t\t{\r\n\t\t\t\tif(r)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(v);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onFulfill = (v:any)=> onResolve(resolve, v);\r\n\t\t\tlet onReject = (e?:any)=> onResolve(reject, e);\r\n\r\n\t\t\tfor(let p of promises)\r\n\t\t\t{\r\n\t\t\t\tif(!resolve) break;\r\n\t\t\t\tp.then(onFulfill, onReject);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new resolved promise .\r\n\t * @returns A resolved promise.\r\n\t */\r\n\texport function resolve():PromiseBase\r\n\r\n\t/**\r\n\t * Creates a new resolved promise for the provided value.\r\n\t * @param value A value or promise.\r\n\t * @returns A promise whose internal state matches the provided promise.\r\n\t */\r\n\texport function resolve(value:T | PromiseLike):PromiseBase;\r\n\texport function resolve(value?:any):PromiseBase\r\n\t{\r\n\r\n\t\treturn isPromise(value) ? wrap(value) : new Fulfilled(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new rejected promise for the provided reason.\r\n\t * @param reason The reason the promise was rejected.\r\n\t * @returns A new rejected Promise.\r\n\t */\r\n\texport function reject(reason:T):PromiseBase\r\n\t{\r\n\t\treturn new Rejected(reason);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Provides a promise that will trigger the resolver at the first 'then' request.\r\n\t * @param resolver\r\n\t * @returns {Promise}\r\n\t */\r\n\texport function lazy(resolver:Promise.Executor):LazyPromise\r\n\t{\r\n\t\treturn new LazyPromise(resolver);\r\n\t}\r\n\r\n\t/**\r\n\t * Takes any Promise-Like object and ensures an extended version of it from this module.\r\n\t * @param target The Promise-Like object\r\n\t * @returns A new target that simply extends the target.\r\n\t */\r\n\texport function wrap(target:PromiseLike):PromiseBase\r\n\t{\r\n\t\tif(!target) throw new ArgumentNullException(TARGET);\r\n\t\treturn target instanceof Promise ? this : new PromiseWrapper(target);\r\n\t}\r\n\r\n\t/**\r\n\t * A function that acts like a 'then' method (aka then-able) can be extended by providing a function that takes an onFulfill and onReject.\r\n\t * @param then\r\n\t * @returns {PromiseWrapper}\r\n\t */\r\n\texport function createFrom(then:Then):PromiseBase\r\n\t{\r\n\t\tif(!then) throw new ArgumentNullException(THEN);\r\n\t\treturn new PromiseWrapper({then: then});\r\n\t}\r\n\r\n\t/**\r\n\t * Provides a promise that can be resolved later.\r\n\t * @returns {Promise}\r\n\t */\r\n\texport function pending(resolver?:Promise.Executor):Promise\r\n\t{\r\n\t\treturn new Promise(resolver);\r\n\t\t// var p = pools.pending.get();\r\n\t\t// if(resolver) p.resolveUsing(resolver);\r\n\t\t// return p;\r\n\t}\r\n\r\n\r\n}\r\n\r\n\r\ninterface IPromiseCallbacks\r\n{\r\n\tonFulfilled:Promise.Fulfill;\r\n\tonRejected:Promise.Reject;\r\n\tpromise?:PromiseLike;\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["System/Promises/Promise.js","System/Promises/Promise.ts"],"names":[],"mappings":"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","file":"System/Promises/Promise.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT\n * Although most of the following code is written from scratch, it is\n * heavily influenced by Q (https://github.com/kriskowal/q) and uses some of Q's spec.\n */\n\"use strict\";\nconst Types_1 = require(\"../Types\");\nconst deferImmediate_1 = require(\"../Threading/deferImmediate\");\nconst DisposableBase_1 = require(\"../Disposable/DisposableBase\");\nconst InvalidOperationException_1 = require(\"../Exceptions/InvalidOperationException\");\nconst ArgumentException_1 = require(\"../Exceptions/ArgumentException\");\nconst ArgumentNullException_1 = require(\"../Exceptions/ArgumentNullException\");\nconst ObjectPool_1 = require(\"../Disposable/ObjectPool\");\nconst Set_1 = require(\"../Collections/Set\");\nconst defer_1 = require(\"../Threading/defer\");\nconst VOID0 = void 0, PROMISE = \"Promise\", PROMISE_STATE = PROMISE + \"State\", THEN = \"then\", TARGET = \"target\";\nfunction isPromise(value) {\n return Types_1.default.hasMemberOfType(value, THEN, Types_1.default.FUNCTION);\n}\nfunction resolve(value, resolver, promiseFactory) {\n let nextValue = resolver\n ? resolver(value)\n : value;\n return nextValue && isPromise(nextValue)\n ? Promise.wrap(nextValue)\n : promiseFactory(nextValue);\n}\nfunction handleResolution(p, value, resolver) {\n try {\n let v = resolver ? resolver(value) : value;\n if (p)\n p.resolve(v);\n }\n catch (ex) {\n p.reject(ex);\n }\n}\nfunction handleResolutionMethods(targetFulfill, targetReject, value, resolver) {\n try {\n let v = resolver ? resolver(value) : value;\n if (targetFulfill)\n targetFulfill(v);\n }\n catch (ex) {\n if (targetReject)\n targetReject(ex);\n }\n}\nfunction handleDispatch(p, onFulfilled, onRejected) {\n if (p instanceof PromiseBase)\n p.thenThis(onFulfilled, onRejected);\n else\n p.then(onFulfilled, onRejected);\n}\nclass PromiseState extends DisposableBase_1.DisposableBase {\n constructor(_state, _result, _error) {\n super();\n this._state = _state;\n this._result = _result;\n this._error = _error;\n this._disposableObjectName = PROMISE_STATE;\n }\n _onDispose() {\n this._state = VOID0;\n this._result = VOID0;\n this._error = VOID0;\n }\n getState() {\n return this._state;\n }\n get state() {\n return this._state;\n }\n get isPending() {\n return this.getState() === Promise.State.Pending;\n }\n get isSettled() {\n return this.getState() != Promise.State.Pending;\n }\n get isFulfilled() {\n return this.getState() === Promise.State.Fulfilled;\n }\n get isRejected() {\n return this.getState() === Promise.State.Rejected;\n }\n getResult() {\n return this._result;\n }\n get result() {\n this.throwIfDisposed();\n return this.getResult();\n }\n getError() {\n return this._error;\n }\n get error() {\n this.throwIfDisposed();\n return this.getError();\n }\n}\nexports.PromiseState = PromiseState;\nclass PromiseBase extends PromiseState {\n constructor() {\n super(Promise.State.Pending);\n this._disposableObjectName = PROMISE;\n }\n then(onFulfilled, onRejected) {\n return new Promise((resolve, reject) => {\n this.thenThis(result => handleResolutionMethods(resolve, reject, result, onFulfilled), error => onRejected\n ? handleResolutionMethods(resolve, null, error, onRejected)\n : reject(error));\n });\n }\n delayFromNow(milliseconds = 0) {\n this.throwIfDisposed();\n return new Promise((resolve, reject) => {\n defer_1.defer(() => {\n this.thenThis(v => resolve(v), e => reject(e));\n }, milliseconds);\n }, true);\n }\n delayAfterResolve(milliseconds = 0) {\n this.throwIfDisposed();\n if (this.isSettled)\n return this.delayFromNow(milliseconds);\n return new Promise((resolve, reject) => {\n this.thenThis(v => defer_1.defer(() => resolve(v), milliseconds), e => defer_1.defer(() => reject(e), milliseconds));\n }, true);\n }\n 'catch'(onRejected) {\n this.throwIfDisposed();\n return this.then(VOID0, onRejected);\n }\n 'finally'(fin) {\n this.throwIfDisposed();\n return this.then(fin, fin);\n }\n finallyThis(fin) {\n this.throwIfDisposed();\n var f = () => deferImmediate_1.deferImmediate(fin);\n this.thenThis(f, f);\n return this;\n }\n}\nexports.PromiseBase = PromiseBase;\nclass Resolvable extends PromiseBase {\n thenSynchronous(onFulfilled, onRejected) {\n this.throwIfDisposed();\n try {\n switch (this.state) {\n case Promise.State.Fulfilled:\n return onFulfilled\n ? resolve(this._result, onFulfilled, Promise.resolve)\n : this;\n case Promise.State.Rejected:\n return onRejected\n ? resolve(this._error, onRejected, Promise.resolve)\n : this;\n }\n }\n catch (ex) {\n return new Rejected(ex);\n }\n throw new Error(\"Invalid state for a resolved promise.\");\n }\n thenThis(onFulfilled, onRejected) {\n this.throwIfDisposed();\n switch (this.state) {\n case Promise.State.Fulfilled:\n if (onFulfilled)\n onFulfilled(this._result);\n break;\n case Promise.State.Rejected:\n if (onRejected)\n onRejected(this._error);\n break;\n }\n return this;\n }\n}\nexports.Resolvable = Resolvable;\nclass Resolved extends Resolvable {\n constructor(state, result, error) {\n super();\n this._result = result;\n this._error = error;\n this._state = state;\n }\n}\nexports.Resolved = Resolved;\nclass Fulfilled extends Resolved {\n constructor(value) {\n super(Promise.State.Fulfilled, value);\n }\n}\nclass Rejected extends Resolved {\n constructor(error) {\n super(Promise.State.Rejected, VOID0, error);\n }\n}\nclass PromiseWrapper extends Resolvable {\n constructor(_target) {\n super();\n this._target = _target;\n if (!_target)\n throw new ArgumentNullException_1.ArgumentNullException(TARGET);\n if (!isPromise(_target))\n throw new ArgumentException_1.ArgumentException(TARGET, \"Must be a promise-like object.\");\n _target.then(v => {\n this._state = Promise.State.Fulfilled;\n this._result = v;\n this._error = VOID0;\n this._target = VOID0;\n }, e => {\n this._state = Promise.State.Rejected;\n this._error = e;\n this._target = VOID0;\n });\n }\n thenSynchronous(onFulfilled, onRejected) {\n this.throwIfDisposed();\n var t = this._target;\n if (!t)\n return super.thenSynchronous(onFulfilled, onRejected);\n return new Promise((resolve, reject) => {\n handleDispatch(t, result => handleResolutionMethods(resolve, reject, result, onFulfilled), error => onRejected\n ? handleResolutionMethods(resolve, null, error, onRejected)\n : reject(error));\n }, true);\n }\n thenThis(onFulfilled, onRejected) {\n this.throwIfDisposed();\n var t = this._target;\n if (!t)\n return super.thenThis(onFulfilled, onRejected);\n handleDispatch(t, onFulfilled, onRejected);\n return this;\n }\n _onDispose() {\n super._onDispose();\n this._target = VOID0;\n }\n}\nclass Promise extends Resolvable {\n constructor(resolver, forceSynchronous = false) {\n super();\n if (resolver)\n this.resolveUsing(resolver, forceSynchronous);\n }\n thenSynchronous(onFulfilled, onRejected) {\n this.throwIfDisposed();\n if (this._state)\n return super.thenSynchronous(onFulfilled, onRejected);\n var p = new Promise();\n (this._waiting || (this._waiting = []))\n .push(pools.PromiseCallbacks.init(onFulfilled, onRejected, p));\n return p;\n }\n thenThis(onFulfilled, onRejected) {\n this.throwIfDisposed();\n if (this._state)\n return super.thenThis(onFulfilled, onRejected);\n (this._waiting || (this._waiting = []))\n .push(pools.PromiseCallbacks.init(onFulfilled, onRejected));\n return this;\n }\n _onDispose() {\n super._onDispose();\n this._resolvedCalled = VOID0;\n }\n resolveUsing(resolver, forceSynchronous = false, throwIfSettled = false) {\n if (!resolver)\n throw new ArgumentNullException_1.ArgumentNullException(\"resolver\");\n if (this._resolvedCalled)\n throw new InvalidOperationException_1.InvalidOperationException(\".resolve() already called.\");\n if (this.state)\n throw new InvalidOperationException_1.InvalidOperationException(\"Already resolved: \" + Promise.State[this.state]);\n this._resolvedCalled = true;\n var state = 0;\n var rejectHandler = (reason) => {\n if (state) {\n console.warn(state == -1 ? \"Rejection called multiple times\" : \"Rejection called after fulfilled.\");\n }\n else {\n state = -1;\n this._resolvedCalled = false;\n this.reject(reason);\n }\n };\n var fulfillHandler = (v) => {\n if (state) {\n console.warn(state == 1 ? \"Fulfill called multiple times\" : \"Fulfill called after rejection.\");\n }\n else {\n state = 1;\n this._resolvedCalled = false;\n this.resolve(v);\n }\n };\n var r = () => resolver(v => {\n if (v == this)\n throw new InvalidOperationException_1.InvalidOperationException(\"Cannot resolve a promise as itself.\");\n if (isPromise(v))\n handleDispatch(v, fulfillHandler, rejectHandler);\n else {\n fulfillHandler(v);\n }\n }, rejectHandler);\n if (forceSynchronous)\n r();\n else\n deferImmediate_1.deferImmediate(r);\n }\n resolve(result, throwIfSettled = false) {\n this.throwIfDisposed();\n if (result == this)\n throw new InvalidOperationException_1.InvalidOperationException(\"Cannot resolve a promise as itself.\");\n if (this._state) {\n if (!throwIfSettled || this._state == Promise.State.Fulfilled && this._result === result)\n return;\n throw new InvalidOperationException_1.InvalidOperationException(\"Changing the fulfilled state/value of a promise is not supported.\");\n }\n if (this._resolvedCalled) {\n if (throwIfSettled)\n throw new InvalidOperationException_1.InvalidOperationException(\".resolve() already called.\");\n return;\n }\n this._state = Promise.State.Fulfilled;\n this._result = result;\n this._error = VOID0;\n var o = this._waiting;\n if (o) {\n this._waiting = VOID0;\n for (let c of o) {\n let { onFulfilled, promise } = c, p = promise;\n pools.PromiseCallbacks.recycle(c);\n handleResolution(p, result, onFulfilled);\n }\n o.length = 0;\n }\n }\n reject(error, throwIfSettled = false) {\n this.throwIfDisposed();\n if (this._state) {\n if (!throwIfSettled || this._state == Promise.State.Rejected && this._error === error)\n return;\n throw new InvalidOperationException_1.InvalidOperationException(\"Changing the rejected state/value of a promise is not supported.\");\n }\n if (this._resolvedCalled) {\n if (throwIfSettled)\n throw new InvalidOperationException_1.InvalidOperationException(\".resolve() already called.\");\n return;\n }\n this._state = Promise.State.Rejected;\n this._error = error;\n var o = this._waiting;\n if (o) {\n this._waiting = null;\n for (let c of o) {\n let { onRejected, promise } = c, p = promise;\n pools.PromiseCallbacks.recycle(c);\n if (onRejected)\n handleResolution(p, error, onRejected);\n else\n p.reject(error);\n }\n o.length = 0;\n }\n }\n}\nexports.Promise = Promise;\nvar pools;\n(function (pools) {\n var PromiseCallbacks;\n (function (PromiseCallbacks) {\n var pool;\n function getPool() {\n return pool\n || (pool = new ObjectPool_1.ObjectPool(40, factory, c => {\n c.onFulfilled = null;\n c.onRejected = null;\n c.promise = null;\n }));\n }\n function factory() {\n return {\n onFulfilled: null,\n onRejected: null,\n promise: null\n };\n }\n function init(onFulfilled, onRejected, promise) {\n var c = getPool().take();\n c.onFulfilled = onFulfilled;\n c.onRejected = onRejected;\n c.promise = promise;\n return c;\n }\n PromiseCallbacks.init = init;\n function recycle(c) {\n getPool().add(c);\n }\n PromiseCallbacks.recycle = recycle;\n })(PromiseCallbacks = pools.PromiseCallbacks || (pools.PromiseCallbacks = {}));\n})(pools || (pools = {}));\n(function (Promise) {\n (function (State) {\n State[State[\"Pending\"] = 0] = \"Pending\";\n State[State[\"Fulfilled\"] = 1] = \"Fulfilled\";\n State[State[\"Rejected\"] = -1] = \"Rejected\";\n })(Promise.State || (Promise.State = {}));\n var State = Promise.State;\n Object.freeze(State);\n function all(first, ...rest) {\n if (!first && !rest.length)\n throw new ArgumentNullException_1.ArgumentNullException(\"promises\");\n var promises = (Array.isArray(first) ? first : [first]).concat(rest);\n if (!promises.length || promises.every(v => !v))\n return new Fulfilled(promises);\n return new Promise((resolve, reject) => {\n let checkedAll = false;\n let result = [];\n let len = promises.length;\n result.length = len;\n let remaining = new Set_1.Set(promises.map((v, i) => i));\n let cleanup = () => {\n reject = null;\n resolve = null;\n promises.length = 0;\n promises = null;\n remaining.dispose();\n remaining = null;\n };\n let checkIfShouldResolve = () => {\n let r = resolve;\n if (r && !remaining.count) {\n cleanup();\n r(result);\n }\n };\n let onFulfill = (v, i) => {\n if (resolve) {\n result[i] = v;\n remaining.remove(i);\n checkIfShouldResolve();\n }\n };\n let onReject = (e) => {\n let r = reject;\n if (r) {\n cleanup();\n r(e);\n }\n };\n for (let i = 0; remaining && i < len; i++) {\n let p = promises[i];\n if (p)\n p.then(v => onFulfill(v, i), onReject);\n else\n remaining.remove(i);\n checkIfShouldResolve();\n }\n });\n }\n Promise.all = all;\n function race(first, ...rest) {\n var promises = first && (Array.isArray(first) ? first : [first]).concat(rest);\n if (!promises || !promises.length || !(promises = promises.filter(v => v != null)).length)\n throw new ArgumentException_1.ArgumentException(\"Nothing to wait for.\");\n var len = promises.length;\n if (len == 1)\n return wrap(promises[0]);\n for (let i = 0; i < len; i++) {\n var p = promises[i];\n if (p instanceof PromiseBase && p.isSettled)\n return p;\n }\n return new Promise((resolve, reject) => {\n let cleanup = () => {\n reject = null;\n resolve = null;\n promises.length = 0;\n promises = null;\n };\n let onResolve = (r, v) => {\n if (r) {\n cleanup();\n r(v);\n }\n };\n let onFulfill = (v) => onResolve(resolve, v);\n let onReject = (e) => onResolve(reject, e);\n for (let p of promises) {\n if (!resolve)\n break;\n p.then(onFulfill, onReject);\n }\n });\n }\n Promise.race = race;\n function resolve(value) {\n return isPromise(value) ? wrap(value) : new Fulfilled(value);\n }\n Promise.resolve = resolve;\n function reject(reason) {\n return new Rejected(reason);\n }\n Promise.reject = reject;\n function wrap(target) {\n if (!target)\n throw new ArgumentNullException_1.ArgumentNullException(TARGET);\n return target instanceof Promise ? this : new PromiseWrapper(target);\n }\n Promise.wrap = wrap;\n function createFrom(then) {\n if (!then)\n throw new ArgumentNullException_1.ArgumentNullException(THEN);\n return new PromiseWrapper({ then: then });\n }\n Promise.createFrom = createFrom;\n})(Promise = exports.Promise || (exports.Promise = {}));\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT\r\n * Although most of the following code is written from scratch, it is\r\n * heavily influenced by Q (https://github.com/kriskowal/q) and uses some of Q's spec.\r\n */\r\n\r\n/*\r\n * Note: The Promise herein does NOT defer by default.\r\n * If you require a promise to defer its result then use the .defer() or .delay(ms) methods.\r\n * The API attempts to follow ES6 style promises.\r\n */\r\n\r\nimport Type from \"../Types\";\r\nimport {deferImmediate} from \"../Threading/deferImmediate\";\r\nimport {DisposableBase} from \"../Disposable/DisposableBase\";\r\nimport {InvalidOperationException} from \"../Exceptions/InvalidOperationException\";\r\nimport {ArgumentException} from \"../Exceptions/ArgumentException\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\nimport {ObjectPool} from \"../Disposable/ObjectPool\";\r\nimport {Set} from \"../Collections/Set\";\r\nimport {defer} from \"../Threading/defer\";\r\n\r\n\r\nconst VOID0:any = void 0, PROMISE = \"Promise\", PROMISE_STATE = PROMISE + \"State\", THEN = \"then\", TARGET = \"target\";\r\n\r\nfunction isPromise(value:any):value is PromiseLike\r\n{\r\n\treturn Type.hasMemberOfType(value, THEN, Type.FUNCTION);\r\n}\r\n\r\nfunction resolve(\r\n\tvalue:Promise.Resolution, resolver:(v:Promise.Resolution)=>any,\r\n\tpromiseFactory:(v:any)=>PromiseBase):PromiseBase\r\n{\r\n\tlet nextValue = resolver\r\n\t\t? resolver(value)\r\n\t\t: value;\r\n\r\n\treturn nextValue && isPromise(nextValue)\r\n\t\t? Promise.wrap(nextValue)\r\n\t\t: promiseFactory(nextValue);\r\n}\r\n\r\nfunction handleResolution(\r\n\tp:Promise,\r\n\tvalue:Promise.Resolution,\r\n\tresolver?:(v:Promise.Resolution)=>any):void\r\n{\r\n\ttry\r\n\t{\r\n\t\tlet v = resolver ? resolver(value) : value;\r\n\t\tif(p) p.resolve(v);\r\n\t}\r\n\tcatch(ex)\r\n\t{ p.reject(ex); }\r\n}\r\n\r\nfunction handleResolutionMethods(\r\n\ttargetFulfill:Promise.Fulfill,\r\n\ttargetReject:Promise.Reject,\r\n\tvalue:Promise.Resolution,\r\n\tresolver?:(v:Promise.Resolution)=>any):void\r\n{\r\n\ttry\r\n\t{\r\n\t\tlet v = resolver ? resolver(value) : value;\r\n\t\tif(targetFulfill) targetFulfill(v);\r\n\t}\r\n\tcatch(ex)\r\n\t{ if(targetReject) targetReject(ex); }\r\n}\r\n\r\nfunction handleDispatch(\r\n\tp:PromiseLike,\r\n\tonFulfilled:Promise.Fulfill,\r\n\tonRejected?:Promise.Reject):void\r\n{\r\n\tif(p instanceof PromiseBase)\r\n\t\tp.thenThis(onFulfilled, onRejected);\r\n\telse\r\n\t\tp.then(onFulfilled, onRejected);\r\n}\r\n\r\nexport class PromiseState\r\nextends DisposableBase\r\n{\r\n\r\n\tconstructor(\r\n\t\tprotected _state:Promise.State,\r\n\t\tprotected _result?:T,\r\n\t\tprotected _error?:any)\r\n\t{\r\n\t\tsuper();\r\n\t\tthis._disposableObjectName = PROMISE_STATE;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tthis._state = VOID0;\r\n\t\tthis._result = VOID0;\r\n\t\tthis._error = VOID0;\r\n\t}\r\n\r\n\tprotected getState():Promise.State\r\n\t{\r\n\t\treturn this._state;\r\n\t}\r\n\r\n\tget state():Promise.State\r\n\t{\r\n\t\treturn this._state;\r\n\t}\r\n\r\n\tget isPending():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Pending;\r\n\t}\r\n\r\n\tget isSettled():boolean\r\n\t{\r\n\t\treturn this.getState()!=Promise.State.Pending; // Will also include undefined==0 aka disposed!=resolved.\r\n\t}\r\n\r\n\tget isFulfilled():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Fulfilled;\r\n\t}\r\n\r\n\tget isRejected():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Rejected;\r\n\t}\r\n\r\n\t/*\r\n\t * Providing overrides allows for special defer or lazy sub classes.\r\n\t */\r\n\tprotected getResult():T\r\n\t{\r\n\t\treturn this._result;\r\n\t}\r\n\r\n\tget result():T\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.getResult();\r\n\t}\r\n\r\n\tprotected getError():any\r\n\t{\r\n\t\treturn this._error;\r\n\t}\r\n\r\n\tget error():any\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.getError();\r\n\t}\r\n\r\n}\r\n\r\nexport abstract class PromiseBase\r\nextends PromiseState implements PromiseLike\r\n{\r\n\tconstructor()\r\n\t{\r\n\t\tsuper(Promise.State.Pending);\r\n\t\tthis._disposableObjectName = PROMISE;\r\n\t}\r\n\r\n\t/**\r\n\t * Calls the respective handlers once the promise is resolved.\r\n\t * @param onFulfilled\r\n\t * @param onRejected\r\n\t */\r\n\tabstract thenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase;\r\n\r\n\t/**\r\n\t * Same as 'thenSynchronous' but does not return the result. Returns the current promise instead.\r\n\t * You may not need an additional promise result, and this will not create a new one.\r\n\t * Errors are not trapped.\r\n\t * @param onFulfilled\r\n\t * @param onRejected\r\n\t */\r\n\tabstract thenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase;\r\n\r\n\r\n\tthen(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\treturn new Promise((resolve, reject)=>\r\n\t\t{\r\n\t\t\tthis.thenThis(\r\n\t\t\t\tresult=>handleResolutionMethods(resolve, reject, result, onFulfilled),\r\n\t\t\t\terror=>onRejected\r\n\t\t\t\t\t? handleResolutionMethods(resolve, null, error, onRejected)\r\n\t\t\t\t\t: reject(error)\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from the time called before continuing.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayFromNow(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\treturn new Promise(\r\n\t\t\t(resolve, reject)=>\r\n\t\t\t{\r\n\t\t\t\tdefer(()=>\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.thenThis(\r\n\t\t\t\t\t\tv=> resolve(v),\r\n\t\t\t\t\t\te=> reject(e));\r\n\t\t\t\t}, milliseconds)\r\n\t\t\t},\r\n\t\t\ttrue // Since the resolve/reject is deferred.\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from after this promise resolves.\r\n\t * If the promise is already resolved, the delay will start from now.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayAfterResolve(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tif(this.isSettled) return this.delayFromNow(milliseconds);\r\n\r\n\t\treturn new Promise(\r\n\t\t\t(resolve, reject)=>\r\n\t\t\t{\r\n\t\t\t\tthis.thenThis(\r\n\t\t\t\t\tv=>defer(()=>resolve(v), milliseconds),\r\n\t\t\t\t\te=>defer(()=>reject(e), milliseconds))\r\n\t\t\t},\r\n\t\t\ttrue // Since the resolve/reject is deferred.\r\n\t\t);\r\n\t}\r\n\r\n\t'catch'(onRejected:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.then(VOID0, onRejected)\r\n\t}\r\n\r\n\t'finally'(fin:()=>Promise.Resolution):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.then(fin, fin);\r\n\t}\r\n\r\n\tfinallyThis(fin:()=>void):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tvar f = ()=>deferImmediate(fin);\r\n\t\tthis.thenThis(f, f);\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n\r\nexport abstract class Resolvable extends PromiseBase\r\n{\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\ttry\r\n\t\t{\r\n\t\t\tswitch(this.state)\r\n\t\t\t{\r\n\t\t\t\tcase Promise.State.Fulfilled:\r\n\t\t\t\t\treturn onFulfilled\r\n\t\t\t\t\t\t? resolve(this._result, onFulfilled, Promise.resolve)\r\n\t\t\t\t\t\t: this; // Provided for catch cases.\r\n\t\t\t\tcase Promise.State.Rejected:\r\n\t\t\t\t\treturn onRejected\r\n\t\t\t\t\t\t? resolve(this._error, onRejected, Promise.resolve)\r\n\t\t\t\t\t\t: this;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\treturn new Rejected(ex);\r\n\t\t}\r\n\r\n\t\tthrow new Error(\"Invalid state for a resolved promise.\");\r\n\t}\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tswitch(this.state)\r\n\t\t{\r\n\t\t\tcase Promise.State.Fulfilled:\r\n\t\t\t\tif(onFulfilled) onFulfilled(this._result);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Promise.State.Rejected:\r\n\t\t\t\tif(onRejected) onRejected(this._error);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * The simplest usable version of a promise which returns synchronously the resolved state provided.\r\n */\r\nexport abstract class Resolved extends Resolvable\r\n{\r\n\tconstructor(state:Promise.State, result:T, error?:any)\r\n\t{\r\n\t\tsuper();\r\n\t\tthis._result = result;\r\n\t\tthis._error = error;\r\n\t\tthis._state = state;\r\n\t}\r\n\r\n\r\n}\r\n\r\n/**\r\n * A fulfilled Resolved. Provided for readability.\r\n */\r\nclass Fulfilled extends Resolved\r\n{\r\n\tconstructor(value?:T)\r\n\t{\r\n\t\tsuper(Promise.State.Fulfilled, value);\r\n\t}\r\n}\r\n\r\n/**\r\n * A rejected Resolved. Provided for readability.\r\n */\r\nclass Rejected extends Resolved\r\n{\r\n\tconstructor(error:any)\r\n\t{\r\n\t\tsuper(Promise.State.Rejected, VOID0, error);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Provided as a means for extending the interface of other PromiseLike objects.\r\n */\r\nclass PromiseWrapper extends Resolvable\r\n{\r\n\tconstructor(private _target:PromiseLike)\r\n\t{\r\n\t\tsuper();\r\n\r\n\t\tif(!_target)\r\n\t\t\tthrow new ArgumentNullException(TARGET);\r\n\r\n\t\tif(!isPromise(_target))\r\n\t\t\tthrow new ArgumentException(TARGET, \"Must be a promise-like object.\");\r\n\r\n\t\t_target.then(\r\n\t\t\tv=>\r\n\t\t\t{\r\n\t\t\t\tthis._state = Promise.State.Fulfilled;\r\n\t\t\t\tthis._result = v;\r\n\t\t\t\tthis._error = VOID0;\r\n\t\t\t\tthis._target = VOID0;\r\n\t\t\t},\r\n\t\t\te=>\r\n\t\t\t{\r\n\t\t\t\tthis._state = Promise.State.Rejected;\r\n\t\t\t\tthis._error = e;\r\n\t\t\t\tthis._target = VOID0;\r\n\t\t\t})\r\n\t}\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar t = this._target;\r\n\t\tif(!t) return super.thenSynchronous(onFulfilled, onRejected);\r\n\r\n\t\treturn new Promise((resolve, reject)=>\r\n\t\t{\r\n\t\t\thandleDispatch(t,\r\n\t\t\t\tresult=>handleResolutionMethods(resolve, reject, result, onFulfilled),\r\n\t\t\t\terror=>onRejected\r\n\t\t\t\t\t? handleResolutionMethods(resolve, null, error, onRejected)\r\n\t\t\t\t\t: reject(error)\r\n\t\t\t);\r\n\t\t}, true);\r\n\t}\r\n\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar t = this._target;\r\n\t\tif(!t) return super.thenThis(onFulfilled, onRejected);\r\n\t\thandleDispatch(t, onFulfilled, onRejected);\r\n\t\treturn this;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._target = VOID0;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * This promise class that facilitates pending resolution.\r\n */\r\nexport class Promise extends Resolvable\r\n{\r\n\r\n\tprivate _waiting:IPromiseCallbacks[];\r\n\r\n\t/*\r\n\t * A note about deferring:\r\n\t * The caller can set resolveImmediate to true if they intend to initialize code that will end up being deferred itself.\r\n\t * This eliminates the extra defer that will occur internally.\r\n\t * But for the most part, resolveImmediate = false (the default) will ensure the constructor will not block.\r\n\t *\r\n\t * resolveUsing allows for the same ability but does not defer by default: allowing the caller to take on the work load.\r\n\t * If calling resolve or reject and a deferred response is desired, then use deferImmediate with a closure to do so.\r\n\t */\r\n\r\n\tconstructor(\r\n\t\tresolver?:Promise.Executor, forceSynchronous:boolean = false)\r\n\t{\r\n\t\tsuper();\r\n\r\n\t\tif(resolver) this.resolveUsing(resolver, forceSynchronous);\r\n\t}\r\n\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// Already fulfilled?\r\n\t\tif(this._state) return super.thenSynchronous(onFulfilled, onRejected);\r\n\r\n\t\tvar p = new Promise();\r\n\t\t(this._waiting || (this._waiting = []))\r\n\t\t\t.push(pools.PromiseCallbacks.init(onFulfilled, onRejected, p));\r\n\t\treturn p;\r\n\t}\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// Already fulfilled?\r\n\t\tif(this._state) return super.thenThis(onFulfilled, onRejected);\r\n\r\n\t\t(this._waiting || (this._waiting = []))\r\n\t\t\t.push(pools.PromiseCallbacks.init(onFulfilled, onRejected));\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\r\n\tprotected _onDispose()\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._resolvedCalled = VOID0;\r\n\t}\r\n\r\n\t// Protects against double calling.\r\n\tprotected _resolvedCalled:boolean;\r\n\r\n\tresolveUsing(\r\n\t\tresolver:Promise.Executor,\r\n\t\tforceSynchronous:boolean = false,\r\n\t\tthrowIfSettled:boolean = false)\r\n\t{\r\n\t\tif(!resolver)\r\n\t\t\tthrow new ArgumentNullException(\"resolver\");\r\n\t\tif(this._resolvedCalled)\r\n\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\tif(this.state)\r\n\t\t\tthrow new InvalidOperationException(\"Already resolved: \" + Promise.State[this.state]);\r\n\r\n\t\tthis._resolvedCalled = true;\r\n\r\n\t\tvar state = 0;\r\n\t\tvar rejectHandler = (reason:any)=>\r\n\t\t{\r\n\t\t\tif(state) {\r\n\t\t\t\tconsole.warn(state==-1?\"Rejection called multiple times\":\"Rejection called after fulfilled.\");\r\n\t\t\t} else {\r\n\t\t\t\tstate = -1;\r\n\t\t\t\tthis._resolvedCalled = false;\r\n\t\t\t\tthis.reject(reason);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar fulfillHandler = (v:any)=>\r\n\t\t{\r\n\t\t\tif(state) {\r\n\t\t\t\tconsole.warn(state==1?\"Fulfill called multiple times\":\"Fulfill called after rejection.\");\r\n\t\t\t} else {\r\n\t\t\t\tstate = 1;\r\n\t\t\t\tthis._resolvedCalled = false;\r\n\t\t\t\tthis.resolve(v);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar r = ()=> resolver(\r\n\t\t\tv=>\r\n\t\t\t{\r\n\t\t\t\tif(v==this) throw new InvalidOperationException(\"Cannot resolve a promise as itself.\");\r\n\t\t\t\tif(isPromise(v)) // If the result is a promise, then it will defer downstream.\r\n\t\t\t\t\thandleDispatch(v, fulfillHandler, rejectHandler);\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tfulfillHandler(v);\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t\trejectHandler);\r\n\r\n\t\t// There are some performance edge cases where there caller is not blocking upstream and does not need to defer.\r\n\t\tif(forceSynchronous)\r\n\t\t\tr();\r\n\t\telse\r\n\t\t\tdeferImmediate(r);\r\n\r\n\r\n\t}\r\n\r\n\tresolve(result?:T, throwIfSettled:boolean = false):void\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tif(result==this)\r\n\t\t\tthrow new InvalidOperationException(\"Cannot resolve a promise as itself.\");\r\n\r\n\t\tif(this._state)\r\n\t\t{\r\n\t\t\t// Same value? Ignore...\r\n\t\t\tif(!throwIfSettled || this._state==Promise.State.Fulfilled && this._result===result) return;\r\n\t\t\tthrow new InvalidOperationException(\"Changing the fulfilled state/value of a promise is not supported.\");\r\n\t\t}\r\n\r\n\t\tif(this._resolvedCalled)\r\n\t\t{\r\n\t\t\tif(throwIfSettled)\r\n\t\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._state = Promise.State.Fulfilled;\r\n\r\n\t\tthis._result = result;\r\n\t\tthis._error = VOID0;\r\n\t\tvar o = this._waiting;\r\n\t\tif(o)\r\n\t\t{\r\n\t\t\tthis._waiting = VOID0;\r\n\t\t\tfor(let c of o)\r\n\t\t\t{\r\n\t\t\t\tlet {onFulfilled, promise} = c, p = (>promise);\r\n\t\t\t\tpools.PromiseCallbacks.recycle(c);\r\n\t\t\t\thandleResolution(p, result, onFulfilled);\r\n\t\t\t}\r\n\t\t\to.length = 0;\r\n\t\t}\r\n\t}\r\n\r\n\treject(error:any, throwIfSettled:boolean = false):void\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tif(this._state)\r\n\t\t{\r\n\t\t\t// Same value? Ignore...\r\n\t\t\tif(!throwIfSettled || this._state==Promise.State.Rejected && this._error===error) return;\r\n\t\t\tthrow new InvalidOperationException(\"Changing the rejected state/value of a promise is not supported.\");\r\n\t\t}\r\n\r\n\t\tif(this._resolvedCalled)\r\n\t\t{\r\n\t\t\tif(throwIfSettled)\r\n\t\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._state = Promise.State.Rejected;\r\n\r\n\t\tthis._error = error;\r\n\t\tvar o = this._waiting;\r\n\t\tif(o)\r\n\t\t{\r\n\t\t\tthis._waiting = null; // null = finished. undefined = hasn't started.\r\n\t\t\tfor(let c of o)\r\n\t\t\t{\r\n\t\t\t\tlet {onRejected, promise} = c, p = (>promise);\r\n\t\t\t\tpools.PromiseCallbacks.recycle(c);\r\n\t\t\t\tif(onRejected) handleResolution(p, error, onRejected);\r\n\t\t\t\telse p.reject(error);\r\n\t\t\t}\r\n\t\t\to.length = 0;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\nmodule pools\r\n{\r\n\r\n\t// export module pending\r\n\t// {\r\n\t//\r\n\t//\r\n\t// \tvar pool:ObjectPool>;\r\n\t//\r\n\t// \tfunction getPool()\r\n\t// \t{\r\n\t// \t\treturn pool || (pool = new ObjectPool>(40, factory, c=>c.dispose()));\r\n\t// \t}\r\n\t//\r\n\t// \tfunction factory():Promise\r\n\t// \t{\r\n\t// \t\treturn new Promise();\r\n\t// \t}\r\n\t//\r\n\t// \texport function get():Promise\r\n\t// \t{\r\n\t// \t\tvar p:any = getPool().take();\r\n\t// \t\tp.__wasDisposed = false;\r\n\t// \t\tp._state = Promise.State.Pending;\r\n\t// \t\treturn p;\r\n\t// \t}\r\n\t//\r\n\t// \texport function recycle(c:Promise):void\r\n\t// \t{\r\n\t// \t\tif(c) getPool().add(c);\r\n\t// \t}\r\n\t//\r\n\t// }\r\n\t//\r\n\t// export function recycle(c:PromiseBase):void\r\n\t// {\r\n\t// \tif(!c) return;\r\n\t// \tif(c instanceof Promise && c.constructor==Promise) pending.recycle(c);\r\n\t// \telse c.dispose();\r\n\t// }\r\n\r\n\r\n\texport module PromiseCallbacks\r\n\t{\r\n\r\n\t\tvar pool:ObjectPool>;\r\n\r\n\t\tfunction getPool()\r\n\t\t{\r\n\t\t\treturn pool\r\n\t\t\t\t|| (pool = new ObjectPool>(40, factory, c=>\r\n\t\t\t\t{\r\n\t\t\t\t\tc.onFulfilled = null;\r\n\t\t\t\t\tc.onRejected = null;\r\n\t\t\t\t\tc.promise = null;\r\n\t\t\t\t}));\r\n\t\t}\r\n\r\n\t\tfunction factory():IPromiseCallbacks\r\n\t\t{\r\n\t\t\treturn {\r\n\t\t\t\tonFulfilled: null,\r\n\t\t\t\tonRejected: null,\r\n\t\t\t\tpromise: null\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\texport function init(\r\n\t\t\tonFulfilled:Promise.Fulfill,\r\n\t\t\tonRejected?:Promise.Reject,\r\n\t\t\tpromise?:PromiseLike):IPromiseCallbacks\r\n\t\t{\r\n\r\n\t\t\tvar c = getPool().take();\r\n\t\t\tc.onFulfilled = onFulfilled;\r\n\t\t\tc.onRejected = onRejected;\r\n\t\t\tc.promise = promise;\r\n\t\t\treturn c;\r\n\t\t}\r\n\r\n\t\texport function recycle(c:IPromiseCallbacks):void\r\n\t\t{\r\n\t\t\tgetPool().add(c);\r\n\t\t}\r\n\t}\r\n\r\n\r\n}\r\n\r\n\r\nexport module Promise\r\n{\r\n\r\n\t/**\r\n\t * The state of a promise.\r\n\t * https://github.com/domenic/promises-unwrapping/blob/master/docs/states-and-fates.md\r\n\t * If a promise is disposed the value will be undefined which will also evaluate (promise.state)==false.\r\n\t */\r\n\texport enum State {\r\n\t\tPending = 0,\r\n\t\tFulfilled = 1,\r\n\t\tRejected = -1\r\n\t}\r\n\tObject.freeze(State);\r\n\r\n\texport type Resolution = PromiseLike|TResult|void;\r\n\r\n\texport interface Fulfill\r\n\t{\r\n\t\t(value:T):Resolution\r\n\t}\r\n\r\n\texport interface Reject\r\n\t{\r\n\t\t(err?:any):Resolution\r\n\t}\r\n\r\n\texport interface Then\r\n\t{\r\n\t\t(\r\n\t\t\tonFulfilled:Fulfill,\r\n\t\t\tonRejected?:Reject):PromiseBase\r\n\t}\r\n\r\n\texport interface Executor\r\n\t{\r\n\t\t(\r\n\t\t\tresolve:(value?:T | PromiseLike) => void,\r\n\t\t\treject:(reason?:any) => void):void;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns a promise that is fulfilled with an array containing the fulfillment value of each promise, or is rejected with the same rejection reason as the first promise to be rejected.\r\n\t */\r\n\texport function all(promises:PromiseLike[]):PromiseBase\r\n\texport function all(promise:PromiseLike, ...rest:PromiseLike[]):PromiseBase\r\n\texport function all(\r\n\t\tfirst:PromiseLike|PromiseLike[],\r\n\t\t...rest:PromiseLike[]):PromiseBase\r\n\t{\r\n\t\tif(!first && !rest.length) throw new ArgumentNullException(\"promises\");\r\n\t\tvar promises = (Array.isArray(first) ? first : [first]).concat(rest); // yay a copy!\r\n\t\tif(!promises.length || promises.every(v=>!v)) return new Fulfilled(promises); // it's a new empty, reuse it. :|\r\n\r\n\t\t// Eliminate deferred and take the parent since all .then calls happen on next cycle anyway.\r\n\t\treturn new Promise((resolve, reject)=>\r\n\t\t{\r\n\t\t\tlet checkedAll = false;\r\n\t\t\tlet result:any[] = [];\r\n\t\t\tlet len = promises.length;\r\n\t\t\tresult.length = len;\r\n\t\t\t// Using a set instead of -- a number is more reliable if just in case one of the provided promises resolves twice.\r\n\t\t\tlet remaining = new Set(promises.map((v, i)=>i)); // get all the indexes...\r\n\r\n\t\t\tlet cleanup = ()=>\r\n\t\t\t{\r\n\t\t\t\treject = null;\r\n\t\t\t\tresolve = null;\r\n\t\t\t\tpromises.length = 0;\r\n\t\t\t\tpromises = null;\r\n\t\t\t\tremaining.dispose();\r\n\t\t\t\tremaining = null;\r\n\t\t\t};\r\n\r\n\t\t\tlet checkIfShouldResolve = ()=>\r\n\t\t\t{\r\n\t\t\t\tlet r = resolve;\r\n\t\t\t\tif(r && !remaining.count)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(result);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onFulfill = (v:any, i:number)=>\r\n\t\t\t{\r\n\t\t\t\tif(resolve)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult[i] = v;\r\n\t\t\t\t\tremaining.remove(i);\r\n\t\t\t\t\tcheckIfShouldResolve();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onReject = (e?:any)=>\r\n\t\t\t{\r\n\t\t\t\tlet r = reject;\r\n\t\t\t\tif(r)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tfor(let i = 0; remaining && ionFulfill(v, i), onReject);\r\n\t\t\t\telse remaining.remove(i);\r\n\t\t\t\tcheckIfShouldResolve();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved\r\n\t * or rejected.\r\n\t * @param promises An array of Promises.\r\n\t * @returns A new Promise.\r\n\t */\r\n\texport function race(promises:PromiseLike[]):PromiseBase\r\n\texport function race(promise:PromiseLike, ...rest:PromiseLike[]):PromiseBase\r\n\texport function race(\r\n\t\tfirst:PromiseLike|PromiseLike[],\r\n\t\t...rest:PromiseLike[]):PromiseBase\r\n\t{\r\n\t\tvar promises = first && (Array.isArray(first) ? first : [first]).concat(rest); // yay a copy?\r\n\t\tif(!promises || !promises.length || !(promises = promises.filter(v=>v!=null)).length)\r\n\t\t\tthrow new ArgumentException(\"Nothing to wait for.\");\r\n\r\n\t\tvar len = promises.length;\r\n\r\n\t\t// Only one? Nothing to race.\r\n\t\tif(len==1) return wrap(promises[0]);\r\n\r\n\t\t// Look for already resolved promises and the first one wins.\r\n\t\tfor(let i = 0; i\r\n\t\t{\r\n\t\t\tlet cleanup = ()=>\r\n\t\t\t{\r\n\t\t\t\treject = null;\r\n\t\t\t\tresolve = null;\r\n\t\t\t\tpromises.length = 0;\r\n\t\t\t\tpromises = null;\r\n\t\t\t};\r\n\r\n\t\t\tlet onResolve = (r:(x:any)=>void, v:any)=>\r\n\t\t\t{\r\n\t\t\t\tif(r)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(v);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onFulfill = (v:any)=> onResolve(resolve, v);\r\n\t\t\tlet onReject = (e?:any)=> onResolve(reject, e);\r\n\r\n\t\t\tfor(let p of promises)\r\n\t\t\t{\r\n\t\t\t\tif(!resolve) break;\r\n\t\t\t\tp.then(onFulfill, onReject);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// // race(values: Iterable>): Promise;\r\n\r\n\t/**\r\n\t * Creates a new resolved promise .\r\n\t * @returns A resolved promise.\r\n\t */\r\n\texport function resolve():PromiseBase\r\n\r\n\t/**\r\n\t * Creates a new resolved promise for the provided value.\r\n\t * @param value A value or promise.\r\n\t * @returns A promise whose internal state matches the provided promise.\r\n\t */\r\n\texport function resolve(value:T | PromiseLike):PromiseBase;\r\n\texport function resolve(value?:any):PromiseBase\r\n\t{\r\n\r\n\t\treturn isPromise(value) ? wrap(value) : new Fulfilled(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new rejected promise for the provided reason.\r\n\t * @param reason The reason the promise was rejected.\r\n\t * @returns A new rejected Promise.\r\n\t */\r\n\texport function reject(reason:T):PromiseBase\r\n\t{\r\n\t\treturn new Rejected(reason);\r\n\t}\r\n\r\n\t/**\r\n\t * Takes any Promise-Like object and ensures an extended version of it from this module.\r\n\t * @param target The Promise-Like object\r\n\t * @returns A new target that simply extends the target.\r\n\t */\r\n\texport function wrap(target:PromiseLike):PromiseBase\r\n\t{\r\n\t\tif(!target) throw new ArgumentNullException(TARGET);\r\n\t\treturn target instanceof Promise ? this : new PromiseWrapper(target);\r\n\t}\r\n\r\n\t/**\r\n\t * A function that acts like a 'then' method (aka then-able) can be extended by providing a function that takes an onFulfill and onReject.\r\n\t * @param then\r\n\t * @returns {PromiseWrapper}\r\n\t */\r\n\texport function createFrom(then:Then):PromiseBase\r\n\t{\r\n\t\tif(!then) throw new ArgumentNullException(THEN);\r\n\t\treturn new PromiseWrapper({then: then});\r\n\t}\r\n\r\n}\r\n\r\n\r\ninterface IPromiseCallbacks\r\n{\r\n\tonFulfilled:Promise.Fulfill;\r\n\tonRejected:Promise.Reject;\r\n\tpromise?:PromiseLike;\r\n}\r\n"]} \ No newline at end of file diff --git a/dist/es6/System/Promises/LazyPromise.d.ts b/dist/es6/System/Promises/LazyPromise.d.ts new file mode 100644 index 00000000..2c5bb359 --- /dev/null +++ b/dist/es6/System/Promises/LazyPromise.d.ts @@ -0,0 +1,16 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT + */ +import { Promise, PromiseBase } from "./Promise"; +export declare class LazyPromise extends Promise { + private _resolver; + constructor(_resolver: Promise.Executor); + protected _onDispose(): void; + private _onThen(); + thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; + thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; + delayFromNow(milliseconds?: number): PromiseBase; + delayAfterResolve(milliseconds?: number): PromiseBase; +} +export default LazyPromise; diff --git a/dist/es6/System/Promises/LazyPromise.js b/dist/es6/System/Promises/LazyPromise.js new file mode 100644 index 00000000..a4bc69a0 --- /dev/null +++ b/dist/es6/System/Promises/LazyPromise.js @@ -0,0 +1,98 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT + */ +import { Promise } from "./Promise"; +import { defer } from "../Threading/defer"; +import { ArgumentNullException } from "../Exceptions/ArgumentNullException"; +const VOID0 = void 0; +export class LazyPromise extends Promise { + constructor(_resolver) { + super(); + this._resolver = _resolver; + if (!_resolver) + throw new ArgumentNullException("resolver"); + this._resolvedCalled = true; + } + _onDispose() { + super._onDispose(); + this._resolver = VOID0; + } + _onThen() { + var r = this._resolver; + if (r) { + this._resolver = VOID0; + this._resolvedCalled = false; + this.resolveUsing(r); + } + } + thenSynchronous(onFulfilled, onRejected) { + this._onThen(); + return super.thenSynchronous(onFulfilled, onRejected); + } + thenThis(onFulfilled, onRejected) { + this._onThen(); + return super.thenThis(onFulfilled, onRejected); + } + delayFromNow(milliseconds = 0) { + this.throwIfDisposed(); + if (!this._resolver || this.isSettled) + return super.delayFromNow(milliseconds); + var pass; + var timedOut = false; + var timeout = defer(() => { + timedOut = true; + if (pass) + pass(); + }, milliseconds); + return new LazyPromise((resolve, reject) => { + pass = () => { + this.thenThis(v => resolve(v), e => reject(e)); + timeout.dispose(); + timeout = null; + pass = null; + }; + if (timedOut) + pass(); + }); + } + delayAfterResolve(milliseconds = 0) { + this.throwIfDisposed(); + if (!this._resolver || this.isSettled) + return super.delayAfterResolve(milliseconds); + var pass; + var timeout; + var finalize = () => { + if (timeout) { + timeout.dispose(); + timeout = null; + } + if (pass) + pass(); + finalize = null; + }; + { + let detector = () => { + if (finalize) + timeout = defer(finalize, milliseconds); + }; + super.thenThis(detector, detector); + detector = null; + } + return new LazyPromise((resolve, reject) => { + if (this.isPending) { + this.thenThis(v => defer(() => resolve(v)), e => defer(() => reject(e))); + finalize(); + } + else { + pass = () => { + this.thenThis(v => resolve(v), e => reject(e)); + }; + if (!finalize) + pass(); + } + }); + } +} +export default LazyPromise; +//# sourceMappingURL=LazyPromise.js.map \ No newline at end of file diff --git a/dist/es6/System/Promises/LazyPromise.js.map b/dist/es6/System/Promises/LazyPromise.js.map new file mode 100644 index 00000000..a3b71d1b --- /dev/null +++ b/dist/es6/System/Promises/LazyPromise.js.map @@ -0,0 +1 @@ +{"version":3,"file":"LazyPromise.js","sourceRoot":"","sources":["../../../../source/System/Promises/LazyPromise.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/es6/System/Promises/Promise.d.ts b/dist/es6/System/Promises/Promise.d.ts index ece8587f..4dd52ef6 100644 --- a/dist/es6/System/Promises/Promise.d.ts +++ b/dist/es6/System/Promises/Promise.d.ts @@ -42,23 +42,15 @@ export declare abstract class Resolved extends Resolvable { } export declare class Promise extends Resolvable { private _waiting; - constructor(resolver?: Promise.Executor); + constructor(resolver?: Promise.Executor, forceSynchronous?: boolean); thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; protected _onDispose(): void; protected _resolvedCalled: boolean; - resolveUsing(resolver: Promise.Executor, throwIfSettled?: boolean): void; + resolveUsing(resolver: Promise.Executor, forceSynchronous?: boolean, throwIfSettled?: boolean): void; resolve(result?: T, throwIfSettled?: boolean): void; reject(error: any, throwIfSettled?: boolean): void; } -export declare class LazyPromise extends Promise { - private _resolver; - constructor(_resolver: Promise.Executor); - protected _onDispose(): void; - private _onThen(); - thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; - thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; -} export declare module Promise { enum State { Pending = 0, @@ -85,8 +77,6 @@ export declare module Promise { function resolve(): PromiseBase; function resolve(value: T | PromiseLike): PromiseBase; function reject(reason: T): PromiseBase; - function lazy(resolver: Promise.Executor): LazyPromise; function wrap(target: PromiseLike): PromiseBase; function createFrom(then: Then): PromiseBase; - function pending(resolver?: Promise.Executor): Promise; } diff --git a/dist/es6/System/Promises/Promise.js b/dist/es6/System/Promises/Promise.js index 9ca33168..0e1fe74c 100644 --- a/dist/es6/System/Promises/Promise.js +++ b/dist/es6/System/Promises/Promise.js @@ -25,20 +25,6 @@ function resolve(value, resolver, promiseFactory) { ? Promise.wrap(nextValue) : promiseFactory(nextValue); } -function pass(source, dest) { - return () => { - source.thenThis(v => { - dest.resolve(v); - }, e => { - dest.reject(e); - }); - }; -} -function passDelayed(source, dest, ms) { - return () => { - source.thenThis(v => defer(() => dest.resolve(v), ms), e => defer(() => dest.reject(e), ms)); - }; -} function handleResolution(p, value, resolver) { try { let v = resolver ? resolver(value) : value; @@ -118,7 +104,7 @@ export class PromiseBase extends PromiseState { this._disposableObjectName = PROMISE; } then(onFulfilled, onRejected) { - return Promise.pending((resolve, reject) => { + return new Promise((resolve, reject) => { this.thenThis(result => handleResolutionMethods(resolve, reject, result, onFulfilled), error => onRejected ? handleResolutionMethods(resolve, null, error, onRejected) : reject(error)); @@ -126,15 +112,19 @@ export class PromiseBase extends PromiseState { } delayFromNow(milliseconds = 0) { this.throwIfDisposed(); - var p = Promise.pending(); - defer(pass(this, p), milliseconds); - return p; + return new Promise((resolve, reject) => { + defer(() => { + this.thenThis(v => resolve(v), e => reject(e)); + }, milliseconds); + }, true); } delayAfterResolve(milliseconds = 0) { this.throwIfDisposed(); - var p = Promise.pending(); - passDelayed(this, p, milliseconds); - return p; + if (this.isSettled) + return this.delayFromNow(milliseconds); + return new Promise((resolve, reject) => { + this.thenThis(v => defer(() => resolve(v), milliseconds), e => defer(() => reject(e), milliseconds)); + }, true); } 'catch'(onRejected) { this.throwIfDisposed(); @@ -228,9 +218,11 @@ class PromiseWrapper extends Resolvable { var t = this._target; if (!t) return super.thenSynchronous(onFulfilled, onRejected); - var p = Promise.pending(); - handleDispatch(t, result => handleResolution(p, result, onFulfilled), error => onRejected ? handleResolution(p, error, onRejected) : p.reject(error)); - return p; + return new Promise((resolve, reject) => { + handleDispatch(t, result => handleResolutionMethods(resolve, reject, result, onFulfilled), error => onRejected + ? handleResolutionMethods(resolve, null, error, onRejected) + : reject(error)); + }, true); } thenThis(onFulfilled, onRejected) { this.throwIfDisposed(); @@ -246,10 +238,10 @@ class PromiseWrapper extends Resolvable { } } export class Promise extends Resolvable { - constructor(resolver) { + constructor(resolver, forceSynchronous = false) { super(); if (resolver) - this.resolveUsing(resolver); + this.resolveUsing(resolver, forceSynchronous); } thenSynchronous(onFulfilled, onRejected) { this.throwIfDisposed(); @@ -272,7 +264,7 @@ export class Promise extends Resolvable { super._onDispose(); this._resolvedCalled = VOID0; } - resolveUsing(resolver, throwIfSettled = false) { + resolveUsing(resolver, forceSynchronous = false, throwIfSettled = false) { if (!resolver) throw new ArgumentNullException("resolver"); if (this._resolvedCalled) @@ -280,25 +272,40 @@ export class Promise extends Resolvable { if (this.state) throw new InvalidOperationException("Already resolved: " + Promise.State[this.state]); this._resolvedCalled = true; + var state = 0; var rejectHandler = (reason) => { - this._resolvedCalled = false; - this.reject(reason); + if (state) { + console.warn(state == -1 ? "Rejection called multiple times" : "Rejection called after fulfilled."); + } + else { + state = -1; + this._resolvedCalled = false; + this.reject(reason); + } }; var fulfillHandler = (v) => { - this._resolvedCalled = false; - this.resolve(v); + if (state) { + console.warn(state == 1 ? "Fulfill called multiple times" : "Fulfill called after rejection."); + } + else { + state = 1; + this._resolvedCalled = false; + this.resolve(v); + } }; - deferImmediate(() => { - resolver(v => { - if (v == this) - throw new InvalidOperationException("Cannot resolve a promise as itself."); - if (isPromise(v)) - handleDispatch(v, fulfillHandler, rejectHandler); - else { - fulfillHandler(v); - } - }, rejectHandler); - }); + var r = () => resolver(v => { + if (v == this) + throw new InvalidOperationException("Cannot resolve a promise as itself."); + if (isPromise(v)) + handleDispatch(v, fulfillHandler, rejectHandler); + else { + fulfillHandler(v); + } + }, rejectHandler); + if (forceSynchronous) + r(); + else + deferImmediate(r); } resolve(result, throwIfSettled = false) { this.throwIfDisposed(); @@ -357,35 +364,6 @@ export class Promise extends Resolvable { } } } -export class LazyPromise extends Promise { - constructor(_resolver) { - super(); - this._resolver = _resolver; - if (!_resolver) - throw new ArgumentNullException("resolver"); - this._resolvedCalled = true; - } - _onDispose() { - super._onDispose(); - this._resolver = VOID0; - } - _onThen() { - var r = this._resolver; - if (r) { - this._resolver = VOID0; - this._resolvedCalled = false; - this.resolveUsing(r); - } - } - thenSynchronous(onFulfilled, onRejected) { - this._onThen(); - return super.thenSynchronous(onFulfilled, onRejected); - } - thenThis(onFulfilled, onRejected) { - this._onThen(); - return super.thenThis(onFulfilled, onRejected); - } -} var pools; (function (pools) { var PromiseCallbacks; @@ -434,7 +412,7 @@ var pools; var promises = (Array.isArray(first) ? first : [first]).concat(rest); if (!promises.length || promises.every(v => !v)) return new Fulfilled(promises); - return pending((resolve, reject) => { + return new Promise((resolve, reject) => { let checkedAll = false; let result = []; let len = promises.length; @@ -492,7 +470,7 @@ var pools; if (p instanceof PromiseBase && p.isSettled) return p; } - return pending((resolve, reject) => { + return new Promise((resolve, reject) => { let cleanup = () => { reject = null; resolve = null; @@ -523,10 +501,6 @@ var pools; return new Rejected(reason); } Promise.reject = reject; - function lazy(resolver) { - return new LazyPromise(resolver); - } - Promise.lazy = lazy; function wrap(target) { if (!target) throw new ArgumentNullException(TARGET); @@ -539,9 +513,5 @@ var pools; return new PromiseWrapper({ then: then }); } Promise.createFrom = createFrom; - function pending(resolver) { - return new Promise(resolver); - } - Promise.pending = pending; })(Promise || (Promise = {})); //# sourceMappingURL=Promise.js.map \ No newline at end of file diff --git a/dist/es6/System/Promises/Promise.js.map b/dist/es6/System/Promises/Promise.js.map index 7fcfe297..314fcdac 100644 --- a/dist/es6/System/Promises/Promise.js.map +++ b/dist/es6/System/Promises/Promise.js.map @@ -1 +1 @@ -{"version":3,"file":"Promise.js","sourceRoot":"","sources":["../../../../source/System/Promises/Promise.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;OAQI,IAAI,MAAM,UAAU;OAEpB,EAAC,cAAc,EAAC,MAAM,6BAA6B;OACnD,EAAC,cAAc,EAAC,MAAM,8BAA8B;OACpD,EAAC,yBAAyB,EAAC,MAAM,yCAAyC;OAC1E,EAAC,iBAAiB,EAAC,MAAM,iCAAiC;OAC1D,EAAC,qBAAqB,EAAC,MAAM,qCAAqC;OAClE,EAAC,UAAU,EAAC,MAAM,0BAA0B;OAC5C,EAAC,GAAG,EAAC,MAAM,oBAAoB;OAC/B,EAAC,KAAK,EAAC,MAAM,oBAAoB;AAGxC,MAAM,KAAK,GAAO,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,aAAa,GAAG,OAAO,GAAG,OAAO,EAAE,IAAI,GAAG,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;AAEnH,mBAAsB,KAAS;IAE9B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzD,CAAC;AAED,iBACC,KAA2B,EAAE,QAAuC,EACpE,cAAwC;IAExC,IAAI,SAAS,GAAG,QAAQ;UACrB,QAAQ,CAAC,KAAK,CAAC;UACf,KAAK,CAAC;IAET,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC;UACrC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;UACvB,cAAc,CAAC,SAAS,CAAC,CAAC;AAC9B,CAAC;AAED,cAAiB,MAAqB,EAAE,IAAe;IAEtD,MAAM,CAAC;QAEN,MAAM,CAAC,QAAQ,CACd,CAAC;YAEA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC,EACD,CAAC;YAEA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAA;AACF,CAAC;AAED,qBAAwB,MAAqB,EAAE,IAAe,EAAE,EAAS;IAExE,MAAM,CAAC;QAEN,MAAM,CAAC,QAAQ,CACd,CAAC,IAAE,KAAK,CAAC,MAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EACjC,CAAC,IAAE,KAAK,CAAC,MAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC,CAAA;AACF,CAAC;AAED,0BACC,CAAc,EACd,KAA6B,EAC7B,QAA0C;IAE1C,IACA,CAAC;QACA,IAAI,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QAC3C,EAAE,CAAA,CAAC,CAAC,CAAC;YAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CACA;IAAA,KAAK,CAAA,CAAC,EAAE,CAAC,CACT,CAAC;QAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;AAClB,CAAC;AAED,iCACC,aAAsC,EACtC,YAAgC,EAChC,KAA6B,EAC7B,QAA0C;IAE1C,IACA,CAAC;QACA,IAAI,CAAC,GAAG,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QAC3C,EAAE,CAAA,CAAC,aAAa,CAAC;YAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACpC,CACA;IAAA,KAAK,CAAA,CAAC,EAAE,CAAC,CACT,CAAC;QAAC,EAAE,CAAA,CAAC,YAAY,CAAC;YAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;AACvC,CAAC;AAED,wBACC,CAAgB,EAChB,WAAsC,EACtC,UAAmC;IAEnC,EAAE,CAAA,CAAC,CAAC,YAAY,WAAW,CAAC;QAC3B,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACrC,IAAI;QACH,CAAC,CAAC,IAAI,CAAM,WAAW,EAAE,UAAU,CAAC,CAAC;AACvC,CAAC;AAED,kCACQ,cAAc;IAGrB,YACW,MAAoB,EACpB,OAAU,EACV,MAAW;QAErB,OAAO,CAAC;QAJE,WAAM,GAAN,MAAM,CAAc;QACpB,YAAO,GAAP,OAAO,CAAG;QACV,WAAM,GAAN,MAAM,CAAK;QAGrB,IAAI,CAAC,qBAAqB,GAAG,aAAa,CAAC;IAC5C,CAAC;IAES,UAAU;QAEnB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACrB,CAAC;IAES,QAAQ;QAEjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,IAAI,KAAK;QAER,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,IAAI,SAAS;QAEZ,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;IAChD,CAAC;IAED,IAAI,SAAS;QAEZ,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;IAC/C,CAAC;IAED,IAAI,WAAW;QAEd,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;IAClD,CAAC;IAED,IAAI,UAAU;QAEb,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;IACjD,CAAC;IAKS,SAAS;QAElB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,IAAI,MAAM;QAET,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACzB,CAAC;IAES,QAAQ;QAEjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,IAAI,KAAK;QAER,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;AAEF,CAAC;AAED,iCACQ,YAAY;IAEnB;QAEC,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC;IACtC,CAAC;IAsBD,IAAI,CACH,WAAsC,EACtC,UAAmC;QAEnC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM;YAE/C,IAAI,CAAC,QAAQ,CACZ,MAAM,IAAE,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EACrE,KAAK,IAAE,UAAU;kBACd,uBAAuB,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC;kBACzD,MAAM,CAAC,KAAK,CAAC,CAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC;IAOD,YAAY,CAAC,YAAY,GAAU,CAAC;QAEnC,IAAI,CAAC,eAAe,EAAE,CAAC;QAGvB,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,EAAK,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC;IACV,CAAC;IAQD,iBAAiB,CAAC,YAAY,GAAU,CAAC;QAExC,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,EAAK,CAAC;QAC7B,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC;IACV,CAAC;IAED,OAAO,CAAU,UAAkC;QAElD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IACpC,CAAC;IAED,SAAS,CAAU,GAAmC;QAErD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,WAAW,CAAC,GAAY;QAEvB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,MAAI,cAAc,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC;IACb,CAAC;AAEF,CAAC;AAED,gCAA4C,WAAW;IAGtD,eAAe,CACd,WAAsC,EACtC,UAAmC;QAEnC,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IACA,CAAC;YACA,MAAM,CAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAClB,CAAC;gBACA,KAAK,OAAO,CAAC,KAAK,CAAC,SAAS;oBAC3B,MAAM,CAAC,WAAW;0BACf,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC;0BAC9C,IAAI,CAAC;gBACd,KAAK,OAAO,CAAC,KAAK,CAAC,QAAQ;oBAC1B,MAAM,CAAC,UAAU;0BACd,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC;0BAC5C,IAAI,CAAC;YACf,CAAC;QACF,CACA;QAAA,KAAK,CAAA,CAAC,EAAE,CAAC,CACT,CAAC;YACA,MAAM,CAAC,IAAI,QAAQ,CAAM,EAAE,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC1D,CAAC;IAED,QAAQ,CACP,WAAuB,EACvB,UAAyB;QAEzB,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,MAAM,CAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAClB,CAAC;YACA,KAAK,OAAO,CAAC,KAAK,CAAC,SAAS;gBAC3B,EAAE,CAAA,CAAC,WAAW,CAAC;oBAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC1C,KAAK,CAAC;YACP,KAAK,OAAO,CAAC,KAAK,CAAC,QAAQ;gBAC1B,EAAE,CAAA,CAAC,UAAU,CAAC;oBAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvC,KAAK,CAAC;QACR,CAAC;QAED,MAAM,CAAC,IAAI,CAAC;IACb,CAAC;AAEF,CAAC;AAKD,8BAA0C,UAAU;IAEnD,YAAY,KAAmB,EAAE,MAAQ,EAAE,KAAU;QAEpD,OAAO,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACrB,CAAC;AAGF,CAAC;AAKD,wBAA2B,QAAQ;IAElC,YAAY,KAAQ;QAEnB,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;AACF,CAAC;AAKD,uBAA0B,QAAQ;IAEjC,YAAY,KAAS;QAEpB,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;AACF,CAAC;AAMD,6BAAgC,UAAU;IAEzC,YAAoB,OAAsB;QAEzC,OAAO,CAAC;QAFW,YAAO,GAAP,OAAO,CAAe;QAIzC,EAAE,CAAA,CAAC,CAAC,OAAO,CAAC;YACX,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAEzC,EAAE,CAAA,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM,IAAI,iBAAiB,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;QAEvE,OAAO,CAAC,IAAI,CACX,CAAC;YAEA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;YACtC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACtB,CAAC,EACD,CAAC;YAEA,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;YACrC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACtB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,eAAe,CACd,WAAsC,EACtC,UAAmC;QAEnC,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACrB,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAE7D,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,EAAW,CAAC;QACnC,cAAc,CAAC,CAAC,EACf,MAAM,IAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAChD,KAAK,IAAE,UAAU,GAAG,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,CAAC,CAAC;IACV,CAAC;IAGD,QAAQ,CACP,WAAuB,EACvB,UAAyB;QAEzB,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;QACrB,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACtD,cAAc,CAAC,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC;IACb,CAAC;IAES,UAAU;QAEnB,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACtB,CAAC;AAEF,CAAC;AAMD,6BAAgC,UAAU;IAezC,YACC,QAA6B;QAE7B,OAAO,CAAC;QAER,EAAE,CAAA,CAAC,QAAQ,CAAC;YAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAGD,eAAe,CACd,WAAsC,EACtC,UAAmC;QAEnC,IAAI,CAAC,eAAe,EAAE,CAAC;QAGvB,EAAE,CAAA,CAAC,IAAI,CAAC,MAAM,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAEtE,IAAI,CAAC,GAAG,IAAI,OAAO,EAAW,CAAC;QAC/B,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;aACrC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,CAAC,CAAC;IACV,CAAC;IAED,QAAQ,CACP,WAAuB,EACvB,UAAyB;QAEzB,IAAI,CAAC,eAAe,EAAE,CAAC;QAGvB,EAAE,CAAA,CAAC,IAAI,CAAC,MAAM,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAE/D,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;aACrC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;QAE7D,MAAM,CAAC,IAAI,CAAC;IACb,CAAC;IAGS,UAAU;QAEnB,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IAC9B,CAAC;IAKD,YAAY,CACX,QAA4B,EAC5B,cAAc,GAAW,KAAK;QAE9B,EAAE,CAAA,CAAC,CAAC,QAAQ,CAAC;YACZ,MAAM,IAAI,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAC7C,EAAE,CAAA,CAAC,IAAI,CAAC,eAAe,CAAC;YACvB,MAAM,IAAI,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;QACnE,EAAE,CAAA,CAAC,IAAI,CAAC,KAAK,CAAC;YACb,MAAM,IAAI,yBAAyB,CAAC,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAEvF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,IAAI,aAAa,GAAG,CAAC,MAAU;YAE9B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrB,CAAC,CAAC;QAEF,IAAI,cAAc,GAAG,CAAC,CAAK;YAE1B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC;QAIF,cAAc,CAAC;YAEd,QAAQ,CACP,CAAC;gBAEA,EAAE,CAAA,CAAC,CAAC,IAAE,IAAI,CAAC;oBAAC,MAAM,IAAI,yBAAyB,CAAC,qCAAqC,CAAC,CAAC;gBACvF,EAAE,CAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACf,cAAc,CAAC,CAAC,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;gBAClD,IAAI,CACJ,CAAC;oBACA,cAAc,CAAC,CAAC,CAAC,CAAC;gBACnB,CAAC;YAEF,CAAC,EACD,aAAa,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IAGJ,CAAC;IAED,OAAO,CAAC,MAAS,EAAE,cAAc,GAAW,KAAK;QAEhD,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,EAAE,CAAA,CAAM,MAAM,IAAE,IAAI,CAAC;YACpB,MAAM,IAAI,yBAAyB,CAAC,qCAAqC,CAAC,CAAC;QAE5E,EAAE,CAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CACf,CAAC;YAEA,EAAE,CAAA,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,IAAE,OAAO,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,KAAG,MAAM,CAAC;gBAAC,MAAM,CAAC;YAC5F,MAAM,IAAI,yBAAyB,CAAC,mEAAmE,CAAC,CAAC;QAC1G,CAAC;QAED,EAAE,CAAA,CAAC,IAAI,CAAC,eAAe,CAAC,CACxB,CAAC;YACA,EAAE,CAAA,CAAC,cAAc,CAAC;gBACjB,MAAM,IAAI,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;YACnE,MAAM,CAAC;QACR,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;QAEtC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACtB,EAAE,CAAA,CAAC,CAAC,CAAC,CACL,CAAC;YACA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,GAAG,CAAA,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACf,CAAC;gBACA,IAAI,EAAC,WAAW,EAAE,OAAO,EAAC,GAAG,CAAC,EAAE,CAAC,GAAgB,OAAQ,CAAC;gBAC1D,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClC,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YAC1C,CAAC;YACD,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACd,CAAC;IACF,CAAC;IAED,MAAM,CAAC,KAAS,EAAE,cAAc,GAAW,KAAK;QAE/C,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,EAAE,CAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CACf,CAAC;YAEA,EAAE,CAAA,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,IAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAG,KAAK,CAAC;gBAAC,MAAM,CAAC;YACzF,MAAM,IAAI,yBAAyB,CAAC,kEAAkE,CAAC,CAAC;QACzG,CAAC;QAED,EAAE,CAAA,CAAC,IAAI,CAAC,eAAe,CAAC,CACxB,CAAC;YACA,EAAE,CAAA,CAAC,cAAc,CAAC;gBACjB,MAAM,IAAI,yBAAyB,CAAC,4BAA4B,CAAC,CAAC;YACnE,MAAM,CAAC;QACR,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;QAErC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACtB,EAAE,CAAA,CAAC,CAAC,CAAC,CACL,CAAC;YACA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,GAAG,CAAA,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACf,CAAC;gBACA,IAAI,EAAC,UAAU,EAAE,OAAO,EAAC,GAAG,CAAC,EAAE,CAAC,GAAgB,OAAQ,CAAC;gBACzD,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClC,EAAE,CAAA,CAAC,UAAU,CAAC;oBAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;gBACtD,IAAI;oBAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;YACD,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACd,CAAC;IACF,CAAC;AACF,CAAC;AAMD,iCAAoC,OAAO;IAG1C,YAAoB,SAA6B;QAEhD,OAAO,CAAC;QAFW,cAAS,GAAT,SAAS,CAAoB;QAGhD,EAAE,CAAA,CAAC,CAAC,SAAS,CAAC;YAAC,MAAM,IAAI,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC7B,CAAC;IAES,UAAU;QAEnB,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACxB,CAAC;IAEO,OAAO;QAEd,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACvB,EAAE,CAAA,CAAC,CAAC,CAAC,CACL,CAAC;YACA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;IACF,CAAC;IAED,eAAe,CACd,WAAuC,EACvC,UAAmC;QAEnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACvD,CAAC;IAGD,QAAQ,CACP,WAAuB,EACvB,UAAyB;QAEzB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;AACF,CAAC;AAED,IAAO,KAAK,CAuFX;AAvFD,WAAO,KAAK,EACZ,CAAC;IAyCA,IAAc,gBAAgB,CA0C7B;IA1CD,WAAc,gBAAgB,EAC9B,CAAC;QAEA,IAAI,IAAuC,CAAC;QAE5C;YAEC,MAAM,CAAC,IAAI;mBACP,CAAC,IAAI,GAAG,IAAI,UAAU,CAAyB,EAAE,EAAE,OAAO,EAAE,CAAC;oBAE/D,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;oBACrB,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC;oBACpB,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;gBAClB,CAAC,CAAC,CAAC,CAAC;QACN,CAAC;QAED;YAEC,MAAM,CAAC;gBACN,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,IAAI;aACb,CAAA;QACF,CAAC;QAED,cACC,WAAkC,EAClC,UAA+B,EAC/B,OAAyB;YAGzB,IAAI,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;YACzB,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC;YAC5B,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC;YAC1B,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC;YACpB,MAAM,CAAC,CAAC,CAAC;QACV,CAAC;QAXe,qBAAI,OAWnB,CAAA;QAED,iBAA2B,CAAsB;YAEhD,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAHe,wBAAO,UAGtB,CAAA;IACF,CAAC,EA1Ca,gBAAgB,GAAhB,sBAAgB,KAAhB,sBAAgB,QA0C7B;AAGF,CAAC,EAvFM,KAAK,KAAL,KAAK,QAuFX;AAGD,WAAc,OAAO,EACrB,CAAC;IAOA,WAAY,KAAK;QAChB,uCAAa,CAAA;QACb,2CAAa,CAAA;QACb,0CAAc,CAAA;IACf,CAAC,EAJW,aAAK,KAAL,aAAK,QAIhB;IAJD,IAAY,KAAK,GAAL,aAIX,CAAA;IACD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IA0CrB,aACC,KAAyC,EACzC,GAAG,IAAuB;QAE1B,EAAE,CAAA,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAAC,MAAM,IAAI,qBAAqB,CAAC,UAAU,CAAC,CAAC;QACvE,IAAI,QAAQ,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrE,EAAE,CAAA,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,SAAS,CAAQ,QAAQ,CAAC,CAAC;QAGpF,MAAM,CAAC,OAAO,CAAQ,CAAC,OAAO,EAAE,MAAM;YAErC,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,IAAI,MAAM,GAAS,EAAE,CAAC;YACtB,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC1B,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;YAEpB,IAAI,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAG,CAAC,CAAC,CAAC,CAAC;YAEjD,IAAI,OAAO,GAAG;gBAEb,MAAM,GAAG,IAAI,CAAC;gBACd,OAAO,GAAG,IAAI,CAAC;gBACf,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpB,QAAQ,GAAG,IAAI,CAAC;gBAChB,SAAS,CAAC,OAAO,EAAE,CAAC;gBACpB,SAAS,GAAG,IAAI,CAAC;YAClB,CAAC,CAAC;YAEF,IAAI,oBAAoB,GAAG;gBAE1B,IAAI,CAAC,GAAG,OAAO,CAAC;gBAChB,EAAE,CAAA,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CACzB,CAAC;oBACA,OAAO,EAAE,CAAC;oBACV,CAAC,CAAC,MAAM,CAAC,CAAC;gBACX,CAAC;YACF,CAAC,CAAC;YAEF,IAAI,SAAS,GAAG,CAAC,CAAK,EAAE,CAAQ;gBAE/B,EAAE,CAAA,CAAC,OAAO,CAAC,CACX,CAAC;oBACA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACd,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpB,oBAAoB,EAAE,CAAC;gBACxB,CAAC;YACF,CAAC,CAAC;YAEF,IAAI,QAAQ,GAAG,CAAC,CAAM;gBAErB,IAAI,CAAC,GAAG,MAAM,CAAC;gBACf,EAAE,CAAA,CAAC,CAAC,CAAC,CACL,CAAC;oBACA,OAAO,EAAE,CAAC;oBACV,CAAC,CAAC,CAAC,CAAC,CAAC;gBACN,CAAC;YACF,CAAC,CAAC;YAEF,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,IAAI,CAAC,GAAC,GAAG,EAAE,CAAC,EAAE,EACtC,CAAC;gBACA,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACpB,EAAE,CAAA,CAAC,CAAC,CAAC;oBAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC3C,IAAI;oBAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACzB,oBAAoB,EAAE,CAAC;YACxB,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAlEe,WAAG,MAkElB,CAAA;IAOD,cACC,KAAyC,EACzC,GAAG,IAAuB;QAE1B,IAAI,QAAQ,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9E,EAAE,CAAA,CAAC,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAE,CAAC,IAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YACpF,MAAM,IAAI,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;QAErD,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC;QAG1B,EAAE,CAAA,CAAC,GAAG,IAAE,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAGpC,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,GAAG,EAAE,CAAC,EAAE,EACzB,CAAC;YACA,IAAI,CAAC,GAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxB,EAAE,CAAA,CAAC,CAAC,YAAY,WAAW,IAAI,CAAC,CAAC,SAAS,CAAC;gBAAC,MAAM,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;YAE9B,IAAI,OAAO,GAAG;gBAEb,MAAM,GAAG,IAAI,CAAC;gBACd,OAAO,GAAG,IAAI,CAAC;gBACf,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpB,QAAQ,GAAG,IAAI,CAAC;YACjB,CAAC,CAAC;YAEF,IAAI,SAAS,GAAG,CAAC,CAAe,EAAE,CAAK;gBAEtC,EAAE,CAAA,CAAC,CAAC,CAAC,CACL,CAAC;oBACA,OAAO,EAAE,CAAC;oBACV,CAAC,CAAC,CAAC,CAAC,CAAC;gBACN,CAAC;YACF,CAAC,CAAC;YAEF,IAAI,SAAS,GAAG,CAAC,CAAK,KAAI,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAChD,IAAI,QAAQ,GAAG,CAAC,CAAM,KAAI,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAE/C,GAAG,CAAA,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,CACtB,CAAC;gBACA,EAAE,CAAA,CAAC,CAAC,OAAO,CAAC;oBAAC,KAAK,CAAC;gBACnB,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC7B,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAhDe,YAAI,OAgDnB,CAAA;IAcD,iBAAwB,KAAU;QAGjC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;IAJe,eAAO,UAItB,CAAA;IAOD,gBAA0B,MAAQ;QAEjC,MAAM,CAAC,IAAI,QAAQ,CAAI,MAAM,CAAC,CAAC;IAChC,CAAC;IAHe,cAAM,SAGrB,CAAA;IAQD,cAAwB,QAA4B;QAEnD,MAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAHe,YAAI,OAGnB,CAAA;IAOD,cAAwB,MAAqB;QAE5C,EAAE,CAAA,CAAC,CAAC,MAAM,CAAC;YAAC,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,YAAY,OAAO,GAAG,IAAI,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;IACtE,CAAC;IAJe,YAAI,OAInB,CAAA;IAOD,oBAAsC,IAAoB;QAEzD,EAAE,CAAA,CAAC,CAAC,IAAI,CAAC;YAAC,MAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,cAAc,CAAC,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;IACzC,CAAC;IAJe,kBAAU,aAIzB,CAAA;IAMD,iBAA2B,QAA6B;QAEvD,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAI9B,CAAC;IANe,eAAO,UAMtB,CAAA;AAGF,CAAC,EA5Pa,OAAO,KAAP,OAAO,QA4PpB"} \ No newline at end of file +{"version":3,"file":"Promise.js","sourceRoot":"","sources":["../../../../source/System/Promises/Promise.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/system/System/Promises/LazyPromise.d.ts b/dist/system/System/Promises/LazyPromise.d.ts new file mode 100644 index 00000000..2c5bb359 --- /dev/null +++ b/dist/system/System/Promises/LazyPromise.d.ts @@ -0,0 +1,16 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT + */ +import { Promise, PromiseBase } from "./Promise"; +export declare class LazyPromise extends Promise { + private _resolver; + constructor(_resolver: Promise.Executor); + protected _onDispose(): void; + private _onThen(); + thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; + thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; + delayFromNow(milliseconds?: number): PromiseBase; + delayAfterResolve(milliseconds?: number): PromiseBase; +} +export default LazyPromise; diff --git a/dist/system/System/Promises/LazyPromise.js b/dist/system/System/Promises/LazyPromise.js new file mode 100644 index 00000000..ccdd78de --- /dev/null +++ b/dist/system/System/Promises/LazyPromise.js @@ -0,0 +1,127 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT + */ +System.register(["./Promise", "../Threading/defer", "../Exceptions/ArgumentNullException"], function(exports_1, context_1) { + "use strict"; + var __moduleName = context_1 && context_1.id; + var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + var Promise_1, defer_1, ArgumentNullException_1; + var VOID0, LazyPromise; + return { + setters:[ + function (Promise_1_1) { + Promise_1 = Promise_1_1; + }, + function (defer_1_1) { + defer_1 = defer_1_1; + }, + function (ArgumentNullException_1_1) { + ArgumentNullException_1 = ArgumentNullException_1_1; + }], + execute: function() { + VOID0 = void 0; + LazyPromise = (function (_super) { + __extends(LazyPromise, _super); + function LazyPromise(_resolver) { + _super.call(this); + this._resolver = _resolver; + if (!_resolver) + throw new ArgumentNullException_1.ArgumentNullException("resolver"); + this._resolvedCalled = true; + } + LazyPromise.prototype._onDispose = function () { + _super.prototype._onDispose.call(this); + this._resolver = VOID0; + }; + LazyPromise.prototype._onThen = function () { + var r = this._resolver; + if (r) { + this._resolver = VOID0; + this._resolvedCalled = false; + this.resolveUsing(r); + } + }; + LazyPromise.prototype.thenSynchronous = function (onFulfilled, onRejected) { + this._onThen(); + return _super.prototype.thenSynchronous.call(this, onFulfilled, onRejected); + }; + LazyPromise.prototype.thenThis = function (onFulfilled, onRejected) { + this._onThen(); + return _super.prototype.thenThis.call(this, onFulfilled, onRejected); + }; + LazyPromise.prototype.delayFromNow = function (milliseconds) { + var _this = this; + if (milliseconds === void 0) { milliseconds = 0; } + this.throwIfDisposed(); + if (!this._resolver || this.isSettled) + return _super.prototype.delayFromNow.call(this, milliseconds); + var pass; + var timedOut = false; + var timeout = defer_1.defer(function () { + timedOut = true; + if (pass) + pass(); + }, milliseconds); + return new LazyPromise(function (resolve, reject) { + pass = function () { + _this.thenThis(function (v) { return resolve(v); }, function (e) { return reject(e); }); + timeout.dispose(); + timeout = null; + pass = null; + }; + if (timedOut) + pass(); + }); + }; + LazyPromise.prototype.delayAfterResolve = function (milliseconds) { + var _this = this; + if (milliseconds === void 0) { milliseconds = 0; } + this.throwIfDisposed(); + if (!this._resolver || this.isSettled) + return _super.prototype.delayAfterResolve.call(this, milliseconds); + var pass; + var timeout; + var finalize = function () { + if (timeout) { + timeout.dispose(); + timeout = null; + } + if (pass) + pass(); + finalize = null; + }; + { + var detector = function () { + if (finalize) + timeout = defer_1.defer(finalize, milliseconds); + }; + _super.prototype.thenThis.call(this, detector, detector); + detector = null; + } + return new LazyPromise(function (resolve, reject) { + if (_this.isPending) { + _this.thenThis(function (v) { return defer_1.defer(function () { return resolve(v); }); }, function (e) { return defer_1.defer(function () { return reject(e); }); }); + finalize(); + } + else { + pass = function () { + _this.thenThis(function (v) { return resolve(v); }, function (e) { return reject(e); }); + }; + if (!finalize) + pass(); + } + }); + }; + return LazyPromise; + }(Promise_1.Promise)); + exports_1("LazyPromise", LazyPromise); + exports_1("default",LazyPromise); + } + } +}); +//# sourceMappingURL=LazyPromise.js.map \ No newline at end of file diff --git a/dist/system/System/Promises/LazyPromise.js.map b/dist/system/System/Promises/LazyPromise.js.map new file mode 100644 index 00000000..fefec817 --- /dev/null +++ b/dist/system/System/Promises/LazyPromise.js.map @@ -0,0 +1 @@ +{"version":3,"file":"LazyPromise.js","sourceRoot":"","sources":["../../../../source/System/Promises/LazyPromise.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/system/System/Promises/Promise.d.ts b/dist/system/System/Promises/Promise.d.ts index ece8587f..4dd52ef6 100644 --- a/dist/system/System/Promises/Promise.d.ts +++ b/dist/system/System/Promises/Promise.d.ts @@ -42,23 +42,15 @@ export declare abstract class Resolved extends Resolvable { } export declare class Promise extends Resolvable { private _waiting; - constructor(resolver?: Promise.Executor); + constructor(resolver?: Promise.Executor, forceSynchronous?: boolean); thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; protected _onDispose(): void; protected _resolvedCalled: boolean; - resolveUsing(resolver: Promise.Executor, throwIfSettled?: boolean): void; + resolveUsing(resolver: Promise.Executor, forceSynchronous?: boolean, throwIfSettled?: boolean): void; resolve(result?: T, throwIfSettled?: boolean): void; reject(error: any, throwIfSettled?: boolean): void; } -export declare class LazyPromise extends Promise { - private _resolver; - constructor(_resolver: Promise.Executor); - protected _onDispose(): void; - private _onThen(); - thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; - thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; -} export declare module Promise { enum State { Pending = 0, @@ -85,8 +77,6 @@ export declare module Promise { function resolve(): PromiseBase; function resolve(value: T | PromiseLike): PromiseBase; function reject(reason: T): PromiseBase; - function lazy(resolver: Promise.Executor): LazyPromise; function wrap(target: PromiseLike): PromiseBase; function createFrom(then: Then): PromiseBase; - function pending(resolver?: Promise.Executor): Promise; } diff --git a/dist/system/System/Promises/Promise.js b/dist/system/System/Promises/Promise.js index 3bbcbc63..0df118a0 100644 --- a/dist/system/System/Promises/Promise.js +++ b/dist/system/System/Promises/Promise.js @@ -13,7 +13,7 @@ System.register(["../Types", "../Threading/deferImmediate", "../Disposable/Dispo d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var Types_1, deferImmediate_1, DisposableBase_1, InvalidOperationException_1, ArgumentException_1, ArgumentNullException_1, ObjectPool_1, Set_1, defer_1; - var VOID0, PROMISE, PROMISE_STATE, THEN, TARGET, PromiseState, PromiseBase, Resolvable, Resolved, Fulfilled, Rejected, PromiseWrapper, Promise, LazyPromise, pools; + var VOID0, PROMISE, PROMISE_STATE, THEN, TARGET, PromiseState, PromiseBase, Resolvable, Resolved, Fulfilled, Rejected, PromiseWrapper, Promise, pools; function isPromise(value) { return Types_1.default.hasMemberOfType(value, THEN, Types_1.default.FUNCTION); } @@ -25,20 +25,6 @@ System.register(["../Types", "../Threading/deferImmediate", "../Disposable/Dispo ? Promise.wrap(nextValue) : promiseFactory(nextValue); } - function pass(source, dest) { - return function () { - source.thenThis(function (v) { - dest.resolve(v); - }, function (e) { - dest.reject(e); - }); - }; - } - function passDelayed(source, dest, ms) { - return function () { - source.thenThis(function (v) { return defer_1.defer(function () { return dest.resolve(v); }, ms); }, function (e) { return defer_1.defer(function () { return dest.reject(e); }, ms); }); - }; - } function handleResolution(p, value, resolver) { try { var v = resolver ? resolver(value) : value; @@ -182,25 +168,31 @@ System.register(["../Types", "../Threading/deferImmediate", "../Disposable/Dispo } PromiseBase.prototype.then = function (onFulfilled, onRejected) { var _this = this; - return Promise.pending(function (resolve, reject) { + return new Promise(function (resolve, reject) { _this.thenThis(function (result) { return handleResolutionMethods(resolve, reject, result, onFulfilled); }, function (error) { return onRejected ? handleResolutionMethods(resolve, null, error, onRejected) : reject(error); }); }); }; PromiseBase.prototype.delayFromNow = function (milliseconds) { + var _this = this; if (milliseconds === void 0) { milliseconds = 0; } this.throwIfDisposed(); - var p = Promise.pending(); - defer_1.defer(pass(this, p), milliseconds); - return p; + return new Promise(function (resolve, reject) { + defer_1.defer(function () { + _this.thenThis(function (v) { return resolve(v); }, function (e) { return reject(e); }); + }, milliseconds); + }, true); }; PromiseBase.prototype.delayAfterResolve = function (milliseconds) { + var _this = this; if (milliseconds === void 0) { milliseconds = 0; } this.throwIfDisposed(); - var p = Promise.pending(); - passDelayed(this, p, milliseconds); - return p; + if (this.isSettled) + return this.delayFromNow(milliseconds); + return new Promise(function (resolve, reject) { + _this.thenThis(function (v) { return defer_1.defer(function () { return resolve(v); }, milliseconds); }, function (e) { return defer_1.defer(function () { return reject(e); }, milliseconds); }); + }, true); }; PromiseBase.prototype['catch'] = function (onRejected) { this.throwIfDisposed(); @@ -311,9 +303,11 @@ System.register(["../Types", "../Threading/deferImmediate", "../Disposable/Dispo var t = this._target; if (!t) return _super.prototype.thenSynchronous.call(this, onFulfilled, onRejected); - var p = Promise.pending(); - handleDispatch(t, function (result) { return handleResolution(p, result, onFulfilled); }, function (error) { return onRejected ? handleResolution(p, error, onRejected) : p.reject(error); }); - return p; + return new Promise(function (resolve, reject) { + handleDispatch(t, function (result) { return handleResolutionMethods(resolve, reject, result, onFulfilled); }, function (error) { return onRejected + ? handleResolutionMethods(resolve, null, error, onRejected) + : reject(error); }); + }, true); }; PromiseWrapper.prototype.thenThis = function (onFulfilled, onRejected) { this.throwIfDisposed(); @@ -331,10 +325,11 @@ System.register(["../Types", "../Threading/deferImmediate", "../Disposable/Dispo }(Resolvable)); Promise = (function (_super) { __extends(Promise, _super); - function Promise(resolver) { + function Promise(resolver, forceSynchronous) { + if (forceSynchronous === void 0) { forceSynchronous = false; } _super.call(this); if (resolver) - this.resolveUsing(resolver); + this.resolveUsing(resolver, forceSynchronous); } Promise.prototype.thenSynchronous = function (onFulfilled, onRejected) { this.throwIfDisposed(); @@ -357,8 +352,9 @@ System.register(["../Types", "../Threading/deferImmediate", "../Disposable/Dispo _super.prototype._onDispose.call(this); this._resolvedCalled = VOID0; }; - Promise.prototype.resolveUsing = function (resolver, throwIfSettled) { + Promise.prototype.resolveUsing = function (resolver, forceSynchronous, throwIfSettled) { var _this = this; + if (forceSynchronous === void 0) { forceSynchronous = false; } if (throwIfSettled === void 0) { throwIfSettled = false; } if (!resolver) throw new ArgumentNullException_1.ArgumentNullException("resolver"); @@ -367,25 +363,40 @@ System.register(["../Types", "../Threading/deferImmediate", "../Disposable/Dispo if (this.state) throw new InvalidOperationException_1.InvalidOperationException("Already resolved: " + Promise.State[this.state]); this._resolvedCalled = true; + var state = 0; var rejectHandler = function (reason) { - _this._resolvedCalled = false; - _this.reject(reason); + if (state) { + console.warn(state == -1 ? "Rejection called multiple times" : "Rejection called after fulfilled."); + } + else { + state = -1; + _this._resolvedCalled = false; + _this.reject(reason); + } }; var fulfillHandler = function (v) { - _this._resolvedCalled = false; - _this.resolve(v); + if (state) { + console.warn(state == 1 ? "Fulfill called multiple times" : "Fulfill called after rejection."); + } + else { + state = 1; + _this._resolvedCalled = false; + _this.resolve(v); + } }; - deferImmediate_1.deferImmediate(function () { - resolver(function (v) { - if (v == _this) - throw new InvalidOperationException_1.InvalidOperationException("Cannot resolve a promise as itself."); - if (isPromise(v)) - handleDispatch(v, fulfillHandler, rejectHandler); - else { - fulfillHandler(v); - } - }, rejectHandler); - }); + var r = function () { return resolver(function (v) { + if (v == _this) + throw new InvalidOperationException_1.InvalidOperationException("Cannot resolve a promise as itself."); + if (isPromise(v)) + handleDispatch(v, fulfillHandler, rejectHandler); + else { + fulfillHandler(v); + } + }, rejectHandler); }; + if (forceSynchronous) + r(); + else + deferImmediate_1.deferImmediate(r); }; Promise.prototype.resolve = function (result, throwIfSettled) { if (throwIfSettled === void 0) { throwIfSettled = false; } @@ -450,38 +461,6 @@ System.register(["../Types", "../Threading/deferImmediate", "../Disposable/Dispo return Promise; }(Resolvable)); exports_1("Promise", Promise); - LazyPromise = (function (_super) { - __extends(LazyPromise, _super); - function LazyPromise(_resolver) { - _super.call(this); - this._resolver = _resolver; - if (!_resolver) - throw new ArgumentNullException_1.ArgumentNullException("resolver"); - this._resolvedCalled = true; - } - LazyPromise.prototype._onDispose = function () { - _super.prototype._onDispose.call(this); - this._resolver = VOID0; - }; - LazyPromise.prototype._onThen = function () { - var r = this._resolver; - if (r) { - this._resolver = VOID0; - this._resolvedCalled = false; - this.resolveUsing(r); - } - }; - LazyPromise.prototype.thenSynchronous = function (onFulfilled, onRejected) { - this._onThen(); - return _super.prototype.thenSynchronous.call(this, onFulfilled, onRejected); - }; - LazyPromise.prototype.thenThis = function (onFulfilled, onRejected) { - this._onThen(); - return _super.prototype.thenThis.call(this, onFulfilled, onRejected); - }; - return LazyPromise; - }(Promise)); - exports_1("LazyPromise", LazyPromise); (function (pools) { var PromiseCallbacks; (function (PromiseCallbacks) { @@ -533,7 +512,7 @@ System.register(["../Types", "../Threading/deferImmediate", "../Disposable/Dispo var promises = (Array.isArray(first) ? first : [first]).concat(rest); if (!promises.length || promises.every(function (v) { return !v; })) return new Fulfilled(promises); - return pending(function (resolve, reject) { + return new Promise(function (resolve, reject) { var checkedAll = false; var result = []; var len = promises.length; @@ -598,7 +577,7 @@ System.register(["../Types", "../Threading/deferImmediate", "../Disposable/Dispo if (p instanceof PromiseBase && p.isSettled) return p; } - return pending(function (resolve, reject) { + return new Promise(function (resolve, reject) { var cleanup = function () { reject = null; resolve = null; @@ -630,10 +609,6 @@ System.register(["../Types", "../Threading/deferImmediate", "../Disposable/Dispo return new Rejected(reason); } Promise.reject = reject; - function lazy(resolver) { - return new LazyPromise(resolver); - } - Promise.lazy = lazy; function wrap(target) { if (!target) throw new ArgumentNullException_1.ArgumentNullException(TARGET); @@ -646,10 +621,6 @@ System.register(["../Types", "../Threading/deferImmediate", "../Disposable/Dispo return new PromiseWrapper({ then: then }); } Promise.createFrom = createFrom; - function pending(resolver) { - return new Promise(resolver); - } - Promise.pending = pending; })(Promise = Promise || (Promise = {})); exports_1("Promise", Promise); } diff --git a/dist/system/System/Promises/Promise.js.map b/dist/system/System/Promises/Promise.js.map index d89d47a5..21c29c79 100644 --- a/dist/system/System/Promises/Promise.js.map +++ b/dist/system/System/Promises/Promise.js.map @@ -1 +1 @@ -{"version":3,"file":"Promise.js","sourceRoot":"","sources":["../../../../source/System/Promises/Promise.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Promise.js","sourceRoot":"","sources":["../../../../source/System/Promises/Promise.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/umd.min/System/Promises/LazyPromise.d.ts b/dist/umd.min/System/Promises/LazyPromise.d.ts new file mode 100644 index 00000000..2c5bb359 --- /dev/null +++ b/dist/umd.min/System/Promises/LazyPromise.d.ts @@ -0,0 +1,16 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT + */ +import { Promise, PromiseBase } from "./Promise"; +export declare class LazyPromise extends Promise { + private _resolver; + constructor(_resolver: Promise.Executor); + protected _onDispose(): void; + private _onThen(); + thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; + thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; + delayFromNow(milliseconds?: number): PromiseBase; + delayAfterResolve(milliseconds?: number): PromiseBase; +} +export default LazyPromise; diff --git a/dist/umd.min/System/Promises/LazyPromise.js b/dist/umd.min/System/Promises/LazyPromise.js new file mode 100644 index 00000000..a237e139 --- /dev/null +++ b/dist/umd.min/System/Promises/LazyPromise.js @@ -0,0 +1,6 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT + */ +var __extends=this&&this.__extends||function(e,t){function n(){this.constructor=e}for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o]);e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)};!function(e){if("object"==typeof module&&"object"==typeof module.exports){var t=e(require,exports);void 0!==t&&(module.exports=t)}else"function"==typeof define&&define.amd&&define(["require","exports","./Promise","../Threading/defer","../Exceptions/ArgumentNullException"],e)}(function(e,t){"use strict";var n=e("./Promise"),o=e("../Threading/defer"),r=e("../Exceptions/ArgumentNullException"),i=void 0,s=function(e){function t(t){if(e.call(this),this._resolver=t,!t)throw new r.ArgumentNullException("resolver");this._resolvedCalled=!0}return __extends(t,e),t.prototype._onDispose=function(){e.prototype._onDispose.call(this),this._resolver=i},t.prototype._onThen=function(){var e=this._resolver;e&&(this._resolver=i,this._resolvedCalled=!1,this.resolveUsing(e))},t.prototype.thenSynchronous=function(t,n){return this._onThen(),e.prototype.thenSynchronous.call(this,t,n)},t.prototype.thenThis=function(t,n){return this._onThen(),e.prototype.thenThis.call(this,t,n)},t.prototype.delayFromNow=function(n){var r=this;if(void 0===n&&(n=0),this.throwIfDisposed(),!this._resolver||this.isSettled)return e.prototype.delayFromNow.call(this,n);var i,s=!1,u=o.defer(function(){s=!0,i&&i()},n);return new t(function(e,t){i=function(){r.thenThis(function(t){return e(t)},function(e){return t(e)}),u.dispose(),u=null,i=null},s&&i()})},t.prototype.delayAfterResolve=function(n){var r=this;if(void 0===n&&(n=0),this.throwIfDisposed(),!this._resolver||this.isSettled)return e.prototype.delayAfterResolve.call(this,n);var i,s,u=function(){s&&(s.dispose(),s=null),i&&i(),u=null},l=function(){u&&(s=o.defer(u,n))};return e.prototype.thenThis.call(this,l,l),l=null,new t(function(e,t){r.isPending?(r.thenThis(function(t){return o.defer(function(){return e(t)})},function(e){return o.defer(function(){return t(e)})}),u()):(i=function(){r.thenThis(function(t){return e(t)},function(e){return t(e)})},u||i())})},t}(n.Promise);t.LazyPromise=s,Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=s}); +//# sourceMappingURL=LazyPromise.js.map diff --git a/dist/umd.min/System/Promises/LazyPromise.js.map b/dist/umd.min/System/Promises/LazyPromise.js.map new file mode 100644 index 00000000..61d9669c --- /dev/null +++ b/dist/umd.min/System/Promises/LazyPromise.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["System/Promises/LazyPromise.js","System/Promises/LazyPromise.ts"],"names":["__extends","this","d","b","__","constructor","p","hasOwnProperty","prototype","Object","create","factory","module","exports","v","require","undefined","define","amd","Promise_1","defer_1","ArgumentNullException_1","VOID0","LazyPromise","_super","_resolver","call","ArgumentNullException","_resolvedCalled","_onDispose","_onThen","r","resolveUsing","thenSynchronous","onFulfilled","onRejected","thenThis","delayFromNow","milliseconds","_this","throwIfDisposed","isSettled","pass","timedOut","timeout","defer","resolve","reject","e","dispose","delayAfterResolve","finalize","detector","isPending","Promise","defineProperty","value"],"mappings":"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","file":"System/Promises/LazyPromise.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT\n */\nvar __extends = (this && this.__extends) || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\n(function (factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n var v = factory(require, exports); if (v !== undefined) module.exports = v;\n }\n else if (typeof define === 'function' && define.amd) {\n define([\"require\", \"exports\", \"./Promise\", \"../Threading/defer\", \"../Exceptions/ArgumentNullException\"], factory);\n }\n})(function (require, exports) {\n \"use strict\";\n var Promise_1 = require(\"./Promise\");\n var defer_1 = require(\"../Threading/defer\");\n var ArgumentNullException_1 = require(\"../Exceptions/ArgumentNullException\");\n var VOID0 = void 0;\n var LazyPromise = (function (_super) {\n __extends(LazyPromise, _super);\n function LazyPromise(_resolver) {\n _super.call(this);\n this._resolver = _resolver;\n if (!_resolver)\n throw new ArgumentNullException_1.ArgumentNullException(\"resolver\");\n this._resolvedCalled = true;\n }\n LazyPromise.prototype._onDispose = function () {\n _super.prototype._onDispose.call(this);\n this._resolver = VOID0;\n };\n LazyPromise.prototype._onThen = function () {\n var r = this._resolver;\n if (r) {\n this._resolver = VOID0;\n this._resolvedCalled = false;\n this.resolveUsing(r);\n }\n };\n LazyPromise.prototype.thenSynchronous = function (onFulfilled, onRejected) {\n this._onThen();\n return _super.prototype.thenSynchronous.call(this, onFulfilled, onRejected);\n };\n LazyPromise.prototype.thenThis = function (onFulfilled, onRejected) {\n this._onThen();\n return _super.prototype.thenThis.call(this, onFulfilled, onRejected);\n };\n LazyPromise.prototype.delayFromNow = function (milliseconds) {\n var _this = this;\n if (milliseconds === void 0) { milliseconds = 0; }\n this.throwIfDisposed();\n if (!this._resolver || this.isSettled)\n return _super.prototype.delayFromNow.call(this, milliseconds);\n var pass;\n var timedOut = false;\n var timeout = defer_1.defer(function () {\n timedOut = true;\n if (pass)\n pass();\n }, milliseconds);\n return new LazyPromise(function (resolve, reject) {\n pass = function () {\n _this.thenThis(function (v) { return resolve(v); }, function (e) { return reject(e); });\n timeout.dispose();\n timeout = null;\n pass = null;\n };\n if (timedOut)\n pass();\n });\n };\n LazyPromise.prototype.delayAfterResolve = function (milliseconds) {\n var _this = this;\n if (milliseconds === void 0) { milliseconds = 0; }\n this.throwIfDisposed();\n if (!this._resolver || this.isSettled)\n return _super.prototype.delayAfterResolve.call(this, milliseconds);\n var pass;\n var timeout;\n var finalize = function () {\n if (timeout) {\n timeout.dispose();\n timeout = null;\n }\n if (pass)\n pass();\n finalize = null;\n };\n {\n var detector = function () {\n if (finalize)\n timeout = defer_1.defer(finalize, milliseconds);\n };\n _super.prototype.thenThis.call(this, detector, detector);\n detector = null;\n }\n return new LazyPromise(function (resolve, reject) {\n if (_this.isPending) {\n _this.thenThis(function (v) { return defer_1.defer(function () { return resolve(v); }); }, function (e) { return defer_1.defer(function () { return reject(e); }); });\n finalize();\n }\n else {\n pass = function () {\n _this.thenThis(function (v) { return resolve(v); }, function (e) { return reject(e); });\n };\n if (!finalize)\n pass();\n }\n });\n };\n return LazyPromise;\n }(Promise_1.Promise));\n exports.LazyPromise = LazyPromise;\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.default = LazyPromise;\n});\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT\r\n */\r\n\r\nimport {Promise, PromiseBase} from \"./Promise\";\r\nimport {Closure} from \"../FunctionTypes\";\r\nimport {ICancellable} from \"../Threading/ICancellable\";\r\nimport {defer} from \"../Threading/defer\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\n\r\nconst VOID0:any = void 0;\r\n\r\n/**\r\n * A promise that waits for the first then to trigger the resolver.\r\n */\r\nexport class LazyPromise extends Promise\r\n{\r\n\r\n\tconstructor(private _resolver:Promise.Executor)\r\n\t{\r\n\t\tsuper();\r\n\t\tif(!_resolver) throw new ArgumentNullException(\"resolver\");\r\n\t\tthis._resolvedCalled = true;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._resolver = VOID0;\r\n\t}\r\n\r\n\tprivate _onThen():void\r\n\t{\r\n\t\tvar r = this._resolver;\r\n\t\tif(r)\r\n\t\t{\r\n\t\t\tthis._resolver = VOID0;\r\n\t\t\tthis._resolvedCalled = false;\r\n\t\t\tthis.resolveUsing(r);\r\n\t\t}\r\n\t}\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis._onThen();\r\n\t\treturn super.thenSynchronous(onFulfilled, onRejected);\r\n\t}\r\n\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis._onThen();\r\n\t\treturn super.thenThis(onFulfilled, onRejected);\r\n\t}\r\n\r\n\t// NOTE: For a LazyPromise we need to be careful not to trigger the resolve for delay.\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from the time called before continuing.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a minimum delay.\r\n\t */\r\n\tdelayFromNow(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// If this is already guaranteed to resolve, the go ahead and pass to the super.\r\n\t\tif(!this._resolver || this.isSettled)\r\n\t\t\treturn super.delayFromNow(milliseconds);\r\n\r\n\t\t/*\r\n\t\t * If not triggered yet, then we create a special promise\r\n\t\t * that only requests the resolution from the parent promise\r\n\t\t * if a 'then' is called to ensure the lazy pattern.\r\n\t\t */\r\n\t\tvar pass:Closure;\r\n\t\tvar timedOut:boolean = false;\r\n\r\n\t\t// Setup the timer.\r\n\t\tvar timeout = defer(()=>\r\n\t\t\t{\r\n\t\t\t\ttimedOut = true;\r\n\t\t\t\t// If the promise was requested already go ahead and pass the request on to the parent.\r\n\t\t\t\tif(pass)\r\n\t\t\t\t\tpass();\r\n\t\t\t},\r\n\t\t\tmilliseconds);\r\n\r\n\t\treturn new LazyPromise(\r\n\t\t\t(resolve, reject)=>\r\n\t\t\t{\r\n\t\t\t\t// A lazy promise only enters here if something called for a resolution.\r\n\t\t\t\tpass = ()=>\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.thenThis(\r\n\t\t\t\t\t\tv=> resolve(v),\r\n\t\t\t\t\t\te=> reject(e)\r\n\t\t\t\t\t);\r\n\t\t\t\t\ttimeout.dispose();\r\n\t\t\t\t\ttimeout = null;\r\n\t\t\t\t\tpass = null;\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// If the timeout completed already go ahead and pass the request on to the parent.\r\n\t\t\t\tif(timedOut)\r\n\t\t\t\t\tpass();\r\n\t\t\t\t// Otherwise wait for the timeout to do it.\r\n\t\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from after this promise resolves.\r\n\t * If the promise is already resolved, the delay will start from now.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayAfterResolve(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// If this is already guaranteed to resolve, the go ahead and pass to the super.\r\n\t\tif(!this._resolver || this.isSettled)\r\n\t\t\treturn super.delayAfterResolve(milliseconds);\r\n\r\n\t\t/*\r\n\t\t * If not triggered yet, then we create a special promise\r\n\t\t * that only requests the resolution from the parent promise\r\n\t\t * if a 'then' is called to ensure the lazy pattern.\r\n\t\t */\r\n\t\tvar pass:Closure;\r\n\r\n\r\n\t\t// Setup the timer.\r\n\t\tvar timeout:ICancellable;\r\n\r\n\t\tvar finalize = ()=>\r\n\t\t{\r\n\t\t\tif(timeout)\r\n\t\t\t{\r\n\t\t\t\ttimeout.dispose();\r\n\t\t\t\ttimeout = null;\r\n\t\t\t}\r\n\t\t\t// If the promise was requested already go ahead and pass the request on to the parent.\r\n\t\t\tif(pass)\r\n\t\t\t\tpass();\r\n\r\n\t\t\tfinalize = null;\r\n\t\t};\r\n\r\n\t\t{\r\n\t\t\tlet detector = ()=>\r\n\t\t\t{\r\n\t\t\t\tif(finalize) // We may already be wrapped up so never mind!\r\n\t\t\t\t\ttimeout = defer(finalize, milliseconds);\r\n\t\t\t};\r\n\r\n\t\t\t// Calling super.thenThis does not trigger resolution.\r\n\t\t\t// This simply waits for resolution to happen.\r\n\t\t\t// Is effectively the timer by when resolution has occurred.\r\n\t\t\tsuper.thenThis(detector, detector);\r\n\t\t\tdetector = null;\r\n\t\t}\r\n\r\n\t\treturn new LazyPromise(\r\n\t\t\t(resolve, reject)=>\r\n\t\t\t{\r\n\t\t\t\t// Because of the lazy nature of this promise, this could enter here at any time.\r\n\t\t\t\tif(this.isPending)\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.thenThis(\r\n\t\t\t\t\t\tv=> defer(()=>resolve(v)),\r\n\t\t\t\t\t\te=> defer(()=>reject(e))\r\n\t\t\t\t\t);\r\n\t\t\t\t\tfinalize();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\t// We don't know when this resolved and could have happened anytime after calling this delay method.\r\n\t\t\t\t\tpass = ()=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.thenThis(\r\n\t\t\t\t\t\t\tv=> resolve(v),\r\n\t\t\t\t\t\t\te=> reject(e)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// Already finalized (aka resolved after a timeout)? Go now!\r\n\t\t\t\t\tif(!finalize)\r\n\t\t\t\t\t\tpass();\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\r\n\t}\r\n}\r\n\r\nexport default LazyPromise;"]} \ No newline at end of file diff --git a/dist/umd.min/System/Promises/Promise.d.ts b/dist/umd.min/System/Promises/Promise.d.ts index ece8587f..4dd52ef6 100644 --- a/dist/umd.min/System/Promises/Promise.d.ts +++ b/dist/umd.min/System/Promises/Promise.d.ts @@ -42,23 +42,15 @@ export declare abstract class Resolved extends Resolvable { } export declare class Promise extends Resolvable { private _waiting; - constructor(resolver?: Promise.Executor); + constructor(resolver?: Promise.Executor, forceSynchronous?: boolean); thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; protected _onDispose(): void; protected _resolvedCalled: boolean; - resolveUsing(resolver: Promise.Executor, throwIfSettled?: boolean): void; + resolveUsing(resolver: Promise.Executor, forceSynchronous?: boolean, throwIfSettled?: boolean): void; resolve(result?: T, throwIfSettled?: boolean): void; reject(error: any, throwIfSettled?: boolean): void; } -export declare class LazyPromise extends Promise { - private _resolver; - constructor(_resolver: Promise.Executor); - protected _onDispose(): void; - private _onThen(); - thenSynchronous(onFulfilled: Promise.Fulfill, onRejected?: Promise.Reject): PromiseBase; - thenThis(onFulfilled: (v?: T) => any, onRejected?: (v?: any) => any): PromiseBase; -} export declare module Promise { enum State { Pending = 0, @@ -85,8 +77,6 @@ export declare module Promise { function resolve(): PromiseBase; function resolve(value: T | PromiseLike): PromiseBase; function reject(reason: T): PromiseBase; - function lazy(resolver: Promise.Executor): LazyPromise; function wrap(target: PromiseLike): PromiseBase; function createFrom(then: Then): PromiseBase; - function pending(resolver?: Promise.Executor): Promise; } diff --git a/dist/umd.min/System/Promises/Promise.js b/dist/umd.min/System/Promises/Promise.js index 404880d5..eeaab808 100644 --- a/dist/umd.min/System/Promises/Promise.js +++ b/dist/umd.min/System/Promises/Promise.js @@ -4,5 +4,5 @@ * Although most of the following code is written from scratch, it is * heavily influenced by Q (https://github.com/kriskowal/q) and uses some of Q's spec. */ -var __extends=this&&this.__extends||function(t,e){function n(){this.constructor=t}for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r]);t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)};!function(t){if("object"==typeof module&&"object"==typeof module.exports){var e=t(require,exports);void 0!==e&&(module.exports=e)}else"function"==typeof define&&define.amd&&define(["require","exports","../Types","../Threading/deferImmediate","../Disposable/DisposableBase","../Exceptions/InvalidOperationException","../Exceptions/ArgumentException","../Exceptions/ArgumentNullException","../Disposable/ObjectPool","../Collections/Set","../Threading/defer"],t)}(function(t,e){"use strict";function n(t){return a["default"].hasMemberOfType(t,b,a["default"].FUNCTION)}function r(t,e,r){var i=e?e(t):t;return i&&n(i)?T.wrap(i):r(i)}function i(t,e){return function(){t.thenThis(function(t){e.resolve(t)},function(t){e.reject(t)})}}function o(t,e,n){return function(){t.thenThis(function(t){return g.defer(function(){return e.resolve(t)},n)},function(t){return g.defer(function(){return e.reject(t)},n)})}}function s(t,e,n){try{var r=n?n(e):e;t&&t.resolve(r)}catch(i){t.reject(i)}}function l(t,e,n,r){try{var i=r?r(n):n;t&&t(i)}catch(o){e&&e(o)}}function u(t,e,n){t instanceof S?t.thenThis(e,n):t.then(e,n)}var a=t("../Types"),c=t("../Threading/deferImmediate"),h=t("../Disposable/DisposableBase"),f=t("../Exceptions/InvalidOperationException"),p=t("../Exceptions/ArgumentException"),d=t("../Exceptions/ArgumentNullException"),v=t("../Disposable/ObjectPool"),_=t("../Collections/Set"),g=t("../Threading/defer"),y=void 0,w="Promise",m=w+"State",b="then",x="target",j=function(t){function e(e,n,r){t.call(this),this._state=e,this._result=n,this._error=r,this._disposableObjectName=m}return __extends(e,t),e.prototype._onDispose=function(){this._state=y,this._result=y,this._error=y},e.prototype.getState=function(){return this._state},Object.defineProperty(e.prototype,"state",{get:function(){return this._state},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isPending",{get:function(){return this.getState()===T.State.Pending},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isSettled",{get:function(){return this.getState()!=T.State.Pending},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isFulfilled",{get:function(){return this.getState()===T.State.Fulfilled},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isRejected",{get:function(){return this.getState()===T.State.Rejected},enumerable:!0,configurable:!0}),e.prototype.getResult=function(){return this._result},Object.defineProperty(e.prototype,"result",{get:function(){return this.throwIfDisposed(),this.getResult()},enumerable:!0,configurable:!0}),e.prototype.getError=function(){return this._error},Object.defineProperty(e.prototype,"error",{get:function(){return this.throwIfDisposed(),this.getError()},enumerable:!0,configurable:!0}),e}(h.DisposableBase);e.PromiseState=j;var S=function(t){function e(){t.call(this,T.State.Pending),this._disposableObjectName=w}return __extends(e,t),e.prototype.then=function(t,e){var n=this;return T.pending(function(r,i){n.thenThis(function(e){return l(r,i,e,t)},function(t){return e?l(r,null,t,e):i(t)})})},e.prototype.delayFromNow=function(t){void 0===t&&(t=0),this.throwIfDisposed();var e=T.pending();return g.defer(i(this,e),t),e},e.prototype.delayAfterResolve=function(t){void 0===t&&(t=0),this.throwIfDisposed();var e=T.pending();return o(this,e,t),e},e.prototype["catch"]=function(t){return this.throwIfDisposed(),this.then(y,t)},e.prototype["finally"]=function(t){return this.throwIfDisposed(),this.then(t,t)},e.prototype.finallyThis=function(t){this.throwIfDisposed();var e=function(){return c.deferImmediate(t)};return this.thenThis(e,e),this},e}(j);e.PromiseBase=S;var E=function(t){function e(){t.apply(this,arguments)}return __extends(e,t),e.prototype.thenSynchronous=function(t,e){this.throwIfDisposed();try{switch(this.state){case T.State.Fulfilled:return t?r(this._result,t,T.resolve):this;case T.State.Rejected:return e?r(this._error,e,T.resolve):this}}catch(n){return new D(n)}throw new Error("Invalid state for a resolved promise.")},e.prototype.thenThis=function(t,e){switch(this.throwIfDisposed(),this.state){case T.State.Fulfilled:t&&t(this._result);break;case T.State.Rejected:e&&e(this._error)}return this},e}(S);e.Resolvable=E;var I=function(t){function e(e,n,r){t.call(this),this._result=n,this._error=r,this._state=e}return __extends(e,t),e}(E);e.Resolved=I;var P=function(t){function e(e){t.call(this,T.State.Fulfilled,e)}return __extends(e,t),e}(I),D=function(t){function e(e){t.call(this,T.State.Rejected,y,e)}return __extends(e,t),e}(I),O=function(t){function e(e){var r=this;if(t.call(this),this._target=e,!e)throw new d.ArgumentNullException(x);if(!n(e))throw new p.ArgumentException(x,"Must be a promise-like object.");e.then(function(t){r._state=T.State.Fulfilled,r._result=t,r._error=y,r._target=y},function(t){r._state=T.State.Rejected,r._error=t,r._target=y})}return __extends(e,t),e.prototype.thenSynchronous=function(e,n){this.throwIfDisposed();var r=this._target;if(!r)return t.prototype.thenSynchronous.call(this,e,n);var i=T.pending();return u(r,function(t){return s(i,t,e)},function(t){return n?s(i,t,n):i.reject(t)}),i},e.prototype.thenThis=function(e,n){this.throwIfDisposed();var r=this._target;return r?(u(r,e,n),this):t.prototype.thenThis.call(this,e,n)},e.prototype._onDispose=function(){t.prototype._onDispose.call(this),this._target=y},e}(E),T=function(t){function e(e){t.call(this),e&&this.resolveUsing(e)}return __extends(e,t),e.prototype.thenSynchronous=function(n,r){if(this.throwIfDisposed(),this._state)return t.prototype.thenSynchronous.call(this,n,r);var i=new e;return(this._waiting||(this._waiting=[])).push(R.PromiseCallbacks.init(n,r,i)),i},e.prototype.thenThis=function(e,n){return this.throwIfDisposed(),this._state?t.prototype.thenThis.call(this,e,n):((this._waiting||(this._waiting=[])).push(R.PromiseCallbacks.init(e,n)),this)},e.prototype._onDispose=function(){t.prototype._onDispose.call(this),this._resolvedCalled=y},e.prototype.resolveUsing=function(t,r){var i=this;if(void 0===r&&(r=!1),!t)throw new d.ArgumentNullException("resolver");if(this._resolvedCalled)throw new f.InvalidOperationException(".resolve() already called.");if(this.state)throw new f.InvalidOperationException("Already resolved: "+e.State[this.state]);this._resolvedCalled=!0;var o=function(t){i._resolvedCalled=!1,i.reject(t)},s=function(t){i._resolvedCalled=!1,i.resolve(t)};c.deferImmediate(function(){t(function(t){if(t==i)throw new f.InvalidOperationException("Cannot resolve a promise as itself.");n(t)?u(t,s,o):s(t)},o)})},e.prototype.resolve=function(t,n){if(void 0===n&&(n=!1),this.throwIfDisposed(),t==this)throw new f.InvalidOperationException("Cannot resolve a promise as itself.");if(this._state){if(!n||this._state==e.State.Fulfilled&&this._result===t)return;throw new f.InvalidOperationException("Changing the fulfilled state/value of a promise is not supported.")}if(this._resolvedCalled){if(n)throw new f.InvalidOperationException(".resolve() already called.")}else{this._state=e.State.Fulfilled,this._result=t,this._error=y;var r=this._waiting;if(r){this._waiting=y;for(var i=0,o=r;ih;h++)c(h)})}function r(t){for(var e=[],n=1;no;o++){var s=r[o];if(s instanceof S&&s.isSettled)return s}return a(function(t,e){for(var n=function(){e=null,t=null,r.length=0,r=null},i=function(t,e){t&&(n(),t(e))},o=function(e){return i(t,e)},s=function(t){return i(e,t)},l=0,u=r;lf;f++)c(f)})}function r(e){for(var n=[],r=1;rl;l++){var a=i[l];if(a instanceof x&&a.isSettled)return a}return new t(function(t,e){for(var n=function(){e=null,t=null,i.length=0,i=null},r=function(t,e){t&&(n(),t(e))},o=function(e){return r(t,e)},s=function(t){return r(e,t)},l=0,a=i;l(value:any):value is PromiseLike\r\n{\r\n\treturn Type.hasMemberOfType(value, THEN, Type.FUNCTION);\r\n}\r\n\r\nfunction resolve(\r\n\tvalue:Promise.Resolution, resolver:(v:Promise.Resolution)=>any,\r\n\tpromiseFactory:(v:any)=>PromiseBase):PromiseBase\r\n{\r\n\tlet nextValue = resolver\r\n\t\t? resolver(value)\r\n\t\t: value;\r\n\r\n\treturn nextValue && isPromise(nextValue)\r\n\t\t? Promise.wrap(nextValue)\r\n\t\t: promiseFactory(nextValue);\r\n}\r\n\r\nfunction pass(source:PromiseBase, dest:Promise):Closure\r\n{\r\n\treturn ()=>\r\n\t{\r\n\t\tsource.thenThis(\r\n\t\t\tv=>\r\n\t\t\t{\r\n\t\t\t\tdest.resolve(v);\r\n\t\t\t},\r\n\t\t\te=>\r\n\t\t\t{\r\n\t\t\t\tdest.reject(e);\r\n\t\t\t});\r\n\t}\r\n}\r\n\r\nfunction passDelayed(source:PromiseBase, dest:Promise, ms:number):Closure\r\n{\r\n\treturn ()=>\r\n\t{\r\n\t\tsource.thenThis(\r\n\t\t\tv=>defer(()=>dest.resolve(v), ms),\r\n\t\t\te=>defer(()=>dest.reject(e), ms));\r\n\t}\r\n}\r\n\r\nfunction handleResolution(\r\n\tp:Promise,\r\n\tvalue:Promise.Resolution,\r\n\tresolver?:(v:Promise.Resolution)=>any):void\r\n{\r\n\ttry\r\n\t{\r\n\t\tlet v = resolver ? resolver(value) : value;\r\n\t\tif(p) p.resolve(v);\r\n\t}\r\n\tcatch(ex)\r\n\t{ p.reject(ex); }\r\n}\r\n\r\nfunction handleResolutionMethods(\r\n\ttargetFulfill:Promise.Fulfill,\r\n\ttargetReject:Promise.Reject,\r\n\tvalue:Promise.Resolution,\r\n\tresolver?:(v:Promise.Resolution)=>any):void\r\n{\r\n\ttry\r\n\t{\r\n\t\tlet v = resolver ? resolver(value) : value;\r\n\t\tif(targetFulfill) targetFulfill(v);\r\n\t}\r\n\tcatch(ex)\r\n\t{ if(targetReject) targetReject(ex); }\r\n}\r\n\r\nfunction handleDispatch(\r\n\tp:PromiseLike,\r\n\tonFulfilled:Promise.Fulfill,\r\n\tonRejected?:Promise.Reject):void\r\n{\r\n\tif(p instanceof PromiseBase)\r\n\t\tp.thenThis(onFulfilled, onRejected);\r\n\telse\r\n\t\tp.then(onFulfilled, onRejected);\r\n}\r\n\r\nexport class PromiseState\r\nextends DisposableBase\r\n{\r\n\r\n\tconstructor(\r\n\t\tprotected _state:Promise.State,\r\n\t\tprotected _result?:T,\r\n\t\tprotected _error?:any)\r\n\t{\r\n\t\tsuper();\r\n\t\tthis._disposableObjectName = PROMISE_STATE;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tthis._state = VOID0;\r\n\t\tthis._result = VOID0;\r\n\t\tthis._error = VOID0;\r\n\t}\r\n\r\n\tprotected getState():Promise.State\r\n\t{\r\n\t\treturn this._state;\r\n\t}\r\n\r\n\tget state():Promise.State\r\n\t{\r\n\t\treturn this._state;\r\n\t}\r\n\r\n\tget isPending():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Pending;\r\n\t}\r\n\r\n\tget isSettled():boolean\r\n\t{\r\n\t\treturn this.getState()!=Promise.State.Pending; // Will also include undefined==0 aka disposed!=resolved.\r\n\t}\r\n\r\n\tget isFulfilled():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Fulfilled;\r\n\t}\r\n\r\n\tget isRejected():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Rejected;\r\n\t}\r\n\r\n\t/*\r\n\t * Providing overrides allows for special defer or lazy sub classes.\r\n\t */\r\n\tprotected getResult():T\r\n\t{\r\n\t\treturn this._result;\r\n\t}\r\n\r\n\tget result():T\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.getResult();\r\n\t}\r\n\r\n\tprotected getError():any\r\n\t{\r\n\t\treturn this._error;\r\n\t}\r\n\r\n\tget error():any\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.getError();\r\n\t}\r\n\r\n}\r\n\r\nexport abstract class PromiseBase\r\nextends PromiseState implements PromiseLike\r\n{\r\n\tconstructor()\r\n\t{\r\n\t\tsuper(Promise.State.Pending);\r\n\t\tthis._disposableObjectName = PROMISE;\r\n\t}\r\n\r\n\t/**\r\n\t * Calls the respective handlers once the promise is resolved.\r\n\t * @param onFulfilled\r\n\t * @param onRejected\r\n\t */\r\n\tabstract thenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase;\r\n\r\n\t/**\r\n\t * Same as 'thenSynchronous' but does not return the result. Returns the current promise instead.\r\n\t * You may not need an additional promise result, and this will not create a new one.\r\n\t * Errors are not trapped.\r\n\t * @param onFulfilled\r\n\t * @param onRejected\r\n\t */\r\n\tabstract thenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase;\r\n\r\n\tthen(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\treturn Promise.pending((resolve, reject)=>\r\n\t\t{\r\n\t\t\tthis.thenThis(\r\n\t\t\t\tresult=>handleResolutionMethods(resolve, reject, result, onFulfilled),\r\n\t\t\t\terror=>onRejected\r\n\t\t\t\t\t? handleResolutionMethods(resolve, null, error, onRejected)\r\n\t\t\t\t\t: reject(error)\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from the time called before continuing.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayFromNow(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// TODO: need to figure out a way to not force a then call.\r\n\t\tvar p = Promise.pending();\r\n\t\tdefer(pass(this, p), milliseconds);\r\n\t\treturn p;\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from after this promise resolves.\r\n\t * If the promise is already resolved the delay will start from now.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayAfterResolve(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar p = Promise.pending();\r\n\t\tpassDelayed(this, p, milliseconds);\r\n\t\treturn p;\r\n\t}\r\n\r\n\t'catch'(onRejected:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.then(VOID0, onRejected)\r\n\t}\r\n\r\n\t'finally'(fin:()=>Promise.Resolution):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.then(fin, fin);\r\n\t}\r\n\r\n\tfinallyThis(fin:()=>void):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tvar f = ()=>deferImmediate(fin);\r\n\t\tthis.thenThis(f, f);\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n\r\nexport abstract class Resolvable extends PromiseBase\r\n{\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\ttry\r\n\t\t{\r\n\t\t\tswitch(this.state)\r\n\t\t\t{\r\n\t\t\t\tcase Promise.State.Fulfilled:\r\n\t\t\t\t\treturn onFulfilled\r\n\t\t\t\t\t\t? resolve(this._result, onFulfilled, Promise.resolve)\r\n\t\t\t\t\t\t: this; // Provided for catch cases.\r\n\t\t\t\tcase Promise.State.Rejected:\r\n\t\t\t\t\treturn onRejected\r\n\t\t\t\t\t\t? resolve(this._error, onRejected, Promise.resolve)\r\n\t\t\t\t\t\t: this;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\treturn new Rejected(ex);\r\n\t\t}\r\n\r\n\t\tthrow new Error(\"Invalid state for a resolved promise.\");\r\n\t}\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tswitch(this.state)\r\n\t\t{\r\n\t\t\tcase Promise.State.Fulfilled:\r\n\t\t\t\tif(onFulfilled) onFulfilled(this._result);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Promise.State.Rejected:\r\n\t\t\t\tif(onRejected) onRejected(this._error);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * The simplest usable version of a promise which returns synchronously the resolved state provided.\r\n */\r\nexport abstract class Resolved extends Resolvable\r\n{\r\n\tconstructor(state:Promise.State, result:T, error?:any)\r\n\t{\r\n\t\tsuper();\r\n\t\tthis._result = result;\r\n\t\tthis._error = error;\r\n\t\tthis._state = state;\r\n\t}\r\n\r\n\r\n}\r\n\r\n/**\r\n * A fulfilled Resolved. Provided for readability.\r\n */\r\nclass Fulfilled extends Resolved\r\n{\r\n\tconstructor(value?:T)\r\n\t{\r\n\t\tsuper(Promise.State.Fulfilled, value);\r\n\t}\r\n}\r\n\r\n/**\r\n * A rejected Resolved. Provided for readability.\r\n */\r\nclass Rejected extends Resolved\r\n{\r\n\tconstructor(error:any)\r\n\t{\r\n\t\tsuper(Promise.State.Rejected, VOID0, error);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Provided as a means for extending the interface of other PromiseLike objects.\r\n */\r\nclass PromiseWrapper extends Resolvable\r\n{\r\n\tconstructor(private _target:PromiseLike)\r\n\t{\r\n\t\tsuper();\r\n\r\n\t\tif(!_target)\r\n\t\t\tthrow new ArgumentNullException(TARGET);\r\n\r\n\t\tif(!isPromise(_target))\r\n\t\t\tthrow new ArgumentException(TARGET, \"Must be a promise-like object.\");\r\n\r\n\t\t_target.then(\r\n\t\t\tv=>\r\n\t\t\t{\r\n\t\t\t\tthis._state = Promise.State.Fulfilled;\r\n\t\t\t\tthis._result = v;\r\n\t\t\t\tthis._error = VOID0;\r\n\t\t\t\tthis._target = VOID0;\r\n\t\t\t},\r\n\t\t\te=>\r\n\t\t\t{\r\n\t\t\t\tthis._state = Promise.State.Rejected;\r\n\t\t\t\tthis._error = e;\r\n\t\t\t\tthis._target = VOID0;\r\n\t\t\t})\r\n\t}\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar t = this._target;\r\n\t\tif(!t) return super.thenSynchronous(onFulfilled, onRejected);\r\n\r\n\t\tvar p = Promise.pending();\r\n\t\thandleDispatch(t,\r\n\t\t\tresult=>handleResolution(p, result, onFulfilled),\r\n\t\t\terror=>onRejected ? handleResolution(p, error, onRejected) : p.reject(error));\r\n\t\treturn p;\r\n\t}\r\n\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar t = this._target;\r\n\t\tif(!t) return super.thenThis(onFulfilled, onRejected);\r\n\t\thandleDispatch(t, onFulfilled, onRejected);\r\n\t\treturn this;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._target = VOID0;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * This promise class that facilitates pending resolution.\r\n */\r\nexport class Promise extends Resolvable\r\n{\r\n\r\n\tprivate _waiting:IPromiseCallbacks[];\r\n\r\n\t/*\r\n\t * A note about deferring:\r\n\t * The caller can set resolveImmediate to true if they intend to initialize code that will end up being deferred itself.\r\n\t * This eliminates the extra defer that will occur internally.\r\n\t * But for the most part, resolveImmediate = false (the default) will ensure the constructor will not block.\r\n\t *\r\n\t * resolveUsing allows for the same ability but does not defer by default: allowing the caller to take on the work load.\r\n\t * If calling resolve or reject and a deferred response is desired, then use deferImmediate with a closure to do so.\r\n\t */\r\n\r\n\tconstructor(\r\n\t\tresolver?:Promise.Executor)\r\n\t{\r\n\t\tsuper();\r\n\r\n\t\tif(resolver) this.resolveUsing(resolver);\r\n\t}\r\n\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// Already fulfilled?\r\n\t\tif(this._state) return super.thenSynchronous(onFulfilled, onRejected);\r\n\r\n\t\tvar p = new Promise();\r\n\t\t(this._waiting || (this._waiting = []))\r\n\t\t\t.push(pools.PromiseCallbacks.init(onFulfilled, onRejected, p));\r\n\t\treturn p;\r\n\t}\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// Already fulfilled?\r\n\t\tif(this._state) return super.thenThis(onFulfilled, onRejected);\r\n\r\n\t\t(this._waiting || (this._waiting = []))\r\n\t\t\t.push(pools.PromiseCallbacks.init(onFulfilled, onRejected));\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\r\n\tprotected _onDispose()\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._resolvedCalled = VOID0;\r\n\t}\r\n\r\n\t// Protects against double calling.\r\n\tprotected _resolvedCalled:boolean;\r\n\r\n\tresolveUsing(\r\n\t\tresolver:Promise.Executor,\r\n\t\tthrowIfSettled:boolean = false)\r\n\t{\r\n\t\tif(!resolver)\r\n\t\t\tthrow new ArgumentNullException(\"resolver\");\r\n\t\tif(this._resolvedCalled)\r\n\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\tif(this.state)\r\n\t\t\tthrow new InvalidOperationException(\"Already resolved: \" + Promise.State[this.state]);\r\n\r\n\t\tthis._resolvedCalled = true;\r\n\r\n\t\tvar rejectHandler = (reason:any)=>\r\n\t\t{\r\n\t\t\tthis._resolvedCalled = false;\r\n\t\t\tthis.reject(reason);\r\n\t\t};\r\n\r\n\t\tvar fulfillHandler = (v:any)=>\r\n\t\t{\r\n\t\t\tthis._resolvedCalled = false;\r\n\t\t\tthis.resolve(v);\r\n\t\t};\r\n\r\n\t\t// In order to prevent blocking.\r\n\t\t// As much as we'd like to go synchronous here, it's just not how it's done.\r\n\t\tdeferImmediate(()=>\r\n\t\t{\r\n\t\t\tresolver(\r\n\t\t\t\tv=>\r\n\t\t\t\t{\r\n\t\t\t\t\tif(v==this) throw new InvalidOperationException(\"Cannot resolve a promise as itself.\");\r\n\t\t\t\t\tif(isPromise(v)) // If the result is a promise, then it will defer downstream.\r\n\t\t\t\t\t\thandleDispatch(v, fulfillHandler, rejectHandler);\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfulfillHandler(v);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t},\r\n\t\t\t\trejectHandler);\r\n\t\t});\r\n\r\n\r\n\t}\r\n\r\n\tresolve(result?:T, throwIfSettled:boolean = false):void\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tif(result==this)\r\n\t\t\tthrow new InvalidOperationException(\"Cannot resolve a promise as itself.\");\r\n\r\n\t\tif(this._state)\r\n\t\t{\r\n\t\t\t// Same value? Ignore...\r\n\t\t\tif(!throwIfSettled || this._state==Promise.State.Fulfilled && this._result===result) return;\r\n\t\t\tthrow new InvalidOperationException(\"Changing the fulfilled state/value of a promise is not supported.\");\r\n\t\t}\r\n\r\n\t\tif(this._resolvedCalled)\r\n\t\t{\r\n\t\t\tif(throwIfSettled)\r\n\t\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._state = Promise.State.Fulfilled;\r\n\r\n\t\tthis._result = result;\r\n\t\tthis._error = VOID0;\r\n\t\tvar o = this._waiting;\r\n\t\tif(o)\r\n\t\t{\r\n\t\t\tthis._waiting = VOID0;\r\n\t\t\tfor(let c of o)\r\n\t\t\t{\r\n\t\t\t\tlet {onFulfilled, promise} = c, p = (>promise);\r\n\t\t\t\tpools.PromiseCallbacks.recycle(c);\r\n\t\t\t\thandleResolution(p, result, onFulfilled);\r\n\t\t\t}\r\n\t\t\to.length = 0;\r\n\t\t}\r\n\t}\r\n\r\n\treject(error:any, throwIfSettled:boolean = false):void\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tif(this._state)\r\n\t\t{\r\n\t\t\t// Same value? Ignore...\r\n\t\t\tif(!throwIfSettled || this._state==Promise.State.Rejected && this._error===error) return;\r\n\t\t\tthrow new InvalidOperationException(\"Changing the rejected state/value of a promise is not supported.\");\r\n\t\t}\r\n\r\n\t\tif(this._resolvedCalled)\r\n\t\t{\r\n\t\t\tif(throwIfSettled)\r\n\t\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._state = Promise.State.Rejected;\r\n\r\n\t\tthis._error = error;\r\n\t\tvar o = this._waiting;\r\n\t\tif(o)\r\n\t\t{\r\n\t\t\tthis._waiting = null; // null = finished. undefined = hasn't started.\r\n\t\t\tfor(let c of o)\r\n\t\t\t{\r\n\t\t\t\tlet {onRejected, promise} = c, p = (>promise);\r\n\t\t\t\tpools.PromiseCallbacks.recycle(c);\r\n\t\t\t\tif(onRejected) handleResolution(p, error, onRejected);\r\n\t\t\t\telse p.reject(error);\r\n\t\t\t}\r\n\t\t\to.length = 0;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * A promise that waits for the first then to trigger the resolver.\r\n */\r\nexport class LazyPromise extends Promise\r\n{\r\n\r\n\tconstructor(private _resolver:Promise.Executor)\r\n\t{\r\n\t\tsuper();\r\n\t\tif(!_resolver) throw new ArgumentNullException(\"resolver\");\r\n\t\tthis._resolvedCalled = true;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._resolver = VOID0;\r\n\t}\r\n\r\n\tprivate _onThen():void\r\n\t{\r\n\t\tvar r = this._resolver;\r\n\t\tif(r)\r\n\t\t{\r\n\t\t\tthis._resolver = VOID0;\r\n\t\t\tthis._resolvedCalled = false;\r\n\t\t\tthis.resolveUsing(r);\r\n\t\t}\r\n\t}\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis._onThen();\r\n\t\treturn super.thenSynchronous(onFulfilled, onRejected);\r\n\t}\r\n\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis._onThen();\r\n\t\treturn super.thenThis(onFulfilled, onRejected);\r\n\t}\r\n}\r\n\r\nmodule pools\r\n{\r\n\r\n\t// export module pending\r\n\t// {\r\n\t//\r\n\t//\r\n\t// \tvar pool:ObjectPool>;\r\n\t//\r\n\t// \tfunction getPool()\r\n\t// \t{\r\n\t// \t\treturn pool || (pool = new ObjectPool>(40, factory, c=>c.dispose()));\r\n\t// \t}\r\n\t//\r\n\t// \tfunction factory():Promise\r\n\t// \t{\r\n\t// \t\treturn new Promise();\r\n\t// \t}\r\n\t//\r\n\t// \texport function get():Promise\r\n\t// \t{\r\n\t// \t\tvar p:any = getPool().take();\r\n\t// \t\tp.__wasDisposed = false;\r\n\t// \t\tp._state = Promise.State.Pending;\r\n\t// \t\treturn p;\r\n\t// \t}\r\n\t//\r\n\t// \texport function recycle(c:Promise):void\r\n\t// \t{\r\n\t// \t\tif(c) getPool().add(c);\r\n\t// \t}\r\n\t//\r\n\t// }\r\n\t//\r\n\t// export function recycle(c:PromiseBase):void\r\n\t// {\r\n\t// \tif(!c) return;\r\n\t// \tif(c instanceof Promise && c.constructor==Promise) pending.recycle(c);\r\n\t// \telse c.dispose();\r\n\t// }\r\n\r\n\r\n\texport module PromiseCallbacks\r\n\t{\r\n\r\n\t\tvar pool:ObjectPool>;\r\n\r\n\t\tfunction getPool()\r\n\t\t{\r\n\t\t\treturn pool\r\n\t\t\t\t|| (pool = new ObjectPool>(40, factory, c=>\r\n\t\t\t\t{\r\n\t\t\t\t\tc.onFulfilled = null;\r\n\t\t\t\t\tc.onRejected = null;\r\n\t\t\t\t\tc.promise = null;\r\n\t\t\t\t}));\r\n\t\t}\r\n\r\n\t\tfunction factory():IPromiseCallbacks\r\n\t\t{\r\n\t\t\treturn {\r\n\t\t\t\tonFulfilled: null,\r\n\t\t\t\tonRejected: null,\r\n\t\t\t\tpromise: null\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\texport function init(\r\n\t\t\tonFulfilled:Promise.Fulfill,\r\n\t\t\tonRejected?:Promise.Reject,\r\n\t\t\tpromise?:PromiseLike):IPromiseCallbacks\r\n\t\t{\r\n\r\n\t\t\tvar c = getPool().take();\r\n\t\t\tc.onFulfilled = onFulfilled;\r\n\t\t\tc.onRejected = onRejected;\r\n\t\t\tc.promise = promise;\r\n\t\t\treturn c;\r\n\t\t}\r\n\r\n\t\texport function recycle(c:IPromiseCallbacks):void\r\n\t\t{\r\n\t\t\tgetPool().add(c);\r\n\t\t}\r\n\t}\r\n\r\n\r\n}\r\n\r\n\r\nexport module Promise\r\n{\r\n\r\n\t/**\r\n\t * The state of a promise.\r\n\t * https://github.com/domenic/promises-unwrapping/blob/master/docs/states-and-fates.md\r\n\t * If a promise is disposed the value will be undefined which will also evaluate (promise.state)==false.\r\n\t */\r\n\texport enum State {\r\n\t\tPending = 0,\r\n\t\tFulfilled = 1,\r\n\t\tRejected = -1\r\n\t}\r\n\tObject.freeze(State);\r\n\r\n\texport type Resolution = PromiseLike|TResult|void;\r\n\r\n\texport interface Fulfill\r\n\t{\r\n\t\t(value:T):Resolution\r\n\t}\r\n\r\n\texport interface Reject\r\n\t{\r\n\t\t(err?:any):Resolution\r\n\t}\r\n\r\n\texport interface Then\r\n\t{\r\n\t\t(\r\n\t\t\tonFulfilled:Fulfill,\r\n\t\t\tonRejected?:Reject):PromiseBase\r\n\t}\r\n\r\n\texport interface Executor\r\n\t{\r\n\t\t(\r\n\t\t\tresolve:(value?:T | PromiseLike) => void,\r\n\t\t\treject:(reason?:any) => void):void;\r\n\t}\r\n\r\n\t// /**\r\n\t// * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved\r\n\t// * or rejected.\r\n\t// * @param values An array of Promises.\r\n\t// * @returns A new Promise.\r\n\t// */\r\n\t// // race(values: Iterable>): Promise;\r\n\r\n\r\n\t/**\r\n\t * Returns a promise that is fulfilled with an array containing the fulfillment value of each promise, or is rejected with the same rejection reason as the first promise to be rejected.\r\n\t */\r\n\texport function all(promises:PromiseLike[]):PromiseBase\r\n\texport function all(promise:PromiseLike, ...rest:PromiseLike[]):PromiseBase\r\n\texport function all(\r\n\t\tfirst:PromiseLike|PromiseLike[],\r\n\t\t...rest:PromiseLike[]):PromiseBase\r\n\t{\r\n\t\tif(!first && !rest.length) throw new ArgumentNullException(\"promises\");\r\n\t\tvar promises = (Array.isArray(first) ? first : [first]).concat(rest); // yay a copy!\r\n\t\tif(!promises.length || promises.every(v=>!v)) return new Fulfilled(promises); // it's a new empty, reuse it. :|\r\n\r\n\t\t// Eliminate deferred and take the parent since all .then calls happen on next cycle anyway.\r\n\t\treturn pending((resolve, reject)=>\r\n\t\t{\r\n\t\t\tlet checkedAll = false;\r\n\t\t\tlet result:any[] = [];\r\n\t\t\tlet len = promises.length;\r\n\t\t\tresult.length = len;\r\n\t\t\t// Using a set instead of -- a number is more reliable if just in case one of the provided promises resolves twice.\r\n\t\t\tlet remaining = new Set(promises.map((v, i)=>i)); // get all the indexes...\r\n\r\n\t\t\tlet cleanup = ()=>\r\n\t\t\t{\r\n\t\t\t\treject = null;\r\n\t\t\t\tresolve = null;\r\n\t\t\t\tpromises.length = 0;\r\n\t\t\t\tpromises = null;\r\n\t\t\t\tremaining.dispose();\r\n\t\t\t\tremaining = null;\r\n\t\t\t};\r\n\r\n\t\t\tlet checkIfShouldResolve = ()=>\r\n\t\t\t{\r\n\t\t\t\tlet r = resolve;\r\n\t\t\t\tif(r && !remaining.count)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(result);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onFulfill = (v:any, i:number)=>\r\n\t\t\t{\r\n\t\t\t\tif(resolve)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult[i] = v;\r\n\t\t\t\t\tremaining.remove(i);\r\n\t\t\t\t\tcheckIfShouldResolve();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onReject = (e?:any)=>\r\n\t\t\t{\r\n\t\t\t\tlet r = reject;\r\n\t\t\t\tif(r)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tfor(let i = 0; remaining && ionFulfill(v, i), onReject);\r\n\t\t\t\telse remaining.remove(i);\r\n\t\t\t\tcheckIfShouldResolve();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a promise for the first of an array of promises to become settled.\r\n\t */\r\n\texport function race(promises:PromiseLike[]):PromiseBase\r\n\texport function race(promise:PromiseLike, ...rest:PromiseLike[]):PromiseBase\r\n\texport function race(\r\n\t\tfirst:PromiseLike|PromiseLike[],\r\n\t\t...rest:PromiseLike[]):PromiseBase\r\n\t{\r\n\t\tvar promises = first && (Array.isArray(first) ? first : [first]).concat(rest); // yay a copy?\r\n\t\tif(!promises || !promises.length || !(promises = promises.filter(v=>v!=null)).length)\r\n\t\t\tthrow new ArgumentException(\"Nothing to wait for.\");\r\n\r\n\t\tvar len = promises.length;\r\n\r\n\t\t// Only one? Nothing to race.\r\n\t\tif(len==1) return wrap(promises[0]);\r\n\r\n\t\t// Look for already resolved promises and the first one wins.\r\n\t\tfor(let i = 0; i\r\n\t\t{\r\n\t\t\tlet cleanup = ()=>\r\n\t\t\t{\r\n\t\t\t\treject = null;\r\n\t\t\t\tresolve = null;\r\n\t\t\t\tpromises.length = 0;\r\n\t\t\t\tpromises = null;\r\n\t\t\t};\r\n\r\n\t\t\tlet onResolve = (r:(x:any)=>void, v:any)=>\r\n\t\t\t{\r\n\t\t\t\tif(r)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(v);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onFulfill = (v:any)=> onResolve(resolve, v);\r\n\t\t\tlet onReject = (e?:any)=> onResolve(reject, e);\r\n\r\n\t\t\tfor(let p of promises)\r\n\t\t\t{\r\n\t\t\t\tif(!resolve) break;\r\n\t\t\t\tp.then(onFulfill, onReject);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new resolved promise .\r\n\t * @returns A resolved promise.\r\n\t */\r\n\texport function resolve():PromiseBase\r\n\r\n\t/**\r\n\t * Creates a new resolved promise for the provided value.\r\n\t * @param value A value or promise.\r\n\t * @returns A promise whose internal state matches the provided promise.\r\n\t */\r\n\texport function resolve(value:T | PromiseLike):PromiseBase;\r\n\texport function resolve(value?:any):PromiseBase\r\n\t{\r\n\r\n\t\treturn isPromise(value) ? wrap(value) : new Fulfilled(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new rejected promise for the provided reason.\r\n\t * @param reason The reason the promise was rejected.\r\n\t * @returns A new rejected Promise.\r\n\t */\r\n\texport function reject(reason:T):PromiseBase\r\n\t{\r\n\t\treturn new Rejected(reason);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Provides a promise that will trigger the resolver at the first 'then' request.\r\n\t * @param resolver\r\n\t * @returns {Promise}\r\n\t */\r\n\texport function lazy(resolver:Promise.Executor):LazyPromise\r\n\t{\r\n\t\treturn new LazyPromise(resolver);\r\n\t}\r\n\r\n\t/**\r\n\t * Takes any Promise-Like object and ensures an extended version of it from this module.\r\n\t * @param target The Promise-Like object\r\n\t * @returns A new target that simply extends the target.\r\n\t */\r\n\texport function wrap(target:PromiseLike):PromiseBase\r\n\t{\r\n\t\tif(!target) throw new ArgumentNullException(TARGET);\r\n\t\treturn target instanceof Promise ? this : new PromiseWrapper(target);\r\n\t}\r\n\r\n\t/**\r\n\t * A function that acts like a 'then' method (aka then-able) can be extended by providing a function that takes an onFulfill and onReject.\r\n\t * @param then\r\n\t * @returns {PromiseWrapper}\r\n\t */\r\n\texport function createFrom(then:Then):PromiseBase\r\n\t{\r\n\t\tif(!then) throw new ArgumentNullException(THEN);\r\n\t\treturn new PromiseWrapper({then: then});\r\n\t}\r\n\r\n\t/**\r\n\t * Provides a promise that can be resolved later.\r\n\t * @returns {Promise}\r\n\t */\r\n\texport function pending(resolver?:Promise.Executor):Promise\r\n\t{\r\n\t\treturn new Promise(resolver);\r\n\t\t// var p = pools.pending.get();\r\n\t\t// if(resolver) p.resolveUsing(resolver);\r\n\t\t// return p;\r\n\t}\r\n\r\n\r\n}\r\n\r\n\r\ninterface IPromiseCallbacks\r\n{\r\n\tonFulfilled:Promise.Fulfill;\r\n\tonRejected:Promise.Reject;\r\n\tpromise?:PromiseLike;\r\n}\r\n"]} \ No newline at end of file +{"version":3,"sources":["System/Promises/Promise.js","System/Promises/Promise.ts"],"names":["__extends","this","d","b","__","constructor","p","hasOwnProperty","prototype","Object","create","factory","module","exports","v","require","undefined","define","amd","isPromise","value","Types_1","hasMemberOfType","THEN","FUNCTION","resolve","resolver","promiseFactory","nextValue","Promise","wrap","handleResolution","ex","reject","handleResolutionMethods","targetFulfill","targetReject","handleDispatch","onFulfilled","onRejected","PromiseBase","thenThis","then","deferImmediate_1","DisposableBase_1","InvalidOperationException_1","ArgumentException_1","ArgumentNullException_1","ObjectPool_1","Set_1","defer_1","VOID0","PROMISE","PROMISE_STATE","TARGET","PromiseState","_super","_state","_result","_error","call","_disposableObjectName","_onDispose","getState","defineProperty","get","enumerable","configurable","State","Pending","Fulfilled","Rejected","getResult","throwIfDisposed","getError","DisposableBase","_this","result","error","delayFromNow","milliseconds","defer","e","delayAfterResolve","isSettled","fin","finallyThis","f","deferImmediate","Resolvable","apply","arguments","thenSynchronous","state","Error","Resolved","PromiseWrapper","_target","ArgumentNullException","ArgumentException","t","forceSynchronous","resolveUsing","_waiting","push","pools","PromiseCallbacks","init","_resolvedCalled","throwIfSettled","InvalidOperationException","rejectHandler","reason","console","warn","fulfillHandler","r","o","_i","o_1","length","c","promise","recycle","o_2","getPool","pool","ObjectPool","take","add","all","first","rest","promises","Array","isArray","concat","every","len","remaining","Set","map","i","cleanup","dispose","checkIfShouldResolve","count","onFulfill","remove","onReject","_loop_1","race","filter","onResolve","promises_1","p_1","target","createFrom","freeze"],"mappings":"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","file":"System/Promises/Promise.js","sourcesContent":["/*!\n * @author electricessence / https://github.com/electricessence/\n * Licensing: MIT\n * Although most of the following code is written from scratch, it is\n * heavily influenced by Q (https://github.com/kriskowal/q) and uses some of Q's spec.\n */\nvar __extends = (this && this.__extends) || function (d, b) {\n for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\n(function (factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n var v = factory(require, exports); if (v !== undefined) module.exports = v;\n }\n else if (typeof define === 'function' && define.amd) {\n define([\"require\", \"exports\", \"../Types\", \"../Threading/deferImmediate\", \"../Disposable/DisposableBase\", \"../Exceptions/InvalidOperationException\", \"../Exceptions/ArgumentException\", \"../Exceptions/ArgumentNullException\", \"../Disposable/ObjectPool\", \"../Collections/Set\", \"../Threading/defer\"], factory);\n }\n})(function (require, exports) {\n \"use strict\";\n var Types_1 = require(\"../Types\");\n var deferImmediate_1 = require(\"../Threading/deferImmediate\");\n var DisposableBase_1 = require(\"../Disposable/DisposableBase\");\n var InvalidOperationException_1 = require(\"../Exceptions/InvalidOperationException\");\n var ArgumentException_1 = require(\"../Exceptions/ArgumentException\");\n var ArgumentNullException_1 = require(\"../Exceptions/ArgumentNullException\");\n var ObjectPool_1 = require(\"../Disposable/ObjectPool\");\n var Set_1 = require(\"../Collections/Set\");\n var defer_1 = require(\"../Threading/defer\");\n var VOID0 = void 0, PROMISE = \"Promise\", PROMISE_STATE = PROMISE + \"State\", THEN = \"then\", TARGET = \"target\";\n function isPromise(value) {\n return Types_1.default.hasMemberOfType(value, THEN, Types_1.default.FUNCTION);\n }\n function resolve(value, resolver, promiseFactory) {\n var nextValue = resolver\n ? resolver(value)\n : value;\n return nextValue && isPromise(nextValue)\n ? Promise.wrap(nextValue)\n : promiseFactory(nextValue);\n }\n function handleResolution(p, value, resolver) {\n try {\n var v = resolver ? resolver(value) : value;\n if (p)\n p.resolve(v);\n }\n catch (ex) {\n p.reject(ex);\n }\n }\n function handleResolutionMethods(targetFulfill, targetReject, value, resolver) {\n try {\n var v = resolver ? resolver(value) : value;\n if (targetFulfill)\n targetFulfill(v);\n }\n catch (ex) {\n if (targetReject)\n targetReject(ex);\n }\n }\n function handleDispatch(p, onFulfilled, onRejected) {\n if (p instanceof PromiseBase)\n p.thenThis(onFulfilled, onRejected);\n else\n p.then(onFulfilled, onRejected);\n }\n var PromiseState = (function (_super) {\n __extends(PromiseState, _super);\n function PromiseState(_state, _result, _error) {\n _super.call(this);\n this._state = _state;\n this._result = _result;\n this._error = _error;\n this._disposableObjectName = PROMISE_STATE;\n }\n PromiseState.prototype._onDispose = function () {\n this._state = VOID0;\n this._result = VOID0;\n this._error = VOID0;\n };\n PromiseState.prototype.getState = function () {\n return this._state;\n };\n Object.defineProperty(PromiseState.prototype, \"state\", {\n get: function () {\n return this._state;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PromiseState.prototype, \"isPending\", {\n get: function () {\n return this.getState() === Promise.State.Pending;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PromiseState.prototype, \"isSettled\", {\n get: function () {\n return this.getState() != Promise.State.Pending;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PromiseState.prototype, \"isFulfilled\", {\n get: function () {\n return this.getState() === Promise.State.Fulfilled;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PromiseState.prototype, \"isRejected\", {\n get: function () {\n return this.getState() === Promise.State.Rejected;\n },\n enumerable: true,\n configurable: true\n });\n PromiseState.prototype.getResult = function () {\n return this._result;\n };\n Object.defineProperty(PromiseState.prototype, \"result\", {\n get: function () {\n this.throwIfDisposed();\n return this.getResult();\n },\n enumerable: true,\n configurable: true\n });\n PromiseState.prototype.getError = function () {\n return this._error;\n };\n Object.defineProperty(PromiseState.prototype, \"error\", {\n get: function () {\n this.throwIfDisposed();\n return this.getError();\n },\n enumerable: true,\n configurable: true\n });\n return PromiseState;\n }(DisposableBase_1.DisposableBase));\n exports.PromiseState = PromiseState;\n var PromiseBase = (function (_super) {\n __extends(PromiseBase, _super);\n function PromiseBase() {\n _super.call(this, Promise.State.Pending);\n this._disposableObjectName = PROMISE;\n }\n PromiseBase.prototype.then = function (onFulfilled, onRejected) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _this.thenThis(function (result) { return handleResolutionMethods(resolve, reject, result, onFulfilled); }, function (error) { return onRejected\n ? handleResolutionMethods(resolve, null, error, onRejected)\n : reject(error); });\n });\n };\n PromiseBase.prototype.delayFromNow = function (milliseconds) {\n var _this = this;\n if (milliseconds === void 0) { milliseconds = 0; }\n this.throwIfDisposed();\n return new Promise(function (resolve, reject) {\n defer_1.defer(function () {\n _this.thenThis(function (v) { return resolve(v); }, function (e) { return reject(e); });\n }, milliseconds);\n }, true);\n };\n PromiseBase.prototype.delayAfterResolve = function (milliseconds) {\n var _this = this;\n if (milliseconds === void 0) { milliseconds = 0; }\n this.throwIfDisposed();\n if (this.isSettled)\n return this.delayFromNow(milliseconds);\n return new Promise(function (resolve, reject) {\n _this.thenThis(function (v) { return defer_1.defer(function () { return resolve(v); }, milliseconds); }, function (e) { return defer_1.defer(function () { return reject(e); }, milliseconds); });\n }, true);\n };\n PromiseBase.prototype['catch'] = function (onRejected) {\n this.throwIfDisposed();\n return this.then(VOID0, onRejected);\n };\n PromiseBase.prototype['finally'] = function (fin) {\n this.throwIfDisposed();\n return this.then(fin, fin);\n };\n PromiseBase.prototype.finallyThis = function (fin) {\n this.throwIfDisposed();\n var f = function () { return deferImmediate_1.deferImmediate(fin); };\n this.thenThis(f, f);\n return this;\n };\n return PromiseBase;\n }(PromiseState));\n exports.PromiseBase = PromiseBase;\n var Resolvable = (function (_super) {\n __extends(Resolvable, _super);\n function Resolvable() {\n _super.apply(this, arguments);\n }\n Resolvable.prototype.thenSynchronous = function (onFulfilled, onRejected) {\n this.throwIfDisposed();\n try {\n switch (this.state) {\n case Promise.State.Fulfilled:\n return onFulfilled\n ? resolve(this._result, onFulfilled, Promise.resolve)\n : this;\n case Promise.State.Rejected:\n return onRejected\n ? resolve(this._error, onRejected, Promise.resolve)\n : this;\n }\n }\n catch (ex) {\n return new Rejected(ex);\n }\n throw new Error(\"Invalid state for a resolved promise.\");\n };\n Resolvable.prototype.thenThis = function (onFulfilled, onRejected) {\n this.throwIfDisposed();\n switch (this.state) {\n case Promise.State.Fulfilled:\n if (onFulfilled)\n onFulfilled(this._result);\n break;\n case Promise.State.Rejected:\n if (onRejected)\n onRejected(this._error);\n break;\n }\n return this;\n };\n return Resolvable;\n }(PromiseBase));\n exports.Resolvable = Resolvable;\n var Resolved = (function (_super) {\n __extends(Resolved, _super);\n function Resolved(state, result, error) {\n _super.call(this);\n this._result = result;\n this._error = error;\n this._state = state;\n }\n return Resolved;\n }(Resolvable));\n exports.Resolved = Resolved;\n var Fulfilled = (function (_super) {\n __extends(Fulfilled, _super);\n function Fulfilled(value) {\n _super.call(this, Promise.State.Fulfilled, value);\n }\n return Fulfilled;\n }(Resolved));\n var Rejected = (function (_super) {\n __extends(Rejected, _super);\n function Rejected(error) {\n _super.call(this, Promise.State.Rejected, VOID0, error);\n }\n return Rejected;\n }(Resolved));\n var PromiseWrapper = (function (_super) {\n __extends(PromiseWrapper, _super);\n function PromiseWrapper(_target) {\n var _this = this;\n _super.call(this);\n this._target = _target;\n if (!_target)\n throw new ArgumentNullException_1.ArgumentNullException(TARGET);\n if (!isPromise(_target))\n throw new ArgumentException_1.ArgumentException(TARGET, \"Must be a promise-like object.\");\n _target.then(function (v) {\n _this._state = Promise.State.Fulfilled;\n _this._result = v;\n _this._error = VOID0;\n _this._target = VOID0;\n }, function (e) {\n _this._state = Promise.State.Rejected;\n _this._error = e;\n _this._target = VOID0;\n });\n }\n PromiseWrapper.prototype.thenSynchronous = function (onFulfilled, onRejected) {\n this.throwIfDisposed();\n var t = this._target;\n if (!t)\n return _super.prototype.thenSynchronous.call(this, onFulfilled, onRejected);\n return new Promise(function (resolve, reject) {\n handleDispatch(t, function (result) { return handleResolutionMethods(resolve, reject, result, onFulfilled); }, function (error) { return onRejected\n ? handleResolutionMethods(resolve, null, error, onRejected)\n : reject(error); });\n }, true);\n };\n PromiseWrapper.prototype.thenThis = function (onFulfilled, onRejected) {\n this.throwIfDisposed();\n var t = this._target;\n if (!t)\n return _super.prototype.thenThis.call(this, onFulfilled, onRejected);\n handleDispatch(t, onFulfilled, onRejected);\n return this;\n };\n PromiseWrapper.prototype._onDispose = function () {\n _super.prototype._onDispose.call(this);\n this._target = VOID0;\n };\n return PromiseWrapper;\n }(Resolvable));\n var Promise = (function (_super) {\n __extends(Promise, _super);\n function Promise(resolver, forceSynchronous) {\n if (forceSynchronous === void 0) { forceSynchronous = false; }\n _super.call(this);\n if (resolver)\n this.resolveUsing(resolver, forceSynchronous);\n }\n Promise.prototype.thenSynchronous = function (onFulfilled, onRejected) {\n this.throwIfDisposed();\n if (this._state)\n return _super.prototype.thenSynchronous.call(this, onFulfilled, onRejected);\n var p = new Promise();\n (this._waiting || (this._waiting = []))\n .push(pools.PromiseCallbacks.init(onFulfilled, onRejected, p));\n return p;\n };\n Promise.prototype.thenThis = function (onFulfilled, onRejected) {\n this.throwIfDisposed();\n if (this._state)\n return _super.prototype.thenThis.call(this, onFulfilled, onRejected);\n (this._waiting || (this._waiting = []))\n .push(pools.PromiseCallbacks.init(onFulfilled, onRejected));\n return this;\n };\n Promise.prototype._onDispose = function () {\n _super.prototype._onDispose.call(this);\n this._resolvedCalled = VOID0;\n };\n Promise.prototype.resolveUsing = function (resolver, forceSynchronous, throwIfSettled) {\n var _this = this;\n if (forceSynchronous === void 0) { forceSynchronous = false; }\n if (throwIfSettled === void 0) { throwIfSettled = false; }\n if (!resolver)\n throw new ArgumentNullException_1.ArgumentNullException(\"resolver\");\n if (this._resolvedCalled)\n throw new InvalidOperationException_1.InvalidOperationException(\".resolve() already called.\");\n if (this.state)\n throw new InvalidOperationException_1.InvalidOperationException(\"Already resolved: \" + Promise.State[this.state]);\n this._resolvedCalled = true;\n var state = 0;\n var rejectHandler = function (reason) {\n if (state) {\n console.warn(state == -1 ? \"Rejection called multiple times\" : \"Rejection called after fulfilled.\");\n }\n else {\n state = -1;\n _this._resolvedCalled = false;\n _this.reject(reason);\n }\n };\n var fulfillHandler = function (v) {\n if (state) {\n console.warn(state == 1 ? \"Fulfill called multiple times\" : \"Fulfill called after rejection.\");\n }\n else {\n state = 1;\n _this._resolvedCalled = false;\n _this.resolve(v);\n }\n };\n var r = function () { return resolver(function (v) {\n if (v == _this)\n throw new InvalidOperationException_1.InvalidOperationException(\"Cannot resolve a promise as itself.\");\n if (isPromise(v))\n handleDispatch(v, fulfillHandler, rejectHandler);\n else {\n fulfillHandler(v);\n }\n }, rejectHandler); };\n if (forceSynchronous)\n r();\n else\n deferImmediate_1.deferImmediate(r);\n };\n Promise.prototype.resolve = function (result, throwIfSettled) {\n if (throwIfSettled === void 0) { throwIfSettled = false; }\n this.throwIfDisposed();\n if (result == this)\n throw new InvalidOperationException_1.InvalidOperationException(\"Cannot resolve a promise as itself.\");\n if (this._state) {\n if (!throwIfSettled || this._state == Promise.State.Fulfilled && this._result === result)\n return;\n throw new InvalidOperationException_1.InvalidOperationException(\"Changing the fulfilled state/value of a promise is not supported.\");\n }\n if (this._resolvedCalled) {\n if (throwIfSettled)\n throw new InvalidOperationException_1.InvalidOperationException(\".resolve() already called.\");\n return;\n }\n this._state = Promise.State.Fulfilled;\n this._result = result;\n this._error = VOID0;\n var o = this._waiting;\n if (o) {\n this._waiting = VOID0;\n for (var _i = 0, o_1 = o; _i < o_1.length; _i++) {\n var c = o_1[_i];\n var onFulfilled = c.onFulfilled, promise = c.promise, p = promise;\n pools.PromiseCallbacks.recycle(c);\n handleResolution(p, result, onFulfilled);\n }\n o.length = 0;\n }\n };\n Promise.prototype.reject = function (error, throwIfSettled) {\n if (throwIfSettled === void 0) { throwIfSettled = false; }\n this.throwIfDisposed();\n if (this._state) {\n if (!throwIfSettled || this._state == Promise.State.Rejected && this._error === error)\n return;\n throw new InvalidOperationException_1.InvalidOperationException(\"Changing the rejected state/value of a promise is not supported.\");\n }\n if (this._resolvedCalled) {\n if (throwIfSettled)\n throw new InvalidOperationException_1.InvalidOperationException(\".resolve() already called.\");\n return;\n }\n this._state = Promise.State.Rejected;\n this._error = error;\n var o = this._waiting;\n if (o) {\n this._waiting = null;\n for (var _i = 0, o_2 = o; _i < o_2.length; _i++) {\n var c = o_2[_i];\n var onRejected = c.onRejected, promise = c.promise, p = promise;\n pools.PromiseCallbacks.recycle(c);\n if (onRejected)\n handleResolution(p, error, onRejected);\n else\n p.reject(error);\n }\n o.length = 0;\n }\n };\n return Promise;\n }(Resolvable));\n exports.Promise = Promise;\n var pools;\n (function (pools) {\n var PromiseCallbacks;\n (function (PromiseCallbacks) {\n var pool;\n function getPool() {\n return pool\n || (pool = new ObjectPool_1.ObjectPool(40, factory, function (c) {\n c.onFulfilled = null;\n c.onRejected = null;\n c.promise = null;\n }));\n }\n function factory() {\n return {\n onFulfilled: null,\n onRejected: null,\n promise: null\n };\n }\n function init(onFulfilled, onRejected, promise) {\n var c = getPool().take();\n c.onFulfilled = onFulfilled;\n c.onRejected = onRejected;\n c.promise = promise;\n return c;\n }\n PromiseCallbacks.init = init;\n function recycle(c) {\n getPool().add(c);\n }\n PromiseCallbacks.recycle = recycle;\n })(PromiseCallbacks = pools.PromiseCallbacks || (pools.PromiseCallbacks = {}));\n })(pools || (pools = {}));\n var Promise;\n (function (Promise) {\n (function (State) {\n State[State[\"Pending\"] = 0] = \"Pending\";\n State[State[\"Fulfilled\"] = 1] = \"Fulfilled\";\n State[State[\"Rejected\"] = -1] = \"Rejected\";\n })(Promise.State || (Promise.State = {}));\n var State = Promise.State;\n Object.freeze(State);\n function all(first) {\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n if (!first && !rest.length)\n throw new ArgumentNullException_1.ArgumentNullException(\"promises\");\n var promises = (Array.isArray(first) ? first : [first]).concat(rest);\n if (!promises.length || promises.every(function (v) { return !v; }))\n return new Fulfilled(promises);\n return new Promise(function (resolve, reject) {\n var checkedAll = false;\n var result = [];\n var len = promises.length;\n result.length = len;\n var remaining = new Set_1.Set(promises.map(function (v, i) { return i; }));\n var cleanup = function () {\n reject = null;\n resolve = null;\n promises.length = 0;\n promises = null;\n remaining.dispose();\n remaining = null;\n };\n var checkIfShouldResolve = function () {\n var r = resolve;\n if (r && !remaining.count) {\n cleanup();\n r(result);\n }\n };\n var onFulfill = function (v, i) {\n if (resolve) {\n result[i] = v;\n remaining.remove(i);\n checkIfShouldResolve();\n }\n };\n var onReject = function (e) {\n var r = reject;\n if (r) {\n cleanup();\n r(e);\n }\n };\n var _loop_1 = function(i) {\n var p = promises[i];\n if (p)\n p.then(function (v) { return onFulfill(v, i); }, onReject);\n else\n remaining.remove(i);\n checkIfShouldResolve();\n };\n for (var i = 0; remaining && i < len; i++) {\n _loop_1(i);\n }\n });\n }\n Promise.all = all;\n function race(first) {\n var rest = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n rest[_i - 1] = arguments[_i];\n }\n var promises = first && (Array.isArray(first) ? first : [first]).concat(rest);\n if (!promises || !promises.length || !(promises = promises.filter(function (v) { return v != null; })).length)\n throw new ArgumentException_1.ArgumentException(\"Nothing to wait for.\");\n var len = promises.length;\n if (len == 1)\n return wrap(promises[0]);\n for (var i = 0; i < len; i++) {\n var p = promises[i];\n if (p instanceof PromiseBase && p.isSettled)\n return p;\n }\n return new Promise(function (resolve, reject) {\n var cleanup = function () {\n reject = null;\n resolve = null;\n promises.length = 0;\n promises = null;\n };\n var onResolve = function (r, v) {\n if (r) {\n cleanup();\n r(v);\n }\n };\n var onFulfill = function (v) { return onResolve(resolve, v); };\n var onReject = function (e) { return onResolve(reject, e); };\n for (var _i = 0, promises_1 = promises; _i < promises_1.length; _i++) {\n var p_1 = promises_1[_i];\n if (!resolve)\n break;\n p_1.then(onFulfill, onReject);\n }\n });\n }\n Promise.race = race;\n function resolve(value) {\n return isPromise(value) ? wrap(value) : new Fulfilled(value);\n }\n Promise.resolve = resolve;\n function reject(reason) {\n return new Rejected(reason);\n }\n Promise.reject = reject;\n function wrap(target) {\n if (!target)\n throw new ArgumentNullException_1.ArgumentNullException(TARGET);\n return target instanceof Promise ? this : new PromiseWrapper(target);\n }\n Promise.wrap = wrap;\n function createFrom(then) {\n if (!then)\n throw new ArgumentNullException_1.ArgumentNullException(THEN);\n return new PromiseWrapper({ then: then });\n }\n Promise.createFrom = createFrom;\n })(Promise = exports.Promise || (exports.Promise = {}));\n});\n","/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT\r\n * Although most of the following code is written from scratch, it is\r\n * heavily influenced by Q (https://github.com/kriskowal/q) and uses some of Q's spec.\r\n */\r\n\r\n/*\r\n * Note: The Promise herein does NOT defer by default.\r\n * If you require a promise to defer its result then use the .defer() or .delay(ms) methods.\r\n * The API attempts to follow ES6 style promises.\r\n */\r\n\r\nimport Type from \"../Types\";\r\nimport {deferImmediate} from \"../Threading/deferImmediate\";\r\nimport {DisposableBase} from \"../Disposable/DisposableBase\";\r\nimport {InvalidOperationException} from \"../Exceptions/InvalidOperationException\";\r\nimport {ArgumentException} from \"../Exceptions/ArgumentException\";\r\nimport {ArgumentNullException} from \"../Exceptions/ArgumentNullException\";\r\nimport {ObjectPool} from \"../Disposable/ObjectPool\";\r\nimport {Set} from \"../Collections/Set\";\r\nimport {defer} from \"../Threading/defer\";\r\n\r\n\r\nconst VOID0:any = void 0, PROMISE = \"Promise\", PROMISE_STATE = PROMISE + \"State\", THEN = \"then\", TARGET = \"target\";\r\n\r\nfunction isPromise(value:any):value is PromiseLike\r\n{\r\n\treturn Type.hasMemberOfType(value, THEN, Type.FUNCTION);\r\n}\r\n\r\nfunction resolve(\r\n\tvalue:Promise.Resolution, resolver:(v:Promise.Resolution)=>any,\r\n\tpromiseFactory:(v:any)=>PromiseBase):PromiseBase\r\n{\r\n\tlet nextValue = resolver\r\n\t\t? resolver(value)\r\n\t\t: value;\r\n\r\n\treturn nextValue && isPromise(nextValue)\r\n\t\t? Promise.wrap(nextValue)\r\n\t\t: promiseFactory(nextValue);\r\n}\r\n\r\nfunction handleResolution(\r\n\tp:Promise,\r\n\tvalue:Promise.Resolution,\r\n\tresolver?:(v:Promise.Resolution)=>any):void\r\n{\r\n\ttry\r\n\t{\r\n\t\tlet v = resolver ? resolver(value) : value;\r\n\t\tif(p) p.resolve(v);\r\n\t}\r\n\tcatch(ex)\r\n\t{ p.reject(ex); }\r\n}\r\n\r\nfunction handleResolutionMethods(\r\n\ttargetFulfill:Promise.Fulfill,\r\n\ttargetReject:Promise.Reject,\r\n\tvalue:Promise.Resolution,\r\n\tresolver?:(v:Promise.Resolution)=>any):void\r\n{\r\n\ttry\r\n\t{\r\n\t\tlet v = resolver ? resolver(value) : value;\r\n\t\tif(targetFulfill) targetFulfill(v);\r\n\t}\r\n\tcatch(ex)\r\n\t{ if(targetReject) targetReject(ex); }\r\n}\r\n\r\nfunction handleDispatch(\r\n\tp:PromiseLike,\r\n\tonFulfilled:Promise.Fulfill,\r\n\tonRejected?:Promise.Reject):void\r\n{\r\n\tif(p instanceof PromiseBase)\r\n\t\tp.thenThis(onFulfilled, onRejected);\r\n\telse\r\n\t\tp.then(onFulfilled, onRejected);\r\n}\r\n\r\nexport class PromiseState\r\nextends DisposableBase\r\n{\r\n\r\n\tconstructor(\r\n\t\tprotected _state:Promise.State,\r\n\t\tprotected _result?:T,\r\n\t\tprotected _error?:any)\r\n\t{\r\n\t\tsuper();\r\n\t\tthis._disposableObjectName = PROMISE_STATE;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tthis._state = VOID0;\r\n\t\tthis._result = VOID0;\r\n\t\tthis._error = VOID0;\r\n\t}\r\n\r\n\tprotected getState():Promise.State\r\n\t{\r\n\t\treturn this._state;\r\n\t}\r\n\r\n\tget state():Promise.State\r\n\t{\r\n\t\treturn this._state;\r\n\t}\r\n\r\n\tget isPending():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Pending;\r\n\t}\r\n\r\n\tget isSettled():boolean\r\n\t{\r\n\t\treturn this.getState()!=Promise.State.Pending; // Will also include undefined==0 aka disposed!=resolved.\r\n\t}\r\n\r\n\tget isFulfilled():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Fulfilled;\r\n\t}\r\n\r\n\tget isRejected():boolean\r\n\t{\r\n\t\treturn this.getState()===Promise.State.Rejected;\r\n\t}\r\n\r\n\t/*\r\n\t * Providing overrides allows for special defer or lazy sub classes.\r\n\t */\r\n\tprotected getResult():T\r\n\t{\r\n\t\treturn this._result;\r\n\t}\r\n\r\n\tget result():T\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.getResult();\r\n\t}\r\n\r\n\tprotected getError():any\r\n\t{\r\n\t\treturn this._error;\r\n\t}\r\n\r\n\tget error():any\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.getError();\r\n\t}\r\n\r\n}\r\n\r\nexport abstract class PromiseBase\r\nextends PromiseState implements PromiseLike\r\n{\r\n\tconstructor()\r\n\t{\r\n\t\tsuper(Promise.State.Pending);\r\n\t\tthis._disposableObjectName = PROMISE;\r\n\t}\r\n\r\n\t/**\r\n\t * Calls the respective handlers once the promise is resolved.\r\n\t * @param onFulfilled\r\n\t * @param onRejected\r\n\t */\r\n\tabstract thenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase;\r\n\r\n\t/**\r\n\t * Same as 'thenSynchronous' but does not return the result. Returns the current promise instead.\r\n\t * You may not need an additional promise result, and this will not create a new one.\r\n\t * Errors are not trapped.\r\n\t * @param onFulfilled\r\n\t * @param onRejected\r\n\t */\r\n\tabstract thenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase;\r\n\r\n\r\n\tthen(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\treturn new Promise((resolve, reject)=>\r\n\t\t{\r\n\t\t\tthis.thenThis(\r\n\t\t\t\tresult=>handleResolutionMethods(resolve, reject, result, onFulfilled),\r\n\t\t\t\terror=>onRejected\r\n\t\t\t\t\t? handleResolutionMethods(resolve, null, error, onRejected)\r\n\t\t\t\t\t: reject(error)\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from the time called before continuing.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayFromNow(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\treturn new Promise(\r\n\t\t\t(resolve, reject)=>\r\n\t\t\t{\r\n\t\t\t\tdefer(()=>\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.thenThis(\r\n\t\t\t\t\t\tv=> resolve(v),\r\n\t\t\t\t\t\te=> reject(e));\r\n\t\t\t\t}, milliseconds)\r\n\t\t\t},\r\n\t\t\ttrue // Since the resolve/reject is deferred.\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Will yield for a number of milliseconds from after this promise resolves.\r\n\t * If the promise is already resolved, the delay will start from now.\r\n\t * @param milliseconds\r\n\t * @returns A promise that yields to the current execution and executes after a delay.\r\n\t */\r\n\tdelayAfterResolve(milliseconds:number = 0):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tif(this.isSettled) return this.delayFromNow(milliseconds);\r\n\r\n\t\treturn new Promise(\r\n\t\t\t(resolve, reject)=>\r\n\t\t\t{\r\n\t\t\t\tthis.thenThis(\r\n\t\t\t\t\tv=>defer(()=>resolve(v), milliseconds),\r\n\t\t\t\t\te=>defer(()=>reject(e), milliseconds))\r\n\t\t\t},\r\n\t\t\ttrue // Since the resolve/reject is deferred.\r\n\t\t);\r\n\t}\r\n\r\n\t'catch'(onRejected:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.then(VOID0, onRejected)\r\n\t}\r\n\r\n\t'finally'(fin:()=>Promise.Resolution):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\treturn this.then(fin, fin);\r\n\t}\r\n\r\n\tfinallyThis(fin:()=>void):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tvar f = ()=>deferImmediate(fin);\r\n\t\tthis.thenThis(f, f);\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n\r\nexport abstract class Resolvable extends PromiseBase\r\n{\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\ttry\r\n\t\t{\r\n\t\t\tswitch(this.state)\r\n\t\t\t{\r\n\t\t\t\tcase Promise.State.Fulfilled:\r\n\t\t\t\t\treturn onFulfilled\r\n\t\t\t\t\t\t? resolve(this._result, onFulfilled, Promise.resolve)\r\n\t\t\t\t\t\t: this; // Provided for catch cases.\r\n\t\t\t\tcase Promise.State.Rejected:\r\n\t\t\t\t\treturn onRejected\r\n\t\t\t\t\t\t? resolve(this._error, onRejected, Promise.resolve)\r\n\t\t\t\t\t\t: this;\r\n\t\t\t}\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\treturn new Rejected(ex);\r\n\t\t}\r\n\r\n\t\tthrow new Error(\"Invalid state for a resolved promise.\");\r\n\t}\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tswitch(this.state)\r\n\t\t{\r\n\t\t\tcase Promise.State.Fulfilled:\r\n\t\t\t\tif(onFulfilled) onFulfilled(this._result);\r\n\t\t\t\tbreak;\r\n\t\t\tcase Promise.State.Rejected:\r\n\t\t\t\tif(onRejected) onRejected(this._error);\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * The simplest usable version of a promise which returns synchronously the resolved state provided.\r\n */\r\nexport abstract class Resolved extends Resolvable\r\n{\r\n\tconstructor(state:Promise.State, result:T, error?:any)\r\n\t{\r\n\t\tsuper();\r\n\t\tthis._result = result;\r\n\t\tthis._error = error;\r\n\t\tthis._state = state;\r\n\t}\r\n\r\n\r\n}\r\n\r\n/**\r\n * A fulfilled Resolved. Provided for readability.\r\n */\r\nclass Fulfilled extends Resolved\r\n{\r\n\tconstructor(value?:T)\r\n\t{\r\n\t\tsuper(Promise.State.Fulfilled, value);\r\n\t}\r\n}\r\n\r\n/**\r\n * A rejected Resolved. Provided for readability.\r\n */\r\nclass Rejected extends Resolved\r\n{\r\n\tconstructor(error:any)\r\n\t{\r\n\t\tsuper(Promise.State.Rejected, VOID0, error);\r\n\t}\r\n}\r\n\r\n\r\n/**\r\n * Provided as a means for extending the interface of other PromiseLike objects.\r\n */\r\nclass PromiseWrapper extends Resolvable\r\n{\r\n\tconstructor(private _target:PromiseLike)\r\n\t{\r\n\t\tsuper();\r\n\r\n\t\tif(!_target)\r\n\t\t\tthrow new ArgumentNullException(TARGET);\r\n\r\n\t\tif(!isPromise(_target))\r\n\t\t\tthrow new ArgumentException(TARGET, \"Must be a promise-like object.\");\r\n\r\n\t\t_target.then(\r\n\t\t\tv=>\r\n\t\t\t{\r\n\t\t\t\tthis._state = Promise.State.Fulfilled;\r\n\t\t\t\tthis._result = v;\r\n\t\t\t\tthis._error = VOID0;\r\n\t\t\t\tthis._target = VOID0;\r\n\t\t\t},\r\n\t\t\te=>\r\n\t\t\t{\r\n\t\t\t\tthis._state = Promise.State.Rejected;\r\n\t\t\t\tthis._error = e;\r\n\t\t\t\tthis._target = VOID0;\r\n\t\t\t})\r\n\t}\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar t = this._target;\r\n\t\tif(!t) return super.thenSynchronous(onFulfilled, onRejected);\r\n\r\n\t\treturn new Promise((resolve, reject)=>\r\n\t\t{\r\n\t\t\thandleDispatch(t,\r\n\t\t\t\tresult=>handleResolutionMethods(resolve, reject, result, onFulfilled),\r\n\t\t\t\terror=>onRejected\r\n\t\t\t\t\t? handleResolutionMethods(resolve, null, error, onRejected)\r\n\t\t\t\t\t: reject(error)\r\n\t\t\t);\r\n\t\t}, true);\r\n\t}\r\n\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\tvar t = this._target;\r\n\t\tif(!t) return super.thenThis(onFulfilled, onRejected);\r\n\t\thandleDispatch(t, onFulfilled, onRejected);\r\n\t\treturn this;\r\n\t}\r\n\r\n\tprotected _onDispose():void\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._target = VOID0;\r\n\t}\r\n\r\n}\r\n\r\n\r\n/**\r\n * This promise class that facilitates pending resolution.\r\n */\r\nexport class Promise extends Resolvable\r\n{\r\n\r\n\tprivate _waiting:IPromiseCallbacks[];\r\n\r\n\t/*\r\n\t * A note about deferring:\r\n\t * The caller can set resolveImmediate to true if they intend to initialize code that will end up being deferred itself.\r\n\t * This eliminates the extra defer that will occur internally.\r\n\t * But for the most part, resolveImmediate = false (the default) will ensure the constructor will not block.\r\n\t *\r\n\t * resolveUsing allows for the same ability but does not defer by default: allowing the caller to take on the work load.\r\n\t * If calling resolve or reject and a deferred response is desired, then use deferImmediate with a closure to do so.\r\n\t */\r\n\r\n\tconstructor(\r\n\t\tresolver?:Promise.Executor, forceSynchronous:boolean = false)\r\n\t{\r\n\t\tsuper();\r\n\r\n\t\tif(resolver) this.resolveUsing(resolver, forceSynchronous);\r\n\t}\r\n\r\n\r\n\tthenSynchronous(\r\n\t\tonFulfilled:Promise.Fulfill,\r\n\t\tonRejected?:Promise.Reject):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// Already fulfilled?\r\n\t\tif(this._state) return super.thenSynchronous(onFulfilled, onRejected);\r\n\r\n\t\tvar p = new Promise();\r\n\t\t(this._waiting || (this._waiting = []))\r\n\t\t\t.push(pools.PromiseCallbacks.init(onFulfilled, onRejected, p));\r\n\t\treturn p;\r\n\t}\r\n\r\n\tthenThis(\r\n\t\tonFulfilled:(v?:T)=>any,\r\n\t\tonRejected?:(v?:any)=>any):PromiseBase\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\r\n\t\t// Already fulfilled?\r\n\t\tif(this._state) return super.thenThis(onFulfilled, onRejected);\r\n\r\n\t\t(this._waiting || (this._waiting = []))\r\n\t\t\t.push(pools.PromiseCallbacks.init(onFulfilled, onRejected));\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\r\n\tprotected _onDispose()\r\n\t{\r\n\t\tsuper._onDispose();\r\n\t\tthis._resolvedCalled = VOID0;\r\n\t}\r\n\r\n\t// Protects against double calling.\r\n\tprotected _resolvedCalled:boolean;\r\n\r\n\tresolveUsing(\r\n\t\tresolver:Promise.Executor,\r\n\t\tforceSynchronous:boolean = false,\r\n\t\tthrowIfSettled:boolean = false)\r\n\t{\r\n\t\tif(!resolver)\r\n\t\t\tthrow new ArgumentNullException(\"resolver\");\r\n\t\tif(this._resolvedCalled)\r\n\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\tif(this.state)\r\n\t\t\tthrow new InvalidOperationException(\"Already resolved: \" + Promise.State[this.state]);\r\n\r\n\t\tthis._resolvedCalled = true;\r\n\r\n\t\tvar state = 0;\r\n\t\tvar rejectHandler = (reason:any)=>\r\n\t\t{\r\n\t\t\tif(state) {\r\n\t\t\t\tconsole.warn(state==-1?\"Rejection called multiple times\":\"Rejection called after fulfilled.\");\r\n\t\t\t} else {\r\n\t\t\t\tstate = -1;\r\n\t\t\t\tthis._resolvedCalled = false;\r\n\t\t\t\tthis.reject(reason);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar fulfillHandler = (v:any)=>\r\n\t\t{\r\n\t\t\tif(state) {\r\n\t\t\t\tconsole.warn(state==1?\"Fulfill called multiple times\":\"Fulfill called after rejection.\");\r\n\t\t\t} else {\r\n\t\t\t\tstate = 1;\r\n\t\t\t\tthis._resolvedCalled = false;\r\n\t\t\t\tthis.resolve(v);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tvar r = ()=> resolver(\r\n\t\t\tv=>\r\n\t\t\t{\r\n\t\t\t\tif(v==this) throw new InvalidOperationException(\"Cannot resolve a promise as itself.\");\r\n\t\t\t\tif(isPromise(v)) // If the result is a promise, then it will defer downstream.\r\n\t\t\t\t\thandleDispatch(v, fulfillHandler, rejectHandler);\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tfulfillHandler(v);\r\n\t\t\t\t}\r\n\r\n\t\t\t},\r\n\t\t\trejectHandler);\r\n\r\n\t\t// There are some performance edge cases where there caller is not blocking upstream and does not need to defer.\r\n\t\tif(forceSynchronous)\r\n\t\t\tr();\r\n\t\telse\r\n\t\t\tdeferImmediate(r);\r\n\r\n\r\n\t}\r\n\r\n\tresolve(result?:T, throwIfSettled:boolean = false):void\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tif(result==this)\r\n\t\t\tthrow new InvalidOperationException(\"Cannot resolve a promise as itself.\");\r\n\r\n\t\tif(this._state)\r\n\t\t{\r\n\t\t\t// Same value? Ignore...\r\n\t\t\tif(!throwIfSettled || this._state==Promise.State.Fulfilled && this._result===result) return;\r\n\t\t\tthrow new InvalidOperationException(\"Changing the fulfilled state/value of a promise is not supported.\");\r\n\t\t}\r\n\r\n\t\tif(this._resolvedCalled)\r\n\t\t{\r\n\t\t\tif(throwIfSettled)\r\n\t\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._state = Promise.State.Fulfilled;\r\n\r\n\t\tthis._result = result;\r\n\t\tthis._error = VOID0;\r\n\t\tvar o = this._waiting;\r\n\t\tif(o)\r\n\t\t{\r\n\t\t\tthis._waiting = VOID0;\r\n\t\t\tfor(let c of o)\r\n\t\t\t{\r\n\t\t\t\tlet {onFulfilled, promise} = c, p = (>promise);\r\n\t\t\t\tpools.PromiseCallbacks.recycle(c);\r\n\t\t\t\thandleResolution(p, result, onFulfilled);\r\n\t\t\t}\r\n\t\t\to.length = 0;\r\n\t\t}\r\n\t}\r\n\r\n\treject(error:any, throwIfSettled:boolean = false):void\r\n\t{\r\n\t\tthis.throwIfDisposed();\r\n\t\tif(this._state)\r\n\t\t{\r\n\t\t\t// Same value? Ignore...\r\n\t\t\tif(!throwIfSettled || this._state==Promise.State.Rejected && this._error===error) return;\r\n\t\t\tthrow new InvalidOperationException(\"Changing the rejected state/value of a promise is not supported.\");\r\n\t\t}\r\n\r\n\t\tif(this._resolvedCalled)\r\n\t\t{\r\n\t\t\tif(throwIfSettled)\r\n\t\t\t\tthrow new InvalidOperationException(\".resolve() already called.\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._state = Promise.State.Rejected;\r\n\r\n\t\tthis._error = error;\r\n\t\tvar o = this._waiting;\r\n\t\tif(o)\r\n\t\t{\r\n\t\t\tthis._waiting = null; // null = finished. undefined = hasn't started.\r\n\t\t\tfor(let c of o)\r\n\t\t\t{\r\n\t\t\t\tlet {onRejected, promise} = c, p = (>promise);\r\n\t\t\t\tpools.PromiseCallbacks.recycle(c);\r\n\t\t\t\tif(onRejected) handleResolution(p, error, onRejected);\r\n\t\t\t\telse p.reject(error);\r\n\t\t\t}\r\n\t\t\to.length = 0;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n\r\nmodule pools\r\n{\r\n\r\n\t// export module pending\r\n\t// {\r\n\t//\r\n\t//\r\n\t// \tvar pool:ObjectPool>;\r\n\t//\r\n\t// \tfunction getPool()\r\n\t// \t{\r\n\t// \t\treturn pool || (pool = new ObjectPool>(40, factory, c=>c.dispose()));\r\n\t// \t}\r\n\t//\r\n\t// \tfunction factory():Promise\r\n\t// \t{\r\n\t// \t\treturn new Promise();\r\n\t// \t}\r\n\t//\r\n\t// \texport function get():Promise\r\n\t// \t{\r\n\t// \t\tvar p:any = getPool().take();\r\n\t// \t\tp.__wasDisposed = false;\r\n\t// \t\tp._state = Promise.State.Pending;\r\n\t// \t\treturn p;\r\n\t// \t}\r\n\t//\r\n\t// \texport function recycle(c:Promise):void\r\n\t// \t{\r\n\t// \t\tif(c) getPool().add(c);\r\n\t// \t}\r\n\t//\r\n\t// }\r\n\t//\r\n\t// export function recycle(c:PromiseBase):void\r\n\t// {\r\n\t// \tif(!c) return;\r\n\t// \tif(c instanceof Promise && c.constructor==Promise) pending.recycle(c);\r\n\t// \telse c.dispose();\r\n\t// }\r\n\r\n\r\n\texport module PromiseCallbacks\r\n\t{\r\n\r\n\t\tvar pool:ObjectPool>;\r\n\r\n\t\tfunction getPool()\r\n\t\t{\r\n\t\t\treturn pool\r\n\t\t\t\t|| (pool = new ObjectPool>(40, factory, c=>\r\n\t\t\t\t{\r\n\t\t\t\t\tc.onFulfilled = null;\r\n\t\t\t\t\tc.onRejected = null;\r\n\t\t\t\t\tc.promise = null;\r\n\t\t\t\t}));\r\n\t\t}\r\n\r\n\t\tfunction factory():IPromiseCallbacks\r\n\t\t{\r\n\t\t\treturn {\r\n\t\t\t\tonFulfilled: null,\r\n\t\t\t\tonRejected: null,\r\n\t\t\t\tpromise: null\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\texport function init(\r\n\t\t\tonFulfilled:Promise.Fulfill,\r\n\t\t\tonRejected?:Promise.Reject,\r\n\t\t\tpromise?:PromiseLike):IPromiseCallbacks\r\n\t\t{\r\n\r\n\t\t\tvar c = getPool().take();\r\n\t\t\tc.onFulfilled = onFulfilled;\r\n\t\t\tc.onRejected = onRejected;\r\n\t\t\tc.promise = promise;\r\n\t\t\treturn c;\r\n\t\t}\r\n\r\n\t\texport function recycle(c:IPromiseCallbacks):void\r\n\t\t{\r\n\t\t\tgetPool().add(c);\r\n\t\t}\r\n\t}\r\n\r\n\r\n}\r\n\r\n\r\nexport module Promise\r\n{\r\n\r\n\t/**\r\n\t * The state of a promise.\r\n\t * https://github.com/domenic/promises-unwrapping/blob/master/docs/states-and-fates.md\r\n\t * If a promise is disposed the value will be undefined which will also evaluate (promise.state)==false.\r\n\t */\r\n\texport enum State {\r\n\t\tPending = 0,\r\n\t\tFulfilled = 1,\r\n\t\tRejected = -1\r\n\t}\r\n\tObject.freeze(State);\r\n\r\n\texport type Resolution = PromiseLike|TResult|void;\r\n\r\n\texport interface Fulfill\r\n\t{\r\n\t\t(value:T):Resolution\r\n\t}\r\n\r\n\texport interface Reject\r\n\t{\r\n\t\t(err?:any):Resolution\r\n\t}\r\n\r\n\texport interface Then\r\n\t{\r\n\t\t(\r\n\t\t\tonFulfilled:Fulfill,\r\n\t\t\tonRejected?:Reject):PromiseBase\r\n\t}\r\n\r\n\texport interface Executor\r\n\t{\r\n\t\t(\r\n\t\t\tresolve:(value?:T | PromiseLike) => void,\r\n\t\t\treject:(reason?:any) => void):void;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns a promise that is fulfilled with an array containing the fulfillment value of each promise, or is rejected with the same rejection reason as the first promise to be rejected.\r\n\t */\r\n\texport function all(promises:PromiseLike[]):PromiseBase\r\n\texport function all(promise:PromiseLike, ...rest:PromiseLike[]):PromiseBase\r\n\texport function all(\r\n\t\tfirst:PromiseLike|PromiseLike[],\r\n\t\t...rest:PromiseLike[]):PromiseBase\r\n\t{\r\n\t\tif(!first && !rest.length) throw new ArgumentNullException(\"promises\");\r\n\t\tvar promises = (Array.isArray(first) ? first : [first]).concat(rest); // yay a copy!\r\n\t\tif(!promises.length || promises.every(v=>!v)) return new Fulfilled(promises); // it's a new empty, reuse it. :|\r\n\r\n\t\t// Eliminate deferred and take the parent since all .then calls happen on next cycle anyway.\r\n\t\treturn new Promise((resolve, reject)=>\r\n\t\t{\r\n\t\t\tlet checkedAll = false;\r\n\t\t\tlet result:any[] = [];\r\n\t\t\tlet len = promises.length;\r\n\t\t\tresult.length = len;\r\n\t\t\t// Using a set instead of -- a number is more reliable if just in case one of the provided promises resolves twice.\r\n\t\t\tlet remaining = new Set(promises.map((v, i)=>i)); // get all the indexes...\r\n\r\n\t\t\tlet cleanup = ()=>\r\n\t\t\t{\r\n\t\t\t\treject = null;\r\n\t\t\t\tresolve = null;\r\n\t\t\t\tpromises.length = 0;\r\n\t\t\t\tpromises = null;\r\n\t\t\t\tremaining.dispose();\r\n\t\t\t\tremaining = null;\r\n\t\t\t};\r\n\r\n\t\t\tlet checkIfShouldResolve = ()=>\r\n\t\t\t{\r\n\t\t\t\tlet r = resolve;\r\n\t\t\t\tif(r && !remaining.count)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(result);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onFulfill = (v:any, i:number)=>\r\n\t\t\t{\r\n\t\t\t\tif(resolve)\r\n\t\t\t\t{\r\n\t\t\t\t\tresult[i] = v;\r\n\t\t\t\t\tremaining.remove(i);\r\n\t\t\t\t\tcheckIfShouldResolve();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onReject = (e?:any)=>\r\n\t\t\t{\r\n\t\t\t\tlet r = reject;\r\n\t\t\t\tif(r)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(e);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tfor(let i = 0; remaining && ionFulfill(v, i), onReject);\r\n\t\t\t\telse remaining.remove(i);\r\n\t\t\t\tcheckIfShouldResolve();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved\r\n\t * or rejected.\r\n\t * @param promises An array of Promises.\r\n\t * @returns A new Promise.\r\n\t */\r\n\texport function race(promises:PromiseLike[]):PromiseBase\r\n\texport function race(promise:PromiseLike, ...rest:PromiseLike[]):PromiseBase\r\n\texport function race(\r\n\t\tfirst:PromiseLike|PromiseLike[],\r\n\t\t...rest:PromiseLike[]):PromiseBase\r\n\t{\r\n\t\tvar promises = first && (Array.isArray(first) ? first : [first]).concat(rest); // yay a copy?\r\n\t\tif(!promises || !promises.length || !(promises = promises.filter(v=>v!=null)).length)\r\n\t\t\tthrow new ArgumentException(\"Nothing to wait for.\");\r\n\r\n\t\tvar len = promises.length;\r\n\r\n\t\t// Only one? Nothing to race.\r\n\t\tif(len==1) return wrap(promises[0]);\r\n\r\n\t\t// Look for already resolved promises and the first one wins.\r\n\t\tfor(let i = 0; i\r\n\t\t{\r\n\t\t\tlet cleanup = ()=>\r\n\t\t\t{\r\n\t\t\t\treject = null;\r\n\t\t\t\tresolve = null;\r\n\t\t\t\tpromises.length = 0;\r\n\t\t\t\tpromises = null;\r\n\t\t\t};\r\n\r\n\t\t\tlet onResolve = (r:(x:any)=>void, v:any)=>\r\n\t\t\t{\r\n\t\t\t\tif(r)\r\n\t\t\t\t{\r\n\t\t\t\t\tcleanup();\r\n\t\t\t\t\tr(v);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tlet onFulfill = (v:any)=> onResolve(resolve, v);\r\n\t\t\tlet onReject = (e?:any)=> onResolve(reject, e);\r\n\r\n\t\t\tfor(let p of promises)\r\n\t\t\t{\r\n\t\t\t\tif(!resolve) break;\r\n\t\t\t\tp.then(onFulfill, onReject);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// // race(values: Iterable>): Promise;\r\n\r\n\t/**\r\n\t * Creates a new resolved promise .\r\n\t * @returns A resolved promise.\r\n\t */\r\n\texport function resolve():PromiseBase\r\n\r\n\t/**\r\n\t * Creates a new resolved promise for the provided value.\r\n\t * @param value A value or promise.\r\n\t * @returns A promise whose internal state matches the provided promise.\r\n\t */\r\n\texport function resolve(value:T | PromiseLike):PromiseBase;\r\n\texport function resolve(value?:any):PromiseBase\r\n\t{\r\n\r\n\t\treturn isPromise(value) ? wrap(value) : new Fulfilled(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new rejected promise for the provided reason.\r\n\t * @param reason The reason the promise was rejected.\r\n\t * @returns A new rejected Promise.\r\n\t */\r\n\texport function reject(reason:T):PromiseBase\r\n\t{\r\n\t\treturn new Rejected(reason);\r\n\t}\r\n\r\n\t/**\r\n\t * Takes any Promise-Like object and ensures an extended version of it from this module.\r\n\t * @param target The Promise-Like object\r\n\t * @returns A new target that simply extends the target.\r\n\t */\r\n\texport function wrap(target:PromiseLike):PromiseBase\r\n\t{\r\n\t\tif(!target) throw new ArgumentNullException(TARGET);\r\n\t\treturn target instanceof Promise ? this : new PromiseWrapper(target);\r\n\t}\r\n\r\n\t/**\r\n\t * A function that acts like a 'then' method (aka then-able) can be extended by providing a function that takes an onFulfill and onReject.\r\n\t * @param then\r\n\t * @returns {PromiseWrapper}\r\n\t */\r\n\texport function createFrom(then:Then):PromiseBase\r\n\t{\r\n\t\tif(!then) throw new ArgumentNullException(THEN);\r\n\t\treturn new PromiseWrapper({then: then});\r\n\t}\r\n\r\n}\r\n\r\n\r\ninterface IPromiseCallbacks\r\n{\r\n\tonFulfilled:Promise.Fulfill;\r\n\tonRejected:Promise.Reject;\r\n\tpromise?:PromiseLike;\r\n}\r\n"]} \ No newline at end of file diff --git a/package.json b/package.json index f6f8a741..61819ba8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "typescript-dotnet", - "version": "2.16.6", + "version": "2.17.0", "license": "MIT", "author": "electricessence ", "description": "A JavaScript-Friendly .NET Based TypeScript Library.", diff --git a/source/System/Promises/LazyPromise.js b/source/System/Promises/LazyPromise.js new file mode 100644 index 00000000..c1401e5a --- /dev/null +++ b/source/System/Promises/LazyPromise.js @@ -0,0 +1,121 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT + */ +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +}; +(function (factory) { + if (typeof module === 'object' && typeof module.exports === 'object') { + var v = factory(require, exports); if (v !== undefined) module.exports = v; + } + else if (typeof define === 'function' && define.amd) { + define(["require", "exports", "./Promise", "../Threading/defer", "../Exceptions/ArgumentNullException"], factory); + } +})(function (require, exports) { + "use strict"; + var Promise_1 = require("./Promise"); + var defer_1 = require("../Threading/defer"); + var ArgumentNullException_1 = require("../Exceptions/ArgumentNullException"); + var VOID0 = void 0; + var LazyPromise = (function (_super) { + __extends(LazyPromise, _super); + function LazyPromise(_resolver) { + _super.call(this); + this._resolver = _resolver; + if (!_resolver) + throw new ArgumentNullException_1.ArgumentNullException("resolver"); + this._resolvedCalled = true; + } + LazyPromise.prototype._onDispose = function () { + _super.prototype._onDispose.call(this); + this._resolver = VOID0; + }; + LazyPromise.prototype._onThen = function () { + var r = this._resolver; + if (r) { + this._resolver = VOID0; + this._resolvedCalled = false; + this.resolveUsing(r); + } + }; + LazyPromise.prototype.thenSynchronous = function (onFulfilled, onRejected) { + this._onThen(); + return _super.prototype.thenSynchronous.call(this, onFulfilled, onRejected); + }; + LazyPromise.prototype.thenThis = function (onFulfilled, onRejected) { + this._onThen(); + return _super.prototype.thenThis.call(this, onFulfilled, onRejected); + }; + LazyPromise.prototype.delayFromNow = function (milliseconds) { + var _this = this; + if (milliseconds === void 0) { milliseconds = 0; } + this.throwIfDisposed(); + if (!this._resolver || this.isSettled) + return _super.prototype.delayFromNow.call(this, milliseconds); + var pass; + var timedOut = false; + var timeout = defer_1.defer(function () { + timedOut = true; + if (pass) + pass(); + }, milliseconds); + return new LazyPromise(function (resolve, reject) { + pass = function () { + _this.thenThis(function (v) { return resolve(v); }, function (e) { return reject(e); }); + timeout.dispose(); + timeout = null; + pass = null; + }; + if (timedOut) + pass(); + }); + }; + LazyPromise.prototype.delayAfterResolve = function (milliseconds) { + var _this = this; + if (milliseconds === void 0) { milliseconds = 0; } + this.throwIfDisposed(); + if (!this._resolver || this.isSettled) + return _super.prototype.delayAfterResolve.call(this, milliseconds); + var pass; + var timeout; + var finalize = function () { + if (timeout) { + timeout.dispose(); + timeout = null; + } + if (pass) + pass(); + finalize = null; + }; + { + var detector = function () { + if (finalize) + timeout = defer_1.defer(finalize, milliseconds); + }; + _super.prototype.thenThis.call(this, detector, detector); + detector = null; + } + return new LazyPromise(function (resolve, reject) { + if (_this.isPending) { + _this.thenThis(function (v) { return defer_1.defer(function () { return resolve(v); }); }, function (e) { return defer_1.defer(function () { return reject(e); }); }); + finalize(); + } + else { + pass = function () { + _this.thenThis(function (v) { return resolve(v); }, function (e) { return reject(e); }); + }; + if (!finalize) + pass(); + } + }); + }; + return LazyPromise; + }(Promise_1.Promise)); + exports.LazyPromise = LazyPromise; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.default = LazyPromise; +}); +//# sourceMappingURL=LazyPromise.js.map \ No newline at end of file diff --git a/source/System/Promises/LazyPromise.js.map b/source/System/Promises/LazyPromise.js.map new file mode 100644 index 00000000..23e3183f --- /dev/null +++ b/source/System/Promises/LazyPromise.js.map @@ -0,0 +1 @@ +{"version":3,"file":"LazyPromise.js","sourceRoot":"","sources":["LazyPromise.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/source/System/Promises/LazyPromise.ts b/source/System/Promises/LazyPromise.ts new file mode 100644 index 00000000..5c4433ee --- /dev/null +++ b/source/System/Promises/LazyPromise.ts @@ -0,0 +1,202 @@ +/*! + * @author electricessence / https://github.com/electricessence/ + * Licensing: MIT + */ + +import {Promise, PromiseBase} from "./Promise"; +import {Closure} from "../FunctionTypes"; +import {ICancellable} from "../Threading/ICancellable"; +import {defer} from "../Threading/defer"; +import {ArgumentNullException} from "../Exceptions/ArgumentNullException"; + +const VOID0:any = void 0; + +/** + * A promise that waits for the first then to trigger the resolver. + */ +export class LazyPromise extends Promise +{ + + constructor(private _resolver:Promise.Executor) + { + super(); + if(!_resolver) throw new ArgumentNullException("resolver"); + this._resolvedCalled = true; + } + + protected _onDispose():void + { + super._onDispose(); + this._resolver = VOID0; + } + + private _onThen():void + { + var r = this._resolver; + if(r) + { + this._resolver = VOID0; + this._resolvedCalled = false; + this.resolveUsing(r); + } + } + + thenSynchronous( + onFulfilled:Promise.Fulfill, + onRejected?:Promise.Reject):PromiseBase + { + this._onThen(); + return super.thenSynchronous(onFulfilled, onRejected); + } + + + thenThis( + onFulfilled:(v?:T)=>any, + onRejected?:(v?:any)=>any):PromiseBase + { + this._onThen(); + return super.thenThis(onFulfilled, onRejected); + } + + // NOTE: For a LazyPromise we need to be careful not to trigger the resolve for delay. + + /** + * Will yield for a number of milliseconds from the time called before continuing. + * @param milliseconds + * @returns A promise that yields to the current execution and executes after a minimum delay. + */ + delayFromNow(milliseconds:number = 0):PromiseBase + { + this.throwIfDisposed(); + + // If this is already guaranteed to resolve, the go ahead and pass to the super. + if(!this._resolver || this.isSettled) + return super.delayFromNow(milliseconds); + + /* + * If not triggered yet, then we create a special promise + * that only requests the resolution from the parent promise + * if a 'then' is called to ensure the lazy pattern. + */ + var pass:Closure; + var timedOut:boolean = false; + + // Setup the timer. + var timeout = defer(()=> + { + timedOut = true; + // If the promise was requested already go ahead and pass the request on to the parent. + if(pass) + pass(); + }, + milliseconds); + + return new LazyPromise( + (resolve, reject)=> + { + // A lazy promise only enters here if something called for a resolution. + pass = ()=> + { + this.thenThis( + v=> resolve(v), + e=> reject(e) + ); + timeout.dispose(); + timeout = null; + pass = null; + }; + + // If the timeout completed already go ahead and pass the request on to the parent. + if(timedOut) + pass(); + // Otherwise wait for the timeout to do it. + }); + } + + /** + * Will yield for a number of milliseconds from after this promise resolves. + * If the promise is already resolved, the delay will start from now. + * @param milliseconds + * @returns A promise that yields to the current execution and executes after a delay. + */ + delayAfterResolve(milliseconds:number = 0):PromiseBase + { + this.throwIfDisposed(); + + // If this is already guaranteed to resolve, the go ahead and pass to the super. + if(!this._resolver || this.isSettled) + return super.delayAfterResolve(milliseconds); + + /* + * If not triggered yet, then we create a special promise + * that only requests the resolution from the parent promise + * if a 'then' is called to ensure the lazy pattern. + */ + var pass:Closure; + + + // Setup the timer. + var timeout:ICancellable; + + var finalize = ()=> + { + if(timeout) + { + timeout.dispose(); + timeout = null; + } + // If the promise was requested already go ahead and pass the request on to the parent. + if(pass) + pass(); + + finalize = null; + }; + + { + let detector = ()=> + { + if(finalize) // We may already be wrapped up so never mind! + timeout = defer(finalize, milliseconds); + }; + + // Calling super.thenThis does not trigger resolution. + // This simply waits for resolution to happen. + // Is effectively the timer by when resolution has occurred. + super.thenThis(detector, detector); + detector = null; + } + + return new LazyPromise( + (resolve, reject)=> + { + // Because of the lazy nature of this promise, this could enter here at any time. + if(this.isPending) + { + this.thenThis( + v=> defer(()=>resolve(v)), + e=> defer(()=>reject(e)) + ); + finalize(); + } + else + { + // We don't know when this resolved and could have happened anytime after calling this delay method. + pass = ()=> + { + this.thenThis( + v=> resolve(v), + e=> reject(e) + ); + }; + + // Already finalized (aka resolved after a timeout)? Go now! + if(!finalize) + pass(); + } + + }); + + } +} + +export default LazyPromise; \ No newline at end of file diff --git a/source/System/Promises/Promise.js b/source/System/Promises/Promise.js index 703e685c..be610269 100644 --- a/source/System/Promises/Promise.js +++ b/source/System/Promises/Promise.js @@ -39,20 +39,6 @@ var __extends = (this && this.__extends) || function (d, b) { ? Promise.wrap(nextValue) : promiseFactory(nextValue); } - function pass(source, dest) { - return function () { - source.thenThis(function (v) { - dest.resolve(v); - }, function (e) { - dest.reject(e); - }); - }; - } - function passDelayed(source, dest, ms) { - return function () { - source.thenThis(function (v) { return defer_1.defer(function () { return dest.resolve(v); }, ms); }, function (e) { return defer_1.defer(function () { return dest.reject(e); }, ms); }); - }; - } function handleResolution(p, value, resolver) { try { var v = resolver ? resolver(value) : value; @@ -165,25 +151,31 @@ var __extends = (this && this.__extends) || function (d, b) { } PromiseBase.prototype.then = function (onFulfilled, onRejected) { var _this = this; - return Promise.pending(function (resolve, reject) { + return new Promise(function (resolve, reject) { _this.thenThis(function (result) { return handleResolutionMethods(resolve, reject, result, onFulfilled); }, function (error) { return onRejected ? handleResolutionMethods(resolve, null, error, onRejected) : reject(error); }); }); }; PromiseBase.prototype.delayFromNow = function (milliseconds) { + var _this = this; if (milliseconds === void 0) { milliseconds = 0; } this.throwIfDisposed(); - var p = Promise.pending(); - defer_1.defer(pass(this, p), milliseconds); - return p; + return new Promise(function (resolve, reject) { + defer_1.defer(function () { + _this.thenThis(function (v) { return resolve(v); }, function (e) { return reject(e); }); + }, milliseconds); + }, true); }; PromiseBase.prototype.delayAfterResolve = function (milliseconds) { + var _this = this; if (milliseconds === void 0) { milliseconds = 0; } this.throwIfDisposed(); - var p = Promise.pending(); - passDelayed(this, p, milliseconds); - return p; + if (this.isSettled) + return this.delayFromNow(milliseconds); + return new Promise(function (resolve, reject) { + _this.thenThis(function (v) { return defer_1.defer(function () { return resolve(v); }, milliseconds); }, function (e) { return defer_1.defer(function () { return reject(e); }, milliseconds); }); + }, true); }; PromiseBase.prototype['catch'] = function (onRejected) { this.throwIfDisposed(); @@ -294,9 +286,11 @@ var __extends = (this && this.__extends) || function (d, b) { var t = this._target; if (!t) return _super.prototype.thenSynchronous.call(this, onFulfilled, onRejected); - var p = Promise.pending(); - handleDispatch(t, function (result) { return handleResolution(p, result, onFulfilled); }, function (error) { return onRejected ? handleResolution(p, error, onRejected) : p.reject(error); }); - return p; + return new Promise(function (resolve, reject) { + handleDispatch(t, function (result) { return handleResolutionMethods(resolve, reject, result, onFulfilled); }, function (error) { return onRejected + ? handleResolutionMethods(resolve, null, error, onRejected) + : reject(error); }); + }, true); }; PromiseWrapper.prototype.thenThis = function (onFulfilled, onRejected) { this.throwIfDisposed(); @@ -314,10 +308,11 @@ var __extends = (this && this.__extends) || function (d, b) { }(Resolvable)); var Promise = (function (_super) { __extends(Promise, _super); - function Promise(resolver) { + function Promise(resolver, forceSynchronous) { + if (forceSynchronous === void 0) { forceSynchronous = false; } _super.call(this); if (resolver) - this.resolveUsing(resolver); + this.resolveUsing(resolver, forceSynchronous); } Promise.prototype.thenSynchronous = function (onFulfilled, onRejected) { this.throwIfDisposed(); @@ -340,8 +335,9 @@ var __extends = (this && this.__extends) || function (d, b) { _super.prototype._onDispose.call(this); this._resolvedCalled = VOID0; }; - Promise.prototype.resolveUsing = function (resolver, throwIfSettled) { + Promise.prototype.resolveUsing = function (resolver, forceSynchronous, throwIfSettled) { var _this = this; + if (forceSynchronous === void 0) { forceSynchronous = false; } if (throwIfSettled === void 0) { throwIfSettled = false; } if (!resolver) throw new ArgumentNullException_1.ArgumentNullException("resolver"); @@ -350,25 +346,40 @@ var __extends = (this && this.__extends) || function (d, b) { if (this.state) throw new InvalidOperationException_1.InvalidOperationException("Already resolved: " + Promise.State[this.state]); this._resolvedCalled = true; + var state = 0; var rejectHandler = function (reason) { - _this._resolvedCalled = false; - _this.reject(reason); + if (state) { + console.warn(state == -1 ? "Rejection called multiple times" : "Rejection called after fulfilled."); + } + else { + state = -1; + _this._resolvedCalled = false; + _this.reject(reason); + } }; var fulfillHandler = function (v) { - _this._resolvedCalled = false; - _this.resolve(v); + if (state) { + console.warn(state == 1 ? "Fulfill called multiple times" : "Fulfill called after rejection."); + } + else { + state = 1; + _this._resolvedCalled = false; + _this.resolve(v); + } }; - deferImmediate_1.deferImmediate(function () { - resolver(function (v) { - if (v == _this) - throw new InvalidOperationException_1.InvalidOperationException("Cannot resolve a promise as itself."); - if (isPromise(v)) - handleDispatch(v, fulfillHandler, rejectHandler); - else { - fulfillHandler(v); - } - }, rejectHandler); - }); + var r = function () { return resolver(function (v) { + if (v == _this) + throw new InvalidOperationException_1.InvalidOperationException("Cannot resolve a promise as itself."); + if (isPromise(v)) + handleDispatch(v, fulfillHandler, rejectHandler); + else { + fulfillHandler(v); + } + }, rejectHandler); }; + if (forceSynchronous) + r(); + else + deferImmediate_1.deferImmediate(r); }; Promise.prototype.resolve = function (result, throwIfSettled) { if (throwIfSettled === void 0) { throwIfSettled = false; } @@ -433,38 +444,6 @@ var __extends = (this && this.__extends) || function (d, b) { return Promise; }(Resolvable)); exports.Promise = Promise; - var LazyPromise = (function (_super) { - __extends(LazyPromise, _super); - function LazyPromise(_resolver) { - _super.call(this); - this._resolver = _resolver; - if (!_resolver) - throw new ArgumentNullException_1.ArgumentNullException("resolver"); - this._resolvedCalled = true; - } - LazyPromise.prototype._onDispose = function () { - _super.prototype._onDispose.call(this); - this._resolver = VOID0; - }; - LazyPromise.prototype._onThen = function () { - var r = this._resolver; - if (r) { - this._resolver = VOID0; - this._resolvedCalled = false; - this.resolveUsing(r); - } - }; - LazyPromise.prototype.thenSynchronous = function (onFulfilled, onRejected) { - this._onThen(); - return _super.prototype.thenSynchronous.call(this, onFulfilled, onRejected); - }; - LazyPromise.prototype.thenThis = function (onFulfilled, onRejected) { - this._onThen(); - return _super.prototype.thenThis.call(this, onFulfilled, onRejected); - }; - return LazyPromise; - }(Promise)); - exports.LazyPromise = LazyPromise; var pools; (function (pools) { var PromiseCallbacks; @@ -518,7 +497,7 @@ var __extends = (this && this.__extends) || function (d, b) { var promises = (Array.isArray(first) ? first : [first]).concat(rest); if (!promises.length || promises.every(function (v) { return !v; })) return new Fulfilled(promises); - return pending(function (resolve, reject) { + return new Promise(function (resolve, reject) { var checkedAll = false; var result = []; var len = promises.length; @@ -583,7 +562,7 @@ var __extends = (this && this.__extends) || function (d, b) { if (p instanceof PromiseBase && p.isSettled) return p; } - return pending(function (resolve, reject) { + return new Promise(function (resolve, reject) { var cleanup = function () { reject = null; resolve = null; @@ -615,10 +594,6 @@ var __extends = (this && this.__extends) || function (d, b) { return new Rejected(reason); } Promise.reject = reject; - function lazy(resolver) { - return new LazyPromise(resolver); - } - Promise.lazy = lazy; function wrap(target) { if (!target) throw new ArgumentNullException_1.ArgumentNullException(TARGET); @@ -631,10 +606,6 @@ var __extends = (this && this.__extends) || function (d, b) { return new PromiseWrapper({ then: then }); } Promise.createFrom = createFrom; - function pending(resolver) { - return new Promise(resolver); - } - Promise.pending = pending; })(Promise = exports.Promise || (exports.Promise = {})); }); //# sourceMappingURL=Promise.js.map \ No newline at end of file diff --git a/source/System/Promises/Promise.js.map b/source/System/Promises/Promise.js.map index 4eb47f8a..2de6fb25 100644 --- a/source/System/Promises/Promise.js.map +++ b/source/System/Promises/Promise.js.map @@ -1 +1 @@ -{"version":3,"file":"Promise.js","sourceRoot":"","sources":["Promise.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Promise.js","sourceRoot":"","sources":["Promise.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/source/System/Promises/Promise.ts b/source/System/Promises/Promise.ts index 2d8cb22c..04ee204d 100644 --- a/source/System/Promises/Promise.ts +++ b/source/System/Promises/Promise.ts @@ -12,7 +12,6 @@ */ import Type from "../Types"; -import {Closure} from "../FunctionTypes"; import {deferImmediate} from "../Threading/deferImmediate"; import {DisposableBase} from "../Disposable/DisposableBase"; import {InvalidOperationException} from "../Exceptions/InvalidOperationException"; @@ -43,32 +42,6 @@ function resolve( : promiseFactory(nextValue); } -function pass(source:PromiseBase, dest:Promise):Closure -{ - return ()=> - { - source.thenThis( - v=> - { - dest.resolve(v); - }, - e=> - { - dest.reject(e); - }); - } -} - -function passDelayed(source:PromiseBase, dest:Promise, ms:number):Closure -{ - return ()=> - { - source.thenThis( - v=>defer(()=>dest.resolve(v), ms), - e=>defer(()=>dest.reject(e), ms)); - } -} - function handleResolution( p:Promise, value:Promise.Resolution, @@ -215,11 +188,12 @@ extends PromiseState implements PromiseLike onFulfilled:(v?:T)=>any, onRejected?:(v?:any)=>any):PromiseBase; + then( onFulfilled:Promise.Fulfill, onRejected?:Promise.Reject):PromiseBase { - return Promise.pending((resolve, reject)=> + return new Promise((resolve, reject)=> { this.thenThis( result=>handleResolutionMethods(resolve, reject, result, onFulfilled), @@ -239,15 +213,23 @@ extends PromiseState implements PromiseLike { this.throwIfDisposed(); - // TODO: need to figure out a way to not force a then call. - var p = Promise.pending(); - defer(pass(this, p), milliseconds); - return p; + return new Promise( + (resolve, reject)=> + { + defer(()=> + { + this.thenThis( + v=> resolve(v), + e=> reject(e)); + }, milliseconds) + }, + true // Since the resolve/reject is deferred. + ); } /** * Will yield for a number of milliseconds from after this promise resolves. - * If the promise is already resolved the delay will start from now. + * If the promise is already resolved, the delay will start from now. * @param milliseconds * @returns A promise that yields to the current execution and executes after a delay. */ @@ -255,9 +237,17 @@ extends PromiseState implements PromiseLike { this.throwIfDisposed(); - var p = Promise.pending(); - passDelayed(this, p, milliseconds); - return p; + if(this.isSettled) return this.delayFromNow(milliseconds); + + return new Promise( + (resolve, reject)=> + { + this.thenThis( + v=>defer(()=>resolve(v), milliseconds), + e=>defer(()=>reject(e), milliseconds)) + }, + true // Since the resolve/reject is deferred. + ); } 'catch'(onRejected:Promise.Reject):PromiseBase @@ -413,11 +403,15 @@ class PromiseWrapper extends Resolvable var t = this._target; if(!t) return super.thenSynchronous(onFulfilled, onRejected); - var p = Promise.pending(); - handleDispatch(t, - result=>handleResolution(p, result, onFulfilled), - error=>onRejected ? handleResolution(p, error, onRejected) : p.reject(error)); - return p; + return new Promise((resolve, reject)=> + { + handleDispatch(t, + result=>handleResolutionMethods(resolve, reject, result, onFulfilled), + error=>onRejected + ? handleResolutionMethods(resolve, null, error, onRejected) + : reject(error) + ); + }, true); } @@ -461,11 +455,11 @@ export class Promise extends Resolvable */ constructor( - resolver?:Promise.Executor) + resolver?:Promise.Executor, forceSynchronous:boolean = false) { super(); - if(resolver) this.resolveUsing(resolver); + if(resolver) this.resolveUsing(resolver, forceSynchronous); } @@ -511,6 +505,7 @@ export class Promise extends Resolvable resolveUsing( resolver:Promise.Executor, + forceSynchronous:boolean = false, throwIfSettled:boolean = false) { if(!resolver) @@ -522,36 +517,48 @@ export class Promise extends Resolvable this._resolvedCalled = true; + var state = 0; var rejectHandler = (reason:any)=> { - this._resolvedCalled = false; - this.reject(reason); + if(state) { + console.warn(state==-1?"Rejection called multiple times":"Rejection called after fulfilled."); + } else { + state = -1; + this._resolvedCalled = false; + this.reject(reason); + } }; var fulfillHandler = (v:any)=> { - this._resolvedCalled = false; - this.resolve(v); + if(state) { + console.warn(state==1?"Fulfill called multiple times":"Fulfill called after rejection."); + } else { + state = 1; + this._resolvedCalled = false; + this.resolve(v); + } }; - // In order to prevent blocking. - // As much as we'd like to go synchronous here, it's just not how it's done. - deferImmediate(()=> - { - resolver( - v=> + var r = ()=> resolver( + v=> + { + if(v==this) throw new InvalidOperationException("Cannot resolve a promise as itself."); + if(isPromise(v)) // If the result is a promise, then it will defer downstream. + handleDispatch(v, fulfillHandler, rejectHandler); + else { - if(v==this) throw new InvalidOperationException("Cannot resolve a promise as itself."); - if(isPromise(v)) // If the result is a promise, then it will defer downstream. - handleDispatch(v, fulfillHandler, rejectHandler); - else - { - fulfillHandler(v); - } - - }, - rejectHandler); - }); + fulfillHandler(v); + } + + }, + rejectHandler); + + // There are some performance edge cases where there caller is not blocking upstream and does not need to defer. + if(forceSynchronous) + r(); + else + deferImmediate(r); } @@ -630,54 +637,6 @@ export class Promise extends Resolvable } -/** - * A promise that waits for the first then to trigger the resolver. - */ -export class LazyPromise extends Promise -{ - - constructor(private _resolver:Promise.Executor) - { - super(); - if(!_resolver) throw new ArgumentNullException("resolver"); - this._resolvedCalled = true; - } - - protected _onDispose():void - { - super._onDispose(); - this._resolver = VOID0; - } - - private _onThen():void - { - var r = this._resolver; - if(r) - { - this._resolver = VOID0; - this._resolvedCalled = false; - this.resolveUsing(r); - } - } - - thenSynchronous( - onFulfilled:Promise.Fulfill, - onRejected?:Promise.Reject):PromiseBase - { - this._onThen(); - return super.thenSynchronous(onFulfilled, onRejected); - } - - - thenThis( - onFulfilled:(v?:T)=>any, - onRejected?:(v?:any)=>any):PromiseBase - { - this._onThen(); - return super.thenThis(onFulfilled, onRejected); - } -} - module pools { @@ -809,14 +768,6 @@ export module Promise reject:(reason?:any) => void):void; } - // /** - // * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved - // * or rejected. - // * @param values An array of Promises. - // * @returns A new Promise. - // */ - // // race(values: Iterable>): Promise; - /** * Returns a promise that is fulfilled with an array containing the fulfillment value of each promise, or is rejected with the same rejection reason as the first promise to be rejected. @@ -832,7 +783,7 @@ export module Promise if(!promises.length || promises.every(v=>!v)) return new Fulfilled(promises); // it's a new empty, reuse it. :| // Eliminate deferred and take the parent since all .then calls happen on next cycle anyway. - return pending((resolve, reject)=> + return new Promise((resolve, reject)=> { let checkedAll = false; let result:any[] = []; @@ -892,7 +843,10 @@ export module Promise } /** - * Returns a promise for the first of an array of promises to become settled. + * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved + * or rejected. + * @param promises An array of Promises. + * @returns A new Promise. */ export function race(promises:PromiseLike[]):PromiseBase export function race(promise:PromiseLike, ...rest:PromiseLike[]):PromiseBase @@ -916,7 +870,7 @@ export module Promise if(p instanceof PromiseBase && p.isSettled) return p; } - return pending((resolve, reject)=> + return new Promise((resolve, reject)=> { let cleanup = ()=> { @@ -946,6 +900,8 @@ export module Promise }); } + // // race(values: Iterable>): Promise; + /** * Creates a new resolved promise . * @returns A resolved promise. @@ -974,17 +930,6 @@ export module Promise return new Rejected(reason); } - - /** - * Provides a promise that will trigger the resolver at the first 'then' request. - * @param resolver - * @returns {Promise} - */ - export function lazy(resolver:Promise.Executor):LazyPromise - { - return new LazyPromise(resolver); - } - /** * Takes any Promise-Like object and ensures an extended version of it from this module. * @param target The Promise-Like object @@ -1007,19 +952,6 @@ export module Promise return new PromiseWrapper({then: then}); } - /** - * Provides a promise that can be resolved later. - * @returns {Promise} - */ - export function pending(resolver?:Promise.Executor):Promise - { - return new Promise(resolver); - // var p = pools.pending.get(); - // if(resolver) p.resolveUsing(resolver); - // return p; - } - - } diff --git a/tests/mocha/System/Promises/Promise.js b/tests/mocha/System/Promises/Promise.js index 21765099..6ff18378 100644 --- a/tests/mocha/System/Promises/Promise.js +++ b/tests/mocha/System/Promises/Promise.js @@ -3,7 +3,7 @@ var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === 'function' && define.amd) { - define(["require", "exports", "../../../../source/System/Promises/Promise", "../../../../source/System/Collections/Array/Utility", "../../../../source/System/Diagnostics/Stopwatch", "../../../../source/System/Threading/defer"], factory); + define(["require", "exports", "../../../../source/System/Promises/Promise", "../../../../source/System/Collections/Array/Utility", "../../../../source/System/Diagnostics/Stopwatch", "../../../../source/System/Threading/defer", "../../../../source/System/Promises/LazyPromise"], factory); } })(function (require, exports) { "use strict"; @@ -11,6 +11,7 @@ var AU = require("../../../../source/System/Collections/Array/Utility"); var Stopwatch_1 = require("../../../../source/System/Diagnostics/Stopwatch"); var defer_1 = require("../../../../source/System/Threading/defer"); + var LazyPromise_1 = require("../../../../source/System/Promises/LazyPromise"); var assert = require('../../../../node_modules/assert/assert'); var REASON = "this is not an error, but it might show up in the console"; var calledAsFunctionThis = (function () { return this; }()); @@ -71,7 +72,7 @@ it("resolves multiple observers", function (done) { var nextTurn = false; var resolution = "Ta-ram pam param!"; - var pending = Promise_1.Promise.pending(); + var pending = new Promise_1.Promise(); var count = 10; var i = 0; function resolve(value) { @@ -93,7 +94,7 @@ }); it("observers called even after throw (synchronous)", function () { var threw = false; - var pending = Promise_1.Promise.pending(); + var pending = new Promise_1.Promise(); pending.thenSynchronous(function () { threw = true; throw new Error(REASON); @@ -104,7 +105,7 @@ }); it("observers called even after throw (asynchronous)", function () { var threw = false; - var pending = Promise_1.Promise.pending(); + var pending = new Promise_1.Promise(); pending.thenSynchronous(function () { threw = true; throw new Error(REASON); @@ -186,7 +187,7 @@ })); }); it("should follow expected promise behavior flow for a pending then resolved promise", function () { - var p = Promise_1.Promise.pending(); + var p = new Promise_1.Promise(); assert.ok(p.isPending); p.resolve(true); return testPromiseFlow(p); @@ -198,16 +199,35 @@ }); return testPromiseFlow(p); }); - it("should be able to use lazy pending", function () { - var p = Promise_1.Promise.lazy(function (resolve) { - defer_1.defer(function () { return resolve(true); }); + it("should be able to use a lazy", function () { + it(".deferFromNow", function () { + new LazyPromise_1.LazyPromise(function (resolve) { + assert.ok(false, "Should not have triggered the resolution."); + }).delayFromNow(1000); + var elapsed = Stopwatch_1.default.startNew(); + return testPromiseFlow(new LazyPromise_1.LazyPromise(function (resolve) { return defer_1.defer(function () { return resolve(true); }, 1000); }) + .delayFromNow(1000) + .thenThis(function (r) { + var ms = elapsed.elapsedMilliseconds; + assert.ok(ms > 1000 && ms < 2000); + })); + }); + it(".deferFromNow", function () { + new LazyPromise_1.LazyPromise(function (resolve) { + assert.ok(false, "Should not have triggered the resolution."); + }).delayAfterResolve(1000); + var elapsed = Stopwatch_1.default.startNew(); + return testPromiseFlow(new LazyPromise_1.LazyPromise(function (resolve) { return defer_1.defer(function () { return resolve(true); }, 1000); }) + .delayAfterResolve(1000) + .thenThis(function (r) { + var ms = elapsed.elapsedMilliseconds; + assert.ok(ms > 2000 && ms < 3000); + })); }); - assert.ok(p.isPending); - return testPromiseFlow(p); }); it("should be able to use promise as a resolution", function () { - var s = Promise_1.Promise.pending(); - var p = Promise_1.Promise.pending(function (resolve) { + var s = new Promise_1.Promise(); + var p = new Promise_1.Promise(function (resolve) { defer_1.defer(function () { return resolve(s); }); }); assert.ok(s.isPending); @@ -216,7 +236,7 @@ return testPromiseFlow(p); }); it("should be able to resolve all", function () { - var other = Promise_1.Promise.lazy(function (resolve) { + var other = new LazyPromise_1.LazyPromise(function (resolve) { resolve(4); }); return Promise_1.Promise.all(other, Promise_1.Promise.resolve(3), Promise_1.Promise.resolve(2), Promise_1.Promise.resolve(1)).thenSynchronous(function (r) { @@ -227,7 +247,7 @@ }); }); it("should resolve as rejected", function () { - var other = Promise_1.Promise.lazy(function (resolve) { + var other = new LazyPromise_1.LazyPromise(function (resolve) { resolve(4); }); return Promise_1.Promise.all(other, Promise_1.Promise.resolve(3), Promise_1.Promise.resolve(2), Promise_1.Promise.resolve(1), Promise_1.Promise.reject(-1)).thenSynchronous(function () { @@ -237,7 +257,7 @@ }); }); it("should be resolve the first to win the race", function () { - var other = Promise_1.Promise.lazy(function (resolve, reject) { + var other = new LazyPromise_1.LazyPromise(function (resolve, reject) { reject(4); }); return Promise_1.Promise.race(other, Promise_1.Promise.resolve(3), Promise_1.Promise.resolve(2), Promise_1.Promise.resolve(1)).thenSynchronous(function (r) { diff --git a/tests/mocha/System/Promises/Promise.js.map b/tests/mocha/System/Promises/Promise.js.map index c8e6d344..e4f19ec4 100644 --- a/tests/mocha/System/Promises/Promise.js.map +++ b/tests/mocha/System/Promises/Promise.js.map @@ -1 +1 @@ -{"version":3,"sources":["System/Promises/Promise.ts"],"names":[],"mappings":"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","file":"System/Promises/Promise.js","sourcesContent":["///\r\n\r\nimport {Promise, PromiseBase} from \"../../../../source/System/Promises/Promise\";\r\nimport * as AU from \"../../../../source/System/Collections/Array/Utility\";\r\nimport Stopwatch from \"../../../../source/System/Diagnostics/Stopwatch\";\r\nimport {defer} from \"../../../../source/System/Threading/defer\";\r\nvar assert = require('../../../../node_modules/assert/assert');\r\n\r\n\r\nvar REASON = \"this is not an error, but it might show up in the console\";\r\n\r\n// In browsers that support strict mode, it'll be `undefined`; otherwise, the global.\r\nvar calledAsFunctionThis = (function() { return this; }());\r\n\r\nafterEach(function()\r\n{\r\n\t//Q.onerror = null;\r\n});\r\n\r\ndescribe(\"computing sum of integers using promises\", ()=>\r\n{\r\n\t// Use triangular numbers...\r\n\tvar count = 1000;\r\n\tvar array = AU.range(1, count);\r\n\tvar swA = Stopwatch.startNew();\r\n\tvar answer = array.reduce((currentVal, nextVal)=>currentVal + nextVal, 0);\r\n\tswA.stop();\r\n\r\n\tit(\"should compute correct result without blowing stack (Synchronous) (lambda only)\", ()=>\r\n\t{\r\n\t\tlet sw = Stopwatch.startNew();\r\n\t\treturn array\r\n\t\t\t.reduce((promise:PromiseBase, nextVal:number) =>\r\n\t\t\t\tpromise.thenSynchronous(currentVal=>currentVal + nextVal), Promise.resolve(0))\r\n\t\t\t.thenSynchronous(value=>\r\n\t\t\t{\r\n\t\t\t\tsw.stop();\r\n\t\t\t\t//console.log(\"\");\r\n\t\t\t\t//console.log(\"Synchronous Promise Compute Milliseconds: \", sw.elapsedMilliseconds);\r\n\t\t\t\tassert.equal(value, answer);\r\n\t\t\t});\r\n\t});\r\n\r\n\tit(\"should compute correct result without blowing stack (lambda only)\", ()=>\r\n\t{\r\n\t\tlet sw = Stopwatch.startNew();\r\n\t\treturn array\r\n\t\t\t.reduce((promise:PromiseBase, nextVal:number) =>\r\n\t\t\t\tpromise.then(currentVal=>currentVal + nextVal), Promise.resolve(0))\r\n\t\t\t.then(value=>\r\n\t\t\t{\r\n\t\t\t\tsw.stop();\r\n\t\t\t\t//console.log(\"\");\r\n\t\t\t\t//console.log(\"Deferred Promise Compute Milliseconds: \", sw.elapsedMilliseconds);\r\n\t\t\t\tassert.equal(value, answer);\r\n\t\t\t});\r\n\t});\r\n\r\n\t// it(\"should compute correct result without blowing stack (All Deferred) (lambda only)\", ()=>\r\n\t// {\r\n\t// \tlet sw = Stopwatch.startNew();\r\n\t// \treturn array\r\n\t// \t\t.reduce((promise:PromiseBase, nextVal:number) =>\r\n\t// \t\t\tpromise.then(\r\n\t// \t\t\t\tcurrentVal=>currentVal + nextVal).deferAll(), Promise.resolve(0).deferAll())\r\n\t// \t\t.then(value=>\r\n\t// \t\t{\r\n\t// \t\t\tsw.stop();\r\n\t// \t\t\t//console.log(\"\");\r\n\t// \t\t\t//console.log(\"All Deferred Promise Compute Milliseconds: \", sw.elapsedMilliseconds);\r\n\t// \t\t\tassert.equal(value, answer);\r\n\t// \t\t});\r\n\t// });\r\n\r\n\tit(\"should be deferring fulfillment\", ()=>{\r\n\r\n\t\tlet wasRun = false;\r\n\t\tvar r = Promise.resolve(true).then(()=>\r\n\t\t{\r\n\t\t\twasRun = true;\r\n\t\t});\r\n\t\tassert.ok(!wasRun, \"The promise should have deferred until after closure completed.\");\r\n\t\treturn r;\r\n\t});\r\n\r\n});\r\n\r\n\r\ndescribe(\"Resolution and Rejection\", ()=>\r\n{\r\n\tit(\"should result in a fulfilled promise when given a value\", ()=>\r\n\t{\r\n\t\tvar f = Promise.resolve(5);\r\n\t\tassert.equal(f.result, 5);\r\n\t\tassert.equal(f.isSettled, true);\r\n\t\tassert.equal(f.isFulfilled, true);\r\n\t\tassert.equal(f.isRejected, false);\r\n\t});\r\n\r\n\tit(\"should result in a rejected promise when requesting rejected\", ()=>\r\n\t{\r\n\t\tvar f = Promise.reject(\"err\");\r\n\t\tassert.equal(f.error, \"err\");\r\n\t\tassert.equal(f.isSettled, true);\r\n\t\tassert.equal(f.isFulfilled, false);\r\n\t\tassert.equal(f.isRejected, true);\r\n\t});\r\n\r\n\tit(\"resolves multiple observers\", done=>\r\n\t{\r\n\t\tvar nextTurn = false;\r\n\r\n\t\tvar resolution = \"Ta-ram pam param!\";\r\n\t\tvar pending = Promise.pending();\r\n\t\tvar count = 10;\r\n\t\tvar i = 0;\r\n\r\n\t\tfunction resolve(value:any)\r\n\t\t{\r\n\t\t\ti++;\r\n\t\t\tassert.equal(value, resolution);\r\n\t\t\tassert.ok(nextTurn);\r\n\t\t\tif(!nextTurn) i = count;\r\n\t\t\tif(i===count)\r\n\t\t\t{\r\n\t\t\t\tdone();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\twhile(++i<=count)\r\n\t\t{\r\n\t\t\tpending.then(resolve);\r\n\t\t}\r\n\r\n\t\tpending.resolve(resolution);\r\n\t\ti = 0;\r\n\t\tnextTurn = true;\r\n\t});\r\n\r\n\tit(\"observers called even after throw (synchronous)\", ()=>\r\n\t{\r\n\t\tvar threw = false;\r\n\t\tvar pending = Promise.pending();\r\n\t\tpending.thenSynchronous(()=>\r\n\t\t{\r\n\t\t\tthrew = true;\r\n\t\t\tthrow new Error(REASON);\r\n\t\t});\r\n\r\n\t\tpending.thenSynchronous(\r\n\t\t\tvalue=>assert.equal(value, 10),\r\n\t\t\t()=>assert.equal(\"not\", \"here\")\r\n\t\t);\r\n\r\n\t\tpending.resolve(10);\r\n\t\treturn pending;\r\n\t});\r\n\r\n\tit(\"observers called even after throw (asynchronous)\", ()=>\r\n\t{\r\n\t\tvar threw = false;\r\n\t\tvar pending = Promise.pending();\r\n\t\tpending.thenSynchronous(()=>\r\n\t\t{\r\n\t\t\tthrew = true;\r\n\t\t\tthrow new Error(REASON);\r\n\t\t});\r\n\r\n\t\tpending.thenSynchronous(\r\n\t\t\tvalue=>assert.equal(value, 10),\r\n\t\t\t()=>assert.equal(\"not\", \"here\")\r\n\t\t);\r\n\r\n\t\tpending.resolve(10);\r\n\t\treturn pending;\r\n\t});\r\n\t\r\n\tconst BREAK = \"break\", NO = \"NO!\";\r\n\r\n\tfunction testPromiseFlow(p:PromiseBase):PromiseBase\r\n\t{\r\n\t\treturn p\r\n\t\t\t.then(null) // ensure pass through\r\n\t\t\t.then(v=> // onFulfilled\r\n\t\t\t{\r\n\t\t\t\tassert.ok(v); // v === true\r\n\t\t\t\treturn v; // *\r\n\t\t\t}, ()=> // onRejected\r\n\t\t\t{\r\n\t\t\t\tassert.ok(false);\r\n\t\t\t\treturn true;\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(v);\r\n\t\t\t\treturn v; // *\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(v);\r\n\t\t\t\treturn false; // *\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(!v);\r\n\t\t\t\treturn true; // *\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(v);\r\n\t\t\t\tthrow BREAK; // *\r\n\t\t\t}, e=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(false);\r\n\t\t\t\treturn NO;\r\n\t\t\t})\r\n\t\t\t.then(null,null) // ensure pass through\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\t// The previous promise threw/rejected so should never go here.\r\n\t\t\t\tassert.ok(false);\r\n\t\t\t\treturn NO;\r\n\t\t\t}, e=>\r\n\t\t\t{\r\n\t\t\t\tassert.equal(e, BREAK);\r\n\t\t\t\treturn BREAK; // *\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.equal(v, BREAK);\r\n\t\t\t\treturn true; // *\r\n\t\t\t}, (e:any)=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(false);\r\n\t\t\t\treturn false;\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(v);\r\n\t\t\t\tthrow BREAK; // *\r\n\t\t\t})\r\n\t\t\t.catch(e=>\r\n\t\t\t{\r\n\t\t\t\tassert.equal(e, BREAK);\r\n\t\t\t\treturn true; // *\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(v);\r\n\t\t\t\treturn 10;\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.equal(v, 10);\r\n\t\t\t});\r\n\t}\r\n\r\n\tit(\"should follow expected promise behavior flow for a resolved promise\", ()=>\r\n\t{\r\n\t\treturn testPromiseFlow(Promise.resolve(true));\r\n\t});\r\n\r\n\r\n\tit(\"should follow expected promise behavior flow for a rejected promise\", ()=>\r\n\t{\r\n\t\treturn testPromiseFlow(\r\n\t\t\tPromise\r\n\t\t\t\t.reject(BREAK)\r\n\t\t\t\t.catch(v=>\r\n\t\t\t\t{\r\n\t\t\t\t\tassert.equal(v, BREAK);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}));\r\n\t});\r\n\r\n\r\n\tit(\"should follow expected promise behavior flow for a pending then resolved promise\", ()=>\r\n\t{\r\n\t\tvar p = Promise.pending();\r\n\t\tassert.ok(p.isPending);\r\n\t\tp.resolve(true);\r\n\t\treturn testPromiseFlow(p);\r\n\t});\r\n\r\n\r\n\tit(\"should be able to use a then-able\", ()=>\r\n\t{\r\n\t\tvar p:any = Promise.createFrom((r:Promise.Fulfill)=>{\r\n\t\t\tr(true);\r\n\t\t\treturn Promise.resolve(true);\r\n\t\t});\r\n\t\treturn testPromiseFlow(p);\r\n\t});\r\n\r\n\r\n\tit(\"should be able to use lazy pending\", ()=>\r\n\t{\r\n\t\tvar p = Promise.lazy(resolve=>{\r\n\t\t\tdefer(()=> resolve(true));\r\n\t\t});\r\n\t\tassert.ok(p.isPending);\r\n\t\treturn testPromiseFlow(p);\r\n\t});\r\n\r\n\tit(\"should be able to use promise as a resolution\", ()=>\r\n\t{\r\n\t\tvar s = Promise.pending();\r\n\t\tvar p = Promise.pending(resolve=>{\r\n\t\t\tdefer(()=> resolve(s));\r\n\t\t});\r\n\t\tassert.ok(s.isPending);\r\n\t\tassert.ok(p.isPending);\r\n\t\ts.resolve(true);\r\n\t\treturn testPromiseFlow(p);\r\n\t});\r\n\r\n\tit(\"should be able to resolve all\", ()=>\r\n\t{\r\n\t\tvar other = Promise.lazy(resolve=>{\r\n\t\t\tresolve(4);\r\n\t\t});\r\n\t\treturn Promise.all(\r\n\t\t\tother,\r\n\t\t\tPromise.resolve(3),\r\n\t\t\tPromise.resolve(2),\r\n\t\t\tPromise.resolve(1)\r\n\t\t).thenSynchronous(r=>{\r\n\t\t\tassert.equal(r[0],4);\r\n\t\t\tassert.equal(r[1],3);\r\n\t\t\tassert.equal(r[2],2);\r\n\t\t\tassert.equal(r[3],1);\r\n\t\t});\r\n\t});\r\n\r\n\tit(\"should resolve as rejected\", ()=>\r\n\t{\r\n\t\tvar other = Promise.lazy(resolve=>{\r\n\t\t\tresolve(4);\r\n\t\t});\r\n\t\treturn Promise.all(\r\n\t\t\tother,\r\n\t\t\tPromise.resolve(3),\r\n\t\t\tPromise.resolve(2),\r\n\t\t\tPromise.resolve(1),\r\n\t\t\tPromise.reject(-1)\r\n\t\t).thenSynchronous(()=>{\r\n\t\t\tassert.ok(false);\r\n\t\t},e=>{\r\n\t\t\tassert.equal(e,-1);\r\n\t\t});\r\n\t});\r\n\r\n\tit(\"should be resolve the first to win the race\", ()=>\r\n\t{\r\n\t\tvar other = Promise.lazy((resolve,reject)=>{\r\n\t\t\treject(4);\r\n\t\t});\r\n\t\treturn Promise.race(\r\n\t\t\tother,\r\n\t\t\tPromise.resolve(3),\r\n\t\t\tPromise.resolve(2),\r\n\t\t\tPromise.resolve(1)\r\n\t\t).thenSynchronous(r=>{\r\n\t\t\tassert.equal(r,3);\r\n\t\t});\r\n\t});\r\n\r\n\tit(\"should be resolve the rejection\", ()=>\r\n\t{\r\n\t\treturn Promise.race(\r\n\t\t\tPromise.resolve(3).delayFromNow(20),\r\n\t\t\tPromise.resolve(2).delayAfterResolve(10),\r\n\t\t\tPromise.reject(1)\r\n\t\t).thenSynchronous(()=>{\r\n\t\t\tassert.ok(false);\r\n\t\t},e=>{\r\n\t\t\tassert.equal(e,1);\r\n\t\t});\r\n\t});\r\n\r\n\r\n});\r\n\r\n"]} \ No newline at end of file +{"version":3,"sources":["System/Promises/Promise.ts"],"names":[],"mappings":"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","file":"System/Promises/Promise.js","sourcesContent":["///\r\n\r\nimport {Promise, PromiseBase} from \"../../../../source/System/Promises/Promise\";\r\nimport * as AU from \"../../../../source/System/Collections/Array/Utility\";\r\nimport Stopwatch from \"../../../../source/System/Diagnostics/Stopwatch\";\r\nimport {defer} from \"../../../../source/System/Threading/defer\";\r\nimport {LazyPromise} from \"../../../../source/System/Promises/LazyPromise\";\r\nvar assert = require('../../../../node_modules/assert/assert');\r\n\r\n\r\nvar REASON = \"this is not an error, but it might show up in the console\";\r\n\r\n// In browsers that support strict mode, it'll be `undefined`; otherwise, the global.\r\nvar calledAsFunctionThis = (function() { return this; }());\r\n\r\nafterEach(function()\r\n{\r\n\t//Q.onerror = null;\r\n});\r\n\r\ndescribe(\"computing sum of integers using promises\", ()=>\r\n{\r\n\t// Use triangular numbers...\r\n\tvar count = 1000;\r\n\tvar array = AU.range(1, count);\r\n\tvar swA = Stopwatch.startNew();\r\n\tvar answer = array.reduce((currentVal, nextVal)=>currentVal + nextVal, 0);\r\n\tswA.stop();\r\n\r\n\tit(\"should compute correct result without blowing stack (Synchronous) (lambda only)\", ()=>\r\n\t{\r\n\t\tlet sw = Stopwatch.startNew();\r\n\t\treturn array\r\n\t\t\t.reduce((promise:PromiseBase, nextVal:number) =>\r\n\t\t\t\tpromise.thenSynchronous(currentVal=>currentVal + nextVal), Promise.resolve(0))\r\n\t\t\t.thenSynchronous(value=>\r\n\t\t\t{\r\n\t\t\t\tsw.stop();\r\n\t\t\t\t//console.log(\"\");\r\n\t\t\t\t//console.log(\"Synchronous Promise Compute Milliseconds: \", sw.elapsedMilliseconds);\r\n\t\t\t\tassert.equal(value, answer);\r\n\t\t\t});\r\n\t});\r\n\r\n\tit(\"should compute correct result without blowing stack (lambda only)\", ()=>\r\n\t{\r\n\t\tlet sw = Stopwatch.startNew();\r\n\t\treturn array\r\n\t\t\t.reduce((promise:PromiseBase, nextVal:number) =>\r\n\t\t\t\tpromise.then(currentVal=>currentVal + nextVal), Promise.resolve(0))\r\n\t\t\t.then(value=>\r\n\t\t\t{\r\n\t\t\t\tsw.stop();\r\n\t\t\t\t//console.log(\"\");\r\n\t\t\t\t//console.log(\"Deferred Promise Compute Milliseconds: \", sw.elapsedMilliseconds);\r\n\t\t\t\tassert.equal(value, answer);\r\n\t\t\t});\r\n\t});\r\n\r\n\t// it(\"should compute correct result without blowing stack (All Deferred) (lambda only)\", ()=>\r\n\t// {\r\n\t// \tlet sw = Stopwatch.startNew();\r\n\t// \treturn array\r\n\t// \t\t.reduce((promise:PromiseBase, nextVal:number) =>\r\n\t// \t\t\tpromise.then(\r\n\t// \t\t\t\tcurrentVal=>currentVal + nextVal).deferAll(), Promise.resolve(0).deferAll())\r\n\t// \t\t.then(value=>\r\n\t// \t\t{\r\n\t// \t\t\tsw.stop();\r\n\t// \t\t\t//console.log(\"\");\r\n\t// \t\t\t//console.log(\"All Deferred Promise Compute Milliseconds: \", sw.elapsedMilliseconds);\r\n\t// \t\t\tassert.equal(value, answer);\r\n\t// \t\t});\r\n\t// });\r\n\r\n\tit(\"should be deferring fulfillment\", ()=>\r\n\t{\r\n\r\n\t\tlet wasRun = false;\r\n\t\tvar r = Promise.resolve(true).then(()=>\r\n\t\t{\r\n\t\t\twasRun = true;\r\n\t\t});\r\n\t\tassert.ok(!wasRun, \"The promise should have deferred until after closure completed.\");\r\n\t\treturn r;\r\n\t});\r\n\r\n});\r\n\r\n\r\ndescribe(\"Resolution and Rejection\", ()=>\r\n{\r\n\tit(\"should result in a fulfilled promise when given a value\", ()=>\r\n\t{\r\n\t\tvar f = Promise.resolve(5);\r\n\t\tassert.equal(f.result, 5);\r\n\t\tassert.equal(f.isSettled, true);\r\n\t\tassert.equal(f.isFulfilled, true);\r\n\t\tassert.equal(f.isRejected, false);\r\n\t});\r\n\r\n\tit(\"should result in a rejected promise when requesting rejected\", ()=>\r\n\t{\r\n\t\tvar f = Promise.reject(\"err\");\r\n\t\tassert.equal(f.error, \"err\");\r\n\t\tassert.equal(f.isSettled, true);\r\n\t\tassert.equal(f.isFulfilled, false);\r\n\t\tassert.equal(f.isRejected, true);\r\n\t});\r\n\r\n\tit(\"resolves multiple observers\", done=>\r\n\t{\r\n\t\tvar nextTurn = false;\r\n\r\n\t\tvar resolution = \"Ta-ram pam param!\";\r\n\t\tvar pending = new Promise();\r\n\t\tvar count = 10;\r\n\t\tvar i = 0;\r\n\r\n\t\tfunction resolve(value:any)\r\n\t\t{\r\n\t\t\ti++;\r\n\t\t\tassert.equal(value, resolution);\r\n\t\t\tassert.ok(nextTurn);\r\n\t\t\tif(!nextTurn) i = count;\r\n\t\t\tif(i===count)\r\n\t\t\t{\r\n\t\t\t\tdone();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\twhile(++i<=count)\r\n\t\t{\r\n\t\t\tpending.then(resolve);\r\n\t\t}\r\n\r\n\t\tpending.resolve(resolution);\r\n\t\ti = 0;\r\n\t\tnextTurn = true;\r\n\t});\r\n\r\n\tit(\"observers called even after throw (synchronous)\", ()=>\r\n\t{\r\n\t\tvar threw = false;\r\n\t\tvar pending = new Promise();\r\n\t\tpending.thenSynchronous(()=>\r\n\t\t{\r\n\t\t\tthrew = true;\r\n\t\t\tthrow new Error(REASON);\r\n\t\t});\r\n\r\n\t\tpending.thenSynchronous(\r\n\t\t\tvalue=>assert.equal(value, 10),\r\n\t\t\t()=>assert.equal(\"not\", \"here\")\r\n\t\t);\r\n\r\n\t\tpending.resolve(10);\r\n\t\treturn pending;\r\n\t});\r\n\r\n\tit(\"observers called even after throw (asynchronous)\", ()=>\r\n\t{\r\n\t\tvar threw = false;\r\n\t\tvar pending = new Promise();\r\n\t\tpending.thenSynchronous(()=>\r\n\t\t{\r\n\t\t\tthrew = true;\r\n\t\t\tthrow new Error(REASON);\r\n\t\t});\r\n\r\n\t\tpending.thenSynchronous(\r\n\t\t\tvalue=>assert.equal(value, 10),\r\n\t\t\t()=>assert.equal(\"not\", \"here\")\r\n\t\t);\r\n\r\n\t\tpending.resolve(10);\r\n\t\treturn pending;\r\n\t});\r\n\r\n\tconst BREAK = \"break\", NO = \"NO!\";\r\n\r\n\tfunction testPromiseFlow(p:PromiseBase):PromiseBase\r\n\t{\r\n\t\treturn p\r\n\t\t\t.then(null) // ensure pass through\r\n\t\t\t.then(v=> // onFulfilled\r\n\t\t\t{\r\n\t\t\t\tassert.ok(v); // v === true\r\n\t\t\t\treturn v; // *\r\n\t\t\t}, ()=> // onRejected\r\n\t\t\t{\r\n\t\t\t\tassert.ok(false);\r\n\t\t\t\treturn true;\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(v);\r\n\t\t\t\treturn v; // *\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(v);\r\n\t\t\t\treturn false; // *\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(!v);\r\n\t\t\t\treturn true; // *\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(v);\r\n\t\t\t\tthrow BREAK; // *\r\n\t\t\t}, e=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(false);\r\n\t\t\t\treturn NO;\r\n\t\t\t})\r\n\t\t\t.then(null, null) // ensure pass through\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\t// The previous promise threw/rejected so should never go here.\r\n\t\t\t\tassert.ok(false);\r\n\t\t\t\treturn NO;\r\n\t\t\t}, e=>\r\n\t\t\t{\r\n\t\t\t\tassert.equal(e, BREAK);\r\n\t\t\t\treturn BREAK; // *\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.equal(v, BREAK);\r\n\t\t\t\treturn true; // *\r\n\t\t\t}, (e:any)=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(false);\r\n\t\t\t\treturn false;\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(v);\r\n\t\t\t\tthrow BREAK; // *\r\n\t\t\t})\r\n\t\t\t.catch(e=>\r\n\t\t\t{\r\n\t\t\t\tassert.equal(e, BREAK);\r\n\t\t\t\treturn true; // *\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(v);\r\n\t\t\t\treturn 10;\r\n\t\t\t})\r\n\t\t\t.then(v=>\r\n\t\t\t{\r\n\t\t\t\tassert.equal(v, 10);\r\n\t\t\t});\r\n\t}\r\n\r\n\tit(\"should follow expected promise behavior flow for a resolved promise\", ()=>\r\n\t{\r\n\t\treturn testPromiseFlow(Promise.resolve(true));\r\n\t});\r\n\r\n\r\n\tit(\"should follow expected promise behavior flow for a rejected promise\", ()=>\r\n\t{\r\n\t\treturn testPromiseFlow(\r\n\t\t\tPromise\r\n\t\t\t\t.reject(BREAK)\r\n\t\t\t\t.catch(v=>\r\n\t\t\t\t{\r\n\t\t\t\t\tassert.equal(v, BREAK);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}));\r\n\t});\r\n\r\n\r\n\tit(\"should follow expected promise behavior flow for a pending then resolved promise\", ()=>\r\n\t{\r\n\t\tvar p = new Promise();\r\n\t\tassert.ok(p.isPending);\r\n\t\tp.resolve(true);\r\n\t\treturn testPromiseFlow(p);\r\n\t});\r\n\r\n\r\n\tit(\"should be able to use a then-able\", ()=>\r\n\t{\r\n\t\tvar p:any = Promise.createFrom((r:Promise.Fulfill)=>\r\n\t\t{\r\n\t\t\tr(true);\r\n\t\t\treturn Promise.resolve(true);\r\n\t\t});\r\n\t\treturn testPromiseFlow(p);\r\n\t});\r\n\r\n\r\n\tit(\"should be able to use a lazy\", ()=>\r\n\t{\r\n\t\tit(\".deferFromNow\", ()=>\r\n\t\t{\r\n\t\t\tnew LazyPromise(resolve=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(false, \"Should not have triggered the resolution.\");\r\n\t\t\t}).delayFromNow(1000);\r\n\r\n\t\t\tvar elapsed = Stopwatch.startNew();\r\n\r\n\t\t\treturn testPromiseFlow(\r\n\t\t\t\tnew LazyPromise(resolve=>defer(()=>resolve(true), 1000))\r\n\t\t\t\t\t.delayFromNow(1000)\r\n\t\t\t\t\t.thenThis(r=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar ms = elapsed.elapsedMilliseconds;\r\n\t\t\t\t\t\tassert.ok(ms>1000 && ms<2000);\r\n\t\t\t\t\t})\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\tit(\".deferFromNow\", ()=>\r\n\t\t{\r\n\t\t\tnew LazyPromise(resolve=>\r\n\t\t\t{\r\n\t\t\t\tassert.ok(false, \"Should not have triggered the resolution.\");\r\n\t\t\t}).delayAfterResolve(1000);\r\n\r\n\t\t\tvar elapsed = Stopwatch.startNew();\r\n\r\n\t\t\treturn testPromiseFlow(\r\n\t\t\t\tnew LazyPromise(resolve=>defer(()=>resolve(true), 1000))\r\n\t\t\t\t\t.delayAfterResolve(1000)\r\n\t\t\t\t\t.thenThis(r=>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar ms = elapsed.elapsedMilliseconds;\r\n\t\t\t\t\t\tassert.ok(ms>2000 && ms<3000);\r\n\t\t\t\t\t})\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t});\r\n\r\n\tit(\"should be able to use promise as a resolution\", ()=>\r\n\t{\r\n\t\tvar s = new Promise();\r\n\t\tvar p = new Promise(resolve=>\r\n\t\t{\r\n\t\t\tdefer(()=> resolve(s));\r\n\t\t});\r\n\t\tassert.ok(s.isPending);\r\n\t\tassert.ok(p.isPending);\r\n\t\ts.resolve(true);\r\n\t\treturn testPromiseFlow(p);\r\n\t});\r\n\r\n\tit(\"should be able to resolve all\", ()=>\r\n\t{\r\n\t\tvar other = new LazyPromise(resolve=>\r\n\t\t{\r\n\t\t\tresolve(4);\r\n\t\t});\r\n\t\treturn Promise.all(\r\n\t\t\tother,\r\n\t\t\tPromise.resolve(3),\r\n\t\t\tPromise.resolve(2),\r\n\t\t\tPromise.resolve(1)\r\n\t\t).thenSynchronous(r=>\r\n\t\t{\r\n\t\t\tassert.equal(r[0], 4);\r\n\t\t\tassert.equal(r[1], 3);\r\n\t\t\tassert.equal(r[2], 2);\r\n\t\t\tassert.equal(r[3], 1);\r\n\t\t});\r\n\t});\r\n\r\n\tit(\"should resolve as rejected\", ()=>\r\n\t{\r\n\t\tvar other = new LazyPromise(resolve=>\r\n\t\t{\r\n\t\t\tresolve(4);\r\n\t\t});\r\n\t\treturn Promise.all(\r\n\t\t\tother,\r\n\t\t\tPromise.resolve(3),\r\n\t\t\tPromise.resolve(2),\r\n\t\t\tPromise.resolve(1),\r\n\t\t\tPromise.reject(-1)\r\n\t\t).thenSynchronous(()=>\r\n\t\t{\r\n\t\t\tassert.ok(false);\r\n\t\t}, e=>\r\n\t\t{\r\n\t\t\tassert.equal(e, -1);\r\n\t\t});\r\n\t});\r\n\r\n\tit(\"should be resolve the first to win the race\", ()=>\r\n\t{\r\n\t\tvar other = new LazyPromise((resolve, reject)=>\r\n\t\t{\r\n\t\t\treject(4);\r\n\t\t});\r\n\t\treturn Promise.race(\r\n\t\t\tother,\r\n\t\t\tPromise.resolve(3),\r\n\t\t\tPromise.resolve(2),\r\n\t\t\tPromise.resolve(1)\r\n\t\t).thenSynchronous(r=>\r\n\t\t{\r\n\t\t\tassert.equal(r, 3);\r\n\t\t});\r\n\t});\r\n\r\n\tit(\"should be resolve the rejection\", ()=>\r\n\t{\r\n\t\treturn Promise.race(\r\n\t\t\tPromise.resolve(3).delayFromNow(20),\r\n\t\t\tPromise.resolve(2).delayAfterResolve(10),\r\n\t\t\tPromise.reject(1)\r\n\t\t).thenSynchronous(()=>\r\n\t\t{\r\n\t\t\tassert.ok(false);\r\n\t\t}, e=>\r\n\t\t{\r\n\t\t\tassert.equal(e, 1);\r\n\t\t});\r\n\t});\r\n\r\n\r\n});\r\n\r\n"]} \ No newline at end of file diff --git a/tests/mocha/System/Promises/Promise.ts b/tests/mocha/System/Promises/Promise.ts index b68aae72..a693e8c8 100644 --- a/tests/mocha/System/Promises/Promise.ts +++ b/tests/mocha/System/Promises/Promise.ts @@ -4,6 +4,7 @@ import {Promise, PromiseBase} from "../../../../source/System/Promises/Promise"; import * as AU from "../../../../source/System/Collections/Array/Utility"; import Stopwatch from "../../../../source/System/Diagnostics/Stopwatch"; import {defer} from "../../../../source/System/Threading/defer"; +import {LazyPromise} from "../../../../source/System/Promises/LazyPromise"; var assert = require('../../../../node_modules/assert/assert'); @@ -72,7 +73,8 @@ describe("computing sum of integers using promises", ()=> // }); // }); - it("should be deferring fulfillment", ()=>{ + it("should be deferring fulfillment", ()=> + { let wasRun = false; var r = Promise.resolve(true).then(()=> @@ -111,7 +113,7 @@ describe("Resolution and Rejection", ()=> var nextTurn = false; var resolution = "Ta-ram pam param!"; - var pending = Promise.pending(); + var pending = new Promise(); var count = 10; var i = 0; @@ -140,7 +142,7 @@ describe("Resolution and Rejection", ()=> it("observers called even after throw (synchronous)", ()=> { var threw = false; - var pending = Promise.pending(); + var pending = new Promise(); pending.thenSynchronous(()=> { threw = true; @@ -159,7 +161,7 @@ describe("Resolution and Rejection", ()=> it("observers called even after throw (asynchronous)", ()=> { var threw = false; - var pending = Promise.pending(); + var pending = new Promise(); pending.thenSynchronous(()=> { threw = true; @@ -174,7 +176,7 @@ describe("Resolution and Rejection", ()=> pending.resolve(10); return pending; }); - + const BREAK = "break", NO = "NO!"; function testPromiseFlow(p:PromiseBase):PromiseBase @@ -214,7 +216,7 @@ describe("Resolution and Rejection", ()=> assert.ok(false); return NO; }) - .then(null,null) // ensure pass through + .then(null, null) // ensure pass through .then(v=> { // The previous promise threw/rejected so should never go here. @@ -276,7 +278,7 @@ describe("Resolution and Rejection", ()=> it("should follow expected promise behavior flow for a pending then resolved promise", ()=> { - var p = Promise.pending(); + var p = new Promise(); assert.ok(p.isPending); p.resolve(true); return testPromiseFlow(p); @@ -285,7 +287,8 @@ describe("Resolution and Rejection", ()=> it("should be able to use a then-able", ()=> { - var p:any = Promise.createFrom((r:Promise.Fulfill)=>{ + var p:any = Promise.createFrom((r:Promise.Fulfill)=> + { r(true); return Promise.resolve(true); }); @@ -293,19 +296,55 @@ describe("Resolution and Rejection", ()=> }); - it("should be able to use lazy pending", ()=> + it("should be able to use a lazy", ()=> { - var p = Promise.lazy(resolve=>{ - defer(()=> resolve(true)); + it(".deferFromNow", ()=> + { + new LazyPromise(resolve=> + { + assert.ok(false, "Should not have triggered the resolution."); + }).delayFromNow(1000); + + var elapsed = Stopwatch.startNew(); + + return testPromiseFlow( + new LazyPromise(resolve=>defer(()=>resolve(true), 1000)) + .delayFromNow(1000) + .thenThis(r=> + { + var ms = elapsed.elapsedMilliseconds; + assert.ok(ms>1000 && ms<2000); + }) + ); }); - assert.ok(p.isPending); - return testPromiseFlow(p); + + it(".deferFromNow", ()=> + { + new LazyPromise(resolve=> + { + assert.ok(false, "Should not have triggered the resolution."); + }).delayAfterResolve(1000); + + var elapsed = Stopwatch.startNew(); + + return testPromiseFlow( + new LazyPromise(resolve=>defer(()=>resolve(true), 1000)) + .delayAfterResolve(1000) + .thenThis(r=> + { + var ms = elapsed.elapsedMilliseconds; + assert.ok(ms>2000 && ms<3000); + }) + ); + }); + }); it("should be able to use promise as a resolution", ()=> { - var s = Promise.pending(); - var p = Promise.pending(resolve=>{ + var s = new Promise(); + var p = new Promise(resolve=> + { defer(()=> resolve(s)); }); assert.ok(s.isPending); @@ -316,7 +355,8 @@ describe("Resolution and Rejection", ()=> it("should be able to resolve all", ()=> { - var other = Promise.lazy(resolve=>{ + var other = new LazyPromise(resolve=> + { resolve(4); }); return Promise.all( @@ -324,17 +364,19 @@ describe("Resolution and Rejection", ()=> Promise.resolve(3), Promise.resolve(2), Promise.resolve(1) - ).thenSynchronous(r=>{ - assert.equal(r[0],4); - assert.equal(r[1],3); - assert.equal(r[2],2); - assert.equal(r[3],1); + ).thenSynchronous(r=> + { + assert.equal(r[0], 4); + assert.equal(r[1], 3); + assert.equal(r[2], 2); + assert.equal(r[3], 1); }); }); it("should resolve as rejected", ()=> { - var other = Promise.lazy(resolve=>{ + var other = new LazyPromise(resolve=> + { resolve(4); }); return Promise.all( @@ -343,16 +385,19 @@ describe("Resolution and Rejection", ()=> Promise.resolve(2), Promise.resolve(1), Promise.reject(-1) - ).thenSynchronous(()=>{ + ).thenSynchronous(()=> + { assert.ok(false); - },e=>{ - assert.equal(e,-1); + }, e=> + { + assert.equal(e, -1); }); }); it("should be resolve the first to win the race", ()=> { - var other = Promise.lazy((resolve,reject)=>{ + var other = new LazyPromise((resolve, reject)=> + { reject(4); }); return Promise.race( @@ -360,8 +405,9 @@ describe("Resolution and Rejection", ()=> Promise.resolve(3), Promise.resolve(2), Promise.resolve(1) - ).thenSynchronous(r=>{ - assert.equal(r,3); + ).thenSynchronous(r=> + { + assert.equal(r, 3); }); }); @@ -371,10 +417,12 @@ describe("Resolution and Rejection", ()=> Promise.resolve(3).delayFromNow(20), Promise.resolve(2).delayAfterResolve(10), Promise.reject(1) - ).thenSynchronous(()=>{ + ).thenSynchronous(()=> + { assert.ok(false); - },e=>{ - assert.equal(e,1); + }, e=> + { + assert.equal(e, 1); }); }); diff --git a/tests/qunit/Arrays/Compare.js b/tests/qunit/Arrays/Compare.js index 6b22bf0c..e19beb5d 100644 --- a/tests/qunit/Arrays/Compare.js +++ b/tests/qunit/Arrays/Compare.js @@ -12,4 +12,5 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = run; }); -//# sourceMappingURL=Compare.js.map \ No newline at end of file + +//# sourceMappingURL=Compare.js.map diff --git a/tests/qunit/Arrays/Compare.js.map b/tests/qunit/Arrays/Compare.js.map index 2ba69913..46930aa4 100644 --- a/tests/qunit/Arrays/Compare.js.map +++ b/tests/qunit/Arrays/Compare.js.map @@ -1 +1 @@ -{"version":3,"file":"Compare.js","sourceRoot":"","sources":["Compare.ts"],"names":[],"mappings":";;;;;;;;;IAKA;IAEA,CAAC;IAFD;yBAEC,CAAA"} \ No newline at end of file +{"version":3,"sources":["Arrays/Compare.ts"],"names":[],"mappings":";;;;;;;;;IAKA;IAEA,CAAC;IAFD;yBAEC,CAAA","file":"Arrays/Compare.js","sourcesContent":["///\r\n///\r\n\r\nimport * as ArrayCompare from 'source/System/Collections/Array/Compare';\r\n\r\nexport default function run() {\r\n\r\n}\r\n"]} \ No newline at end of file diff --git a/tests/qunit/Arrays/Procedure.js b/tests/qunit/Arrays/Procedure.js index 3fa569af..7e0b93f2 100644 --- a/tests/qunit/Arrays/Procedure.js +++ b/tests/qunit/Arrays/Procedure.js @@ -38,4 +38,5 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = run; }); -//# sourceMappingURL=Procedure.js.map \ No newline at end of file + +//# sourceMappingURL=Procedure.js.map diff --git a/tests/qunit/Arrays/Procedure.js.map b/tests/qunit/Arrays/Procedure.js.map index 769edb6b..48bd520d 100644 --- a/tests/qunit/Arrays/Procedure.js.map +++ b/tests/qunit/Arrays/Procedure.js.map @@ -1 +1 @@ -{"version":3,"file":"Procedure.js","sourceRoot":"","sources":["Procedure.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["Arrays/Procedure.ts"],"names":[],"mappings":"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","file":"Arrays/Procedure.js","sourcesContent":["///\r\n///\r\n\r\nimport * as ArrayProcedure from 'source/System/Collections/Array/Procedure';\r\n\r\nexport default function run() {\r\n // Min/Max tests...\r\n var minA = -10, maxA = 2000,\r\n minB = -Infinity, maxB = Infinity;\r\n\r\n var a = [5, minA, -1, maxA, -2, NaN, 20],\r\n sum = 5 + minA + -1 + maxA + -2 + 20,\r\n average = sum/6, // Not including NaN\r\n product = 5*minA* -1*maxA* -2*20;\r\n\r\n var b = [5, 2000, maxB, -1, NaN, -10, minB, -2, 20];\r\n\r\n\r\n QUnit.test(\"Array/Procedure.sum\", function (assert:QUnitAssert) {\r\n assert.ok(isNaN(ArrayProcedure.sum(a, false)), \"Sum should be NaN\");\r\n assert.equal(ArrayProcedure.sum(a, true), sum, \"Sum should be \" + sum);\r\n });\r\n\r\n QUnit.test(\"Array/Procedure.average\", function (assert:QUnitAssert) {\r\n assert.ok(isNaN(ArrayProcedure.average(a, false)), \"Average should be NaN\");\r\n assert.equal(ArrayProcedure.average(a, true), average, \"Average should be \" + average);\r\n });\r\n\r\n\r\n QUnit.test(\"Array/Procedure.product\", function (assert:QUnitAssert) {\r\n assert.ok(isNaN(ArrayProcedure.product(a, false)), \"Product should be NaN\");\r\n assert.equal(ArrayProcedure.product(a, true), product, \"Product should be \" + product);\r\n });\r\n\r\n\r\n QUnit.test(\"Array/Procedure.min\", function (assert:QUnitAssert) {\r\n assert.ok(isNaN(ArrayProcedure.min(a, false)), \"Min value should be NaN\");\r\n assert.equal(ArrayProcedure.min(a, true), minA, \"Min value should be \" + minA);\r\n assert.equal(ArrayProcedure.min(b, true), minB, \"Min value should be \" + minB);\r\n });\r\n\r\n QUnit.test(\"Array/Procedure.max\", function (assert:QUnitAssert) {\r\n assert.ok(isNaN(ArrayProcedure.max(a, false)), \"Min value should be NaN\");\r\n assert.equal(ArrayProcedure.max(a, true), maxA, \"Min value should be \" + maxA);\r\n assert.equal(ArrayProcedure.max(b, true), maxB, \"Min value should be \" + maxB);\r\n });\r\n\r\n}\r\n"]} \ No newline at end of file diff --git a/tests/qunit/Arrays/Utility.js b/tests/qunit/Arrays/Utility.js index 4379f310..eddb1a62 100644 --- a/tests/qunit/Arrays/Utility.js +++ b/tests/qunit/Arrays/Utility.js @@ -78,4 +78,5 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = run; }); -//# sourceMappingURL=Utility.js.map \ No newline at end of file + +//# sourceMappingURL=Utility.js.map diff --git a/tests/qunit/Arrays/Utility.js.map b/tests/qunit/Arrays/Utility.js.map index cccc6533..c0f9728e 100644 --- a/tests/qunit/Arrays/Utility.js.map +++ b/tests/qunit/Arrays/Utility.js.map @@ -1 +1 @@ -{"version":3,"file":"Utility.js","sourceRoot":"","sources":["Utility.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["Arrays/Utility.ts"],"names":[],"mappings":"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","file":"Arrays/Utility.js","sourcesContent":["///\r\n///\r\n\r\nimport * as Arrays from 'source/System/Collections/Array/Compare';\r\nimport * as ArrayUtility from 'source/System/Collections/Array/Utility';\r\n\r\nexport default function run() {\r\n // Min/Max tests...\r\n var minA = -10, maxA = 2000;\r\n\r\n var a = [5, minA, -1, maxA, -2, NaN, 20];\r\n\r\n QUnit.test(\"Array/Utility.initialize\", (assert:QUnitAssert)=> {\r\n var len:number;\r\n\r\n len = 100;\r\n var a = ArrayUtility.initialize(len);\r\n assert.equal(a.length, len, \".length should be \" + len);\r\n\r\n len = 100000;\r\n var b = ArrayUtility.initialize(len);\r\n assert.equal(b.length, len, \".length should be \" + len);\r\n\r\n });\r\n\r\n\r\n QUnit.test(\"Array/Utility.copy/equals\", (assert:QUnitAssert)=> {\r\n var s1 = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3];\r\n var s2 = ArrayUtility.copy(s1);\r\n\r\n assert.ok(Arrays.areEqual(s1, s2));\r\n });\r\n\r\n QUnit.test(\"Array/Utility.contains\", (assert:QUnitAssert)=> {\r\n assert.ok(ArrayUtility.contains(a, -1));\r\n assert.ok(!ArrayUtility.contains(a, -9876));\r\n });\r\n\r\n QUnit.test(\"Array/Utility.findIndex\", (assert:QUnitAssert)=> {\r\n assert.equal(ArrayUtility.findIndex(a, (v:number)=> {\r\n return v == -1;\r\n }), 2);\r\n assert.equal(ArrayUtility.findIndex(a, (v:number)=> {\r\n return v == -9876;\r\n }), -1);\r\n });\r\n\r\n QUnit.test(\"Array/Utility.register\", (assert:QUnitAssert)=> {\r\n var s = ArrayUtility.copy(a), len = s.length;\r\n assert.ok(ArrayUtility.register(s, -9876));\r\n assert.equal(s.length, len + 1);\r\n len = s.length;\r\n\r\n assert.ok(!ArrayUtility.register(s, -1));\r\n assert.equal(s.length, len);\r\n });\r\n\r\n\r\n /*\tUtility.applyTo skipped.\r\n It has too many permutations while being a straight forward function. */\r\n\r\n QUnit.test(\"Array/Utility.remove\", (assert:QUnitAssert)=> {\r\n var s = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3];\r\n var len = s.length;\r\n\r\n assert.equal(ArrayUtility.remove(s, 9), 1, \"Only 9 removed once\");\r\n assert.equal(s.length, len - 1, \".length should be less by one\");\r\n assert.equal(s[1], 8, \"Index [1] is now 8\");\r\n len = s.length;\r\n\r\n assert.equal(ArrayUtility.remove(s, 2), 2, \"2 removed twice\");\r\n assert.equal(s.length, len - 2, \".length should be less by two\");\r\n assert.equal(s[7], 1, \"Index [7] is now 1\");\r\n assert.equal(s[10], 3, \"Index [10] is now 3\");\r\n len = s.length;\r\n\r\n assert.equal(ArrayUtility.remove(s, 15), 0, \"15 does not exist\");\r\n assert.equal(s.length, len, \".length should be the same\");\r\n len = s.length;\r\n\r\n assert.ok(ArrayUtility.removeIndex(s, 5), \"Index [5] removed\");\r\n assert.equal(s.length, len - 1, \".length should be less by one\");\r\n len = s.length;\r\n\r\n assert.ok(!ArrayUtility.removeIndex(s, 15), \"Index [15] doesn't exist\");\r\n assert.equal(s.length, len, \".length should be the same\");\r\n });\r\n\r\n\r\n QUnit.test(\"Array/Utility.repeat\", (assert:QUnitAssert)=> {\r\n var value = 10, count = 3;\r\n var r = ArrayUtility.repeat(value, count);\r\n assert.ok(r.length == count, \".length should be 3\");\r\n for(let i = 0; i < count; i++)\r\n assert.equal(r[i], value);\r\n });\r\n\r\n\r\n}\r\n"]} \ No newline at end of file diff --git a/tests/qunit/Arrays/_all.js b/tests/qunit/Arrays/_all.js index b9fd8e1e..f7381169 100644 --- a/tests/qunit/Arrays/_all.js +++ b/tests/qunit/Arrays/_all.js @@ -18,4 +18,5 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = run; }); -//# sourceMappingURL=_all.js.map \ No newline at end of file + +//# sourceMappingURL=_all.js.map diff --git a/tests/qunit/Arrays/_all.js.map b/tests/qunit/Arrays/_all.js.map index f2eb79f1..9e510cc8 100644 --- a/tests/qunit/Arrays/_all.js.map +++ b/tests/qunit/Arrays/_all.js.map @@ -1 +1 @@ -{"version":3,"file":"_all.js","sourceRoot":"","sources":["_all.ts"],"names":[],"mappings":";;;;;;;;;IAGA,wBAAoB,WAAW,CAAC,CAAA;IAChC,0BAAsB,aAAa,CAAC,CAAA;IACpC,wBAAoB,WAAW,CAAC,CAAA;IAEhC;QACI,iBAAO,EAAE,CAAC;QACV,mBAAS,EAAE,CAAC;QACZ,iBAAO,EAAE,CAAC;IACd,CAAC;IAJD;yBAIC,CAAA"} \ No newline at end of file +{"version":3,"sources":["Arrays/_all.ts"],"names":[],"mappings":";;;;;;;;;IAGA,wBAAoB,WAAW,CAAC,CAAA;IAChC,0BAAsB,aAAa,CAAC,CAAA;IACpC,wBAAoB,WAAW,CAAC,CAAA;IAEhC;QACI,iBAAO,EAAE,CAAC;QACV,mBAAS,EAAE,CAAC;QACZ,iBAAO,EAAE,CAAC;IACd,CAAC;IAJD;yBAIC,CAAA","file":"Arrays/_all.js","sourcesContent":["///\r\n/// \r\n\r\nimport Utility from './Utility';\r\nimport Procedure from './Procedure';\r\nimport Compare from './Compare';\r\n\r\nexport default function run() {\r\n Utility();\r\n Procedure();\r\n Compare();\r\n}\r\n"]} \ No newline at end of file diff --git a/tests/qunit/Collections/ICollection.js b/tests/qunit/Collections/ICollection.js index a0fe1ba0..483ff0af 100644 --- a/tests/qunit/Collections/ICollection.js +++ b/tests/qunit/Collections/ICollection.js @@ -132,4 +132,5 @@ } exports.InstanceCollection = InstanceCollection; }); -//# sourceMappingURL=ICollection.js.map \ No newline at end of file + +//# sourceMappingURL=ICollection.js.map diff --git a/tests/qunit/Collections/ICollection.js.map b/tests/qunit/Collections/ICollection.js.map index 0a80a6a4..72db072a 100644 --- a/tests/qunit/Collections/ICollection.js.map +++ b/tests/qunit/Collections/ICollection.js.map @@ -1 +1 @@ -{"version":3,"file":"ICollection.js","sourceRoot":"","sources":["ICollection.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["Collections/ICollection.ts"],"names":[],"mappings":"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","file":"Collections/ICollection.js","sourcesContent":["///\r\n///\r\n///\r\n\r\nimport * as Text from \"source/System/Text/Utility\";\r\nimport * as AU from \"source/System/Collections/Array/Utility\";\r\nimport NotImplementedException from \"source/System/Exceptions/NotImplementedException\";\r\nimport {ICollection} from \"../../../source/System/Collections/ICollection\";\r\n\r\n/*\r\n * This is a reusable set of unit test for use with any ICollection to ensure all features of that ICollection function properly.\r\n */\r\n\r\nexport function General(\r\n\tname:string,\r\n\tcollection:ICollection):void\r\n{\r\n\tvar count = collection.count;\r\n\r\n\tQUnit.test(name + \".count\", function(assert:QUnitAssert)\r\n\t{\r\n\t\tassert.ok(!isNaN(count), \"Count must be a number.\");\r\n\t});\r\n}\r\n\r\nfunction assertIsNumber(assert:QUnitAssert, value:any, name:string)\r\n{\r\n\tassert.ok(!isNaN(value), Text.format(\"'{0}' must be a real number.\", name));\r\n}\r\n\r\nfunction assertAdding(assert:QUnitAssert, c:ICollection, a:T[])\r\n{\r\n\tvar count:number;\r\n\tfor(let v of a)\r\n\t{\r\n\t\tassertIsNumber(assert, count = c.count, 'count');\r\n\t\tc.add(v);\r\n\t\tassertIsNumber(assert, c.count, 'count');\r\n\t\tassert.equal(c.count, count + 1, \"'count' should increment after adding.\");\r\n\t\tassert.ok(c.contains(v), \"'value' must exist after adding.\");\r\n\t}\r\n}\r\n\r\nfunction assertCopyToClear(assert:QUnitAssert, c:ICollection)\r\n{\r\n\tvar count:number;\r\n\tassertIsNumber(assert, count = c.count, 'count');\r\n\tif(c.count<2) throw \"Can't assert '.copyTo()' or '.clear()' without at least (2) entries.\";\r\n\r\n\tvar a:T[] = [];\r\n\r\n\tc.copyTo(a);\r\n\tassertIsNumber(assert, c.count, 'count');\r\n\tassert.equal(a.length, count, \"An empty array's length should match the count if copied to.\");\r\n\tc.clear();\r\n\tassert.equal(c.count, 0, \"A collection's count should be zero after calling '.clear()'.\");\r\n\r\n\t// Restore contents.\r\n\tfor(let v of a) c.add(v);\r\n\r\n\tvar extraSize = 10;\r\n\tvar b = AU.initialize(count + extraSize);\r\n\r\n\tc.copyTo(b, 1);\r\n\tassert.equal(b.length, count + extraSize, \"An array's length should be equal to it's original length if the count added does not exceed the length.\");\r\n\tc.copyTo(b, count + extraSize - 1);\r\n\tassert.equal(b.length, 2*count + extraSize - 1, \"An array's length should be equal to index+count if the count exceeds the length.\");\r\n\tc.clear();\r\n\tassert.equal(c.count, 0, \"A collection's count should be zero after calling '.clear()'.\");\r\n\r\n\t// Restore contents.\r\n\tfor(let v of a) c.add(v);\r\n\tassert.equal(c.count, a.length, \"A collection's count should be equal to the number of items added.\");\r\n}\r\n\r\nfunction assertRemoving(assert:QUnitAssert, c:ICollection)\r\n{\r\n\tvar count:number;\r\n\tassertIsNumber(assert, count = c.count, 'count');\r\n\tif(c.count<2) throw \"Can't assert '.remove()' without at least (2) entries.\";\r\n\r\n\tvar a:T[] = [];\r\n\tc.copyTo(a);\r\n\tassertIsNumber(assert, c.count, 'count');\r\n\r\n\ttry\r\n\t{\r\n\t\tfor(let v of a)\r\n\t\t{\r\n\t\t\tcount -= c.remove(v); // More than one instance can exist and it should remove both.\r\n\t\t\tassertIsNumber(assert, c.count, 'count');\r\n\t\t\tassert.equal(c.count, count, \"'count' should increment after removing.\");\r\n\t\t\tassert.ok(!c.contains(v), \"'value' must not exist after removing.\");\r\n\t\t}\r\n\t}\r\n\tcatch(ex)\r\n\t{\r\n\t\tif((ex)instanceof(NotImplementedException))\r\n\t\t{\r\n\t\t\tconsole.log(ex);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tthrow ex;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\nexport function Collection(\r\n\tname:string,\r\n\tcollection:ICollection,\r\n\tsourceValues:T[]):void\r\n{\r\n\tif(sourceValues.indexOf(null)!= -1)\r\n\t\tthrow \"Source values should not contain null as checking against null is one of the tests.\";\r\n\r\n\t/* The following tests inherently test:\r\n\t - count\r\n\t - contains\r\n\t */\r\n\tQUnit.test(name, function(assert:QUnitAssert)\r\n\t{\r\n\t\tassertAdding(assert, collection, sourceValues);\r\n\t\tassertCopyToClear(assert, collection);\r\n\t\tassertRemoving(assert, collection);\r\n\t\tassert.ok(!collection.contains(null), 'Equality comparison is not strict.');\r\n\t});\r\n\r\n}\r\n\r\nexport function StringCollection(\r\n\tname:string,\r\n\tcollection:ICollection):void\r\n{\r\n\r\n\t//noinspection SpellCheckingInspection\r\n\tCollection(name + '<' + 'string>', collection, [\r\n\t\t\"\",\r\n\t\t\"lorem\",\r\n\t\t\"ipsum\",\r\n\t\t\"dolem\",\r\n\t\t\"ipsum\" // Have a repeated entry to test removing multiple.\r\n\t])\r\n\r\n\r\n}\r\n\r\nexport function NumberCollection(\r\n\tname:string,\r\n\tcollection:ICollection):void\r\n{\r\n\t//noinspection SpellCheckingInspection\r\n\tCollection(name + '<' + 'number>', collection, [\r\n\t\t0,\r\n\t\t1,\r\n\t\t1, // Have a repeated entry to test removing multiple.\r\n\t\t2,\r\n\t\t3,\r\n\t\t5,\r\n\t\t8,\r\n\t\tNaN // Must be able to reconginze NaN\r\n\t]);\r\n\r\n\r\n}\r\n\r\nexport function InstanceCollection(\r\n\tname:string,\r\n\tcollection:ICollection):void\r\n{\r\n\tvar repeat = {};\r\n\t//noinspection SpellCheckingInspection\r\n\tCollection(name + '<' + 'Object>', collection, [\r\n\t\tundefined,\r\n\t\t{},\r\n\t\trepeat,\r\n\t\t{},\r\n\t\trepeat // Have a repeated entry to test removing multiple.\r\n\t])\r\n}\r\n\r\n"]} \ No newline at end of file diff --git a/tests/qunit/Collections/LinkedList.js b/tests/qunit/Collections/LinkedList.js index 9081f3c7..3982e9f6 100644 --- a/tests/qunit/Collections/LinkedList.js +++ b/tests/qunit/Collections/LinkedList.js @@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = run; }); -//# sourceMappingURL=LinkedList.js.map \ No newline at end of file + +//# sourceMappingURL=LinkedList.js.map diff --git a/tests/qunit/Collections/LinkedList.js.map b/tests/qunit/Collections/LinkedList.js.map index efd8a343..744109bd 100644 --- a/tests/qunit/Collections/LinkedList.js.map +++ b/tests/qunit/Collections/LinkedList.js.map @@ -1 +1 @@ -{"version":3,"file":"LinkedList.js","sourceRoot":"","sources":["LinkedList.ts"],"names":[],"mappings":";;;;;;;;;IAAA,IAAY,gBAAgB,WAAM,eAAe,CAAC,CAAA;IAClD,2BAAuB,sCAAsC,CAAC,CAAA;IAE9D;QACC,gBAAgB,CAAC,gBAAgB,CAAC,YAAY,EAAC,IAAI,oBAAU,EAAU,CAAC,CAAC;QACzE,gBAAgB,CAAC,gBAAgB,CAAC,YAAY,EAAC,IAAI,oBAAU,EAAU,CAAC,CAAC;QACzE,gBAAgB,CAAC,kBAAkB,CAAC,YAAY,EAAC,IAAI,oBAAU,EAAU,CAAC,CAAC;IAC5E,CAAC;IAJD;yBAIC,CAAA"} \ No newline at end of file +{"version":3,"sources":["Collections/LinkedList.ts"],"names":[],"mappings":";;;;;;;;;IAAA,IAAY,gBAAgB,WAAM,eAAe,CAAC,CAAA;IAClD,2BAAuB,sCAAsC,CAAC,CAAA;IAE9D;QACC,gBAAgB,CAAC,gBAAgB,CAAC,YAAY,EAAC,IAAI,oBAAU,EAAU,CAAC,CAAC;QACzE,gBAAgB,CAAC,gBAAgB,CAAC,YAAY,EAAC,IAAI,oBAAU,EAAU,CAAC,CAAC;QACzE,gBAAgB,CAAC,kBAAkB,CAAC,YAAY,EAAC,IAAI,oBAAU,EAAU,CAAC,CAAC;IAC5E,CAAC;IAJD;yBAIC,CAAA","file":"Collections/LinkedList.js","sourcesContent":["import * as ICollectionTests from './ICollection';\r\nimport LinkedList from 'source/System/Collections/LinkedList';\r\n\r\nexport default function run() {\r\n\tICollectionTests.StringCollection('LinkedList',new LinkedList());\r\n\tICollectionTests.NumberCollection('LinkedList',new LinkedList());\r\n\tICollectionTests.InstanceCollection('LinkedList',new LinkedList());\r\n}\r\n"]} \ No newline at end of file diff --git a/tests/qunit/Collections/OrderedStringKeyDictionary.js b/tests/qunit/Collections/OrderedStringKeyDictionary.js index 02da4446..7003c19c 100644 --- a/tests/qunit/Collections/OrderedStringKeyDictionary.js +++ b/tests/qunit/Collections/OrderedStringKeyDictionary.js @@ -22,4 +22,5 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = run; }); -//# sourceMappingURL=OrderedStringKeyDictionary.js.map \ No newline at end of file + +//# sourceMappingURL=OrderedStringKeyDictionary.js.map diff --git a/tests/qunit/Collections/OrderedStringKeyDictionary.js.map b/tests/qunit/Collections/OrderedStringKeyDictionary.js.map index afcfd032..66f3a030 100644 --- a/tests/qunit/Collections/OrderedStringKeyDictionary.js.map +++ b/tests/qunit/Collections/OrderedStringKeyDictionary.js.map @@ -1 +1 @@ -{"version":3,"file":"OrderedStringKeyDictionary.js","sourceRoot":"","sources":["OrderedStringKeyDictionary.ts"],"names":[],"mappings":";;;;;;;;;IACA,IAAY,gBAAgB,WAAM,eAAe,CAAC,CAAA;IAClD,2CAAuC,mEAAmE,CAAC,CAAA;IAG3G;QAGC,gBAAgB,CAAC,UAAU,CAC1B,oCAAoC,EACpC,IAAI,oCAA0B,EAAU,EACxC;YACC,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,CAAC,EAAC;YACjB,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,CAAC,EAAC;YACjB,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,CAAC,EAAC;YACjB,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,CAAC,EAAC;YACjB,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,CAAC,EAAC;YACjB,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,CAAC,EAAC;SACjB,CAAC,CAAC;IACL,CAAC;IAdD;yBAcC,CAAA"} \ No newline at end of file +{"version":3,"sources":["Collections/OrderedStringKeyDictionary.ts"],"names":[],"mappings":";;;;;;;;;IACA,IAAY,gBAAgB,WAAM,eAAe,CAAC,CAAA;IAClD,2CAAuC,mEAAmE,CAAC,CAAA;IAG3G;QAGC,gBAAgB,CAAC,UAAU,CAC1B,oCAAoC,EACpC,IAAI,oCAA0B,EAAU,EACxC;YACC,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,CAAC,EAAC;YACjB,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,CAAC,EAAC;YACjB,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,CAAC,EAAC;YACjB,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,CAAC,EAAC;YACjB,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,CAAC,EAAC;YACjB,EAAC,GAAG,EAAC,GAAG,EAAC,KAAK,EAAC,CAAC,EAAC;SACjB,CAAC,CAAC;IACL,CAAC;IAdD;yBAcC,CAAA","file":"Collections/OrderedStringKeyDictionary.js","sourcesContent":["/// \r\nimport * as ICollectionTests from \"./ICollection\";\r\nimport OrderedStringKeyDictionary from \"source/System/Collections/Dictionaries/OrderedStringKeyDictionary\";\r\nimport {IKeyValuePair} from \"../../../source/System/KeyValuePair\";\r\n\r\nexport default function run()\r\n{\r\n\r\n\tICollectionTests.Collection>(\r\n\t\t'OrderedStringKeyDictionary',\r\n\t\tnew OrderedStringKeyDictionary(),\r\n\t\t[\r\n\t\t\t{key:'A',value:1},\r\n\t\t\t{key:'B',value:2},\r\n\t\t\t{key:'C',value:3},\r\n\t\t\t{key:'D',value:4},\r\n\t\t\t{key:'E',value:5},\r\n\t\t\t{key:'F',value:6}\r\n\t\t]);\r\n}\r\n"]} \ No newline at end of file diff --git a/tests/qunit/Collections/Queue.js b/tests/qunit/Collections/Queue.js index 5bec68b4..b4b7b8c7 100644 --- a/tests/qunit/Collections/Queue.js +++ b/tests/qunit/Collections/Queue.js @@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = run; }); -//# sourceMappingURL=Queue.js.map \ No newline at end of file + +//# sourceMappingURL=Queue.js.map diff --git a/tests/qunit/Collections/Queue.js.map b/tests/qunit/Collections/Queue.js.map index 024f062c..7f33a5de 100644 --- a/tests/qunit/Collections/Queue.js.map +++ b/tests/qunit/Collections/Queue.js.map @@ -1 +1 @@ -{"version":3,"file":"Queue.js","sourceRoot":"","sources":["Queue.ts"],"names":[],"mappings":";;;;;;;;;IAAA,IAAY,gBAAgB,WAAM,eAAe,CAAC,CAAA;IAClD,sBAAkB,iCAAiC,CAAC,CAAA;IAEpD;QAEC,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,eAAK,EAAU,CAAC,CAAC;QAChE,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,eAAK,EAAU,CAAC,CAAC;QAChE,gBAAgB,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,eAAK,EAAU,CAAC,CAAC;IACnE,CAAC;IALD;yBAKC,CAAA"} \ No newline at end of file +{"version":3,"sources":["Collections/Queue.ts"],"names":[],"mappings":";;;;;;;;;IAAA,IAAY,gBAAgB,WAAM,eAAe,CAAC,CAAA;IAClD,sBAAkB,iCAAiC,CAAC,CAAA;IAEpD;QAEC,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,eAAK,EAAU,CAAC,CAAC;QAChE,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,eAAK,EAAU,CAAC,CAAC;QAChE,gBAAgB,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,eAAK,EAAU,CAAC,CAAC;IACnE,CAAC;IALD;yBAKC,CAAA","file":"Collections/Queue.js","sourcesContent":["import * as ICollectionTests from './ICollection';\r\nimport Queue from 'source/System/Collections/Queue';\r\n\r\nexport default function run()\r\n{\r\n\tICollectionTests.StringCollection('Queue', new Queue());\r\n\tICollectionTests.NumberCollection('Queue', new Queue());\r\n\tICollectionTests.InstanceCollection('Queue', new Queue());\r\n}\r\n"]} \ No newline at end of file diff --git a/tests/qunit/Collections/_all.js b/tests/qunit/Collections/_all.js index 218a1d60..7e770aca 100644 --- a/tests/qunit/Collections/_all.js +++ b/tests/qunit/Collections/_all.js @@ -18,4 +18,5 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = run; }); -//# sourceMappingURL=_all.js.map \ No newline at end of file + +//# sourceMappingURL=_all.js.map diff --git a/tests/qunit/Collections/_all.js.map b/tests/qunit/Collections/_all.js.map index e164f820..5bce706d 100644 --- a/tests/qunit/Collections/_all.js.map +++ b/tests/qunit/Collections/_all.js.map @@ -1 +1 @@ -{"version":3,"file":"_all.js","sourceRoot":"","sources":["_all.ts"],"names":[],"mappings":";;;;;;;;;IAGA,2BAAuB,cAAc,CAAC,CAAA;IACtC,sBAAkB,SAAS,CAAC,CAAA;IAC5B,2CAAuC,8BAA8B,CAAC,CAAA;IAEtE;QAEC,oBAAU,EAAE,CAAC;QACb,eAAK,EAAE,CAAC;QACR,oCAA0B,EAAE,CAAC;IAC9B,CAAC;IALD;yBAKC,CAAA"} \ No newline at end of file +{"version":3,"sources":["Collections/_all.ts"],"names":[],"mappings":";;;;;;;;;IAGA,2BAAuB,cAAc,CAAC,CAAA;IACtC,sBAAkB,SAAS,CAAC,CAAA;IAC5B,2CAAuC,8BAA8B,CAAC,CAAA;IAEtE;QAEC,oBAAU,EAAE,CAAC;QACb,eAAK,EAAE,CAAC;QACR,oCAA0B,EAAE,CAAC;IAC9B,CAAC;IALD;yBAKC,CAAA","file":"Collections/_all.js","sourcesContent":["/// \r\n/// \r\n\r\nimport LinkedList from './LinkedList';\r\nimport Queue from './Queue';\r\nimport OrderedStringKeyDictionary from './OrderedStringKeyDictionary';\r\n\r\nexport default function run()\r\n{\r\n\tLinkedList();\r\n\tQueue();\r\n\tOrderedStringKeyDictionary();\r\n}\r\n"]} \ No newline at end of file diff --git a/tests/qunit/Integer.js b/tests/qunit/Integer.js index 2a5df631..b240b3bc 100644 --- a/tests/qunit/Integer.js +++ b/tests/qunit/Integer.js @@ -27,4 +27,5 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = run; }); -//# sourceMappingURL=Integer.js.map \ No newline at end of file + +//# sourceMappingURL=Integer.js.map diff --git a/tests/qunit/Integer.js.map b/tests/qunit/Integer.js.map index 58c48ac4..f2027820 100644 --- a/tests/qunit/Integer.js.map +++ b/tests/qunit/Integer.js.map @@ -1 +1 @@ -{"version":3,"file":"Integer.js","sourceRoot":"","sources":["Integer.ts"],"names":[],"mappings":";;;;;;;;;IAGA,wBAAoB,uBAAuB,CAAC,CAAA;IAG5C;QAGC,IAAM,UAAU,GAAG,MAAM,EAAE,QAAQ,GAAG,EAAE,CAAC;QAEzC,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAC,MAAkB;YAGjD,MAAM,CAAC,KAAK,CACX,iBAAO,CAAC,UAAU,CAAC,EACnB,QAAQ,EACR,0DAA0D,CAAC,CAAC;QAE9D,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,UAAC,MAAkB;YAG5C,MAAM,CAAC,KAAK,CACX,iBAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EACtB,KAAK,EACL,gDAAgD,CAAC,CAAC;YAEnD,MAAM,CAAC,KAAK,CACX,iBAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EACpB,IAAI,EACJ,4CAA4C,CAAC,CAAC;QAEhD,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAC,MAAkB;YAGhD,MAAM,CAAC,KAAK,CACX,iBAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EACxB,IAAI,EACJ,4CAA4C,CAAC,CAAC;YAE/C,MAAM,CAAC,MAAM,CAAC;gBAEb,iBAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QAEJ,CAAC,CAAC,CAAC;IACJ,CAAC;IA5CD;yBA4CC,CAAA"} \ No newline at end of file +{"version":3,"sources":["Integer.ts"],"names":[],"mappings":";;;;;;;;;IAGA,wBAAoB,uBAAuB,CAAC,CAAA;IAG5C;QAGC,IAAM,UAAU,GAAG,MAAM,EAAE,QAAQ,GAAG,EAAE,CAAC;QAEzC,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAC,MAAkB;YAGjD,MAAM,CAAC,KAAK,CACX,iBAAO,CAAC,UAAU,CAAC,EACnB,QAAQ,EACR,0DAA0D,CAAC,CAAC;QAE9D,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,UAAC,MAAkB;YAG5C,MAAM,CAAC,KAAK,CACX,iBAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EACtB,KAAK,EACL,gDAAgD,CAAC,CAAC;YAEnD,MAAM,CAAC,KAAK,CACX,iBAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,EACpB,IAAI,EACJ,4CAA4C,CAAC,CAAC;QAEhD,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAC,MAAkB;YAGhD,MAAM,CAAC,KAAK,CACX,iBAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EACxB,IAAI,EACJ,4CAA4C,CAAC,CAAC;YAE/C,MAAM,CAAC,MAAM,CAAC;gBAEb,iBAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QAEJ,CAAC,CAAC,CAAC;IACJ,CAAC;IA5CD;yBA4CC,CAAA","file":"Integer.js","sourcesContent":["///\r\n///\r\n\r\nimport Integer from 'source/System/Integer';\r\n\r\n\r\nexport default function run()\r\n{\r\n\r\n\tconst TEST_FLOAT = 10.915, TEST_INT = 10;\r\n\r\n\tQUnit.test('Integer: convert', (assert:QUnitAssert)=>\r\n\t{\r\n\r\n\t\tassert.equal(\r\n\t\t\tInteger(TEST_FLOAT),\r\n\t\t\tTEST_INT,\r\n\t\t\t'Should convert float number to integer without rounding.');\r\n\r\n\t});\r\n\r\n\tQUnit.test('Integer: is', (assert:QUnitAssert)=>\r\n\t{\r\n\r\n\t\tassert.equal(\r\n\t\t\tInteger.is(TEST_FLOAT),\r\n\t\t\tfalse,\r\n\t\t\t'Should detect a number that is not an integer.');\r\n\r\n\t\tassert.equal(\r\n\t\t\tInteger.is(TEST_INT),\r\n\t\t\ttrue,\r\n\t\t\t'Should detect a number that is an integer.');\r\n\r\n\t});\r\n\r\n\tQUnit.test('Integer: assert', (assert:QUnitAssert)=>\r\n\t{\r\n\r\n\t\tassert.equal(\r\n\t\t\tInteger.assert(TEST_INT),\r\n\t\t\ttrue,\r\n\t\t\t'Should detect a number that is an integer.');\r\n\r\n\t\tassert.throws(()=>\r\n\t\t{\r\n\t\t\tInteger.assert(TEST_FLOAT);\r\n\t\t});\r\n\r\n\t});\r\n}\r\n"]} \ No newline at end of file diff --git a/tests/qunit/Linq/_all.js b/tests/qunit/Linq/_all.js index dc9ee0f4..884227e2 100644 --- a/tests/qunit/Linq/_all.js +++ b/tests/qunit/Linq/_all.js @@ -140,4 +140,5 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = run; }); -//# sourceMappingURL=_all.js.map \ No newline at end of file + +//# sourceMappingURL=_all.js.map diff --git a/tests/qunit/Linq/_all.js.map b/tests/qunit/Linq/_all.js.map index ebe8d93a..3d7491a7 100644 --- a/tests/qunit/Linq/_all.js.map +++ b/tests/qunit/Linq/_all.js.map @@ -1 +1 @@ -{"version":3,"file":"_all.js","sourceRoot":"","sources":["_all.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["Linq/_all.ts"],"names":[],"mappings":"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","file":"Linq/_all.js","sourcesContent":["///\r\n///\r\n\r\nimport Enumerable from \"source/System.Linq/Linq\";\r\n\r\ninterface TestItem\r\n{\r\n\ta:number;\r\n\tb:number;\r\n\tc:string;\r\n}\r\n\r\nexport default function run()\r\n{\r\n\r\n\tvar source:{a:number,b:number,c:string}[] = [\r\n\t\t{\r\n\t\t\ta: 1,\r\n\t\t\tb: 2,\r\n\t\t\tc: \"a\"\r\n\t\t},\r\n\t\t{\r\n\t\t\ta: 1,\r\n\t\t\tb: 1,\r\n\t\t\tc: \"b\"\r\n\t\t},\r\n\t\t{\r\n\t\t\ta: 1,\r\n\t\t\tb: 3,\r\n\t\t\tc: \"c\"\r\n\t\t},\r\n\t\t{\r\n\t\t\ta: 2,\r\n\t\t\tb: 2,\r\n\t\t\tc: \"d\"\r\n\t\t},\r\n\t\t{\r\n\t\t\ta: 2,\r\n\t\t\tb: 1,\r\n\t\t\tc: \"e\"\r\n\t\t},\r\n\t\t{\r\n\t\t\ta: 2,\r\n\t\t\tb: 3,\r\n\t\t\tc: \"f\"\r\n\t\t}\r\n\t];\r\n\r\n\tvar sourceEnumerable = Enumerable.from(source);\r\n\r\n\tQUnit.test(\"Linq.memoize\", function (assert:QUnitAssert)\r\n\t{\r\n\r\n\t\tvar source = sourceEnumerable;\r\n\t\tvar A = source.memoize();\r\n\r\n\t\tvar sum = A.sum(o=>o.a);\r\n\r\n\t\tassert.equal(sum, source.sum(o=>o.a), \"Values must be equal after memoize pass 1.\");\r\n\r\n\t\tsum = A.sum(o=>o.b);\r\n\t\tassert.equal(sum, source.sum(o=>o.b), \"Values must be equal after memoize pass 2.\");\r\n\t});\r\n\r\n\tQUnit.test(\"Linq.where.memoize\", function (assert:QUnitAssert)\r\n\t{\r\n\t\tvar source = sourceEnumerable.where(i => i.a==1);\r\n\r\n\t\tvar sum:number, A = source;\r\n\r\n\t\tsum = A.sum(o=>o.a);\r\n\r\n\t\tassert.equal(sum, source.sum(o=>o.a), \"Values must be equal after where pass 1.\");\r\n\r\n\t\tsum = A.sum(o=>o.b);\r\n\t\tassert.equal(sum, source.sum(o=>o.b), \"Values must be equal after where pass 2.\");\r\n\r\n\r\n\t\tA = source.memoize();\r\n\r\n\t\tsum = A.sum(o=>o.a);\r\n\r\n\t\tassert.equal(sum, source.sum(o=>o.a), \"Values must be equal after memoize pass 1.\");\r\n\r\n\t\tsum = A.sum(o=>o.b);\r\n\t\tassert.equal(sum, source.sum(o=>o.b), \"Values must be equal after memoize pass 2.\");\r\n\r\n\t});\r\n\r\n\tQUnit.test(\"Linq.orderBy\", function (assert:QUnitAssert)\r\n\t{\r\n\r\n\t\tvar source = sourceEnumerable.reverse();\r\n\r\n\t\tvar A = source.orderBy(o=>o.a).toArray();\r\n\t\tfor(let i = 0; i<3; i++)\r\n\t\t{\r\n\t\t\tassert.equal(A[i].a, 1, \"First three 'a' values should be 1 when ordered by 'a'.\");\r\n\t\t}\r\n\t\tfor(let i = 3; i<6; i++)\r\n\t\t{\r\n\t\t\tassert.equal(A[i].a, 2, \"Last three 'a' values should be 2 when ordered by 'a'.\");\r\n\t\t}\r\n\r\n\t\tvar B = source.orderBy(o=> o.b).toArray();\r\n\t\tfor(let i = 0; i<2; i++)\r\n\t\t{\r\n\t\t\tassert.equal(B[i].b, 1, \"First two 'b' values should be 1 when ordered by 'b'.\");\r\n\t\t}\r\n\t\tfor(let i = 2; i<4; i++)\r\n\t\t{\r\n\t\t\tassert.equal(B[i].b, 2, \"Second two 'b' values should be 2 when ordered by 'b'.\");\r\n\t\t}\r\n\t\tfor(let i = 4; i<6; i++)\r\n\t\t{\r\n\t\t\tassert.equal(B[i].b, 3, \"Last two 'b' values should be 3 when ordered by 'b'.\");\r\n\t\t}\r\n\r\n\t});\r\n\r\n\r\n\tQUnit.test(\"Linq.orderByDescending\", function (assert:QUnitAssert)\r\n\t{\r\n\r\n\t\tvar source = sourceEnumerable.reverse();\r\n\r\n\t\tvar A = source.orderByDescending((o:TestItem)=> o.a).toArray();\r\n\t\tfor(let i = 0; i<3; i++)\r\n\t\t{\r\n\t\t\tassert.equal(A[i].a, 2, \"First three 'a' values should be 2 when ordered by 'a'.\");\r\n\t\t}\r\n\t\tfor(let i = 3; i<6; i++)\r\n\t\t{\r\n\t\t\tassert.equal(A[i].a, 1, \"Last three 'a' values should be 1 when ordered by 'a'.\");\r\n\t\t}\r\n\r\n\t\tvar B = source.orderByDescending((o:TestItem)=> o.b).toArray();\r\n\t\tfor(let i = 0; i<2; i++)\r\n\t\t{\r\n\t\t\tassert.equal(B[i].b, 3, \"First two 'b' values should be 3 when ordered by 'b'.\");\r\n\t\t}\r\n\t\tfor(let i = 2; i<4; i++)\r\n\t\t{\r\n\t\t\tassert.equal(B[i].b, 2, \"Second two 'b' values should be 2 when ordered by 'b'.\");\r\n\t\t}\r\n\t\tfor(let i = 4; i<6; i++)\r\n\t\t{\r\n\t\t\tassert.equal(B[i].b, 1, \"Last two 'b' values should be 1 when ordered by 'b'.\");\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tQUnit.test(\"Linq.orderBy.thenBy\", function (assert:QUnitAssert)\r\n\t{\r\n\r\n\t\tvar B = sourceEnumerable\r\n\t\t\t.orderBy(o => o.b)\r\n\t\t\t.thenBy(o => o.c)\r\n\t\t\t.toArray();\r\n\r\n\t\tfor(let i = 0; i<2; i++)\r\n\t\t{\r\n\t\t\tassert.equal(B[i].b, 1, \"First two 'b' values should be 1 when ordered by 'b'.\");\r\n\t\t}\r\n\t\tfor(let i = 2; i<4; i++)\r\n\t\t{\r\n\t\t\tassert.equal(B[i].b, 2, \"Second two 'b' values should be 2 when ordered by 'b'.\");\r\n\t\t}\r\n\t\tfor(let i = 4; i<6; i++)\r\n\t\t{\r\n\t\t\tassert.equal(B[i].b, 3, \"Last two 'b' values should be 3 when ordered by 'b'.\");\r\n\t\t}\r\n\r\n\t\tassert.equal(B[0].c, \"b\");\r\n\t\tassert.equal(B[1].c, \"e\");\r\n\r\n\t\tassert.equal(B[2].c, \"a\");\r\n\t\tassert.equal(B[3].c, \"d\");\r\n\r\n\t\tassert.equal(B[4].c, \"c\");\r\n\t\tassert.equal(B[5].c, \"f\");\r\n\r\n\r\n\t});\r\n\r\n\r\n\tQUnit.test(\"Linq.groupBy\", function (assert:QUnitAssert)\r\n\t{\r\n\t\tvar A_distinct = sourceEnumerable\r\n\t\t\t.select(o=>o.a).distinct();\r\n\t\tvar A = sourceEnumerable\r\n\t\t\t.groupBy(o=>o.a);\r\n\r\n\t\tassert.equal(A_distinct.count(), A.count(), \"Number of groups should match distinct values.\");\r\n\r\n\t\tvar B = sourceEnumerable\r\n\t\t\t.groupBy(o=>o.b);\r\n\t\tvar B_distinct = sourceEnumerable\r\n\t\t\t.select(o=>o.b).distinct();\r\n\r\n\t\tassert.equal(B_distinct.count(), B.count(), \"Number of groups should match distinct values.\");\r\n\r\n\r\n\t});\r\n\r\n\r\n}\r\n"]} \ No newline at end of file diff --git a/tests/qunit/Uri.js b/tests/qunit/Uri.js index 4f05f585..68d47aad 100644 --- a/tests/qunit/Uri.js +++ b/tests/qunit/Uri.js @@ -73,4 +73,5 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = run; }); -//# sourceMappingURL=Uri.js.map \ No newline at end of file + +//# sourceMappingURL=Uri.js.map diff --git a/tests/qunit/Uri.js.map b/tests/qunit/Uri.js.map index a5f61935..7d1710d0 100644 --- a/tests/qunit/Uri.js.map +++ b/tests/qunit/Uri.js.map @@ -1 +1 @@ -{"version":3,"file":"Uri.js","sourceRoot":"","sources":["Uri.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["Uri.ts"],"names":[],"mappings":"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","file":"Uri.js","sourcesContent":["///\r\n///\r\n\r\nimport Uri from \"source/System/Uri/Uri\";\r\nimport {IUri} from \"../../source/System/Uri/IUri\";\r\n\r\n\r\nexport default function run()\r\n{\r\n\r\n\tvar validUri:IUri = {\r\n\t\tscheme:'http',\r\n\t\tuserInfo:'username:password',\r\n\t\thost:'domain.com',\r\n\t\tport:1234,\r\n\t\tpath:'/tree/node/index.html',\r\n\t\tquery:'?param=hello%20there&flag=false&blah',\r\n\t\tfragment:'#home'\r\n\t};\r\n\tvar validUrl:string = ''\r\n\t\t+ validUri.scheme + '://'\r\n\t\t+ validUri.userInfo + '@'\r\n\t\t+ validUri.host\r\n\t\t+ ':' + validUri.port\r\n\t\t+ validUri.path\r\n\t\t+ validUri.query\r\n\t\t+ validUri.fragment;\r\n\r\n\tQUnit.test('Uri: parse valid', (assert:QUnitAssert)=>{\r\n\r\n\t\tassert.equal(\r\n\t\t\tUri.from(validUrl).absoluteUri,\r\n\t\t\tvalidUrl,\r\n\t\t\t'Uri.from(string) should parse correctly.');\r\n\r\n\t});\r\n\r\n\tQUnit.test('Uri: parse equality', (assert:QUnitAssert)=>{\r\n\r\n\t\tassert.equal(\r\n\t\t\tUri.from(validUrl).equals(validUri),\r\n\t\t\ttrue,\r\n\t\t\t'Uri.from(string) should equal derived values.');\r\n\r\n\t});\r\n\r\n\tQUnit.test('Uri: valid', (assert:QUnitAssert)=>\r\n\t{\r\n\r\n\t\tassert.equal(\r\n\t\t\tUri.toString(validUri),\r\n\t\t\tvalidUrl,\r\n\t\t\t'Uri.toString(uri) must match source values.');\r\n\r\n\r\n\t\tvar uri = Uri.from(validUri);\r\n\t\tassert.equal(\r\n\t\t\turi.toString(),\r\n\t\t\tvalidUrl,\r\n\t\t\t'Uri.toString() must match source values.');\r\n\r\n\t\tassert.equal(\r\n\t\t\turi.absoluteUri,\r\n\t\t\tvalidUrl,\r\n\t\t\t'Uri.absoluteUri must match source values.');\r\n\r\n\t\tassert.equal(\r\n\t\t\turi.pathAndQuery,\r\n\t\t\turi.path+uri.query,\r\n\t\t\t'Uri path and query must equal expected.');\r\n\r\n\t\tassert.equal(\r\n\t\t\turi.queryParams['param'],\r\n\t\t\t'hello there',\r\n\t\t\t'Uri must decode the query params correctly.');\r\n\r\n\t\tassert.equal(\r\n\t\t\turi.queryParams['flag'],\r\n\t\t\tfalse,\r\n\t\t\t'Uri must parse and deserialize the query params correctly.');\r\n\r\n\t\tassert.equal(\r\n\t\t\turi.queryParams['blah'],\r\n\t\t\tundefined,\r\n\t\t\t'Uri must ignore invalid query params.');\r\n\r\n\r\n\t});\r\n\r\n\tQUnit.test('Uri: invalid scheme', (assert:QUnitAssert)=>\r\n\t{\r\n\r\n\t\tassert.throws(()=>{\r\n\t\t\tUri.from({\r\n\t\t\t\tscheme:'x y z'\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tassert.throws(()=>{\r\n\t\t\tUri.from('http//');\r\n\t\t});\r\n\r\n\r\n\t\tassert.throws(()=>{\r\n\t\t\tUri.from({\r\n\t\t\t\tscheme:'https:s'\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t});\r\n\r\n\tQUnit.test('Uri: invalid authority', (assert:QUnitAssert)=>\r\n\t{\r\n\r\n\t\tassert.throws(()=>{\r\n\t\t\tUri.from({\r\n\t\t\t\tuserInfo:validUri.userInfo\r\n\t\t\t})\r\n\t\t});\r\n\r\n\t\tassert.throws(()=>{\r\n\t\t\tUri.from({\r\n\t\t\t\tport:validUri.port\r\n\t\t\t})\r\n\t\t});\r\n\r\n\r\n\t});\r\n}\r\n"]} \ No newline at end of file diff --git a/tests/qunit/main.js b/tests/qunit/main.js index 1a8becca..e24e1037 100644 --- a/tests/qunit/main.js +++ b/tests/qunit/main.js @@ -19,4 +19,5 @@ _all_3.default(); QUnit.start(); }); -//# sourceMappingURL=main.js.map \ No newline at end of file + +//# sourceMappingURL=main.js.map diff --git a/tests/qunit/main.js.map b/tests/qunit/main.js.map index 50553872..cef5d5b9 100644 --- a/tests/qunit/main.js.map +++ b/tests/qunit/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","sourceRoot":"","sources":["main.ts"],"names":[],"mappings":";;;;;;;;;IAGA,qBAAuB,eAAe,CAAC,CAAA;IACvC,qBAA4B,oBAAoB,CAAC,CAAA;IACjD,qBAA4B,aAAa,CAAC,CAAA;IAC1C,oBAAqB,OAAO,CAAC,CAAA;IAC7B,wBAAoB,WAAW,CAAC,CAAA;IAEhC,iBAAO,EAAE,CAAC;IACV,cAAU,EAAE,CAAC;IACb,aAAQ,EAAE,CAAC;IACX,cAAe,EAAE,CAAC;IAClB,cAAe,EAAE,CAAC;IAElB,KAAK,CAAC,KAAK,EAAE,CAAC"} \ No newline at end of file +{"version":3,"sources":["main.ts"],"names":[],"mappings":";;;;;;;;;IAGA,qBAAuB,eAAe,CAAC,CAAA;IACvC,qBAA4B,oBAAoB,CAAC,CAAA;IACjD,qBAA4B,aAAa,CAAC,CAAA;IAC1C,oBAAqB,OAAO,CAAC,CAAA;IAC7B,wBAAoB,WAAW,CAAC,CAAA;IAEhC,iBAAO,EAAE,CAAC;IACV,cAAU,EAAE,CAAC;IACb,aAAQ,EAAE,CAAC;IACX,cAAe,EAAE,CAAC;IAClB,cAAe,EAAE,CAAC;IAElB,KAAK,CAAC,KAAK,EAAE,CAAC","file":"main.js","sourcesContent":["///\r\n/// \r\n\r\nimport ArrayTests from './Arrays/_all';\r\nimport CollectionTests from './Collections/_all';\r\nimport EnumerableTests from './Linq/_all';\r\nimport UriTests from './Uri';\r\nimport Integer from './Integer';\r\n\r\nInteger();\r\nArrayTests();\r\nUriTests();\r\nCollectionTests();\r\nEnumerableTests();\r\n\r\nQUnit.start();\r\n"]} \ No newline at end of file diff --git a/tests/qunit/require.config.js b/tests/qunit/require.config.js index 96bd44ea..0bae693b 100644 --- a/tests/qunit/require.config.js +++ b/tests/qunit/require.config.js @@ -14,4 +14,5 @@ requirejs.config({ } } }); -//# sourceMappingURL=require.config.js.map \ No newline at end of file + +//# sourceMappingURL=require.config.js.map diff --git a/tests/qunit/require.config.js.map b/tests/qunit/require.config.js.map index 04db3459..83cab362 100644 --- a/tests/qunit/require.config.js.map +++ b/tests/qunit/require.config.js.map @@ -1 +1 @@ -{"version":3,"file":"require.config.js","sourceRoot":"","sources":["require.config.ts"],"names":[],"mappings":"AAGA,SAAS,CAAC,MAAM,CAAC;IAEb,OAAO,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI,GAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;IAEjC,KAAK,EAAE;QACH,OAAO,EAAE,wBAAwB,GAAC,oBAAoB;QACtD,QAAQ,EAAE,gBAAgB,GAAC,EAAE;KAChC;IAED,IAAI,EAAE;QACF,OAAO,EAAE;YAIL,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE;gBAEF,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;YACnC,CAAC;SACJ;KACJ;CACJ,CAAC,CAAC"} \ No newline at end of file +{"version":3,"sources":["require.config.ts"],"names":[],"mappings":"AAGA,SAAS,CAAC,MAAM,CAAC;IAEb,OAAO,EAAE,IAAI;IAChB,OAAO,EAAE,IAAI,GAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;IAEjC,KAAK,EAAE;QACH,OAAO,EAAE,wBAAwB,GAAC,oBAAoB;QACtD,QAAQ,EAAE,gBAAgB,GAAC,EAAE;KAChC;IAED,IAAI,EAAE;QACF,OAAO,EAAE;YAIL,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE;gBAEF,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;YACnC,CAAC;SACJ;KACJ;CACJ,CAAC,CAAC","file":"require.config.js","sourcesContent":["///\r\n///\r\n\r\nrequirejs.config({\r\n\r\n baseUrl: './',\r\n\turlArgs: 't='+(new Date()).getTime(),\r\n\r\n paths: {\r\n \"QUnit\": \"../../bower_components\"+\"/qunit/qunit/qunit\",\r\n \"source\": \"../../dist/amd\"+\"\"\r\n },\r\n\r\n shim: {\r\n 'QUnit': {\r\n //deps: [\r\n //\t'css!bower_components/qunit/qunit/qunit'\r\n //],\r\n exports: 'QUnit',\r\n init: function () {\r\n //QUnit.config.autoload = false;\r\n QUnit.config.autostart = false;\r\n }\r\n }\r\n }\r\n});\r\n\r\n"]} \ No newline at end of file