Skip to content

Commit

Permalink
feat: support knex 0.95 version
Browse files Browse the repository at this point in the history
  • Loading branch information
khmm12 committed Mar 15, 2021
1 parent 5905534 commit 4996b86
Showing 1 changed file with 30 additions and 2 deletions.
32 changes: 30 additions & 2 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ type KnexTinyLogger$Query = {
startTime: KnexTinyLogger$StartTime,
}

type KnexTinyLogger$KnexFormatQuery = (sql: string, bindings: any) => string
type Knex$QueryExecutionerFormat = (sql: string, bindings: any, timeZone?: string, client: Knex) => string

const COLORIZE = {
primary: chalk.magenta,
error: chalk.red,
Expand Down Expand Up @@ -66,9 +69,11 @@ export default function knexTinyLogger(knex: Knex, options?: KnexTinyLoggerOptio
}
}

function makeQueryPrinter(knex, { logger, withBindings }) {
function makeQueryPrinter(knex: Knex, { logger, withBindings }) {
const formatQuery = getKnexFormatQuery(knex)

return function print({ sql, bindings, duration }, colorize: Function) {
const sqlRequest = knex.client._formatQuery(sql, withBindings ? bindings : null)
const sqlRequest = formatQuery(sql, withBindings ? bindings : null)

logger('%s %s', COLORIZE.primary(`SQL (${duration.toFixed(3)} ms)`), colorize(sqlRequest))
}
Expand All @@ -83,3 +88,26 @@ function measureDuration(startTime: KnexTinyLogger$StartTime): number {
const duration = diff[0] * 1e3 + diff[1] * 1e-6
return duration
}

function getKnexFormatQuery(knex: Knex): KnexTinyLogger$KnexFormatQuery {
let queryExecutionerFormat: ?Knex$QueryExecutionerFormat

if (typeof knex.client._formatQuery === 'function') {
return (sql, bindings) => knex.client._formatQuery(sql, bindings)
} else if ((queryExecutionerFormat = resolveQueryExecutionerFormat()) != null) {
// $FlowExpectError
return (sql, bindings) => queryExecutionerFormat(sql, bindings, undefined, knex)
} else {
return (sql) => sql
}
}

function resolveQueryExecutionerFormat(): ?Knex$QueryExecutionerFormat {
try {
// $FlowExpectError
const { formatQuery } = require('knex/lib/execution/internal/query-executioner')
return typeof formatQuery === 'function' ? formatQuery : null
} catch {
return null
}
}

0 comments on commit 4996b86

Please sign in to comment.