Files
evento/node_modules/@mikro-orm/postgresql/PostgreSqlPlatform.js
2026-03-18 14:55:56 -03:00

59 lines
1.6 KiB
JavaScript

import { Client } from 'pg';
import array from 'postgres-array';
import parseDate from 'postgres-date';
import PostgresInterval from 'postgres-interval';
import { BasePostgreSqlPlatform, Utils } from '@mikro-orm/sql';
/** Platform implementation for PostgreSQL. */
export class PostgreSqlPlatform extends BasePostgreSqlPlatform {
convertIntervalToJSValue(value) {
return PostgresInterval(value);
}
convertIntervalToDatabaseValue(value) {
if (Utils.isObject(value) && 'toPostgres' in value && typeof value.toPostgres === 'function') {
return value.toPostgres();
}
return value;
}
unmarshallArray(value) {
return array.parse(value);
}
escape(value) {
if (typeof value === 'bigint') {
value = value.toString();
}
if (typeof value === 'string') {
return Client.prototype.escapeLiteral(value);
}
if (value instanceof Date) {
return `'${this.formatDate(value)}'`;
}
if (ArrayBuffer.isView(value)) {
return `E'\\\\x${value.toString('hex')}'`;
}
if (Array.isArray(value)) {
return value.map(v => this.escape(v)).join(', ');
}
return value;
}
/**
* @inheritDoc
*/
parseDate(value) {
// postgres-date returns `null` for a JS ISO string which has the `T` separator
if (typeof value === 'string' && value.charAt(10) === 'T') {
return new Date(value);
}
/* v8 ignore next */
if (typeof value === 'number') {
return new Date(value);
}
// @ts-ignore fix wrong type resolution during build
const parsed = parseDate(value);
/* v8 ignore next */
if (parsed === null) {
return value;
}
return parsed;
}
}