tui-code-snippet
Version:
TOAST UI Utility: CodeSnippet
337 lines (274 loc) • 9.14 kB
JavaScript
exports.__esModule = true;
exports["default"] = void 0;
var _forEachArray = _interopRequireDefault(require("../collection/forEachArray"));
var _forEachOwnProperties = _interopRequireDefault(require("../collection/forEachOwnProperties"));
var _extend = _interopRequireDefault(require("../object/extend"));
var _isArray = _interopRequireDefault(require("../type/isArray"));
var _isEmpty = _interopRequireDefault(require("../type/isEmpty"));
var _isFunction = _interopRequireDefault(require("../type/isFunction"));
var _isNull = _interopRequireDefault(require("../type/isNull"));
var _isObject = _interopRequireDefault(require("../type/isObject"));
var _isUndefined = _interopRequireDefault(require("../type/isUndefined"));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
"default": obj
};
}
function encodePairs(key, value) {
return encodeURIComponent(key) + "=" + encodeURIComponent((0, _isNull["default"])(value) || (0, _isUndefined["default"])(value) ? '' : value);
}
function serializeParams(key, value, serializedList) {
if ((0, _isArray["default"])(value)) {
(0, _forEachArray["default"])(value, function (arrVal, index) {
serializeParams(key + "[" + ((0, _isObject["default"])(arrVal) ? index : '') + "]", arrVal, serializedList);
});
} else if ((0, _isObject["default"])(value)) {
(0, _forEachOwnProperties["default"])(value, function (objValue, objKey) {
serializeParams(key + "[" + objKey + "]", objValue, serializedList);
});
} else {
serializedList.push(encodePairs(key, value));
}
}
function serialize(params) {
if (!params || (0, _isEmpty["default"])(params)) {
return '';
}
var serializedList = [];
(0, _forEachOwnProperties["default"])(params, function (value, key) {
serializeParams(key, value, serializedList);
});
return serializedList.join('&');
}
var getDefaultOptions = function getDefaultOptions() {
return {
baseURL: '',
headers: {
common: {},
get: {},
post: {},
put: {},
"delete": {},
patch: {},
options: {},
head: {}
},
serializer: serialize
};
};
var HTTP_PROTOCOL_REGEXP = /^(http|https):\/\//i;
function combineURL(baseURL, url) {
if (HTTP_PROTOCOL_REGEXP.test(url)) {
return url;
}
if (baseURL.slice(-1) === '/' && url.slice(0, 1) === '/') {
url = url.slice(1);
}
return baseURL + url;
}
function getComputedOptions(defaultOptions, customOptions) {
var baseURL = defaultOptions.baseURL,
defaultHeaders = defaultOptions.headers,
defaultSerializer = defaultOptions.serializer,
defaultBeforeRequest = defaultOptions.beforeRequest,
defaultSuccess = defaultOptions.success,
defaultError = defaultOptions.error,
defaultComplete = defaultOptions.complete;
var url = customOptions.url,
contentType = customOptions.contentType,
method = customOptions.method,
params = customOptions.params,
headers = customOptions.headers,
serializer = customOptions.serializer,
beforeRequest = customOptions.beforeRequest,
success = customOptions.success,
error = customOptions.error,
complete = customOptions.complete,
withCredentials = customOptions.withCredentials,
mimeType = customOptions.mimeType;
var options = {
url: combineURL(baseURL, url),
method: method,
params: params,
headers: (0, _extend["default"])(defaultHeaders.common, defaultHeaders[method.toLowerCase()], headers),
serializer: serializer || defaultSerializer || serialize,
beforeRequest: [defaultBeforeRequest, beforeRequest],
success: [defaultSuccess, success],
error: [defaultError, error],
complete: [defaultComplete, complete],
withCredentials: withCredentials,
mimeType: mimeType
};
options.contentType = contentType || options.headers['Content-Type'];
delete options.headers['Content-Type'];
return options;
}
function validateStatus(status) {
return status >= 200 && status < 300;
}
function hasRequestBody(method) {
return /^(?:POST|PUT|PATCH)$/.test(method.toUpperCase());
}
function executeCallback(callback, param) {
if ((0, _isArray["default"])(callback)) {
(0, _forEachArray["default"])(callback, function (fn) {
return executeCallback(fn, param);
});
} else if ((0, _isFunction["default"])(callback)) {
callback(param);
}
}
function parseHeaders(text) {
var headers = {};
(0, _forEachArray["default"])(text.split('\r\n'), function (header) {
var _header$split = header.split(': '),
key = _header$split[0],
value = _header$split[1];
if (key !== '' && !(0, _isUndefined["default"])(value)) {
headers[key] = value;
}
});
return headers;
}
function parseJSONData(data) {
var result = '';
try {
result = JSON.parse(data);
} catch (_) {
result = data;
}
return result;
}
var REQUEST_DONE = 4;
function handleReadyStateChange(xhr, options) {
var readyState = xhr.readyState;
if (readyState != REQUEST_DONE) {
return;
}
var status = xhr.status,
statusText = xhr.statusText,
responseText = xhr.responseText;
var success = options.success,
resolve = options.resolve,
error = options.error,
reject = options.reject,
complete = options.complete;
if (validateStatus(status)) {
var contentType = xhr.getResponseHeader('Content-Type');
var data = responseText;
if (contentType && contentType.indexOf('application/json') > -1) {
data = parseJSONData(data);
}
executeCallback([success, resolve], {
status: status,
statusText: statusText,
data: data,
headers: parseHeaders(xhr.getAllResponseHeaders())
});
} else {
executeCallback([error, reject], {
status: status,
statusText: statusText
});
}
executeCallback(complete, {
status: status,
statusText: statusText
});
}
var QS_DELIM_REGEXP = /\?/;
function open(xhr, options) {
var url = options.url,
method = options.method,
serializer = options.serializer,
params = options.params;
var requestUrl = url;
if (!hasRequestBody(method) && params) {
var qs = (QS_DELIM_REGEXP.test(url) ? '&' : '?') + serializer(params);
requestUrl = "" + url + qs;
}
xhr.open(method, requestUrl);
}
function applyConfig(xhr, options) {
var method = options.method,
contentType = options.contentType,
mimeType = options.mimeType,
headers = options.headers,
_options$withCredenti = options.withCredentials,
withCredentials = _options$withCredenti === void 0 ? false : _options$withCredenti;
if (withCredentials) {
xhr.withCredentials = withCredentials;
}
if (mimeType) {
xhr.overrideMimeType(mimeType);
}
(0, _forEachOwnProperties["default"])(headers, function (value, header) {
if (!(0, _isObject["default"])(value)) {
xhr.setRequestHeader(header, value);
}
});
if (hasRequestBody(method)) {
xhr.setRequestHeader('Content-Type', contentType + "; charset=UTF-8");
}
xhr.setRequestHeader('x-requested-with', 'XMLHttpRequest');
}
var ENCODED_SPACE_REGEXP = /%20/g;
function send(xhr, options) {
var method = options.method,
serializer = options.serializer,
beforeRequest = options.beforeRequest,
_options$params = options.params,
params = _options$params === void 0 ? {} : _options$params,
_options$contentType = options.contentType,
contentType = _options$contentType === void 0 ? 'application/x-www-form-urlencoded' : _options$contentType;
var body = null;
if (hasRequestBody(method)) {
body = contentType.indexOf('application/x-www-form-urlencoded') > -1 ? serializer(params).replace(ENCODED_SPACE_REGEXP, '+') : JSON.stringify(params);
}
xhr.onreadystatechange = function () {
return handleReadyStateChange(xhr, options);
};
executeCallback(beforeRequest, xhr);
xhr.send(body);
}
function ajax(options) {
var xhr = new XMLHttpRequest();
var request = function request(opts) {
return (0, _forEachArray["default"])([open, applyConfig, send], function (fn) {
return fn(xhr, opts);
});
};
options = getComputedOptions(ajax.defaults, options);
if (typeof Promise !== 'undefined') {
return new Promise(function (resolve, reject) {
request((0, _extend["default"])(options, {
resolve: resolve,
reject: reject
}));
});
}
request(options);
return null;
}
ajax.defaults = getDefaultOptions();
ajax._reset = function () {
ajax.defaults = getDefaultOptions();
};
ajax._request = function (url, method, options) {
if (options === void 0) {
options = {};
}
return ajax((0, _extend["default"])(options, {
url: url,
method: method
}));
};
(0, _forEachArray["default"])(['get', 'post', 'put', 'delete', 'patch', 'options', 'head'], function (type) {
ajax[type] = function (url, options) {
return ajax._request(url, type.toUpperCase(), options);
};
});
var _default = ajax;
exports["default"] = _default;
module.exports = exports["default"];
;