@ribajs/core
Version:
Core module of Riba.js
136 lines • 10.9 kB
JavaScript
import { extend, isJson } from "@ribajs/utils/src/type.js";
export class HttpService {
static setRequestHeaderEachRequest(name, value) {
this._requestHeadersEachRequest.push({
name,
value,
});
}
static async getJSON(url, data, headers = {}, options = {}) {
return this.fetch(url, "GET", data, "json", headers, options);
}
static async post(url, data, dataType, headers = {}, options = {}) {
return this.fetch(url, "POST", data, dataType, headers, options);
}
static async delete(url, data, dataType, headers = {}, options = {}) {
return this.fetch(url, "DELETE", data, dataType, headers, options);
}
static async put(url, data, dataType, headers = {}, options = {}) {
return this.fetch(url, "PUT", data, dataType, headers, options);
}
static async get(url, data, dataType, headers = {}, options = {}) {
return this.fetch(url, "GET", data, dataType, headers, options);
}
static parseDataType(dataType) {
const headers = {};
let contentType = "application/x-www-form-urlencoded";
let accept = "*/*";
switch (dataType) {
case "script":
contentType = "application/javascript";
break;
case "json":
contentType = "application/json";
accept = "application/json, text/javascript";
break;
case "xml":
contentType = "application/xml";
accept = "application/xml, text/xml";
break;
case "text":
contentType = "text/plain";
accept = "text/plain";
break;
case "html":
contentType = "text/html";
accept = "text/html";
break;
case "form":
contentType = "application/x-www-form-urlencoded";
break;
}
if (contentType) {
headers["Content-Type"] = contentType;
headers["Accept"] = accept;
}
return headers;
}
static async fetch(url, method = "GET", data = {}, dataType, headers = {}, options = {}) {
if (!fetch) {
throw new Error("Your browser does not support the fetch API, use xhr instead or install a polyfill.");
}
let body;
for (const header of this._requestHeadersEachRequest) {
headers[header.name] = header.value;
}
if (dataType) {
headers = extend({ deep: false }, headers, this.parseDataType(dataType));
}
if (!options.crossDomain && !headers["X-Requested-With"]) {
headers["X-Requested-With"] = "XMLHttpRequest";
}
const cache = options.cache ? options.cache : "default";
if (method === "GET" && data) {
const queryStr = new URLSearchParams(data).toString();
if (queryStr) {
const separator = url.includes("?") ? "&" : "?";
url = url + separator + new URLSearchParams(data).toString();
}
}
else if (data) {
if (dataType === "form") {
body = new URLSearchParams(data);
}
else {
body = JSON.stringify(data);
}
}
const response = await fetch(url, {
credentials: "same-origin",
cache,
method,
body,
headers,
mode: options.mode || "cors",
});
let bodyResult = (await response.text());
if (typeof bodyResult === "string" && isJson(bodyResult)) {
bodyResult = JSON.parse(bodyResult);
}
if (typeof bodyResult === "string") {
switch (bodyResult) {
case "null":
bodyResult = null;
break;
case "true":
bodyResult = true;
break;
case "false":
bodyResult = false;
break;
case "undefined":
bodyResult = undefined;
break;
}
}
const result = {
status: response.status,
headers: response.headers,
ok: response.ok,
redirected: response.redirected,
statusText: response.statusText,
type: response.type,
url: response.url,
arrayBuffer: response.arrayBuffer,
blob: response.blob,
bodyUsed: response.bodyUsed,
clone: response.clone,
formData: response.formData,
text: response.text,
body: bodyResult,
};
return result;
}
static _requestHeadersEachRequest = [];
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2h0dHAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSTNELE1BQU0sT0FBTyxXQUFXO0lBTWYsTUFBTSxDQUFDLDJCQUEyQixDQUFDLElBQVksRUFBRSxLQUFhO1FBQ25FLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUM7WUFDbkMsSUFBSTtZQUNKLEtBQUs7U0FDTixDQUFDLENBQUM7SUFDTCxDQUFDO0lBUU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ3pCLEdBQVcsRUFDWCxJQUFVLEVBQ1YsVUFBZSxFQUFFLEVBQ2pCLFVBQThCLEVBQUU7UUFFaEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFJLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQVNNLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUN0QixHQUFXLEVBQ1gsSUFBVSxFQUNWLFFBQWlCLEVBQ2pCLFVBQWUsRUFBRSxFQUNqQixVQUE4QixFQUFFO1FBRWhDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDeEIsR0FBVyxFQUNYLElBQVUsRUFDVixRQUFpQixFQUNqQixVQUFlLEVBQUUsRUFDakIsVUFBOEIsRUFBRTtRQUVoQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUksR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFP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