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":";;;;AAIA,GAAIA,WAAaC,MAAQA,KAAKD,WAAc,SAAUE,EAAGC,GAErD,QAASC,KAAOH,KAAKI,YAAcH,EADnC,IAAK,GAAII,KAAKH,GAAOA,EAAEI,eAAeD,KAAIJ,EAAEI,GAAKH,EAAEG,GAEnDJ,GAAEM,UAAkB,OAANL,EAAaM,OAAOC,OAAOP,IAAMC,EAAGI,UAAYL,EAAEK,UAAW,GAAIJ,IAEnFO,SAAQ,UAAW,UAAW,YAAa,qBAAsB,uCAAwC,SAAUC,EAASC,EAASC,EAAWC,EAASC,GACrJ,YCCJ,IAAMC,GAAY,OAKlBC,EAAA,SAAAC,GAGC,QAAAD,GAAoBE,GAGnB,GADAD,EAAAE,KAAApB,MAFmBA,KAAAmB,UAAAA,GAGfA,EAAW,KAAM,IAAIJ,GAAAM,sBAAsB,WAC/CrB,MAAKsB,iBAAkB,EAgLzB,MAvLoCvB,WAAAkB,EAAAC,GAUzBD,EAAAV,UAAAgB,WAAV,WAECL,EAAAX,UAAMgB,WAAUH,KAAApB,MAChBA,KAAKmB,UAAYH,GAGVC,EAAAV,UAAAiB,QAAR,WAEC,GAAIC,GAAIzB,KAAKmB,SACVM,KAEFzB,KAAKmB,UAAYH,EACjBhB,KAAKsB,iBAAkB,EACvBtB,KAAK0B,aAAaD,KAIpBR,EAAAV,UAAAoB,gBAAA,SACCC,EACAC,GAGA,MADA7B,MAAKwB,UACEN,EAAAX,UAAMoB,gBAAeP,KAAApB,KAAC4B,EAAaC,IAI3CZ,EAAAV,UAAAuB,SAAA,SACCF,EACAC,GAGA,MADA7B,MAAKwB,UACEN,EAAAX,UAAMuB,SAAQV,KAAApB,KAAC4B,EAAaC,IAUpCZ,EAAAV,UAAAwB,aAAA,SAAaC,GAAb,GAAAC,GAAAjC,IAKC,IALY,SAAAgC,IAAAA,EAAA,GAEZhC,KAAKkC,mBAGDlC,KAAKmB,WAAanB,KAAKmC,UAC1B,MAAOjB,GAAAX,UAAMwB,aAAYX,KAAApB,KAACgC,EAO3B,IAAII,GACAC,GAAmB,EAGnBC,EAAUxB,EAAAyB,MAAM,WAElBF,GAAW,EAERD,GACFA,KAEFJ,EAED,OAAO,IAAIf,GACV,SAACuB,EAASC,GAGTL,EAAO,WAENH,EAAKH,SACJ,SAAAY,GAAI,MAAAF,GAAQE,IACZ,SAAAC,GAAI,MAAAF,GAAOE,KAEZL,EAAQM,UACRN,EAAU,KACVF,EAAO,MAILC,GACFD,OAWJnB,EAAAV,UAAAsC,kBAAA,SAAkBb,GAAlB,GAAAC,GAAAjC,IAKC,IALiB,SAAAgC,IAAAA,EAAA,GAEjBhC,KAAKkC,mBAGDlC,KAAKmB,WAAanB,KAAKmC,UAC1B,MAAOjB,GAAAX,UAAMsC,kBAAiBzB,KAAApB,KAACgC,EAOhC,IAAII,GAIAE,EAEAQ,EAAW,WAEXR,IAEFA,EAAQM,UACRN,EAAU,MAGRF,GACFA,IAEDU,EAAW,MAIPC,EAAW,WAEXD,IACFR,EAAUxB,EAAAyB,MAAMO,EAAUd,IAU7B,OAJCd,GAAAX,UAAMuB,SAAQV,KAAApB,KAAC+C,EAAUA,GACzBA,EAAW,KAGL,GAAI9B,GACV,SAACuB,EAASC,GAGNR,EAAKe,WAEPf,EAAKH,SACJ,SAAAY,GAAI,MAAA5B,GAAAyB,MAAM,WAAI,MAAAC,GAAQE,MACtB,SAAAC,GAAI,MAAA7B,GAAAyB,MAAM,WAAI,MAAAE,GAAOE,OAEtBG,MAKAV,EAAO,WAENH,EAAKH,SACJ,SAAAY,GAAI,MAAAF,GAAQE,IACZ,SAAAC,GAAI,MAAAF,GAAOE,MAKTG,GACHV,QAMNnB,GAvLoCJ,EAAAoC,QAAvBrC,GAAAK,YAAWA,EAyLxBT,OAAA0C,eAAAtC,EAAA,cAAAuC,OAAA,ID7FIvC,EAAAA,WC6FWK","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":";;;;;;AAMA;;;;;;;;;;;;ACOA,IAAA,UAAA,QAAiB,UAAjB,CAAA;AAEA,IAAA,mBAAA,QAA6B,6BAA7B,CAAA;AACA,IAAA,mBAAA,QAA6B,8BAA7B,CAAA;AACA,IAAA,8BAAA,QAAwC,yCAAxC,CAAA;AACA,IAAA,sBAAA,QAAgC,iCAAhC,CAAA;AACA,IAAA,0BAAA,QAAoC,qCAApC,CAAA;AACA,IAAA,eAAA,QAAyB,0BAAzB,CAAA;AACA,IAAA,QAAA,QAAkB,oBAAlB,CAAA;AACA,IAAA,UAAA,QAAoB,oBAApB,CAAA;AAGA,IAAM,QAAY,KAAK,CAAL;IAAQ,UAAU,SAAV;IAAqB,gBAAgB,UAAU,OAAV;IAAmB,OAAO,MAAP;IAAe,SAAS,QAAT;AAEjG,SAAA,SAAA,CAAsB,KAAtB,EAA+B;AAE9B,WAAO,QAAA,OAAA,CAAK,eAAL,CAAqB,KAArB,EAA4B,IAA5B,EAAkC,QAAA,OAAA,CAAK,QAAL,CAAzC,CAF8B;CAA/B;AAKA,SAAA,OAAA,CACC,KADD,EAC8B,QAD9B,EAEC,cAFD,EAEyC;AAExC,QAAI,YAAY,WACb,SAAS,KAAT,CADa,GAEb,KAFa,CAFwB;AAMxC,WAAO,aAAa,UAAU,SAAV,CAAb,GACJ,QAAQ,IAAR,CAAa,SAAb,CADI,GAEJ,eAAe,SAAf,CAFI,CANiC;CAFzC;AAaA,SAAA,IAAA,CAAiB,MAAjB,EAAwC,IAAxC,EAAuD;AAEtD,WAAO,YAAA;AAEN,eAAO,QAAP,CACC,aAAC;AAEA,iBAAK,OAAL,CAAa,CAAb,EAFA;SAAD,EAIA,aAAC;AAEA,iBAAK,MAAL,CAAY,CAAZ,EAFA;SAAD,CALD,CAFM;KAAA,CAF+C;CAAvD;AAgBA,SAAA,WAAA,CAAwB,MAAxB,EAA+C,IAA/C,EAAgE,EAAhE,EAAyE;AAExE,WAAO,YAAA;AAEN,eAAO,QAAP,CACC;mBAAG,QAAA,KAAA,CAAM;uBAAI,KAAK,OAAL,CAAa,CAAb;aAAJ,EAAqB,EAA3B;SAAH,EACA;mBAAG,QAAA,KAAA,CAAM;uBAAI,KAAK,MAAL,CAAY,CAAZ;aAAJ,EAAoB,EAA1B;SAAH,CAFD,CAFM;KAAA,CAFiE;CAAzE;AAUA,SAAA,gBAAA,CACC,CADD,EAEC,KAFD,EAGC,QAHD,EAG2C;AAE1C,QACA;AACC,YAAI,IAAI,WAAW,SAAS,KAAT,CAAX,GAA6B,KAA7B,CADT;AAEC,YAAG,CAAH,EAAM,EAAE,OAAF,CAAU,CAAV,EAAN;KAHD,CAKA,OAAM,EAAN,EACA;AAAE,UAAE,MAAF,CAAS,EAAT,EAAF;KADA;CAVD;AAcA,SAAA,uBAAA,CACC,aADD,EAEC,YAFD,EAGC,KAHD,EAIC,QAJD,EAI2C;AAE1C,QACA;AACC,YAAI,IAAI,WAAW,SAAS,KAAT,CAAX,GAA6B,KAA7B,CADT;AAEC,YAAG,aAAH,EAAkB,cAAc,CAAd,EAAlB;KAHD,CAKA,OAAM,EAAN,EACA;AAAE,YAAG,YAAH,EAAiB,aAAa,EAAb,EAAjB;KADF;CAXD;AAeA,SAAA,cAAA,CACC,CADD,EAEC,WAFD,EAGC,UAHD,EAGoC;AAEnC,QAAG,aAAa,WAAb,EACF,EAAE,QAAF,CAAW,WAAX,EAAwB,UAAxB,EADD,KAGC,EAAE,IAAF,CAAY,WAAZ,EAAyB,UAAzB,EAHD;CALD;;IAWA;;;AAIC,aAJD,YAIC,CACW,MADX,EAEW,OAFX,EAGW,MAHX,EAGsB;8BAPvB,cAOuB;;2EAPvB,0BAOuB;;AAFX,cAAA,MAAA,GAAA,MAAA,CAEW;AADX,cAAA,OAAA,GAAA,OAAA,CACW;AAAX,cAAA,MAAA,GAAA,MAAA,CAAW;AAGrB,cAAK,qBAAL,GAA6B,aAA7B,CAHqB;;KAHtB;;iBAJD;;qCAaqB;AAEnB,iBAAK,MAAL,GAAc,KAAd,CAFmB;AAGnB,iBAAK,OAAL,GAAe,KAAf,CAHmB;AAInB,iBAAK,MAAL,GAAc,KAAd,CAJmB;;;;mCAOF;AAEjB,mBAAO,KAAK,MAAL,CAFU;;;;oCAiCC;AAElB,mBAAO,KAAK,OAAL,CAFW;;;;mCAWD;AAEjB,mBAAO,KAAK,MAAL,CAFU;;;;4BAvCT;AAER,mBAAO,KAAK,MAAL,CAFC;;;;4BAKI;AAEZ,mBAAO,KAAK,QAAL,OAAkB,QAAQ,KAAR,CAAc,OAAd,CAFb;;;;4BAKA;AAEZ,mBAAO,KAAK,QAAL,MAAiB,QAAQ,KAAR,CAAc,OAAd,CAFZ;;;;4BAKE;AAEd,mBAAO,KAAK,QAAL,OAAkB,QAAQ,KAAR,CAAc,SAAd,CAFX;;;;4BAKD;AAEb,mBAAO,KAAK,QAAL,OAAkB,QAAQ,KAAR,CAAc,QAAd,CAFZ;;;;4BAaJ;AAET,iBAAK,eAAL,GAFS;AAGT,mBAAO,KAAK,SAAL,EAAP,CAHS;;;;4BAWD;AAER,iBAAK,eAAL,GAFQ;AAGR,mBAAO,KAAK,QAAL,EAAP,CAHQ;;;;WArEV;EACQ,iBAAA,cAAA;;AADK,QAAA,YAAA,GAAY,YAAZ;;IA6Eb;;;AAGC,aAHD,WAGC,GAAA;8BAHD,aAGC;;4EAHD,wBAKQ,QAAQ,KAAR,CAAc,OAAd,GAFP;;AAGC,eAAK,qBAAL,GAA6B,OAA7B,CAHD;;KAAA;;iBAHD;;6BA8BE,aACA,YAAmC;;;AAEnC,mBAAO,QAAQ,OAAR,CAAyB,UAAC,OAAD,EAAU,MAAV,EAAgB;AAE/C,uBAAK,QAAL,CACC;2BAAQ,wBAAwB,OAAxB,EAAiC,MAAjC,EAAyC,MAAzC,EAAiD,WAAjD;iBAAR,EACA;2BAAO,aACJ,wBAAwB,OAAxB,EAAiC,IAAjC,EAAuC,KAAvC,EAA8C,UAA9C,CADI,GAEJ,OAAO,KAAP,CAFI;iBAAP,CAFD,CAF+C;aAAhB,CAAhC,CAFmC;;;;uCAkBA;gBAAvB,qEAAsB,iBAAC;;AAEnC,iBAAK,eAAL,GAFmC;AAKnC,gBAAI,IAAI,QAAQ,OAAR,EAAJ,CAL+B;AAMnC,oBAAA,KAAA,CAAM,KAAK,IAAL,EAAW,CAAX,CAAN,EAAqB,YAArB,EANmC;AAOnC,mBAAO,CAAP,CAPmC;;;;4CAgBK;gBAAvB,qEAAsB,iBAAC;;AAExC,iBAAK,eAAL,GAFwC;AAIxC,gBAAI,IAAI,QAAQ,OAAR,EAAJ,CAJoC;AAKxC,wBAAY,IAAZ,EAAkB,CAAlB,EAAqB,YAArB,EALwC;AAMxC,mBAAO,CAAP,CANwC;;;aASzC;+BAAiB,YAAkC;AAElD,iBAAK,eAAL,GAFkD;AAGlD,mBAAO,KAAK,IAAL,CAAU,KAAV,EAAiB,UAAjB,CAAP,CAHkD;;;aAMnD;iCAAmB,KAAmC;AAErD,iBAAK,eAAL,GAFqD;AAGrD,mBAAO,KAAK,IAAL,CAAU,GAAV,EAAe,GAAf,CAAP,CAHqD;;;;oCAM1C,KAAY;AAEvB,iBAAK,eAAL,GAFuB;AAGvB,gBAAI,IAAI,SAAJ,CAAI;uBAAI,iBAAA,cAAA,CAAe,GAAf;aAAJ,CAHe;AAIvB,iBAAK,QAAL,CAAc,CAAd,EAAiB,CAAjB,EAJuB;AAKvB,mBAAO,IAAP,CALuB;;;;WAtFzB;EACQ;;AADc,QAAA,WAAA,GAAW,WAAX;;IAgGtB;;;;;;;;;;;wCAIE,aACA,YAAmC;AAEnC,iBAAK,eAAL,GAFmC;AAInC,gBACA;AACC,wBAAO,KAAK,KAAL;AAEN,yBAAK,QAAQ,KAAR,CAAc,SAAd;AACJ,+BAAO,cACJ,QAAQ,KAAK,OAAL,EAAc,WAAtB,EAAmC,QAAQ,OAAR,CAD/B,GAEC,IAFD,CADR;AAFD,yBAMM,QAAQ,KAAR,CAAc,QAAd;AACJ,+BAAO,aACJ,QAAQ,KAAK,MAAL,EAAa,UAArB,EAAiC,QAAQ,OAAR,CAD7B,GAEC,IAFD,CADR;AAND,iBADD;aADA,CAcA,OAAM,EAAN,EACA;AACC,uBAAO,IAAI,QAAJ,CAAkB,EAAlB,CAAP,CADD;aADA;AAKA,kBAAM,IAAI,KAAJ,CAAU,uCAAV,CAAN,CAvBmC;;;;iCA2BnC,aACA,YAAyB;AAEzB,iBAAK,eAAL,GAFyB;AAIzB,oBAAO,KAAK,KAAL;AAEN,qBAAK,QAAQ,KAAR,CAAc,SAAd;AACJ,wBAAG,WAAH,EAAgB,YAAY,KAAK,OAAL,CAAZ,CAAhB;AACA,0BAFD;AAFD,qBAKM,QAAQ,KAAR,CAAc,QAAd;AACJ,wBAAG,UAAH,EAAe,WAAW,KAAK,MAAL,CAAX,CAAf;AACA,0BAFD;AALD,aAJyB;AAczB,mBAAO,IAAP,CAdyB;;;;WAjC3B;EAA4C;;AAAtB,QAAA,UAAA,GAAU,UAAV;;IAuDtB;;;AAEC,aAFD,QAEC,CAAY,KAAZ,EAAiC,MAAjC,EAA2C,KAA3C,EAAqD;8BAFtD,UAEsD;;4EAFtD,sBAEsD;;AAGpD,eAAK,OAAL,GAAe,MAAf,CAHoD;AAIpD,eAAK,MAAL,GAAc,KAAd,CAJoD;AAKpD,eAAK,MAAL,GAAc,KAAd,CALoD;;KAArD;;WAFD;EAA0C;;AAApB,QAAA,QAAA,GAAQ,QAAR;;IAgBtB;;;AAEC,aAFD,SAEC,CAAY,KAAZ,EAAoB;8BAFrB,WAEqB;;sEAFrB,sBAIQ,QAAQ,KAAR,CAAc,SAAd,EAAyB,QAFZ;KAApB;;WAFD;EAA2B;;IAW3B;;;AAEC,aAFD,QAEC,CAAY,KAAZ,EAAqB;8BAFtB,UAEsB;;sEAFtB,qBAIQ,QAAQ,KAAR,CAAc,QAAd,EAAwB,OAAO,QAFjB;KAArB;;WAFD;EAA0B;;IAY1B;;;AAEC,aAFD,cAEC,CAAoB,OAApB,EAA0C;8BAF3C,gBAE2C;;4EAF3C,4BAE2C;;AAAtB,eAAA,OAAA,GAAA,OAAA,CAAsB;AAIzC,YAAG,CAAC,OAAD,EACF,MAAM,IAAI,wBAAA,qBAAA,CAAsB,MAA1B,CAAN,CADD;AAGA,YAAG,CAAC,UAAU,OAAV,CAAD,EACF,MAAM,IAAI,oBAAA,iBAAA,CAAkB,MAAtB,EAA8B,gCAA9B,CAAN,CADD;AAGA,gBAAQ,IAAR,CACC,aAAC;AAEA,mBAAK,MAAL,GAAc,QAAQ,KAAR,CAAc,SAAd,CAFd;AAGA,mBAAK,OAAL,GAAe,CAAf,CAHA;AAIA,mBAAK,MAAL,GAAc,KAAd,CAJA;AAKA,mBAAK,OAAL,GAAe,KAAf,CALA;SAAD,EAOA,aAAC;AAEA,mBAAK,MAAL,GAAc,QAAQ,KAAR,CAAc,QAAd,CAFd;AAGA,mBAAK,MAAL,GAAc,CAAd,CAHA;AAIA,mBAAK,OAAL,GAAe,KAAf,CAJA;SAAD,CARD,CAVyC;;KAA1C;;iBAFD;;wCA6BE,aACA,YAAmC;AAEnC,iBAAK,eAAL,GAFmC;AAInC,gBAAI,IAAI,KAAK,OAAL,CAJ2B;AAKnC,gBAAG,CAAC,CAAD,EAAI,kCAnCT,+DAmCsC,aAAa,WAA1C,CAAP;AAEA,gBAAI,IAAI,QAAQ,OAAR,EAAJ,CAP+B;AAQnC,2BAAe,CAAf,EACC;uBAAQ,iBAAiB,CAAjB,EAAoB,MAApB,EAA4B,WAA5B;aAAR,EACA;uBAAO,aAAa,iBAAiB,CAAjB,EAAoB,KAApB,EAA2B,UAA3B,CAAb,GAAsD,EAAE,MAAF,CAAS,KAAT,CAAtD;aAAP,CAFD,CARmC;AAWnC,mBAAO,CAAP,CAXmC;;;;iCAgBnC,aACA,YAAyB;AAEzB,iBAAK,eAAL,GAFyB;AAIzB,gBAAI,IAAI,KAAK,OAAL,CAJiB;AAKzB,gBAAG,CAAC,CAAD,EAAI,kCApDT,wDAoD+B,aAAa,WAAnC,CAAP;AACA,2BAAe,CAAf,EAAkB,WAAlB,EAA+B,UAA/B,EANyB;AAOzB,mBAAO,IAAP,CAPyB;;;;qCAUN;AAEnB,uCA3DF,yDA2DE,CAFmB;AAGnB,iBAAK,OAAL,GAAe,KAAf,CAHmB;;;;WAzDrB;EAAgC;;IAqEhC;;;AAeC,aAfD,OAeC,CACC,QADD,EAC8B;8BAhB/B,SAgB+B;;4EAhB/B,qBAgB+B;;AAI7B,YAAG,QAAH,EAAa,OAAK,YAAL,CAAkB,QAAlB,EAAb;sBAJ6B;KAD9B;;iBAfD;;wCAyBE,aACA,YAAmC;AAEnC,iBAAK,eAAL,GAFmC;AAKnC,gBAAG,KAAK,MAAL,EAAa,kCA/BlB,wDA+B+C,aAAa,WAA1C,CAAhB;AAEA,gBAAI,IAAI,IAAI,OAAJ,EAAJ,CAP+B;AAQnC,aAAC,KAAK,QAAL,KAAkB,KAAK,QAAL,GAAgB,EAAhB,CAAlB,CAAD,CACE,IADF,CACO,MAAM,gBAAN,CAAuB,IAAvB,CAA4B,WAA5B,EAAyC,UAAzC,EAAqD,CAArD,CADP,EARmC;AAUnC,mBAAO,CAAP,CAVmC;;;;iCAcnC,aACA,YAAyB;AAEzB,iBAAK,eAAL,GAFyB;AAKzB,gBAAG,KAAK,MAAL,EAAa,kCA9ClB,iDA8CwC,aAAa,WAAnC,CAAhB;AAEA,aAAC,KAAK,QAAL,KAAkB,KAAK,QAAL,GAAgB,EAAhB,CAAlB,CAAD,CACE,IADF,CACO,MAAM,gBAAN,CAAuB,IAAvB,CAA4B,WAA5B,EAAyC,UAAzC,CADP,EAPyB;AAUzB,mBAAO,IAAP,CAVyB;;;;qCAcN;AAEnB,uCAzDF,kDAyDE,CAFmB;AAGnB,iBAAK,eAAL,GAAuB,KAAvB,CAHmB;;;;qCAUnB,UAC8B;;;gBAA9B,uEAAyB,qBAAK;;AAE9B,gBAAG,CAAC,QAAD,EACF,MAAM,IAAI,wBAAA,qBAAA,CAAsB,UAA1B,CAAN,CADD;AAEA,gBAAG,KAAK,eAAL,EACF,MAAM,IAAI,4BAAA,yBAAA,CAA0B,4BAA9B,CAAN,CADD;AAEA,gBAAG,KAAK,KAAL,EACF,MAAM,IAAI,4BAAA,yBAAA,CAA0B,uBAAuB,QAAQ,KAAR,CAAc,KAAK,KAAL,CAArC,CAApC,CADD;AAGA,iBAAK,eAAL,GAAuB,IAAvB,CAT8B;AAW9B,gBAAI,gBAAgB,SAAhB,aAAgB,CAAC,MAAD,EAAW;AAE9B,wBAAK,eAAL,GAAuB,KAAvB,CAF8B;AAG9B,wBAAK,MAAL,CAAY,MAAZ,EAH8B;aAAX,CAXU;AAiB9B,gBAAI,iBAAiB,SAAjB,cAAiB,CAAC,CAAD,EAAM;AAE1B,wBAAK,eAAL,GAAuB,KAAvB,CAF0B;AAG1B,wBAAK,OAAL,CAAa,CAAb,EAH0B;aAAN,CAjBS;AAyB9B,6BAAA,cAAA,CAAe,YAAA;AAEd,yBACC,aAAC;AAEA,wBAAG,YAAH,EAAY,MAAM,IAAI,4BAAA,yBAAA,CAA0B,qCAA9B,CAAN,CAAZ;AACA,wBAAG,UAAU,CAAV,CAAH,EACC,eAAe,CAAf,EAAkB,cAAlB,EAAkC,aAAlC,EADD,KAGA;AACC,uCAAe,CAAf,EADD;qBAHA;iBAHD,EAWA,aAZD,EAFc;aAAA,CAAf,CAzB8B;;;;gCA6CvB,QAAyC;gBAA9B,uEAAyB,qBAAK;;AAEhD,iBAAK,eAAL,GAFgD;AAGhD,gBAAQ,UAAQ,IAAR,EACP,MAAM,IAAI,4BAAA,yBAAA,CAA0B,qCAA9B,CAAN,CADD;AAGA,gBAAG,KAAK,MAAL,EACH;AAEC,oBAAG,CAAC,cAAD,IAAmB,KAAK,MAAL,IAAa,QAAQ,KAAR,CAAc,SAAd,IAA2B,KAAK,OAAL,KAAe,MAAf,EAAuB,OAArF;AACA,sBAAM,IAAI,4BAAA,yBAAA,CAA0B,mEAA9B,CAAN,CAHD;aADA;AAOA,gBAAG,KAAK,eAAL,EACH;AACC,oBAAG,cAAH,EACC,MAAM,IAAI,4BAAA,yBAAA,CAA0B,4BAA9B,CAAN,CADD;AAEA,uBAHD;aADA;AAOA,iBAAK,MAAL,GAAc,QAAQ,KAAR,CAAc,SAAd,CApBkC;AAsBhD,iBAAK,OAAL,GAAe,MAAf,CAtBgD;AAuBhD,iBAAK,MAAL,GAAc,KAAd,CAvBgD;AAwBhD,gBAAI,IAAI,KAAK,QAAL,CAxBwC;AAyBhD,gBAAG,CAAH,EACA;AACC,qBAAK,QAAL,GAAgB,KAAhB,CADD;;;;;;AAEC,yCAAa,2BAAb,oGACA;4BADQ,gBACR;4BACM,cAAwB,EAAxB,YADN;AACK,4BAAc,UAAW,EAAX,OAAd,CADL,IACiC,IAAiB,OAAjB,CADjC;AAEC,8BAAM,gBAAN,CAAuB,OAAvB,CAA+B,CAA/B,EAFD;AAGC,yCAAiB,CAAjB,EAAoB,MAApB,EAA4B,WAA5B,EAHD;qBADA;;;;;;;;;;;;;;iBAFD;;AAQC,kBAAE,MAAF,GAAW,CAAX,CARD;aADA;;;;+BAaM,OAAyC;gBAA9B,uEAAyB,qBAAK;;AAE/C,iBAAK,eAAL,GAF+C;AAG/C,gBAAG,KAAK,MAAL,EACH;AAEC,oBAAG,CAAC,cAAD,IAAmB,KAAK,MAAL,IAAa,QAAQ,KAAR,CAAc,QAAd,IAA0B,KAAK,MAAL,KAAc,KAAd,EAAqB,OAAlF;AACA,sBAAM,IAAI,4BAAA,yBAAA,CAA0B,kEAA9B,CAAN,CAHD;aADA;AAOA,gBAAG,KAAK,eAAL,EACH;AACC,oBAAG,cAAH,EACC,MAAM,IAAI,4BAAA,yBAAA,CAA0B,4BAA9B,CAAN,CADD;AAEA,uBAHD;aADA;AAMA,iBAAK,MAAL,GAAc,QAAQ,KAAR,CAAc,QAAd,CAhBiC;AAkB/C,iBAAK,MAAL,GAAc,KAAd,CAlB+C;AAmB/C,gBAAI,IAAI,KAAK,QAAL,CAnBuC;AAoB/C,gBAAG,CAAH,EACA;AACC,qBAAK,QAAL,GAAgB,IAAhB,CADD;;;;;;AAEC,0CAAa,4BAAb,wGACA;4BADQ,iBACR;4BACM,aAAuB,EAAvB,WADN;AACK,4BAAa,UAAW,EAAX,OAAb,CADL,IACgC,IAAiB,OAAjB,CADhC;AAEC,8BAAM,gBAAN,CAAuB,OAAvB,CAA+B,CAA/B,EAFD;AAGC,4BAAG,UAAH,EAAe,iBAAiB,CAAjB,EAAoB,KAApB,EAA2B,UAA3B,EAAf,KACK,EAAE,MAAF,CAAS,KAAT,EADL;qBAJD;;;;;;;;;;;;;;iBAFD;;AASC,kBAAE,MAAF,GAAW,CAAX,CATD;aADA;;;;WAzKF;EAAgC;;AAAnB,QAAA,OAAA,GAAO,OAAP;;IA4Lb;;;AAGC,aAHD,WAGC,CAAoB,SAApB,EAAiD;8BAHlD,aAGkD;;6EAHlD,yBAGkD;;AAA7B,gBAAA,SAAA,GAAA,SAAA,CAA6B;AAGhD,YAAG,CAAC,SAAD,EAAY,MAAM,IAAI,wBAAA,qBAAA,CAAsB,UAA1B,CAAN,CAAf;AACA,gBAAK,eAAL,GAAuB,IAAvB,CAJgD;;KAAjD;;iBAHD;;qCAUqB;AAEnB,uCAZF,sDAYE,CAFmB;AAGnB,iBAAK,SAAL,GAAiB,KAAjB,CAHmB;;;;kCAML;AAEd,gBAAI,IAAI,KAAK,SAAL,CAFM;AAGd,gBAAG,CAAH,EACA;AACC,qBAAK,SAAL,GAAiB,KAAjB,CADD;AAEC,qBAAK,eAAL,GAAuB,KAAvB,CAFD;AAGC,qBAAK,YAAL,CAAkB,CAAlB,EAHD;aADA;;;;wCASA,aACA,YAAmC;AAEnC,iBAAK,OAAL,GAFmC;AAGnC,8CAhCF,4DAgC+B,aAAa,WAA1C,CAHmC;;;;iCAQnC,aACA,YAAyB;AAEzB,iBAAK,OAAL,GAFyB;AAGzB,8CAzCF,qDAyCwB,aAAa,WAAnC,CAHyB;;;;WAtC3B;EAAoC;;AAAvB,QAAA,WAAA,GAAW,WAAX;AA6Cb,IAAO,KAAP;AAAA,CAAA,UAAO,KAAP,EACA;AAyCC,QAAc,gBAAd,CAzCD;AAyCC,KAAA,UAAc,gBAAd,EACA;AAEC,YAAI,IAAJ,CAFD;AAIC,iBAAA,OAAA,GAAA;AAEC,mBAAO,SACF,OAAO,IAAI,aAAA,UAAA,CAAmC,EAAvC,EAA2C,OAA3C,EAAoD,aAAC;AAE/D,kBAAE,WAAF,GAAgB,IAAhB,CAF+D;AAG/D,kBAAE,UAAF,GAAe,IAAf,CAH+D;AAI/D,kBAAE,OAAF,GAAY,IAAZ,CAJ+D;aAAD,CAA3D,CADE,CAFR;SAAA;AAWA,iBAAA,OAAA,GAAA;AAEC,mBAAO;AACN,6BAAa,IAAb;AACA,4BAAY,IAAZ;AACA,yBAAS,IAAT;aAHD,CAFD;SAAA;AASA,iBAAA,IAAA,CACC,WADD,EAEC,UAFD,EAGC,OAHD,EAG0B;AAGzB,gBAAI,IAAI,UAAU,IAAV,EAAJ,CAHqB;AAIzB,cAAE,WAAF,GAAgB,WAAhB,CAJyB;AAKzB,cAAE,UAAF,GAAe,UAAf,CALyB;AAMzB,cAAE,OAAF,GAAY,OAAZ,CANyB;AAOzB,mBAAO,CAAP,CAPyB;SAH1B;AAAgB,yBAAA,IAAA,GAAI,IAAJ,CAxBjB;AAqCC,iBAAA,OAAA,CAA2B,CAA3B,EAAiD;AAEhD,sBAAU,GAAV,CAAc,CAAd,EAFgD;SAAjD;AAAgB,yBAAA,OAAA,GAAO,OAAP,CArCjB;KADA,CAAA,CAAc,mBAAA,MAAA,gBAAA,KAAA,MAAA,gBAAA,GAAgB,EAAhB,CAAA,CAAd,CAzCD;CADA,CAAA,CAAO,UAAA,QAAK,EAAL,CAAA,CAAP;AA0FA,CAAA,UAAc,OAAd,EACA;AAOC,KAAA,UAAY,KAAZ,EAAiB;AAChB,cAAA,MAAA,SAAA,IAAA,CAAA,CAAA,GAAA,SAAA,CADgB;AAEhB,cAAA,MAAA,WAAA,IAAA,CAAA,CAAA,GAAA,WAAA,CAFgB;AAGhB,cAAA,MAAA,UAAA,IAAA,CAAA,CAAA,CAAA,GAAA,UAAA,CAHgB;KAAjB,CAAA,CAAY,QAAA,KAAA,KAAA,QAAA,KAAA,GAAK,EAAL,CAAA,CAAZ,CAPD;AAOC,QAAY,QAAA,QAAA,KAAA,CAPb;AAYC,WAAO,MAAP,CAAc,KAAd,EAZD;AAsDC,aAAA,GAAA,CACC,KADD,EAE2B;0CAAvB;;SAAuB;;AAE1B,YAAG,CAAC,KAAD,IAAU,CAAC,KAAK,MAAL,EAAa,MAAM,IAAI,wBAAA,qBAAA,CAAsB,UAA1B,CAAN,CAA3B;AACA,YAAI,WAAW,CAAC,MAAM,OAAN,CAAc,KAAd,IAAuB,KAAvB,GAA+B,CAAC,KAAD,CAA/B,CAAD,CAAyC,MAAzC,CAAgD,IAAhD,CAAX,CAHsB;AAI1B,YAAG,CAAC,SAAS,MAAT,IAAmB,SAAS,KAAT,CAAe;mBAAG,CAAC,CAAD;SAAH,CAAnC,EAA2C,OAAO,IAAI,SAAJ,CAAqB,QAArB,CAAP,CAA9C;AAGA,eAAO,QAAe,UAAC,OAAD,EAAU,MAAV,EAAgB;AAErC,gBAAI,aAAa,KAAb,CAFiC;AAGrC,gBAAI,SAAe,EAAf,CAHiC;AAIrC,gBAAI,MAAM,SAAS,MAAT,CAJ2B;AAKrC,mBAAO,MAAP,GAAgB,GAAhB,CALqC;AAOrC,gBAAI,YAAY,IAAI,MAAA,GAAA,CAAI,SAAS,GAAT,CAAa,UAAC,CAAD,EAAI,CAAJ;uBAAQ;aAAR,CAArB,CAAZ,CAPiC;AASrC,gBAAI,UAAU,SAAV,OAAU,GAAA;AAEb,yBAAS,IAAT,CAFa;AAGb,0BAAU,IAAV,CAHa;AAIb,yBAAS,MAAT,GAAkB,CAAlB,CAJa;AAKb,2BAAW,IAAX,CALa;AAMb,0BAAU,OAAV,GANa;AAOb,4BAAY,IAAZ,CAPa;aAAA,CATuB;AAmBrC,gBAAI,uBAAuB,SAAvB,oBAAuB,GAAA;AAE1B,oBAAI,IAAI,OAAJ,CAFsB;AAG1B,oBAAG,KAAK,CAAC,UAAU,KAAV,EACT;AACC,8BADD;AAEC,sBAAE,MAAF,EAFD;iBADA;aAH0B,CAnBU;AA6BrC,gBAAI,YAAY,SAAZ,SAAY,CAAC,CAAD,EAAQ,CAAR,EAAgB;AAE/B,oBAAG,OAAH,EACA;AACC,2BAAO,CAAP,IAAY,CAAZ,CADD;AAEC,8BAAU,MAAV,CAAiB,CAAjB,EAFD;AAGC,2CAHD;iBADA;aAFe,CA7BqB;AAuCrC,gBAAI,WAAW,SAAX,QAAW,CAAC,CAAD,EAAO;AAErB,oBAAI,IAAI,MAAJ,CAFiB;AAGrB,oBAAG,CAAH,EACA;AACC,8BADD;AAEC,sBAAE,CAAF,EAFD;iBADA;aAHc,CAvCsB;;uCAiD7B;AAEP,oBAAI,IAAI,SAAS,CAAT,CAAJ;AACJ,oBAAG,CAAH,EAAM,EAAE,IAAF,CAAO;2BAAG,UAAU,CAAV,EAAa,CAAb;iBAAH,EAAoB,QAA3B,EAAN,KACK,UAAU,MAAV,CAAiB,CAAjB,EADL;AAEA;cAtDoC;;AAiDrC,iBAAI,IAAI,IAAI,CAAJ,EAAO,aAAa,IAAE,GAAF,EAAO,GAAnC,EACA;sBADQ,GACR;aADA;SAjDqB,CAAtB,CAP0B;KAF3B;AAAgB,YAAA,GAAA,GAAG,GAAH,CAtDjB;AA+HC,aAAA,IAAA,CACC,KADD,EAE2B;2CAAvB;;SAAuB;;AAE1B,YAAI,WAAW,SAAS,CAAC,MAAM,OAAN,CAAc,KAAd,IAAuB,KAAvB,GAA+B,CAAC,KAAD,CAA/B,CAAD,CAAyC,MAAzC,CAAgD,IAAhD,CAAT,CAFW;AAG1B,YAAG,CAAC,QAAD,IAAa,CAAC,SAAS,MAAT,IAAmB,CAAC,CAAC,WAAW,SAAS,MAAT,CAAgB;mBAAG,KAAG,IAAH;SAAH,CAA3B,CAAD,CAAyC,MAAzC,EACpC,MAAM,IAAI,oBAAA,iBAAA,CAAkB,sBAAtB,CAAN,CADD;AAGA,YAAI,MAAM,SAAS,MAAT,CANgB;AAS1B,YAAG,OAAK,CAAL,EAAQ,OAAO,KAAK,SAAS,CAAT,CAAL,CAAP,CAAX;AAGA,aAAI,IAAI,IAAI,CAAJ,EAAO,IAAE,GAAF,EAAO,GAAtB,EACA;AACC,gBAAI,IAAQ,SAAS,CAAT,CAAR,CADL;AAEC,gBAAG,aAAa,WAAb,IAA4B,EAAE,SAAF,EAAa,OAAO,CAAP,CAA5C;SAHD;AAMA,eAAO,QAAQ,UAAC,OAAD,EAAU,MAAV,EAAgB;AAE9B,gBAAI,UAAU,SAAV,OAAU,GAAA;AAEb,yBAAS,IAAT,CAFa;AAGb,0BAAU,IAAV,CAHa;AAIb,yBAAS,MAAT,GAAkB,CAAlB,CAJa;AAKb,2BAAW,IAAX,CALa;aAAA,CAFgB;AAU9B,gBAAI,YAAY,SAAZ,SAAY,CAAC,CAAD,EAAkB,CAAlB,EAAuB;AAEtC,oBAAG,CAAH,EACA;AACC,8BADD;AAEC,sBAAE,CAAF,EAFD;iBADA;aAFe,CAVc;AAmB9B,gBAAI,YAAY,SAAZ,SAAY,CAAC,CAAD;uBAAU,UAAU,OAAV,EAAmB,CAAnB;aAAV,CAnBc;AAoB9B,gBAAI,WAAW,SAAX,QAAW,CAAC,CAAD;uBAAW,UAAU,MAAV,EAAkB,CAAlB;aAAX,CApBe;;;;;;AAsB9B,sCAAa,mCAAb,wGACA;wBADQ,kBACR;;AACC,wBAAG,CAAC,OAAD,EAAU,MAAb;AACA,uBAAE,IAAF,CAAO,SAAP,EAAkB,QAAlB,EAFD;iBADA;;;;;;;;;;;;;;aAtB8B;SAAhB,CAAf,CAlB0B;KAF3B;AAAgB,YAAA,IAAA,GAAI,IAAJ,CA/HjB;AA6LC,aAAA,OAAA,CAAwB,KAAxB,EAAkC;AAGjC,eAAO,UAAU,KAAV,IAAmB,KAAK,KAAL,CAAnB,GAAiC,IAAI,SAAJ,CAAc,KAAd,CAAjC,CAH0B;KAAlC;AAAgB,YAAA,OAAA,GAAO,OAAP,CA7LjB;AAwMC,aAAA,MAAA,CAA0B,MAA1B,EAAkC;AAEjC,eAAO,IAAI,QAAJ,CAAgB,MAAhB,CAAP,CAFiC;KAAlC;AAAgB,YAAA,MAAA,GAAM,MAAN,CAxMjB;AAmNC,aAAA,IAAA,CAAwB,QAAxB,EAAoD;AAEnD,eAAO,IAAI,WAAJ,CAAgB,QAAhB,CAAP,CAFmD;KAApD;AAAgB,YAAA,IAAA,GAAI,IAAJ,CAnNjB;AA6NC,aAAA,IAAA,CAAwB,MAAxB,EAA6C;AAE5C,YAAG,CAAC,MAAD,EAAS,MAAM,IAAI,wBAAA,qBAAA,CAAsB,MAA1B,CAAN,CAAZ;AACA,eAAO,kBAAkB,OAAlB,GAA4B,IAA5B,GAAmC,IAAI,cAAJ,CAAmB,MAAnB,CAAnC,CAHqC;KAA7C;AAAgB,YAAA,IAAA,GAAI,IAAJ,CA7NjB;AAwOC,aAAA,UAAA,CAAsC,IAAtC,EAA0D;AAEzD,YAAG,CAAC,IAAD,EAAO,MAAM,IAAI,wBAAA,qBAAA,CAAsB,IAA1B,CAAN,CAAV;AACA,eAAO,IAAI,cAAJ,CAAmB,EAAC,MAAM,IAAN,EAApB,CAAP,CAHyD;KAA1D;AAAgB,YAAA,UAAA,GAAU,UAAV,CAxOjB;AAkPC,aAAA,OAAA,CAA2B,QAA3B,EAAwD;AAEvD,eAAO,IAAI,OAAJ,CAAY,QAAZ,CAAP,CAFuD;KAAxD;AAAgB,YAAA,OAAA,GAAO,OAAP,CAlPjB;CADA,CAAA,CAAc,UAAA,QAAA,OAAA,KAAA,QAAA,OAAA,GAAO,EAAP,CAAA,CAAd","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":"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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/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":";;;;AAIA,GAAIA,WAAaC,MAAQA,KAAKD,WAAc,SAAUE,EAAGC,GAErD,QAASC,KAAOH,KAAKI,YAAcH,EADnC,IAAK,GAAII,KAAKH,GAAOA,EAAEI,eAAeD,KAAIJ,EAAEI,GAAKH,EAAEG,GAEnDJ,GAAEM,UAAkB,OAANL,EAAaM,OAAOC,OAAOP,IAAMC,EAAGI,UAAYL,EAAEK,UAAW,GAAIJ,MAEnF,SAAWO,GACP,GAAsB,gBAAXC,SAAiD,gBAAnBA,QAAOC,QAAsB,CAClE,GAAIC,GAAIH,EAAQI,QAASF,QAAoBG,UAANF,IAAiBF,OAAOC,QAAUC,OAElD,kBAAXG,SAAyBA,OAAOC,KAC5CD,QAAQ,UAAW,UAAW,YAAa,qBAAsB,uCAAwCN,IAE9G,SAAUI,EAASF,GAClB,YCZJ,IAAAM,GAAAJ,EAAmC,aAGnCK,EAAAL,EAAoB,sBACpBM,EAAAN,EAAoC,uCAE9BO,EAAY,OAKlBC,EAAA,SAAAC,GAGC,QAAAD,GAAoBE,GAGnB,GADAD,EAAAE,KAAAzB,MAFmBA,KAAAwB,UAAAA,GAGfA,EAAW,KAAM,IAAIJ,GAAAM,sBAAsB,WAC/C1B,MAAK2B,iBAAkB,EAgLzB,MAvLoC5B,WAAAuB,EAAAC,GAUzBD,EAAAf,UAAAqB,WAAV,WAECL,EAAAhB,UAAMqB,WAAUH,KAAAzB,MAChBA,KAAKwB,UAAYH,GAGVC,EAAAf,UAAAsB,QAAR,WAEC,GAAIC,GAAI9B,KAAKwB,SACVM,KAEF9B,KAAKwB,UAAYH,EACjBrB,KAAK2B,iBAAkB,EACvB3B,KAAK+B,aAAaD,KAIpBR,EAAAf,UAAAyB,gBAAA,SACCC,EACAC,GAGA,MADAlC,MAAK6B,UACEN,EAAAhB,UAAMyB,gBAAeP,KAAAzB,KAACiC,EAAaC,IAI3CZ,EAAAf,UAAA4B,SAAA,SACCF,EACAC,GAGA,MADAlC,MAAK6B,UACEN,EAAAhB,UAAM4B,SAAQV,KAAAzB,KAACiC,EAAaC,IAUpCZ,EAAAf,UAAA6B,aAAA,SAAaC,GAAb,GAAAC,GAAAtC,IAKC,IALY,SAAAqC,IAAAA,EAAA,GAEZrC,KAAKuC,mBAGDvC,KAAKwB,WAAaxB,KAAKwC,UAC1B,MAAOjB,GAAAhB,UAAM6B,aAAYX,KAAAzB,KAACqC,EAO3B,IAAII,GACAC,GAAmB,EAGnBC,EAAUxB,EAAAyB,MAAM,WAElBF,GAAW,EAERD,GACFA,KAEFJ,EAED,OAAO,IAAIf,GACV,SAACuB,EAASC,GAGTL,EAAO,WAENH,EAAKH,SACJ,SAAAtB,GAAI,MAAAgC,GAAQhC,IACZ,SAAAkC,GAAI,MAAAD,GAAOC,KAEZJ,EAAQK,UACRL,EAAU,KACVF,EAAO,MAILC,GACFD,OAWJnB,EAAAf,UAAA0C,kBAAA,SAAkBZ,GAAlB,GAAAC,GAAAtC,IAKC,IALiB,SAAAqC,IAAAA,EAAA,GAEjBrC,KAAKuC,mBAGDvC,KAAKwB,WAAaxB,KAAKwC,UAC1B,MAAOjB,GAAAhB,UAAM0C,kBAAiBxB,KAAAzB,KAACqC,EAOhC,IAAII,GAIAE,EAEAO,EAAW,WAEXP,IAEFA,EAAQK,UACRL,EAAU,MAGRF,GACFA,IAEDS,EAAW,MAIPC,EAAW,WAEXD,IACFP,EAAUxB,EAAAyB,MAAMM,EAAUb,IAU7B,OAJCd,GAAAhB,UAAM4B,SAAQV,KAAAzB,KAACmD,EAAUA,GACzBA,EAAW,KAGL,GAAI7B,GACV,SAACuB,EAASC,GAGNR,EAAKc,WAEPd,EAAKH,SACJ,SAAAtB,GAAI,MAAAM,GAAAyB,MAAM,WAAI,MAAAC,GAAQhC,MACtB,SAAAkC,GAAI,MAAA5B,GAAAyB,MAAM,WAAI,MAAAE,GAAOC,OAEtBG,MAKAT,EAAO,WAENH,EAAKH,SACJ,SAAAtB,GAAI,MAAAgC,GAAQhC,IACZ,SAAAkC,GAAI,MAAAD,GAAOC,MAKTG,GACHT,QAMNnB,GAvLoCJ,EAAAmC,QAAvBzC,GAAAU,YAAWA,EAyLxBd,OAAA8C,eAAA1C,EAAA,cAAA2C,OAAA,IDnFI3C,EAAAA,WCmFWU","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":";;;;;;;;;IAGA,IAAY,MAAM,WAAM,yCAAyC,CAAC,CAAA;IAClE,IAAY,YAAY,WAAM,yCAAyC,CAAC,CAAA;IAExE;QAEI,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC;QAE5B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAEzC,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,UAAC,MAAkB;YACtD,IAAI,GAAU,CAAC;YAEf,GAAG,GAAG,GAAG,CAAC;YACV,IAAI,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,oBAAoB,GAAG,GAAG,CAAC,CAAC;YAExD,GAAG,GAAG,MAAM,CAAC;YACb,IAAI,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,oBAAoB,GAAG,GAAG,CAAC,CAAC;QAE5D,CAAC,CAAC,CAAC;QAGH,KAAK,CAAC,IAAI,CAAC,2BAA2B,EAAE,UAAC,MAAkB;YACvD,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACrD,IAAI,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE/B,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,UAAC,MAAkB;YACpD,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,UAAC,MAAkB;YACrD,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,UAAC,CAAQ;gBAC5C,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACnB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACP,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,UAAC,CAAQ;gBAC5C,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACtB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,UAAC,MAAkB;YACpD,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;YAC7C,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;YAChC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;YAEf,MAAM,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAMH,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,UAAC,MAAkB;YAClD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACpD,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;YAEnB,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;YAClE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,+BAA+B,CAAC,CAAC;YACjE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC;YAC5C,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;YAEf,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAC9D,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,+BAA+B,CAAC,CAAC;YACjE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,oBAAoB,CAAC,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;YAC9C,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;YAEf,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC;YACjE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,4BAA4B,CAAC,CAAC;YAC1D,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;YAEf,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;YAC/D,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,+BAA+B,CAAC,CAAC;YACjE,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;YAEf,MAAM,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,0BAA0B,CAAC,CAAC;YACxE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,4BAA4B,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAGH,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,UAAC,MAAkB;YAClD,IAAI,KAAK,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC1C,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,EAAE,qBAAqB,CAAC,CAAC;YACpD,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;gBACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IAGP,CAAC;IA5FD;yBA4FC,CAAA"} \ 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":";;;;;;;;;IAIA,IAAY,IAAI,WAAM,4BAA4B,CAAC,CAAA;IACnD,IAAY,EAAE,WAAM,yCAAyC,CAAC,CAAA;IAC9D,wCAAoC,kDAAkD,CAAC,CAAA;IAOvF,iBACC,IAAW,EACX,UAA8B;QAE9B,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;QAE7B,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,QAAQ,EAAE,UAAS,MAAkB;YAEtD,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,yBAAyB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;IACJ,CAAC;IAVe,eAAO,UAUtB,CAAA;IAED,wBAAwB,MAAkB,EAAE,KAAS,EAAE,IAAW;QAEjE,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,sBAAyB,MAAkB,EAAE,CAAgB,EAAE,CAAK;QAEnE,IAAI,KAAY,CAAC;QACjB,GAAG,CAAA,CAAU,UAAC,EAAD,OAAC,EAAD,eAAC,EAAD,IAAC,CAAC;YAAX,IAAI,CAAC,UAAA;YAER,cAAc,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACjD,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACT,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,wCAAwC,CAAC,CAAC;YAC3E,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,kCAAkC,CAAC,CAAC;SAC7D;IACF,CAAC;IAED,2BAA8B,MAAkB,EAAE,CAAgB;QAEjE,IAAI,KAAY,CAAC;QACjB,cAAc,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,EAAE,CAAA,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC;YAAC,MAAM,sEAAsE,CAAC;QAE3F,IAAI,CAAC,GAAO,EAAE,CAAC;QAEf,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACZ,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,8DAA8D,CAAC,CAAC;QAC9F,CAAC,CAAC,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,+DAA+D,CAAC,CAAC;QAG1F,GAAG,CAAA,CAAU,UAAC,EAAD,OAAC,EAAD,eAAC,EAAD,IAAC,CAAC;YAAX,IAAI,CAAC,UAAA;YAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAAA;QAEzB,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAI,KAAK,GAAG,SAAS,CAAC,CAAC;QAE5C,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,GAAG,SAAS,EAAE,0GAA0G,CAAC,CAAC;QACtJ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAC,KAAK,GAAG,SAAS,GAAG,CAAC,EAAE,mFAAmF,CAAC,CAAC;QACrI,CAAC,CAAC,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,+DAA+D,CAAC,CAAC;QAG1F,GAAG,CAAA,CAAU,UAAC,EAAD,OAAC,EAAD,eAAC,EAAD,IAAC,CAAC;YAAX,IAAI,CAAC,UAAA;YAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAAA;QACzB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,oEAAoE,CAAC,CAAC;IACvG,CAAC;IAED,wBAA2B,MAAkB,EAAE,CAAgB;QAE9D,IAAI,KAAY,CAAC;QACjB,cAAc,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,EAAE,CAAA,CAAC,CAAC,CAAC,KAAK,GAAC,CAAC,CAAC;YAAC,MAAM,wDAAwD,CAAC;QAE7E,IAAI,CAAC,GAAO,EAAE,CAAC;QACf,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACZ,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEzC,IACA,CAAC;YACA,GAAG,CAAA,CAAU,UAAC,EAAD,OAAC,EAAD,eAAC,EAAD,IAAC,CAAC;gBAAX,IAAI,CAAC,UAAA;gBAER,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACrB,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACzC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,0CAA0C,CAAC,CAAC;gBACzE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,wCAAwC,CAAC,CAAC;aACpE;QACF,CACA;QAAA,KAAK,CAAA,CAAC,EAAE,CAAC,CACT,CAAC;YACA,EAAE,CAAA,CAAC,CAAC,EAAE,CAAC,YAAU,CAAC,iCAAuB,CAAC,CAAC,CAC3C,CAAC;gBACA,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YACD,IAAI,CACJ,CAAC;gBACA,MAAM,EAAE,CAAC;YACV,CAAC;QACF,CAAC;IAEF,CAAC;IAED,oBACC,IAAW,EACX,UAAyB,EACzB,YAAgB;QAEhB,EAAE,CAAA,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAG,CAAC,CAAC,CAAC;YAClC,MAAM,qFAAqF,CAAC;QAM7F,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,UAAS,MAAkB;YAE3C,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;YAC/C,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACtC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACnC,MAAM,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,oCAAoC,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IAEJ,CAAC;IApBe,kBAAU,aAoBzB,CAAA;IAED,0BACC,IAAW,EACX,UAA8B;QAI9B,UAAU,CAAC,IAAI,GAAG,GAAG,GAAG,SAAS,EAAE,UAAU,EAAE;YAC9C,EAAE;YACF,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;SACP,CAAC,CAAA;IAGH,CAAC;IAfe,wBAAgB,mBAe/B,CAAA;IAED,0BACC,IAAW,EACX,UAA8B;QAG9B,UAAU,CAAC,IAAI,GAAG,GAAG,GAAG,SAAS,EAAE,UAAU,EAAE;YAC9C,CAAC;YACD,CAAC;YACD,CAAC;YACD,CAAC;YACD,CAAC;YACD,CAAC;YACD,CAAC;YACD,GAAG;SACH,CAAC,CAAC;IAGJ,CAAC;IAjBe,wBAAgB,mBAiB/B,CAAA;IAED,4BACC,IAAW,EACX,UAA8B;QAE9B,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,UAAU,CAAC,IAAI,GAAG,GAAG,GAAG,SAAS,EAAE,UAAU,EAAE;YAC9C,SAAS;YACT,EAAE;YACF,MAAM;YACN,EAAE;YACF,MAAM;SACN,CAAC,CAAA;IACH,CAAC;IAbe,0BAAkB,qBAajC,CAAA","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":";;;;;;;;;IAGA,oBAAgB,uBAAuB,CAAC,CAAA;IAIxC;QAGC,IAAI,QAAQ,GAAQ;YACnB,MAAM,EAAC,MAAM;YACb,QAAQ,EAAC,mBAAmB;YAC5B,IAAI,EAAC,YAAY;YACjB,IAAI,EAAC,IAAI;YACT,IAAI,EAAC,uBAAuB;YAC5B,KAAK,EAAC,sCAAsC;YAC5C,QAAQ,EAAC,OAAO;SAChB,CAAC;QACF,IAAI,QAAQ,GAAU,EAAE;cACrB,QAAQ,CAAC,MAAM,GAAG,KAAK;cACvB,QAAQ,CAAC,QAAQ,GAAG,GAAG;cACvB,QAAQ,CAAC,IAAI;cACb,GAAG,GAAG,QAAQ,CAAC,IAAI;cACnB,QAAQ,CAAC,IAAI;cACb,QAAQ,CAAC,KAAK;cACd,QAAQ,CAAC,QAAQ,CAAC;QAErB,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAC,MAAkB;YAEjD,MAAM,CAAC,KAAK,CACX,aAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,WAAW,EAC9B,QAAQ,EACR,0CAA0C,CAAC,CAAC;QAE9C,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,UAAC,MAAkB;YAEpD,MAAM,CAAC,KAAK,CACX,aAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EACnC,IAAI,EACJ,+CAA+C,CAAC,CAAC;QAEnD,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,UAAC,MAAkB;YAG3C,MAAM,CAAC,KAAK,CACX,aAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACtB,QAAQ,EACR,6CAA6C,CAAC,CAAC;YAGhD,IAAI,GAAG,GAAG,aAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7B,MAAM,CAAC,KAAK,CACX,GAAG,CAAC,QAAQ,EAAE,EACd,QAAQ,EACR,0CAA0C,CAAC,CAAC;YAE7C,MAAM,CAAC,KAAK,CACX,GAAG,CAAC,WAAW,EACf,QAAQ,EACR,2CAA2C,CAAC,CAAC;YAE9C,MAAM,CAAC,KAAK,CACX,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,IAAI,GAAC,GAAG,CAAC,KAAK,EAClB,yCAAyC,CAAC,CAAC;YAE5C,MAAM,CAAC,KAAK,CACX,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,EACxB,aAAa,EACb,6CAA6C,CAAC,CAAC;YAEhD,MAAM,CAAC,KAAK,CACX,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EACvB,KAAK,EACL,4DAA4D,CAAC,CAAC;YAE/D,MAAM,CAAC,KAAK,CACX,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,EACvB,SAAS,EACT,uCAAuC,CAAC,CAAC;QAG3C,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,qBAAqB,EAAE,UAAC,MAAkB;YAGpD,MAAM,CAAC,MAAM,CAAC;gBACb,aAAG,CAAC,IAAI,CAAC;oBACR,MAAM,EAAM,OAAO;iBACnB,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC;gBACb,aAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;YAGH,MAAM,CAAC,MAAM,CAAC;gBACb,aAAG,CAAC,IAAI,CAAC;oBACR,MAAM,EAAM,SAAS;iBACrB,CAAC,CAAC;YACJ,CAAC,CAAC,CAAC;QAEJ,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,UAAC,MAAkB;YAGvD,MAAM,CAAC,MAAM,CAAC;gBACb,aAAG,CAAC,IAAI,CAAC;oBACR,QAAQ,EAAC,QAAQ,CAAC,QAAQ;iBAC1B,CAAC,CAAA;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC;gBACb,aAAG,CAAC,IAAI,CAAC;oBACR,IAAI,EAAC,QAAQ,CAAC,IAAI;iBAClB,CAAC,CAAA;YACH,CAAC,CAAC,CAAC;QAGJ,CAAC,CAAC,CAAC;IACJ,CAAC;IAzHD;yBAyHC,CAAA"} \ 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