Complemento OData babel


El artículo describe la traducción del código TypeScript en consultas OData durante la compilación del programa.


El complemento babel-plugin-ts2odata analiza JavaScript AST utilizando la biblioteca TsToOdata, cuya descripción en mi artículo anterior, consultas Typed OData en TypeScript .


La desventaja de la primera versión de la biblioteca TsToOdata era la presencia de dependencias en los paquetes. Babel/ analizador, Babel/ traverse, analizar el código JavaScript en tiempo de ejecución también era bastante costoso. Ahora estas dependencias y análisis de código se realizan en un paquete ts2odata-babel separado . Para el desarrollo, puede usar el paquete ts2odata que tiene dependencias de desarrollo en ts2odata-babel y realiza la traducción de solicitudes en tiempo de ejecución, y para el lanzamiento puede usar el ensamblado con un complemento que hará todo el trabajo durante la compilación de su proyecto. Como resultado del complemento, su programa tendrá solo dos dependencias en los paquetes ts2odata y cross-fetch .


Para comenzar, debe instalar los paquetes:


npm install --save-dev @babel/core @babel/cli
npm install ts2odata
npm install --save-dev babel-plugin-ts2odata

Agregue el archivo babel.config.js a la raíz del proyecto:


module.exports = {
    plugins: [
        [
            'babel-plugin-ts2odata',
            {
                odataNamespace: 'OdataToEntity.Test.Model'
            }
        ]
    ]
};

la clave odataNamespace es necesaria para la traducción correcta de las solicitudes si su servicio OData no admite enumeraciones sin un espacio de nombres (espacio de nombres).


scripts package.json:


"build": "tsc --build && npx babel ./source --out-dir ./lib"

source TypeScript, lib JavaScript .


TypeScript:


let price = 2.1;
let orders = context.Orders.filter(o => o.Items.every(i => i.Price >= price), { price })
    .select(i => { return { orderYear: i.Date.getFullYear() } }).toArrayAsync();

:


let price = 2.1;
let orders = context.Orders.filter("Items/all(d:d/Price ge {price})", {
  price
}).select("[{\"expression\":\"year(Date)\",\"alias\":\"orderYear\",\"kind\":1}]").toArrayAsync();

OData :


http://localhost:5000/Orders?$filter=Items/all(d:d/Price+ge+2.1)&$compute=year(Date)+as+orderYear

, code.js QueryTests.ts, output.js .
vue.js.


TypeScript, , , - .


All Articles