Plugin OData babel


Artikel ini menjelaskan terjemahan kode TypeScript ke dalam permintaan OData selama kompilasi program.


The babel-plugin-plugin yang ts2odata mem-parsing JavaScript AST menggunakan TsToOdata perpustakaan , yang deskripsi yang di artikel saya sebelumnya, Diketik OData query di naskah .


Kerugian dari versi pertama perpustakaan TsToOdata adalah adanya ketergantungan pada paket Babel/ pengurai, Babel/ traverse, parsing kode JavaScript saat runtime juga cukup mahal. Sekarang dependensi dan parsing kode ini dibuat dalam paket ts2odata-babel yang terpisah . Untuk pengembangan, Anda dapat menggunakan paket ts2odata yang memiliki dependensi dev pada ts2odata-babel dan melakukan terjemahan permintaan saat runtime, dan untuk rilis Anda dapat menggunakan perakitan dengan plug-in yang akan melakukan semua pekerjaan selama kompilasi proyek Anda. Sebagai hasil dari plugin, program Anda hanya akan memiliki dua dependensi pada paket ts2odata dan cross-fetch .


Untuk memulai, Anda perlu menginstal paket:


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

Tambahkan file babel.config.js ke root proyek:


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

kunci odataNamespace diperlukan untuk terjemahan permintaan yang benar jika layanan OData Anda tidak mendukung enumerasi tanpa namespace (Namespace).


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