index.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. 'use strict'
  2. const Client = require('./client')
  3. const defaults = require('./defaults')
  4. const Connection = require('./connection')
  5. const Result = require('./result')
  6. const utils = require('./utils')
  7. const Pool = require('pg-pool')
  8. const TypeOverrides = require('./type-overrides')
  9. const { DatabaseError } = require('pg-protocol')
  10. const { escapeIdentifier, escapeLiteral } = require('./utils')
  11. const poolFactory = (Client) => {
  12. return class BoundPool extends Pool {
  13. constructor(options) {
  14. super(options, Client)
  15. }
  16. }
  17. }
  18. const PG = function (clientConstructor) {
  19. this.defaults = defaults
  20. this.Client = clientConstructor
  21. this.Query = this.Client.Query
  22. this.Pool = poolFactory(this.Client)
  23. this._pools = []
  24. this.Connection = Connection
  25. this.types = require('pg-types')
  26. this.DatabaseError = DatabaseError
  27. this.TypeOverrides = TypeOverrides
  28. this.escapeIdentifier = escapeIdentifier
  29. this.escapeLiteral = escapeLiteral
  30. this.Result = Result
  31. this.utils = utils
  32. }
  33. if (typeof process.env.NODE_PG_FORCE_NATIVE !== 'undefined') {
  34. module.exports = new PG(require('./native'))
  35. } else {
  36. module.exports = new PG(Client)
  37. // lazy require native module...the native module may not have installed
  38. Object.defineProperty(module.exports, 'native', {
  39. configurable: true,
  40. enumerable: false,
  41. get() {
  42. let native = null
  43. try {
  44. native = new PG(require('./native'))
  45. } catch (err) {
  46. if (err.code !== 'MODULE_NOT_FOUND') {
  47. throw err
  48. }
  49. }
  50. // overwrite module.exports.native so that getter is never called again
  51. Object.defineProperty(module.exports, 'native', {
  52. value: native,
  53. })
  54. return native
  55. },
  56. })
  57. }