@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
173 lines (171 loc) • 6.3 kB
JavaScript
;
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
Object.defineProperty(exports, "__esModule", { value: true });
const Log_1 = require("../core/Log");
const Utilities_1 = require("../core/Utilities");
const ICondition_1 = require("./ICondition");
const IField_1 = require("./IField");
class FieldUtilities {
static getFieldValueAsBoolean(name, defaultValue, container) {
let value = undefined;
if (container.dataPropertyObject !== undefined) {
const prop = container.dataPropertyObject.getProperty(name);
if (prop !== undefined) {
value = prop.value;
}
}
if (container.getsetPropertyObject !== undefined) {
value = container.getsetPropertyObject.getProperty(name);
}
if (container.directObject !== undefined) {
value = container.directObject[name];
}
if (value === undefined) {
return defaultValue;
}
if (typeof value === "boolean") {
return value;
}
else if (typeof value === "number") {
if (value === 0) {
return false;
}
else {
return true;
}
}
else if (typeof value === "string") {
if (value === "false") {
return false;
}
else {
return true;
}
}
return defaultValue;
}
static getFieldValue(field, container) {
let curVal = undefined;
const dataObj = container.dataPropertyObject;
if (dataObj !== undefined) {
let prop = dataObj.getProperty(field.id);
if (prop === undefined && field.altId !== undefined) {
prop = dataObj.getProperty(field.altId);
}
if (prop !== undefined) {
curVal = prop.value;
}
}
const gsObj = container.getsetPropertyObject;
if (gsObj !== undefined) {
if (field.id === "__scalar") {
const res = gsObj.getBaseValue();
if (typeof res === "object") {
return undefined;
}
return res;
}
curVal = gsObj.getProperty(field.id);
if (curVal === undefined && field.altId !== undefined) {
curVal = gsObj.getProperty(field.altId);
}
}
const dirObj = container.directObject;
if (dirObj !== undefined) {
if (field.id === "__scalar") {
if (typeof dirObj === "object") {
return undefined;
}
return dirObj;
}
curVal = dirObj[field.id];
}
return curVal;
}
static getFieldTitle(field) {
let title = field.id;
if (field.title !== undefined) {
title = field.title;
}
else {
title = Utilities_1.default.humanifyMinecraftName(title);
}
if (title === undefined) {
title = "Untitled";
}
return title;
}
static getFieldById(id, form) {
const fields = form.fields;
for (let i = 0; i < fields.length; i++) {
const field = fields[i];
if (field.id === id) {
return field;
}
}
return undefined;
}
static getStringKeyedFieldType(fieldType) {
switch (fieldType) {
case IField_1.FieldDataType.string:
return IField_1.FieldDataType.keyedStringCollection;
case IField_1.FieldDataType.number:
return IField_1.FieldDataType.keyedNumberCollection;
case IField_1.FieldDataType.stringArray:
return IField_1.FieldDataType.keyedStringArrayCollection;
case IField_1.FieldDataType.numberArray:
return IField_1.FieldDataType.keyedNumberArrayCollection;
case IField_1.FieldDataType.boolean:
return IField_1.FieldDataType.keyedBooleanCollection;
case IField_1.FieldDataType.object:
return IField_1.FieldDataType.keyedObjectCollection;
}
return fieldType;
}
static evaluate(form, conditions, container, defaultField) {
for (let condition of conditions) {
let field;
if (condition.field) {
field = FieldUtilities.getFieldById(condition.field, form);
}
if (!field && defaultField) {
field = defaultField;
}
if (!field) {
Log_1.default.fail("Could not find field '" + condition.field + "'");
return false;
}
const actualVal = FieldUtilities.getFieldValue(field, container);
if (condition.comparison) {
const comp = condition.comparison.toLowerCase();
if (comp === ICondition_1.ComparisonType.equals) {
if (condition.value !== undefined && actualVal !== condition.value) {
return false;
}
if (condition.anyValues !== undefined) {
let foundMatch = false;
for (const val of condition.anyValues) {
if (val === actualVal) {
foundMatch = true;
}
}
if (!foundMatch) {
return false;
}
}
}
else if (comp === ICondition_1.ComparisonType.isDefined && (actualVal === undefined || actualVal === null)) {
return false;
}
else if (comp === ICondition_1.ComparisonType.isNonEmpty &&
(actualVal === undefined || actualVal === null || (typeof actualVal === "string" && actualVal.length <= 0))) {
return false;
}
}
}
return true;
}
}
exports.default = FieldUtilities;
//# sourceMappingURL=../maps/dataform/FieldUtilities.js.map