Files
ueblueprint/js/serialization/initializeSerializerFactory.js
2024-09-14 22:16:06 +02:00

57 lines
2.8 KiB
JavaScript
Executable File

import Parsernostrum from "parsernostrum"
import AlternativesEntity from "../entity/AlternativesEntity.js"
import ArrayEntity from "../entity/ArrayEntity.js"
import BooleanEntity from "../entity/BooleanEntity.js"
import FormatTextEntity from "../entity/FormatTextEntity.js"
import GuidEntity from "../entity/GuidEntity.js"
import IEntity from "../entity/IEntity.js"
import InvariantTextEntity from "../entity/InvariantTextEntity.js"
import LinearColorEntity from "../entity/LinearColorEntity.js"
import LocalizedTextEntity from "../entity/LocalizedTextEntity.js"
import NullEntity from "../entity/NullEntity.js"
import NumberEntity from "../entity/NumberEntity.js"
import ObjectReferenceEntity from "../entity/ObjectReferenceEntity.js"
import PinReferenceEntity from "../entity/PinReferenceEntity.js"
import RotatorEntity from "../entity/RotatorEntity.js"
import StringEntity from "../entity/StringEntity.js"
import SymbolEntity from "../entity/SymbolEntity.js"
import UnknownKeysEntity from "../entity/UnknownKeysEntity.js"
import Vector2DEntity from "../entity/Vector2DEntity.js"
import Vector4DEntity from "../entity/Vector4DEntity.js"
import VectorEntity from "../entity/VectorEntity.js"
import Grammar from "./Grammar.js"
export default function initializeSerializerFactory() {
IEntity.unknownEntityGrammar =
Parsernostrum.alt(
// Remember to keep the order, otherwise parsing might fail
BooleanEntity.grammar,
GuidEntity.grammar,
Parsernostrum.str("None").map(() => ObjectReferenceEntity.createNoneInstance()),
NullEntity.grammar,
NumberEntity.grammar,
Parsernostrum.alt(
ObjectReferenceEntity.fullReferenceGrammar,
Parsernostrum.regArray(new RegExp(
// @ts-expect-error
`"(${Grammar.Regex.Path.source})'(${Grammar.Regex.Path.source}|${Grammar.symbol.getParser().regexp.source})'"`
)).map(([_0, type, path]) => new ObjectReferenceEntity(type, path, (t, p) => `"${t}'${p}'"`))
),
StringEntity.grammar,
LocalizedTextEntity.grammar,
InvariantTextEntity.grammar,
FormatTextEntity.grammar,
PinReferenceEntity.grammar,
Vector4DEntity.grammar,
VectorEntity.grammar,
Vector2DEntity.grammar,
RotatorEntity.grammar,
LinearColorEntity.grammar,
UnknownKeysEntity.grammar,
SymbolEntity.grammar,
ArrayEntity.of(PinReferenceEntity).grammar,
ArrayEntity.of(AlternativesEntity.accepting(NumberEntity, StringEntity, SymbolEntity)).grammar,
Parsernostrum.lazy(() => ArrayEntity.createGrammar(IEntity.unknownEntityGrammar)),
)
}