Big News: Socket Selected for OpenAI's Cybersecurity Grant Program.Details
Socket
Book a DemoSign in
Socket

tiny-types

Package Overview
Dependencies
Maintainers
1
Versions
57
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

tiny-types - npm Package Compare versions

Comparing version
1.6.1
to
1.7.0
+4
lib/objects/equal.d.ts
/**
* @access private
*/
export declare function equal(v1: any, v2: any): boolean;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var significantFields_1 = require("./significantFields");
/**
* @access private
*/
function equal(v1, v2) {
switch (true) {
case !sameType(v1, v2):
return false;
case both(arePrimitives, v1, v2):
return checkIdentityOf(v1, v2);
case both(areObjects, v1, v2) && sameClass(v1, v2):
return checkSignificantFieldsOf(v1, v2);
}
return false;
}
exports.equal = equal;
var areObjects = function (_) { return new Object(_) === _; };
var arePrimitives = function (_) { return !areObjects(_); }; // arrays are objects
function both(condition, v1, v2) {
return condition(v1) && condition(v2);
}
var sameType = function (v1, v2) { return typeof v1 === typeof v2; };
var sameClass = function (v1, v2) { return (v1.constructor && v2 instanceof v1.constructor) || (v2.constructor && v1 instanceof v2.constructor); };
var sameLength = function (v1, v2) { return v1.length === v2.length; };
function checkIdentityOf(v1, v2) {
return v1 === v2;
}
function checkSignificantFieldsOf(o1, o2) {
var fieldsOfObject1 = significantFields_1.significantFieldsOf(o1), fieldsOfObject2 = significantFields_1.significantFieldsOf(o2);
if (!sameLength(fieldsOfObject1, fieldsOfObject2)) {
return false;
}
return fieldsOfObject1.reduce(function (previousFieldsAreEqual, field) {
var currentFieldIsEqual = !!o1[field] && !!o2[field] && equal(o1[field], o2[field]);
return previousFieldsAreEqual && currentFieldIsEqual;
}, true);
}
//# sourceMappingURL=equal.js.map
{"version":3,"file":"equal.js","sourceRoot":"","sources":["../../src/objects/equal.ts"],"names":[],"mappings":";;AAAA,yDAA0D;AAE1D;;GAEG;AACH,eAAsB,EAAO,EAAE,EAAO;IAClC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACX,KAAK,CAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC;QACjB,KAAK,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC;YAC5B,MAAM,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACnC,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,wBAAwB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC;AACjB,CAAC;AAXD,sBAWC;AAED,IAAM,UAAU,GAAO,UAAC,CAAM,IAAK,OAAA,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAnB,CAAmB,CAAC;AACvD,IAAM,aAAa,GAAI,UAAC,CAAM,IAAK,OAAA,CAAE,UAAU,CAAC,CAAC,CAAC,EAAf,CAAe,CAAC,CAAC,qBAAqB;AAEzE,cAAc,SAA8B,EAAE,EAAO,EAAE,EAAO;IAC1D,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,IAAM,QAAQ,GAAI,UAAC,EAAO,EAAE,EAAO,IAAK,OAAA,OAAO,EAAE,KAAK,OAAO,EAAE,EAAvB,CAAuB,CAAC;AAChE,IAAM,SAAS,GAAG,UAAC,EAAO,EAAE,EAAO,IAAK,OAAA,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,YAAY,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,YAAa,EAAE,CAAC,WAAW,CAAC,EAArG,CAAqG,CAAC;AAC9I,IAAM,UAAU,GAAG,UAAC,EAAsB,EAAE,EAAsB,IAAK,OAAA,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM,EAAvB,CAAuB,CAAC;AAE/F,yBAAyB,EAAO,EAAE,EAAO;IACrC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;AACrB,CAAC;AAED,kCAAkC,EAAU,EAAE,EAAU;IACpD,IACI,eAAe,GAAG,uCAAmB,CAAC,EAAE,CAAC,EACzC,eAAe,GAAG,uCAAmB,CAAC,EAAE,CAAC,CAAC;IAE9C,EAAE,CAAC,CAAC,CAAE,UAAU,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,UAAC,sBAA+B,EAAE,KAAa;QACzE,IAAM,mBAAmB,GAAG,CAAC,CAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACxF,MAAM,CAAC,sBAAsB,IAAI,mBAAmB,CAAC;IACzD,CAAC,EAAE,IAAI,CAAC,CAAC;AACb,CAAC"}
export * from './equal';
export * from './significantFields';
"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", { value: true });
__export(require("./equal"));
__export(require("./significantFields"));
//# sourceMappingURL=index.js.map
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/objects/index.ts"],"names":[],"mappings":";;;;;AAAA,6BAAwB;AACxB,yCAAoC"}
/**
* @access private
*
* @param {object|Array} o
* @returns {string[]}
*/
export declare function significantFieldsOf(o: {
[_: string]: any;
}): string[];
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* @access private
*
* @param {object|Array} o
* @returns {string[]}
*/
function significantFieldsOf(o) {
return Object.getOwnPropertyNames(o)
.filter(function (field) { return typeof o[field] !== 'function'; })
.sort();
}
exports.significantFieldsOf = significantFieldsOf;
//# sourceMappingURL=significantFields.js.map
{"version":3,"file":"significantFields.js","sourceRoot":"","sources":["../../src/objects/significantFields.ts"],"names":[],"mappings":";;AAAA;;;;;GAKG;AACH,6BAAoC,CAAuB;IACvD,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC;SAC/B,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,UAAU,EAA9B,CAA8B,CAAC;SAC/C,IAAI,EAAE,CAAC;AAChB,CAAC;AAJD,kDAIC"}
import { significantFieldsOf } from './significantFields';
/**
* @access private
*/
export function equal(v1: any, v2: any): boolean {
switch (true) {
case ! sameType(v1, v2):
return false;
case both(arePrimitives, v1, v2):
return checkIdentityOf(v1, v2);
case both(areObjects, v1, v2) && sameClass(v1, v2):
return checkSignificantFieldsOf(v1, v2);
}
return false;
}
const areObjects = (_: any) => new Object(_) === _;
const arePrimitives = (_: any) => ! areObjects(_); // arrays are objects
function both(condition: (_: any) => boolean, v1: any, v2: any): boolean {
return condition(v1) && condition(v2);
}
const sameType = (v1: any, v2: any) => typeof v1 === typeof v2;
const sameClass = (v1: any, v2: any) => (v1.constructor && v2 instanceof v1.constructor) || (v2.constructor && v1 instanceof v2.constructor);
const sameLength = (v1: { length: number }, v2: { length: number }) => v1.length === v2.length;
function checkIdentityOf(v1: any, v2: any) {
return v1 === v2;
}
function checkSignificantFieldsOf(o1: object, o2: object) {
const
fieldsOfObject1 = significantFieldsOf(o1),
fieldsOfObject2 = significantFieldsOf(o2);
if (! sameLength(fieldsOfObject1, fieldsOfObject2)) {
return false;
}
return fieldsOfObject1.reduce((previousFieldsAreEqual: boolean, field: string) => {
const currentFieldIsEqual = !! o1[field] && !! o2[field] && equal(o1[field], o2[field]);
return previousFieldsAreEqual && currentFieldIsEqual;
}, true);
}
export * from './equal';
export * from './significantFields';
/**
* @access private
*
* @param {object|Array} o
* @returns {string[]}
*/
export function significantFieldsOf(o: { [_: string]: any }) {
return Object.getOwnPropertyNames(o)
.filter(field => typeof o[field] !== 'function')
.sort();
}
+1
-8

