@cran/lib.gql.core
Version:
GQL Core Functionality
40 lines (39 loc) • 1.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Int8Scalar = exports.Int4Scalar = exports.Int2Scalar = void 0;
const utilities_1 = require("../utilities");
function castInt(value) {
switch (typeof value) {
case "string":
if ((/e/iu).test(value)) {
// eslint-disable-next-line no-param-reassign
value = `${Number(value)}`;
}
return value.replace(/\.\d*$/u, "");
case "number":
return value | 0;
default:
throw new Error("invariant");
}
}
function createAsInt(bits) {
function asInt(value, invalid) {
const int = castInt(value);
const bigint = BigInt(int);
const clamped = BigInt.asIntN(bits, bigint);
if (bigint !== clamped) {
return invalid("range");
}
return `${int}`;
}
return {
string: asInt,
number: asInt,
boolean(value) {
return `${+value}`;
},
};
}
exports.Int2Scalar = (0, utilities_1.createScalar)("int2", "small-range integer", createAsInt(16));
exports.Int4Scalar = (0, utilities_1.createScalar)("int4", "integer", createAsInt(32));
exports.Int8Scalar = (0, utilities_1.createScalar)("int8", "large-range integer", createAsInt(64));