Skip to content

Instantly share code, notes, and snippets.

function getCaller() {
const stack = getStack();
stack.shift(); // getStack
stack.shift(); // getCaller
// Return caller's caller
return stack;
}
class ArrayLazy extends Array {
_lazyQueue = [];
map(callback) {
this._lazyQueue.push({ type: "map", callback });
return this;
}
filter(callback) {
this._lazyQueue.push({ type: "filter", callback });
return this;
}
@artalar
artalar / debug-action-call.js
Created March 12, 2019 16:49
Debug where action was called for redux-act
function getStack() {
// Save original Error.prepareStackTrace
const origPrepareStackTrace = Error.prepareStackTrace;
// Override with function that just returns `stack`
Error.prepareStackTrace = (_, stack) => stack;
// Create a new `Error`, which automatically gets `stack`
// Evaluate `err.stack`, which calls our new `Error.prepareStackTrace`
const { stack } = new Error();
// @flow
function match<I: [*] | [*, *], O>(
cb: (test: (predicate?: (...a: I) => any) => string) => { [string]: O | ((...a: I) => O) }
): (...a: I) => ?O {
const predicates = {};
function test(predicate: (...a: I) => any = () => true): string {
const predicateName = Math.random().toFixed(5);
predicates[predicateName] = predicate;
return predicateName;
export const validation = store => next => action => {
switch(action.type){
case loginFormSubmit.type: {
const isValid = validate(action.payload);
if (isValid) return next(action)
// else
store.dispatch(loginFormIvalid())
}
default: return next(action)
}
@artalar
artalar / reduxDevTool.js
Created June 22, 2019 20:46 — forked from kobzarvs/reduxDevTool.js
effector -> redux devtool
import { createStore as createReduxStore } from 'redux'
import { devToolsEnhancer } from 'redux-devtools-extension'
const redux = createReduxStore((state, { payload }) => payload, devToolsEnhancer())
export function useReduxDevTool(store) {
store.watch(payload => redux.dispatch({ type: 'CHANGE', payload }))
}
function createMapById<PropName extends string>(
$list: Store<{ [key in PropName]: any }[]>,
propName: PropName,
id: string
) {
return $list.map(list =>
list.reduce(
(propByIdMap, element) => (
(propByIdMap[element[id]] = element[propName]), propByIdMap
  • 1
    • 2
      • 3
        • 4
  • 5
@artalar
artalar / client.js
Created August 7, 2019 09:14
Error logging
window.onerror = function (message, source, lineno, colno, error) {
if (typeof error === 'object' && error instanceof Error) {
try {
error = JSON.stringify(
error,
// по умолчанию поля ошибок не парсятся
Object.getOwnPropertyNames(error),
);
} catch (_) {
error = `${error.name}\n${error.message}\n${error.stack}`;
const { performance } = require('perf_hooks');
let counter = 0;
let log = [];
function logPure(log, value) {
log.push(value);
}
function logDirty() {