Configurações

Configuração do projeto TypeScript

As seguintes configurações no tsconfig.json são necessárias para o funcionamento.

{
    "compilerOptions": {
      "target": "es5",
      "module": "commonjs",
      "emitDecoratorMetadata": true,
      "experimentalDecorators": true,
      "esModuleInterop": true,
    }
}

Configurações da Aplicação

Por padrão a aplicação procurará um arquivo proton.json que poderá ter as configurações:

{
  "servers": [
    {
      "port": 3001,
      "useHttps": false
    }
  ]
  "defaultRoutes": true,
  "database": {
    "name": "defaultTestConnection",
    "type": "sqlite",
    "database": "proton.sqlite",
    "synchronize": true,
    "logging": false,
    "entities": [
      "./dist/models/**/*.js"
    ]
  }
  },
  "cors": {
    "origin": "*",
    "methods": ["GET", "POST", "OPTIONS", "PUT", "PATCH", "DELETE"],
    "allowedHeaders": ["Content-Type", "Authorization"]
  },
  "logger": {
    "enabled": false,
    "transports": [
      {
        "type": "file",
        "options": {
          "filename": "./test/logs.log"
        }
      },
      {
        "type": "console"
      }
    ]
  },
  "https": {
    "enabled": false,
    "key": "./src/cert/cert.key",
    "cert": "./src/cert/cert.cert"
  }
}

Estrutura do Arquivo de Configuração

export interface GlobalConfig {
    servers: ServerConfig[];
    database: any;
    cors?: cors.CorsOptions;
    logger?: LoggerConfig;
    https?: HTTPSConfig;
    defaultRoutes?: boolean;
}

export interface ServerConfig {
    port: number;
    useHttps: boolean;
}

export interface DatabaseConfig {
    name: string;
    username: string;
    password: string;
    options: sequelize.Options;
}
export interface DBDefine {
    underscored: boolean;
}
export interface HTTPSConfig {
    enabled: boolean;
    key: string;
    cert: string;
}
export interface LoggerConfig {
    enabled: boolean;
    transports: {
        type: string;
        options: winston.TransportOptions;
    }[];
}

GlobalConfig

Proriedade Tipo Descrição
servers ServerConfig[] Configuração das portas que serão levantadas. Permite multiplas configurações
database ConnectionOptions Configuração da base de dados usada pela aplicação (Depende do DBConnector usado)
cors cors.CorsOptions Configuração do CORS da aplicação. O Protontype usa o módulo cors para fazer esse trabalho. Esta propriedade segue o mesmo objeto de configuração do módulo cors
logger LoggerConfig Configurações de log
https HTTPSConfig Configura o HTTPS na aplicação
defaultRoutes boolean Habilita a configuração das rotas parões que a aplicação disponibiliza.

ServerConfig

Propriedade Tipo Descrição
port number Porta que o servidor irá levantar
useHttps boolean Indica se a porta usará HTTPS

Database (ConnectionOptions)

Dependerá do DBConnector usado. Por default o Protontype usa o TypeORM. As propriedades do objeto database: {...} será de acordo com as configurações do TypeORM.

Ver connection options do TypeORM

LoggerConfig

Propriedade Tipo Descrição
enabled boolean Habilita o log
transports Object Configura onde os logs serão exibidos ou gravados

transports

Propriedade Tipo Descrição
type string Pode ser: "file" ou "console"
options winston.TransportOptions Opções do módulo Winston

Exemplo

"transports": [
      {
        "type": "file",
        "options": {
          "filename": "./test/logs.log"
        }
      },
      {
        "type": "console"
      }
    ]
  }

HTTPSConfig

Propriedade Tipo Descrição
key string Chave privada do certificado
cert string Arquivo que contém o certificado (chave pública)

Acesso as Configurações na Aplicação

Para ter acesso as propriedades do arquivo de configuração dentro da aplicação, o módulo disponibiiza a classe ProtonConfigLoader. O método loadConfig(filePath?: string) retorna um objeto do tipo GlobalConfig.

let config: GlobalConfig = ProtonConfigLoader.loadConfig();

Pode-se opcionalmente espeficicar o caminho do arquivo. Caso não seja informado a função procurará um arquivo proton.json na raiz do projeto.

let config: GlobalConfig = ProtonConfigLoader.loadConfig('./config/custom-config.json');