Integer => IntegerEntity, No more primitive

This commit is contained in:
barsdeveloper
2021-11-23 21:01:07 +01:00
parent 6a3e2cc36f
commit c774886a2e
8 changed files with 52 additions and 85 deletions

66
dist/ueblueprint.js vendored
View File

@@ -114,49 +114,15 @@ class Context {
}
}
class Primitive {
toString() {
return "Unimplemented for " + this.constructor.name
}
}
class Integer extends Primitive {
constructor(value) {
super();
// Using constructor equality and not instanceof in order to consider both primitives and objects
if (value?.constructor === String) {
value = Number(value);
}
if (value?.constructor === Number) {
value = Math.round(value);
}
/** @type {number} */
this.value = value;
}
valueOf() {
this.value;
}
toString() {
return this.value.toString()
}
}
class TypeInitialization {
static sanitize(value) {
if (!(value instanceof Object)) {
return value // Is already primitive
}
if (value instanceof Boolean || value instanceof Integer || value instanceof Number) {
if (value instanceof Boolean || value instanceof Number || value instanceof String) {
return value.valueOf()
}
if (value instanceof String) {
return value.toString()
}
return value
}
@@ -1291,6 +1257,26 @@ class GraphNode extends SelectableDraggable {
customElements.define('u-node', GraphNode);
class IntegerEntity extends Entity {
static attributes = {
value: Number
}
getAttributes() {
return IntegerEntity.attributes
}
constructor(options = {}) {
super(options);
this.value = Math.round(value);
}
toString() {
return this.value.toString()
}
}
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
function getDefaultExportFromCjs (x) {
@@ -1316,7 +1302,7 @@ class Grammar {
None = _ => P.string("None").map(_ => new ObjectReferenceEntity({ type: "None", path: "" })).desc("none")
Boolean = _ => P.alt(P.string("True"), P.string("False")).map(v => v === "True" ? true : false).desc("either True or False")
Number = _ => P.regex(/[0-9]+(?:\.[0-9]+)?/).map(Number).desc("a number")
Integer = _ => P.regex(/[0-9]+/).map(v => new Integer(v)).desc("an integer")
Integer = _ => P.regex(/[0-9]+/).map(v => new IntegerEntity({ value: v })).desc("an integer")
String = _ => P.regex(/(?:[^"\\]|\\")*/).wrap(P.string('"'), P.string('"')).desc('string (with possibility to escape the quote using \")')
Word = _ => P.regex(/[a-zA-Z]+/).desc("a word")
Guid = _ => P.regex(/[0-9a-zA-Z]{32}/).map(v => new GuidEntity({ value: v })).desc("32 digit hexadecimal (accepts all the letters for safety) value")
@@ -1371,7 +1357,7 @@ class Grammar {
return r.Boolean
case Number:
return r.Number
case Integer:
case IntegerEntity:
return r.Integer
case String:
return r.String
@@ -1512,9 +1498,6 @@ class Serializer {
if (value instanceof Entity) {
return serialize(value)
}
if (value instanceof Primitive) {
return value.toString()
}
}
subWrite(key, object) {
@@ -2221,6 +2204,7 @@ SerializerFactory.registerSerializer(
))
);
SerializerFactory.registerSerializer(PathSymbolEntity, new ToStringSerializer(PathSymbolEntity));
SerializerFactory.registerSerializer(GuidEntity, new ToStringSerializer(GuidEntity));
SerializerFactory.registerSerializer(GuidEntity, new ToStringSerializer(GuidEntity));
SerializerFactory.registerSerializer(IntegerEntity, new ToStringSerializer(IntegerEntity));
export { Blueprint, GraphLink, GraphNode };

21
js/entity/IntegerEntity.js Executable file
View File

@@ -0,0 +1,21 @@
import Entity from "./Entity"
export default class IntegerEntity extends Entity {
static attributes = {
value: Number
}
getAttributes() {
return IntegerEntity.attributes
}
constructor(options = {}) {
super(options)
this.value = Math.round(value)
}
toString() {
return this.value.toString()
}
}

View File

@@ -1,17 +1,12 @@
import Integer from "./primitive/Integer"
export default class TypeInitialization {
static sanitize(value) {
if (!(value instanceof Object)) {
return value // Is already primitive
}
if (value instanceof Boolean || value instanceof Integer || value instanceof Number) {
if (value instanceof Boolean || value instanceof Number || value instanceof String) {
return value.valueOf()
}
if (value instanceof String) {
return value.toString()
}
return value
}

View File

@@ -1,25 +0,0 @@
import Primitive from "./Primitive"
export default class Integer extends Primitive {
constructor(value) {
super()
// Using constructor equality and not instanceof in order to consider both primitives and objects
if (value?.constructor === String) {
value = Number(value)
}
if (value?.constructor === Number) {
value = Math.round(value)
}
/** @type {number} */
this.value = value
}
valueOf() {
this.value
}
toString() {
return this.value.toString()
}
}

View File

@@ -1,6 +0,0 @@
export default class Primitive {
toString() {
return "Unimplemented for " + this.constructor.name
}
}

View File

@@ -5,6 +5,7 @@ import GeneralSerializer from "./serialization/GeneralSerializer"
import GraphLink from "./graph/GraphLink"
import GraphNode from "./graph/GraphNode"
import GuidEntity from "./entity/GuidEntity"
import IntegerEntity from "./entity/IntegerEntity"
import LocalizedTextEntity from "./entity/LocalizedTextEntity"
import ObjectEntity from "./entity/ObjectEntity"
import ObjectReferenceEntity from "./entity/ObjectReferenceEntity"
@@ -47,5 +48,6 @@ SerializerFactory.registerSerializer(
)
SerializerFactory.registerSerializer(PathSymbolEntity, new ToStringSerializer(PathSymbolEntity))
SerializerFactory.registerSerializer(GuidEntity, new ToStringSerializer(GuidEntity))
SerializerFactory.registerSerializer(IntegerEntity, new ToStringSerializer(IntegerEntity))
export { Blueprint as Blueprint, GraphNode as GraphNode, GraphLink as GraphLink }

View File

@@ -1,6 +1,6 @@
import FunctionReferenceEntity from "../entity/FunctionReferenceEntity"
import GuidEntity from "../entity/GuidEntity"
import Integer from "../entity/primitive/Integer"
import IntegerEntity from "../entity/IntegerEntity"
import LocalizedTextEntity from "../entity/LocalizedTextEntity"
import ObjectEntity from "../entity/ObjectEntity"
import ObjectReferenceEntity from "../entity/ObjectReferenceEntity"
@@ -21,7 +21,7 @@ export default class Grammar {
None = _ => P.string("None").map(_ => new ObjectReferenceEntity({ type: "None", path: "" })).desc("none")
Boolean = _ => P.alt(P.string("True"), P.string("False")).map(v => v === "True" ? true : false).desc("either True or False")
Number = _ => P.regex(/[0-9]+(?:\.[0-9]+)?/).map(Number).desc("a number")
Integer = _ => P.regex(/[0-9]+/).map(v => new Integer(v)).desc("an integer")
Integer = _ => P.regex(/[0-9]+/).map(v => new IntegerEntity({ value: v })).desc("an integer")
String = _ => P.regex(/(?:[^"\\]|\\")*/).wrap(P.string('"'), P.string('"')).desc('string (with possibility to escape the quote using \")')
Word = _ => P.regex(/[a-zA-Z]+/).desc("a word")
Guid = _ => P.regex(/[0-9a-zA-Z]{32}/).map(v => new GuidEntity({ value: v })).desc("32 digit hexadecimal (accepts all the letters for safety) value")
@@ -76,7 +76,7 @@ export default class Grammar {
return r.Boolean
case Number:
return r.Number
case Integer:
case IntegerEntity:
return r.Integer
case String:
return r.String

View File

@@ -1,7 +1,6 @@
import Entity from "../entity/Entity"
import Grammar from "./Grammar"
import Parsimmon from "parsimmon"
import Primitive from "../entity/primitive/Primitive"
import SerializerFactory from "./SerializerFactory"
import TypeInitialization from "../entity/TypeInitialization"
import Utility from "../Utility"
@@ -41,9 +40,6 @@ export default class Serializer {
if (value instanceof Entity) {
return serialize(value)
}
if (value instanceof Primitive) {
return value.toString()
}
}
subWrite(key, object) {