porsager/postgres

TypeScript introspection, add more custom types?

Open

#661 aperta il 17 ago 2023

Vedi su GitHub
 (0 commenti) (4 reazioni) (0 assegnatari)JavaScript (230 fork)batch import
Typescripthelp wanted

Metriche repository

Star
 (6221 star)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

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?

Guida contributor