UNPKG

@dotup/dotup-ts-types

Version:
1,039 lines (1,022 loc) 41.5 kB
function ___$insertStyle(css) { if (!css) { return; } if (typeof window === 'undefined') { return; } var style = document.createElement('style'); style.setAttribute('type', 'text/css'); style.innerHTML = css; document.head.appendChild(style); return css; } /* eslint-disable @typescript-eslint/no-namespace */ var ArrayTools; (function (ArrayTools) { // Adds the element at a specific position inside the linked list function insert(arr, val, previousItem) { const indexOfParent = previousItem === undefined ? -1 : arr.indexOf(previousItem); if (val instanceof Array) { // Array if (indexOfParent > -1) { arr.splice(indexOfParent + 1, 0, ...val); } else { arr.push(...val); } } else { // one item if (indexOfParent > -1) { arr.splice(indexOfParent + 1, 0, val); } else { arr.push(val); } } } ArrayTools.insert = insert; function getArray(value) { if (Array.isArray(value)) { return value; } return value === undefined ? [] : [value]; } ArrayTools.getArray = getArray; function shuffle(array) { let counter = array.length; // While there are elements in the array while (counter > 0) { // Pick a random index const index = Math.floor(Math.random() * counter); // Decrease counter by 1 counter--; // And swap the last element with it const temp = array[counter]; array[counter] = array[index]; array[index] = temp; } return array; } ArrayTools.shuffle = shuffle; // eslint-disable-next-line @typescript-eslint/no-explicit-any function getUniqueRandomKeys(array, count) { const f = Object.getOwnPropertyNames(array); const result = []; while (result.length < count) { const key = f[Math.floor(Math.random() * f.length)]; if (!result.find(item => item === key)) { result.push(key); } } return result; } ArrayTools.getUniqueRandomKeys = getUniqueRandomKeys; function getUniqueRandomValues(array, count) { const result = []; const arrayLength = array.length; while (result.length < count) { const element = array[Math.floor(Math.random() * arrayLength)]; if (!result.find(item => item === element)) { result.push(element); } } return result; } ArrayTools.getUniqueRandomValues = getUniqueRandomValues; function getRandomValue(array) { return array[Math.floor(Math.random() * array.length)]; } ArrayTools.getRandomValue = getRandomValue; })(ArrayTools || (ArrayTools = {})); class ExtendableEnum { constructor(...values) { const ret = {}; values.forEach(k => ret[k] = k); this.enumeration = ret; } static Create(...values) { const ret = {}; values.forEach(k => ret[k] = k); return ret; } static Extend(firstEnum, ...vals) { return Object.assign(this.Create(...vals), firstEnum); } } // const typ = ExtendableEnum.Create('sd'); // export type typ = typeof typ; // const other = ExtendableEnum.Extend(typ, 'bujaaa'); // type other = typeof other; class NamedList { constructor(listName, uniqueField) { this.Name = listName; this.UniqueField = uniqueField; this.Items = []; } Add(item) { if (this.UniqueField) { if (this.HasItem(item[this.UniqueField], this.UniqueField)) { throw new Error(`ListItem already exists in list '${this.Name}'`); } } this.Items.push(item); } Remove(item) { const index = this.Items.indexOf(item); if (index > -1) { this.Items.splice(index, 1); } } Contains(item) { return this.Items.indexOf(item) > -1; } GetRandomItem() { if (Array.isArray(this.Items)) { return this.Items[Math.floor(Math.random() * this.Items.length)]; } else { return undefined; } } HasItems() { return this.Items.length > 0; } HasItem(value, propertyName = this.UniqueField) { if (!value || !propertyName) { return false; } const index = this.Items.findIndex((item) => { if (item[propertyName] === value) { return true; } else { return false; } }); return index > -1; } GetItem(predicate) { return this.Items.find(predicate); } FindBy(value, propertyName = this.UniqueField) { if (!value || !propertyName) { return undefined; } return this.Items.find((item) => { if (item[propertyName] === value) { return true; } else { return false; } }); } Find(value) { if (!value) { return undefined; } return this.Items.find((item) => { if (item === value) { return true; } else { return false; } }); } OrderBy(orderField = this.UniqueField) { if (orderField) { return this.Items.sort((a, b) => { if (a < b) { return -1; } if (a > b) { return 1; } return 0; }); } else { return this.Items.sort((a, b) => { if (a[orderField] < b[orderField]) { return -1; } if (a[orderField] > b[orderField]) { return 1; } return 0; }); } } Reset() { this.Items = []; } } class ObjectTools { static get(obj, path) { const props = path.split("."); if (props.length > 1) { let o = obj[props[0]]; return props.reduce((p, c) => { if (o === undefined || o[c] === undefined) { o = undefined; return undefined; } o = o[c]; return o; }); } else { return obj[path]; } } /** * The classes must use the toStringTag symbol. */ static isInstanceOf(value, instanceOf) { if (typeof value !== "object") { return false; } else if (instanceOf.name !== value.constructor.name) { return false; } else if (new instanceOf()[Symbol.toStringTag] === value[Symbol.toStringTag]) { return true; } return false; } // Adds the element at a specific position inside the linked list static GetMethodNames(obj, ...excluded) { const skip = excluded || []; const methods = []; skip.push("constructor"); let item = obj; while (item = Reflect.getPrototypeOf(item)) { const keys = Reflect.ownKeys(item); if (item instanceof Object) { keys.forEach((k) => { if (skip.indexOf(k) < 0) { methods.push(k); } }); } } return methods; } static hasMethod(obj, name) { const desc = Object.getOwnPropertyDescriptor(obj, name); return !!desc && typeof desc.value === "function"; } static GetOwnMethodNames(instance, ...excluded) { const skip = excluded || []; const methods = []; skip.push("constructor"); const obj = Reflect.getPrototypeOf(instance); const keys = Reflect.ownKeys(obj); if (obj instanceof Object) { keys.forEach((k) => { if (ObjectTools.hasMethod(obj, k.toString()) && skip.indexOf(k) < 0) { methods.push(k); } }); } return methods; } static GetValue(obj, key) { return obj[key]; } static CopyNullProps(source, ...props) { const result = {}; for (const prop of props) { result[prop] = source[prop]; } return result; } static CopyProps(source, ...props) { const result = {}; for (const prop of props) { if (source[prop]) { result[prop] = source[prop]; } } return result; } static OmitProps(source, ...props) { const result = {}; const keys = Object.keys(source).filter(k => props.every(p => p !== k)); for (const key of keys) { if (source[key]) { result[key] = source[key]; } } return result; } static CopyEachSource(source, target) { Object.keys(source) .forEach(item => { target[item] = source[item]; }); return target; } static CopyEachTarget(source, target) { Object.keys(target) .forEach(item => { target[item] = source[item]; }); return target; } static DeepMerge(source, target) { const src = source; const t = target; const keys = Object.keys(src); for (const key of keys) { if (src[key] instanceof Array) { if (!Array.isArray(t[key])) { t[key] = []; } ObjectTools.DeepMerge(src[key], t[key]); } else if (src[key] instanceof Object) { if (!t[key]) t[key] = {}; ObjectTools.DeepMerge(src[key], t[key]); } else if (src[key] instanceof Date) { t[key] = new Date(src[key].getTime()); } else { t[key] = src[key]; } } // return t; } static DeepEquals(source, target) { // const source = source as any; // const target = target as any; let result = true; const keys = Object.keys(source); for (const key of keys) { if (source[key] instanceof Array) { result = ObjectTools.DeepEquals(source[key], target[key]); } else if (source[key] instanceof Object) { result = ObjectTools.DeepEquals(source[key], target[key]); } else if (source[key] instanceof Date) { if (target[key] instanceof Date) { return source[key].getTime() === target[key].getTime(); } else { result = false; } } else { result = target[key] === source[key]; } if (result !== true) { return result; } } return result; } static DeepMerge2(source, target) { const t = target; const keys = Object.keys(source); for (const key of keys) { const srcItem = source[key]; if (srcItem instanceof Object) { ObjectTools.DeepMerge(srcItem, t[key]); } else if (srcItem instanceof Date) { t[key] = new Date(srcItem.getTime()); } else if (srcItem instanceof Array) { const copy = []; for (let i = 0, len = srcItem.length; i < len; i++) { const item = {}; ObjectTools.DeepMerge(srcItem[i], item); copy[i] = item; } t[key] = copy; // ObjectTools.DeepMerge(srcItem, t[key]); // if (Array.isArray(t[key])) { // } else { // t[key] = [...srcItem]; // } } else { t[key] = srcItem; } } return t; } static DeepCopy(obj) { // Null or undefined if (obj == null) { return obj; } // Date if (obj instanceof Date) { return new Date(obj.getTime()); } // Array if (obj instanceof Array) { const copy = []; for (let i = 0, len = obj.length; i < len; i++) { copy[i] = ObjectTools.DeepCopy(obj[i]); } return copy; } // Object if (obj instanceof Object) { const copy = {}; for (const attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = ObjectTools.DeepCopy(obj[attr]); } return copy; } // Others return obj; } static ObjectFromArray(array, indexKey) { return array.reduce((result, current) => { result[current[indexKey]] = current; return result; }, {}); } } async function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } async function Event(emitter, event) { return new Promise((resolve) => { emitter.on(event, () => resolve()); }); } async function timeoutAfter(timeout, executor) { const p = new Promise((resolve, reject) => setTimeout(() => reject(`Timed out after ${timeout} ms.`), timeout)); return Promise.race([ new Promise(executor), p ]); } async function timeoutPromise(timeout, promise) { const p = new Promise((resolve, reject) => setTimeout(() => reject(`Timed out after ${timeout} ms.`), timeout)); return Promise.race([ promise, p ]); } function Async(action, onrejected) { action() .catch(e => { if (onrejected) onrejected(e); console.log(e); }); } async function AsyncCallback(arg1, arg2, action) { if (typeof arg2 === "function") { // Action(arg) return new Promise((resolve, reject) => { action(arg1, (err, val) => { if (err) { reject(err); } else { resolve(val); } }); }); } else { // Action(arg1, arg2) if (action === undefined) { throw new Error("action === undefined"); } return new Promise((resolve, reject) => { // ?? why as any? it's checked with is function above.. action(arg1, arg2, (err, val) => { if (err) { reject(err); } else { resolve(val); } }); }); } } // export async function AsyncCallback<TResult, TArg>(arg: TArg, action: AsyncCallbackFunction<TResult, TArg>): Promise<TResult> { // return new Promise((resolve, reject) => { // action(arg, (err: Error, val: TResult) => { // if (err) { // reject(err); // } else { // resolve(val); // } // }); // }) // } function parseUrl(url) { const parts = /(?:(?:(([^:\/#\?]+:)?(?:(?:\/\/)(?:(?:(?:([^:@\/#\?]+)(?:\:([^:@\/#\?]*))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((?:\/?(?:[^\/\?#]+\/+)*)(?:[^\?#]*)))?(\?[^#]+)?)(#.*)?/.exec(url); if (!parts) { return {}; } return { href: parts[0], origin: parts[1], protocol: parts[2], username: parts[3], password: parts[4], host: parts[5], hostname: parts[6], port: Number(parts[7]), pathname: parts[8], search: parts[9], hash: parts[10] }; } /** * Replace placeholder in text with args * * Indexed: * const str = RegexTools.replace('{1} {0}', 'tool', 'Nice'}; * * With Object: * const str = RegexTools.replace('{a} {b}', {b: 'tool', a: 'Nice'}}; * */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function replace(text, ...args) { let result = text; if (args.length) { const t = typeof args[0]; let key; // eslint-disable-next-line @typescript-eslint/no-explicit-any const values = (t === "string" || t === "number") ? Array.prototype.slice.call(args) : args[0]; for (key in values) { result = result.replace(new RegExp("\\{" + key + "\\}", "gi"), values[key]); } } return result; } /** * Replace placeholder in text with args * * With Object: * const str = RegexTools.replacePath('{a} {b.1}', {b: {1:'tool'}, a: 'Nice'}}; * */ function replacePath(text, values) { if (text === undefined || values === undefined) { return text; } const regex = /\{(?:[^{}]+)\}/g; let result = text; let m; while ((m = regex.exec(text)) !== null) { // This is necessary to avoid infinite loops with zero-width matches if (m.index === regex.lastIndex) { regex.lastIndex++; } m.forEach(match => { result = result.replace(match, ObjectTools.get(values, match.substring(1, match.length - 1))); }); } return result; } /* eslint-disable @typescript-eslint/no-namespace */ var StringTools; (function (StringTools) { function format(text, ...args) { let result = text; if (args.length) { const t = typeof args[0]; let key; // eslint-disable-next-line @typescript-eslint/no-explicit-any const values = ("string" === t || "number" === t) ? Array.prototype.slice.call(args) : args[0]; for (key in values) { result = result.replace(new RegExp("\\{" + key + "\\}", "gi"), values[key]); } } return result; } StringTools.format = format; // interface String { // format(...args: any[]): string; // } // (<any>String.prototype).format = // function (...args: any) { // let str = this.toString(); // if (args.length) { // var t = typeof args[0]; // var key; // var args = ("string" === t || "number" === t) ? // Array.prototype.slice.call(args) // : args[0]; // for (key in args) { // str = str.replace(new RegExp("\\{" + key + "\\}", "gi"), args[key]); // } // } // return str; // }; })(StringTools || (StringTools = {})); class EnumTools { static getNamesAndValues(e) { return this.getNames(e).map(_name => [_name, e[_name]]); // return this.getNames(e).map(_name => { return { name: _name, value: e[_name] as T }; }); } static getNames(e) { return Object.keys(e).filter(key => isNaN(+key)); } static getName(e, value) { const all = this.getNamesAndValues(e).filter(([, enumValue]) => enumValue === value); return all.length == 1 ? all[0][0] : undefined; } static getValue(e, key) { const allNamesAndValues = this.getNamesAndValues(e).filter(([name,]) => name === key); return allNamesAndValues[0][1]; } static getValues(e) { return this.getNames(e).map(name => e[name]); } } var HttpStatusCode; (function (HttpStatusCode) { /** * The server has received the request headers and the client should proceed to send the request body * (in the case of a request for which a body needs to be sent; for example, a POST request). * Sending a large request body to a server after a request has been rejected for inappropriate headers would be inefficient. * To have a server check the request's headers, a client must send Expect: 100-continue as a header in its initial request * and receive a 100 Continue status code in response before sending the body. The response 417 Expectation Failed indicates the request should not be continued. */ HttpStatusCode[HttpStatusCode["CONTINUE"] = 100] = "CONTINUE"; /** * The requester has asked the server to switch protocols and the server has agreed to do so. */ HttpStatusCode[HttpStatusCode["SWITCHING_PROTOCOLS"] = 101] = "SWITCHING_PROTOCOLS"; /** * A WebDAV request may contain many sub-requests involving file operations, requiring a long time to complete the request. * This code indicates that the server has received and is processing the request, but no response is available yet. * This prevents the client from timing out and assuming the request was lost. */ HttpStatusCode[HttpStatusCode["PROCESSING"] = 102] = "PROCESSING"; /** * Standard response for successful HTTP requests. * The actual response will depend on the request method used. * In a GET request, the response will contain an entity corresponding to the requested resource. * In a POST request, the response will contain an entity describing or containing the result of the action. */ HttpStatusCode[HttpStatusCode["OK"] = 200] = "OK"; /** * The request has been fulfilled, resulting in the creation of a new resource. */ HttpStatusCode[HttpStatusCode["CREATED"] = 201] = "CREATED"; /** * The request has been accepted for processing, but the processing has not been completed. * The request might or might not be eventually acted upon, and may be disallowed when processing occurs. */ HttpStatusCode[HttpStatusCode["ACCEPTED"] = 202] = "ACCEPTED"; /** * SINCE HTTP/1.1 * The server is a transforming proxy that received a 200 OK from its origin, * but is returning a modified version of the origin's response. */ HttpStatusCode[HttpStatusCode["NON_AUTHORITATIVE_INFORMATION"] = 203] = "NON_AUTHORITATIVE_INFORMATION"; /** * The server successfully processed the request and is not returning any content. */ HttpStatusCode[HttpStatusCode["NO_CONTENT"] = 204] = "NO_CONTENT"; /** * The server successfully processed the request, but is not returning any content. * Unlike a 204 response, this response requires that the requester reset the document view. */ HttpStatusCode[HttpStatusCode["RESET_CONTENT"] = 205] = "RESET_CONTENT"; /** * The server is delivering only part of the resource (byte serving) due to a range header sent by the client. * The range header is used by HTTP clients to enable resuming of interrupted downloads, * or split a download into multiple simultaneous streams. */ HttpStatusCode[HttpStatusCode["PARTIAL_CONTENT"] = 206] = "PARTIAL_CONTENT"; /** * The message body that follows is an XML message and can contain a number of separate response codes, * depending on how many sub-requests were made. */ HttpStatusCode[HttpStatusCode["MULTI_STATUS"] = 207] = "MULTI_STATUS"; /** * The members of a DAV binding have already been enumerated in a preceding part of the (multistatus) response, * and are not being included again. */ HttpStatusCode[HttpStatusCode["ALREADY_REPORTED"] = 208] = "ALREADY_REPORTED"; /** * The server has fulfilled a request for the resource, * and the response is a representation of the result of one or more instance-manipulations applied to the current instance. */ HttpStatusCode[HttpStatusCode["IM_USED"] = 226] = "IM_USED"; /** * Indicates multiple options for the resource from which the client may choose (via agent-driven content negotiation). * For example, this code could be used to present multiple video format options, * to list files with different filename extensions, or to suggest word-sense disambiguation. */ HttpStatusCode[HttpStatusCode["MULTIPLE_CHOICES"] = 300] = "MULTIPLE_CHOICES"; /** * This and all future requests should be directed to the given URI. */ HttpStatusCode[HttpStatusCode["MOVED_PERMANENTLY"] = 301] = "MOVED_PERMANENTLY"; /** * This is an example of industry practice contradicting the standard. * The HTTP/1.0 specification (RFC 1945) required the client to perform a temporary redirect * (the original describing phrase was "Moved Temporarily"), but popular browsers implemented 302 * with the functionality of a 303 See Other. Therefore, HTTP/1.1 added status codes 303 and 307 * to distinguish between the two behaviours. However, some Web applications and frameworks * use the 302 status code as if it were the 303. */ HttpStatusCode[HttpStatusCode["FOUND"] = 302] = "FOUND"; /** * SINCE HTTP/1.1 * The response to the request can be found under another URI using a GET method. * When received in response to a POST (or PUT/DELETE), the client should presume that * the server has received the data and should issue a redirect with a separate GET message. */ HttpStatusCode[HttpStatusCode["SEE_OTHER"] = 303] = "SEE_OTHER"; /** * Indicates that the resource has not been modified since the version specified by the request headers If-Modified-Since or If-None-Match. * In such case, there is no need to retransmit the resource since the client still has a previously-downloaded copy. */ HttpStatusCode[HttpStatusCode["NOT_MODIFIED"] = 304] = "NOT_MODIFIED"; /** * SINCE HTTP/1.1 * The requested resource is available only through a proxy, the address for which is provided in the response. * Many HTTP clients (such as Mozilla and Internet Explorer) do not correctly handle responses with this status code, primarily for security reasons. */ HttpStatusCode[HttpStatusCode["USE_PROXY"] = 305] = "USE_PROXY"; /** * No longer used. Originally meant "Subsequent requests should use the specified proxy." */ HttpStatusCode[HttpStatusCode["SWITCH_PROXY"] = 306] = "SWITCH_PROXY"; /** * SINCE HTTP/1.1 * In this case, the request should be repeated with another URI; however, future requests should still use the original URI. * In contrast to how 302 was historically implemented, the request method is not allowed to be changed when reissuing the original request. * For example, a POST request should be repeated using another POST request. */ HttpStatusCode[HttpStatusCode["TEMPORARY_REDIRECT"] = 307] = "TEMPORARY_REDIRECT"; /** * The request and all future requests should be repeated using another URI. * 307 and 308 parallel the behaviors of 302 and 301, but do not allow the HTTP method to change. * So, for example, submitting a form to a permanently redirected resource may continue smoothly. */ HttpStatusCode[HttpStatusCode["PERMANENT_REDIRECT"] = 308] = "PERMANENT_REDIRECT"; /** * The server cannot or will not process the request due to an apparent client error * (e.g., malformed request syntax, too large size, invalid request message framing, or deceptive request routing). */ HttpStatusCode[HttpStatusCode["BAD_REQUEST"] = 400] = "BAD_REQUEST"; /** * Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet * been provided. The response must include a WWW-Authenticate header field containing a challenge applicable to the * requested resource. See Basic access authentication and Digest access authentication. 401 semantically means * "unauthenticated",i.e. the user does not have the necessary credentials. */ HttpStatusCode[HttpStatusCode["UNAUTHORIZED"] = 401] = "UNAUTHORIZED"; /** * Reserved for future use. The original intention was that this code might be used as part of some form of digital * cash or micro payment scheme, but that has not happened, and this code is not usually used. * Google Developers API uses this status if a particular developer has exceeded the daily limit on requests. */ HttpStatusCode[HttpStatusCode["PAYMENT_REQUIRED"] = 402] = "PAYMENT_REQUIRED"; /** * The request was valid, but the server is refusing action. * The user might not have the necessary permissions for a resource. */ HttpStatusCode[HttpStatusCode["FORBIDDEN"] = 403] = "FORBIDDEN"; /** * The requested resource could not be found but may be available in the future. * Subsequent requests by the client are permissible. */ HttpStatusCode[HttpStatusCode["NOT_FOUND"] = 404] = "NOT_FOUND"; /** * A request method is not supported for the requested resource; * for example, a GET request on a form that requires data to be presented via POST, or a PUT request on a read-only resource. */ HttpStatusCode[HttpStatusCode["METHOD_NOT_ALLOWED"] = 405] = "METHOD_NOT_ALLOWED"; /** * The requested resource is capable of generating only content not acceptable according to the Accept headers sent in the request. */ HttpStatusCode[HttpStatusCode["NOT_ACCEPTABLE"] = 406] = "NOT_ACCEPTABLE"; /** * The client must first authenticate itself with the proxy. */ HttpStatusCode[HttpStatusCode["PROXY_AUTHENTICATION_REQUIRED"] = 407] = "PROXY_AUTHENTICATION_REQUIRED"; /** * The server timed out waiting for the request. * According to HTTP specifications: * "The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time." */ HttpStatusCode[HttpStatusCode["REQUEST_TIMEOUT"] = 408] = "REQUEST_TIMEOUT"; /** * Indicates that the request could not be processed because of conflict in the request, * such as an edit conflict between multiple simultaneous updates. */ HttpStatusCode[HttpStatusCode["CONFLICT"] = 409] = "CONFLICT"; /** * Indicates that the resource requested is no longer available and will not be available again. * This should be used when a resource has been intentionally removed and the resource should be purged. * Upon receiving a 410 status code, the client should not request the resource in the future. * Clients such as search engines should remove the resource from their indices. * Most use cases do not require clients and search engines to purge the resource, and a "404 Not Found" may be used instead. */ HttpStatusCode[HttpStatusCode["GONE"] = 410] = "GONE"; /** * The request did not specify the length of its content, which is required by the requested resource. */ HttpStatusCode[HttpStatusCode["LENGTH_REQUIRED"] = 411] = "LENGTH_REQUIRED"; /** * The server does not meet one of the preconditions that the requester put on the request. */ HttpStatusCode[HttpStatusCode["PRECONDITION_FAILED"] = 412] = "PRECONDITION_FAILED"; /** * The request is larger than the server is willing or able to process. Previously called "Request Entity Too Large". */ HttpStatusCode[HttpStatusCode["PAYLOAD_TOO_LARGE"] = 413] = "PAYLOAD_TOO_LARGE"; /** * The URI provided was too long for the server to process. Often the result of too much data being encoded as a query-string of a GET request, * in which case it should be converted to a POST request. * Called "Request-URI Too Long" previously. */ HttpStatusCode[HttpStatusCode["URI_TOO_LONG"] = 414] = "URI_TOO_LONG"; /** * The request entity has a media type which the server or resource does not support. * For example, the client uploads an image as image/svg+xml, but the server requires that images use a different format. */ HttpStatusCode[HttpStatusCode["UNSUPPORTED_MEDIA_TYPE"] = 415] = "UNSUPPORTED_MEDIA_TYPE"; /** * The client has asked for a portion of the file (byte serving), but the server cannot supply that portion. * For example, if the client asked for a part of the file that lies beyond the end of the file. * Called "Requested Range Not Satisfiable" previously. */ HttpStatusCode[HttpStatusCode["RANGE_NOT_SATISFIABLE"] = 416] = "RANGE_NOT_SATISFIABLE"; /** * The server cannot meet the requirements of the Expect request-header field. */ HttpStatusCode[HttpStatusCode["EXPECTATION_FAILED"] = 417] = "EXPECTATION_FAILED"; /** * This code was defined in 1998 as one of the traditional IETF April Fools' jokes, in RFC 2324, Hyper Text Coffee Pot Control Protocol, * and is not expected to be implemented by actual HTTP servers. The RFC specifies this code should be returned by * teapots requested to brew coffee. This HTTP status is used as an Easter egg in some websites, including Google.com. */ HttpStatusCode[HttpStatusCode["I_AM_A_TEAPOT"] = 418] = "I_AM_A_TEAPOT"; /** * The request was directed at a server that is not able to produce a response (for example because a connection reuse). */ HttpStatusCode[HttpStatusCode["MISDIRECTED_REQUEST"] = 421] = "MISDIRECTED_REQUEST"; /** * The request was well-formed but was unable to be followed due to semantic errors. */ HttpStatusCode[HttpStatusCode["UNPROCESSABLE_ENTITY"] = 422] = "UNPROCESSABLE_ENTITY"; /** * The resource that is being accessed is locked. */ HttpStatusCode[HttpStatusCode["LOCKED"] = 423] = "LOCKED"; /** * The request failed due to failure of a previous request (e.g., a PROPPATCH). */ HttpStatusCode[HttpStatusCode["FAILED_DEPENDENCY"] = 424] = "FAILED_DEPENDENCY"; /** * The client should switch to a different protocol such as TLS/1.0, given in the Upgrade header field. */ HttpStatusCode[HttpStatusCode["UPGRADE_REQUIRED"] = 426] = "UPGRADE_REQUIRED"; /** * The origin server requires the request to be conditional. * Intended to prevent "the 'lost update' problem, where a client * GETs a resource's state, modifies it, and PUTs it back to the server, * when meanwhile a third party has modified the state on the server, leading to a conflict." */ HttpStatusCode[HttpStatusCode["PRECONDITION_REQUIRED"] = 428] = "PRECONDITION_REQUIRED"; /** * The user has sent too many requests in a given amount of time. Intended for use with rate-limiting schemes. */ HttpStatusCode[HttpStatusCode["TOO_MANY_REQUESTS"] = 429] = "TOO_MANY_REQUESTS"; /** * The server is unwilling to process the request because either an individual header field, * or all the header fields collectively, are too large. */ HttpStatusCode[HttpStatusCode["REQUEST_HEADER_FIELDS_TOO_LARGE"] = 431] = "REQUEST_HEADER_FIELDS_TOO_LARGE"; /** * A server operator has received a legal demand to deny access to a resource or to a set of resources * that includes the requested resource. The code 451 was chosen as a reference to the novel Fahrenheit 451. */ HttpStatusCode[HttpStatusCode["UNAVAILABLE_FOR_LEGAL_REASONS"] = 451] = "UNAVAILABLE_FOR_LEGAL_REASONS"; /** * A generic error message, given when an unexpected condition was encountered and no more specific message is suitable. */ HttpStatusCode[HttpStatusCode["INTERNAL_SERVER_ERROR"] = 500] = "INTERNAL_SERVER_ERROR"; /** * The server either does not recognize the request method, or it lacks the ability to fulfill the request. * Usually this implies future availability (e.g., a new feature of a web-service API). */ HttpStatusCode[HttpStatusCode["NOT_IMPLEMENTED"] = 501] = "NOT_IMPLEMENTED"; /** * The server was acting as a gateway or proxy and received an invalid response from the upstream server. */ HttpStatusCode[HttpStatusCode["BAD_GATEWAY"] = 502] = "BAD_GATEWAY"; /** * The server is currently unavailable (because it is overloaded or down for maintenance). * Generally, this is a temporary state. */ HttpStatusCode[HttpStatusCode["SERVICE_UNAVAILABLE"] = 503] = "SERVICE_UNAVAILABLE"; /** * The server was acting as a gateway or proxy and did not receive a timely response from the upstream server. */ HttpStatusCode[HttpStatusCode["GATEWAY_TIMEOUT"] = 504] = "GATEWAY_TIMEOUT"; /** * The server does not support the HTTP protocol version used in the request */ HttpStatusCode[HttpStatusCode["HTTP_VERSION_NOT_SUPPORTED"] = 505] = "HTTP_VERSION_NOT_SUPPORTED"; /** * Transparent content negotiation for the request results in a circular reference. */ HttpStatusCode[HttpStatusCode["VARIANT_ALSO_NEGOTIATES"] = 506] = "VARIANT_ALSO_NEGOTIATES"; /** * The server is unable to store the representation needed to complete the request. */ HttpStatusCode[HttpStatusCode["INSUFFICIENT_STORAGE"] = 507] = "INSUFFICIENT_STORAGE"; /** * The server detected an infinite loop while processing the request. */ HttpStatusCode[HttpStatusCode["LOOP_DETECTED"] = 508] = "LOOP_DETECTED"; /** * Further extensions to the request are required for the server to fulfill it. */ HttpStatusCode[HttpStatusCode["NOT_EXTENDED"] = 510] = "NOT_EXTENDED"; /** * The client needs to authenticate to gain network access. * Intended for use by intercepting proxies used to control access to the network (e.g., "captive portals" used * to require agreement to Terms of Service before granting full Internet access via a Wi-Fi hotspot). */ HttpStatusCode[HttpStatusCode["NETWORK_AUTHENTICATION_REQUIRED"] = 511] = "NETWORK_AUTHENTICATION_REQUIRED"; })(HttpStatusCode || (HttpStatusCode = {})); var HttpVerbsEnum; (function (HttpVerbsEnum) { // GET // The GET method requests a representation of the specified resource.Requests using GET should only retrieve data. HttpVerbsEnum["get"] = "GET"; // HEAD // The HEAD method asks for a response identical to that of a GET request, but without the response body. HttpVerbsEnum["head"] = "HEAD"; // POST // The POST method is used to submit an entity to the specified resource, often causing a change in state or side effects on the server. HttpVerbsEnum["post"] = "POST"; // PUT // The PUT method replaces all current representations of the target resource with the request payload. HttpVerbsEnum["put"] = "PUT"; // DELETE // The DELETE method deletes the specified resource. HttpVerbsEnum["delete"] = "DELETE"; // CONNECT // The CONNECT method establishes a tunnel to the server identified by the target resource. HttpVerbsEnum["connect"] = "CONNECT"; // OPTIONS // The OPTIONS method is used to describe the communication options for the target resource. HttpVerbsEnum["options"] = "OPTOINS"; // TRACE // The TRACE method performs a message loop-back test along the path to the target resource. HttpVerbsEnum["trans"] = "TRACE"; // PATCH // The PATCH method is used to apply partial modifications to a resource. HttpVerbsEnum["patch"] = "PATCH"; })(HttpVerbsEnum || (HttpVerbsEnum = {})); class CustomError extends Error { constructor(message, code) { super(message); this.code = code; this.name = "CustomError"; } } var ErrorCodes; (function (ErrorCodes) { ErrorCodes["ConnectionFailed"] = "ConnectionFailed"; ErrorCodes["ConnectionStringIsMissing"] = "ConnectionStringIsMissing"; })(ErrorCodes || (ErrorCodes = {})); class DatabaseError extends CustomError { constructor(message, code) { super(message, code); this.name = "DatabaseError"; } static ConnectionFailed() { return new DatabaseError("Connection failed", ErrorCodes.ConnectionFailed); } static ConnectionStringIsMissing() { return new DatabaseError("Connection string is missing", ErrorCodes.ConnectionStringIsMissing); } } export { ArrayTools, Async, AsyncCallback, CustomError, DatabaseError, EnumTools, ErrorCodes, Event, ExtendableEnum, HttpStatusCode, HttpVerbsEnum, NamedList, ObjectTools, StringTools, parseUrl, replace, replacePath, sleep, timeoutAfter, timeoutPromise }; //# sourceMappingURL=index.esm.js.map