es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Generar código fuente JS a partir de una instancia de objeto JS

Estoy utilizando openapi-client-axios para generar una instancia de axios a partir de un archivo de especificación de API abierta. Cuando mi aplicación se inicie, solicitará la especificación de la API abierta y la biblioteca generará una instancia de axios a partir de ella. Ahora, me gustaría eliminar la dependencia en tiempo de ejecución de mi especificación de API abierta y guardar en su lugar la instancia generada.

¿Hay alguna forma de generar un constructor de prototipos a partir de un objeto JS?
Me gustaría lograr algo como esto:

generateJSCodeFrom(axiosInstance);

Output.js:

function GeneratedAxiosClient() {

}

GeneratedAxiosClient.prototype.getById = function(id) {
  return axios.get("localhost:8080/personas", {id});
};
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible generar un generador de prototipo a partir de un objeto JS utilizando diversas herramientas de generación de código y bibliotecas como jsdoc-to-prototype, Tern, Babel y ESDoc.

    La idea básica es generar código JS a partir del objeto y sus propiedades, luego utilizar ese código para crear una nueva función constructora que construya el objeto con las propiedades deseadas.

    Por ejemplo, utilizando Babel y ESDoc, puedes generar una función constructora a partir de un objeto de esta manera:

    function generateJSCodeFrom(obj) {
        const code = `class GeneratedAxiosClient { 
          constructor() {
        ${Object.keys(obj).map(prop => `this.${prop} = ${JSON.stringify(obj[prop])};`).join('\n')}
          }
        }`;
        return code;
    }
    
    const obj = {
        getById: function(id) {
            return axios.get("localhost:8080/people", {id});
        },
        // ...otros métodos y propiedades
    };
    
    const code = generateJSCodeFrom(obj);
    

    Después de ejecutar la función generateJSCodeFrom con el objeto obj anterior, la variable code contendría el código generado:

    class GeneratedAxiosClient {
      constructor() {
          this.getById = function(id) {
              return axios.get("localhost:8080/people", {id});
          };
          // ...otras propiedades y métodos irán aquí
      }
    }
    

    Este código generado se puede guardar en un archivo e importar en tu código, lo que te permitirá crear instancias de la clase GeneratedAxiosClient sin la dependencia en tiempo de ejecución del objeto original o la especificación de OpenAPI.

Comments are closed.