94 lines
1.9 KiB
TypeScript
94 lines
1.9 KiB
TypeScript
// Based on https://github.com/winterbe/mobx-logger/blob/master/src/log.js
|
|
// though it is not used anymore due to spy() being no op in production
|
|
|
|
interface TrackerMobXConfig {
|
|
enabled?: boolean;
|
|
methods?: { [method: string]: boolean };
|
|
}
|
|
|
|
const isLoggingEnabled = (ev): boolean => {
|
|
if (typeof ev.object !== 'object' || ev.object === null) {
|
|
return false;
|
|
}
|
|
const loggerConfig = ev.object.constructor
|
|
.trackerMobXConfig as TrackerMobXConfig;
|
|
if (loggerConfig === undefined) {
|
|
return true;
|
|
}
|
|
const enabled = loggerConfig.enabled === true;
|
|
if (loggerConfig.methods === undefined) {
|
|
return enabled;
|
|
}
|
|
const methodLoggerConfig = loggerConfig.methods[getPropName(ev)];
|
|
if (methodLoggerConfig === undefined) {
|
|
return enabled;
|
|
}
|
|
return methodLoggerConfig;
|
|
};
|
|
|
|
const getPropName = ev => {
|
|
if (ev.name != null) {
|
|
return ev.name;
|
|
}
|
|
return (
|
|
Object.keys(ev.object.$mobx.values).filter(
|
|
key => ev.object.$mobx.values[key].derivation === ev.fn,
|
|
)[0] || ''
|
|
);
|
|
};
|
|
|
|
|
|
const reaction = ev => {
|
|
const name = ev.name.replace('#null', '');
|
|
|
|
const observables = ev.observing || [];
|
|
const names = observables.map(it => it.name);
|
|
|
|
return { name, names };
|
|
};
|
|
|
|
const transaction = ev => {
|
|
return { name: ev.name };
|
|
};
|
|
|
|
const compute = ev => {
|
|
if (!isLoggingEnabled(ev)) {
|
|
return;
|
|
}
|
|
const name = getPropName(ev);
|
|
return { name };
|
|
};
|
|
|
|
|
|
const observeAction = ev => {
|
|
const state = {}
|
|
for (let property in ev.object) {
|
|
if (typeof property !== 'function') {
|
|
state[property] = ev.object[property]
|
|
}
|
|
}
|
|
return {
|
|
state,
|
|
type: ev.type,
|
|
property: ev.name,
|
|
}
|
|
}
|
|
|
|
const action = ev => {
|
|
if (!isLoggingEnabled(ev)) {
|
|
return;
|
|
}
|
|
|
|
return { name: ev.name, arguments: ev.arguments, object: ev.object };
|
|
};
|
|
|
|
|
|
export default {
|
|
// action,
|
|
// reaction,
|
|
// transaction,
|
|
// compute,
|
|
update: observeAction,
|
|
delete: observeAction,
|
|
add: observeAction
|
|
};
|