terriajs
Version:
Geospatial data visualization platform.
50 lines • 1.71 kB
JavaScript
import Result from "../../Core/Result";
import TerriaError from "../../Core/TerriaError";
import Trait from "../Trait";
export default function primitiveTrait(options) {
return function (target, propertyKey) {
const constructor = target.constructor;
if (!constructor.traits) {
constructor.traits = {};
}
constructor.traits[propertyKey] = new PrimitiveTrait(propertyKey, options, constructor);
};
}
export class PrimitiveTrait extends Trait {
type;
isNullable;
constructor(id, options, parent) {
super(id, options, parent);
this.type = options.type;
this.isNullable = options.isNullable || false;
}
getValue(model) {
const strataTopToBottom = model.strataTopToBottom;
for (const stratum of strataTopToBottom.values()) {
const value = stratum[this.id];
if (value !== undefined) {
return value;
}
}
return undefined;
}
fromJson(_model, _stratumName, jsonValue) {
if (typeof jsonValue !== this.type &&
(!this.isNullable || jsonValue !== null)) {
return Result.error(new TerriaError({
title: "Invalid property",
message: `Property ${this.id} is expected to be of type ${this.type} but instead it is of type ${typeof jsonValue}.`
}));
}
return new Result(jsonValue);
}
toJson(value) {
return value;
}
isSameType(trait) {
return (trait instanceof PrimitiveTrait &&
trait.type === this.type &&
trait.isNullable === this.isNullable);
}
}
//# sourceMappingURL=primitiveTrait.js.map