How to use asap method in Playwright Internal

Best JavaScript code snippet using playwright-internal

es6-promise-dbg.js

Source:es6-promise-dbg.js Github

copy

Full Screen

...28 var lib$es6$promise$asap$$len = 0;29 var lib$es6$promise$asap$$toString = {}.toString;30 var lib$es6$promise$asap$$vertxNext;31 var lib$es6$promise$asap$$customSchedulerFn;32 var lib$es6$promise$asap$$asap = function asap(callback, arg) {33 lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;34 lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;35 lib$es6$promise$asap$$len += 2;36 if (lib$es6$promise$asap$$len === 2) {37 // If len is 2, that means that we need to schedule an async flush.38 // If additional callbacks are queued before the queue is flushed, they39 // will be processed by this flush that we are scheduling.40 if (lib$es6$promise$asap$$customSchedulerFn) {41 lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);42 } else {43 lib$es6$promise$asap$$scheduleFlush();44 }45 }46 }47 function lib$es6$promise$asap$$setScheduler(scheduleFn) {48 lib$es6$promise$asap$$customSchedulerFn = scheduleFn;49 }50 function lib$es6$promise$asap$$setAsap(asapFn) {51 lib$es6$promise$asap$$asap = asapFn;52 }53 var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;54 var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};55 var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;56 var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';57 // test for web worker but not in IE1058 var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&59 typeof importScripts !== 'undefined' &&60 typeof MessageChannel !== 'undefined';61 // node62 function lib$es6$promise$asap$$useNextTick() {63 var nextTick = process.nextTick;64 // node version 0.10.x displays a deprecation warning when nextTick is used recursively65 // setImmediate should be used instead instead66 var version = process.versions.node.match(/^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/);67 if (Array.isArray(version) && version[1] === '0' && version[2] === '10') {68 nextTick = setImmediate;69 }70 return function() {71 nextTick(lib$es6$promise$asap$$flush);72 };73 }74 // vertx75 function lib$es6$promise$asap$$useVertxTimer() {76 return function() {77 lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);78 };79 }80 function lib$es6$promise$asap$$useMutationObserver() {81 var iterations = 0;82 var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);83 var node = document.createTextNode('');84 observer.observe(node, { characterData: true });85 return function() {86 node.data = (iterations = ++iterations % 2);87 };88 }89 // web worker90 function lib$es6$promise$asap$$useMessageChannel() {91 var channel = new MessageChannel();92 channel.port1.onmessage = lib$es6$promise$asap$$flush;93 return function () {94 channel.port2.postMessage(0);95 };96 }97 function lib$es6$promise$asap$$useSetTimeout() {98 return function() {99 setTimeout(lib$es6$promise$asap$$flush, 1);100 };101 }102 var lib$es6$promise$asap$$queue = new Array(1000);103 function lib$es6$promise$asap$$flush() {104 for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {105 var callback = lib$es6$promise$asap$$queue[i];106 var arg = lib$es6$promise$asap$$queue[i+1];107 callback(arg);108 lib$es6$promise$asap$$queue[i] = undefined;109 lib$es6$promise$asap$$queue[i+1] = undefined;110 }111 lib$es6$promise$asap$$len = 0;112 }113 function lib$es6$promise$asap$$attemptVertex() {114 try {115 var r = require;116 var vertx = r('vertx');117 lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;118 return lib$es6$promise$asap$$useVertxTimer();119 } catch(e) {120 return lib$es6$promise$asap$$useSetTimeout();121 }122 }123 var lib$es6$promise$asap$$scheduleFlush;124 // Decide what async method to use to triggering processing of queued callbacks:125 if (lib$es6$promise$asap$$isNode) {126 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();127 } else if (lib$es6$promise$asap$$BrowserMutationObserver) {128 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();129 } else if (lib$es6$promise$asap$$isWorker) {130 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();131 } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {132 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertex();133 } else {134 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();135 }136 function lib$es6$promise$$internal$$noop() {}137 var lib$es6$promise$$internal$$PENDING = void 0;138 var lib$es6$promise$$internal$$FULFILLED = 1;139 var lib$es6$promise$$internal$$REJECTED = 2;140 var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();141 function lib$es6$promise$$internal$$selfFullfillment() {142 return new TypeError("You cannot resolve a promise with itself");143 }144 function lib$es6$promise$$internal$$cannotReturnOwn() {145 return new TypeError('A promises callback cannot return that same promise.');146 }147 function lib$es6$promise$$internal$$getThen(promise) {148 try {149 return promise.then;150 } catch(error) {151 lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;152 return lib$es6$promise$$internal$$GET_THEN_ERROR;153 }154 }155 function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {156 try {157 then.call(value, fulfillmentHandler, rejectionHandler);158 } catch(e) {159 return e;160 }161 }162 function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {163 lib$es6$promise$asap$$asap(function(promise) {164 var sealed = false;165 var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {166 if (sealed) { return; }167 sealed = true;168 if (thenable !== value) {169 lib$es6$promise$$internal$$resolve(promise, value);170 } else {171 lib$es6$promise$$internal$$fulfill(promise, value);172 }173 }, function(reason) {174 if (sealed) { return; }175 sealed = true;176 lib$es6$promise$$internal$$reject(promise, reason);177 }, 'Settle: ' + (promise._label || ' unknown promise'));178 if (!sealed && error) {179 sealed = true;180 lib$es6$promise$$internal$$reject(promise, error);181 }182 }, promise);183 }184 function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {185 if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {186 lib$es6$promise$$internal$$fulfill(promise, thenable._result);187 } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {188 lib$es6$promise$$internal$$reject(promise, thenable._result);189 } else {190 lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {191 lib$es6$promise$$internal$$resolve(promise, value);192 }, function(reason) {193 lib$es6$promise$$internal$$reject(promise, reason);194 });195 }196 }197 function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {198 if (maybeThenable.constructor === promise.constructor) {199 lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);200 } else {201 var then = lib$es6$promise$$internal$$getThen(maybeThenable);202 if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {203 lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);204 } else if (then === undefined) {205 lib$es6$promise$$internal$$fulfill(promise, maybeThenable);206 } else if (lib$es6$promise$utils$$isFunction(then)) {207 lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);208 } else {209 lib$es6$promise$$internal$$fulfill(promise, maybeThenable);210 }211 }212 }213 function lib$es6$promise$$internal$$resolve(promise, value) {214 if (promise === value) {215 lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFullfillment());216 } else if (lib$es6$promise$utils$$objectOrFunction(value)) {217 lib$es6$promise$$internal$$handleMaybeThenable(promise, value);218 } else {219 lib$es6$promise$$internal$$fulfill(promise, value);220 }221 }222 function lib$es6$promise$$internal$$publishRejection(promise) {223 if (promise._onerror) {224 promise._onerror(promise._result);225 }226 lib$es6$promise$$internal$$publish(promise);227 }228 function lib$es6$promise$$internal$$fulfill(promise, value) {229 if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }230 promise._result = value;231 promise._state = lib$es6$promise$$internal$$FULFILLED;232 if (promise._subscribers.length !== 0) {233 lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);234 }235 }236 function lib$es6$promise$$internal$$reject(promise, reason) {237 if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }238 promise._state = lib$es6$promise$$internal$$REJECTED;239 promise._result = reason;240 lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);241 }242 function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {243 var subscribers = parent._subscribers;244 var length = subscribers.length;245 parent._onerror = null;246 subscribers[length] = child;247 subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;248 subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;249 if (length === 0 && parent._state) {250 lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);251 }252 }253 function lib$es6$promise$$internal$$publish(promise) {254 var subscribers = promise._subscribers;255 var settled = promise._state;256 if (subscribers.length === 0) { return; }257 var child, callback, detail = promise._result;258 for (var i = 0; i < subscribers.length; i += 3) {259 child = subscribers[i];260 callback = subscribers[i + settled];261 if (child) {262 lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);263 } else {264 callback(detail);265 }266 }267 promise._subscribers.length = 0;268 }269 function lib$es6$promise$$internal$$ErrorObject() {270 this.error = null;271 }272 var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();273 function lib$es6$promise$$internal$$tryCatch(callback, detail) {274 try {275 return callback(detail);276 } catch(e) {277 lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;278 return lib$es6$promise$$internal$$TRY_CATCH_ERROR;279 }280 }281 function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {282 var hasCallback = lib$es6$promise$utils$$isFunction(callback),283 value, error, succeeded, failed;284 if (hasCallback) {285 value = lib$es6$promise$$internal$$tryCatch(callback, detail);286 if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {287 failed = true;288 error = value.error;289 value = null;290 } else {291 succeeded = true;292 }293 if (promise === value) {294 lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());295 return;296 }297 } else {298 value = detail;299 succeeded = true;300 }301 if (promise._state !== lib$es6$promise$$internal$$PENDING) {302 // noop303 } else if (hasCallback && succeeded) {304 lib$es6$promise$$internal$$resolve(promise, value);305 } else if (failed) {306 lib$es6$promise$$internal$$reject(promise, error);307 } else if (settled === lib$es6$promise$$internal$$FULFILLED) {308 lib$es6$promise$$internal$$fulfill(promise, value);309 } else if (settled === lib$es6$promise$$internal$$REJECTED) {310 lib$es6$promise$$internal$$reject(promise, value);311 }312 }313 function lib$es6$promise$$internal$$initializePromise(promise, resolver) {314 try {315 resolver(function resolvePromise(value){316 lib$es6$promise$$internal$$resolve(promise, value);317 }, function rejectPromise(reason) {318 lib$es6$promise$$internal$$reject(promise, reason);319 });320 } catch(e) {321 lib$es6$promise$$internal$$reject(promise, e);322 }323 }324 function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {325 var enumerator = this;326 enumerator._instanceConstructor = Constructor;327 enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);328 if (enumerator._validateInput(input)) {329 enumerator._input = input;330 enumerator.length = input.length;331 enumerator._remaining = input.length;332 enumerator._init();333 if (enumerator.length === 0) {334 lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);335 } else {336 enumerator.length = enumerator.length || 0;337 enumerator._enumerate();338 if (enumerator._remaining === 0) {339 lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);340 }341 }342 } else {343 lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());344 }345 }346 lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {347 return lib$es6$promise$utils$$isArray(input);348 };349 lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {350 return new Error('Array Methods must be provided an Array');351 };352 lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {353 this._result = new Array(this.length);354 };355 var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;356 lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {357 var enumerator = this;358 var length = enumerator.length;359 var promise = enumerator.promise;360 var input = enumerator._input;361 for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {362 enumerator._eachEntry(input[i], i);363 }364 };365 lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {366 var enumerator = this;367 var c = enumerator._instanceConstructor;368 if (lib$es6$promise$utils$$isMaybeThenable(entry)) {369 if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {370 entry._onerror = null;371 enumerator._settledAt(entry._state, i, entry._result);372 } else {373 enumerator._willSettleAt(c.resolve(entry), i);374 }375 } else {376 enumerator._remaining--;377 enumerator._result[i] = entry;378 }379 };380 lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {381 var enumerator = this;382 var promise = enumerator.promise;383 if (promise._state === lib$es6$promise$$internal$$PENDING) {384 enumerator._remaining--;385 if (state === lib$es6$promise$$internal$$REJECTED) {386 lib$es6$promise$$internal$$reject(promise, value);387 } else {388 enumerator._result[i] = value;389 }390 }391 if (enumerator._remaining === 0) {392 lib$es6$promise$$internal$$fulfill(promise, enumerator._result);393 }394 };395 lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {396 var enumerator = this;397 lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {398 enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);399 }, function(reason) {400 enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);401 });402 };403 function lib$es6$promise$promise$all$$all(entries) {404 return new lib$es6$promise$enumerator$$default(this, entries).promise;405 }406 var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;407 function lib$es6$promise$promise$race$$race(entries) {408 /*jshint validthis:true */409 var Constructor = this;410 var promise = new Constructor(lib$es6$promise$$internal$$noop);411 if (!lib$es6$promise$utils$$isArray(entries)) {412 lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));413 return promise;414 }415 var length = entries.length;416 function onFulfillment(value) {417 lib$es6$promise$$internal$$resolve(promise, value);418 }419 function onRejection(reason) {420 lib$es6$promise$$internal$$reject(promise, reason);421 }422 for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {423 lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);424 }425 return promise;426 }427 var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;428 function lib$es6$promise$promise$resolve$$resolve(object) {429 /*jshint validthis:true */430 var Constructor = this;431 if (object && typeof object === 'object' && object.constructor === Constructor) {432 return object;433 }434 var promise = new Constructor(lib$es6$promise$$internal$$noop);435 lib$es6$promise$$internal$$resolve(promise, object);436 return promise;437 }438 var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;439 function lib$es6$promise$promise$reject$$reject(reason) {440 /*jshint validthis:true */441 var Constructor = this;442 var promise = new Constructor(lib$es6$promise$$internal$$noop);443 lib$es6$promise$$internal$$reject(promise, reason);444 return promise;445 }446 var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;447 var lib$es6$promise$promise$$counter = 0;448 function lib$es6$promise$promise$$needsResolver() {449 throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');450 }451 function lib$es6$promise$promise$$needsNew() {452 throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");453 }454 var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;455 /**456 Promise objects represent the eventual result of an asynchronous operation. The457 primary way of interacting with a promise is through its `then` method, which458 registers callbacks to receive either a promise's eventual value or the reason459 why the promise cannot be fulfilled.460 Terminology461 -----------462 - `promise` is an object or function with a `then` method whose behavior conforms to this specification.463 - `thenable` is an object or function that defines a `then` method.464 - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).465 - `exception` is a value that is thrown using the throw statement.466 - `reason` is a value that indicates why a promise was rejected.467 - `settled` the final resting state of a promise, fulfilled or rejected.468 A promise can be in one of three states: pending, fulfilled, or rejected.469 Promises that are fulfilled have a fulfillment value and are in the fulfilled470 state. Promises that are rejected have a rejection reason and are in the471 rejected state. A fulfillment value is never a thenable.472 Promises can also be said to *resolve* a value. If this value is also a473 promise, then the original promise's settled state will match the value's474 settled state. So a promise that *resolves* a promise that rejects will475 itself reject, and a promise that *resolves* a promise that fulfills will476 itself fulfill.477 Basic Usage:478 ------------479 ```js480 var promise = new Promise(function(resolve, reject) {481 // on success482 resolve(value);483 // on failure484 reject(reason);485 });486 promise.then(function(value) {487 // on fulfillment488 }, function(reason) {489 // on rejection490 });491 ```492 Advanced Usage:493 ---------------494 Promises shine when abstracting away asynchronous interactions such as495 `XMLHttpRequest`s.496 ```js497 function getJSON(url) {498 return new Promise(function(resolve, reject){499 var xhr = new XMLHttpRequest();500 xhr.open('GET', url);501 xhr.onreadystatechange = handler;502 xhr.responseType = 'json';503 xhr.setRequestHeader('Accept', 'application/json');504 xhr.send();505 function handler() {506 if (this.readyState === this.DONE) {507 if (this.status === 200) {508 resolve(this.response);509 } else {510 reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));511 }512 }513 };514 });515 }516 getJSON('/posts.json').then(function(json) {517 // on fulfillment518 }, function(reason) {519 // on rejection520 });521 ```522 Unlike callbacks, promises are great composable primitives.523 ```js524 Promise.all([525 getJSON('/posts'),526 getJSON('/comments')527 ]).then(function(values){528 values[0] // => postsJSON529 values[1] // => commentsJSON530 return values;531 });532 ```533 @class Promise534 @param {function} resolver535 Useful for tooling.536 @constructor537 */538 function lib$es6$promise$promise$$Promise(resolver) {539 this._id = lib$es6$promise$promise$$counter++;540 this._state = undefined;541 this._result = undefined;542 this._subscribers = [];543 if (lib$es6$promise$$internal$$noop !== resolver) {544 if (!lib$es6$promise$utils$$isFunction(resolver)) {545 lib$es6$promise$promise$$needsResolver();546 }547 if (!(this instanceof lib$es6$promise$promise$$Promise)) {548 lib$es6$promise$promise$$needsNew();549 }550 lib$es6$promise$$internal$$initializePromise(this, resolver);551 }552 }553 lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;554 lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;555 lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;556 lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;557 lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;558 lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;559 lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;560 lib$es6$promise$promise$$Promise.prototype = {561 constructor: lib$es6$promise$promise$$Promise,562 /**563 The primary way of interacting with a promise is through its `then` method,564 which registers callbacks to receive either a promise's eventual value or the565 reason why the promise cannot be fulfilled.566 ```js567 findUser().then(function(user){568 // user is available569 }, function(reason){570 // user is unavailable, and you are given the reason why571 });572 ```573 Chaining574 --------575 The return value of `then` is itself a promise. This second, 'downstream'576 promise is resolved with the return value of the first promise's fulfillment577 or rejection handler, or rejected if the handler throws an exception.578 ```js579 findUser().then(function (user) {580 return user.name;581 }, function (reason) {582 return 'default name';583 }).then(function (userName) {584 // If `findUser` fulfilled, `userName` will be the user's name, otherwise it585 // will be `'default name'`586 });587 findUser().then(function (user) {588 throw new Error('Found user, but still unhappy');589 }, function (reason) {590 throw new Error('`findUser` rejected and we're unhappy');591 }).then(function (value) {592 // never reached593 }, function (reason) {594 // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.595 // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.596 });597 ```598 If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.599 ```js600 findUser().then(function (user) {601 throw new PedagogicalException('Upstream error');602 }).then(function (value) {603 // never reached604 }).then(function (value) {605 // never reached606 }, function (reason) {607 // The `PedgagocialException` is propagated all the way down to here608 });609 ```610 Assimilation611 ------------612 Sometimes the value you want to propagate to a downstream promise can only be613 retrieved asynchronously. This can be achieved by returning a promise in the614 fulfillment or rejection handler. The downstream promise will then be pending615 until the returned promise is settled. This is called *assimilation*.616 ```js617 findUser().then(function (user) {618 return findCommentsByAuthor(user);619 }).then(function (comments) {620 // The user's comments are now available621 });622 ```623 If the assimliated promise rejects, then the downstream promise will also reject.624 ```js625 findUser().then(function (user) {626 return findCommentsByAuthor(user);627 }).then(function (comments) {628 // If `findCommentsByAuthor` fulfills, we'll have the value here629 }, function (reason) {630 // If `findCommentsByAuthor` rejects, we'll have the reason here631 });632 ```633 Simple Example634 --------------635 Synchronous Example636 ```javascript637 var result;638 try {639 result = findResult();640 // success641 } catch(reason) {642 // failure643 }644 ```645 Errback Example646 ```js647 findResult(function(result, err){648 if (err) {649 // failure650 } else {651 // success652 }653 });654 ```655 Promise Example;656 ```javascript657 findResult().then(function(result){658 // success659 }, function(reason){660 // failure661 });662 ```663 Advanced Example664 --------------665 Synchronous Example666 ```javascript667 var author, books;668 try {669 author = findAuthor();670 books = findBooksByAuthor(author);671 // success672 } catch(reason) {673 // failure674 }675 ```676 Errback Example677 ```js678 function foundBooks(books) {679 }680 function failure(reason) {681 }682 findAuthor(function(author, err){683 if (err) {684 failure(err);685 // failure686 } else {687 try {688 findBoooksByAuthor(author, function(books, err) {689 if (err) {690 failure(err);691 } else {692 try {693 foundBooks(books);694 } catch(reason) {695 failure(reason);696 }697 }698 });699 } catch(error) {700 failure(err);701 }702 // success703 }704 });705 ```706 Promise Example;707 ```javascript708 findAuthor().709 then(findBooksByAuthor).710 then(function(books){711 // found books712 }).catch(function(reason){713 // something went wrong714 });715 ```716 @method then717 @param {Function} onFulfilled718 @param {Function} onRejected719 Useful for tooling.720 @return {Promise}721 */722 then: function(onFulfillment, onRejection) {723 var parent = this;724 var state = parent._state;725 if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {726 return this;727 }728 var child = new this.constructor(lib$es6$promise$$internal$$noop);729 var result = parent._result;730 if (state) {731 var callback = arguments[state - 1];732 lib$es6$promise$asap$$asap(function(){733 lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);734 });735 } else {736 lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);737 }738 return child;739 },740 /**741 `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same742 as the catch block of a try/catch statement.743 ```js744 function findAuthor(){745 throw new Error('couldn't find that author');746 }...

Full Screen

Full Screen

promise.js

Source:promise.js Github

copy

Full Screen

...28 var lib$es6$promise$asap$$len = 0;29 var lib$es6$promise$asap$$toString = {}.toString;30 var lib$es6$promise$asap$$vertxNext;31 var lib$es6$promise$asap$$customSchedulerFn;32 function lib$es6$promise$asap$$asap(callback, arg) {33 lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;34 lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;35 lib$es6$promise$asap$$len += 2;36 if (lib$es6$promise$asap$$len === 2) {37 // If len is 2, that means that we need to schedule an async flush.38 // If additional callbacks are queued before the queue is flushed, they39 // will be processed by this flush that we are scheduling.40 if (lib$es6$promise$asap$$customSchedulerFn) {41 lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);42 } else {43 lib$es6$promise$asap$$scheduleFlush();44 }45 }46 }...

Full Screen

Full Screen

es6-promise.js

Source:es6-promise.js Github

copy

Full Screen

...28 var lib$es6$promise$asap$$len = 0;29 var lib$es6$promise$asap$$toString = {}.toString;30 var lib$es6$promise$asap$$vertxNext;31 var lib$es6$promise$asap$$customSchedulerFn;32 var lib$es6$promise$asap$$asap = function asap(callback, arg) {33 lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;34 lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;35 lib$es6$promise$asap$$len += 2;36 if (lib$es6$promise$asap$$len === 2) {37 // If len is 2, that means that we need to schedule an async flush.38 // If additional callbacks are queued before the queue is flushed, they39 // will be processed by this flush that we are scheduling.40 if (lib$es6$promise$asap$$customSchedulerFn) {41 lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);42 } else {43 lib$es6$promise$asap$$scheduleFlush();44 }45 }46 }47 function lib$es6$promise$asap$$setScheduler(scheduleFn) {48 lib$es6$promise$asap$$customSchedulerFn = scheduleFn;49 }50 function lib$es6$promise$asap$$setAsap(asapFn) {51 lib$es6$promise$asap$$asap = asapFn;52 }53 var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;54 var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};55 var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;56 var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';57 // test for web worker but not in IE1058 var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&59 typeof importScripts !== 'undefined' &&60 typeof MessageChannel !== 'undefined';61 // node62 function lib$es6$promise$asap$$useNextTick() {63 // node version 0.10.x displays a deprecation warning when nextTick is used recursively64 // see https://github.com/cujojs/when/issues/410 for details65 return function() {66 process.nextTick(lib$es6$promise$asap$$flush);67 };68 }69 // vertx70 function lib$es6$promise$asap$$useVertxTimer() {71 return function() {72 lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);73 };74 }75 function lib$es6$promise$asap$$useMutationObserver() {76 var iterations = 0;77 var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);78 var node = document.createTextNode('');79 observer.observe(node, { characterData: true });80 return function() {81 node.data = (iterations = ++iterations % 2);82 };83 }84 // web worker85 function lib$es6$promise$asap$$useMessageChannel() {86 var channel = new MessageChannel();87 channel.port1.onmessage = lib$es6$promise$asap$$flush;88 return function () {89 channel.port2.postMessage(0);90 };91 }92 function lib$es6$promise$asap$$useSetTimeout() {93 return function() {94 setTimeout(lib$es6$promise$asap$$flush, 1);95 };96 }97 var lib$es6$promise$asap$$queue = new Array(1000);98 function lib$es6$promise$asap$$flush() {99 for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {100 var callback = lib$es6$promise$asap$$queue[i];101 var arg = lib$es6$promise$asap$$queue[i+1];102 callback(arg);103 lib$es6$promise$asap$$queue[i] = undefined;104 lib$es6$promise$asap$$queue[i+1] = undefined;105 }106 lib$es6$promise$asap$$len = 0;107 }108 function lib$es6$promise$asap$$attemptVertx() {109 try {110 var r = require;111 var vertx = r('vertx');112 lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;113 return lib$es6$promise$asap$$useVertxTimer();114 } catch(e) {115 return lib$es6$promise$asap$$useSetTimeout();116 }117 }118 var lib$es6$promise$asap$$scheduleFlush;119 // Decide what async method to use to triggering processing of queued callbacks:120 if (lib$es6$promise$asap$$isNode) {121 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();122 } else if (lib$es6$promise$asap$$BrowserMutationObserver) {123 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();124 } else if (lib$es6$promise$asap$$isWorker) {125 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();126 } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {127 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();128 } else {129 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();130 }131 function lib$es6$promise$$internal$$noop() {}132 var lib$es6$promise$$internal$$PENDING = void 0;133 var lib$es6$promise$$internal$$FULFILLED = 1;134 var lib$es6$promise$$internal$$REJECTED = 2;135 var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();136 function lib$es6$promise$$internal$$selfFulfillment() {137 return new TypeError("You cannot resolve a promise with itself");138 }139 function lib$es6$promise$$internal$$cannotReturnOwn() {140 return new TypeError('A promises callback cannot return that same promise.');141 }142 function lib$es6$promise$$internal$$getThen(promise) {143 try {144 return promise.then;145 } catch(error) {146 lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;147 return lib$es6$promise$$internal$$GET_THEN_ERROR;148 }149 }150 function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {151 try {152 then.call(value, fulfillmentHandler, rejectionHandler);153 } catch(e) {154 return e;155 }156 }157 function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {158 lib$es6$promise$asap$$asap(function(promise) {159 var sealed = false;160 var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {161 if (sealed) { return; }162 sealed = true;163 if (thenable !== value) {164 lib$es6$promise$$internal$$resolve(promise, value);165 } else {166 lib$es6$promise$$internal$$fulfill(promise, value);167 }168 }, function(reason) {169 if (sealed) { return; }170 sealed = true;171 lib$es6$promise$$internal$$reject(promise, reason);172 }, 'Settle: ' + (promise._label || ' unknown promise'));173 if (!sealed && error) {174 sealed = true;175 lib$es6$promise$$internal$$reject(promise, error);176 }177 }, promise);178 }179 function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {180 if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {181 lib$es6$promise$$internal$$fulfill(promise, thenable._result);182 } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {183 lib$es6$promise$$internal$$reject(promise, thenable._result);184 } else {185 lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {186 lib$es6$promise$$internal$$resolve(promise, value);187 }, function(reason) {188 lib$es6$promise$$internal$$reject(promise, reason);189 });190 }191 }192 function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {193 if (maybeThenable.constructor === promise.constructor) {194 lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);195 } else {196 var then = lib$es6$promise$$internal$$getThen(maybeThenable);197 if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {198 lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);199 } else if (then === undefined) {200 lib$es6$promise$$internal$$fulfill(promise, maybeThenable);201 } else if (lib$es6$promise$utils$$isFunction(then)) {202 lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);203 } else {204 lib$es6$promise$$internal$$fulfill(promise, maybeThenable);205 }206 }207 }208 function lib$es6$promise$$internal$$resolve(promise, value) {209 if (promise === value) {210 lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());211 } else if (lib$es6$promise$utils$$objectOrFunction(value)) {212 lib$es6$promise$$internal$$handleMaybeThenable(promise, value);213 } else {214 lib$es6$promise$$internal$$fulfill(promise, value);215 }216 }217 function lib$es6$promise$$internal$$publishRejection(promise) {218 if (promise._onerror) {219 promise._onerror(promise._result);220 }221 lib$es6$promise$$internal$$publish(promise);222 }223 function lib$es6$promise$$internal$$fulfill(promise, value) {224 if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }225 promise._result = value;226 promise._state = lib$es6$promise$$internal$$FULFILLED;227 if (promise._subscribers.length !== 0) {228 lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);229 }230 }231 function lib$es6$promise$$internal$$reject(promise, reason) {232 if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }233 promise._state = lib$es6$promise$$internal$$REJECTED;234 promise._result = reason;235 lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);236 }237 function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {238 var subscribers = parent._subscribers;239 var length = subscribers.length;240 parent._onerror = null;241 subscribers[length] = child;242 subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;243 subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;244 if (length === 0 && parent._state) {245 lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);246 }247 }248 function lib$es6$promise$$internal$$publish(promise) {249 var subscribers = promise._subscribers;250 var settled = promise._state;251 if (subscribers.length === 0) { return; }252 var child, callback, detail = promise._result;253 for (var i = 0; i < subscribers.length; i += 3) {254 child = subscribers[i];255 callback = subscribers[i + settled];256 if (child) {257 lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);258 } else {259 callback(detail);260 }261 }262 promise._subscribers.length = 0;263 }264 function lib$es6$promise$$internal$$ErrorObject() {265 this.error = null;266 }267 var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();268 function lib$es6$promise$$internal$$tryCatch(callback, detail) {269 try {270 return callback(detail);271 } catch(e) {272 lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;273 return lib$es6$promise$$internal$$TRY_CATCH_ERROR;274 }275 }276 function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {277 var hasCallback = lib$es6$promise$utils$$isFunction(callback),278 value, error, succeeded, failed;279 if (hasCallback) {280 value = lib$es6$promise$$internal$$tryCatch(callback, detail);281 if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {282 failed = true;283 error = value.error;284 value = null;285 } else {286 succeeded = true;287 }288 if (promise === value) {289 lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());290 return;291 }292 } else {293 value = detail;294 succeeded = true;295 }296 if (promise._state !== lib$es6$promise$$internal$$PENDING) {297 // noop298 } else if (hasCallback && succeeded) {299 lib$es6$promise$$internal$$resolve(promise, value);300 } else if (failed) {301 lib$es6$promise$$internal$$reject(promise, error);302 } else if (settled === lib$es6$promise$$internal$$FULFILLED) {303 lib$es6$promise$$internal$$fulfill(promise, value);304 } else if (settled === lib$es6$promise$$internal$$REJECTED) {305 lib$es6$promise$$internal$$reject(promise, value);306 }307 }308 function lib$es6$promise$$internal$$initializePromise(promise, resolver) {309 try {310 resolver(function resolvePromise(value){311 lib$es6$promise$$internal$$resolve(promise, value);312 }, function rejectPromise(reason) {313 lib$es6$promise$$internal$$reject(promise, reason);314 });315 } catch(e) {316 lib$es6$promise$$internal$$reject(promise, e);317 }318 }319 function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {320 var enumerator = this;321 enumerator._instanceConstructor = Constructor;322 enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);323 if (enumerator._validateInput(input)) {324 enumerator._input = input;325 enumerator.length = input.length;326 enumerator._remaining = input.length;327 enumerator._init();328 if (enumerator.length === 0) {329 lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);330 } else {331 enumerator.length = enumerator.length || 0;332 enumerator._enumerate();333 if (enumerator._remaining === 0) {334 lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);335 }336 }337 } else {338 lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());339 }340 }341 lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {342 return lib$es6$promise$utils$$isArray(input);343 };344 lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {345 return new Error('Array Methods must be provided an Array');346 };347 lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {348 this._result = new Array(this.length);349 };350 var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;351 lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {352 var enumerator = this;353 var length = enumerator.length;354 var promise = enumerator.promise;355 var input = enumerator._input;356 for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {357 enumerator._eachEntry(input[i], i);358 }359 };360 lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {361 var enumerator = this;362 var c = enumerator._instanceConstructor;363 if (lib$es6$promise$utils$$isMaybeThenable(entry)) {364 if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {365 entry._onerror = null;366 enumerator._settledAt(entry._state, i, entry._result);367 } else {368 enumerator._willSettleAt(c.resolve(entry), i);369 }370 } else {371 enumerator._remaining--;372 enumerator._result[i] = entry;373 }374 };375 lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {376 var enumerator = this;377 var promise = enumerator.promise;378 if (promise._state === lib$es6$promise$$internal$$PENDING) {379 enumerator._remaining--;380 if (state === lib$es6$promise$$internal$$REJECTED) {381 lib$es6$promise$$internal$$reject(promise, value);382 } else {383 enumerator._result[i] = value;384 }385 }386 if (enumerator._remaining === 0) {387 lib$es6$promise$$internal$$fulfill(promise, enumerator._result);388 }389 };390 lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {391 var enumerator = this;392 lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {393 enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);394 }, function(reason) {395 enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);396 });397 };398 function lib$es6$promise$promise$all$$all(entries) {399 return new lib$es6$promise$enumerator$$default(this, entries).promise;400 }401 var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;402 function lib$es6$promise$promise$race$$race(entries) {403 /*jshint validthis:true */404 var Constructor = this;405 var promise = new Constructor(lib$es6$promise$$internal$$noop);406 if (!lib$es6$promise$utils$$isArray(entries)) {407 lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));408 return promise;409 }410 var length = entries.length;411 function onFulfillment(value) {412 lib$es6$promise$$internal$$resolve(promise, value);413 }414 function onRejection(reason) {415 lib$es6$promise$$internal$$reject(promise, reason);416 }417 for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {418 lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);419 }420 return promise;421 }422 var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;423 function lib$es6$promise$promise$resolve$$resolve(object) {424 /*jshint validthis:true */425 var Constructor = this;426 if (object && typeof object === 'object' && object.constructor === Constructor) {427 return object;428 }429 var promise = new Constructor(lib$es6$promise$$internal$$noop);430 lib$es6$promise$$internal$$resolve(promise, object);431 return promise;432 }433 var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;434 function lib$es6$promise$promise$reject$$reject(reason) {435 /*jshint validthis:true */436 var Constructor = this;437 var promise = new Constructor(lib$es6$promise$$internal$$noop);438 lib$es6$promise$$internal$$reject(promise, reason);439 return promise;440 }441 var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;442 var lib$es6$promise$promise$$counter = 0;443 function lib$es6$promise$promise$$needsResolver() {444 throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');445 }446 function lib$es6$promise$promise$$needsNew() {447 throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");448 }449 var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;450 /**451 Promise objects represent the eventual result of an asynchronous operation. The452 primary way of interacting with a promise is through its `then` method, which453 registers callbacks to receive either a promise's eventual value or the reason454 why the promise cannot be fulfilled.455 Terminology456 -----------457 - `promise` is an object or function with a `then` method whose behavior conforms to this specification.458 - `thenable` is an object or function that defines a `then` method.459 - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).460 - `exception` is a value that is thrown using the throw statement.461 - `reason` is a value that indicates why a promise was rejected.462 - `settled` the final resting state of a promise, fulfilled or rejected.463 A promise can be in one of three states: pending, fulfilled, or rejected.464 Promises that are fulfilled have a fulfillment value and are in the fulfilled465 state. Promises that are rejected have a rejection reason and are in the466 rejected state. A fulfillment value is never a thenable.467 Promises can also be said to *resolve* a value. If this value is also a468 promise, then the original promise's settled state will match the value's469 settled state. So a promise that *resolves* a promise that rejects will470 itself reject, and a promise that *resolves* a promise that fulfills will471 itself fulfill.472 Basic Usage:473 ------------474 ```js475 var promise = new Promise(function(resolve, reject) {476 // on success477 resolve(value);478 // on failure479 reject(reason);480 });481 promise.then(function(value) {482 // on fulfillment483 }, function(reason) {484 // on rejection485 });486 ```487 Advanced Usage:488 ---------------489 Promises shine when abstracting away asynchronous interactions such as490 `XMLHttpRequest`s.491 ```js492 function getJSON(url) {493 return new Promise(function(resolve, reject){494 var xhr = new XMLHttpRequest();495 xhr.open('GET', url);496 xhr.onreadystatechange = handler;497 xhr.responseType = 'json';498 xhr.setRequestHeader('Accept', 'application/json');499 xhr.send();500 function handler() {501 if (this.readyState === this.DONE) {502 if (this.status === 200) {503 resolve(this.response);504 } else {505 reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));506 }507 }508 };509 });510 }511 getJSON('/posts.json').then(function(json) {512 // on fulfillment513 }, function(reason) {514 // on rejection515 });516 ```517 Unlike callbacks, promises are great composable primitives.518 ```js519 Promise.all([520 getJSON('/posts'),521 getJSON('/comments')522 ]).then(function(values){523 values[0] // => postsJSON524 values[1] // => commentsJSON525 return values;526 });527 ```528 @class Promise529 @param {function} resolver530 Useful for tooling.531 @constructor532 */533 function lib$es6$promise$promise$$Promise(resolver) {534 this._id = lib$es6$promise$promise$$counter++;535 this._state = undefined;536 this._result = undefined;537 this._subscribers = [];538 if (lib$es6$promise$$internal$$noop !== resolver) {539 if (!lib$es6$promise$utils$$isFunction(resolver)) {540 lib$es6$promise$promise$$needsResolver();541 }542 if (!(this instanceof lib$es6$promise$promise$$Promise)) {543 lib$es6$promise$promise$$needsNew();544 }545 lib$es6$promise$$internal$$initializePromise(this, resolver);546 }547 }548 lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;549 lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;550 lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;551 lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;552 lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;553 lib$es6$promise$promise$$Promise._setAsap = lib$es6$promise$asap$$setAsap;554 lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$asap;555 lib$es6$promise$promise$$Promise.prototype = {556 constructor: lib$es6$promise$promise$$Promise,557 /**558 The primary way of interacting with a promise is through its `then` method,559 which registers callbacks to receive either a promise's eventual value or the560 reason why the promise cannot be fulfilled.561 ```js562 findUser().then(function(user){563 // user is available564 }, function(reason){565 // user is unavailable, and you are given the reason why566 });567 ```568 Chaining569 --------570 The return value of `then` is itself a promise. This second, 'downstream'571 promise is resolved with the return value of the first promise's fulfillment572 or rejection handler, or rejected if the handler throws an exception.573 ```js574 findUser().then(function (user) {575 return user.name;576 }, function (reason) {577 return 'default name';578 }).then(function (userName) {579 // If `findUser` fulfilled, `userName` will be the user's name, otherwise it580 // will be `'default name'`581 });582 findUser().then(function (user) {583 throw new Error('Found user, but still unhappy');584 }, function (reason) {585 throw new Error('`findUser` rejected and we're unhappy');586 }).then(function (value) {587 // never reached588 }, function (reason) {589 // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.590 // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.591 });592 ```593 If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.594 ```js595 findUser().then(function (user) {596 throw new PedagogicalException('Upstream error');597 }).then(function (value) {598 // never reached599 }).then(function (value) {600 // never reached601 }, function (reason) {602 // The `PedgagocialException` is propagated all the way down to here603 });604 ```605 Assimilation606 ------------607 Sometimes the value you want to propagate to a downstream promise can only be608 retrieved asynchronously. This can be achieved by returning a promise in the609 fulfillment or rejection handler. The downstream promise will then be pending610 until the returned promise is settled. This is called *assimilation*.611 ```js612 findUser().then(function (user) {613 return findCommentsByAuthor(user);614 }).then(function (comments) {615 // The user's comments are now available616 });617 ```618 If the assimliated promise rejects, then the downstream promise will also reject.619 ```js620 findUser().then(function (user) {621 return findCommentsByAuthor(user);622 }).then(function (comments) {623 // If `findCommentsByAuthor` fulfills, we'll have the value here624 }, function (reason) {625 // If `findCommentsByAuthor` rejects, we'll have the reason here626 });627 ```628 Simple Example629 --------------630 Synchronous Example631 ```javascript632 var result;633 try {634 result = findResult();635 // success636 } catch(reason) {637 // failure638 }639 ```640 Errback Example641 ```js642 findResult(function(result, err){643 if (err) {644 // failure645 } else {646 // success647 }648 });649 ```650 Promise Example;651 ```javascript652 findResult().then(function(result){653 // success654 }, function(reason){655 // failure656 });657 ```658 Advanced Example659 --------------660 Synchronous Example661 ```javascript662 var author, books;663 try {664 author = findAuthor();665 books = findBooksByAuthor(author);666 // success667 } catch(reason) {668 // failure669 }670 ```671 Errback Example672 ```js673 function foundBooks(books) {674 }675 function failure(reason) {676 }677 findAuthor(function(author, err){678 if (err) {679 failure(err);680 // failure681 } else {682 try {683 findBoooksByAuthor(author, function(books, err) {684 if (err) {685 failure(err);686 } else {687 try {688 foundBooks(books);689 } catch(reason) {690 failure(reason);691 }692 }693 });694 } catch(error) {695 failure(err);696 }697 // success698 }699 });700 ```701 Promise Example;702 ```javascript703 findAuthor().704 then(findBooksByAuthor).705 then(function(books){706 // found books707 }).catch(function(reason){708 // something went wrong709 });710 ```711 @method then712 @param {Function} onFulfilled713 @param {Function} onRejected714 Useful for tooling.715 @return {Promise}716 */717 then: function(onFulfillment, onRejection) {718 var parent = this;719 var state = parent._state;720 if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {721 return this;722 }723 var child = new this.constructor(lib$es6$promise$$internal$$noop);724 var result = parent._result;725 if (state) {726 var callback = arguments[state - 1];727 lib$es6$promise$asap$$asap(function(){728 lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);729 });730 } else {731 lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);732 }733 return child;734 },735 /**736 `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same737 as the catch block of a try/catch statement.738 ```js739 function findAuthor(){740 throw new Error('couldn't find that author');741 }...

Full Screen

Full Screen

es6-promise-modified.js

Source:es6-promise-modified.js Github

copy

Full Screen

...37 var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;38 var lib$es6$promise$asap$$len = 0;39 var lib$es6$promise$asap$$vertxNext;40 var lib$es6$promise$asap$$customSchedulerFn;41 var lib$es6$promise$asap$$asap = function asap(callback, arg) {42 lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;43 lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;44 lib$es6$promise$asap$$len += 2;45 if (lib$es6$promise$asap$$len === 2) {46 // If len is 2, that means that we need to schedule an async flush.47 // If additional callbacks are queued before the queue is flushed, they48 // will be processed by this flush that we are scheduling.49 if (lib$es6$promise$asap$$customSchedulerFn) {50 lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);51 } else {52 lib$es6$promise$asap$$scheduleFlush();53 }54 }55 }56 function lib$es6$promise$asap$$setScheduler(scheduleFn) {57 lib$es6$promise$asap$$customSchedulerFn = scheduleFn;58 }59 function lib$es6$promise$asap$$setAsap(asapFn) {60 lib$es6$promise$asap$$asap = asapFn;61 }62 var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;63 var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};64 var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;65 var lib$es6$promise$asap$$isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';66 // test for web worker but not in IE1067 var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&68 typeof importScripts !== 'undefined' &&69 typeof MessageChannel !== 'undefined';70 // node71 function lib$es6$promise$asap$$useNextTick() {72 // node version 0.10.x displays a deprecation warning when nextTick is used recursively73 // see https://github.com/cujojs/when/issues/410 for details74 return function() {75 process.nextTick(lib$es6$promise$asap$$flush);76 };77 }78 // vertx79 function lib$es6$promise$asap$$useVertxTimer() {80 return function() {81 lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);82 };83 }84 function lib$es6$promise$asap$$useMutationObserver() {85 var iterations = 0;86 var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);87 var node = document.createTextNode('');88 observer.observe(node, { characterData: true });89 return function() {90 node.data = (iterations = ++iterations % 2);91 };92 }93 // web worker94 function lib$es6$promise$asap$$useMessageChannel() {95 var channel = new MessageChannel();96 channel.port1.onmessage = lib$es6$promise$asap$$flush;97 return function () {98 channel.port2.postMessage(0);99 };100 }101 function lib$es6$promise$asap$$useSetTimeout() {102 return function() {103 setTimeout(lib$es6$promise$asap$$flush, 1);104 };105 }106 var lib$es6$promise$asap$$queue = new Array(1000);107 function lib$es6$promise$asap$$flush() {108 for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {109 var callback = lib$es6$promise$asap$$queue[i];110 var arg = lib$es6$promise$asap$$queue[i+1];111 callback(arg);112 lib$es6$promise$asap$$queue[i] = undefined;113 lib$es6$promise$asap$$queue[i+1] = undefined;114 }115 lib$es6$promise$asap$$len = 0;116 }117 function lib$es6$promise$asap$$attemptVertx() {118 try {119 var r = require;120 var vertx = r('vertx');121 lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;122 return lib$es6$promise$asap$$useVertxTimer();123 } catch(e) {124 return lib$es6$promise$asap$$useSetTimeout();125 }126 }127 var lib$es6$promise$asap$$scheduleFlush;128 // Decide what async method to use to triggering processing of queued callbacks:129 if (lib$es6$promise$asap$$isNode) {130 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();131 } else if (lib$es6$promise$asap$$BrowserMutationObserver) {132 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();133 } else if (lib$es6$promise$asap$$isWorker) {134 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();135 } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {136 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertx();137 } else {138 lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();139 }140 function lib$es6$promise$then$$then(onFulfillment, onRejection) {141 var parent = this;142 var child = new this.constructor(lib$es6$promise$$internal$$noop);143 if (child[lib$es6$promise$$internal$$PROMISE_ID] === undefined) {144 lib$es6$promise$$internal$$makePromise(child);145 }146 var state = parent._state;147 if (state) {148 var callback = arguments[state - 1];149 lib$es6$promise$asap$$asap(function(){150 lib$es6$promise$$internal$$invokeCallback(state, child, callback, parent._result);151 });152 } else {153 lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);154 }155 return child;156 }157 var lib$es6$promise$then$$default = lib$es6$promise$then$$then;158 function lib$es6$promise$promise$resolve$$resolve(object) {159 /*jshint validthis:true */160 var Constructor = this;161 if (object && typeof object === 'object' && object.constructor === Constructor) {162 return object;163 }164 var promise = new Constructor(lib$es6$promise$$internal$$noop);165 lib$es6$promise$$internal$$resolve(promise, object);166 return promise;167 }168 var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;169 var lib$es6$promise$$internal$$PROMISE_ID = Math.random().toString(36).substring(16);170 function lib$es6$promise$$internal$$noop() {}171 var lib$es6$promise$$internal$$PENDING = void 0;172 var lib$es6$promise$$internal$$FULFILLED = 1;173 var lib$es6$promise$$internal$$REJECTED = 2;174 var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();175 function lib$es6$promise$$internal$$selfFulfillment() {176 return new TypeError("You cannot resolve a promise with itself");177 }178 function lib$es6$promise$$internal$$cannotReturnOwn() {179 return new TypeError('A promises callback cannot return that same promise.');180 }181 function lib$es6$promise$$internal$$getThen(promise) {182 try {183 return promise.then;184 } catch(error) {185 lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;186 return lib$es6$promise$$internal$$GET_THEN_ERROR;187 }188 }189 function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {190 try {191 then.call(value, fulfillmentHandler, rejectionHandler);192 } catch(e) {193 return e;194 }195 }196 function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {197 lib$es6$promise$asap$$asap(function(promise) {198 var sealed = false;199 var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {200 if (sealed) { return; }201 sealed = true;202 if (thenable !== value) {203 lib$es6$promise$$internal$$resolve(promise, value);204 } else {205 lib$es6$promise$$internal$$fulfill(promise, value);206 }207 }, function(reason) {208 if (sealed) { return; }209 sealed = true;210 lib$es6$promise$$internal$$reject(promise, reason);211 }, 'Settle: ' + (promise._label || ' unknown promise'));212 if (!sealed && error) {213 sealed = true;214 lib$es6$promise$$internal$$reject(promise, error);215 }216 }, promise);217 }218 function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {219 if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {220 lib$es6$promise$$internal$$fulfill(promise, thenable._result);221 } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {222 lib$es6$promise$$internal$$reject(promise, thenable._result);223 } else {224 lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {225 lib$es6$promise$$internal$$resolve(promise, value);226 }, function(reason) {227 lib$es6$promise$$internal$$reject(promise, reason);228 });229 }230 }231 function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable, then) {232 if (maybeThenable.constructor === promise.constructor &&233 then === lib$es6$promise$then$$default &&234 constructor.resolve === lib$es6$promise$promise$resolve$$default) {235 lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);236 } else {237 if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {238 lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);239 } else if (then === undefined) {240 lib$es6$promise$$internal$$fulfill(promise, maybeThenable);241 } else if (lib$es6$promise$utils$$isFunction(then)) {242 lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);243 } else {244 lib$es6$promise$$internal$$fulfill(promise, maybeThenable);245 }246 }247 }248 function lib$es6$promise$$internal$$resolve(promise, value) {249 if (promise === value) {250 lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFulfillment());251 } else if (lib$es6$promise$utils$$objectOrFunction(value)) {252 lib$es6$promise$$internal$$handleMaybeThenable(promise, value, lib$es6$promise$$internal$$getThen(value));253 } else {254 lib$es6$promise$$internal$$fulfill(promise, value);255 }256 }257 function lib$es6$promise$$internal$$publishRejection(promise) {258 if (promise._onerror) {259 promise._onerror(promise._result);260 }261 lib$es6$promise$$internal$$publish(promise);262 }263 function lib$es6$promise$$internal$$fulfill(promise, value) {264 if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }265 promise._result = value;266 promise._state = lib$es6$promise$$internal$$FULFILLED;267 if (promise._subscribers.length !== 0) {268 lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, promise);269 }270 }271 function lib$es6$promise$$internal$$reject(promise, reason) {272 if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }273 promise._state = lib$es6$promise$$internal$$REJECTED;274 promise._result = reason;275 lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publishRejection, promise);276 }277 function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {278 var subscribers = parent._subscribers;279 var length = subscribers.length;280 parent._onerror = null;281 subscribers[length] = child;282 subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;283 subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;284 if (length === 0 && parent._state) {285 lib$es6$promise$asap$$asap(lib$es6$promise$$internal$$publish, parent);286 }287 }288 function lib$es6$promise$$internal$$publish(promise) {289 var subscribers = promise._subscribers;290 var settled = promise._state;291 if (subscribers.length === 0) { return; }292 var child, callback, detail = promise._result;293 for (var i = 0; i < subscribers.length; i += 3) {294 child = subscribers[i];295 callback = subscribers[i + settled];296 if (child) {297 lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);298 } else {299 callback(detail);...

Full Screen

Full Screen

fetchManager.spec.js

Source:fetchManager.spec.js Github

copy

Full Screen

1import {strict as assert} from 'assert';2import {readdirSync} from 'fs';3import path from 'path';4import {isKeyValue, jsonBufferToAny} from '@svizzle/utils';5import * as _ from 'lamb';6import {filter} from 'rxjs/operators';7import {fetch} from 'undici';8import {makeWebStreamsFetcher} from '../webstreams';9import {createFetchManagerStreams} from './fetchManager';10import {11 getFileNamesMap,12 getKeysNamed,13 loadJsons,14 makeUriMap,15 startServer,16} from './specUtils';17// TODO verify we catch all potential exceptions18// test environment19const baseServerPath = path.resolve('../atlas/data/dist/NUTS/topojson');20const TIMEOUT = 20000;21const PORT = 4000;22const fileNamesMap = getFileNamesMap(readdirSync(baseServerPath));23const uriMap = makeUriMap(`http://localhost:${PORT}/`)(fileNamesMap);24const allKeys = _.keys(uriMap);25const keysFrom2021 = getKeysNamed('2021')(allKeys);26const keysFrom2016 = getKeysNamed('2016')(allKeys);27const keysFrom2013 = getKeysNamed('2013')(allKeys);28describe('fetchManager', function () {29 // eslint-disable-next-line no-invalid-this30 this.timeout(TIMEOUT);31 const server = startServer({32 port: PORT,33 basePath: baseServerPath34 });35 after(function () {36 server.close()37 });38 describe('`_uriMap` property', function () {39 it('the content of the downloaded files should be the same as served resources', function () {40 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);41 const {42 _asapKeys,43 _outData,44 _outEvents,45 _uriMap46 } = createFetchManagerStreams(downloadFn);47 _uriMap.next(uriMap);48 _asapKeys.next(allKeys);49 return new Promise((resolve, reject) => {50 _outEvents.pipe(51 filter(event => event.type === 'done')52 ).subscribe(async () => {53 const data = _outData.getValue();54 try {55 const expectedJsons = await loadJsons(baseServerPath, allKeys, fileNamesMap);56 assert.deepStrictEqual(data, expectedJsons);57 } catch (e) {58 reject(e);59 }60 resolve();61 })62 })63 });64 describe('change while in progress: should clear the cache and restart downloading', function () {65 it('!= keys, != URIs', function () {66 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);67 const {68 _asapKeys,69 _outData,70 _outEvents,71 _shouldPrefetch,72 _uriMap73 } = createFetchManagerStreams(downloadFn);74 _shouldPrefetch.next(true);75 _uriMap.next(_.pickIn(uriMap, keysFrom2021));76 _asapKeys.next(keysFrom2021);77 return new Promise((resolve, reject) => {78 let switchedMap;79 let totalCompleted = 0;80 _outEvents.pipe(81 filter(isKeyValue(['type', 'file:complete']))82 ).subscribe(() => {83 totalCompleted++84 // switch after downloading more than half85 if (!switchedMap && totalCompleted > keysFrom2021.length / 2) {86 _uriMap.next(_.pickIn(uriMap, keysFrom2016));87 _asapKeys.next(keysFrom2016);88 switchedMap = true;89 }90 });91 _outEvents.pipe(92 filter(isKeyValue(['type','done']))93 ).subscribe(() => {94 const actualKeys = _.keys(_outData.getValue());95 try {96 assert.deepStrictEqual(97 actualKeys.sort(),98 keysFrom2016.sort()99 );100 } catch (e) {101 reject(e);102 }103 resolve();104 })105 })106 })107 it('= keys, != URIs', function () {108 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);109 const {110 _asapKeys,111 _outData,112 _outEvents,113 _shouldPrefetch,114 _uriMap115 } = createFetchManagerStreams(downloadFn);116 _shouldPrefetch.next(true);117 _uriMap.next(_.pickIn(uriMap, keysFrom2021));118 _asapKeys.next(keysFrom2021);119 return new Promise((resolve, reject) => {120 let switchedMap;121 let totalCompleted = 0;122 _outEvents.pipe(123 filter(isKeyValue(['type', 'file:complete']))124 ).subscribe(() => {125 totalCompleted++;126 // switch after downloading more than half127 if (!switchedMap && totalCompleted > keysFrom2021.length / 2) {128 const newMap = _.pipe([129 _.pick(keysFrom2016),130 _.pairs,131 _.mapWith(([key, uri]) => [132 key.replace('2016', '2021'),133 uri134 ]),135 _.fromPairs136 ])(uriMap);137 _uriMap.next(newMap);138 switchedMap = true;139 }140 });141 _outEvents.pipe(142 filter(isKeyValue(['type','done']))143 ).subscribe(() => {144 const actualKeys = _.keys(_outData.getValue())145 try {146 assert.deepStrictEqual(147 actualKeys.sort(),148 keysFrom2021.sort()149 );150 } catch (e) {151 reject(e);152 }153 resolve();154 });155 });156 });157 it('!= keys, = URIs', function () {158 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);159 const {160 _asapKeys,161 _outData,162 _outEvents,163 _shouldPrefetch,164 _uriMap165 } = createFetchManagerStreams(downloadFn);166 _shouldPrefetch.next(true);167 _uriMap.next(_.pickIn(uriMap, keysFrom2021));168 _asapKeys.next(keysFrom2021);169 return new Promise((resolve, reject) => {170 let switchedMap;171 let totalCompleted = 0;172 _outEvents.pipe(173 filter(isKeyValue(['type', 'file:complete']))174 ).subscribe(() => {175 totalCompleted++176 // switch after downloading more than half177 if (!switchedMap && totalCompleted > keysFrom2021.length / 2) {178 const newMap = _.pipe([179 _.pick(keysFrom2021),180 _.pairs,181 _.mapWith(([key, uri]) => [182 key.replace('2021', '2016'),183 uri184 ]),185 _.fromPairs186 ])(uriMap);187 _uriMap.next(newMap);188 _asapKeys.next(keysFrom2016);189 switchedMap = true;190 }191 });192 _outEvents.pipe(193 filter(isKeyValue(['type','done']))194 ).subscribe(() => {195 const actualKeys = _.keys(_outData.getValue());196 try {197 assert.deepStrictEqual(198 actualKeys.sort(),199 keysFrom2016.sort()200 );201 } catch (e) {202 reject(e);203 }204 resolve();205 })206 });207 });208 });209 });210 describe('`_shouldPrefetch` property', function () {211 it('false: it should only load files in `asapKeys`', function () {212 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);213 const {214 _asapKeys,215 _nextKeys,216 _outData,217 _outEvents,218 _shouldPrefetch,219 _uriMap220 } = createFetchManagerStreams(downloadFn);221 _shouldPrefetch.next(false); // keep? it's the default value222 _uriMap.next(uriMap);223 _asapKeys.next(keysFrom2021);224 _nextKeys.next(keysFrom2016);225 return new Promise((resolve, reject) => {226 _outEvents.pipe(227 filter(event => event.type === 'done')228 ).subscribe(() => {229 const data = _outData.getValue();230 const keys = _.keys(data);231 try {232 assert.deepStrictEqual(233 keys.sort(),234 keysFrom2021.sort()235 );236 } catch (e) {237 reject(e);238 }239 resolve();240 });241 });242 });243 it('true: it should load all files', function () {244 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);245 const {246 _asapKeys,247 _nextKeys,248 _outData,249 _outEvents,250 _shouldPrefetch,251 _uriMap252 } = createFetchManagerStreams(downloadFn);253 _shouldPrefetch.next(true);254 _uriMap.next(uriMap);255 _asapKeys.next(keysFrom2021);256 _nextKeys.next(keysFrom2016);257 return new Promise((resolve, reject) => {258 _outEvents.pipe(259 filter(event => event.type === 'done')260 ).subscribe(() => {261 const data = _outData.getValue();262 const keys = _.keys(data);263 try {264 assert.deepStrictEqual(265 keys.sort(),266 _.keys(uriMap).sort()267 );268 } catch (e) {269 reject(e);270 }271 resolve();272 });273 });274 });275 describe('change while in progress', function () {276 it('true -> false while asap in progress: should complete and stop', function () {277 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);278 const {279 _asapKeys,280 _nextKeys,281 _outData,282 _outEvents,283 _shouldPrefetch,284 _uriMap285 } = createFetchManagerStreams(downloadFn);286 _shouldPrefetch.next(true);287 _uriMap.next(uriMap);288 _asapKeys.next(keysFrom2021);289 _nextKeys.next(keysFrom2016);290 return new Promise((resolve, reject) => {291 let turnedItOff292 _outEvents.pipe(293 filter(isKeyValue(['type', 'file:complete']))294 ).subscribe(() => {295 if (!turnedItOff) {296 _shouldPrefetch.next(false);297 turnedItOff = true;298 }299 });300 _outEvents.pipe(301 filter(isKeyValue(['type', 'done']))302 ).subscribe(() => {303 const data = _outData.getValue();304 const keys = _.keys(data);305 try {306 assert.deepStrictEqual(307 keys.sort(),308 keysFrom2021.sort()309 );310 } catch (e) {311 reject(e);312 }313 resolve();314 });315 });316 });317 it('true -> false after asap: should stop', function () {318 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny)319 const {320 _asapKeys,321 _nextKeys,322 _outData,323 _outEvents,324 _shouldPrefetch,325 _uriMap326 } = createFetchManagerStreams(downloadFn);327 _shouldPrefetch.next(true);328 _uriMap.next(uriMap);329 _asapKeys.next(keysFrom2021);330 _nextKeys.next(keysFrom2016);331 return new Promise((resolve, reject) => {332 let hasNextStarted;333 let turnedItOff;334 _outEvents.pipe(335 filter(isKeyValue(['type', 'group:complete']))336 ).subscribe(() => {337 if (!hasNextStarted) {338 hasNextStarted = true;339 }340 });341 _outEvents.pipe(342 filter(isKeyValue(['type', 'file:complete']))343 ).subscribe(() => {344 if (hasNextStarted && !turnedItOff) {345 _shouldPrefetch.next(false);346 turnedItOff = true;347 }348 });349 _outEvents.pipe(350 filter(isKeyValue(['type', 'done']))351 ).subscribe(() => {352 const data = _outData.getValue();353 const keys = _.keys(data);354 try {355 assert(356 _.is(357 _.intersection(keys, keysFrom2021).length,358 keysFrom2021.length359 )360 );361 } catch (e) {362 reject(e);363 }364 resolve();365 });366 });367 });368 it('false -> true while asap in progress: should continue', function () {369 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);370 const {371 _asapKeys,372 _nextKeys,373 _outData,374 _outEvents,375 _shouldPrefetch,376 _uriMap377 } = createFetchManagerStreams(downloadFn);378 _shouldPrefetch.next(false);379 _uriMap.next(uriMap);380 _asapKeys.next(keysFrom2021);381 _nextKeys.next(keysFrom2016);382 return new Promise((resolve, reject) => {383 let turnedItOn;384 _outEvents.pipe(385 // tap(console.log),386 filter(isKeyValue(['type', 'file:complete']))387 ).subscribe(() => {388 if (!turnedItOn) {389 _shouldPrefetch.next(true);390 turnedItOn = true;391 }392 });393 _outEvents.pipe(394 filter(isKeyValue(['type', 'done']))395 ).subscribe(() => {396 const data = _outData.getValue();397 const keys = _.keys(data);398 try {399 assert.deepStrictEqual(400 keys.sort(),401 allKeys.sort()402 );403 } catch (e) {404 reject(e);405 }406 resolve();407 });408 });409 });410 it('false -> true after asap: should restart, skipping asap and download everything else', function () {411 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);412 const {413 _asapKeys,414 _nextKeys,415 _outData,416 _outEvents,417 _shouldPrefetch,418 _uriMap419 } = createFetchManagerStreams(downloadFn);420 _shouldPrefetch.next(false);421 _uriMap.next(uriMap);422 _asapKeys.next(keysFrom2021);423 _nextKeys.next(keysFrom2016);424 return new Promise((resolve, reject) => {425 let turnedItOn;426 _outEvents.pipe(427 // tap(console.log),428 filter(isKeyValue(['type', 'done']))429 ).subscribe(() => {430 if (!turnedItOn) {431 turnedItOn = true;432 _shouldPrefetch.next(true);433 } else {434 const data = _outData.getValue();435 const keys = _.keys(data);436 try {437 assert(438 _.is(439 _.intersection(keys, keysFrom2021).length,440 keysFrom2021.length441 )442 );443 } catch (e) {444 reject(e);445 }446 resolve();447 }448 });449 });450 });451 });452 });453 describe('priority properties (`_asapKeys` and `_nextKeys`)', function () {454 const asapKeys = keysFrom2021;455 const nextKeys = keysFrom2016;456 const restKeys = _.difference(457 allKeys,458 [...asapKeys, ...nextKeys]459 );460 describe('static', function () {461 it('should load all files in correct order (`_asapKeys` then `_nextKeys` then `_restKeys`)', function () {462 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);463 const {464 _asapKeys,465 _nextKeys,466 _outEvents,467 _shouldPrefetch,468 _uriMap469 } = createFetchManagerStreams(downloadFn);470 _shouldPrefetch.next(true);471 _uriMap.next(uriMap);472 _asapKeys.next(asapKeys);473 _nextKeys.next(nextKeys);474 return new Promise(resolve => {475 let groups = [];476 let activeGroup;477 let keysForGroup = {}478 _outEvents.pipe(479 // filter(event => event.type === 'groupStart'),480 filter(isKeyValue(['type','group:start']))481 // filter(_.hasKeyValue('type','groupStart')) // TODO TBD deprecation482 ).subscribe(({groupId}) => {483 groups.push(groupId);484 activeGroup = groupId;485 keysForGroup[activeGroup] = [];486 });487 _outEvents.pipe(488 filter(event => event.type === 'file:complete')489 ).subscribe(({key}) => {490 keysForGroup[activeGroup].push(key);491 });492 _outEvents.pipe(493 filter(event => event.type === 'done')494 ).subscribe(() => {495 assert.deepStrictEqual(496 groups,497 ['asap', 'next', 'rest'],498 'Groups loaded out of order'499 );500 assert.deepStrictEqual(501 keysForGroup.asap.sort(),502 asapKeys.sort(),503 'Asap not equal'504 );505 assert.deepStrictEqual(506 keysForGroup.next.sort(),507 nextKeys.sort(),508 'Next not equal'509 );510 assert.deepStrictEqual(511 keysForGroup.rest.sort(),512 restKeys.sort(),513 'Rest not equal'514 );515 resolve();516 });517 });518 });519 });520 describe('caching', function () {521 it(`should not redownload cached files`, function () {522 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);523 const {524 _asapKeys,525 _outEvents,526 _shouldPrefetch,527 _uriMap528 } = createFetchManagerStreams(downloadFn);529 _shouldPrefetch.next(true);530 _uriMap.next(uriMap);531 _asapKeys.next(asapKeys);532 return new Promise((resolve, reject) => {533 _outEvents.pipe(534 filter(event => event.type === 'group:complete'),535 filter(event => event.groupId === 'next')536 ).subscribe(({keys}) => {537 try {538 assert(keys.length === 0, 'No keys should be requested on \'next\' group');539 } catch (e) {540 reject(e);541 }542 });543 _outEvents.pipe(544 filter(event => event.type === 'done')545 ).subscribe(() => {546 resolve();547 });548 });549 });550 });551 describe('priority change', function () {552 it('while downloading `_asapKeys` those remaining in `_asapKeys` should continue downloading', function () {553 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);554 const {555 _asapKeys,556 _nextKeys,557 _outEvents,558 _shouldPrefetch,559 _uriMap560 } = createFetchManagerStreams(downloadFn);561 _shouldPrefetch.next(true);562 _uriMap.next(uriMap);563 _asapKeys.next(asapKeys);564 _nextKeys.next(nextKeys);565 return new Promise((resolve, reject) => {566 let newAsap;567 _outEvents.pipe(568 // tap(console.log),569 filter(event => event.type === 'file:complete')570 ).subscribe(({key}) => {571 if (!newAsap) {572 newAsap = _.difference(573 asapKeys,574 [key]575 );576 _asapKeys.next(newAsap);577 }578 });579 _outEvents.pipe(580 filter(event => event.type === 'file:cancel')581 ).subscribe(({key}) => {582 try {583 assert(!_.isIn(asapKeys, key));584 } catch (e) {585 reject(e);586 }587 });588 _outEvents.pipe(589 filter(event => event.type === 'done')590 ).subscribe(() => {591 resolve();592 });593 });594 });595 it('while downloading `_asapKeys` those not remaining in `_asapKeys` should be cancelled', function () {596 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);597 const {598 _asapKeys,599 _nextKeys,600 _outEvents,601 _shouldPrefetch,602 _uriMap603 } = createFetchManagerStreams(downloadFn);604 _shouldPrefetch.next(true);605 _uriMap.next(uriMap);606 _asapKeys.next(asapKeys);607 _nextKeys.next(nextKeys);608 return new Promise((resolve, reject) => {609 let newAsap;610 const filesCompleted = [];611 let actualCancelledKeys = [];612 _outEvents.pipe(613 filter(event => event.type === 'file:complete')614 ).subscribe(({key}) => {615 filesCompleted.push(key);616 if (!newAsap) {617 newAsap = nextKeys;618 // Swapping keys to trigger restart619 _asapKeys.next(newAsap);620 _nextKeys.next(asapKeys);621 }622 });623 _outEvents.pipe(624 filter(({type}) => type === 'group:complete'),625 filter(({groupId}) => groupId === 'asap')626 ).subscribe(({cancelledKeys}) => {627 actualCancelledKeys = cancelledKeys;628 });629 _outEvents.pipe(630 filter(event => event.type === 'done')631 ).subscribe(() => {632 const expectedCancelledFiles = _.difference(633 asapKeys,634 filesCompleted635 );636 try {637 assert.deepStrictEqual(638 actualCancelledKeys.sort(),639 expectedCancelledFiles.sort()640 );641 resolve();642 } catch (e) {643 reject(e);644 }645 });646 });647 });648 it('while downloading `_nextKeys` those moving to `_asapKeys` should continue downloading', function () {649 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);650 const {651 _asapKeys,652 _nextKeys,653 _outEvents,654 _shouldPrefetch,655 _uriMap656 } = createFetchManagerStreams(downloadFn);657 _shouldPrefetch.next(true);658 _uriMap.next(uriMap);659 _asapKeys.next(asapKeys);660 _nextKeys.next(nextKeys);661 return new Promise((resolve, reject) => {662 let nextStarted = false;663 let newAsap;664 _outEvents.pipe(665 filter(({type}) => type === 'group:start'),666 filter(({groupId}) => groupId === 'next')667 ).subscribe(() => {668 nextStarted = true;669 })670 _outEvents.pipe(671 filter(event => event.type === 'file:complete')672 ).subscribe(({key}) => {673 if (nextStarted && !newAsap) {674 newAsap = _.difference(675 nextKeys,676 [key]677 );678 _asapKeys.next(newAsap);679 _nextKeys.next(asapKeys);680 }681 });682 _outEvents.pipe(683 filter(event => event.type === 'file:cancel')684 ).subscribe(({key}) => {685 try {686 assert(!_.isIn(newAsap, key));687 } catch (e) {688 reject(e);689 }690 });691 _outEvents.pipe(692 filter(event => event.type === 'done')693 ).subscribe(() => {694 resolve();695 });696 });697 });698 it('while downloading `_nextKeys` those not moving to `_asapKeys` should be cancelled', function () {699 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);700 const {701 _asapKeys,702 _nextKeys,703 _outEvents,704 _shouldPrefetch,705 _uriMap706 } = createFetchManagerStreams(downloadFn);707 _shouldPrefetch.next(true);708 _uriMap.next(uriMap);709 _asapKeys.next(asapKeys);710 _nextKeys.next(nextKeys);711 return new Promise((resolve, reject) => {712 let nextStarted = false;713 let newAsap;714 const filesCompleted = [];715 let actualCancelledKeys = [];716 _outEvents.pipe(717 filter(({type}) => type === 'group:start'),718 filter(({groupId}) => groupId === 'next')719 ).subscribe(() => {720 nextStarted = true;721 });722 _outEvents.pipe(723 filter(event => event.type === 'file:complete')724 ).subscribe(({key}) => {725 filesCompleted.push(key);726 if (nextStarted && !newAsap) {727 newAsap = keysFrom2013;728 _asapKeys.next(newAsap);729 }730 });731 _outEvents.pipe(732 filter(({type}) => type === 'group:complete'),733 filter(({groupId}) => groupId === 'next')734 ).subscribe(({cancelledKeys}) => {735 actualCancelledKeys = cancelledKeys;736 });737 _outEvents.pipe(738 filter(event => event.type === 'done')739 ).subscribe(() => {740 const expectedCancelledFiles = _.difference(741 nextKeys,742 filesCompleted743 );744 try {745 assert.deepStrictEqual(746 actualCancelledKeys.sort(),747 expectedCancelledFiles.sort()748 );749 resolve();750 } catch (e) {751 reject(e);752 }753 });754 });755 });756 it('while downloading `_restKeys` those moving to `_asapKeys` should continue downloading', function () {757 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny)758 const {759 _asapKeys,760 _nextKeys,761 _outEvents,762 _shouldPrefetch,763 _uriMap764 } = createFetchManagerStreams(downloadFn);765 _shouldPrefetch.next(true);766 _uriMap.next(uriMap);767 _asapKeys.next(asapKeys);768 _nextKeys.next(nextKeys);769 return new Promise((resolve, reject) => {770 let nextStarted = false;771 let newAsap;772 _outEvents.pipe(773 // tap(console.log),774 filter(({type}) => type === 'group:start'),775 filter(({groupId}) => groupId === 'rest')776 ).subscribe(() => {777 nextStarted = true;778 })779 _outEvents.pipe(780 filter(event => event.type === 'file:complete')781 ).subscribe(({key}) => {782 if (nextStarted && !newAsap) {783 newAsap = _.difference(784 restKeys,785 [key]786 );787 _asapKeys.next(newAsap);788 }789 });790 _outEvents.pipe(791 filter(event => event.type === 'file:cancel')792 ).subscribe(({key}) => {793 try {794 assert(!_.isIn(newAsap, key));795 } catch (e) {796 reject(e);797 }798 })799 _outEvents.pipe(800 filter(event => event.type === 'done')801 ).subscribe(() => {802 resolve();803 });804 });805 });806 it('while downloading `_restKeys` those not moving to `_asapKeys` should be cancelled', function () {807 const downloadFn = makeWebStreamsFetcher(fetch, jsonBufferToAny);808 const {809 _asapKeys,810 _nextKeys,811 _outEvents,812 _shouldPrefetch,813 _uriMap814 } = createFetchManagerStreams(downloadFn);815 _shouldPrefetch.next(true);816 _uriMap.next(uriMap);817 _asapKeys.next(asapKeys);818 _nextKeys.next(nextKeys);819 return new Promise((resolve, reject) => {820 let restStarted = false;821 let newAsap;822 let actualCancelledKeys;823 const filesCompleted = [];824 _outEvents.pipe(825 filter(({type}) => type === 'group:start'),826 filter(({groupId}) => groupId === 'rest')827 ).subscribe(() => {828 restStarted = true;829 })830 _outEvents.pipe(831 filter(event => event.type === 'file:complete')832 ).subscribe(({key}) => {833 filesCompleted.push(key);834 if (restStarted && !newAsap) {835 newAsap = keysFrom2016;836 _asapKeys.next(newAsap);837 _nextKeys.next(keysFrom2013);838 }839 });840 _outEvents.pipe(841 filter(({type}) => type === 'group:complete'),842 filter(({groupId}) => groupId === 'rest')843 ).subscribe(({cancelledKeys}) => {844 actualCancelledKeys = cancelledKeys;845 });846 _outEvents.pipe(847 filter(event => event.type === 'done')848 ).subscribe(() => {849 const expectedCancelledFiles = _.difference(850 restKeys,851 filesCompleted852 );853 try {854 assert.deepStrictEqual(855 actualCancelledKeys.sort(),856 expectedCancelledFiles.sort()857 );858 resolve();859 } catch (e) {860 reject(e);861 }862 });863 });864 });865 });866 });...

Full Screen

Full Screen

admin-script.js

Source:admin-script.js Github

copy

Full Screen

1(function ($) {2 $(function () {3 $('.asap-tab').click(function(){4 var attr_id = $(this).attr('id');5 var id = attr_id.replace('asap-tab-','');6 $('.asap-tab').removeClass('asap-active-tab');7 $(this).addClass('asap-active-tab'); 8 $('.asap-section').hide();9 $('#asap-section-'+id).show();10 });11 12 13 14 $('#asap-fb-authorize-ref').click(function(){15 $('input[name="asap_fb_authorize"]').click(); 16 });1718 $('.asfap-apitype').change(function(){19 if (this.value === 'graph_api') {20 $('.apfap-graph-api-options').show();21 $('.apfap-android-api-options').hide();22 }23 else if (this.value === 'mobile_api') {24 $('.apfap-graph-api-options').hide();25 $('.apfap-android-api-options').show();26 }2728 });2930 var apitype = $(".asfap-apitype:checked").val();31 if (apitype === 'graph_api') {32 $('.apfap-graph-api-options').show();33 $('.apfap-android-api-options').hide();34 }35 else if (apitype === 'mobile_api') {36 $('.apfap-graph-api-options').hide();37 $('.apfap-android-api-options').show();38 }3940 /*41 * Get Access Token42 */43 $('.asap-network-inner-wrap').on('click','.asap-generate-token-btn',function (e) {44 e.preventDefault();45 var fb_email = $('.asap-fb-emailid').val();46 var fb_password = $('.asap-fb-pass').val();47 $.ajax({48 type: 'post',49 url: asfap_backend_js_obj.ajax_url,50 data: {51 fb_email: fb_email,52 fb_password: fb_password,53 action: 'asfap_access_token_ajax_action',54 _wpnonce: asfap_backend_js_obj.ajax_nonce55 },56 beforeSend: function() {57 $('.asap-ajax-loader1').css('visibility','visible');58 $('.asap-ajax-loader1').css('opacity',1);59 },60 success: function (res) {61 if( res.type == 'success' ){62 $('.asap-generated-atwrapper').slideDown('slow');63 $('.asap-generated-access-token-wrapper').html('<iframe src="'+res.message+'" frameborder="1" scrolling="yes" id="fbFrame"></iframe>'); 64 65 }66 else{67 $('.asap-generated-atwrapper').hide();68 $('.asap-generated-access-token-wrapper').html(res.message).css({color:'red'});69 }70 $('.asap-ajax-loader1').css('visibility','hidden');71 $('.asap-ajax-loader1').css('opacity',0);72 }73 });74 });7576 var dropdown = $('#asap-button-template-floating');77 $('.asap-network-inner-wrap').on('click','.asap-add-account-button',function (e) {78 e.preventDefault();79 var token_url = $('#asap-generated-access-url').val();80 $.ajax({81 type: 'post',82 url: asfap_backend_js_obj.ajax_url,83 data: {84 token_url: token_url,85 action: 'asfap_add_account_action',86 _wpnonce: asfap_backend_js_obj.ajax_nonce87 },88 beforeSend: function (xhr) {89 $('.asap-ajax-loader').css('visibility','visible');90 $('.asap-ajax-loader').css('opacity',1);91 },92 success: function (res) {93 //console.log(res.result);94 if(res.type == 'success'){95 $('#asap-error-msg').html(res.message).css({color:'green'}).delay(2000).fadeOut();96 dropdown.empty();97 $.each(res.result, function(key, value) {98 if(key == "fap_user_accounts"){99 $.each(this, function(k, v) {100 if(k == "auth_accounts"){101 $.each(this, function(akey, avalue) {102 var auth_key = akey;103 var auth_value = avalue;104 dropdown.append($('<option></option>').attr('value', auth_key).text(auth_value)); 105 });106 }107 });108 } 109 });110 // To encode an object (This produces a string)111 var json_str = JSON.stringify(res.result);112 $('textarea#asap-account-all-json').html('');113 $('textarea#asap-account-all-json').html(json_str);114 }115 else{116 $('#asap-error-msg').html(res.message).css({color:'red'});117 }118 $('.asap-ajax-loader').css( 'visibility' , 'hidden' );119 $('.asap-ajax-loader').css( 'opacity', 0 );120 }121 });122 });123124125 126 127 });//document.ready close ...

Full Screen

Full Screen

asap-src-test.js

Source:asap-src-test.js Github

copy

Full Screen

1let { join } = require('path')2let test = require('tape')3let mockFs = require('mock-fs')4let sut = join(process.cwd(), 'src', 'lib', 'asap-src')5let asapSrc = require(sut)6let cwd = process.cwd()7test('Set up env', t => {8 t.plan(1)9 t.ok(asapSrc, 'ASAP src util is present')10})11test('Get ASAP', t => {12 t.plan(4)13 // Since we're developing Inventory locally (a scenario that bumps into asapSrc's business logic)14 // Temporarily change the src dir via cwd to prevent collisions15 // Work the src dir order backwards to test16 process.chdir(__dirname)17 let asap18 mockFs({})19 t.throws(() => {20 asapSrc()21 }, 'Throw if unable to find ASAP module')22 let localPath = join(cwd, 'node_modules', '@architect', 'asap', 'src')23 mockFs({ [localPath]: 'ok' })24 asap = asapSrc()25 t.equal(asap, localPath, `Got ASAP module in local dev mode: ${asap}`)26 process.chdir(cwd)27 let globalPath = join(cwd, '..', 'asap', 'src')28 mockFs({ [globalPath]: 'ok' })29 asap = asapSrc()30 t.equal(asap, globalPath, `Got ASAP module in global mode: ${asap}`)31 mockFs.restore()32 process.chdir(cwd) // Restore again, looks to be a mockFs restore bug mutating cwd33 let src = localPath // It's ok, this is the known collision when working locally34 asap = asapSrc()35 t.equal(asap, src, `Got ASAP module as a normal dependency: ${asap}`)...

Full Screen

Full Screen

index.js

Source:index.js Github

copy

Full Screen

1// IMPORTING A MODULE2import asap from './asap_module';3function asapLog() {4 asap(()=>console.log('async'));5 console.log('sync');6}7window.asapLog = asapLog;8// NAMED IMPORT9// import { ASAP_CONST } from './asap_module';10// console.log('ASAP_CONST', ASAP_CONST);11// import asap, { ASAP_CONST } from './asap_module';12// CONVENIENCES13// Renaming named imports14// import { ASAP_CONST as some_const } from './asap_module';15// console.log('some_const', some_const);16// import { blaBlaBla } from './asap_module';17// console.log(blaBlaBla());18// Grouping named imports...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.screenshot({ path: 'google.png' });7 await browser.close();8})();9const { chromium } = require('playwright');10(async () => {11 const browser = await chromium.launch();12 const context = await browser.newContext();13 const page = await context.newPage();14 await page.screenshot({ path: 'google.png' });15 await browser.close();16})();17const { chromium } = require('playwright');18(async () => {19 const browser = await chromium.launch();20 const context = await browser.newContext();21 const page = await context.newPage();22 await page.screenshot({ path: 'google.png' });23 await browser.close();24})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch({ headless: false });4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.screenshot({ path: `example.png` });7 await browser.close();8})();9- **Yashwanth Kumar** - _Initial work_ - [yashwanthkumar](

Full Screen

Using AI Code Generation

copy

Full Screen

1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 await page.screenshot({ path: 'example.png' });7 await browser.close();8})();9const { chromium } = require('playwright');10(async () => {11 const browser = await chromium.launch();12 const context = await browser.newContext();13 const page = await context.newPage();14 await page.screenshot({ path: 'example.png' });15 await browser.close();16})();17const { chromium } = require('playwright');18(async () => {19 const browser = await chromium.launch();20 const context = await browser.newContext();21 const page = await context.newPage();22 await page.screenshot({ path: 'example.png' });23 await browser.close();24})();25const { chromium } = require('playwright');26(async () => {27 const browser = await chromium.launch();28 const context = await browser.newContext();29 const page = await context.newPage();30 await page.screenshot({ path: 'example.png' });31 await browser.close();32})();33const { chromium } = require('playwright');34(async () => {35 const browser = await chromium.launch();36 const context = await browser.newContext();37 const page = await context.newPage();38 await page.screenshot({ path: 'example.png' });39 await browser.close();40})();41const { chromium } = require('playwright');42(async () => {43 const browser = await chromium.launch();44 const context = await browser.newContext();45 const page = await context.newPage();46 await page.screenshot({ path: 'example.png' });47 await browser.close();48})();49const { chromium } = require('playwright');

Full Screen

Using AI Code Generation

copy

Full Screen

1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const page = await browser.newPage();5 await page.screenshot({ path: 'google.png' });6 await browser.close();7})();8const { chromium } = require('playwright');9(async () => {10 const browser = await chromium.launch();11 const page = await browser.newPage();12 await page.screenshot({ path: 'google.png' });13 await browser.close();14})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const page = await browser.newPage();5 await page.screenshot({ path: `example.png` });6 await browser.close();7})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch({ headless: false });4 const page = await browser.newPage();5 await page.screenshot({ path: `example.png` });6 await browser.close();7})();8const { chromium } = require('playwright');9(async () => {10 const browser = await chromium.launch({ headless: false });11 const page = await browser.newPage();12 await page.screenshot({ path: `example.png` });13 await browser.close();14})();15const { chromium } = require('playwright');16(async () => {17 const browser = await chromium.launch({ headless: false });18 const context = await browser.newContext();19 const page = await context.newPage();20 await page.screenshot({ path: `example.png` });21 await browser.close();22})();23const { chromium } = require('playwright');24(async () => {25 const browser = await chromium.launch({ headless: false });26 const page = await browser.newPage();27 await page.screenshot({ path: `example.png` });28 await browser.close();29})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { chromium } = require('playwright');2const fs = require('fs');3const path = require('path');4(async () => {5 const browser = await chromium.launch();6 const context = await browser.newContext();7 const page = await context.newPage();8 await page.screenshot({ path: 'google.png' });9 await browser.close();10})();11const { chromium } = require('playwright');12const fs = require('fs');13const path = require('path');14(async () => {15 const browser = await chromium.launch();16 const context = await browser.newContext();17 const page = await context.newPage();18 await page.screenshot({ path: 'google.png' });19 await browser.close();20})();21const { chromium } = require('playwright');22const fs = require('fs');23const path = require('path');24(async () => {25 const browser = await chromium.launch();26 const context = await browser.newContext();27 const page = await context.newPage();28 await page.screenshot({ path: 'google.png' });29 await browser.close();30})();31const { chromium } = require('playwright');32const fs = require('fs');33const path = require('path');34(async () => {35 const browser = await chromium.launch();36 const context = await browser.newContext();37 const page = await context.newPage();38 await page.screenshot({ path: 'google.png' });39 await browser.close();40})();41const { chromium } = require('playwright');42const fs = require('fs');43const path = require('path');44(async () => {45 const browser = await chromium.launch();46 const context = await browser.newContext();47 const page = await context.newPage();48 await page.screenshot({ path: 'google.png' });49 await browser.close();50})();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch({4 });5 const context = await browser.newContext();6 const page = await context.newPage();7 await page.click('[placeholder="Search"]');

Full Screen

Using AI Code Generation

copy

Full Screen

1const playwright = require('playwright');2const {devices} = require('playwright');3(async () => {4 const browser = await playwright.chromium.launch();5 const context = await browser.newContext({6 viewport: { width: 414, height: 896 },7 });8 const page = await context.newPage();9 await page.screenshot({ path: `example.png` });10 await browser.close();11})();12const playwright = require('playwright');13const {devices} = require('playwright');14(async () => {15 const browser = await playwright.chromium.launch();16 const context = await browser.newContext({17 viewport: { width: 414, height: 896 },18 });19 const page = await context.newPage();20 await page.screenshot({ path: `example.png` });21 await browser.close();22})();23const playwright = require('playwright');24const {devices} = require('playwright');25(async () => {26 const browser = await playwright.chromium.launch();27 const context = await browser.newContext({28 viewport: { width: 414, height: 896 },29 });30 const page = await context.newPage();31 await page.screenshot({ path: `example.png` });32 await browser.close();33})();34const playwright = require('playwright');35const {devices} = require('playwright');36(async () => {37 const browser = await playwright.chromium.launch();38 const context = await browser.newContext({39 viewport: { width: 414, height: 896 },40 });41 const page = await context.newPage();42 await page.screenshot({ path: `example.png` });

Full Screen

Playwright tutorial

LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.

Chapters:

  1. What is Playwright : Playwright is comparatively new but has gained good popularity. Get to know some history of the Playwright with some interesting facts connected with it.
  2. How To Install Playwright : Learn in detail about what basic configuration and dependencies are required for installing Playwright and run a test. Get a step-by-step direction for installing the Playwright automation framework.
  3. Playwright Futuristic Features: Launched in 2020, Playwright gained huge popularity quickly because of some obliging features such as Playwright Test Generator and Inspector, Playwright Reporter, Playwright auto-waiting mechanism and etc. Read up on those features to master Playwright testing.
  4. What is Component Testing: Component testing in Playwright is a unique feature that allows a tester to test a single component of a web application without integrating them with other elements. Learn how to perform Component testing on the Playwright automation framework.
  5. Inputs And Buttons In Playwright: Every website has Input boxes and buttons; learn about testing inputs and buttons with different scenarios and examples.
  6. Functions and Selectors in Playwright: Learn how to launch the Chromium browser with Playwright. Also, gain a better understanding of some important functions like “BrowserContext,” which allows you to run multiple browser sessions, and “newPage” which interacts with a page.
  7. Handling Alerts and Dropdowns in Playwright : Playwright interact with different types of alerts and pop-ups, such as simple, confirmation, and prompt, and different types of dropdowns, such as single selector and multi-selector get your hands-on with handling alerts and dropdown in Playright testing.
  8. Playwright vs Puppeteer: Get to know about the difference between two testing frameworks and how they are different than one another, which browsers they support, and what features they provide.
  9. Run Playwright Tests on LambdaTest: Playwright testing with LambdaTest leverages test performance to the utmost. You can run multiple Playwright tests in Parallel with the LammbdaTest test cloud. Get a step-by-step guide to run your Playwright test on the LambdaTest platform.
  10. Playwright Python Tutorial: Playwright automation framework support all major languages such as Python, JavaScript, TypeScript, .NET and etc. However, there are various advantages to Python end-to-end testing with Playwright because of its versatile utility. Get the hang of Playwright python testing with this chapter.
  11. Playwright End To End Testing Tutorial: Get your hands on with Playwright end-to-end testing and learn to use some exciting features such as TraceViewer, Debugging, Networking, Component testing, Visual testing, and many more.
  12. Playwright Video Tutorial: Watch the video tutorials on Playwright testing from experts and get a consecutive in-depth explanation of Playwright automation testing.

Run Playwright Internal automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful