UNPKG

odata

Version:

o.js is a isomorphic Odata Javascript library to simplify the request of data. The main goal is to build a standalone, lightweight and easy to understand Odata lib.

77 lines (73 loc) 2.04 kB
import { OdataConfig } from "./OdataConfig"; import { OHandler } from "./OHandler"; /** * Use the 'o'-function to initialize a request directly or use the returned * handler to store the settings. * * Use o() directly jquery like: * @example * ```typescript * await o('https://rootUrl').get('resource').query(); * ``` * * Or with a handler: * @example * ```typescript * const oHandler = o('https://rootUrl'); * await oHandler.get('resource').query({ $top: 2 }); * ``` * * @param rootUrl The url to query * @param config The odata and fetch configuration. */ export function o(rootUrl: string | URL, config: Partial<OdataConfig> = {}) { // set the default configuration values const defaultConfigValues: OdataConfig = { batch: { boundaryPrefix: "batch_", changsetBoundaryPrefix: "changset_", endpoint: "$batch", headers: new Headers({ "Content-Type": "multipart/mixed", }), useChangset: false, useRelativeURLs: false, }, credentials: "omit", fragment: "value", headers: new Headers({ "Content-Type": "application/json", }), mode: "cors", redirect: "follow", referrer: typeof window === "undefined" ? undefined : "client", onStart: () => null, onError: () => null, onFinish: () => null, }; const mergedConfig: OdataConfig = { ...defaultConfigValues, ...config }; if (typeof rootUrl === "string") { try { // we assuming a resource const configUrl = (mergedConfig.rootUrl || window.location.href) as string; rootUrl = new URL( rootUrl, configUrl.endsWith("/") ? configUrl : `${configUrl}/` ); } catch (ex) { // no window?! rootUrl = new URL(rootUrl as string, mergedConfig.rootUrl); } } mergedConfig.rootUrl = rootUrl; return new OHandler(mergedConfig); } /** * Default exports */ export * from "./OBatch"; export * from "./OdataConfig"; export * from "./OdataQuery"; export * from "./OHandler"; export * from "./ORequest";