rescript-ajax

3.0.0 • Public • Published

rescript-ajax

lib for sending ajax on rescript

Usage example

open AjaxBrowser
open AjaxParams

let sendQuerySelectHtmlElem: string => option<Dom.htmlElement> = %raw(`
function (qs) {
  return document.querySelector(qs);
}
`)
@@warning("-26")

let sendGet = async () => {
  switch sendQuerySelectHtmlElem("#getForm") {
  | None => Js.Console.log("Can't send data")
  | Some(htmlEl) =>
    (await FormUrlencoded(#get, "/get")
    ->AjaxBrowser.sendAjaxFormData(collectFormData(htmlEl), [])
    ->ResultExn.thenTryMap(res => Js.Console.log(res.data))) //ResultExn - it's dev-dependency
    ->ResultExn.getExn
  }
}

@@warning("+26")
%%raw(`
document.getElementById("sendGetBtn").onclick = sendGet;
`)

API

AjaxParams.resi

Module contains functions for working with params and formData

type formData

//Collect params object to formData
let structToFormData: 'p => formData

//Convert formData to js structure
let formDataToStruct: formData => {..}

let collectFormData: Dom.htmlElement => formData

let mergeFormData: (formData, formData) => formData

AjaxConfig.resi

Module contains functions and types for configurating extra request params

open AjaxParams
open WebTypes

type ajaxProtocol = [#http | #https]

type proxyConfig = {
  protocol: ajaxProtocol,
  host: string,
  port: int,
  auth: baseAuth,
}

type responseType = [
  | #arraybuffer
  | #document
  | #json
  | #text
  | #stream
  | #blob
]

type advAjaxParam =
  | AjaxBaseUrl(string)
  | AjaxHeaders(array<(string, string)>)
  | AjaxTimeout(int)
  | AjaxWithCredentials
  | AjaxAuth(baseAuth)
  | AjaxResponseType(responseType)
  | AjaxXsrfCookieName(string)
  | AjaxXsrfHeaderName(string)
  | AjaxMaxContentLength(int)
  | AjaxMaxBodyLength(int)
  | AjaxMaxRedirects(int)
  | AjaxProxy(proxyConfig)
  | AjaxDecompress

AjaxManager.resi

Module contains AjaxManager abstraction for module, thats contains api for sending AJAX. Also contains MakeAjaxManager functor, thats allows to configure environment and data-parser for AjaxManager module.

open AjaxParams
open WebTypes
open AjaxConfig

type axios
type url = string
type action =
  | FormUrlencoded(method, url)
  | MultipartFormData(method, url)

type ajaxResponse<'d> = {
  data: 'd,
  status: int,
  headers: unknown,
}

module type AjaxEnv = {
  let getAxios: unit => axios
}

module type AjaxManager = {
  let sendAjaxParams: (
    action,
    'p,
    array<advAjaxParam>,
  ) => promise<result<ajaxResponse<unknown>, exn>>
  let sendAjaxFormData: (
    action,
    formData,
    array<advAjaxParam>,
  ) => promise<result<ajaxResponse<unknown>, exn>>
}

module type MakeAjaxManager = (AE: AjaxEnv) => AjaxManager
module MakeAjaxManager: MakeAjaxManager

AjaxNode.resi

AjaxManager reslizations for Node.js

open AjaxManager

module AjaxEnvNode: AjaxEnv

module AjaxNode: AjaxManager

AjaxBrowser.resi

AjaxManager reslizations for Browser

open AjaxManager

module AjaxEnvBrowser: AjaxEnv

module AjaxBrowser: AjaxManager

License

MIT

Author

Anatoly Starodubtsev tostar74@mail.ru

Readme

Keywords

Package Sidebar

Install

npm i rescript-ajax

Weekly Downloads

4

Version

3.0.0

License

MIT

Unpacked Size

439 kB

Total Files

84

Last publish

Collaborators

  • pantagruel74