@@ -75,3 +75,3 @@ import { JSONObject, NonNullJSONPrimitive, Serialisable } from './types';

*/
equals(another: TinyType): any;
equals(another: TinyType): boolean;
toString(): string;

@@ -107,11 +107,4 @@ /**

* @returns {JSONValue}
*
* @todo should also serialise arrays
*/
toJSON(): JSONObject | NonNullJSONPrimitive;
/**
* @access private
* @returns {string[]} names of significant fields that determine the identity of the object
*/
private significantFields();
}

@@ -14,2 +14,3 @@ "use strict";

var check_1 = require("./check");
var objects_1 = require("./objects");
var predicates_1 = require("./predicates");

@@ -67,2 +68,3 @@ /**

}
// todo: can I make all fields `readonly` without making it a dictionary?
/**

@@ -101,19 +103,7 @@ * @desc Compares two tiny types by value

TinyType.prototype.equals = function (another) {
var _this = this;
if (another === this) {
return true;
}
if (!(another instanceof this.constructor)) {
return false;
}
return this.significantFields().reduce(function (previousFieldsAreEqual, field) {
var currentFieldIsEqual = (_this[field].equals
? _this[field].equals(another[field])
: _this[field] === another[field]);
return previousFieldsAreEqual && currentFieldIsEqual;
}, true);
return objects_1.equal(this, another);
};
TinyType.prototype.toString = function () {
var _this = this;
var fields = this.significantFields().reduce(function (acc, field) {
var fields = objects_1.significantFieldsOf(this).reduce(function (acc, field) {
return acc.concat(field + "=" + _this[field]);

@@ -152,4 +142,2 @@ }, []);

* @returns {JSONValue}
*
* @todo should also serialise arrays
*/

@@ -163,2 +151,4 @@ TinyType.prototype.toJSON = function () {

return value.toJSON();
case value && Array.isArray(value):
return value.map(function (v) { return toJSON(v); });
case value && !isPrimitive(value):

@@ -170,3 +160,3 @@ return JSON.stringify(value);

}
var fields = this.significantFields();
var fields = objects_1.significantFieldsOf(this);
if (fields.length === 1) {

@@ -180,12 +170,2 @@ return toJSON(this[fields[0]]);

};
/**
* @access private
* @returns {string[]} names of significant fields that determine the identity of the object
*/
TinyType.prototype.significantFields = function () {
var _this = this;
return Object.getOwnPropertyNames(this)
.filter(function (field) { return typeof _this[field] !== 'function'; })
.sort();
};
return TinyType;

