@atlantjs/backend 4.0.6 → 4.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,27 +6,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.loadEnvs = loadEnvs;
7
7
  const node_fs_1 = __importDefault(require("node:fs"));
8
8
  const node_path_1 = __importDefault(require("node:path"));
9
- const dotenv_1 = __importDefault(require("dotenv"));
10
9
  const arch_1 = require("@atlantjs/arch");
10
+ const dotenv_1 = __importDefault(require("dotenv"));
11
11
  function loadEnvs() {
12
- if (arch_1._.isEqual(process.env.ENVIRONMENT, arch_1.NodeEnvs.test) &&
13
- !node_fs_1.default.existsSync(node_path_1.default.join(__dirname, "..", "..", "..", ".env.test"))) {
14
- console.error("The .env.test file is missing with the variables and their values");
15
- }
16
- if (arch_1._.isDifferent(process.env.ENVIRONMENT, arch_1.NodeEnvs.test) &&
17
- !node_fs_1.default.existsSync(node_path_1.default.join(__dirname, "..", "..", "..", "..", "..", "..", ".env"))) {
18
- console.error("The .env file is missing with the variables and their values");
12
+ console.log("Loading environment variables...");
13
+ const envFilePath = node_path_1.default.join(__dirname, "..", "..", "..", "..", "..", "..", process.env.ENVIRONMENT === arch_1.NodeEnvs.test ? ".env.test" : ".env");
14
+ if (!node_fs_1.default.existsSync(envFilePath)) {
15
+ console.error(`The ${process.env.ENVIRONMENT === arch_1.NodeEnvs.test ? ".env.test" : ".env"} file is missing with the variables and their values`);
16
+ return;
19
17
  }
20
- dotenv_1.default.config({
21
- path: (() => {
22
- switch (process.env.ENVIRONMENT) {
23
- case arch_1.NodeEnvs.test:
24
- return node_path_1.default.join(__dirname, "..", "..", "..", "..", "..", "..", ".env.test");
25
- case arch_1.NodeEnvs.production:
26
- return node_path_1.default.join(__dirname, "..", "..", "..", "..", "..", "..", ".env");
27
- default:
28
- return node_path_1.default.join(__dirname, "..", "..", "..", "..", "..", "..", ".env");
29
- }
30
- })(),
31
- });
18
+ dotenv_1.default.config({ path: envFilePath });
32
19
  }
package/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import "reflect-metadata";
2
+ export { loadEnvs } from "./backend/application/env/load-envs";
2
3
  export { Injections } from "./backend/application/injections.abstract.type";
3
4
  export { getFromContainer, Get, Post, Delete, Patch, UseBefore, JsonController, Res, Body, Req, Param, Params, } from "routing-controllers";
4
5
  export { NextFunction, Request, RequestHandler, Response } from "express";
package/index.js CHANGED
@@ -1,10 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DatabaseConfigAbstract = exports.IsTimeString = exports.IsPayload = exports.registerDecorator = exports.IsNotEmptyObject = exports.IsDateString = exports.IsObject = exports.IsArray = exports.IsString = exports.IsInt = exports.IsEnum = exports.IsNumber = exports.IsDate = exports.IsBoolean = exports.IsNumberString = exports.IsUrl = exports.IsUUID = exports.IsJWT = exports.IsJSON = exports.IsPort = exports.IsIP = exports.IsCurrency = exports.IsEmail = exports.IsBase64 = exports.IsDecimal = exports.MaxDate = exports.MinDate = exports.Min = exports.Max = exports.IsNegative = exports.IsPositive = exports.IsNotEmpty = exports.IsEmpty = exports.IsLongitude = exports.IsLatitude = exports.IsLatLong = exports.ValidateInner = exports.IsOptional = exports.Params = exports.Param = exports.Req = exports.Body = exports.Res = exports.JsonController = exports.UseBefore = exports.Patch = exports.Delete = exports.Post = exports.Get = exports.getFromContainer = void 0;
4
- exports.initializeApi = exports.DatabaseLiteConfigAbstract = exports.injectable = exports.inject = exports.Container = exports.Server = exports.DefaultErrorHandlerMiddleware = exports.CorsMiddleware = exports.BodyParserMiddleware = exports.DiContainerAbstract = exports.diContainer = exports.startContainer = exports.SchemaAbstract = exports.ResponseAbstract = exports.ValidatorAbstract = exports.PayloadAbstract = exports.ControllerAbstract = exports.CommandAbstract = exports.ServiceAbstract = exports.RepositoryAbstract = exports.ProviderAbstract = exports.MiddlewareHandlerAbstract = exports.EntityAbstract = exports.BeforeUpdate = exports.BeforeInsert = exports.ManyToMany = exports.OneToOne = exports.OneToMany = exports.ManyToOne = exports.JoinColumn = exports.Entity = exports.Column = exports.PrimaryColumn = exports.InjectionsAbstract = exports.EnvVar = exports.CORS_ALLOWED_ORIGINS = exports.LOAD_MODULES = exports.APP_PORT = exports.DatabaseHelperAbstract = void 0;
3
+ exports.IsTimeString = exports.IsPayload = exports.registerDecorator = exports.IsNotEmptyObject = exports.IsDateString = exports.IsObject = exports.IsArray = exports.IsString = exports.IsInt = exports.IsEnum = exports.IsNumber = exports.IsDate = exports.IsBoolean = exports.IsNumberString = exports.IsUrl = exports.IsUUID = exports.IsJWT = exports.IsJSON = exports.IsPort = exports.IsIP = exports.IsCurrency = exports.IsEmail = exports.IsBase64 = exports.IsDecimal = exports.MaxDate = exports.MinDate = exports.Min = exports.Max = exports.IsNegative = exports.IsPositive = exports.IsNotEmpty = exports.IsEmpty = exports.IsLongitude = exports.IsLatitude = exports.IsLatLong = exports.ValidateInner = exports.IsOptional = exports.Params = exports.Param = exports.Req = exports.Body = exports.Res = exports.JsonController = exports.UseBefore = exports.Patch = exports.Delete = exports.Post = exports.Get = exports.getFromContainer = exports.loadEnvs = void 0;
4
+ exports.initializeApi = exports.DatabaseLiteConfigAbstract = exports.injectable = exports.inject = exports.Container = exports.Server = exports.DefaultErrorHandlerMiddleware = exports.CorsMiddleware = exports.BodyParserMiddleware = exports.DiContainerAbstract = exports.diContainer = exports.startContainer = exports.SchemaAbstract = exports.ResponseAbstract = exports.ValidatorAbstract = exports.PayloadAbstract = exports.ControllerAbstract = exports.CommandAbstract = exports.ServiceAbstract = exports.RepositoryAbstract = exports.ProviderAbstract = exports.MiddlewareHandlerAbstract = exports.EntityAbstract = exports.BeforeUpdate = exports.BeforeInsert = exports.ManyToMany = exports.OneToOne = exports.OneToMany = exports.ManyToOne = exports.JoinColumn = exports.Entity = exports.Column = exports.PrimaryColumn = exports.InjectionsAbstract = exports.EnvVar = exports.CORS_ALLOWED_ORIGINS = exports.LOAD_MODULES = exports.APP_PORT = exports.DatabaseHelperAbstract = exports.DatabaseConfigAbstract = void 0;
5
5
  require("reflect-metadata");
6
6
  const setup_1 = require("./setup");
7
+ const load_envs_1 = require("./backend/application/env/load-envs");
7
8
  (0, setup_1.synthesizePaths)();
9
+ var load_envs_2 = require("./backend/application/env/load-envs");
10
+ Object.defineProperty(exports, "loadEnvs", { enumerable: true, get: function () { return load_envs_2.loadEnvs; } });
11
+ (0, load_envs_1.loadEnvs)();
8
12
  var routing_controllers_1 = require("routing-controllers");
9
13
  Object.defineProperty(exports, "getFromContainer", { enumerable: true, get: function () { return routing_controllers_1.getFromContainer; } });
10
14
  Object.defineProperty(exports, "Get", { enumerable: true, get: function () { return routing_controllers_1.Get; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlantjs/backend",
3
- "version": "4.0.6",
3
+ "version": "4.0.8",
4
4
  "main": "index.js",
5
5
  "license": "UNLICENSED",
6
6
  "publishConfig": {
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PickEnvError = void 0;
4
4
  class PickEnvError extends Error {
5
5
  constructor(variableName, variableDescription, messageError) {
6
- super(`\n❯ ${messageError}:\n\n - ${variableName}: ${variableDescription}`);
6
+ super(`\n❯ ${process.env.ENVIRONMENT} - ${messageError}:\n\n - ${variableName}: ${variableDescription}`);
7
7
  }
8
8
  }
9
9
  exports.PickEnvError = PickEnvError;
@@ -5,7 +5,7 @@ export declare class EnvVar {
5
5
  private static variableType;
6
6
  private static variableDescription;
7
7
  private static enumValues?;
8
- static get<ValueType = string>({ name, type, isRequired, default: defaultValue, values: enumValues, description }: PickEnvType<ValueType>): ValueType;
8
+ static get<ValueType = string>({ name, type, isRequired, default: defaultValue, values: enumValues, description, }: PickEnvType<ValueType>): ValueType;
9
9
  private static urlHttpVerify;
10
10
  private static portNumberVerify;
11
11
  private static intVerify;
@@ -1,117 +1,111 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EnvVar = void 0;
4
- const env_var_error_1 = require("./env-var.error");
5
4
  const arch_1 = require("@atlantjs/arch");
5
+ const env_var_error_1 = require("./env-var.error");
6
6
  class EnvVar {
7
- static get({ name, type = "string", isRequired = true, default: defaultValue, values: enumValues, description }) {
8
- //TODO: Verificar se o process.env.ENVIRONMENT é local. Se sim, carregar do process.env[name] (.env). Se não, carregar do secret manager. Se não, carregar do default value. Se não, undefined.
9
- this.variableValue = process.env[name] || defaultValue?.toString();
10
- this.variableType = type;
11
- this.variableName = name;
12
- this.variableDescription = description;
13
- this.enumValues = enumValues;
14
- if (arch_1._.isEmpty(this.variableValue) && isRequired.truthy()) {
15
- // TODO: Informar que a variável deve ter um valor preenchido.
16
- // TODO: Disponibilizar um input para a pessoa inserir o valor na hora
17
- // TODO: Caso o valor não seja válido com o typo da variável, informar e disponibilizar novamente o input
18
- // TODO: Caso o valor seja válido, atribuir no arquivo .env e validar as demais variáveis
19
- // TODO: ao finalizar todas as variáveis, caso tenha havido alguma alteração no arquivo .env, reiniciar o container
20
- throw new env_var_error_1.PickEnvError(this.variableName, this.variableDescription, `A variável de ambiente tem que ter seu valor definido`);
21
- }
22
- switch (this.variableType) {
7
+ static get({ name, type = "string", isRequired = true, default: defaultValue, values: enumValues, description, }) {
8
+ EnvVar.variableValue = process.env[name] || defaultValue?.toString();
9
+ EnvVar.variableType = type;
10
+ EnvVar.variableName = name;
11
+ EnvVar.variableDescription = description;
12
+ EnvVar.enumValues = enumValues;
13
+ if (arch_1._.isEmpty(EnvVar.variableValue) && isRequired.truthy()) {
14
+ throw new env_var_error_1.PickEnvError(EnvVar.variableName, EnvVar.variableDescription, "The environment variable must have its value defined");
15
+ }
16
+ switch (EnvVar.variableType) {
23
17
  case "boolean":
24
- this.booleanVerify();
18
+ EnvVar.booleanVerify();
25
19
  break;
26
20
  case "array":
27
- this.arrayVerify();
21
+ EnvVar.arrayVerify();
28
22
  break;
29
23
  case "enum":
30
- this.enumVerify();
24
+ EnvVar.enumVerify();
31
25
  break;
32
26
  case "float":
33
- this.floatVerify();
27
+ EnvVar.floatVerify();
34
28
  break;
35
29
  case "int":
36
- this.intVerify();
30
+ EnvVar.intVerify();
37
31
  break;
38
32
  case "port-number":
39
- this.portNumberVerify();
33
+ EnvVar.portNumberVerify();
40
34
  break;
41
35
  case "url-https":
42
- this.urlHttpVerify();
36
+ EnvVar.urlHttpVerify();
43
37
  break;
44
38
  }
45
- return this.variableValue;
39
+ return EnvVar.variableValue;
46
40
  }
47
41
  static urlHttpVerify() {
48
- if (arch_1._.isEmpty(this.variableValue)) {
42
+ if (arch_1._.isEmpty(EnvVar.variableValue)) {
49
43
  return undefined;
50
44
  }
51
45
  const urlPattern = /^https?:\/\/[^\s/$.?#].[^\s]*$/i;
52
- if (!urlPattern.test(this.variableValue)) {
53
- throw new env_var_error_1.PickEnvError(this.variableName, this.variableDescription, `O valor da variável de ambiente ${this.variableName} deve ser uma URL válida começando com http ou https`);
46
+ if (!urlPattern.test(EnvVar.variableValue)) {
47
+ throw new env_var_error_1.PickEnvError(EnvVar.variableName, EnvVar.variableDescription, `O valor da variável de ambiente ${EnvVar.variableName} deve ser uma URL válida começando com http ou https`);
54
48
  }
55
- return this.variableValue;
49
+ return EnvVar.variableValue;
56
50
  }
57
51
  static portNumberVerify() {
58
- if (arch_1._.isEmpty(this.variableValue)) {
52
+ if (arch_1._.isEmpty(EnvVar.variableValue)) {
59
53
  return undefined;
60
54
  }
61
- const portNumber = parseInt(this.variableValue, 10);
62
- if (isNaN(portNumber) || portNumber < 1 || portNumber > 65535) {
63
- throw new env_var_error_1.PickEnvError(this.variableName, this.variableDescription, `O valor da variável de ambiente ${this.variableName} deve ser um número de porta válido entre 1 e 65535`);
55
+ const portNumber = Number.parseInt(EnvVar.variableValue, 10);
56
+ if (Number.isNaN(portNumber) || portNumber < 1 || portNumber > 65535) {
57
+ throw new env_var_error_1.PickEnvError(EnvVar.variableName, EnvVar.variableDescription, `O valor da variável de ambiente ${EnvVar.variableName} deve ser um número de porta válido entre 1 e 65535`);
64
58
  }
65
- return this.variableValue;
59
+ return EnvVar.variableValue;
66
60
  }
67
61
  static intVerify() {
68
- if (arch_1._.isEmpty(this.variableValue)) {
62
+ if (arch_1._.isEmpty(EnvVar.variableValue)) {
69
63
  return undefined;
70
64
  }
71
- const intValue = parseInt(this.variableValue, 10);
72
- if (isNaN(intValue)) {
73
- throw new env_var_error_1.PickEnvError(this.variableName, this.variableDescription, `O valor da variável de ambiente ${this.variableName} deve ser um número inteiro válido`);
65
+ const intValue = Number.parseInt(EnvVar.variableValue, 10);
66
+ if (Number.isNaN(intValue)) {
67
+ throw new env_var_error_1.PickEnvError(EnvVar.variableName, EnvVar.variableDescription, `O valor da variável de ambiente ${EnvVar.variableName} deve ser um número inteiro válido`);
74
68
  }
75
69
  return intValue;
76
70
  }
77
71
  static floatVerify() {
78
- if (arch_1._.isEmpty(this.variableValue)) {
72
+ if (arch_1._.isEmpty(EnvVar.variableValue)) {
79
73
  return undefined;
80
74
  }
81
- const floatValue = parseFloat(this.variableValue);
82
- if (isNaN(floatValue)) {
83
- throw new env_var_error_1.PickEnvError(this.variableName, this.variableDescription, `O valor da variável de ambiente ${this.variableName} deve ser um número float válido`);
75
+ const floatValue = Number.parseFloat(EnvVar.variableValue);
76
+ if (Number.isNaN(floatValue)) {
77
+ throw new env_var_error_1.PickEnvError(EnvVar.variableName, EnvVar.variableDescription, `O valor da variável de ambiente ${EnvVar.variableName} deve ser um número float válido`);
84
78
  }
85
79
  return floatValue;
86
80
  }
87
81
  static arrayVerify() {
88
- if (arch_1._.isUndefined(this.variableValue)) {
82
+ if (arch_1._.isUndefined(EnvVar.variableValue)) {
89
83
  return [];
90
84
  }
91
- return this.variableValue.split(",");
85
+ return EnvVar.variableValue.split(",");
92
86
  }
93
87
  static booleanVerify() {
94
- if (arch_1._.isEmpty(this.variableValue)) {
88
+ if (arch_1._.isEmpty(EnvVar.variableValue)) {
95
89
  return undefined;
96
90
  }
97
- if (arch_1._.isAnyOf(this.variableValue, ["false", "true"]).falsy()) {
98
- throw new env_var_error_1.PickEnvError(this.variableName, this.variableDescription, `O valor da variável de ambiente ${this.variableValue} tem que ser "false" ou "true"`);
91
+ if (arch_1._.isAnyOf(EnvVar.variableValue, ["false", "true"]).falsy()) {
92
+ throw new env_var_error_1.PickEnvError(EnvVar.variableName, EnvVar.variableDescription, `O valor da variável de ambiente ${EnvVar.variableValue} tem que ser "false" ou "true"`);
99
93
  }
100
- if (arch_1._.isEqual(this.variableValue, "true"))
94
+ if (arch_1._.isEqual(EnvVar.variableValue, "true"))
101
95
  return true;
102
96
  return false;
103
97
  }
104
98
  static enumVerify() {
105
- if (arch_1._.isUndefined(this.variableValue)) {
99
+ if (arch_1._.isUndefined(EnvVar.variableValue)) {
106
100
  return undefined;
107
101
  }
108
- if (arch_1._.isUndefined(this.enumValues)) {
109
- throw new env_var_error_1.PickEnvError(this.variableName, this.variableDescription, `A definição da variável de ambiente ${this.variableName} deve conter os valores de referencia do enum`);
102
+ if (arch_1._.isUndefined(EnvVar.enumValues)) {
103
+ throw new env_var_error_1.PickEnvError(EnvVar.variableName, EnvVar.variableDescription, `A definição da variável de ambiente ${EnvVar.variableName} deve conter os valores de referencia do enum`);
110
104
  }
111
- if (this.enumValues.includes(this.variableValue).falsy()) {
112
- throw new env_var_error_1.PickEnvError(this.variableName, this.variableDescription, `A variável ${this.variableName} deve conter algum dos seguintes valores: [${this.enumValues.join(", ")}]`);
105
+ if (EnvVar.enumValues.includes(EnvVar.variableValue).falsy()) {
106
+ throw new env_var_error_1.PickEnvError(EnvVar.variableName, EnvVar.variableDescription, `A variável ${EnvVar.variableName} deve conter algum dos seguintes valores: [${EnvVar.enumValues.join(", ")}]`);
113
107
  }
114
- return this.variableValue;
108
+ return EnvVar.variableValue;
115
109
  }
116
110
  }
117
111
  exports.EnvVar = EnvVar;
package/setup/index.js CHANGED
@@ -9,6 +9,7 @@ const dependency_injections_1 = require("./dependency-injections");
9
9
  const server_1 = require("./server/server");
10
10
  function initializeApi(props) {
11
11
  try {
12
+ console.log("Initializing the API...");
12
13
  (0, load_envs_1.loadEnvs)();
13
14
  loadModules();
14
15
  (0, dependency_injections_1.startContainer)();