UNPKG

@cloudquery/plugin-sdk-javascript

Version:

This is the high-level package to use for developing CloudQuery plugins in JavaScript

65 lines 1.97 kB
import { Int64 as ArrowInt64 } from '@apache-arrow/esnext-esm'; import { bigIntToNumber } from '@apache-arrow/esnext-esm/util/bigint.js'; import { FormatError } from '../errors/errors.js'; import { isInvalid, NULL_VALUE } from './util.js'; export class Int64 { _valid = false; _value = null; constructor(v) { this.value = v; return this; } get dataType() { return new ArrowInt64(); } get valid() { return this._valid; } get value() { if (!this._valid) { return null; } return this._value; } set value(value) { if (isInvalid(value)) { this._valid = false; return; } if (value instanceof Int64) { this._valid = value.valid; this._value = value.value; return; } if (typeof value === 'bigint') { if (!this.validInt64(value)) { throw new TypeError(`Value '${value}' cannot be safely converted to Int64`); } this._value = value; this._valid = true; return; } if (typeof value === 'number') { const v = BigInt(value); if (!this.validInt64(v)) { throw new TypeError(`Value '${value}' cannot be safely converted to Int64`); } this._value = v; this._valid = true; return; } throw new FormatError(`Unable to set Int64 from value`, { props: { value } }); } toString() { if (this._valid) { return String(this._value); } return NULL_VALUE; } validInt64(n) { const MIN_INT64 = BigInt('-9223372036854775808'); // -2^63 const MAX_INT64 = BigInt('9223372036854775807'); // 2^63 - 1 return Number.isSafeInteger(bigIntToNumber(n)) && n >= MIN_INT64 && n <= MAX_INT64; } } //# sourceMappingURL=int64.js.map