
import { createScalar } from "../utilities";

export const RealScalar = createScalar(
  "real", "variable-precision, exact", {
    string ( value, invalid ) {
      if ((/e/iu).test(value)) {
        const number = Number(value);

        if (isNaN(number)) { invalid(); }

        return `${number}`;
      }

      if (!(/[+-]?\d+(\.\d+)?/u).test(value)) { invalid(); }

      return invalid();
    },
    number ( value, invalid ) {
      return isNaN(value) ? invalid() : (`${value}`);
    },
    boolean ( value ) {
      return `${+value}`;
    },
  }
);
