Socket
Socket
Sign inDemoInstall

@openreplay/tracker-mobx

Package Overview
Dependencies
5
Maintainers
3
Versions
6
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 3.4.4 to 4.0.0

cjs/log.d.ts

30

cjs/index.d.ts

@@ -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;

76

cjs/index.js
"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

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc