New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

mobx-decorated-models

Package Overview
Dependencies
Maintainers
1
Versions
49
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

mobx-decorated-models - npm Package Compare versions

Comparing version 0.8.3 to 0.9.0

81

dist/build.full.js

@@ -194,3 +194,3 @@ (function (global, factory) {

if (model) {
serializr.getDefaultModelSchema(parentModel).props[propName] = cb(model, options, propName);
serializr.getDefaultModelSchema(parentModel).props[propName] = cb(model, propName, options);
} else {

@@ -246,28 +246,56 @@ serializr.getDefaultModelSchema(parentModel).props[propName] = objectSerializer();

function associationSerializers(modelClass, propName, options) {
return {
serializer: options.serializer || modelClass.serialize || serializr.object(serializr.getDefaultModelSchema(modelClass)).serializer,
deserializer: options.deserializer || modelClass.deserializer || function (attrs, context) {
var model = void 0;
if (attrs instanceof modelClass) {
model = attrs;
} else {
model = setupModel(Object.assign({}, options, { attrs: attrs, modelClass: modelClass }));
}
if (options.inverseOf) {
markNonserializable(model, options.inverseOf);
model[options.inverseOf + '_association_name'] = propName;
model[options.inverseOf] = context.target;
}
return model;
}
};
}
var Associations = {
hasMany: function hasMany(modelKlass, options) {
var defaultSerializer = serializr.list(serializr.object(modelKlass));
return Object.assign(defaultSerializer, options, {
model: modelKlass
hasMany: function hasMany(modelClass, propName, options) {
var _associationSerialize = associationSerializers(modelClass, propName, options),
_deserializer = _associationSerialize.deserializer,
_serializer = _associationSerialize.serializer;
return Object.assign(options, {
model: modelClass,
deserializer: function deserializer(collection, cb, context) {
var value = collection && collection.map ? collection.map(function (attrs) {
return _deserializer(attrs, context);
}) : collection;
cb(null, value);
},
serializer: function serializer(collection, name, parent) {
if (!isSerializable(parent, name)) {
return serializr.SKIP;
}
return collection && collection.map ? collection.map(function (model) {
return _serializer(model, name, parent);
}) : collection;
}
});
},
belongsTo: function belongsTo(modelKlass, options, propName) {
var defaultSerializer = serializr.object(serializr.getDefaultModelSchema(modelKlass));
var serializerFn = modelKlass.serialize || defaultSerializer.serializer;
belongsTo: function belongsTo(modelClass, propName, options) {
var _associationSerialize2 = associationSerializers(modelClass, propName, options),
_deserializer2 = _associationSerialize2.deserializer,
_serializer2 = _associationSerialize2.serializer;
return Object.assign(options, {
model: modelKlass,
deserializer: function deserializer(value, cb, context) {
var setter = function setter(err, model) {
if (!err && options.inverseOf) {
markNonserializable(model, options.inverseOf);
model[options.inverseOf + '_association_name'] = propName;
model[options.inverseOf] = context.target;
}
cb(err, model);
};
if (value instanceof modelKlass) {
setter(null, value);
} else {
setter(null, setupModel(Object.assign({}, options, { attrs: value, modelClass: modelKlass })));
}
model: modelClass,
deserializer: function deserializer(attrs, cb, context) {
cb(null, _deserializer2(attrs, context));
},

@@ -278,3 +306,3 @@ serializer: function serializer(belongsTo, name, parent) {

}
return serializerFn(belongsTo); // defaultSerializer.serializer(belongsTo);
return _serializer2(belongsTo, name, parent);
}

@@ -317,6 +345,7 @@ });

// eslint-disable-next-line new-cap
serializr.createModelSchema(model, serializeSchema, function (_ref2) {
var json = _ref2.json;
return new model(json);
}); // eslint-disable-line new-cap
});
schema.forEach(function (_ref3, name) {

@@ -340,3 +369,3 @@ var type = _ref3.type,

var parentModelSchema = serializr.getDefaultModelSchema(parentModel);
parentModelSchema.props[propName] = cb(referencedModel, options, propName);
parentModelSchema.props[propName] = cb(referencedModel, propName, options);
PendingLookups.splice(i, 1);

@@ -343,0 +372,0 @@ }

@@ -191,3 +191,3 @@ import { SKIP, createModelSchema, custom, deserialize, getDefaultModelSchema, identifier, list, object, primitive, serialize, update } from 'serializr';

if (model) {
getDefaultModelSchema(parentModel).props[propName] = cb(model, options, propName);
getDefaultModelSchema(parentModel).props[propName] = cb(model, propName, options);
} else {

@@ -243,28 +243,56 @@ getDefaultModelSchema(parentModel).props[propName] = objectSerializer();

function associationSerializers(modelClass, propName, options) {
return {
serializer: options.serializer || modelClass.serialize || object(getDefaultModelSchema(modelClass)).serializer,
deserializer: options.deserializer || modelClass.deserializer || function (attrs, context) {
var model = void 0;
if (attrs instanceof modelClass) {
model = attrs;
} else {
model = setupModel(Object.assign({}, options, { attrs: attrs, modelClass: modelClass }));
}
if (options.inverseOf) {
markNonserializable(model, options.inverseOf);
model[options.inverseOf + '_association_name'] = propName;
model[options.inverseOf] = context.target;
}
return model;
}
};
}
var Associations = {
hasMany: function hasMany(modelKlass, options) {
var defaultSerializer = list(object(modelKlass));
return Object.assign(defaultSerializer, options, {
model: modelKlass
hasMany: function hasMany(modelClass, propName, options) {
var _associationSerialize = associationSerializers(modelClass, propName, options),
_deserializer = _associationSerialize.deserializer,
_serializer = _associationSerialize.serializer;
return Object.assign(options, {
model: modelClass,
deserializer: function deserializer(collection, cb, context) {
var value = collection && collection.map ? collection.map(function (attrs) {
return _deserializer(attrs, context);
}) : collection;
cb(null, value);
},
serializer: function serializer(collection, name, parent) {
if (!isSerializable(parent, name)) {
return SKIP;
}
return collection && collection.map ? collection.map(function (model) {
return _serializer(model, name, parent);
}) : collection;
}
});
},
belongsTo: function belongsTo(modelKlass, options, propName) {
var defaultSerializer = object(getDefaultModelSchema(modelKlass));
var serializerFn = modelKlass.serialize || defaultSerializer.serializer;
belongsTo: function belongsTo(modelClass, propName, options) {
var _associationSerialize2 = associationSerializers(modelClass, propName, options),
_deserializer2 = _associationSerialize2.deserializer,
_serializer2 = _associationSerialize2.serializer;
return Object.assign(options, {
model: modelKlass,
deserializer: function deserializer(value, cb, context) {
var setter = function setter(err, model) {
if (!err && options.inverseOf) {
markNonserializable(model, options.inverseOf);
model[options.inverseOf + '_association_name'] = propName;
model[options.inverseOf] = context.target;
}
cb(err, model);
};
if (value instanceof modelKlass) {
setter(null, value);
} else {
setter(null, setupModel(Object.assign({}, options, { attrs: value, modelClass: modelKlass })));
}
model: modelClass,
deserializer: function deserializer(attrs, cb, context) {
cb(null, _deserializer2(attrs, context));
},

@@ -275,3 +303,3 @@ serializer: function serializer(belongsTo, name, parent) {

}
return serializerFn(belongsTo); // defaultSerializer.serializer(belongsTo);
return _serializer2(belongsTo, name, parent);
}

@@ -314,6 +342,7 @@ });

// eslint-disable-next-line new-cap
createModelSchema(model, serializeSchema, function (_ref2) {
var json = _ref2.json;
return new model(json);
}); // eslint-disable-line new-cap
});
schema.forEach(function (_ref3, name) {

@@ -337,3 +366,3 @@ var type = _ref3.type,

var parentModelSchema = getDefaultModelSchema(parentModel);
parentModelSchema.props[propName] = cb(referencedModel, options, propName);
parentModelSchema.props[propName] = cb(referencedModel, propName, options);
PendingLookups.splice(i, 1);

@@ -340,0 +369,0 @@ }

@@ -29,3 +29,3 @@ import {

if (model) {
getDefaultModelSchema(parentModel).props[propName] = cb(model, options, propName);
getDefaultModelSchema(parentModel).props[propName] = cb(model, propName, options);
} else {

@@ -75,17 +75,20 @@ getDefaultModelSchema(parentModel).props[propName] = objectSerializer();

const Associations = {
hasMany(modelKlass, options) {
const defaultSerializer = list(object(modelKlass));
return Object.assign(defaultSerializer, options, {
model: modelKlass,
});
},
belongsTo(modelKlass, options, propName) {
const defaultSerializer = object(getDefaultModelSchema(modelKlass));
const serializerFn = modelKlass.serialize || defaultSerializer.serializer;
return Object.assign(options, {
model: modelKlass,
deserializer(value, cb, context) {
const setter = (err, model) => {
if (!err && options.inverseOf) {
function associationSerializers(modelClass, propName, options) {
return {
serializer: options.serializer ||
modelClass.serialize ||
object(getDefaultModelSchema(modelClass)).serializer,
deserializer: options.deserializer ||
modelClass.deserializer ||
(
(attrs, context) => {
let model;
if (attrs instanceof modelClass) {
model = attrs;
} else {
model = setupModel(
Object.assign({}, options, { attrs, modelClass }),
);
}
if (options.inverseOf) {
markNonserializable(model, options.inverseOf);

@@ -95,15 +98,45 @@ model[`${options.inverseOf}_association_name`] = propName;

}
cb(err, model);
};
if (value instanceof modelKlass) {
setter(null, value);
} else {
setter(null, setupModel(Object.assign(
{}, options, { attrs: value, modelClass: modelKlass },
)));
return model;
}
),
};
}
const Associations = {
hasMany(modelClass, propName, options) {
const {
deserializer,
serializer,
} = associationSerializers(modelClass, propName, options);
return Object.assign(options, {
model: modelClass,
deserializer(collection, cb, context) {
const value = collection && collection.map ?
collection.map(attrs => deserializer(attrs, context)) : collection;
cb(null, value);
},
serializer(collection, name, parent) {
if (!isSerializable(parent, name)) { return SKIP; }
return collection && collection.map ?
collection.map(model => serializer(model, name, parent)) : collection;
},
});
},
belongsTo(modelClass, propName, options) {
const {
deserializer,
serializer,
} = associationSerializers(modelClass, propName, options);
return Object.assign(options, {
model: modelClass,
deserializer(attrs, cb, context) {
cb(null, deserializer(attrs, context));
},
serializer(belongsTo, name, parent) {
if (!isSerializable(parent, name)) { return SKIP; }
return serializerFn(belongsTo); // defaultSerializer.serializer(belongsTo);
return serializer(belongsTo, name, parent);
},

@@ -144,3 +177,4 @@ });

createModelSchema(model, serializeSchema, ({ json }) => new model(json)); // eslint-disable-line new-cap
// eslint-disable-next-line new-cap
createModelSchema(model, serializeSchema, ({ json }) => new model(json));
schema.forEach(({ type, options }, name) => {

@@ -156,3 +190,3 @@ if (Associations[type] || options.model) {

const parentModelSchema = getDefaultModelSchema(parentModel);
parentModelSchema.props[propName] = cb(referencedModel, options, propName);
parentModelSchema.props[propName] = cb(referencedModel, propName, options);
PendingLookups.splice(i, 1);

@@ -159,0 +193,0 @@ }

@@ -12,3 +12,3 @@ import { observable, intercept } from 'mobx';

change,
{ modelClass, defaultAttributes, inverseOf, parentModel, parentModelProp }
{ modelClass, defaultAttributes, inverseOf, parentModel, parentModelProp },
) {

@@ -15,0 +15,0 @@ change.newValue = setupModel({

{
"name": "mobx-decorated-models",
"version": "0.8.3",
"version": "0.9.0",
"description": "Decorators to make using Mobx for model type structures easier",

@@ -5,0 +5,0 @@ "main": "dist/build.full.js",

@@ -165,12 +165,16 @@ import { autorun } from 'mobx';

const boat = Ship.deserialize({ name: 'Boaty', cargoCount: 3 });
boat.registration = '8550W';
expect(boat.registration).toBeInstanceOf(Registration);
expect(boat.serialize()).toMatchObject({ registration: '8550W' });
boat.homePorts.push(1234);
expect(boat.homePorts.length).toEqual(1);
expect(boat.homePorts[0]).toBeInstanceOf(Registration);
expect(boat.homePorts[0].id).toEqual(1234);
expect(boat.serialize()).toMatchObject({ homePorts: [1234] });
expect(boat.name).toEqual('Boaty');
const customBoat = Ship.deserialize({
registration: [1, 2, 3],
});
customBoat.homePorts.push('home');
expect(customBoat.registration).toBeInstanceOf(Registration);
expect(customBoat.registration.id).toEqual([1, 2, 3]);
expect(customBoat.serialize()).toMatchObject({ registration: [1, 2, 3] });
expect(customBoat.serialize()).toMatchObject({ homePorts: ['home'] });
});

@@ -177,0 +181,0 @@

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc