Various fixes

This commit is contained in:
barsdeveloper
2021-10-27 19:27:19 +02:00
parent 56c23fc192
commit 418630255e
41 changed files with 2401 additions and 2337 deletions

154
js/serialization/Serializer.js Normal file → Executable file
View File

@@ -1,82 +1,72 @@
import Grammar from "./Grammar"
import Guid from "../entity/primitive/Guid"
import ObjectReference from "../entity/primitive/ObjectReference"
import Parsimmon from "parsimmon"
import TypeInitialization from "../entity/TypeInitialization"
import Utility from "../Utility"
export default class Serializer {
static grammar = Parsimmon.createLanguage(new Grammar())
writeValue(value) {
if (value === null) {
return "()"
}
switch (value?.constructor) {
case Function:
return this.writeValue(value())
case Boolean:
return Utility.FirstCapital(value.toString())
case ObjectReference:
case Guid:
return value.toString()
case String:
return `"${value}"`
}
}
/**
*
* @param {String[]} prefix
* @param {Object} object
* @param {String} separator
* @returns
*/
subWrite(key, object, separator = "\n", prefix = "") {
let result = ""
let fullKey = key.concat("")
const last = fullKey.length - 1
for (const property in object) {
fullKey[last] = property
const value = object[property]
if (object[property]?.constructor === Object) {
// Recursive call when finding an object
result += this.subWrite(fullKey, value, separator, prefix)
} else if (this.showProperty(fullKey, value)) {
result += prefix + fullKey.join(".") + "=" + this.writeValue(value) + separator
}
}
return result
}
getAttributes() {
return PinEntity.attributes
}
showProperty(attributeKey, attributeValue) {
const attributes = this.getAttributes()
const attribute = Utility.objectGet(attributes, attributeKey)
if (attribute instanceof TypeInitialization) {
return !Utility.equals(attribute.value, attributeValue) || attribute.showDefault
}
return true
}
/**
*
* @param {String} value
*/
read(value) {
}
/**
* Returns a string representing the object (serialization)
* @param {*} object
* @returns The serialized string
*/
write(object) {
return ''
}
}
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"
export default class Serializer {
static grammar = Parsimmon.createLanguage(new Grammar())
constructor(entityType, prefix = "", separator = ",", trailingSeparator = false) {
this.entityType = entityType
this.prefix = prefix
this.separator = separator
this.trailingSeparator = trailingSeparator
}
writeValue(value) {
if (value === null) {
return "()"
}
switch (value?.constructor) {
case Function:
return this.writeValue(value())
case Boolean:
return Utility.FirstCapital(value.toString())
case Number:
return value.toString()
case String:
return `"${value}"`
}
if (value instanceof Entity) {
return SerializerFactory.getSerializer(Utility.getType(value)).write(value)
}
if (value instanceof Primitive) {
return value.toString()
}
}
subWrite(key, object) {
let result = ""
let fullKey = key.concat("")
const last = fullKey.length - 1
for (const property in object) {
fullKey[last] = property
const value = object[property]
if (object[property]?.constructor === Object) {
// Recursive call when finding an object
result += this.subWrite(fullKey, value, this.prefix, this.separator)
} else if (this.showProperty(fullKey, value)) {
result += (result.length ? this.separator : "") + this.prefix + fullKey.join(".") + "=" + this.writeValue(value)
}
}
if (this.trailingSeparator && result.length) {
// append separator at the end if asked and there was printed content
result += this.separator
}
return result
}
showProperty(attributeKey, attributeValue) {
const attributes = this.entityType.attributes
const attribute = Utility.objectGet(attributes, attributeKey)
if (attribute instanceof TypeInitialization) {
return !Utility.equals(attribute.value, attributeValue) || attribute.showDefault
}
return true
}
}