{
  "success": [
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorator/Conditionals/columna_tiene_valor.js#resolve"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `data:Object` Los parámetros de la petición, petición inclusive.",
          " `columna_id:String` El nombre de la columna.",
          " `controlador:Object` El controlador que enchufa esto.",
          " `valores_string:String` Valores posibles, separados.",
          " `valores_separador:String` Separador de los valores posibles."
        ],
        "@description": [
          " Comprueba, con una query si es necesario, que el item tiene uno de los valores indicados (valores_string)."
        ],
        "@returns": [
          " `tiene_valor:Booleano` Si tiene o no alguno de los valores indicados (valores_string).\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Conditionals/columna_tiene_valor.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorator/Conditionals/no_tiene_permiso.js#resolve"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `data:Object` Los parámetros de la petición, petición inclusive.",
          "  `permisos:Array<String>` Los permisos a comprobar."
        ],
        "@description": [
          " Devuelve un booleano indicando si tiene alguno de los permisos indicados (permisos)."
        ],
        "@returns": [
          " `no_tiene_permisos:Boolean`"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Conditionals/no_tiene_permiso.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorators/Conditionals/ocurre.js#resolve"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `data` Los parámetros de la petición, petición inclusive.",
          "  `...permisos:Array<String>` Permisos."
        ],
        "@description": [
          " Devuelve `true` siempre."
        ],
        "@returns": [
          " `true`\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Conditionals/ocurre.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorators/Conditionals/tiene_permiso.js#resolve"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `data:Object` Los parámetros de la petición, petición inclusive.",
          " `...permisos:Array<String>` Permisos a comprobar."
        ],
        "@description": [
          " Devuelve un booleano para permitir saber si tiene o no alguno de los permisos indicados (permisos)."
        ],
        "@returns": [
          " `tiene_permisos:Boolean` Si tiene o no alguno de los permisos.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Conditionals/tiene_permiso.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorators/Consequencials/permitir.js#resolve"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `data:Object`"
        ],
        "@description": [
          " Deja pasar la acción, no hace nada."
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Consequencials/permitir.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorators/Consequencials/columna_solo_actualizable_a.js#resolve"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `data:Object` Los parámetros de la petición, petición inclusive. Requerido.",
          " `columna_id:String` El nombre de la columna. Requerido.",
          " `controlador:Object` El controlador que enchufa este decorador. Requerido.",
          " `valores:String` Los valores posibles, separados. Requerido.",
          " `separador:String` El separador de los valores posibles. Por defecto: \",\" (coma)."
        ],
        "@description": [
          " Si es un Update comprueba que el valor en la columna indicada (id_columna) sea uno de los valores indicados (valores)\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Consequencials/columna_solo_actualizable_a.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorators/Interceptors/Columns/fijar_fecha_actual_al_actualizar.js#resolve"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `data:Object` Requerido. Los parámetros de la request, inclusive request.",
          " `id_columna:String` Requerido. Nombre de la columna.",
          " `controlador:Object` Requerido. El controlador que lo está llamando."
        ],
        "@description": [
          " Si es Insertar, toma un nuevo Date, lo formatea a texto y lo asigna a la columna indicada (\"id_columna\").\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Interceptors/Columns/fijar_fecha_actual_al_insertar.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorators/Consequencials/prohibir.js#resolve"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `data:Object` Los parámetros de la petición, petición inclusive.",
          " `error:String` Mensaje de error."
        ],
        "@description": [
          " Se lanza un error, o el indicado (error) o uno estándar.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Consequencials/prohibir.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " Decorators.js"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `api` Objeto principal de la API del proyecto."
        ],
        "@description": [
          " Devuelve cargados los condicionales, consecuenciales, interceptores de tabla e interceptores de columna, juntos, cargados por este mismo orden. Este fichero se llama, teóricamente, desde el main para cargar los decoradores de la base de datos."
        ],
        "@returns": [
          " `{ Conditionals, Consequencials, Interceptors: { Tables, Columns } }`\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Decorators.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorators/Interceptors/Columns/fijar_id_de_usuario_al_actualizar.js#resolve"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `data:Object` Requerido. Los parámetros de la request, inclusive request.",
          " `id_columna:String` Requerido. Nombre de la columna.",
          " `controlador:Object` Requerido. El controlador que lo está llamando."
        ],
        "@description": [
          " Si es Insertar o Actualizar, toma el `request.$$authentication.usuario.id` y lo asigna a la columna indicada (\"id_columna\").\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Interceptors/Columns/fijar_id_de_usuario_al_actualizar.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorators/Interceptors/Columns/fijar_id_de_usuario_al_insertar.js#resolve"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `data:Object` Requerido. Objeto de parámetros de la petición.",
          " `id_columna:String` Requerido. El nombre de la columna que contiene el id de usuario.",
          " `controlador:Object` Requerido."
        ],
        "@description": [
          " Si es Insert, toma el `request.$$authentication.usuario.id` y lo pone en la columna indicada (\"id_columna\").\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Interceptors/Columns/fijar_id_de_usuario_al_insertar.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorators/Interceptors/Tables/registrar_cambios_en.js#resolve"
        ],
        "@type": [
          " Función asíncrona"
        ],
        "@parameter": [
          " `data:Object` Requerido. Este objeto contiene los parámetros de la petición, inclusive la petición y la respuesta.",
          " `controlador:Object` Requerido. Este es el objeto del controlador que lo ha enchufado. Puede ser uno entre los controladores CRUD: Select, Insert, Update o Delete.",
          " `tabla_historial:String` Requerido.",
          " `columna_operacion_historial:String` Por defecto: `operacion`.",
          " `columna_tabla_historial:String` Por defecto: `tabla`.",
          " `columna_identificador_historial:String` Por defecto: `identificador`.",
          " `columna_parametros_historial:String` Por defecto: `parametros`.",
          " `columna_autentificacion_historial:String` Por defecto: `autentificacion`.",
          " `columna_creado_en_historial:String` Por defecto: `creado_en`."
        ],
        "@description": [
          " Cuando es \"Insert\" / \"Update\" / \"Delete\" hace un insert en la tabla indicada (tabla_historial) con los campos indicados.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Interceptors/Tables/registrar_cambios_en.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorators/Interceptors/Columns/fijar_valor_inicial.js#resolve"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `data:Object` Requerido. Este objeto contiene los parámetros de la petición, inclusive la petición y la respuesta.",
          " `id_columna:String|Number` Requerido. Nombre de la columna cuyo valor es a fijar.",
          " `controlador:Object` Requerido. Este es el objeto del controlador que lo ha enchufado. Puede ser uno entre los controladores CRUD: Select, Insert, Update o Delete.",
          " `valor:String` Requerido. Valor a fijar."
        ],
        "@description": [
          " Comprueba si es operación Insert.\nSi es, fija el valor indicado (valor) en la columna indicada (id_columna).\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Interceptors/Columns/fijar_valor_inicial.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorators/sqlite.js"
        ],
        "@type": [
          " Función asíncrona"
        ],
        "@parameter": [
          " `api`"
        ],
        "@returns": [
          " Devuelve una interfaz homogénea para ejecutar código en la base de datos SQL. En este caso, rellena con la lógica para funcionar con una base de datos SQLite. El proceso es el que sigue.\nSi `process.env.DATABASE_RESET` tiene valor true sobreescribe en blanco el fichero `process.env.DATABASE_FILE`.\nCrea una conexión bruta con tal fichero.\nCrea una conexión neta con 2 propiedades:\n\n   - NativeConnection: conexión nativa de sqlite (la conexión \"bruta\").\n   - Execute: función para ejecutar código SQL contra la base de datos.\n\nDevuelve la conexión neta.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Drivers/sqlite.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorators/Interceptors/Columns/es_actualizable_si_id_usuario_coincide_con.js#resolve"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `data:Object` Los parámetros de la petición, petición inclusive.",
          " `id_columna:String` Nombre de la columna.",
          " `controlador:Object` Instancia de controlador que enchufa este decorador."
        ],
        "@description": [
          " Lanza un error si se está intentando actualizar pero la columna no coincide con el identificador de usuario.\nBusca en `data.item_recuperated` y si no encuentra, hace una query buscando el `data.id` como id, usando `data.table` como tabla.\nCompara el `request.$$authentication.usuario.id` con el valor de esta columna indicada (id_columna).\nSi no coinciden, lanza un error de que el valor no se puede alterar.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Interceptors/Columns/es_actualizable_si_id_usuario_coincide_con.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/Database/Decorators/Interceptors/Columns/fijar_fecha_actual_al_actualizar.js#resolve"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `data:Object` Requerido. Los parámetros de la request, inclusive request.",
          " `id_columna:String` Requerido. Nombre de la columna.",
          " `controlador:Object` Requerido. El controlador que lo está llamando."
        ],
        "@description": [
          " Si es Insertar o Actualizar, toma un nuevo Date, lo formatea a texto y lo asigna a la columna indicada (\"id_columna\").\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Database/Decorators/Interceptors/Columns/fijar_fecha_actual_al_actualizar.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " src/main.js#setupInitialization"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `api` "
        ],
        "@description": [
          " Inicializa una aplicación express en `api.app`.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/load.js"
      },
      {
        "_": [
          ""
        ],
        "@name": [
          " src/main.js#setupConfigurations"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `api` "
        ],
        "@description": [
          " Inicializa variables `process.env` a partir del código y de `src/Configurations/.env`.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/load.js"
      },
      {
        "_": [
          ""
        ],
        "@name": [
          " src/main.js#setupUtilities"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `api` "
        ],
        "@description": [
          " Monta todas las utilidades a partir de `src/Utilities`.\nItera sobre todas las utilidades.\nCrea cada utilidad con el operador `new` y pasándole la `api`.\nLe inyecta la api.\nSi encuentra una `utilidad.action`: establece como utilidad este método bindeado a la utilidad.\nSi, en cambio, encuentra una `utilidad.factory`: establece como utilidad el resultado de llamar a este método, bindeado a la utilidad.\nSi no, lanza un error porque la interfaz estaría incompleta en la utilidad."
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/load.js"
      },
      {
        "_": [
          ""
        ],
        "@name": [
          " src/main.js#setupQueries"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `api` "
        ],
        "@description": [
          " Monta todas las queries a partir de `src/Queries`.\nEl proceso es similar al de las utilidades.\nItera sobre las queries.\nCrea cada query.\nLe inyecta la api.\nSi encuentra el método `query.query`: establece como query este método bindeado a la instancia de query.\nSi, en cambio, encuentra el método `query.factory`: establece como query el resultado de una llamada a este método bindeado a la instancia de query.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/load.js"
      },
      {
        "_": [
          ""
        ],
        "@name": [
          " src/main.js#setupModels"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `api` "
        ],
        "@description": [
          " Monta todos los modelos a partir de `src/Models`.\nEl proceso es similar al de los otros tipos de componente.\nIgnorando la carpeta \"Base\", itera sobre todos los ficheros de la carpeta.\nCrea una instancia del modelo.\nLe inyecta la api.\nSi encuentra el método \"initialize\" lo llama.\nAsigna el resultado de \"initialize\" o si no el modelo creado en \"api.Models.$orm[modelName]\".\nImprime el número de modelo y su origen.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/load.js"
      },
      {
        "_": [
          ""
        ],
        "@name": [
          " src/main.js#setupDatabaseConnection"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `api` "
        ],
        "@description": [
          " Crea `api.Database` con:\n    - `api.Database.SequelizeConnection`: conexión para los modelos en Sequelize.\n    - `api.Database.Connection`: conexión para las queries crudas.\n    - `api.Database.Schema`: esquema de los datos original. Lo extrae de parsear el fichero \"src/Database/Scripts/creation.sql\" con el HQL Parser.\n    - `api.Database.CompactedSchema`: esquema de los datos compacto. Compacta los atributos directamente aquí.\n\nAl final del proceso, también se escriben los ficheros:\n    - `Database/Structures/schema.json`\n    - `Database/Structures/schema.compacted.json`\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/load.js"
      },
      {
        "_": [
          ""
        ],
        "@name": [
          " src/main.js#setupDatabaseDecorators"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `api`"
        ],
        "@description": [
          " Monta los decoradores de base de datos, esto es:\n   - Conditionals: bloques de código que devuelven un booleano.\n   - Consequencials: bloques de código que representan acciones.\n   - Table interceptors: bloques de código que representan acciones aplicadas a una tabla.\n   - Column interceptors: bloques de código que representan acciones aplicadas a una columna.\n\nEstos decoradores no son los únicos que la API permite como decoradores significativos para la seguridad del servidor y los datos. Pero sí representan el grupo de decoradores más personalizable. Esto se explicará en otra parte de la API.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/load.js"
      },
      {
        "_": [
          ""
        ],
        "@name": [
          " src/main.js#setupApplication"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `api` "
        ],
        "@description": [
          " Monta la aplicación express, aplicando CORS, body-parser y un middleware de ficheros estáticos en \"/ui\" con la carpeta \"src/Interface/www\".\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/load.js"
      },
      {
        "_": [
          ""
        ],
        "@name": [
          " src/main.js#setupMiddlewares"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `api` "
        ],
        "@description": [
          " Monta los middlewares.\nEl proceso es similar al de otros tipos de componente.\nItera sobre la carpeta \"src/Middlewares\".\nCrea un middleware.\nLe inyecta la API.\nAsigna el nuevo middleware llamando a su función \"factory()\".\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/load.js"
      },
      {
        "_": [
          ""
        ],
        "@name": [
          " src/main.js#setupControllers"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `api` "
        ],
        "@description": [
          " Monta los controladores.\nEl proceso es similar al de otros tipos de componente.\nItera sobre la carpeta \"src/Controllers\".\nCrea un controller.\nLe inyecta la API.\nOrdena todos los controladores según su propiedad \"priority\", el cual a mayor es, mayor es también la prioridad.\nItera sobre los controladores ordenados.\nMonta cada controlador en la aplicación.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/load.js"
      },
      {
        "_": [
          ""
        ],
        "@name": [
          " src/main.js#deployApplication"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `api` "
        ],
        "@description": [
          " Despliega la aplicación express por el puerto `process.env.APP_PORT`. Imprime entonces las URLs de la aplicación servidor y de la aplicación del backoffice en Castelog/Vue.js.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/load.js"
      },
      {
        "_": [
          ""
        ],
        "@name": [
          " src/main.js#main"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `api` "
        ],
        "@description": [
          " Define todo el *setup* del main. Esto es lo que sigue.\n\nawait setupInitialization(api, configurations);\nawait setupConfigurations(api, configurations);\nawait setupUtilities(api, configurations);\nawait setupQueries(api, configurations);\nawait setupDatabaseConnection(api, configurations);\nawait setupDatabaseDecorators(api, configurations);\nawait setupModels(api, configurations);\nawait setupApplication(api, configurations);\nawait setupMiddlewares(api, configurations);\nawait setupControllers(api, configurations);\nawait deployApplication(api, configurations);\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/load.js"
      },
      {
        "_": [
          ""
        ],
        "@name": [
          " src/main.js#module.exports"
        ],
        "@type": [
          " Promise"
        ],
        "@description": [
          " Exporta una llamada a la función `main()`.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/load.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Middlewares.BodyParserUrlEncoded"
        ],
        "@type": [
          " Función"
        ],
        "@details": [
          " `await this.api.Utilities.AuthenticateRequest(request);`. En errores, despacha un error en formato JSON.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Middlewares/AuthenticateRequest.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Middlewares.BodyParserUrlEncoded"
        ],
        "@type": [
          " Función"
        ],
        "@details": [
          " `return require(\"body-parser\").json({ extended: true });`\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Middlewares/BodyParserJson.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Middlewares.BodyParserUrlEncoded"
        ],
        "@type": [
          " Función"
        ],
        "@details": [
          " `return require(\"body-parser\").urlencoded({ extended: true });`\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Middlewares/BodyParserUrlEncoded.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " AuthenticateRequest"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `request:Object`"
        ],
        "@description": [
          " Autentifica una petición. Esto significa que establece el valor `request.$$authentication` con los datos de sesion, usuario y permisos, si el token proporcionado vía `authorization` pertenece a una sesión válida. De lo contrario, lanzará un error estandarizado.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/AuthenticateRequest.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.CheckThat"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `...args:Array`"
        ],
        "@description": [
          " Este método sirve como puente con la API de check-that, otro proyecto del autor que sirve para hacer comprobaciones de tipos y tener un reporte de errores uniforme y más o menos asistido."
        ],
        "@returns": [
          " Devuelve un `check.that(...args)` de la libería `check-that`. Para saber más de cómo se utiliza `check-that`, puedes ir a [https://github.com/allnulled/check-that](https://github.com/allnulled/check-that).\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/CheckThat.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.CloneExceptProperties"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `object:Object`",
          " `properties:Array<String>`",
          " `output:Object`"
        ],
        "@returns": [
          " \n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/CloneExceptProperties.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.CloseDeployment"
        ],
        "@type": [
          " Función"
        ],
        "@description": [
          " Cierra conexiones a bases de datos, servidores, etc. para que termine el proceso de forma natural controlada.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/CloseDeployment.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.CloneOnlyProperties"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `object:Object`",
          " `properties:Array<String>`",
          " `output:Object`"
        ],
        "@returns": [
          " `output:Object` Objeto indicado (output) pero extendido con propiedades indicadas (propierties) del objeto indicado (object)."
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/CloneOnlyProperties.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.Die"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          "  `...args:Array<any>` Lista de textos o cosas que se quieren imprimir por consola antes de matar el proceso."
        ],
        "@description": [
          " Imprime por consola cualquier cosa y luego termina el proceso actual. Solo se usa para propósitos de debug.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/Die.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.DispatchSuccess"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `response:Object` Respuesta de la petición.",
          " `error:Error` Error."
        ],
        "@description": [
          " Establece el estado de la respuesta de petición indicada (response) en 500 (ESTADO:BAD REQUEST) y envía un JSON con una cabecera estándar de petición con fallo enviando el error indicado (error).\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/DispatchError.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.DispatchErrorAsHtml"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `response:Object` Respuesta de petición.",
          " `error:Error` Error."
        ],
        "@description": [
          " Establece el estado de la respuesta de petición indicada (response) en 500 (ESTADO:BAD REQUEST) y la cabecera de texto en HTML con charset utf8. Luego envía los contenidos como HTM, que son la página de `src/Interface/ejs/error.html` renderizada con el error indicado (error).\nSi esto falla, imprime el error y luego envía el `error.message` como único texto plano.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/DispatchErrorAsHtml.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.DispatchSuccess"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `response:Object` Respuesta de la petición.",
          " `data:Object` Datos de respuesta."
        ],
        "@description": [
          " Establece el estado de la respuesta de petición indicada (response) en 200 (ESTADO:OK) y envía un JSON con una cabecera estándar de petición con éxito enviando los datos indicados (data).\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/DispatchSuccess.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.DispatchSuccessAsHtml"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `response`",
          " `contents`"
        ],
        "@description": [
          " Establece el estado de la respuesta de petición indicada (response) en 200 (ESTADO:OK) y la cabecera de texto en HTML con charset utf8. Luego envía los contenidos (contents) como HTML.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/DispatchSuccessAsHtml.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.GetDatabaseConnection"
        ],
        "@type": [
          " Función"
        ],
        "@description": [
          " Devuelve `this.api.Database.Connection`."
        ],
        "@returns": [
          " `connection:Object` Objeto conexión neta.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/GetDatabaseConnection.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.FormatRowsByGroups"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `rows:Array` Lista devuelta por un select con joins del SQL.",
          " `groups:Array<String>` Lista de nombres  ",
          " `inListMode:Boolean` Si se prefiere una lista con objetos, en lugar de un objeto con identificadores. Por defecto: `true`."
        ],
        "@description": [
          " A partir de los nombres de las columnas, que son compuestos de `{Tabla}.{Columna}`, se averiguan los diferentes ids de cada tabla, y se separan sus columnas y se devuuelve el resultado, que puede estar en formato objeto con ids, o en formato array directo."
        ],
        "@returns": [
          " `lists:Object<Array<Object>> | lists:Object<Object<Object>>` Objeto con los grupos indicados (groups) como clave y las rows con las columnas agrupadas como valor.\nSi `inListMode` es `true` se devuelve:\n   - Un objeto donde las claves son los grupos y los valores son:\n   - Arrays con los objetos como valores.\nSi `inListMode` es `false` se devuelve:\n   - Un objeto donde las claves son los grupos y los valores son:\n   - Objetos donde las claves son los id de los objetos y los valores son los objetos.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/FormatRowsByGroups.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.GetStringFromString"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `dateString:String` Fecha en formato texto."
        ],
        "@description": [
          " Devuelve una fecha (tipo Date) a partir de una fecha tipo texto indicada (`dateString`)"
        ],
        "@returns": [
          " `date:Date` Fecha en formato Date.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/GetDateFromString.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.GetDateToString"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `date:Date` Fecha a formatear.",
          " `format:String` Formato a usar. Por defecto: `\"YYYY-MM-DD HH:mm:ss.xxx\"`."
        ],
        "@description": [
          " Transforma una fecha (o Date) indicado (date) en texto (o String) con el formato indicado (format)."
        ],
        "@returns": [
          " `output:String` La fecha formateada a texto.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/GetDateToString.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.GetRequestParameter"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `request:Object` Petición (objeto tipo Request de express) de la cual tomar el parámetro",
          " `name:String` Nombre del parámetro que tomar.",
          " `defaultValue:any` Valor que será devuelto en caso de no existir tal parámetro."
        ],
        "@returns": [
          " `parameter:any` Devuelve el parámetro tomado del primero de entre, y por este orden:\n   - `request.body`\n   - `request.query`\n   - `request.headers`\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/GetRequestParameter.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.GetStringLeftPadded"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `text:String` Texto a espaciar.",
          " `spaces:Number` Espacios totales que debe acabar teniendo como mínimo.",
          " `padding:String` Texto a usar en el espaciamiento."
        ],
        "@descripcion": [
          " Devuelve la copia de un texto (text) pero con tantos espacios como se indiquen (spaces) de los cuales los que falten serán rellenados con el texto indicado (padding), aplicado por la izquierda."
        ],
        "@returns": [
          " `output:String` Texto resultante del espaciamiento."
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/GetStringLeftPadded.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.InitializeDatabase"
        ],
        "@type": [
          " Función"
        ],
        "@description": [
          " Inicializa la base de datos, esto es: crea las tablas y aplica las migraciones. Consiste en 2 llamadas:\n   - `this.applyCreationScript`: aplica el script de creación.\n   - `this.applyMigrationScript`: aplica el script de migración.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/InitializeDatabase.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.GetRandomString"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `len:Integer` Número de caracteres.",
          " `alphabet:Array<String>` Alfabeto de caracteres válidos."
        ],
        "@description": [
          " Genera un texto aleatorio de longitud indicada (len) con el alfabeto indicado (alphabet)."
        ],
        "@returns": [
          " Devuelve el texto aleatorio generado.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/GetRandomString.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.QueryDatabase"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `query:String` Consulta SQL a ejecutar."
        ],
        "@returns": [
          " `any` Resultado de la consulta ejecutada.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/QueryDatabase.js"
      }
    ],
    [
      {
        "_": [
          ""
        ],
        "@name": [
          " api.Utilities.Trace"
        ],
        "@type": [
          " Función"
        ],
        "@parameter": [
          " `msg:String`. Mensaje a imprimir por traceo."
        ],
        "@description": [
          " Imprime un mensaje prependizando '[TRACE]' por la consola.\n"
        ],
        "file": "/home/carlos/Software/Nodejs2/ebo_blog/src/Utilities/Trace.js"
      }
    ]
  ],
  "error": []
}