@@ -192,0 +172,0 @@ }());

@@ -1,1 +0,1 @@

{"version":3,"file":"TinyType.js","sourceRoot":"","sources":["../src/TinyType.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"TinyType.js","sourceRoot":"","sources":["../src/TinyType.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAAgC;AAChC,qCAAuD;AACvD,2CAAyC;AAGzC;;;;;;;;;;;;;;;GAeG;AACH;IACI,MAAM;QAAe,2BAAQ;QACzB,iBAA4B,KAAQ;YAApC,YACI,iBAAO,SAEV;YAH2B,WAAK,GAAL,KAAK,CAAG;YAEhC,aAAK,CAAC,KAAI,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,sBAAS,EAAE,CAAC,CAAC;;QACrD,CAAC;QACL,cAAC;IAAD,CAAC,AALM,CAAc,QAAQ,GAK3B;AACN,CAAC;AAPD,gCAOC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH;IAAA;IAwGA,CAAC;IAtGG,yEAAyE;IAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACH,yBAAM,GAAN,UAAO,OAAiB;QACpB,MAAM,CAAC,eAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,2BAAQ,GAAR;QAAA,iBAMC;QALG,IAAM,MAAM,GAAG,6BAAmB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,UAAC,GAAa,EAAE,KAAa;YACzE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAI,KAAK,SAAI,KAAI,CAAC,KAAK,CAAG,CAAC,CAAC;QACjD,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,MAAM,CAAI,IAAI,CAAC,WAAW,CAAC,IAAI,SAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAG,CAAC;IAC5D,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,yBAAM,GAAN;QAAA,iBAyBC;QAxBG,IAAM,WAAW,GAAG,UAAC,KAAU,IAAK,OAAA,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,EAAvB,CAAuB,CAAC;QAC5D,gBAAgB,KAAU;YACtB,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACX,KAAK,KAAK,IAAI,CAAC,CAAE,KAAK,CAAC,MAAM;oBACzB,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC1B,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;oBAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,MAAM,CAAC,CAAC,CAAC,EAAT,CAAS,CAAC,CAAC;gBACrC,KAAK,KAAK,IAAI,CAAE,WAAW,CAAC,KAAK,CAAC;oBAC9B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACjC;oBACI,MAAM,CAAC,KAAK,CAAC,CAAO,mCAAmC;YAC/D,CAAC;QACL,CAAC;QAED,IAAM,MAAM,GAAG,6BAAmB,CAAC,IAAI,CAAC,CAAC;QAEzC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,KAAK;YAC5B,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC;QACf,CAAC,EAAE,EAAE,CAAqB,CAAC;IAC/B,CAAC;IACL,eAAC;AAAD,CAAC,AAxGD,IAwGC;AAxGqB,4BAAQ"}
{
"name": "tiny-types",
"version": "1.6.1",
"version": "1.7.0",
"description": "A tiny library that brings Tiny Types to JavaScript and TypeScript",

@@ -5,0 +5,0 @@ "main": "lib/index.js",

import { check } from './check';
import { equal, significantFieldsOf } from './objects';
import { isDefined } from './predicates';
import { JSONObject, JSONPrimitive, JSONValue, NonNullJSONPrimitive, Serialisable, Serialised } from './types';
import { JSONObject, JSONValue, NonNullJSONPrimitive, Serialisable, Serialised } from './types';

@@ -51,2 +52,4 @@ /**

// todo: can I make all fields `readonly` without making it a dictionary?
/**

@@ -85,22 +88,7 @@ * @desc Compares two tiny types by value

equals(another: TinyType) {
if (another === this) {
return true;
}
if (! (another instanceof this.constructor)) {
return false;
}
return this.significantFields().reduce((previousFieldsAreEqual: boolean, field: string) => {
const currentFieldIsEqual = (this[field].equals
? this[field].equals(another[field])
: this[field] === another[field]);
return previousFieldsAreEqual && currentFieldIsEqual;
}, true);
return equal(this, another);
}
toString() {
const fields = this.significantFields().reduce((acc: string[], field: string) => {
const fields = significantFieldsOf(this).reduce((acc: string[], field: string) => {
return acc.concat(`${field}=${this[field]}`);

@@ -141,4 +129,2 @@ }, []);

* @returns {JSONValue}
*
* @todo should also serialise arrays
*/

@@ -151,2 +137,4 @@ toJSON(): JSONObject | NonNullJSONPrimitive {

return value.toJSON();
case value && Array.isArray(value):
return value.map(v => toJSON(v));
case value && ! isPrimitive(value):

@@ -159,3 +147,3 @@ return JSON.stringify(value);

const fields = this.significantFields();
const fields = significantFieldsOf(this);

@@ -171,12 +159,2 @@ if (fields.length === 1) {

}
/**
* @access private
* @returns {string[]} names of significant fields that determine the identity of the object
*/
private significantFields(): string[] {
return Object.getOwnPropertyNames(this)
.filter(field => typeof this[field] !== 'function')
.sort();
}
}