Plugin OData babel


O artigo descreve a tradução do código TypeScript em consultas OData durante a compilação do programa.


O plug-in babel-plugin-ts2odata analisa o AST do JavaScript usando a biblioteca TsToOdata, cuja descrição no meu artigo anterior, consultas de OData digitada no TypeScript .


A desvantagem da primeira versão da biblioteca TsToOdata foi a presença de dependências nos pacotes babel/ parser, babel/ atravessar, analisar o código JavaScript em tempo de execução também foi bastante caro. Agora essas dependências e análise de código são feitas em um pacote ts2odata-babel separado . Para desenvolvimento, você pode usar o pacote ts2odata que possui devDependencies no ts2odata-babel e executa a conversão de solicitações em tempo de execução, e para liberação, você pode usar o assembly com um plug-in que fará todo o trabalho durante a compilação do seu projeto. Como resultado do plug-in, seu programa terá apenas duas dependências nos pacotes ts2odata e cross-fetch .


Para começar, você precisa instalar os pacotes:


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

Adicione o arquivo babel.config.js à raiz do projeto:


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

a chave odataNamespace é necessária para a tradução correta de solicitações se o serviço OData não suportar enumerações sem um espaço para nome (espaço para nome).


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