Sindbad~EG File Manager
"use strict";
const _ = require("lodash");
const wkx = require("wkx");
module.exports = (BaseTypes) => {
const warn = BaseTypes.ABSTRACT.warn.bind(void 0, "http://www.postgresql.org/docs/9.4/static/datatype.html");
function removeUnsupportedIntegerOptions(dataType) {
if (dataType._length || dataType.options.length || dataType._unsigned || dataType._zerofill) {
warn(`PostgresSQL does not support '${dataType.key}' with LENGTH, UNSIGNED or ZEROFILL. Plain '${dataType.key}' will be used instead.`);
dataType._length = void 0;
dataType.options.length = void 0;
dataType._unsigned = void 0;
dataType._zerofill = void 0;
}
}
BaseTypes.UUID.types.postgres = ["uuid"];
BaseTypes.CIDR.types.postgres = ["cidr"];
BaseTypes.INET.types.postgres = ["inet"];
BaseTypes.MACADDR.types.postgres = ["macaddr"];
BaseTypes.TSVECTOR.types.postgres = ["tsvector"];
BaseTypes.JSON.types.postgres = ["json"];
BaseTypes.JSONB.types.postgres = ["jsonb"];
BaseTypes.TIME.types.postgres = ["time"];
class DATEONLY extends BaseTypes.DATEONLY {
_stringify(value, options) {
if (value === Infinity) {
return "Infinity";
}
if (value === -Infinity) {
return "-Infinity";
}
return super._stringify(value, options);
}
_sanitize(value, options) {
if ((!options || options && !options.raw) && value !== Infinity && value !== -Infinity) {
if (typeof value === "string") {
const lower = value.toLowerCase();
if (lower === "infinity") {
return Infinity;
}
if (lower === "-infinity") {
return -Infinity;
}
}
return super._sanitize(value);
}
return value;
}
static parse(value) {
if (value === "infinity") {
return Infinity;
}
if (value === "-infinity") {
return -Infinity;
}
return value;
}
}
BaseTypes.DATEONLY.types.postgres = ["date"];
class DECIMAL extends BaseTypes.DECIMAL {
static parse(value) {
return value;
}
}
BaseTypes.DECIMAL.types.postgres = ["numeric"];
class STRING extends BaseTypes.STRING {
toSql() {
if (this._binary) {
return "BYTEA";
}
return super.toSql();
}
}
BaseTypes.STRING.types.postgres = ["varchar"];
class TEXT extends BaseTypes.TEXT {
toSql() {
if (this._length) {
warn("PostgreSQL does not support TEXT with options. Plain `TEXT` will be used instead.");
this._length = void 0;
}
return "TEXT";
}
}
BaseTypes.TEXT.types.postgres = ["text"];
class CITEXT extends BaseTypes.CITEXT {
static parse(value) {
return value;
}
}
BaseTypes.CITEXT.types.postgres = ["citext"];
class CHAR extends BaseTypes.CHAR {
toSql() {
if (this._binary) {
return "BYTEA";
}
return super.toSql();
}
}
BaseTypes.CHAR.types.postgres = ["char", "bpchar"];
class BOOLEAN extends BaseTypes.BOOLEAN {
toSql() {
return "BOOLEAN";
}
_sanitize(value) {
if (value !== null && value !== void 0) {
if (Buffer.isBuffer(value) && value.length === 1) {
value = value[0];
}
if (typeof value === "string") {
return ["true", "t"].includes(value) ? true : ["false", "f"].includes(value) ? false : value;
}
if (typeof value === "number") {
return value === 1 ? true : value === 0 ? false : value;
}
}
return value;
}
}
BOOLEAN.parse = BOOLEAN.prototype._sanitize;
BaseTypes.BOOLEAN.types.postgres = ["bool"];
class DATE extends BaseTypes.DATE {
toSql() {
return "TIMESTAMP WITH TIME ZONE";
}
validate(value) {
if (value !== Infinity && value !== -Infinity) {
return super.validate(value);
}
return true;
}
_stringify(value, options) {
if (value === Infinity) {
return "Infinity";
}
if (value === -Infinity) {
return "-Infinity";
}
return super._stringify(value, options);
}
_sanitize(value, options) {
if ((!options || options && !options.raw) && !(value instanceof Date) && !!value && value !== Infinity && value !== -Infinity) {
if (typeof value === "string") {
const lower = value.toLowerCase();
if (lower === "infinity") {
return Infinity;
}
if (lower === "-infinity") {
return -Infinity;
}
}
return new Date(value);
}
return value;
}
}
BaseTypes.DATE.types.postgres = ["timestamptz"];
class TINYINT extends BaseTypes.TINYINT {
constructor(length) {
super(length);
removeUnsupportedIntegerOptions(this);
}
}
BaseTypes.TINYINT.types.postgres = ["int2"];
class SMALLINT extends BaseTypes.SMALLINT {
constructor(length) {
super(length);
removeUnsupportedIntegerOptions(this);
}
}
BaseTypes.SMALLINT.types.postgres = ["int2"];
class INTEGER extends BaseTypes.INTEGER {
constructor(length) {
super(length);
removeUnsupportedIntegerOptions(this);
}
}
INTEGER.parse = function parse(value) {
return parseInt(value, 10);
};
BaseTypes.INTEGER.types.postgres = ["int4"];
class BIGINT extends BaseTypes.BIGINT {
constructor(length) {
super(length);
removeUnsupportedIntegerOptions(this);
}
}
BaseTypes.BIGINT.types.postgres = ["int8"];
class REAL extends BaseTypes.REAL {
constructor(length) {
super(length);
removeUnsupportedIntegerOptions(this);
}
}
BaseTypes.REAL.types.postgres = ["float4"];
class DOUBLE extends BaseTypes.DOUBLE {
constructor(length) {
super(length);
removeUnsupportedIntegerOptions(this);
}
}
BaseTypes.DOUBLE.types.postgres = ["float8"];
class FLOAT extends BaseTypes.FLOAT {
constructor(length, decimals) {
super(length, decimals);
if (this._decimals) {
warn("PostgreSQL does not support FLOAT with decimals. Plain `FLOAT` will be used instead.");
this._length = void 0;
this.options.length = void 0;
this._decimals = void 0;
}
if (this._unsigned) {
warn("PostgreSQL does not support FLOAT unsigned. `UNSIGNED` was removed.");
this._unsigned = void 0;
}
if (this._zerofill) {
warn("PostgreSQL does not support FLOAT zerofill. `ZEROFILL` was removed.");
this._zerofill = void 0;
}
}
}
delete FLOAT.parse;
class BLOB extends BaseTypes.BLOB {
toSql() {
if (this._length) {
warn("PostgreSQL does not support BLOB (BYTEA) with options. Plain `BYTEA` will be used instead.");
this._length = void 0;
}
return "BYTEA";
}
_hexify(hex) {
return `E'\\\\x${hex}'`;
}
}
BaseTypes.BLOB.types.postgres = ["bytea"];
class GEOMETRY extends BaseTypes.GEOMETRY {
toSql() {
let result = this.key;
if (this.type) {
result += `(${this.type}`;
if (this.srid) {
result += `,${this.srid}`;
}
result += ")";
}
return result;
}
static parse(value) {
const b = Buffer.from(value, "hex");
return wkx.Geometry.parse(b).toGeoJSON({ shortCrs: true });
}
_stringify(value, options) {
return `ST_GeomFromGeoJSON(${options.escape(JSON.stringify(value))})`;
}
_bindParam(value, options) {
return `ST_GeomFromGeoJSON(${options.bindParam(value)})`;
}
}
BaseTypes.GEOMETRY.types.postgres = ["geometry"];
class GEOGRAPHY extends BaseTypes.GEOGRAPHY {
toSql() {
let result = "GEOGRAPHY";
if (this.type) {
result += `(${this.type}`;
if (this.srid) {
result += `,${this.srid}`;
}
result += ")";
}
return result;
}
static parse(value) {
const b = Buffer.from(value, "hex");
return wkx.Geometry.parse(b).toGeoJSON({ shortCrs: true });
}
_stringify(value, options) {
return `ST_GeomFromGeoJSON(${options.escape(JSON.stringify(value))})`;
}
bindParam(value, options) {
return `ST_GeomFromGeoJSON(${options.bindParam(value)})`;
}
}
BaseTypes.GEOGRAPHY.types.postgres = ["geography"];
let hstore;
class HSTORE extends BaseTypes.HSTORE {
constructor() {
super();
if (!hstore) {
hstore = require("./hstore");
}
}
_value(value) {
if (!hstore) {
hstore = require("./hstore");
}
return hstore.stringify(value);
}
_stringify(value) {
return `'${this._value(value)}'`;
}
_bindParam(value, options) {
return options.bindParam(this._value(value));
}
static parse(value) {
if (!hstore) {
hstore = require("./hstore");
}
return hstore.parse(value);
}
}
HSTORE.prototype.escape = false;
BaseTypes.HSTORE.types.postgres = ["hstore"];
class RANGE extends BaseTypes.RANGE {
_value(values, options) {
if (!Array.isArray(values)) {
return this.options.subtype.stringify(values, options);
}
const valueInclusivity = [true, false];
const valuesStringified = values.map((value, index) => {
if (_.isObject(value) && Object.prototype.hasOwnProperty.call(value, "value")) {
if (Object.prototype.hasOwnProperty.call(value, "inclusive")) {
valueInclusivity[index] = value.inclusive;
}
value = value.value;
}
if (value === null || value === -Infinity || value === Infinity) {
return value;
}
if (this.options.subtype.stringify) {
return this.options.subtype.stringify(value, options);
}
return options.escape(value);
});
valuesStringified.inclusive = valueInclusivity;
return range.stringify(valuesStringified);
}
_stringify(values, options) {
const value = this._value(values, options);
if (!Array.isArray(values)) {
return `'${value}'::${this.toCastType()}`;
}
return `'${value}'`;
}
_bindParam(values, options) {
const value = this._value(values, options);
if (!Array.isArray(values)) {
return `${options.bindParam(value)}::${this.toCastType()}`;
}
return options.bindParam(value);
}
toSql() {
return BaseTypes.RANGE.types.postgres.subtypes[this._subtype.toLowerCase()];
}
toCastType() {
return BaseTypes.RANGE.types.postgres.castTypes[this._subtype.toLowerCase()];
}
static parse(value, options = { parser: (val) => val }) {
return range.parse(value, options.parser);
}
}
const range = require("./range");
RANGE.prototype.escape = false;
BaseTypes.RANGE.types.postgres = {
subtypes: {
integer: "int4range",
decimal: "numrange",
date: "tstzrange",
dateonly: "daterange",
bigint: "int8range"
},
castTypes: {
integer: "int4",
decimal: "numeric",
date: "timestamptz",
dateonly: "date",
bigint: "int8"
}
};
BaseTypes.ARRAY.prototype.escape = false;
BaseTypes.ARRAY.prototype._value = function _value(values, options) {
return values.map((value) => {
if (options && options.bindParam && this.type && this.type._value) {
return this.type._value(value, options);
}
if (this.type && this.type.stringify) {
value = this.type.stringify(value, options);
if (this.type.escape === false) {
return value;
}
}
return options.escape(value);
}, this);
};
BaseTypes.ARRAY.prototype._stringify = function _stringify(values, options) {
let str = `ARRAY[${this._value(values, options).join(",")}]`;
if (this.type) {
const Utils = require("../../utils");
let castKey = this.toSql();
if (this.type instanceof BaseTypes.ENUM) {
const table = options.field.Model.getTableName();
const useSchema = table.schema !== void 0;
const schemaWithDelimiter = useSchema ? `${Utils.addTicks(table.schema, '"')}${table.delimiter}` : "";
castKey = `${Utils.addTicks(Utils.generateEnumName(useSchema ? table.tableName : table, options.field.field), '"')}[]`;
str += `::${schemaWithDelimiter}${castKey}`;
} else {
str += `::${castKey}`;
}
}
return str;
};
BaseTypes.ARRAY.prototype._bindParam = function _bindParam(values, options) {
return options.bindParam(this._value(values, options));
};
class ENUM extends BaseTypes.ENUM {
static parse(value) {
return value;
}
}
BaseTypes.ENUM.types.postgres = [null];
return {
DECIMAL,
BLOB,
STRING,
CHAR,
TEXT,
CITEXT,
TINYINT,
SMALLINT,
INTEGER,
BIGINT,
BOOLEAN,
DATE,
DATEONLY,
REAL,
"DOUBLE PRECISION": DOUBLE,
FLOAT,
GEOMETRY,
GEOGRAPHY,
HSTORE,
RANGE,
ENUM
};
};
//# sourceMappingURL=data-types.js.map
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists