export function parseEntityProperty()

in src/table/entity/EntityProperty.ts [113:215]


export function parseEntityProperty(
  name: string,
  value: any,
  edmType?: EdmType | string,
  isSystemProperty: boolean = false
): EntityProperty {
  if (edmType !== undefined) {
    // Validate values per input EdmType
    const type = typeof edmType === "string" ? getEdmType(edmType) : edmType;
    switch (type) {
      case EdmType.Binary:
        // EdmBinary.validate(value);
        return new EntityProperty(
          name,
          value,
          new EdmBinary(value),
          isSystemProperty
        );
      case EdmType.Boolean:
        // EdmBoolean.validate(value);
        return new EntityProperty(
          name,
          value,
          new EdmBoolean(value),
          isSystemProperty
        );
      case EdmType.DateTime:
        EdmDateTime.validate(value);
        return new EntityProperty(
          name,
          value,
          new EdmDateTime(value),
          isSystemProperty
        );
      case EdmType.Double:
        const dblval = EdmDouble.validate(value);
        return new EntityProperty(
          name,
          dblval,
          new EdmDouble(dblval),
          isSystemProperty
        );
      case EdmType.Guid:
        EdmGuid.validate(value);
        return new EntityProperty(
          name,
          value,
          new EdmGuid(value),
          isSystemProperty
        );
      case EdmType.Int32:
        EdmInt32.validate(value);
        return new EntityProperty(
          name,
          value,
          new EdmInt32(value),
          isSystemProperty
        );
      case EdmType.Int64:
        EdmInt64.validate(value);
        return new EntityProperty(
          name,
          value,
          new EdmInt64(value),
          isSystemProperty
        );
      case EdmType.String:
        EdmString.validate(value);
        return new EntityProperty(
          name,
          value,
          new EdmString(value),
          isSystemProperty
        );
      default:
        throw TypeError(`Invalid EdmType ${type}.`);
    }
  } else {
    // Extract type from value type
    switch (typeof value) {
      case "string":
        EdmString.validate(value);
        return new EntityProperty(name, value, new EdmString(value));
      case "number":
        if (Number.isInteger(value)) {
          EdmInt32.validate(value);
          return new EntityProperty(name, value, new EdmInt32(value));
        } else {
          EdmDouble.validate(value);
          return new EntityProperty(name, value, new EdmDouble(value));
        }
      case "boolean":
        EdmBoolean.validate(value);
        return new EntityProperty(name, value, new EdmBoolean(value));
      case "object":
        if (value === null) {
          return new EntityProperty(name, value, new EdmNull(value));
        }
      default:
        throw TypeError(`Invalid value when parsing EdmType ${value}.`);
    }
  }
}