From c774886a2e49829db95896c773ebb1411d567d6a Mon Sep 17 00:00:00 2001 From: barsdeveloper Date: Tue, 23 Nov 2021 21:01:07 +0100 Subject: [PATCH] Integer => IntegerEntity, No more primitive --- dist/ueblueprint.js | 66 ++++++++++++-------------------- js/entity/IntegerEntity.js | 21 ++++++++++ js/entity/TypeInitialization.js | 7 +--- js/entity/primitive/Integer.js | 25 ------------ js/entity/primitive/Primitive.js | 6 --- js/export.js | 2 + js/serialization/Grammar.js | 6 +-- js/serialization/Serializer.js | 4 -- 8 files changed, 52 insertions(+), 85 deletions(-) create mode 100755 js/entity/IntegerEntity.js delete mode 100755 js/entity/primitive/Integer.js delete mode 100755 js/entity/primitive/Primitive.js diff --git a/dist/ueblueprint.js b/dist/ueblueprint.js index 3306729..fc671fc 100644 --- a/dist/ueblueprint.js +++ b/dist/ueblueprint.js @@ -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 }; diff --git a/js/entity/IntegerEntity.js b/js/entity/IntegerEntity.js new file mode 100755 index 0000000..709bb3d --- /dev/null +++ b/js/entity/IntegerEntity.js @@ -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() + } +} diff --git a/js/entity/TypeInitialization.js b/js/entity/TypeInitialization.js index 9157590..35dadd1 100755 --- a/js/entity/TypeInitialization.js +++ b/js/entity/TypeInitialization.js @@ -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 } diff --git a/js/entity/primitive/Integer.js b/js/entity/primitive/Integer.js deleted file mode 100755 index c8f7b18..0000000 --- a/js/entity/primitive/Integer.js +++ /dev/null @@ -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() - } -} diff --git a/js/entity/primitive/Primitive.js b/js/entity/primitive/Primitive.js deleted file mode 100755 index 995cefb..0000000 --- a/js/entity/primitive/Primitive.js +++ /dev/null @@ -1,6 +0,0 @@ -export default class Primitive { - - toString() { - return "Unimplemented for " + this.constructor.name - } -} diff --git a/js/export.js b/js/export.js index 92f4d04..0d6cd6c 100755 --- a/js/export.js +++ b/js/export.js @@ -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 } \ No newline at end of file diff --git a/js/serialization/Grammar.js b/js/serialization/Grammar.js index c2c7d9c..cb7c3eb 100755 --- a/js/serialization/Grammar.js +++ b/js/serialization/Grammar.js @@ -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 diff --git a/js/serialization/Serializer.js b/js/serialization/Serializer.js index 2cb0be9..f85c772 100755 --- a/js/serialization/Serializer.js +++ b/js/serialization/Serializer.js @@ -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) {