typed-patterns
Version:
Basic design patterns
93 lines • 6.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Returns global or window. Depends on environment
*/
function getGlobal() {
if (typeof global === 'object') {
return global;
// @ts-ignore
}
else if (typeof window === 'object') {
// @ts-ignore
return window;
}
else {
throw new Error('Can not deal with this environment. Go fuck yourself');
}
}
/**
* Returns a function that can set up your operator as soon as possible in your environment
*/
function getNextTick() {
const glob = getGlobal();
if (glob.process && typeof glob.process.nextTick === 'function') {
return glob.process.nextTick;
}
else if (typeof glob.setImmediate === 'function') {
return glob.setImmediate;
}
else if (typeof glob.Promise === 'function') {
// tslint:disable-next-line:no-shadowed-variable
return function nextTick(operator) {
const args = Array.prototype.slice.call(arguments, 1);
return Promise.resolve()
.then(() => {
operator.apply(null, args);
})
.catch(() => undefined);
};
}
else if (typeof glob.MutationObserver === 'function') {
const element = glob.document.createElement('a');
const createQueue = () => {
return new Array(16);
};
let queue = createQueue();
let fire = false;
let callCounter = 0;
let fireCounter = 0;
const observer = new glob.MutationObserver(function () {
const len = callCounter;
const track = queue;
callCounter = 0;
fire = false;
queue = createQueue();
for (let i = 0; i < len; ++i) {
try {
track[i]();
}
catch (e) { }
}
});
observer.observe(element, {
attributes: true,
attributeFilter: ['lang']
});
// tslint:disable-next-line:no-shadowed-variable
return function nextTick(operator, ...args) {
queue[callCounter++] = operator.bind(null, ...args);
if (!fire) {
fire = true;
element.setAttribute('lang', (fireCounter++).toString());
}
};
}
else {
return function (operator) {
const args = Array.prototype.slice.call(arguments, 1);
setTimeout(() => {
operator.apply(null, args);
}, 1);
};
}
}
function nextTick(operator, ...args) {
if (typeof operator !== 'function') {
throw new TypeError('Function expected');
}
_nextTick(operator, ...args);
}
exports.nextTick = nextTick;
const _nextTick = getNextTick();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dC50aWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL3V0aWwvbmV4dC50aWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUE7O0dBRUc7QUFDSCxTQUFTLFNBQVM7SUFDaEIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7UUFDOUIsT0FBTyxNQUFNLENBQUM7UUFDZCxhQUFhO0tBQ2Q7U0FBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtRQUNyQyxhQUFhO1FBQ2IsT0FBTyxNQUFNLENBQUM7S0FDZjtTQUFNO1FBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO0tBQ3pFO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxXQUFXO0lBQ2xCLE1BQU0sSUFBSSxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBQ3pCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxLQUFLLFVBQVUsRUFBRTtRQUMvRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0tBQzlCO1NBQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssVUFBVSxFQUFFO1FBQ2xELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUMxQjtTQUFNLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRTtRQUM3QyxnREFBZ0Q7UUFDaEQsT0FBTyxTQUFTLFFBQVEsQ0FBQyxRQUFrQjtZQUN6QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRTtpQkFDckIsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDVCxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMs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