You're Invited: Meet the Socket team at BSidesSF and RSAC - April 27 - May 1.RSVP

@algebraic/type

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@algebraic/type - npm Package Compare versions

Comparing version

to
1.0.0-alpha.4

@@ -6,3 +6,3 @@ const { declaration, fNamed, is, getTypename } = require("./declaration");

const fNameRegExp = /([^=\s]+)\s*=>/;
const fNameRegExp = /([^=\s]+)\s*=>/;///(?:^function\s+(?:[^\(\s]*)\(([^\s]+)\))|([^=\s]+)\s*=>/;
const fNameParse = f => fNameRegExp.exec(f + "")[1];

@@ -18,2 +18,4 @@ const fWithDefault = definition => isArray(definition) ?

const GetFieldsSymbol = Symbol("GetFields");
exports.data = declaration(function data (type, fieldDefinitions)

@@ -35,2 +37,4 @@ {

type[GetFieldsSymbol] = () => [];
return { is, create, serialize, deserialize };

@@ -69,2 +73,3 @@ }

type.prototype.toString = function () { return inspect(this) };
type[GetFieldsSymbol] = getChildren;

@@ -78,2 +83,6 @@ const is = value => value instanceof type;

exports.data.fields = function (type)
{
return type[GetFieldsSymbol]().map(([name, [type]]) => [name, type]);
}

@@ -80,0 +89,0 @@ function toSerialize(typename, getChildren)

@@ -15,2 +15,3 @@ const typenameStack = [];

const DeserializeSymbol = Symbol("deserialize");
const KindSymbol = Symbol("kind");
const UUIDSymbol = Symbol("uuid");

@@ -21,35 +22,45 @@

{
return fNamed(f.name, function ([typename])
const kind = fNamed(f.name, function (...args)
{
const typename = toTypename(...args);
typenameStack.push(typename);
const scoped = typenameStack.join(".");
const UUID = generateUUID(scoped, 2);
return fNamed(`[declare ${scoped}]`, function (...args)
{
if (hasOwnProperty.call(types, UUID))
throw TypeError(`Duplicate Type Declaration for ${scoped}`);
const type = types[UUID] = fNamed(scoped, function (...args)
try
{
return create.apply(this, args);
});
if (hasOwnProperty.call(types, UUID))
throw TypeError(`Duplicate Type Declaration for ${scoped}`);
type[TypenameSymbol] = scoped;
type[UnscopedTypenameSymbol] = typename;
type[InspectSymbol] = () => `[${f.name} ${scoped}]`;
type[UUIDSymbol] = UUID;
type.toString = () => `[${f.name} ${scoped}]`;
const type = types[UUID] = fNamed(scoped, function (...args)
{
return create.apply(this, args);
});
const { is, create, serialize, deserialize } = f(type, args);
type[TypenameSymbol] = scoped;
type[UnscopedTypenameSymbol] = typename;
type[InspectSymbol] = () => `[${f.name} ${scoped}]`;
type[UUIDSymbol] = UUID;
type.toString = () => `[${f.name} ${scoped}]`;
type[IsSymbol] = is;
type[SerializeSymbol] = serialize;
type[DeserializeSymbol] = deserialize;
const { is, create, serialize, deserialize } = f(type, args);
typenameStack.pop();
type[IsSymbol] = is;
type[SerializeSymbol] = serialize;
type[DeserializeSymbol] = deserialize;
type[KindSymbol] = kind;
return type;
return type;
}
finally
{
typenameStack.pop();
}
});
});
return kind;
}

@@ -61,2 +72,10 @@

function toTypename(strings, ...args)
{
const asTypename = object => !!object ? getTypename(object) : object;
return args.reduce((typename, arg, index) =>
typename + asTypename(arg) + strings[index + 1], strings[0]);
}
function declare({ is, create, typename, unscopedTypename, serialize, deserialize })

@@ -69,2 +88,3 @@ {

type[UUIDSymbol] = generateUUID(typename, 2);
type[TypenameSymbol] = typename;

@@ -131,2 +151,7 @@ type[UnscopedTypenameSymbol] = unscopedTypename || typename;

module.exports.getKind = function (type)
{
return type[KindSymbol] || false;
}
module.exports.fNamed = fNamed;

@@ -133,0 +158,0 @@

{
"name": "@algebraic/type",
"version": "1.0.0-alpha.3",
"version": "1.0.0-alpha.4",
"description": "",

@@ -5,0 +5,0 @@ "main": "type.js",

@@ -16,35 +16,52 @@ const { declaration, getTypename, fNamed } = require("./declaration");

exports.boolean = primitive `boolean` (
[value => value ? 1 : 0, true],
serialized => !!serialized );
const specials = { n: NaN, z: -0, s: -Infinity, b: Infinity };
exports.number = primitive `number` (
[value =>
// NaN
value !== value ? "n" :
// -0
value === 0 && 1 / value === -Infinity ? "z" :
// -Infinity
value === -Infinity ? "s" :
// Infinity
value === Infinity ? "b" : value, true],
serialized => specials[serialized] || serialized );
const primitives =
{
boolean: primitive `boolean` (
[value => value ? 1 : 0, true],
serialized => !!serialized ),
exports.string = primitive `string` (
[value => value, false],
serialized => serialized);
number: primitive `number` (
[value =>
// NaN
value !== value ? "n" :
// -0
value === 0 && 1 / value === -Infinity ? "z" :
// -Infinity
value === -Infinity ? "s" :
// Infinity
value === Infinity ? "b" : value, true],
serialized => specials[serialized] || serialized ),
exports.regexp = primitive `regexp` (
[value => [value.source,
(value.global ? "g" : "") +
(value.multiline ? "m" : "") +
(value.ignoreCase ? "i" : "") +
(value.sticky ? "y" : "") +
(value.unicode ? "u" : "")], false],
serialized => RegExp(...serialized));
string: primitive `string` (
[value => value, false],
serialized => serialized),
exports.ftype = primitive `function` (
[value => { throw TypeError("Cannot serialize function") }, false],
serialized => { throw TypeError("Cannot deserialize function") } );
regexp: primitive `regexp` (
[value => [value.source,
(value.global ? "g" : "") +
(value.multiline ? "m" : "") +
(value.ignoreCase ? "i" : "") +
(value.sticky ? "y" : "") +
(value.unicode ? "u" : "")], false],
serialized => RegExp(...serialized)),
ftype: primitive `function` (
[value => { throw TypeError("Cannot serialize function") }, false],
serialized => { throw TypeError("Cannot deserialize function") } )
}
URL.prototype.equals = function (rhs)
{
return this === rhs || this.hashCode() === rhs.hashCode();
}
URL.prototype.hashCode = function ()
{
return this.href;
}
primitives.primitives = { ...primitives };
module.exports = primitives;

@@ -9,3 +9,4 @@

...require("./serialize"),
...require("./deserialize")
...require("./deserialize"),
...require("./parameterized")
};

@@ -15,3 +15,5 @@ const { fNamed, declaration, getTypename, getUnscopedTypename, is } = require("./declaration");

const ComponentsSymbol = Symbol("Components");
exports.union = declaration(function union (type, declarations)

@@ -41,5 +43,12 @@ {

type[ComponentsSymbol] = types;
return { is: unionIs, create, serialize, deserialize };
});
exports.union.components = function (type)
{
return type[ComponentsSymbol];
}
/*

@@ -46,0 +55,0 @@ const fCreate = (f, properties) =>