porsager/postgres

TypeScript introspection, add more custom types?

Open

#661 opened on Aug 17, 2023

View on GitHub
 (0 comments) (4 reactions) (0 assignees)JavaScript (6,221 stars) (230 forks)batch import
Typescripthelp wanted

Description

I'm not sure if this is something that is lacking in the typescript definition. When I create a postgresql instance in typescript such as:

import postgres from 'postgres';

const sql = postgres({
  host                 : awsSecret.host,
  port                 : awsSecret.port,
  database             : awsSecret.dbname,
  username             : awsSecret.username,
  password             : awsSecret.password
});

If I console.log the sql object I get a lot of property of the sql such as

  console.log
    [Function: sql] {
      types: [Function: typed],
      typed: [Function: typed],
      unsafe: [Function: unsafe],
      array: [Function: array],
      json: [Function: json],
      file: [Function: file],
      parameters: {},
      largeObject: [Function: bound largeObject],
      PostgresError: [class PostgresError extends Error],
      options: {
        host: [ 'xxxxxxxxxx' ],
        port: [ xxxxxx ],
        path: false,
        database: 'xxxxx',
        user: 'xxxxxxx',
        pass: 'xxxxxxxxxx',
        max: 10,
        ssl: false,
        idle_timeout: null,
        connect_timeout: 30,
        max_lifetime: [Function: max_lifetime],
        max_pipeline: 100,
        backoff: [Function: backoff],
        keep_alive: 60,
        prepare: true,
        debug: false,
        fetch_types: true,
        publications: 'alltables',
        target_session_attrs: undefined,
        connection: { application_name: 'postgres.js' },
        types: {},
        onnotice: undefined,
        onnotify: undefined,
        onclose: undefined,
        onparameter: undefined,
        socket: undefined,
        transform: {
          undefined: undefined,
          column: [Object],
          value: [Object],
          row: [Object]
        },
        parameters: {},
        shared: { retries: 0, typeArrayMap: {} },
        serializers: {
          '0': [Function: serialize],
          '16': [Function: serialize],
          '17': [Function: serialize],
          '21': [Function: serialize],
          '23': [Function: serialize],
          '25': [Function: serialize],
          '26': [Function: serialize],
          '114': [Function: serialize],
          '700': [Function: serialize],
          '701': [Function: serialize],
          '1082': [Function: serialize],
          '1114': [Function: serialize],
          '1184': [Function: serialize],
          '3802': [Function: serialize]
        },
        parsers: {
          '16': [Function: parse],
          '17': [Function: parse],
          '21': [Function: parse],
          '23': [Function: parse],
          '26': [Function: parse],
          '114': [Function: parse],
          '700': [Function: parse],
          '701': [Function: parse],
          '1082': [Function: parse],
          '1114': [Function: parse],
          '1184': [Function: parse],
          '3802': [Function: parse]
        }
      },
      listen: [AsyncFunction: listen],
      notify: [AsyncFunction: notify],
      begin: [AsyncFunction: begin],
      close: [AsyncFunction: close],
      end: [AsyncFunction: end]
    }

But not all these properties are available in typescript. Using keys of the sql instance only get the following properties:

 'length',
      'name',
      'arguments',
      'caller',
      'constructor',
      'apply',
      'bind',
      'call',
      'toString',
      Symbol(Symbol.hasInstance),
      '__defineGetter__',
      '__defineSetter__',
      'hasOwnProperty',
      '__lookupGetter__',
      '__lookupSetter__',
      'isPrototypeOf',
      'propertyIsEnumerable',
      'valueOf',
      '__proto__',
      'toLocaleString'

And VS Code also complains when I try to access sql.options. Is this because not all properties are exported in the type definition?

Is there a way in typescript to verify the integrity of the sql instance? Or is there a recommended way to do unit test in typescript for this lib?

Contributor guide