UNPKG

@siren-js/client

Version:
32 lines (31 loc) 1.48 kB
import { fieldsToNameValuePairs } from './fields-to-name-value-pairs'; import { serializeJson } from './serialize-json'; import { serializeMultipartFormData } from './serialize-multipart-form-data'; import { serializePlainText } from './serialize-plain-text'; import { serializeUrlEncodedForm } from './serialize-url-encoded-form'; import { UnsupportedSerializerTypeError } from './unsupported-serializer-type-error'; const withNameValuePairs = (fn) => (fields) => fn(fieldsToNameValuePairs(fields)); const typeToSerializeFn = new Map([ ['application/json', serializeJson], ['application/x-www-form-urlencoded', withNameValuePairs(serializeUrlEncodedForm)], ['multipart/form-data', withNameValuePairs(serializeMultipartFormData)], ['text/plain', withNameValuePairs(serializePlainText)] ]); /** * Default {@linkcode Serializer} implementation with support for the following media `type`s: * - `application/json` * - `application/x-www-form-url-encoded` * - `multipart/format-data` * - `text/plain` */ export const defaultSerializer = (type, fields) => new Promise((resolve, reject) => { const serialize = typeToSerializeFn.get(type); if (serialize == null) return reject(new UnsupportedSerializerTypeError(type)); const content = serialize(fields); return resolve({ content, // let the Fetch API generate a boundary parameter for FormData contentType: content instanceof FormData ? undefined : type }); });