@openreplay/tracker-mobx
Advanced tools
Comparing version 3.4.4 to 4.0.0
@@ -1,5 +0,27 @@ | ||
import { IObservableValue, IComputedValue } from 'mobx'; | ||
import { App } from '@openreplay/tracker/cjs'; | ||
declare type IObservable = IObservableValue<unknown> | IComputedValue<unknown>; | ||
export default function (): (app: App | null) => ((obj: IObservable) => void) | undefined; | ||
export {}; | ||
export interface Options { | ||
predicate: (ev: { | ||
type: string; | ||
name: string; | ||
object: any; | ||
debugObjectName: string; | ||
}) => boolean; | ||
sanitize: (ev: { | ||
state: any; | ||
type: string; | ||
property: string; | ||
}) => { | ||
state: any; | ||
type: string; | ||
property: string; | ||
}; | ||
update: boolean; | ||
delete: boolean; | ||
add: boolean; | ||
} | ||
export default function (opts?: Partial<Options>): (app: App | null) => ((ev: { | ||
type: string; | ||
name: string; | ||
object: any; | ||
debugObjectName: string; | ||
}) => void) | undefined; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const mobx_1 = require("mobx"); | ||
const tracker_1 = require("@openreplay/tracker/cjs"); | ||
const syncod_1 = require("./syncod"); | ||
// export interface Options { | ||
// observables: Array<IObservable> // | {[key:string]:IObservable} | ||
// } | ||
const CH_FIELDS = { | ||
type: true, | ||
observableKind: true, | ||
name: true, | ||
newValue: true, | ||
oldValue: true, | ||
index: true, | ||
removedCount: true, | ||
added: true, | ||
removed: true, | ||
addedCount: true, | ||
}; | ||
function default_1( /*opts: Partial<Options> = {}*/) { | ||
// const options: Options = Object.assign( | ||
// { | ||
// //observables: [], | ||
// }, | ||
// opts, | ||
// ); | ||
const log_js_1 = require("./log.js"); | ||
const index_js_1 = require("./syncod/index.js"); | ||
function default_1(opts = {}) { | ||
const options = Object.assign({ | ||
predicate: () => true, | ||
sanitize: (ev) => ev, | ||
update: true, | ||
delete: true, | ||
add: true, | ||
}, opts); | ||
return (app) => { | ||
@@ -32,34 +18,24 @@ if (app === null) { | ||
} | ||
const encoder = new syncod_1.Encoder(syncod_1.sha1, 50); | ||
const makeObservableChangeHandle = (obj) => { | ||
const name = mobx_1.getDebugName(obj); | ||
const payload = encoder.encode({ type: "init", value: obj }); | ||
const encoder = new index_js_1.Encoder(index_js_1.sha1, 50); | ||
return (ev) => { | ||
var _a; | ||
if (!options.predicate(ev)) | ||
return; | ||
const { type } = ev; | ||
const event = options[type] && log_js_1.default[type] && log_js_1.default[type](ev); | ||
if (!event) | ||
return; | ||
const sanitizedEvent = options.sanitize(event); | ||
const evType = ((_a = ev.debugObjectName) === null || _a === void 0 ? void 0 : _a.split('@')[0]) || ev.type; | ||
if (evType) { | ||
app.send(tracker_1.Messages.StateAction(evType)); | ||
} | ||
const payload = encoder.encode(sanitizedEvent); | ||
const table = encoder.commit(); | ||
for (let key in table) | ||
app.send(tracker_1.Messages.OTable(key, table[key])); | ||
app.send(tracker_1.Messages.MobX(name, payload)); | ||
return (change) => { | ||
const ch = Object.keys(change) | ||
.filter(key => CH_FIELDS[key]) | ||
.reduce((obj, key) => { | ||
obj[key] = change[key]; | ||
return obj; | ||
}, {}); | ||
//app.send(Messages.StateAction(neme)); | ||
const payload = encoder.encode(ch); | ||
const table = encoder.commit(); | ||
for (let key in table) | ||
app.send(tracker_1.Messages.OTable(key, table[key])); | ||
app.send(tracker_1.Messages.MobX(name, payload)); | ||
}; | ||
app.send(tracker_1.Messages.MobX(evType, payload)); | ||
}; | ||
return (obj) => { | ||
if (!mobx_1.isObservable(obj)) { | ||
console.warn("OpenReplay tracker-mobx: ", obj, " is not an observable value"); | ||
return; | ||
} | ||
mobx_1.observe(obj, makeObservableChangeHandle(obj)); | ||
}; | ||
}; | ||
} | ||
exports.default = default_1; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.sha1 = exports.Encoder = void 0; | ||
// TODO: SSR solution for all asayer libraries | ||
@@ -4,0 +5,0 @@ const encoder_js_1 = require("./encoder.js"); |
@@ -1,5 +0,27 @@ | ||
import { IObservableValue, IComputedValue } from 'mobx'; | ||
import { App } from '@openreplay/tracker'; | ||
declare type IObservable = IObservableValue<unknown> | IComputedValue<unknown>; | ||
export default function (): (app: App | null) => ((obj: IObservable) => void) | undefined; | ||
export {}; | ||
export interface Options { | ||
predicate: (ev: { | ||
type: string; | ||
name: string; | ||
object: any; | ||
debugObjectName: string; | ||
}) => boolean; | ||
sanitize: (ev: { | ||
state: any; | ||
type: string; | ||
property: string; | ||
}) => { | ||
state: any; | ||
type: string; | ||
property: string; | ||
}; | ||
update: boolean; | ||
delete: boolean; | ||
add: boolean; | ||
} | ||
export default function (opts?: Partial<Options>): (app: App | null) => ((ev: { | ||
type: string; | ||
name: string; | ||
object: any; | ||
debugObjectName: string; | ||
}) => void) | undefined; |
@@ -1,26 +0,12 @@ | ||
import { observe, getDebugName, isObservable } from 'mobx'; | ||
import { Messages } from '@openreplay/tracker'; | ||
import { Encoder, sha1 } from './syncod'; | ||
// export interface Options { | ||
// observables: Array<IObservable> // | {[key:string]:IObservable} | ||
// } | ||
const CH_FIELDS = { | ||
type: true, | ||
observableKind: true, | ||
name: true, | ||
newValue: true, | ||
oldValue: true, | ||
index: true, | ||
removedCount: true, | ||
added: true, | ||
removed: true, | ||
addedCount: true, | ||
}; | ||
export default function ( /*opts: Partial<Options> = {}*/) { | ||
// const options: Options = Object.assign( | ||
// { | ||
// //observables: [], | ||
// }, | ||
// opts, | ||
// ); | ||
import log from './log.js'; | ||
import { Encoder, sha1 } from './syncod/index.js'; | ||
export default function (opts = {}) { | ||
const options = Object.assign({ | ||
predicate: () => true, | ||
sanitize: (ev) => ev, | ||
update: true, | ||
delete: true, | ||
add: true, | ||
}, opts); | ||
return (app) => { | ||
@@ -31,32 +17,22 @@ if (app === null) { | ||
const encoder = new Encoder(sha1, 50); | ||
const makeObservableChangeHandle = (obj) => { | ||
const name = getDebugName(obj); | ||
const payload = encoder.encode({ type: "init", value: obj }); | ||
return (ev) => { | ||
var _a; | ||
if (!options.predicate(ev)) | ||
return; | ||
const { type } = ev; | ||
const event = options[type] && log[type] && log[type](ev); | ||
if (!event) | ||
return; | ||
const sanitizedEvent = options.sanitize(event); | ||
const evType = ((_a = ev.debugObjectName) === null || _a === void 0 ? void 0 : _a.split('@')[0]) || ev.type; | ||
if (evType) { | ||
app.send(Messages.StateAction(evType)); | ||
} | ||
const payload = encoder.encode(sanitizedEvent); | ||
const table = encoder.commit(); | ||
for (let key in table) | ||
app.send(Messages.OTable(key, table[key])); | ||
app.send(Messages.MobX(name, payload)); | ||
return (change) => { | ||
const ch = Object.keys(change) | ||
.filter(key => CH_FIELDS[key]) | ||
.reduce((obj, key) => { | ||
obj[key] = change[key]; | ||
return obj; | ||
}, {}); | ||
//app.send(Messages.StateAction(neme)); | ||
const payload = encoder.encode(ch); | ||
const table = encoder.commit(); | ||
for (let key in table) | ||
app.send(Messages.OTable(key, table[key])); | ||
app.send(Messages.MobX(name, payload)); | ||
}; | ||
app.send(Messages.MobX(evType, payload)); | ||
}; | ||
return (obj) => { | ||
if (!isObservable(obj)) { | ||
console.warn("OpenReplay tracker-mobx: ", obj, " is not an observable value"); | ||
return; | ||
} | ||
observe(obj, makeObservableChangeHandle(obj)); | ||
}; | ||
}; | ||
} |
{ | ||
"name": "@openreplay/tracker-mobx", | ||
"description": "Tracker plugin for MobX events recording", | ||
"version": "3.4.4", | ||
"version": "4.0.0", | ||
"keywords": [ | ||
@@ -26,8 +26,6 @@ "mobx", | ||
"peerDependencies": { | ||
"@openreplay/tracker": "^3.0.0", | ||
"mobx": "^6.0.0" | ||
"@openreplay/tracker": ">=3.0.0" | ||
}, | ||
"devDependencies": { | ||
"@openreplay/tracker": "^3.0.3", | ||
"mobx": "^6.0.0", | ||
"@openreplay/tracker": "file:../tracker", | ||
"prettier": "^1.18.2", | ||
@@ -34,0 +32,0 @@ "replace-in-files-cli": "^1.0.0", |
@@ -11,8 +11,8 @@ # OpenReplay Tracker MobX plugin | ||
Initialize the `@openreplay/tracker` package as usual and load the plugin into it. | ||
Then use returned value to track MobX obervables. | ||
Then put the generated middleware into your Redux chain. | ||
```js | ||
import { observable } from 'mobx'; | ||
import Tracker from '@openreplay/tracker'; | ||
import trackerMobX from '@openreplay/tracker-mobx'; | ||
import { observe } from 'mobx'; | ||
@@ -23,9 +23,23 @@ const tracker = new Tracker({ | ||
const observe = tracker.plugin(trackerMobX()); | ||
const mobxTrackerInstance = tracker.use(trackerMobX(options)); // look below for available options | ||
observe(yourMobxStore, mobxTrackerInstance) | ||
``` | ||
const myArray = observable(['foo', 'bar', 42]); | ||
observe(myArray); | ||
Options: | ||
```js | ||
interface Options { | ||
predicate?: (ev: { type: string; name: string; object: any; debugObjectName: string }) => boolean; | ||
sanitize?: (ev: { state: any; type: string; property: string }) => { state: any; type: string; property: string }; | ||
update?: boolean; | ||
add?: boolean; | ||
delete?: boolean; | ||
} | ||
myArray.push("Hello world"); // This mutation will be tracked | ||
trackerMobX({ | ||
predicate: () => true, | ||
sanitize: (event) => event | ||
}) | ||
``` | ||
Where `predicate` can be used to dynamically turn off capturing and `sanitize` can be used to modify the payload before sending it to backend. |
Sorry, the diff of this file is not supported yet
66020
1
4
44
29
991