JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2
  • Score
    100M100P100Q43161F
  • License MIT

Code generation tools to build OData clients

Package Exports

  • magic-odata-code-gen
  • magic-odata-code-gen/dist/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (magic-odata-code-gen) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

magic-odata

Magical OData client generation for typescript. No more string. No more any!

Install

npm i magic-odata-code-gen --save-dev; npm i magic-odata-client;

  • magic-odata-code-gen is a dev dependency required to generate a client at compile time
    • This tool is small and we recommend installing it locally per project in order to avoid versioning issues
  • magic-odata-client is a dependency of your application. The generated code will use this package

Generate

node node_modules/magic-odata-code-gen/dist/index.js --metadataUrl "https://raw.githubusercontent.com/ShaneGH/magic-odata/main/docs/sampleOdataMetadata.xml"

Use

// import a generated client
import { ODataClient } from "./odataClient.js"

// create a client instance
const oDataClient = new ODataClient({
    // inject a basic Http client
    request: (input, init) => fetch(input, init),

    // add a root URI
    uriRoot: "https://my.odata.server/odata"
})

// use the client!
const popularBlogPosts = oDataClient.BlogPosts
    // Use object deconstruction to choose query tools
    .withQuery((blogPost, {
        $filter: {gt, or}, 
        $orderby: {orderBy}, 
        $skip, 
        $top
    }) => [ 
        // Combine query tools to build a query
        or(gt(blogPost.Comments.$count, 100), gt(blogPost.Likes, 100)),
        orderBy(blogPost.Name),
        $skip(0),
        $top(10)
    ])
    .get();

Why?

Write safe, statically typed odata queries in typescript. No more string. No more any!

  • Cut down on runtime errors
  • Explore OData API possibilities in your IDE
  • Runs in the browser or in node
  • No prod dependencies. Small bundle size
    • Generated executable code is tiny. Almost all generated code is type information
    • magic-odata-client minifies to ~24KB
  • Optional angular mode, for the angular HttpClient

Features

See Features.md

  • Code gen configuration
    • $metadata files protected with authentication
    • Angular mode
  • Client configuration
  • Entity keys
  • Entity path
  • Query options
    • $filter
    • $select
    • $expand
    • $orderBy
    • $search
    • $skip, $top and $count
    • custom
  • Casting
  • $value

Contributing

See Contributing.md