@krainovsd/js-helpers 0.15.0 → 0.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cjs/index.cjs CHANGED
@@ -1380,35 +1380,54 @@ function generateConsolePostMiddleware(options = {}) {
1380
1380
  };
1381
1381
  }
1382
1382
 
1383
+ let waiting = false;
1383
1384
  async function getOauthTokenFromOtherWindow(options) {
1384
- let waiting = true;
1385
+ await waitUntil(() => waiting);
1386
+ const expires = localStorage.getItem(options.expiresTokenStorageName);
1387
+ if (expires != undefined && !Number.isNaN(+expires) && Date.now() < +expires)
1388
+ return;
1389
+ waiting = true;
1385
1390
  const url = new URL(typeof options.refreshTokenWindowUrl === "function"
1386
1391
  ? options.refreshTokenWindowUrl()
1387
1392
  : (options.refreshTokenWindowUrl ?? window.origin));
1388
1393
  url.searchParams.append(options.onlyRefreshTokenWindowQueryName, "true");
1389
1394
  let windowInstance = window.open(url.toString(), "_blank", "width=800,height=600,left=100,top=100");
1390
- windowInstance ??= window.open(url.toString());
1391
- if (!windowInstance) {
1395
+ windowInstance ??= window.open(url.toString(), "_blank");
1396
+ if (windowInstance) {
1397
+ const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);
1398
+ const windowCloseObserver = setInterval(() => {
1399
+ if (windowInstance.closed) {
1400
+ if (waiting) {
1401
+ waiting = false;
1402
+ channel.close();
1403
+ clearInterval(windowCloseObserver);
1404
+ }
1405
+ }
1406
+ }, options.closeObserveInterval ?? 500);
1407
+ channel.onmessage = () => {
1408
+ if (waiting) {
1409
+ waiting = false;
1410
+ channel.close();
1411
+ clearInterval(windowCloseObserver);
1412
+ }
1413
+ };
1414
+ setTimeout(() => {
1415
+ if (waiting) {
1416
+ waiting = false;
1417
+ channel.close();
1418
+ clearInterval(windowCloseObserver);
1419
+ }
1420
+ if (windowInstance && !windowInstance.closed) {
1421
+ windowInstance.close();
1422
+ }
1423
+ }, options.wait ?? 15000);
1424
+ }
1425
+ else {
1392
1426
  if (options.onWindowOpenError)
1393
1427
  options.onWindowOpenError();
1428
+ waiting = false;
1394
1429
  return;
1395
1430
  }
1396
- const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);
1397
- channel.onmessage = () => {
1398
- if (waiting) {
1399
- waiting = false;
1400
- channel.close();
1401
- }
1402
- };
1403
- setTimeout(() => {
1404
- if (waiting) {
1405
- waiting = false;
1406
- channel.close();
1407
- }
1408
- if (windowInstance && !windowInstance.closed) {
1409
- windowInstance.close();
1410
- }
1411
- }, 15000);
1412
1431
  await waitUntil(() => waiting);
1413
1432
  }
1414
1433
  function getOauthToken(options) {
@@ -1494,7 +1513,7 @@ async function getAuthUser(options) {
1494
1513
 
1495
1514
  let isFetchingAccessToken = false;
1496
1515
  const generateOauthMiddleware = (options) => async (request) => {
1497
- if (!options.oauthUrl || !options.expiresTokenStorageName || !options.errorUrl) {
1516
+ if (!options.expiresTokenStorageName) {
1498
1517
  throw new Error("Auth middleware hasn't required options");
1499
1518
  }
1500
1519
  const isSameOrigin = !startWith(request.path, "http");
@@ -1512,7 +1531,14 @@ const generateOauthMiddleware = (options) => async (request) => {
1512
1531
  let token;
1513
1532
  if (!expires || Number.isNaN(+expires) || Date.now() > +expires) {
1514
1533
  isFetchingAccessToken = true;
1515
- await getOauthTokenFromOtherWindow(options);
1534
+ await getOauthTokenFromOtherWindow({
1535
+ onlyRefreshTokenWindowQueryName: options.onlyRefreshTokenWindowQueryName,
1536
+ onWindowOpenError: options.onWindowOpenError,
1537
+ refreshTokenWindowUrl: options.refreshTokenWindowUrl,
1538
+ wait: options.wait,
1539
+ expiresTokenStorageName: options.expiresTokenStorageName,
1540
+ closeObserveInterval: options.closeObserveInterval,
1541
+ });
1516
1542
  if (options.tokenRequest) {
1517
1543
  token = await options.tokenRequest();
1518
1544
  if (token != undefined && options.tokenStorageName) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/constants/date.ts","../../src/constants/api.ts","../../src/constants/environment.ts","../../src/constants/colors.ts","../../src/constants/fields.ts","../../src/lib/utils/wait-until.ts","../../src/lib/date/date-difference.ts","../../src/lib/date/get-date-by-rules.ts","../../src/lib/date/get-today.ts","../../src/lib/date/get-tomorrow.ts","../../src/lib/date/get-yesterday.ts","../../src/lib/date/is-today.ts","../../src/lib/date/is-tomorrow.ts","../../src/lib/date/is-yesterday.ts","../../src/lib/typings/check-type.ts","../../src/lib/typings/is-array.ts","../../src/lib/typings/is-boolean.ts","../../src/lib/typings/is-number.ts","../../src/lib/typings/is-string.ts","../../src/lib/typings/is-id.ts","../../src/lib/typings/is-null.ts","../../src/lib/typings/is-nullable.ts","../../src/lib/typings/is-object.ts","../../src/lib/typings/is-undefined.ts","../../src/lib/typings/is-date.ts","../../src/lib/typings/is-primitive.ts","../../src/lib/date/date-format.ts","../../src/lib/date/transform-to-dayjs.ts","../../src/lib/utils/transform-to-number.ts","../../src/lib/utils/field-view-format.ts","../../src/lib/utils/json-parse.ts","../../src/lib/utils/random-string.ts","../../src/lib/utils/wait.ts","../../src/lib/utils/build-query-string.ts","../../src/lib/utils/create-url-with-params.ts","../../src/lib/utils/trim-url.ts","../../src/lib/utils/array-to-map-by-key.ts","../../src/lib/lodash/get-by-path.ts","../../src/lib/lodash/set-by-path.ts","../../src/lib/utils/sync-object-values.ts","../../src/lib/utils/random-number.ts","../../src/lib/utils/get-file-name-from-header.ts","../../src/lib/utils/limit-stream-of-requests.ts","../../src/lib/utils/start-with.ts","../../src/lib/utils/get-caller-function-name.ts","../../src/lib/utils/translit.ts","../../src/lib/utils/join-paths.ts","../../src/lib/utils/speed-test.ts","../../src/lib/utils/create-global-id.ts","../../src/lib/utils/create-local-id-generator.ts","../../src/lib/utils/declination.ts","../../src/lib/browser/download-file.ts","../../src/lib/browser/download-json.ts","../../src/lib/browser/read-file.ts","../../src/lib/browser/get-visible-position.ts","../../src/lib/browser/get-query-values.ts","../../src/lib/browser/exec-animation.ts","../../src/lib/browser/copy-to-clipboard.ts","../../src/lib/browser/extract-queries.ts","../../src/lib/api/constants.ts","../../src/lib/api/middlewares/console-middleware.ts","../../src/lib/api/middlewares/console-post-middleware.ts","../../src/lib/api/oauth/token.ts","../../src/lib/api/oauth/user.ts","../../src/lib/api/middlewares/oauth-middleware.ts","../../src/lib/api/middlewares/index.ts","../../src/lib/api/core.ts","../../src/lib/colors/get-color-format.ts","../../src/lib/colors/transform-hex-to-rgb.ts","../../src/lib/colors/transform-rgb-to-rgba.ts","../../src/lib/colors/transform-rgba-to-rgb.ts","../../src/lib/colors/take-opacity-colors.ts","../../src/lib/colors/transform-to-color.ts","../../src/lib/colors/get-random-color.ts","../../src/lib/lodash/type.ts","../../src/lib/lodash/clone-deep.ts","../../src/lib/lodash/debounce.ts","../../src/lib/lodash/difference.ts","../../src/lib/lodash/difference-by.ts","../../src/lib/lodash/difference-with.ts","../../src/lib/lodash/is-equal.ts","../../src/lib/lodash/throttle.ts"],"sourcesContent":["export const DATE_TYPES = {\n Days: \"days\",\n Months: \"months\",\n Years: \"years\",\n Seconds: \"seconds\",\n Minutes: \"minutes\",\n Hours: \"hours\",\n} as const;\n","export const API_MIDDLEWARES = {\n Oauth: \"oauth\",\n Logger: \"logger\",\n} as const;\n\nexport const POST_API_MIDDLEWARES = {\n Logger: \"logger\",\n} as const;\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n\nexport const IS_JEST = typeof process != \"undefined\" && process.env.JEST_WORKER_ID !== undefined;\n\nexport const IS_BUN = typeof process !== \"undefined\" && process?.versions?.bun != undefined;\n\nexport const IS_DENO =\n // @ts-expect-error\n typeof Deno !== \"undefined\" &&\n // @ts-expect-error\n typeof Deno.version !== \"undefined\" &&\n // @ts-expect-error\n typeof Deno.version.deno !== \"undefined\";\n\nexport const IS_NODE = typeof process !== \"undefined\" && process?.versions?.node != undefined;\n\nexport const IS_WEB_WORKER =\n typeof self === \"object\" &&\n self.constructor &&\n self.constructor.name === \"DedicatedWorkerGlobalScope\";\n\nexport const IS_BROWSER = typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n","export const COLOR_FORMATS = {\n Hex: \"HEX\",\n Rgb: \"RGB\",\n Rgba: \"RGBA\",\n Hsl: \"HSL\",\n} as const;\n","export const FIELD_TYPES = {\n Date: \"date\",\n Time: \"time\",\n DateTime: \"dateTime\",\n String: \"string\",\n Number: \"number\",\n Array: \"array\",\n} as const;\n","export const waitUntil = (condition: () => boolean, checkInterval = 100) => {\n return new Promise((resolve) => {\n const interval = setInterval(() => {\n if (condition()) return;\n clearInterval(interval);\n resolve(true);\n }, checkInterval);\n });\n};\n","import dayjs from \"dayjs\";\nimport type { DateType } from \"../../types\";\n\ntype DateDifference = {\n type: DateType;\n firstDate: Date;\n secondDate?: Date;\n float?: boolean;\n};\n\nexport function dateDifference({\n firstDate,\n float = false,\n secondDate = new Date(),\n type,\n}: DateDifference) {\n const first = dayjs(firstDate);\n\n return first.diff(secondDate, type, float);\n}\n","import { DATE_TYPES } from \"../../constants\";\nimport { type DateGetterRule, type DateType } from \"../../types\";\n\nexport function getDateByRules(rules: DateGetterRule[], date: Date = new Date()) {\n let result = new Date(date);\n for (const rule of rules) {\n result = getDate(rule.increment, rule.type, result);\n }\n\n return result;\n}\n\nfunction getDate(increment: number, type: DateType, date: Date = new Date()) {\n const result = new Date(date);\n switch (type) {\n case DATE_TYPES.Days: {\n result.setDate(result.getDate() + increment);\n\n return result;\n }\n case DATE_TYPES.Months: {\n result.setMonth(result.getMonth() + increment);\n\n return result;\n }\n case DATE_TYPES.Years: {\n result.setFullYear(result.getFullYear() + increment);\n\n return result;\n }\n case DATE_TYPES.Seconds: {\n result.setSeconds(result.getSeconds() + increment);\n\n return result;\n }\n case DATE_TYPES.Minutes: {\n result.setMinutes(result.getMinutes() + increment);\n\n return result;\n }\n case DATE_TYPES.Hours: {\n result.setHours(result.getHours() + increment);\n\n return result;\n }\n default:\n return result;\n }\n}\n","export function getToday() {\n const startToday = new Date();\n startToday.setHours(0, 0, 0, 0);\n const endToday = new Date();\n endToday.setHours(23, 59, 59, 999);\n\n return { startToday, endToday };\n}\n","export function getTomorrow() {\n const tomorrow = new Date();\n tomorrow.setHours(0, 0, 0, 0);\n tomorrow.setDate(tomorrow.getDate() + 1);\n\n return tomorrow;\n}\n","export function getYesterday() {\n const yesterday = new Date();\n yesterday.setHours(0, 0, 0, 0);\n yesterday.setDate(yesterday.getDate() - 1);\n\n return yesterday;\n}\n","import dayjs from \"dayjs\";\nimport todayPlugin from \"dayjs/plugin/isToday\";\nimport type { Maybe } from \"../../types\";\n\ndayjs.extend(todayPlugin);\n\nexport function isToday(date: Maybe<string | Date | number>) {\n try {\n return dayjs(date).isToday();\n } catch {\n return false;\n }\n}\n","import dayjs from \"dayjs\";\nimport tomorrowPlugin from \"dayjs/plugin/isTomorrow\";\nimport type { Maybe } from \"../../types\";\n\ndayjs.extend(tomorrowPlugin);\n\nexport function isTomorrow(date: Maybe<string | Date | number>) {\n try {\n return dayjs(date).isTomorrow();\n } catch {\n return false;\n }\n}\n","import dayjs from \"dayjs\";\nimport yesterdayPlugin from \"dayjs/plugin/isYesterday\";\nimport { type Maybe } from \"../../types\";\n\ndayjs.extend(yesterdayPlugin);\n\nexport function isYesterday(date: Maybe<string | Date | number>) {\n try {\n return dayjs(date).isYesterday();\n } catch {\n return false;\n }\n}\n","export function checkType<R>(value: unknown, condition: boolean): value is R {\n if (condition) {\n return true;\n }\n\n return false;\n}\n","export function isArray(value: unknown): value is unknown[] {\n return Boolean(value && Array.isArray(value));\n}\n","export function isBoolean(value: unknown): value is boolean {\n return typeof value === \"boolean\";\n}\n","export function isNumber(value: unknown): value is number {\n return typeof value === \"number\" && !Number.isNaN(value);\n}\n","export function isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n","import { isNumber } from \"./is-number\";\nimport { isString } from \"./is-string\";\n\nexport function isId(value: unknown): value is number | string {\n return isNumber(value) || isString(value);\n}\n","export function isNull(value: unknown): value is null {\n return value === null;\n}\n","export function isNullable(value: unknown): value is null | undefined {\n return typeof value === \"undefined\" || value === null;\n}\n","export function isObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n","export function isUndefined(value: unknown): value is undefined {\n return typeof value === \"undefined\";\n}\n","export function isDate(value: unknown): value is Date {\n if (value instanceof Date) return !Number.isNaN(value.valueOf());\n\n return false;\n}\n","export function isPrimitive(value: unknown): value is string | number | boolean | null | undefined {\n const type = typeof value;\n\n return value == undefined || (type != \"object\" && type != \"function\");\n}\n","import dayjs from \"dayjs\";\nimport { isDate } from \"../typings\";\n\nexport function dateFormat(date: Date | string | number, format: string) {\n const correctDate = new Date(date);\n\n if (!isDate(correctDate)) return \"\";\n\n return dayjs(correctDate).format(format);\n}\n","import dayjs, { type Dayjs } from \"dayjs\";\n\nexport function transformToDayjs(date: Date | string | number): Dayjs {\n return dayjs(date);\n}\n","import { isString } from \"../typings\";\n\nexport function transformToNumber(value: unknown) {\n let result: number | undefined;\n\n if (isString(value)) result = parseInt(value, 10);\n else result = Number(value);\n\n return Number.isNaN(result) ? 0 : result;\n}\n","import { FIELD_TYPES } from \"../../constants\";\nimport type { FieldType } from \"../../types\";\nimport { dateFormat } from \"../date\";\nimport { isArray, isBoolean, isDate, isNumber, isString } from \"../typings\";\nimport { transformToNumber } from \"./transform-to-number\";\n\nexport function fieldViewFormat(field: unknown, type: FieldType = \"string\") {\n switch (type) {\n case FIELD_TYPES.Array: {\n return isArray(field) ? field.join(\", \") : \"\";\n }\n case FIELD_TYPES.Date: {\n return isString(field) || isNumber(field) || isDate(field)\n ? dateFormat(field, \"DD.MM.YYYY\")\n : \"\";\n }\n case FIELD_TYPES.DateTime: {\n return isString(field) || isNumber(field) || isDate(field)\n ? dateFormat(field, \"DD.MM.YYYY HH:mm\")\n : \"\";\n }\n case FIELD_TYPES.Number: {\n return isString(field) || isNumber(field) || isBoolean(field)\n ? String(transformToNumber(field))\n : \"\";\n }\n case FIELD_TYPES.String: {\n return isString(field) || isNumber(field) || isBoolean(field) ? String(field) : \"\";\n }\n case FIELD_TYPES.Time: {\n return isString(field) || isNumber(field) || isDate(field) ? dateFormat(field, \"HH:mm\") : \"\";\n }\n default: {\n return isString(field) || isNumber(field) || isBoolean(field) ? String(field) : \"\";\n }\n }\n}\n","import { isString } from \"../typings\";\n\nexport function jsonParse<T>(json: unknown): T | null {\n if (!isString(json)) return null;\n\n try {\n return JSON.parse(json) as T;\n } catch {\n return null;\n }\n}\n","const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\nexport function randomString(length: number = 10, allowCharacters: string = characters) {\n let result = \"\";\n let counter = 0;\n\n while (counter < length) {\n result += allowCharacters.charAt(Math.floor(Math.random() * allowCharacters.length));\n counter += 1;\n }\n\n return result;\n}\n","export function wait(delay: number) {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true);\n }, delay);\n });\n}\n","import type { ParamsType } from \"../../types\";\nimport { isArray, isObject } from \"../typings\";\n\nexport function buildQueryString(params: ParamsType): string {\n const queryString: string[] = [];\n\n for (const [key, value] of Object.entries(params)) {\n if (isObject(value) || value == undefined) continue;\n\n if (isArray(value)) {\n for (const item of value) {\n if (item != undefined && !isObject(item))\n queryString.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(item))}`);\n }\n } else {\n queryString.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n }\n }\n\n return queryString.join(\"&\");\n}\n","import type { ParamsType } from \"../../types\";\nimport { buildQueryString } from \"./build-query-string\";\n\ntype CreateURLOptionsInterface = {\n baseURL: string;\n params?: ParamsType;\n};\n\nexport function createURLWithParams(options: CreateURLOptionsInterface): string {\n const url = options.baseURL;\n\n if (!options.params) {\n return url;\n }\n\n const queryString = buildQueryString(options.params);\n\n return `${url}?${queryString}`;\n}\n","export function trimUrl(url: string) {\n return url.replace(/^\\//, \"\").replace(/\\/$/, \"\");\n}\n","import { isId } from \"../typings\";\n\nexport function arrayToMapByKey<T extends Record<string, unknown>>(\n array: T[],\n key: keyof T,\n): Record<string, T> {\n const map: Record<string, T> = {};\n\n for (const item of array) {\n const keyValue = item[key] as unknown;\n if (isId(keyValue)) map[keyValue] = item;\n }\n\n return map;\n}\n","import get from \"lodash/get\";\nimport { isArray, isObject, isString } from \"../typings\";\n\nexport function getByPath<T, D = undefined>(data: unknown, path?: string, defaultValue?: D): T | D {\n if ((!isObject(data) && !isArray(data)) || !isString(path)) return defaultValue as D;\n\n return get(data, path, defaultValue) as T | D;\n}\n","import set from \"lodash/set\";\nimport { isArray, isObject } from \"../typings\";\n\nexport function setByPath(data: Record<string, unknown> | unknown[], path: string, value: unknown) {\n try {\n if (!isObject(data) && !isArray(data)) throw new Error(\"bad data\");\n\n set(data, path, value);\n } catch (error) {\n console.warn(error);\n }\n}\n","import { getByPath } from \"../lodash/get-by-path\";\nimport { setByPath } from \"../lodash/set-by-path\";\nimport { isUndefined } from \"../typings\";\n\nexport function syncObjectValues(\n oldObj: Record<string, unknown>,\n newObj: Record<string, unknown>,\n exception: string[] = [],\n) {\n for (const field in newObj) {\n if (exception.includes(field)) continue;\n\n const oldValue = getByPath(oldObj, field, undefined);\n const newValue = getByPath(newObj, field, undefined);\n\n if (isUndefined(oldValue) || isUndefined(newValue)) continue;\n if (oldValue === newValue) continue;\n\n setByPath(oldObj, field, newValue);\n }\n}\n","export function randomNumber(min: number, max: number) {\n min = Math.ceil(min);\n max = Math.floor(max);\n\n return Math.floor(Math.random() * (max - min) + min);\n}\n","const filenameVariables = [\"filename=\", \"filename*=UTF-8''\"];\n\nexport function getFileNameFromHeader(header: string) {\n const name = header\n .split(\";\")\n .find((info) => ~info.indexOf(filenameVariables[0]) || ~info.indexOf(filenameVariables[1]))\n ?.replace(filenameVariables[0], \"\")\n ?.replace(filenameVariables[1], \"\")\n ?.replace(/\"/g, \"\")\n ?.trim();\n\n return name ? decodeURI(name) : null;\n}\n","import { wait } from \"./wait\";\n\ntype LimitStreamOfRequestsOptions<T> = {\n countRequests: number;\n maxCountInParallel: number;\n promiseGetter: (count: number) => Promise<T>;\n refetchAfterError?: boolean;\n maxTryCount?: number;\n collectResult?: boolean;\n resultCb?: (result: T) => void;\n throwError?: boolean;\n errorCb?: (error: unknown, position: number, tryCount: number) => void;\n};\n\nexport function limitStreamOfRequests<T>({\n countRequests,\n maxCountInParallel,\n promiseGetter,\n refetchAfterError,\n resultCb,\n collectResult,\n maxTryCount = 3,\n throwError,\n errorCb,\n}: LimitStreamOfRequestsOptions<T>): { promise: Promise<T[]>; cancel: () => void } {\n let isStopped = false;\n\n if (maxCountInParallel > countRequests) maxCountInParallel = countRequests;\n\n return {\n cancel: () => {\n isStopped = true;\n },\n promise: new Promise((resolve, reject) => {\n let currentRequests = 0;\n let currentResponses = 0;\n const results: T[] = [];\n\n for (let i = 0; i < maxCountInParallel; i++) {\n request(promiseGetter(++currentRequests), currentRequests);\n }\n\n function request(promise: Promise<T> | T, position: number, tryCount: number = 1) {\n if (isStopped) return void resolve(results);\n if (currentResponses === countRequests) return void resolve(results);\n if (position > countRequests) resolve(results);\n\n Promise.resolve(promise)\n .then((result) => {\n if (isStopped) return void resolve(results);\n\n if (collectResult) results.push(result);\n if (resultCb) resultCb(result);\n currentResponses++;\n if (currentResponses === countRequests) return void resolve(results);\n\n request(promiseGetter(++currentRequests), currentRequests);\n })\n .catch((error: unknown) => {\n if (errorCb) errorCb(error, position, tryCount);\n\n if (isStopped) return void resolve(results);\n\n if (refetchAfterError && maxTryCount > tryCount) {\n return void wait(1000).then(() =>\n request(promiseGetter(position), position, tryCount + 1),\n );\n }\n\n if (throwError) {\n reject(error);\n }\n\n currentResponses++;\n request(promiseGetter(++currentRequests), currentRequests);\n });\n }\n }),\n };\n}\n","export function startWith(string: string, mask: string) {\n const maskSize = mask.length;\n let pos = 0;\n\n while (pos < maskSize) {\n if (string.codePointAt(pos) !== mask.codePointAt(pos)) return false;\n pos++;\n }\n\n return true;\n}\n","export function getCallerFunctionName() {\n try {\n const error = new Error();\n if (!error.stack) throw error;\n const stack = error.stack.split(\"\\n\");\n\n if (stack[2]) {\n const callerLine = stack[2].trim();\n const match = /at (\\w+)/.exec(callerLine);\n if (match) {\n return match[1];\n }\n }\n } catch {}\n\n return null;\n}\n","const translitDict: Record<string, string> = {\n А: \"A\",\n Б: \"B\",\n В: \"V\",\n Г: \"G\",\n Д: \"D\",\n Е: \"E\",\n Ё: \"YO\",\n Ж: \"ZH\",\n З: \"Z\",\n И: \"I\",\n Й: \"Y\",\n К: \"K\",\n Л: \"L\",\n М: \"M\",\n Н: \"N\",\n О: \"O\",\n П: \"P\",\n Р: \"R\",\n С: \"S\",\n Т: \"T\",\n У: \"U\",\n Ф: \"F\",\n Х: \"KH\",\n Ц: \"TS\",\n Ч: \"CH\",\n Ш: \"SH\",\n Щ: \"SCH\",\n Ъ: \"\",\n Ы: \"Y\",\n Ь: \"\",\n Э: \"E\",\n Ю: \"YU\",\n Я: \"YA\",\n а: \"a\",\n б: \"b\",\n в: \"v\",\n г: \"g\",\n д: \"d\",\n е: \"e\",\n ё: \"yo\",\n ж: \"zh\",\n з: \"z\",\n и: \"i\",\n й: \"y\",\n к: \"k\",\n л: \"l\",\n м: \"m\",\n н: \"n\",\n о: \"o\",\n п: \"p\",\n р: \"r\",\n с: \"s\",\n т: \"t\",\n у: \"u\",\n ф: \"f\",\n х: \"kh\",\n ц: \"ts\",\n ч: \"ch\",\n ш: \"sh\",\n щ: \"sch\",\n ъ: \"\",\n ы: \"y\",\n ь: \"\",\n э: \"e\",\n ю: \"yu\",\n я: \"ya\",\n \" \": \"_\",\n A: \"A\",\n B: \"B\",\n C: \"C\",\n D: \"D\",\n E: \"E\",\n F: \"F\",\n G: \"G\",\n H: \"H\",\n I: \"I\",\n J: \"J\",\n K: \"K\",\n L: \"L\",\n M: \"M\",\n N: \"N\",\n O: \"O\",\n P: \"P\",\n Q: \"Q\",\n R: \"R\",\n S: \"S\",\n T: \"T\",\n U: \"U\",\n V: \"V\",\n W: \"W\",\n X: \"X\",\n Y: \"Y\",\n Z: \"Z\",\n a: \"a\",\n b: \"b\",\n c: \"c\",\n d: \"d\",\n e: \"e\",\n f: \"f\",\n g: \"g\",\n h: \"h\",\n i: \"i\",\n j: \"j\",\n k: \"k\",\n l: \"l\",\n m: \"m\",\n n: \"n\",\n o: \"o\",\n p: \"p\",\n q: \"q\",\n r: \"r\",\n s: \"s\",\n t: \"t\",\n u: \"u\",\n v: \"v\",\n w: \"w\",\n x: \"x\",\n y: \"y\",\n z: \"z\",\n \"0\": \"0\",\n \"1\": \"1\",\n \"2\": \"2\",\n \"3\": \"3\",\n \"4\": \"4\",\n \"5\": \"5\",\n \"6\": \"6\",\n \"7\": \"7\",\n \"8\": \"8\",\n \"9\": \"9\",\n};\n\nexport function translit(text: string) {\n return text\n .split(\"\")\n .map((char) => translitDict[char] || \"\")\n .join(\"\");\n}\n","export function joinPaths(...parts: string[]) {\n return parts\n .reduce((result: string[], part) => {\n const trimedPart = part.trim().replace(/^\\/+|\\/+$/g, \"\");\n if (trimedPart.length > 0) result.push(trimedPart);\n\n return result;\n }, [])\n .join(\"/\");\n}\n","type SpeedTestOptions = {\n name: string;\n iterations?: number;\n type?: \"time\" | \"performance\";\n};\n\nexport function speedTest<T>(cb: () => T, opts: SpeedTestOptions): T {\n const { name, iterations = 10000, type = \"time\" } = opts;\n let result: T | undefined;\n\n if (type === \"performance\") {\n const start = performance.now();\n\n if (iterations <= 1) {\n result = cb();\n } else {\n for (let i = 0; i < iterations; i++) {\n result = cb();\n }\n }\n\n const end = performance.now();\n // eslint-disable-next-line no-console\n console.log(`${name}: `, end - start);\n } else {\n // eslint-disable-next-line no-console\n console.time(name);\n\n if (iterations <= 1) {\n result = cb();\n } else {\n for (let i = 0; i < iterations; i++) {\n result = cb();\n }\n }\n\n // eslint-disable-next-line no-console\n console.timeEnd(name);\n }\n\n return result as T;\n}\n","let id = 0;\n\nexport function createGlobalId() {\n return id++;\n}\n","import { createGlobalId } from \"./create-global-id\";\n\nexport function createLocalIdGenerator(): () => number {\n let localLastId = 0;\n const globalLastId = createGlobalId() << 14;\n\n return function generateId() {\n return (globalLastId | localLastId++) >>> 0;\n };\n}\n","export function declination(value: number, words: [string, string, string]) {\n value = Math.abs(value) % 100;\n const num = value % 10;\n if (value > 10 && value < 20) return words[2];\n if (num > 1 && num < 5) return words[1];\n if (num == 1) return words[0];\n\n return words[2];\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\nimport { getFileNameFromHeader } from \"../utils\";\n\ntype DownloadFileOptions = {\n data: Blob;\n fileName: string;\n mimeType: string;\n};\n\nexport function downloadFile({ data, fileName, mimeType }: DownloadFileOptions) {\n if (!IS_BROWSER && !IS_JEST) return null;\n\n const name = getFileNameFromHeader(fileName);\n if (!name) throw new Error(\"Bad filename\");\n\n const blob = new Blob([data], {\n type: mimeType,\n });\n\n const downloadUrl = window.URL.createObjectURL(blob);\n\n const link = document.createElement(\"a\");\n link.style.display = \"none\";\n link.download = name;\n link.href = downloadUrl;\n\n document.body.appendChild(link);\n link.click();\n\n document.body.removeChild(link);\n link.remove();\n window.URL.revokeObjectURL(downloadUrl);\n\n return null;\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function downloadJson(data: unknown, name: string) {\n if (!IS_BROWSER && !IS_JEST) return null;\n\n const url = `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(data))}`;\n\n const link = document.createElement(\"a\");\n link.style.display = \"none\";\n link.download = name;\n link.href = url;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n link.remove();\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function readFile(file: File) {\n return new Promise((resolve) => {\n if (!IS_BROWSER && !IS_JEST) {\n resolve(null);\n\n return;\n }\n\n const reader = new FileReader();\n reader.readAsText(file);\n\n reader.onload = () => {\n resolve(reader.result);\n };\n\n reader.onerror = () => {\n resolve(null);\n };\n });\n}\n","type XPositions = \"insideCenter\" | \"insideLeft\" | \"insideRight\" | \"right\" | \"left\";\ntype YPosition = \"insideCenter\" | \"insideTop\" | \"insideBottom\" | \"bottom\" | \"top\";\n\nexport type PositionPlacements =\n | \"bottom-center\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"right-center\"\n | \"right-top\"\n | \"right-bottom\"\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"left-center\"\n | \"left-top\"\n | \"left-bottom\"\n | \"flex\";\n\nexport type VisiblePosition = {\n top: number;\n left: number;\n right: number;\n bottom: number;\n placement: PositionPlacements;\n};\n\ntype InitialVisiblePosition = {\n top: number;\n left: number;\n placement: PositionPlacements;\n};\n\ntype InitialPosition = {\n targetNode?: HTMLElement;\n position?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n};\ntype GetVisiblePositionOptions = {\n node: HTMLElement;\n initialPosition?: InitialPosition;\n visibleArea?: HTMLElement;\n placement?: Exclude<PositionPlacements, \"flex\">;\n stepX?: number;\n stepY?: number;\n flex?: boolean;\n nested?: boolean;\n};\nexport function getVisiblePosition({\n initialPosition,\n node,\n visibleArea,\n placement = \"bottom-center\",\n stepX = placement === \"bottom-center\" ||\n placement === \"bottom-left\" ||\n placement === \"bottom-right\" ||\n placement === \"top-left\" ||\n placement === \"top-center\" ||\n placement === \"top-right\"\n ? 0\n : 10,\n stepY = placement === \"left-bottom\" ||\n placement === \"left-center\" ||\n placement === \"left-top\" ||\n placement === \"right-bottom\" ||\n placement === \"right-top\" ||\n placement === \"right-center\"\n ? 0\n : 10,\n flex,\n nested,\n}: GetVisiblePositionOptions): VisiblePosition {\n /** Viewport Variables */\n const totalHeight = document.body.scrollHeight;\n const totalWidth = document.body.scrollWidth;\n const viewport = visibleArea ?? document.body;\n const scrollTop = document.body.scrollTop;\n const scrollLeft = document.body.scrollLeft;\n const rect = viewport.getBoundingClientRect();\n const viewportWidth = viewport.clientWidth;\n const viewportHeight = viewport.clientHeight;\n const xStart = visibleArea ? viewport.offsetLeft - viewport.scrollLeft : Math.abs(rect.left);\n const xEnd = xStart + viewportWidth;\n const yStart = visibleArea ? viewport.offsetTop : Math.abs(rect.top);\n const yEnd = yStart + viewportHeight;\n\n /** Target Variables */\n let targetHeight = 0;\n let targetWidth = 0;\n let targetTopPosition = 0;\n let targetLeftPosition = 0;\n\n /** Not bounding because not need scale */\n const nodeHeight = node.clientHeight;\n const nodeWidth = node.clientWidth;\n\n if (initialPosition?.targetNode) {\n const { top, left, height, width } = initialPosition.targetNode.getBoundingClientRect();\n targetHeight = height;\n targetWidth = width;\n targetTopPosition = top + scrollTop;\n targetLeftPosition = left + scrollLeft;\n }\n if (initialPosition?.position) {\n if (initialPosition.position.x != undefined) {\n targetLeftPosition = initialPosition.position.x + scrollLeft;\n }\n if (initialPosition.position.y != undefined) {\n targetTopPosition = initialPosition.position.y + scrollTop;\n }\n if (initialPosition.position.height != undefined) {\n targetHeight = initialPosition.position.height;\n }\n if (initialPosition.position.width != undefined) {\n targetWidth = initialPosition.position.width;\n }\n }\n\n /** Inherit Position */\n let inheritLeft = 0;\n let inheritTop = 0;\n let inheritHeight = 0;\n let inheritWidth = 0;\n if (nested) {\n const {\n left = 0,\n top = 0,\n height = 0,\n width = 0,\n } = node.parentElement?.getBoundingClientRect?.() ?? {};\n inheritLeft = left + scrollLeft;\n inheritTop = top + scrollTop;\n inheritHeight = height;\n inheritWidth = width;\n }\n\n /** Initial Position */\n const targetXCenter =\n targetWidth != undefined ? targetLeftPosition + targetWidth / 2 : targetLeftPosition;\n const targetYCenter =\n targetHeight != undefined ? targetTopPosition + targetHeight / 2 : targetTopPosition;\n const targetYEnd =\n targetHeight != undefined ? targetTopPosition + targetHeight : targetTopPosition;\n\n const x: Record<XPositions, number> = {\n insideCenter: targetXCenter - nodeWidth / 2 + stepX,\n insideRight: targetLeftPosition + targetWidth + stepX - nodeWidth,\n insideLeft: targetLeftPosition + stepX,\n left: targetLeftPosition - nodeWidth - stepX,\n right: targetLeftPosition + targetWidth + stepX,\n };\n\n const y: Record<YPosition, number> = {\n bottom: targetYEnd + stepY,\n top: targetTopPosition - stepY - nodeHeight,\n insideCenter: targetYCenter - nodeHeight / 2 + stepY,\n insideBottom: targetTopPosition + targetHeight - nodeHeight + stepY,\n insideTop: targetTopPosition + stepY,\n };\n /** Find visible position */\n function isCompletelyVisibleX(left: number) {\n const endXPosition = nodeWidth + left;\n\n return xStart <= left && xEnd >= endXPosition;\n }\n function isCompletelyVisibleY(top: number) {\n const endYPosition = nodeHeight + top;\n\n return yStart <= top && yEnd >= endYPosition;\n }\n\n let visiblePositions = processVisiblePositions({\n targetLeftPosition,\n targetTopPosition,\n x,\n y,\n placement,\n flex,\n nodeHeight,\n nodeWidth,\n xEnd,\n xStart,\n yEnd,\n yStart,\n isCompletelyVisibleX,\n isCompletelyVisibleY,\n });\n if (\n flex &&\n (!isCompletelyVisibleX(visiblePositions.left) || !isCompletelyVisibleY(visiblePositions.top))\n ) {\n visiblePositions = getFlexVisiblePosition({\n initialLeft: visiblePositions.left,\n initialTop: visiblePositions.top,\n isCompletelyVisibleX,\n isCompletelyVisibleY,\n nodeHeight,\n nodeWidth,\n xEnd,\n yEnd,\n });\n }\n\n visiblePositions.left -= inheritLeft;\n visiblePositions.top -= inheritTop;\n\n return {\n placement: visiblePositions.placement,\n left: visiblePositions.left,\n top: visiblePositions.top,\n bottom: nested\n ? inheritHeight - (visiblePositions.top + nodeHeight)\n : totalHeight - (visiblePositions.top + nodeHeight),\n right: nested\n ? inheritWidth - (visiblePositions.left + nodeWidth)\n : totalWidth - (visiblePositions.left + nodeWidth),\n };\n}\n\ntype ProcessVisiblePositions = {\n placement: Exclude<PositionPlacements, \"flex\">;\n x: Record<XPositions, number>;\n y: Record<YPosition, number>;\n targetLeftPosition: number;\n targetTopPosition: number;\n nodeWidth: number;\n nodeHeight: number;\n xStart: number;\n xEnd: number;\n yStart: number;\n yEnd: number;\n flex: boolean | undefined;\n isCompletelyVisibleX: (position: number) => boolean;\n isCompletelyVisibleY: (position: number) => boolean;\n};\nfunction processVisiblePositions(opts: ProcessVisiblePositions): InitialVisiblePosition {\n let correctLeft: number | null = opts.targetLeftPosition;\n let correctTop: number | null = opts.targetTopPosition;\n\n switch (opts.placement) {\n case \"bottom-center\": {\n correctLeft = opts.x.insideCenter;\n correctTop = opts.y.bottom;\n let placement: PositionPlacements = \"bottom-center\";\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"bottom-left\";\n correctLeft = opts.x.insideLeft;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"bottom-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.top)) {\n placement = placement.replace(\"bottom\", \"top\") as PositionPlacements;\n correctTop = opts.y.top;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"bottom-left\": {\n correctLeft = opts.x.insideLeft;\n correctTop = opts.y.bottom;\n let placement: PositionPlacements = \"bottom-left\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"bottom-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"bottom-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.top)) {\n placement = placement.replace(\"bottom\", \"top\") as PositionPlacements;\n correctTop = opts.y.top;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"bottom-right\": {\n correctLeft = opts.x.insideRight;\n correctTop = opts.y.bottom;\n let placement: PositionPlacements = \"bottom-right\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"bottom-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"bottom-left\";\n correctLeft = opts.x.insideLeft;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.top)) {\n placement = placement.replace(\"bottom\", \"top\") as PositionPlacements;\n correctTop = opts.y.top;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"right-bottom\": {\n correctLeft = opts.x.right;\n correctTop = opts.y.insideBottom;\n let placement: PositionPlacements = \"right-bottom\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"right-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"right-top\";\n correctTop = opts.y.insideTop;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.left)) {\n placement = placement.replace(\"right\", \"left\") as PositionPlacements;\n correctLeft = opts.x.left;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"right-center\": {\n correctLeft = opts.x.right;\n correctTop = opts.y.insideCenter;\n let placement: PositionPlacements = \"right-center\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"right-top\";\n correctTop = opts.y.insideTop;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"right-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.left)) {\n placement = placement.replace(\"right\", \"left\") as PositionPlacements;\n correctLeft = opts.x.left;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"right-top\": {\n correctLeft = opts.x.right;\n correctTop = opts.y.insideTop;\n let placement: PositionPlacements = \"right-top\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"right-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"right-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.left)) {\n placement = placement.replace(\"right\", \"left\") as PositionPlacements;\n correctLeft = opts.x.left;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"top-center\": {\n correctLeft = opts.x.insideCenter;\n correctTop = opts.y.top;\n let placement: PositionPlacements = \"top-center\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"top-left\";\n correctLeft = opts.x.insideLeft;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"top-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.bottom)) {\n placement = placement.replace(\"top\", \"bottom\") as PositionPlacements;\n correctTop = opts.y.bottom;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"top-left\": {\n correctLeft = opts.x.insideLeft;\n correctTop = opts.y.top;\n let placement: PositionPlacements = \"top-left\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"top-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"top-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.bottom)) {\n placement = placement.replace(\"top\", \"bottom\") as PositionPlacements;\n correctTop = opts.y.bottom;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"top-right\": {\n correctLeft = opts.x.insideRight;\n correctTop = opts.y.top;\n let placement: PositionPlacements = \"top-right\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"top-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"top-left\";\n correctLeft = opts.x.insideLeft;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.bottom)) {\n placement = placement.replace(\"top\", \"bottom\") as PositionPlacements;\n correctTop = opts.y.bottom;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"left-bottom\": {\n correctLeft = opts.x.left;\n correctTop = opts.y.insideBottom;\n let placement: PositionPlacements = \"left-bottom\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"left-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"left-top\";\n correctTop = opts.y.insideTop;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.right)) {\n placement = placement.replace(\"left\", \"right\") as PositionPlacements;\n correctLeft = opts.x.right;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"left-center\": {\n correctLeft = opts.x.left;\n correctTop = opts.y.insideCenter;\n let placement: PositionPlacements = \"left-center\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"left-top\";\n correctTop = opts.y.insideTop;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"left-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.right)) {\n placement = placement.replace(\"left\", \"right\") as PositionPlacements;\n correctLeft = opts.x.right;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"left-top\": {\n correctLeft = opts.x.left;\n correctTop = opts.y.insideTop;\n let placement: PositionPlacements = \"left-top\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"left-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"left-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.right)) {\n placement = placement.replace(\"left\", \"right\") as PositionPlacements;\n\n correctLeft = opts.x.right;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n default: {\n return {\n top: correctTop,\n left: correctLeft,\n placement: opts.placement,\n };\n }\n }\n}\n\ntype GetFlexVisiblePosition = {\n isCompletelyVisibleY: (top: number) => boolean;\n isCompletelyVisibleX: (left: number) => boolean;\n initialLeft: number;\n initialTop: number;\n xEnd: number;\n yEnd: number;\n nodeWidth: number;\n nodeHeight: number;\n};\n\nfunction getFlexVisiblePosition({\n initialLeft,\n initialTop,\n isCompletelyVisibleX,\n isCompletelyVisibleY,\n nodeHeight,\n nodeWidth,\n xEnd,\n yEnd,\n}: GetFlexVisiblePosition): InitialVisiblePosition {\n if (!isCompletelyVisibleY(initialTop)) {\n initialTop = yEnd - nodeHeight;\n }\n if (!isCompletelyVisibleX(initialLeft)) {\n initialLeft = xEnd - nodeWidth;\n }\n\n return {\n top: initialTop,\n left: initialLeft,\n placement: \"flex\",\n };\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\nimport { isArray, isString } from \"../typings\";\n\nexport function getQueryValues<K extends string>(\n keys: K[],\n): Record<K, string | string[] | undefined> | null {\n if (!IS_BROWSER && !IS_JEST) return null;\n\n const object: Record<K, string | string[] | undefined> = {} as Record<\n K,\n string | string[] | undefined\n >;\n\n const queries = window.location.search.substring(1).split(\"&\");\n for (const query of queries) {\n const [key, value] = query.split(\"=\");\n if (keys.includes(key as K) && value) {\n const prev = object[key as K];\n if (isArray(prev)) prev.push(value);\n else if (isString(prev)) object[key as K] = [prev, value];\n else object[key as K] = value;\n }\n }\n\n return object;\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function execAnimation(\n element: HTMLElement | null | undefined,\n className: string,\n autoCloseDelay: number = 700,\n) {\n return new Promise((resolve) => {\n if (!IS_BROWSER && !IS_JEST) {\n resolve(true);\n\n return;\n }\n\n if (!element) {\n resolve(true);\n\n return;\n }\n\n const timerId = setTimeout(() => {\n resolve(true);\n }, autoCloseDelay);\n\n element.addEventListener(\n \"animationend\",\n () => {\n resolve(true);\n element?.classList?.remove?.(className);\n clearTimeout(timerId);\n },\n {\n once: true,\n },\n );\n element.classList.add(className);\n });\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function copyToClipboard(textToCopy: string) {\n return new Promise<boolean>((resolve) => {\n if (!IS_BROWSER && !IS_JEST) {\n resolve(false);\n\n return;\n }\n\n try {\n if (navigator.clipboard && window.isSecureContext) {\n navigator.clipboard\n .writeText(textToCopy)\n .then(() => resolve(true))\n .catch(() => resolve(false));\n\n return;\n }\n\n const textArea = document.createElement(\"textarea\");\n textArea.value = textToCopy;\n textArea.style.position = \"fixed\";\n textArea.style.left = \"-999999px\";\n textArea.style.top = \"-999999px\";\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const result = document.execCommand(\"copy\");\n textArea.remove();\n\n resolve(result);\n } catch {\n resolve(false);\n }\n });\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function extractQueries() {\n const queryMap: Record<string, string[] | undefined> = {};\n if (!IS_BROWSER && !IS_JEST) return queryMap;\n\n const queryString = document.location.search;\n queryString\n .replace(/^\\?/, \"\")\n .split(\"&\")\n .forEach((query) => {\n const [key, value] = query.split(\"=\", 2);\n\n queryMap[key] ??= [];\n const prev = queryMap[key];\n prev.push(value);\n });\n\n return queryMap;\n}\n","export const RESPONSE_DATA_SYMBOL = Symbol(\"response data\");\n","import type { LoggerMiddlewareOptions, Middleware, RequestInterface } from \"../../../types\";\n\nexport function generateConsoleMiddleware(options: LoggerMiddlewareOptions = {}): Middleware {\n return (request) => {\n return new Promise((resolve) => {\n if (\n (options.filter &&\n !options.filter(request as RequestInterface<unknown, unknown, unknown, unknown>)) ||\n (options.filterHeaders && !options.filterHeaders(request.headers)) ||\n (options.filterMethod && !options.filterMethod(request.method)) ||\n (options.filterParams && !options.filterParams(request.params)) ||\n (options.filterPath && !options.filterPath(request.path))\n ) {\n resolve(true);\n\n return;\n }\n // eslint-disable-next-line no-console\n console.log(request);\n resolve(true);\n });\n };\n}\n","/* eslint-disable no-console */\nimport type { LoggerPostMiddlewareOptions, PostMiddleware } from \"../../../types\";\nimport { RESPONSE_DATA_SYMBOL } from \"../constants\";\n\nexport function generateConsolePostMiddleware(\n options: LoggerPostMiddlewareOptions = {},\n): PostMiddleware {\n return (response) => {\n return new Promise((resolve) => {\n void (async function logger() {\n try {\n if (\n !response ||\n (options.filter && !options.filter(response)) ||\n (options.filterStatus && !options.filterStatus(response.status)) ||\n (options.filterUrl && !options.filterUrl(response.url)) ||\n (options.filterHeaders && !options.filterHeaders(response.headers))\n ) {\n resolve(true);\n\n return;\n }\n\n const contentType = response.headers.get(\"content-type\");\n let result;\n if (contentType?.includes?.(\"text\")) {\n result = await response.text();\n } else if (contentType?.includes?.(\"json\")) {\n result = await response.json();\n } else {\n result = await response.blob();\n }\n\n Object.defineProperty(response, RESPONSE_DATA_SYMBOL, {\n value: result,\n writable: false,\n enumerable: false,\n configurable: true,\n });\n\n console.log({\n url: response.url,\n status: response.status,\n headers: response.headers,\n body: result,\n });\n\n resolve(true);\n } catch {\n if (response) {\n console.log({ url: response.url, status: response.status, headers: response.headers });\n }\n\n resolve(true);\n }\n })().finally(() => {\n resolve(true);\n });\n });\n };\n}\n","import type { AuthTokenNoRefreshRequestOptions, OauthMiddleWareOptions } from \"../../../types\";\nimport { getQueryValues } from \"../../browser\";\nimport { isArray, isString } from \"../../typings\";\nimport { waitUntil } from \"../../utils\";\n\nexport async function getOauthTokenFromOtherWindow(options: AuthTokenNoRefreshRequestOptions) {\n let waiting = true;\n const url = new URL(\n typeof options.refreshTokenWindowUrl === \"function\"\n ? options.refreshTokenWindowUrl()\n : (options.refreshTokenWindowUrl ?? window.origin),\n );\n url.searchParams.append(options.onlyRefreshTokenWindowQueryName, \"true\");\n let windowInstance = window.open(\n url.toString(),\n \"_blank\",\n \"width=800,height=600,left=100,top=100\",\n );\n\n windowInstance ??= window.open(url.toString());\n\n if (!windowInstance) {\n if (options.onWindowOpenError) options.onWindowOpenError();\n\n return;\n }\n\n const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);\n channel.onmessage = () => {\n if (waiting) {\n waiting = false;\n channel.close();\n }\n };\n setTimeout(() => {\n if (waiting) {\n waiting = false;\n channel.close();\n }\n if (windowInstance && !windowInstance.closed) {\n windowInstance.close();\n }\n }, 15000);\n\n await waitUntil(() => waiting);\n}\n\nexport function getOauthToken(options: OauthMiddleWareOptions) {\n let expires: string | null | undefined = localStorage.getItem(options.expiresTokenStorageName);\n if (!expires || Number.isNaN(+expires) || Date.now() > +expires) expires = null;\n\n const queries = getQueryValues([\n options.expiresTokenQueryName,\n options.onlyRefreshTokenWindowQueryName,\n ]);\n const refreshQuery = queries?.[options.onlyRefreshTokenWindowQueryName];\n const expiresQuery = queries?.[options.expiresTokenQueryName];\n\n /** Is OnlyRefresh window */\n const isRefresh = isString(refreshQuery)\n ? refreshQuery === \"true\"\n : isArray(refreshQuery)\n ? refreshQuery[refreshQuery.length - 1] === \"true\"\n : false;\n /** Expires token */\n const expiresFromQuery = isString(expiresQuery)\n ? expiresQuery\n : isArray(expiresQuery)\n ? expiresQuery[expiresQuery.length - 1]\n : false;\n\n /** Extract expires from query */\n if (!expires && expiresFromQuery) {\n expires = expiresFromQuery;\n if (!expires || Number.isNaN(+expires) || Date.now() > +expires) expires = null;\n }\n\n /** OAuth flow if not expires */\n if (!expires) {\n window.location.replace(\n typeof options.oauthUrl === \"function\" ? options.oauthUrl() : options.oauthUrl,\n );\n\n return null;\n }\n\n localStorage.setItem(options.expiresTokenStorageName, expires);\n\n /** Close if OnlyRefresh window */\n if (isRefresh) {\n const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);\n channel.postMessage(true);\n channel.close();\n window.close();\n }\n\n /** Delete expires query */\n if (expiresFromQuery) {\n const url = new URL(window.location.href);\n url.searchParams.delete(options.expiresTokenQueryName);\n window.location.replace(url.toString());\n\n return null;\n }\n\n return expires;\n}\n","import type { AuthUserRequestOptions, AuthUserUpdateRequestOptions } from \"../../../types\";\nimport { isNull, isUndefined } from \"../../typings\";\n\nexport async function updateAuthUser<User extends Record<string, unknown>>(\n options: AuthUserUpdateRequestOptions<User>,\n) {\n const userInfo = await (options.userRequest ? options.userRequest() : getAuthUser<User>(options));\n if (isNull(userInfo)) {\n return void window.location.replace(options.oauthUrl());\n }\n if (isUndefined(userInfo)) {\n return void window.location.replace(options.errorUrl);\n }\n\n return userInfo;\n}\n\nexport async function getAuthUser<User extends Record<string, unknown>>(\n options: AuthUserRequestOptions,\n): Promise<User | null | undefined> {\n let status = 0;\n try {\n const response = await fetch(options.authUserUrl, {\n method: \"GET\",\n });\n status = response.status;\n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status}`);\n }\n\n const result = (await response.json()) as User;\n\n return result;\n } catch {\n if (status >= 500) return undefined;\n\n return null;\n }\n}\n","import type { Middleware, OauthMiddleWareOptions } from \"../../../types\";\nimport { startWith, waitUntil } from \"../../utils\";\nimport { getOauthTokenFromOtherWindow } from \"../oauth\";\n\nlet isFetchingAccessToken = false;\n\nexport const generateOauthMiddleware =\n (options: OauthMiddleWareOptions): Middleware =>\n async (request) => {\n if (!options.oauthUrl || !options.expiresTokenStorageName || !options.errorUrl) {\n throw new Error(\"Auth middleware hasn't required options\");\n }\n\n const isSameOrigin = !startWith(request.path, \"http\");\n\n if (request.token) {\n if (!isSameOrigin)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${request.token}`,\n };\n\n return;\n }\n\n if (isFetchingAccessToken) await waitUntil(() => isFetchingAccessToken);\n\n const expires = localStorage.getItem(options.expiresTokenStorageName);\n let token: string | undefined | null;\n if (!expires || Number.isNaN(+expires) || Date.now() > +expires) {\n isFetchingAccessToken = true;\n await getOauthTokenFromOtherWindow(options);\n if (options.tokenRequest) {\n token = await options.tokenRequest();\n if (token != undefined && options.tokenStorageName) {\n localStorage.setItem(options.tokenStorageName, token);\n }\n }\n isFetchingAccessToken = false;\n }\n\n if (!isSameOrigin && token)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${token}`,\n };\n };\n","import type { Response as NodeResponse } from \"node-fetch\";\nimport { API_MIDDLEWARES, IS_BROWSER, IS_JEST, POST_API_MIDDLEWARES } from \"../../../constants\";\nimport type {\n ActiveMiddleware,\n ActivePostMiddleware,\n Middleware,\n MiddlewaresOptions,\n PostMiddleware,\n PostMiddlewareOptions,\n RequestInterface,\n} from \"../../../types\";\nimport { generateConsoleMiddleware } from \"./console-middleware\";\nimport { generateConsolePostMiddleware } from \"./console-post-middleware\";\nimport { generateOauthMiddleware } from \"./oauth-middleware\";\n\nexport function generateMiddlewares(\n activeMiddlewares: ActiveMiddleware,\n middlewareOptions: MiddlewaresOptions,\n customMiddlewares: Middleware[],\n) {\n const selectedMiddlewares: Middleware[] = customMiddlewares;\n\n for (const key of activeMiddlewares) {\n switch (key) {\n case API_MIDDLEWARES.Oauth: {\n if (middlewareOptions.oauth && (IS_BROWSER || IS_JEST))\n selectedMiddlewares.push(generateOauthMiddleware(middlewareOptions.oauth));\n continue;\n }\n case API_MIDDLEWARES.Logger: {\n selectedMiddlewares.push(generateConsoleMiddleware(middlewareOptions.logger));\n continue;\n }\n default: {\n continue;\n }\n }\n }\n\n return function executeMiddlewares<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>) {\n return new Promise((resolve) => {\n void (async () => {\n for (const middleware of selectedMiddlewares) {\n // eslint-disable-next-line no-await-in-loop\n await middleware(request);\n }\n\n resolve(1);\n })();\n });\n };\n}\n\nexport function generatePostMiddlewares(\n activePostMiddlewares: ActivePostMiddleware,\n postMiddlewaresOptions: PostMiddlewareOptions,\n customPostMiddlewares: PostMiddleware[],\n) {\n const selectedMiddlewares: PostMiddleware[] = customPostMiddlewares;\n\n for (const key of activePostMiddlewares) {\n switch (key) {\n case POST_API_MIDDLEWARES.Logger: {\n selectedMiddlewares.push(generateConsolePostMiddleware(postMiddlewaresOptions.logger));\n continue;\n }\n\n default: {\n continue;\n }\n }\n }\n\n return function executeMiddlewares(response: Response | NodeResponse | undefined) {\n return new Promise((resolve) => {\n void (async () => {\n for (const middleware of selectedMiddlewares) {\n // eslint-disable-next-line no-await-in-loop\n await middleware(response);\n }\n\n resolve(1);\n })();\n });\n };\n}\n","import type {\n HeadersInit,\n BodyInit as NodeBodyInit,\n RequestInfo as NodeRequestInfo,\n RequestInit as NodeRequestInit,\n Response as NodeResponse,\n} from \"node-fetch\";\nimport { IS_BROWSER } from \"../../constants\";\nimport type {\n ActiveMiddleware,\n ActivePostMiddleware,\n Middleware,\n MiddlewaresOptions,\n PostMiddleware,\n PostMiddlewareOptions,\n RequestInterface,\n} from \"../../types\";\nimport { downloadFile } from \"../browser\";\nimport { isString } from \"../typings\";\nimport { createURLWithParams, wait } from \"../utils\";\nimport { RESPONSE_DATA_SYMBOL } from \"./constants\";\nimport { generateMiddlewares, generatePostMiddlewares } from \"./middlewares\";\n\ntype ResponseErrorOptions = {\n message: string;\n status: number;\n code?: number;\n description?: unknown;\n headers?: Record<string, string>;\n};\n\nexport class ResponseError extends Error {\n status: number;\n\n code?: number;\n\n description?: unknown;\n\n headers?: Record<string, string>;\n\n constructor({ message, status, description, code, headers }: ResponseErrorOptions) {\n super(message);\n this.status = status;\n this.description = description;\n this.code = code;\n this.headers = headers;\n }\n}\n\ntype CreateRequestClientInstance = {\n client:\n | ((url: URL | NodeRequestInfo, init?: NodeRequestInit) => Promise<NodeResponse>)\n | typeof fetch;\n activeMiddlewares?: ActiveMiddleware;\n middlewareOptions?: MiddlewaresOptions;\n customMiddlewares?: Middleware[];\n activePostMiddlewares?: ActivePostMiddleware;\n postMiddlewaresOptions?: PostMiddlewareOptions;\n customPostMiddlewares?: PostMiddleware[];\n};\n\nexport type RequestInstance = {\n <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<Incoming>;\n setOptions: (options: CreateRequestClientInstance) => void;\n};\n\nexport function createRequestClientInstance(options: CreateRequestClientInstance) {\n let executeMiddlewares: <\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ) => Promise<unknown>;\n\n let executePostMiddlewares: (response: Response | NodeResponse | undefined) => Promise<unknown>;\n\n function setMiddlewares({\n activeMiddlewares = [],\n middlewareOptions = {},\n customMiddlewares = [],\n activePostMiddlewares = [],\n postMiddlewaresOptions = {},\n customPostMiddlewares = [],\n }: Omit<CreateRequestClientInstance, \"client\"> = {}) {\n executeMiddlewares = generateMiddlewares(\n activeMiddlewares,\n middlewareOptions,\n customMiddlewares,\n );\n\n executePostMiddlewares = generatePostMiddlewares(\n activePostMiddlewares,\n postMiddlewaresOptions,\n customPostMiddlewares,\n );\n }\n\n setMiddlewares(options);\n\n async function handleRequest<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n responseWithStatus?: boolean,\n ): Promise<{ data: Incoming; status: number; headers: Record<string, string> } | Incoming> {\n if (request.delay) {\n await wait(request.delay);\n }\n if (request.mock) {\n const mock: unknown =\n typeof request.mock === \"function\" ? (request.mock as () => Incoming)() : request.mock;\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(mock as IncomingApi)\n : (mock as Incoming);\n\n return responseWithStatus\n ? { data: transformedResult, status: 200, headers: {} }\n : transformedResult;\n }\n\n await executeMiddlewares(request);\n\n const { method, body, path, params, headers = {} } = request;\n\n const url = createURLWithParams({ baseURL: path, params });\n const [, requestContentType] =\n Object.entries(headers).find(([header]) => header.toLowerCase() === \"content-type\") ?? [];\n\n let preparedBody: OutcomingApi = body as OutcomingApi;\n if (request.transformOutcomingData) {\n preparedBody = request.transformOutcomingData(body as Outcoming);\n }\n\n if (\n requestContentType == undefined &&\n !(preparedBody instanceof FormData) &&\n preparedBody != undefined &&\n !isString(preparedBody)\n ) {\n headers[\"content-type\"] = \"application/json; charset=UTF-8\";\n }\n\n if (\n (requestContentType == undefined || requestContentType.toLowerCase().includes(\"json\")) &&\n preparedBody != undefined &&\n !(preparedBody instanceof FormData) &&\n !isString(preparedBody)\n ) {\n preparedBody = JSON.stringify(preparedBody) as OutcomingApi;\n }\n\n const response: Response | NodeResponse | undefined = await options.client(url, {\n method,\n body: preparedBody as ((BodyInit | null) & NodeBodyInit) | undefined,\n headers: headers as globalThis.HeadersInit & HeadersInit,\n signal: request.signal as (AbortSignal & NodeRequestInit[\"signal\"]) | null | undefined,\n });\n\n await executePostMiddlewares(response);\n\n if (!response) {\n throw new Error(\"hasn't response\");\n }\n\n if (!response.ok) {\n if (response.status === 304) {\n return responseWithStatus\n ? {\n data: undefined as Incoming,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n }\n : (undefined as Incoming);\n }\n\n if (request.defaultResponse) {\n const defaultResponse: unknown =\n typeof request.defaultResponse === \"function\"\n ? (request.defaultResponse as () => Incoming)()\n : request.defaultResponse;\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(defaultResponse as IncomingApi)\n : (defaultResponse as Incoming);\n\n return responseWithStatus\n ? {\n data: transformedResult,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n }\n : transformedResult;\n }\n\n let result;\n try {\n const contentType = response.headers.get(\"content-type\");\n\n if (contentType?.includes?.(\"text\")) {\n result = await response.text();\n } else if (contentType?.includes?.(\"json\")) {\n result = await response.json();\n } else {\n result = await response.blob();\n }\n } catch {\n if (RESPONSE_DATA_SYMBOL in response) result = response[RESPONSE_DATA_SYMBOL];\n }\n\n throw new ResponseError({\n status: response.status,\n message: `HTTP error! Status: ${response.status}`,\n description: result,\n headers: Object.fromEntries(response.headers.entries()),\n });\n }\n\n if (request.downloadFile) {\n const data = await response.blob();\n const mimeType = response.headers.get(\"content-type\");\n const fileName = response.headers.get(\"content-disposition\");\n\n if (!mimeType || !fileName) throw new Error(\"Download Error! Empty info!\");\n\n if (IS_BROWSER)\n downloadFile({\n data: data as Blob,\n fileName,\n mimeType,\n });\n\n return responseWithStatus\n ? {\n data: data as Incoming,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n }\n : (data as Incoming);\n }\n\n const contentType = response.headers.get(\"content-type\");\n let result: Incoming | IncomingApi = undefined as Incoming | IncomingApi;\n\n try {\n if (contentType?.includes?.(\"text\")) {\n result = (await response.text()) as Incoming | IncomingApi;\n } else if (contentType?.includes?.(\"json\")) {\n result = (await response.json()) as Incoming | IncomingApi;\n } else {\n result = (await response.blob()) as Incoming | IncomingApi;\n }\n } catch {}\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(result as IncomingApi)\n : (result as Incoming);\n\n return responseWithStatus\n ? {\n data: transformedResult,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n }\n : transformedResult;\n }\n\n async function requestApi<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>): Promise<Incoming> {\n return handleRequest(request, false) as Promise<Incoming>;\n }\n\n async function requestApiWithMeta<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<{ data: Incoming; status: number; headers: Record<string, string> }> {\n return handleRequest(request, true) as Promise<{\n data: Incoming;\n status: number;\n headers: Record<string, string>;\n }>;\n }\n\n return {\n requestApi,\n requestApiWithMeta,\n setMiddlewares,\n };\n}\n","import { COLOR_FORMATS } from \"../../constants\";\n\nexport function getColorFormat(color: string) {\n if (color.startsWith(\"#\")) {\n return COLOR_FORMATS.Hex;\n }\n if (color.startsWith(\"rgba\")) {\n return COLOR_FORMATS.Rgba;\n }\n if (color.startsWith(\"rgb\")) {\n return COLOR_FORMATS.Rgb;\n }\n if (color.startsWith(\"hsl\")) {\n return COLOR_FORMATS.Hsl;\n }\n}\n","export function transformHEXtoRGB(hex: string) {\n return `rgb(${hex.match(/\\w\\w/g)?.map((x) => +`0x${x}`)})`;\n}\n","export function transformRGBtoRGBA(rgb: string, opacity: number) {\n const code = rgb.match(/\\d+/g);\n code?.push(String(opacity / 100));\n\n return `rgba(${code?.join(\",\")})`;\n}\n","export function transformRGBAtoRGB(rgba: string) {\n const code = rgba.match(/\\d+/g);\n code?.splice(3);\n\n return `rgb(${code?.join(\",\")})`;\n}\n","import { COLOR_FORMATS } from \"../../constants\";\nimport { getColorFormat } from \"./get-color-format\";\nimport { transformHEXtoRGB } from \"./transform-hex-to-rgb\";\nimport { transformRGBtoRGBA } from \"./transform-rgb-to-rgba\";\nimport { transformRGBAtoRGB } from \"./transform-rgba-to-rgb\";\n\nexport function takeOpacityColors(color: string | undefined, opacities: number[]) {\n let rgbColor = color;\n\n if (!rgbColor) return [];\n\n if (getColorFormat(rgbColor) === COLOR_FORMATS.Hex) {\n rgbColor = transformHEXtoRGB(rgbColor);\n } else if (getColorFormat(rgbColor) === COLOR_FORMATS.Rgba) {\n rgbColor = transformRGBAtoRGB(rgbColor);\n }\n\n if (getColorFormat(rgbColor) !== COLOR_FORMATS.Rgb) return [];\n\n return [...opacities.map((opacity) => transformRGBtoRGBA(rgbColor, opacity))];\n}\n","import { COLOR_FORMATS } from \"../../constants\";\nimport type { ColorFormat } from \"../../types\";\nimport { isString } from \"../typings\";\nimport { getColorFormat } from \"./get-color-format\";\n\nexport function transformToColor(\n currentColor: unknown,\n defaultColor: string = \"black\",\n defaultFormat: ColorFormat = COLOR_FORMATS.Hex,\n) {\n if (!isString(currentColor)) return defaultColor;\n\n let correctColor = currentColor;\n\n if (!getColorFormat(correctColor)) {\n switch (defaultFormat) {\n case COLOR_FORMATS.Hex: {\n correctColor = `#${correctColor}`;\n break;\n }\n case COLOR_FORMATS.Rgb: {\n correctColor = `rgb(${correctColor})`;\n break;\n }\n case COLOR_FORMATS.Rgba: {\n correctColor = `rgba(${correctColor})`;\n break;\n }\n case COLOR_FORMATS.Hsl: {\n correctColor = `hsl(${correctColor})`;\n break;\n }\n default: {\n correctColor = `#${correctColor}`;\n break;\n }\n }\n }\n\n return correctColor;\n}\n","export function getRandomColor() {\n const randomColor = Math.floor(Math.random() * 16777215).toString(16);\n\n return `#${randomColor.padStart(6, \"0\")}`;\n}\n","export function type(value: unknown) {\n return value === null\n ? \"Null\"\n : value === undefined\n ? \"Undefined\"\n : Object.prototype.toString.call(value).slice(8, -1);\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { isPrimitive } from \"../typings\";\nimport { type } from \"./type\";\n\nexport function cloneDeep(value: unknown, map?: Map<unknown, unknown>) {\n map ??= new Map();\n\n // this avoids the slower switch with a quick if decision removing some milliseconds in each run.\n if (isPrimitive(value)) {\n return value;\n }\n\n function copy(copiedValue: object) {\n // Check for circular and same references on the object graph and return its corresponding clone.\n const cachedCopy = map!.get(value);\n\n if (cachedCopy) {\n return cachedCopy;\n }\n\n map!.set(value, copiedValue);\n\n for (const key in value as object) {\n if (Object.hasOwn(value as object, key)) {\n (copiedValue as Record<string, unknown>)[key] = cloneDeep(\n (value as Record<string, unknown>)[key],\n map,\n );\n }\n }\n\n return copiedValue;\n }\n\n switch (type(value)) {\n case \"Object\":\n return copy(Object.create(Object.getPrototypeOf(value) as object) as object);\n case \"Array\":\n return copy(Array((value as unknown[]).length));\n case \"Date\":\n return new Date((value as Date).valueOf());\n case \"RegExp\":\n return cloneRegExp(value as RegExp);\n case \"Int8Array\":\n case \"Uint8Array\":\n case \"Uint8ClampedArray\":\n case \"Int16Array\":\n case \"Uint16Array\":\n case \"Int32Array\":\n case \"Uint32Array\":\n case \"Float32Array\":\n case \"Float64Array\":\n case \"BigInt64Array\":\n case \"BigUint64Array\":\n return (value as Int8Array).slice();\n default:\n return value;\n }\n}\n\nfunction cloneRegExp(pattern: RegExp) {\n return new RegExp(\n pattern.source,\n pattern.flags\n ? pattern.flags\n : (pattern.global ? \"g\" : \"\") +\n (pattern.ignoreCase ? \"i\" : \"\") +\n (pattern.multiline ? \"m\" : \"\") +\n (pattern.sticky ? \"y\" : \"\") +\n (pattern.unicode ? \"u\" : \"\") +\n (pattern.dotAll ? \"s\" : \"\"),\n );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport function debounce<TArgs extends any[]>(\n { delay }: { delay: number },\n func: (...args: TArgs) => any,\n) {\n let timer: NodeJS.Timeout | undefined;\n let active = true;\n\n const debounced = (...args: TArgs) => {\n if (active) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n if (active) {\n func(...args);\n }\n timer = undefined;\n }, delay);\n } else {\n func(...args);\n }\n };\n debounced.isPending = () => {\n return timer !== undefined;\n };\n debounced.cancel = () => {\n active = false;\n };\n debounced.flush = (...args: TArgs) => {\n func(...args);\n };\n\n return debounced;\n}\n","export function difference<T extends string | number | boolean | null | undefined>(\n first: T[],\n second: T[],\n): T[] {\n let idx = 0;\n const out: T[] = [];\n const toFilterOut = new Set();\n\n for (let i = 0; i < second.length; i += 1) {\n toFilterOut.add(second[i]);\n }\n\n while (idx < first.length) {\n if (!toFilterOut.has(first[idx])) {\n out[out.length] = first[idx];\n }\n idx += 1;\n }\n\n return out;\n}\n","export function differenceBy<T extends Record<string, unknown>>(\n first: T[],\n second: T[],\n key: keyof T,\n): T[] {\n let idx = 0;\n const out = [];\n const toFilterOut = new Set();\n\n for (let i = 0; i < second.length; i += 1) {\n toFilterOut.add(second[i][key]);\n }\n\n while (idx < first.length) {\n if (!toFilterOut.has(first[idx][key])) {\n out.push(first[idx]);\n }\n idx += 1;\n }\n\n return out;\n}\n","export function differenceWith<T = unknown>(\n first: T[],\n second: T[],\n extractPrimitive: (el: T) => string | number | boolean | undefined | null,\n): T[] {\n let idx = 0;\n const out = [];\n const toFilterOut = new Set();\n\n for (let i = 0; i < second.length; i += 1) {\n toFilterOut.add(extractPrimitive(second[i]));\n }\n\n while (idx < first.length) {\n if (!toFilterOut.has(extractPrimitive(first[idx]))) {\n out.push(first[idx]);\n }\n idx += 1;\n }\n\n return out;\n}\n","import { isObject } from \"../typings\";\n\nexport function isEqual(aVal: unknown, bVal: unknown) {\n if (aVal === bVal) return true;\n\n if (\n aVal == undefined ||\n bVal == undefined ||\n typeof aVal !== \"object\" ||\n typeof bVal !== \"object\"\n ) {\n return aVal === bVal;\n }\n\n if (aVal instanceof Date && bVal instanceof Date) {\n return aVal.getTime() === bVal.getTime();\n }\n\n if (aVal instanceof RegExp && bVal instanceof RegExp) {\n return aVal.toString() === bVal.toString();\n }\n\n if (aVal.constructor !== bVal.constructor) {\n return false;\n }\n\n if (Array.isArray(aVal) && Array.isArray(bVal)) {\n if (aVal.length !== bVal.length) return false;\n for (let i = 0; i < aVal.length; i++) {\n if (!isEqual(aVal[i], bVal[i])) return false;\n }\n\n return true;\n }\n\n if (isObject(aVal) && isObject(bVal)) {\n const keysA = Object.keys(aVal);\n const keysB = Object.keys(bVal);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!isEqual(aVal[key], bVal[key])) return false;\n }\n }\n\n return true;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport function throttle<TArgs extends any[]>(\n { interval }: { interval: number },\n func: (...args: TArgs) => any,\n) {\n let ready = true;\n let timer: NodeJS.Timeout | undefined;\n\n const throttled = (...args: TArgs) => {\n if (!ready) return;\n func(...args);\n ready = false;\n timer = setTimeout(() => {\n ready = true;\n timer = undefined;\n }, interval);\n };\n\n throttled.isThrottled = () => {\n return timer !== undefined;\n };\n\n return throttled;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/constants/date.ts","../../src/constants/api.ts","../../src/constants/environment.ts","../../src/constants/colors.ts","../../src/constants/fields.ts","../../src/lib/utils/wait-until.ts","../../src/lib/date/date-difference.ts","../../src/lib/date/get-date-by-rules.ts","../../src/lib/date/get-today.ts","../../src/lib/date/get-tomorrow.ts","../../src/lib/date/get-yesterday.ts","../../src/lib/date/is-today.ts","../../src/lib/date/is-tomorrow.ts","../../src/lib/date/is-yesterday.ts","../../src/lib/typings/check-type.ts","../../src/lib/typings/is-array.ts","../../src/lib/typings/is-boolean.ts","../../src/lib/typings/is-number.ts","../../src/lib/typings/is-string.ts","../../src/lib/typings/is-id.ts","../../src/lib/typings/is-null.ts","../../src/lib/typings/is-nullable.ts","../../src/lib/typings/is-object.ts","../../src/lib/typings/is-undefined.ts","../../src/lib/typings/is-date.ts","../../src/lib/typings/is-primitive.ts","../../src/lib/date/date-format.ts","../../src/lib/date/transform-to-dayjs.ts","../../src/lib/utils/transform-to-number.ts","../../src/lib/utils/field-view-format.ts","../../src/lib/utils/json-parse.ts","../../src/lib/utils/random-string.ts","../../src/lib/utils/wait.ts","../../src/lib/utils/build-query-string.ts","../../src/lib/utils/create-url-with-params.ts","../../src/lib/utils/trim-url.ts","../../src/lib/utils/array-to-map-by-key.ts","../../src/lib/lodash/get-by-path.ts","../../src/lib/lodash/set-by-path.ts","../../src/lib/utils/sync-object-values.ts","../../src/lib/utils/random-number.ts","../../src/lib/utils/get-file-name-from-header.ts","../../src/lib/utils/limit-stream-of-requests.ts","../../src/lib/utils/start-with.ts","../../src/lib/utils/get-caller-function-name.ts","../../src/lib/utils/translit.ts","../../src/lib/utils/join-paths.ts","../../src/lib/utils/speed-test.ts","../../src/lib/utils/create-global-id.ts","../../src/lib/utils/create-local-id-generator.ts","../../src/lib/utils/declination.ts","../../src/lib/browser/download-file.ts","../../src/lib/browser/download-json.ts","../../src/lib/browser/read-file.ts","../../src/lib/browser/get-visible-position.ts","../../src/lib/browser/get-query-values.ts","../../src/lib/browser/exec-animation.ts","../../src/lib/browser/copy-to-clipboard.ts","../../src/lib/browser/extract-queries.ts","../../src/lib/api/constants.ts","../../src/lib/api/middlewares/console-middleware.ts","../../src/lib/api/middlewares/console-post-middleware.ts","../../src/lib/api/oauth/token.ts","../../src/lib/api/oauth/user.ts","../../src/lib/api/middlewares/oauth-middleware.ts","../../src/lib/api/middlewares/index.ts","../../src/lib/api/core.ts","../../src/lib/colors/get-color-format.ts","../../src/lib/colors/transform-hex-to-rgb.ts","../../src/lib/colors/transform-rgb-to-rgba.ts","../../src/lib/colors/transform-rgba-to-rgb.ts","../../src/lib/colors/take-opacity-colors.ts","../../src/lib/colors/transform-to-color.ts","../../src/lib/colors/get-random-color.ts","../../src/lib/lodash/type.ts","../../src/lib/lodash/clone-deep.ts","../../src/lib/lodash/debounce.ts","../../src/lib/lodash/difference.ts","../../src/lib/lodash/difference-by.ts","../../src/lib/lodash/difference-with.ts","../../src/lib/lodash/is-equal.ts","../../src/lib/lodash/throttle.ts"],"sourcesContent":["export const DATE_TYPES = {\n Days: \"days\",\n Months: \"months\",\n Years: \"years\",\n Seconds: \"seconds\",\n Minutes: \"minutes\",\n Hours: \"hours\",\n} as const;\n","export const API_MIDDLEWARES = {\n Oauth: \"oauth\",\n Logger: \"logger\",\n} as const;\n\nexport const POST_API_MIDDLEWARES = {\n Logger: \"logger\",\n} as const;\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n\nexport const IS_JEST = typeof process != \"undefined\" && process.env.JEST_WORKER_ID !== undefined;\n\nexport const IS_BUN = typeof process !== \"undefined\" && process?.versions?.bun != undefined;\n\nexport const IS_DENO =\n // @ts-expect-error\n typeof Deno !== \"undefined\" &&\n // @ts-expect-error\n typeof Deno.version !== \"undefined\" &&\n // @ts-expect-error\n typeof Deno.version.deno !== \"undefined\";\n\nexport const IS_NODE = typeof process !== \"undefined\" && process?.versions?.node != undefined;\n\nexport const IS_WEB_WORKER =\n typeof self === \"object\" &&\n self.constructor &&\n self.constructor.name === \"DedicatedWorkerGlobalScope\";\n\nexport const IS_BROWSER = typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n","export const COLOR_FORMATS = {\n Hex: \"HEX\",\n Rgb: \"RGB\",\n Rgba: \"RGBA\",\n Hsl: \"HSL\",\n} as const;\n","export const FIELD_TYPES = {\n Date: \"date\",\n Time: \"time\",\n DateTime: \"dateTime\",\n String: \"string\",\n Number: \"number\",\n Array: \"array\",\n} as const;\n","export const waitUntil = (condition: () => boolean, checkInterval = 100) => {\n return new Promise((resolve) => {\n const interval = setInterval(() => {\n if (condition()) return;\n clearInterval(interval);\n resolve(true);\n }, checkInterval);\n });\n};\n","import dayjs from \"dayjs\";\nimport type { DateType } from \"../../types\";\n\ntype DateDifference = {\n type: DateType;\n firstDate: Date;\n secondDate?: Date;\n float?: boolean;\n};\n\nexport function dateDifference({\n firstDate,\n float = false,\n secondDate = new Date(),\n type,\n}: DateDifference) {\n const first = dayjs(firstDate);\n\n return first.diff(secondDate, type, float);\n}\n","import { DATE_TYPES } from \"../../constants\";\nimport { type DateGetterRule, type DateType } from \"../../types\";\n\nexport function getDateByRules(rules: DateGetterRule[], date: Date = new Date()) {\n let result = new Date(date);\n for (const rule of rules) {\n result = getDate(rule.increment, rule.type, result);\n }\n\n return result;\n}\n\nfunction getDate(increment: number, type: DateType, date: Date = new Date()) {\n const result = new Date(date);\n switch (type) {\n case DATE_TYPES.Days: {\n result.setDate(result.getDate() + increment);\n\n return result;\n }\n case DATE_TYPES.Months: {\n result.setMonth(result.getMonth() + increment);\n\n return result;\n }\n case DATE_TYPES.Years: {\n result.setFullYear(result.getFullYear() + increment);\n\n return result;\n }\n case DATE_TYPES.Seconds: {\n result.setSeconds(result.getSeconds() + increment);\n\n return result;\n }\n case DATE_TYPES.Minutes: {\n result.setMinutes(result.getMinutes() + increment);\n\n return result;\n }\n case DATE_TYPES.Hours: {\n result.setHours(result.getHours() + increment);\n\n return result;\n }\n default:\n return result;\n }\n}\n","export function getToday() {\n const startToday = new Date();\n startToday.setHours(0, 0, 0, 0);\n const endToday = new Date();\n endToday.setHours(23, 59, 59, 999);\n\n return { startToday, endToday };\n}\n","export function getTomorrow() {\n const tomorrow = new Date();\n tomorrow.setHours(0, 0, 0, 0);\n tomorrow.setDate(tomorrow.getDate() + 1);\n\n return tomorrow;\n}\n","export function getYesterday() {\n const yesterday = new Date();\n yesterday.setHours(0, 0, 0, 0);\n yesterday.setDate(yesterday.getDate() - 1);\n\n return yesterday;\n}\n","import dayjs from \"dayjs\";\nimport todayPlugin from \"dayjs/plugin/isToday\";\nimport type { Maybe } from \"../../types\";\n\ndayjs.extend(todayPlugin);\n\nexport function isToday(date: Maybe<string | Date | number>) {\n try {\n return dayjs(date).isToday();\n } catch {\n return false;\n }\n}\n","import dayjs from \"dayjs\";\nimport tomorrowPlugin from \"dayjs/plugin/isTomorrow\";\nimport type { Maybe } from \"../../types\";\n\ndayjs.extend(tomorrowPlugin);\n\nexport function isTomorrow(date: Maybe<string | Date | number>) {\n try {\n return dayjs(date).isTomorrow();\n } catch {\n return false;\n }\n}\n","import dayjs from \"dayjs\";\nimport yesterdayPlugin from \"dayjs/plugin/isYesterday\";\nimport { type Maybe } from \"../../types\";\n\ndayjs.extend(yesterdayPlugin);\n\nexport function isYesterday(date: Maybe<string | Date | number>) {\n try {\n return dayjs(date).isYesterday();\n } catch {\n return false;\n }\n}\n","export function checkType<R>(value: unknown, condition: boolean): value is R {\n if (condition) {\n return true;\n }\n\n return false;\n}\n","export function isArray(value: unknown): value is unknown[] {\n return Boolean(value && Array.isArray(value));\n}\n","export function isBoolean(value: unknown): value is boolean {\n return typeof value === \"boolean\";\n}\n","export function isNumber(value: unknown): value is number {\n return typeof value === \"number\" && !Number.isNaN(value);\n}\n","export function isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n","import { isNumber } from \"./is-number\";\nimport { isString } from \"./is-string\";\n\nexport function isId(value: unknown): value is number | string {\n return isNumber(value) || isString(value);\n}\n","export function isNull(value: unknown): value is null {\n return value === null;\n}\n","export function isNullable(value: unknown): value is null | undefined {\n return typeof value === \"undefined\" || value === null;\n}\n","export function isObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n","export function isUndefined(value: unknown): value is undefined {\n return typeof value === \"undefined\";\n}\n","export function isDate(value: unknown): value is Date {\n if (value instanceof Date) return !Number.isNaN(value.valueOf());\n\n return false;\n}\n","export function isPrimitive(value: unknown): value is string | number | boolean | null | undefined {\n const type = typeof value;\n\n return value == undefined || (type != \"object\" && type != \"function\");\n}\n","import dayjs from \"dayjs\";\nimport { isDate } from \"../typings\";\n\nexport function dateFormat(date: Date | string | number, format: string) {\n const correctDate = new Date(date);\n\n if (!isDate(correctDate)) return \"\";\n\n return dayjs(correctDate).format(format);\n}\n","import dayjs, { type Dayjs } from \"dayjs\";\n\nexport function transformToDayjs(date: Date | string | number): Dayjs {\n return dayjs(date);\n}\n","import { isString } from \"../typings\";\n\nexport function transformToNumber(value: unknown) {\n let result: number | undefined;\n\n if (isString(value)) result = parseInt(value, 10);\n else result = Number(value);\n\n return Number.isNaN(result) ? 0 : result;\n}\n","import { FIELD_TYPES } from \"../../constants\";\nimport type { FieldType } from \"../../types\";\nimport { dateFormat } from \"../date\";\nimport { isArray, isBoolean, isDate, isNumber, isString } from \"../typings\";\nimport { transformToNumber } from \"./transform-to-number\";\n\nexport function fieldViewFormat(field: unknown, type: FieldType = \"string\") {\n switch (type) {\n case FIELD_TYPES.Array: {\n return isArray(field) ? field.join(\", \") : \"\";\n }\n case FIELD_TYPES.Date: {\n return isString(field) || isNumber(field) || isDate(field)\n ? dateFormat(field, \"DD.MM.YYYY\")\n : \"\";\n }\n case FIELD_TYPES.DateTime: {\n return isString(field) || isNumber(field) || isDate(field)\n ? dateFormat(field, \"DD.MM.YYYY HH:mm\")\n : \"\";\n }\n case FIELD_TYPES.Number: {\n return isString(field) || isNumber(field) || isBoolean(field)\n ? String(transformToNumber(field))\n : \"\";\n }\n case FIELD_TYPES.String: {\n return isString(field) || isNumber(field) || isBoolean(field) ? String(field) : \"\";\n }\n case FIELD_TYPES.Time: {\n return isString(field) || isNumber(field) || isDate(field) ? dateFormat(field, \"HH:mm\") : \"\";\n }\n default: {\n return isString(field) || isNumber(field) || isBoolean(field) ? String(field) : \"\";\n }\n }\n}\n","import { isString } from \"../typings\";\n\nexport function jsonParse<T>(json: unknown): T | null {\n if (!isString(json)) return null;\n\n try {\n return JSON.parse(json) as T;\n } catch {\n return null;\n }\n}\n","const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\nexport function randomString(length: number = 10, allowCharacters: string = characters) {\n let result = \"\";\n let counter = 0;\n\n while (counter < length) {\n result += allowCharacters.charAt(Math.floor(Math.random() * allowCharacters.length));\n counter += 1;\n }\n\n return result;\n}\n","export function wait(delay: number) {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true);\n }, delay);\n });\n}\n","import type { ParamsType } from \"../../types\";\nimport { isArray, isObject } from \"../typings\";\n\nexport function buildQueryString(params: ParamsType): string {\n const queryString: string[] = [];\n\n for (const [key, value] of Object.entries(params)) {\n if (isObject(value) || value == undefined) continue;\n\n if (isArray(value)) {\n for (const item of value) {\n if (item != undefined && !isObject(item))\n queryString.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(item))}`);\n }\n } else {\n queryString.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n }\n }\n\n return queryString.join(\"&\");\n}\n","import type { ParamsType } from \"../../types\";\nimport { buildQueryString } from \"./build-query-string\";\n\ntype CreateURLOptionsInterface = {\n baseURL: string;\n params?: ParamsType;\n};\n\nexport function createURLWithParams(options: CreateURLOptionsInterface): string {\n const url = options.baseURL;\n\n if (!options.params) {\n return url;\n }\n\n const queryString = buildQueryString(options.params);\n\n return `${url}?${queryString}`;\n}\n","export function trimUrl(url: string) {\n return url.replace(/^\\//, \"\").replace(/\\/$/, \"\");\n}\n","import { isId } from \"../typings\";\n\nexport function arrayToMapByKey<T extends Record<string, unknown>>(\n array: T[],\n key: keyof T,\n): Record<string, T> {\n const map: Record<string, T> = {};\n\n for (const item of array) {\n const keyValue = item[key] as unknown;\n if (isId(keyValue)) map[keyValue] = item;\n }\n\n return map;\n}\n","import get from \"lodash/get\";\nimport { isArray, isObject, isString } from \"../typings\";\n\nexport function getByPath<T, D = undefined>(data: unknown, path?: string, defaultValue?: D): T | D {\n if ((!isObject(data) && !isArray(data)) || !isString(path)) return defaultValue as D;\n\n return get(data, path, defaultValue) as T | D;\n}\n","import set from \"lodash/set\";\nimport { isArray, isObject } from \"../typings\";\n\nexport function setByPath(data: Record<string, unknown> | unknown[], path: string, value: unknown) {\n try {\n if (!isObject(data) && !isArray(data)) throw new Error(\"bad data\");\n\n set(data, path, value);\n } catch (error) {\n console.warn(error);\n }\n}\n","import { getByPath } from \"../lodash/get-by-path\";\nimport { setByPath } from \"../lodash/set-by-path\";\nimport { isUndefined } from \"../typings\";\n\nexport function syncObjectValues(\n oldObj: Record<string, unknown>,\n newObj: Record<string, unknown>,\n exception: string[] = [],\n) {\n for (const field in newObj) {\n if (exception.includes(field)) continue;\n\n const oldValue = getByPath(oldObj, field, undefined);\n const newValue = getByPath(newObj, field, undefined);\n\n if (isUndefined(oldValue) || isUndefined(newValue)) continue;\n if (oldValue === newValue) continue;\n\n setByPath(oldObj, field, newValue);\n }\n}\n","export function randomNumber(min: number, max: number) {\n min = Math.ceil(min);\n max = Math.floor(max);\n\n return Math.floor(Math.random() * (max - min) + min);\n}\n","const filenameVariables = [\"filename=\", \"filename*=UTF-8''\"];\n\nexport function getFileNameFromHeader(header: string) {\n const name = header\n .split(\";\")\n .find((info) => ~info.indexOf(filenameVariables[0]) || ~info.indexOf(filenameVariables[1]))\n ?.replace(filenameVariables[0], \"\")\n ?.replace(filenameVariables[1], \"\")\n ?.replace(/\"/g, \"\")\n ?.trim();\n\n return name ? decodeURI(name) : null;\n}\n","import { wait } from \"./wait\";\n\ntype LimitStreamOfRequestsOptions<T> = {\n countRequests: number;\n maxCountInParallel: number;\n promiseGetter: (count: number) => Promise<T>;\n refetchAfterError?: boolean;\n maxTryCount?: number;\n collectResult?: boolean;\n resultCb?: (result: T) => void;\n throwError?: boolean;\n errorCb?: (error: unknown, position: number, tryCount: number) => void;\n};\n\nexport function limitStreamOfRequests<T>({\n countRequests,\n maxCountInParallel,\n promiseGetter,\n refetchAfterError,\n resultCb,\n collectResult,\n maxTryCount = 3,\n throwError,\n errorCb,\n}: LimitStreamOfRequestsOptions<T>): { promise: Promise<T[]>; cancel: () => void } {\n let isStopped = false;\n\n if (maxCountInParallel > countRequests) maxCountInParallel = countRequests;\n\n return {\n cancel: () => {\n isStopped = true;\n },\n promise: new Promise((resolve, reject) => {\n let currentRequests = 0;\n let currentResponses = 0;\n const results: T[] = [];\n\n for (let i = 0; i < maxCountInParallel; i++) {\n request(promiseGetter(++currentRequests), currentRequests);\n }\n\n function request(promise: Promise<T> | T, position: number, tryCount: number = 1) {\n if (isStopped) return void resolve(results);\n if (currentResponses === countRequests) return void resolve(results);\n if (position > countRequests) resolve(results);\n\n Promise.resolve(promise)\n .then((result) => {\n if (isStopped) return void resolve(results);\n\n if (collectResult) results.push(result);\n if (resultCb) resultCb(result);\n currentResponses++;\n if (currentResponses === countRequests) return void resolve(results);\n\n request(promiseGetter(++currentRequests), currentRequests);\n })\n .catch((error: unknown) => {\n if (errorCb) errorCb(error, position, tryCount);\n\n if (isStopped) return void resolve(results);\n\n if (refetchAfterError && maxTryCount > tryCount) {\n return void wait(1000).then(() =>\n request(promiseGetter(position), position, tryCount + 1),\n );\n }\n\n if (throwError) {\n reject(error);\n }\n\n currentResponses++;\n request(promiseGetter(++currentRequests), currentRequests);\n });\n }\n }),\n };\n}\n","export function startWith(string: string, mask: string) {\n const maskSize = mask.length;\n let pos = 0;\n\n while (pos < maskSize) {\n if (string.codePointAt(pos) !== mask.codePointAt(pos)) return false;\n pos++;\n }\n\n return true;\n}\n","export function getCallerFunctionName() {\n try {\n const error = new Error();\n if (!error.stack) throw error;\n const stack = error.stack.split(\"\\n\");\n\n if (stack[2]) {\n const callerLine = stack[2].trim();\n const match = /at (\\w+)/.exec(callerLine);\n if (match) {\n return match[1];\n }\n }\n } catch {}\n\n return null;\n}\n","const translitDict: Record<string, string> = {\n А: \"A\",\n Б: \"B\",\n В: \"V\",\n Г: \"G\",\n Д: \"D\",\n Е: \"E\",\n Ё: \"YO\",\n Ж: \"ZH\",\n З: \"Z\",\n И: \"I\",\n Й: \"Y\",\n К: \"K\",\n Л: \"L\",\n М: \"M\",\n Н: \"N\",\n О: \"O\",\n П: \"P\",\n Р: \"R\",\n С: \"S\",\n Т: \"T\",\n У: \"U\",\n Ф: \"F\",\n Х: \"KH\",\n Ц: \"TS\",\n Ч: \"CH\",\n Ш: \"SH\",\n Щ: \"SCH\",\n Ъ: \"\",\n Ы: \"Y\",\n Ь: \"\",\n Э: \"E\",\n Ю: \"YU\",\n Я: \"YA\",\n а: \"a\",\n б: \"b\",\n в: \"v\",\n г: \"g\",\n д: \"d\",\n е: \"e\",\n ё: \"yo\",\n ж: \"zh\",\n з: \"z\",\n и: \"i\",\n й: \"y\",\n к: \"k\",\n л: \"l\",\n м: \"m\",\n н: \"n\",\n о: \"o\",\n п: \"p\",\n р: \"r\",\n с: \"s\",\n т: \"t\",\n у: \"u\",\n ф: \"f\",\n х: \"kh\",\n ц: \"ts\",\n ч: \"ch\",\n ш: \"sh\",\n щ: \"sch\",\n ъ: \"\",\n ы: \"y\",\n ь: \"\",\n э: \"e\",\n ю: \"yu\",\n я: \"ya\",\n \" \": \"_\",\n A: \"A\",\n B: \"B\",\n C: \"C\",\n D: \"D\",\n E: \"E\",\n F: \"F\",\n G: \"G\",\n H: \"H\",\n I: \"I\",\n J: \"J\",\n K: \"K\",\n L: \"L\",\n M: \"M\",\n N: \"N\",\n O: \"O\",\n P: \"P\",\n Q: \"Q\",\n R: \"R\",\n S: \"S\",\n T: \"T\",\n U: \"U\",\n V: \"V\",\n W: \"W\",\n X: \"X\",\n Y: \"Y\",\n Z: \"Z\",\n a: \"a\",\n b: \"b\",\n c: \"c\",\n d: \"d\",\n e: \"e\",\n f: \"f\",\n g: \"g\",\n h: \"h\",\n i: \"i\",\n j: \"j\",\n k: \"k\",\n l: \"l\",\n m: \"m\",\n n: \"n\",\n o: \"o\",\n p: \"p\",\n q: \"q\",\n r: \"r\",\n s: \"s\",\n t: \"t\",\n u: \"u\",\n v: \"v\",\n w: \"w\",\n x: \"x\",\n y: \"y\",\n z: \"z\",\n \"0\": \"0\",\n \"1\": \"1\",\n \"2\": \"2\",\n \"3\": \"3\",\n \"4\": \"4\",\n \"5\": \"5\",\n \"6\": \"6\",\n \"7\": \"7\",\n \"8\": \"8\",\n \"9\": \"9\",\n};\n\nexport function translit(text: string) {\n return text\n .split(\"\")\n .map((char) => translitDict[char] || \"\")\n .join(\"\");\n}\n","export function joinPaths(...parts: string[]) {\n return parts\n .reduce((result: string[], part) => {\n const trimedPart = part.trim().replace(/^\\/+|\\/+$/g, \"\");\n if (trimedPart.length > 0) result.push(trimedPart);\n\n return result;\n }, [])\n .join(\"/\");\n}\n","type SpeedTestOptions = {\n name: string;\n iterations?: number;\n type?: \"time\" | \"performance\";\n};\n\nexport function speedTest<T>(cb: () => T, opts: SpeedTestOptions): T {\n const { name, iterations = 10000, type = \"time\" } = opts;\n let result: T | undefined;\n\n if (type === \"performance\") {\n const start = performance.now();\n\n if (iterations <= 1) {\n result = cb();\n } else {\n for (let i = 0; i < iterations; i++) {\n result = cb();\n }\n }\n\n const end = performance.now();\n // eslint-disable-next-line no-console\n console.log(`${name}: `, end - start);\n } else {\n // eslint-disable-next-line no-console\n console.time(name);\n\n if (iterations <= 1) {\n result = cb();\n } else {\n for (let i = 0; i < iterations; i++) {\n result = cb();\n }\n }\n\n // eslint-disable-next-line no-console\n console.timeEnd(name);\n }\n\n return result as T;\n}\n","let id = 0;\n\nexport function createGlobalId() {\n return id++;\n}\n","import { createGlobalId } from \"./create-global-id\";\n\nexport function createLocalIdGenerator(): () => number {\n let localLastId = 0;\n const globalLastId = createGlobalId() << 14;\n\n return function generateId() {\n return (globalLastId | localLastId++) >>> 0;\n };\n}\n","export function declination(value: number, words: [string, string, string]) {\n value = Math.abs(value) % 100;\n const num = value % 10;\n if (value > 10 && value < 20) return words[2];\n if (num > 1 && num < 5) return words[1];\n if (num == 1) return words[0];\n\n return words[2];\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\nimport { getFileNameFromHeader } from \"../utils\";\n\ntype DownloadFileOptions = {\n data: Blob;\n fileName: string;\n mimeType: string;\n};\n\nexport function downloadFile({ data, fileName, mimeType }: DownloadFileOptions) {\n if (!IS_BROWSER && !IS_JEST) return null;\n\n const name = getFileNameFromHeader(fileName);\n if (!name) throw new Error(\"Bad filename\");\n\n const blob = new Blob([data], {\n type: mimeType,\n });\n\n const downloadUrl = window.URL.createObjectURL(blob);\n\n const link = document.createElement(\"a\");\n link.style.display = \"none\";\n link.download = name;\n link.href = downloadUrl;\n\n document.body.appendChild(link);\n link.click();\n\n document.body.removeChild(link);\n link.remove();\n window.URL.revokeObjectURL(downloadUrl);\n\n return null;\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function downloadJson(data: unknown, name: string) {\n if (!IS_BROWSER && !IS_JEST) return null;\n\n const url = `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(data))}`;\n\n const link = document.createElement(\"a\");\n link.style.display = \"none\";\n link.download = name;\n link.href = url;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n link.remove();\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function readFile(file: File) {\n return new Promise((resolve) => {\n if (!IS_BROWSER && !IS_JEST) {\n resolve(null);\n\n return;\n }\n\n const reader = new FileReader();\n reader.readAsText(file);\n\n reader.onload = () => {\n resolve(reader.result);\n };\n\n reader.onerror = () => {\n resolve(null);\n };\n });\n}\n","type XPositions = \"insideCenter\" | \"insideLeft\" | \"insideRight\" | \"right\" | \"left\";\ntype YPosition = \"insideCenter\" | \"insideTop\" | \"insideBottom\" | \"bottom\" | \"top\";\n\nexport type PositionPlacements =\n | \"bottom-center\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"right-center\"\n | \"right-top\"\n | \"right-bottom\"\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"left-center\"\n | \"left-top\"\n | \"left-bottom\"\n | \"flex\";\n\nexport type VisiblePosition = {\n top: number;\n left: number;\n right: number;\n bottom: number;\n placement: PositionPlacements;\n};\n\ntype InitialVisiblePosition = {\n top: number;\n left: number;\n placement: PositionPlacements;\n};\n\ntype InitialPosition = {\n targetNode?: HTMLElement;\n position?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n};\ntype GetVisiblePositionOptions = {\n node: HTMLElement;\n initialPosition?: InitialPosition;\n visibleArea?: HTMLElement;\n placement?: Exclude<PositionPlacements, \"flex\">;\n stepX?: number;\n stepY?: number;\n flex?: boolean;\n nested?: boolean;\n};\nexport function getVisiblePosition({\n initialPosition,\n node,\n visibleArea,\n placement = \"bottom-center\",\n stepX = placement === \"bottom-center\" ||\n placement === \"bottom-left\" ||\n placement === \"bottom-right\" ||\n placement === \"top-left\" ||\n placement === \"top-center\" ||\n placement === \"top-right\"\n ? 0\n : 10,\n stepY = placement === \"left-bottom\" ||\n placement === \"left-center\" ||\n placement === \"left-top\" ||\n placement === \"right-bottom\" ||\n placement === \"right-top\" ||\n placement === \"right-center\"\n ? 0\n : 10,\n flex,\n nested,\n}: GetVisiblePositionOptions): VisiblePosition {\n /** Viewport Variables */\n const totalHeight = document.body.scrollHeight;\n const totalWidth = document.body.scrollWidth;\n const viewport = visibleArea ?? document.body;\n const scrollTop = document.body.scrollTop;\n const scrollLeft = document.body.scrollLeft;\n const rect = viewport.getBoundingClientRect();\n const viewportWidth = viewport.clientWidth;\n const viewportHeight = viewport.clientHeight;\n const xStart = visibleArea ? viewport.offsetLeft - viewport.scrollLeft : Math.abs(rect.left);\n const xEnd = xStart + viewportWidth;\n const yStart = visibleArea ? viewport.offsetTop : Math.abs(rect.top);\n const yEnd = yStart + viewportHeight;\n\n /** Target Variables */\n let targetHeight = 0;\n let targetWidth = 0;\n let targetTopPosition = 0;\n let targetLeftPosition = 0;\n\n /** Not bounding because not need scale */\n const nodeHeight = node.clientHeight;\n const nodeWidth = node.clientWidth;\n\n if (initialPosition?.targetNode) {\n const { top, left, height, width } = initialPosition.targetNode.getBoundingClientRect();\n targetHeight = height;\n targetWidth = width;\n targetTopPosition = top + scrollTop;\n targetLeftPosition = left + scrollLeft;\n }\n if (initialPosition?.position) {\n if (initialPosition.position.x != undefined) {\n targetLeftPosition = initialPosition.position.x + scrollLeft;\n }\n if (initialPosition.position.y != undefined) {\n targetTopPosition = initialPosition.position.y + scrollTop;\n }\n if (initialPosition.position.height != undefined) {\n targetHeight = initialPosition.position.height;\n }\n if (initialPosition.position.width != undefined) {\n targetWidth = initialPosition.position.width;\n }\n }\n\n /** Inherit Position */\n let inheritLeft = 0;\n let inheritTop = 0;\n let inheritHeight = 0;\n let inheritWidth = 0;\n if (nested) {\n const {\n left = 0,\n top = 0,\n height = 0,\n width = 0,\n } = node.parentElement?.getBoundingClientRect?.() ?? {};\n inheritLeft = left + scrollLeft;\n inheritTop = top + scrollTop;\n inheritHeight = height;\n inheritWidth = width;\n }\n\n /** Initial Position */\n const targetXCenter =\n targetWidth != undefined ? targetLeftPosition + targetWidth / 2 : targetLeftPosition;\n const targetYCenter =\n targetHeight != undefined ? targetTopPosition + targetHeight / 2 : targetTopPosition;\n const targetYEnd =\n targetHeight != undefined ? targetTopPosition + targetHeight : targetTopPosition;\n\n const x: Record<XPositions, number> = {\n insideCenter: targetXCenter - nodeWidth / 2 + stepX,\n insideRight: targetLeftPosition + targetWidth + stepX - nodeWidth,\n insideLeft: targetLeftPosition + stepX,\n left: targetLeftPosition - nodeWidth - stepX,\n right: targetLeftPosition + targetWidth + stepX,\n };\n\n const y: Record<YPosition, number> = {\n bottom: targetYEnd + stepY,\n top: targetTopPosition - stepY - nodeHeight,\n insideCenter: targetYCenter - nodeHeight / 2 + stepY,\n insideBottom: targetTopPosition + targetHeight - nodeHeight + stepY,\n insideTop: targetTopPosition + stepY,\n };\n /** Find visible position */\n function isCompletelyVisibleX(left: number) {\n const endXPosition = nodeWidth + left;\n\n return xStart <= left && xEnd >= endXPosition;\n }\n function isCompletelyVisibleY(top: number) {\n const endYPosition = nodeHeight + top;\n\n return yStart <= top && yEnd >= endYPosition;\n }\n\n let visiblePositions = processVisiblePositions({\n targetLeftPosition,\n targetTopPosition,\n x,\n y,\n placement,\n flex,\n nodeHeight,\n nodeWidth,\n xEnd,\n xStart,\n yEnd,\n yStart,\n isCompletelyVisibleX,\n isCompletelyVisibleY,\n });\n if (\n flex &&\n (!isCompletelyVisibleX(visiblePositions.left) || !isCompletelyVisibleY(visiblePositions.top))\n ) {\n visiblePositions = getFlexVisiblePosition({\n initialLeft: visiblePositions.left,\n initialTop: visiblePositions.top,\n isCompletelyVisibleX,\n isCompletelyVisibleY,\n nodeHeight,\n nodeWidth,\n xEnd,\n yEnd,\n });\n }\n\n visiblePositions.left -= inheritLeft;\n visiblePositions.top -= inheritTop;\n\n return {\n placement: visiblePositions.placement,\n left: visiblePositions.left,\n top: visiblePositions.top,\n bottom: nested\n ? inheritHeight - (visiblePositions.top + nodeHeight)\n : totalHeight - (visiblePositions.top + nodeHeight),\n right: nested\n ? inheritWidth - (visiblePositions.left + nodeWidth)\n : totalWidth - (visiblePositions.left + nodeWidth),\n };\n}\n\ntype ProcessVisiblePositions = {\n placement: Exclude<PositionPlacements, \"flex\">;\n x: Record<XPositions, number>;\n y: Record<YPosition, number>;\n targetLeftPosition: number;\n targetTopPosition: number;\n nodeWidth: number;\n nodeHeight: number;\n xStart: number;\n xEnd: number;\n yStart: number;\n yEnd: number;\n flex: boolean | undefined;\n isCompletelyVisibleX: (position: number) => boolean;\n isCompletelyVisibleY: (position: number) => boolean;\n};\nfunction processVisiblePositions(opts: ProcessVisiblePositions): InitialVisiblePosition {\n let correctLeft: number | null = opts.targetLeftPosition;\n let correctTop: number | null = opts.targetTopPosition;\n\n switch (opts.placement) {\n case \"bottom-center\": {\n correctLeft = opts.x.insideCenter;\n correctTop = opts.y.bottom;\n let placement: PositionPlacements = \"bottom-center\";\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"bottom-left\";\n correctLeft = opts.x.insideLeft;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"bottom-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.top)) {\n placement = placement.replace(\"bottom\", \"top\") as PositionPlacements;\n correctTop = opts.y.top;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"bottom-left\": {\n correctLeft = opts.x.insideLeft;\n correctTop = opts.y.bottom;\n let placement: PositionPlacements = \"bottom-left\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"bottom-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"bottom-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.top)) {\n placement = placement.replace(\"bottom\", \"top\") as PositionPlacements;\n correctTop = opts.y.top;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"bottom-right\": {\n correctLeft = opts.x.insideRight;\n correctTop = opts.y.bottom;\n let placement: PositionPlacements = \"bottom-right\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"bottom-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"bottom-left\";\n correctLeft = opts.x.insideLeft;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.top)) {\n placement = placement.replace(\"bottom\", \"top\") as PositionPlacements;\n correctTop = opts.y.top;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"right-bottom\": {\n correctLeft = opts.x.right;\n correctTop = opts.y.insideBottom;\n let placement: PositionPlacements = \"right-bottom\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"right-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"right-top\";\n correctTop = opts.y.insideTop;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.left)) {\n placement = placement.replace(\"right\", \"left\") as PositionPlacements;\n correctLeft = opts.x.left;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"right-center\": {\n correctLeft = opts.x.right;\n correctTop = opts.y.insideCenter;\n let placement: PositionPlacements = \"right-center\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"right-top\";\n correctTop = opts.y.insideTop;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"right-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.left)) {\n placement = placement.replace(\"right\", \"left\") as PositionPlacements;\n correctLeft = opts.x.left;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"right-top\": {\n correctLeft = opts.x.right;\n correctTop = opts.y.insideTop;\n let placement: PositionPlacements = \"right-top\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"right-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"right-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.left)) {\n placement = placement.replace(\"right\", \"left\") as PositionPlacements;\n correctLeft = opts.x.left;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"top-center\": {\n correctLeft = opts.x.insideCenter;\n correctTop = opts.y.top;\n let placement: PositionPlacements = \"top-center\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"top-left\";\n correctLeft = opts.x.insideLeft;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"top-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.bottom)) {\n placement = placement.replace(\"top\", \"bottom\") as PositionPlacements;\n correctTop = opts.y.bottom;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"top-left\": {\n correctLeft = opts.x.insideLeft;\n correctTop = opts.y.top;\n let placement: PositionPlacements = \"top-left\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"top-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideRight)) {\n placement = \"top-right\";\n correctLeft = opts.x.insideRight;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.bottom)) {\n placement = placement.replace(\"top\", \"bottom\") as PositionPlacements;\n correctTop = opts.y.bottom;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"top-right\": {\n correctLeft = opts.x.insideRight;\n correctTop = opts.y.top;\n let placement: PositionPlacements = \"top-right\";\n\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.insideCenter)) {\n placement = \"top-center\";\n correctLeft = opts.x.insideCenter;\n } else if (opts.isCompletelyVisibleX(opts.x.insideLeft)) {\n placement = \"top-left\";\n correctLeft = opts.x.insideLeft;\n }\n }\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.bottom)) {\n placement = placement.replace(\"top\", \"bottom\") as PositionPlacements;\n correctTop = opts.y.bottom;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"left-bottom\": {\n correctLeft = opts.x.left;\n correctTop = opts.y.insideBottom;\n let placement: PositionPlacements = \"left-bottom\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"left-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"left-top\";\n correctTop = opts.y.insideTop;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.right)) {\n placement = placement.replace(\"left\", \"right\") as PositionPlacements;\n correctLeft = opts.x.right;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"left-center\": {\n correctLeft = opts.x.left;\n correctTop = opts.y.insideCenter;\n let placement: PositionPlacements = \"left-center\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideTop)) {\n placement = \"left-top\";\n correctTop = opts.y.insideTop;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"left-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.right)) {\n placement = placement.replace(\"left\", \"right\") as PositionPlacements;\n correctLeft = opts.x.right;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n case \"left-top\": {\n correctLeft = opts.x.left;\n correctTop = opts.y.insideTop;\n let placement: PositionPlacements = \"left-top\";\n\n if (!opts.isCompletelyVisibleY(correctTop)) {\n if (opts.isCompletelyVisibleY(opts.y.insideCenter)) {\n placement = \"left-center\";\n correctTop = opts.y.insideCenter;\n } else if (opts.isCompletelyVisibleY(opts.y.insideBottom)) {\n placement = \"left-bottom\";\n correctTop = opts.y.insideBottom;\n }\n }\n if (!opts.isCompletelyVisibleX(correctLeft)) {\n if (opts.isCompletelyVisibleX(opts.x.right)) {\n placement = placement.replace(\"left\", \"right\") as PositionPlacements;\n\n correctLeft = opts.x.right;\n }\n }\n\n return {\n top: correctTop,\n left: correctLeft,\n placement,\n };\n }\n default: {\n return {\n top: correctTop,\n left: correctLeft,\n placement: opts.placement,\n };\n }\n }\n}\n\ntype GetFlexVisiblePosition = {\n isCompletelyVisibleY: (top: number) => boolean;\n isCompletelyVisibleX: (left: number) => boolean;\n initialLeft: number;\n initialTop: number;\n xEnd: number;\n yEnd: number;\n nodeWidth: number;\n nodeHeight: number;\n};\n\nfunction getFlexVisiblePosition({\n initialLeft,\n initialTop,\n isCompletelyVisibleX,\n isCompletelyVisibleY,\n nodeHeight,\n nodeWidth,\n xEnd,\n yEnd,\n}: GetFlexVisiblePosition): InitialVisiblePosition {\n if (!isCompletelyVisibleY(initialTop)) {\n initialTop = yEnd - nodeHeight;\n }\n if (!isCompletelyVisibleX(initialLeft)) {\n initialLeft = xEnd - nodeWidth;\n }\n\n return {\n top: initialTop,\n left: initialLeft,\n placement: \"flex\",\n };\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\nimport { isArray, isString } from \"../typings\";\n\nexport function getQueryValues<K extends string>(\n keys: K[],\n): Record<K, string | string[] | undefined> | null {\n if (!IS_BROWSER && !IS_JEST) return null;\n\n const object: Record<K, string | string[] | undefined> = {} as Record<\n K,\n string | string[] | undefined\n >;\n\n const queries = window.location.search.substring(1).split(\"&\");\n for (const query of queries) {\n const [key, value] = query.split(\"=\");\n if (keys.includes(key as K) && value) {\n const prev = object[key as K];\n if (isArray(prev)) prev.push(value);\n else if (isString(prev)) object[key as K] = [prev, value];\n else object[key as K] = value;\n }\n }\n\n return object;\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function execAnimation(\n element: HTMLElement | null | undefined,\n className: string,\n autoCloseDelay: number = 700,\n) {\n return new Promise((resolve) => {\n if (!IS_BROWSER && !IS_JEST) {\n resolve(true);\n\n return;\n }\n\n if (!element) {\n resolve(true);\n\n return;\n }\n\n const timerId = setTimeout(() => {\n resolve(true);\n }, autoCloseDelay);\n\n element.addEventListener(\n \"animationend\",\n () => {\n resolve(true);\n element?.classList?.remove?.(className);\n clearTimeout(timerId);\n },\n {\n once: true,\n },\n );\n element.classList.add(className);\n });\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function copyToClipboard(textToCopy: string) {\n return new Promise<boolean>((resolve) => {\n if (!IS_BROWSER && !IS_JEST) {\n resolve(false);\n\n return;\n }\n\n try {\n if (navigator.clipboard && window.isSecureContext) {\n navigator.clipboard\n .writeText(textToCopy)\n .then(() => resolve(true))\n .catch(() => resolve(false));\n\n return;\n }\n\n const textArea = document.createElement(\"textarea\");\n textArea.value = textToCopy;\n textArea.style.position = \"fixed\";\n textArea.style.left = \"-999999px\";\n textArea.style.top = \"-999999px\";\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const result = document.execCommand(\"copy\");\n textArea.remove();\n\n resolve(result);\n } catch {\n resolve(false);\n }\n });\n}\n","import { IS_BROWSER, IS_JEST } from \"../../constants\";\n\nexport function extractQueries() {\n const queryMap: Record<string, string[] | undefined> = {};\n if (!IS_BROWSER && !IS_JEST) return queryMap;\n\n const queryString = document.location.search;\n queryString\n .replace(/^\\?/, \"\")\n .split(\"&\")\n .forEach((query) => {\n const [key, value] = query.split(\"=\", 2);\n\n queryMap[key] ??= [];\n const prev = queryMap[key];\n prev.push(value);\n });\n\n return queryMap;\n}\n","export const RESPONSE_DATA_SYMBOL = Symbol(\"response data\");\n","import type { LoggerMiddlewareOptions, Middleware, RequestInterface } from \"../../../types\";\n\nexport function generateConsoleMiddleware(options: LoggerMiddlewareOptions = {}): Middleware {\n return (request) => {\n return new Promise((resolve) => {\n if (\n (options.filter &&\n !options.filter(request as RequestInterface<unknown, unknown, unknown, unknown>)) ||\n (options.filterHeaders && !options.filterHeaders(request.headers)) ||\n (options.filterMethod && !options.filterMethod(request.method)) ||\n (options.filterParams && !options.filterParams(request.params)) ||\n (options.filterPath && !options.filterPath(request.path))\n ) {\n resolve(true);\n\n return;\n }\n // eslint-disable-next-line no-console\n console.log(request);\n resolve(true);\n });\n };\n}\n","/* eslint-disable no-console */\nimport type { LoggerPostMiddlewareOptions, PostMiddleware } from \"../../../types\";\nimport { RESPONSE_DATA_SYMBOL } from \"../constants\";\n\nexport function generateConsolePostMiddleware(\n options: LoggerPostMiddlewareOptions = {},\n): PostMiddleware {\n return (response) => {\n return new Promise((resolve) => {\n void (async function logger() {\n try {\n if (\n !response ||\n (options.filter && !options.filter(response)) ||\n (options.filterStatus && !options.filterStatus(response.status)) ||\n (options.filterUrl && !options.filterUrl(response.url)) ||\n (options.filterHeaders && !options.filterHeaders(response.headers))\n ) {\n resolve(true);\n\n return;\n }\n\n const contentType = response.headers.get(\"content-type\");\n let result;\n if (contentType?.includes?.(\"text\")) {\n result = await response.text();\n } else if (contentType?.includes?.(\"json\")) {\n result = await response.json();\n } else {\n result = await response.blob();\n }\n\n Object.defineProperty(response, RESPONSE_DATA_SYMBOL, {\n value: result,\n writable: false,\n enumerable: false,\n configurable: true,\n });\n\n console.log({\n url: response.url,\n status: response.status,\n headers: response.headers,\n body: result,\n });\n\n resolve(true);\n } catch {\n if (response) {\n console.log({ url: response.url, status: response.status, headers: response.headers });\n }\n\n resolve(true);\n }\n })().finally(() => {\n resolve(true);\n });\n });\n };\n}\n","import type { GetOauthTokenFromOtherWindowOptions, GetOauthTokenOptions } from \"../../../types\";\nimport { getQueryValues } from \"../../browser\";\nimport { isArray, isString } from \"../../typings\";\nimport { waitUntil } from \"../../utils\";\n\nlet waiting = false;\n\nexport async function getOauthTokenFromOtherWindow(options: GetOauthTokenFromOtherWindowOptions) {\n await waitUntil(() => waiting);\n const expires: string | null | undefined = localStorage.getItem(options.expiresTokenStorageName);\n if (expires != undefined && !Number.isNaN(+expires) && Date.now() < +expires) return;\n\n waiting = true;\n const url = new URL(\n typeof options.refreshTokenWindowUrl === \"function\"\n ? options.refreshTokenWindowUrl()\n : (options.refreshTokenWindowUrl ?? window.origin),\n );\n url.searchParams.append(options.onlyRefreshTokenWindowQueryName, \"true\");\n\n let windowInstance = window.open(\n url.toString(),\n \"_blank\",\n \"width=800,height=600,left=100,top=100\",\n );\n windowInstance ??= window.open(url.toString(), \"_blank\");\n\n if (windowInstance) {\n const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);\n const windowCloseObserver = setInterval(() => {\n if (windowInstance.closed) {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n }\n }, options.closeObserveInterval ?? 500);\n channel.onmessage = () => {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n };\n setTimeout(() => {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n if (windowInstance && !windowInstance.closed) {\n windowInstance.close();\n }\n }, options.wait ?? 15000);\n } else {\n if (options.onWindowOpenError) options.onWindowOpenError();\n waiting = false;\n\n return;\n }\n\n await waitUntil(() => waiting);\n}\n\nexport function getOauthToken(options: GetOauthTokenOptions) {\n let expires: string | null | undefined = localStorage.getItem(options.expiresTokenStorageName);\n if (!expires || Number.isNaN(+expires) || Date.now() > +expires) expires = null;\n\n const queries = getQueryValues([\n options.expiresTokenQueryName,\n options.onlyRefreshTokenWindowQueryName,\n ]);\n const refreshQuery = queries?.[options.onlyRefreshTokenWindowQueryName];\n const expiresQuery = queries?.[options.expiresTokenQueryName];\n\n /** Is OnlyRefresh window */\n const isRefresh = isString(refreshQuery)\n ? refreshQuery === \"true\"\n : isArray(refreshQuery)\n ? refreshQuery[refreshQuery.length - 1] === \"true\"\n : false;\n /** Expires token */\n const expiresFromQuery = isString(expiresQuery)\n ? expiresQuery\n : isArray(expiresQuery)\n ? expiresQuery[expiresQuery.length - 1]\n : false;\n\n /** Extract expires from query */\n if (!expires && expiresFromQuery) {\n expires = expiresFromQuery;\n if (!expires || Number.isNaN(+expires) || Date.now() > +expires) expires = null;\n }\n\n /** OAuth flow if not expires */\n if (!expires) {\n window.location.replace(\n typeof options.oauthUrl === \"function\" ? options.oauthUrl() : options.oauthUrl,\n );\n\n return null;\n }\n\n localStorage.setItem(options.expiresTokenStorageName, expires);\n\n /** Close if OnlyRefresh window */\n if (isRefresh) {\n const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);\n channel.postMessage(true);\n channel.close();\n window.close();\n }\n\n /** Delete expires query */\n if (expiresFromQuery) {\n const url = new URL(window.location.href);\n url.searchParams.delete(options.expiresTokenQueryName);\n window.location.replace(url.toString());\n\n return null;\n }\n\n return expires;\n}\n","import type { AuthUserRequestOptions, AuthUserUpdateRequestOptions } from \"../../../types\";\nimport { isNull, isUndefined } from \"../../typings\";\n\nexport async function updateAuthUser<User extends Record<string, unknown>>(\n options: AuthUserUpdateRequestOptions<User>,\n) {\n const userInfo = await (options.userRequest ? options.userRequest() : getAuthUser<User>(options));\n if (isNull(userInfo)) {\n return void window.location.replace(options.oauthUrl());\n }\n if (isUndefined(userInfo)) {\n return void window.location.replace(options.errorUrl);\n }\n\n return userInfo;\n}\n\nexport async function getAuthUser<User extends Record<string, unknown>>(\n options: AuthUserRequestOptions,\n): Promise<User | null | undefined> {\n let status = 0;\n try {\n const response = await fetch(options.authUserUrl, {\n method: \"GET\",\n });\n status = response.status;\n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status}`);\n }\n\n const result = (await response.json()) as User;\n\n return result;\n } catch {\n if (status >= 500) return undefined;\n\n return null;\n }\n}\n","import type { Middleware, OauthMiddleWareOptions } from \"../../../types\";\nimport { startWith, waitUntil } from \"../../utils\";\nimport { getOauthTokenFromOtherWindow } from \"../oauth\";\n\nlet isFetchingAccessToken = false;\n\nexport const generateOauthMiddleware =\n (options: OauthMiddleWareOptions): Middleware =>\n async (request) => {\n if (!options.expiresTokenStorageName) {\n throw new Error(\"Auth middleware hasn't required options\");\n }\n\n const isSameOrigin = !startWith(request.path, \"http\");\n\n if (request.token) {\n if (!isSameOrigin)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${request.token}`,\n };\n\n return;\n }\n\n if (isFetchingAccessToken) await waitUntil(() => isFetchingAccessToken);\n\n const expires = localStorage.getItem(options.expiresTokenStorageName);\n let token: string | undefined | null;\n if (!expires || Number.isNaN(+expires) || Date.now() > +expires) {\n isFetchingAccessToken = true;\n await getOauthTokenFromOtherWindow({\n onlyRefreshTokenWindowQueryName: options.onlyRefreshTokenWindowQueryName,\n onWindowOpenError: options.onWindowOpenError,\n refreshTokenWindowUrl: options.refreshTokenWindowUrl,\n wait: options.wait,\n expiresTokenStorageName: options.expiresTokenStorageName,\n closeObserveInterval: options.closeObserveInterval,\n });\n if (options.tokenRequest) {\n token = await options.tokenRequest();\n if (token != undefined && options.tokenStorageName) {\n localStorage.setItem(options.tokenStorageName, token);\n }\n }\n isFetchingAccessToken = false;\n }\n\n if (!isSameOrigin && token)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${token}`,\n };\n };\n","import type { Response as NodeResponse } from \"node-fetch\";\nimport { API_MIDDLEWARES, IS_BROWSER, IS_JEST, POST_API_MIDDLEWARES } from \"../../../constants\";\nimport type {\n ActiveMiddleware,\n ActivePostMiddleware,\n Middleware,\n MiddlewaresOptions,\n PostMiddleware,\n PostMiddlewareOptions,\n RequestInterface,\n} from \"../../../types\";\nimport { generateConsoleMiddleware } from \"./console-middleware\";\nimport { generateConsolePostMiddleware } from \"./console-post-middleware\";\nimport { generateOauthMiddleware } from \"./oauth-middleware\";\n\nexport function generateMiddlewares(\n activeMiddlewares: ActiveMiddleware,\n middlewareOptions: MiddlewaresOptions,\n customMiddlewares: Middleware[],\n) {\n const selectedMiddlewares: Middleware[] = customMiddlewares;\n\n for (const key of activeMiddlewares) {\n switch (key) {\n case API_MIDDLEWARES.Oauth: {\n if (middlewareOptions.oauth && (IS_BROWSER || IS_JEST))\n selectedMiddlewares.push(generateOauthMiddleware(middlewareOptions.oauth));\n continue;\n }\n case API_MIDDLEWARES.Logger: {\n selectedMiddlewares.push(generateConsoleMiddleware(middlewareOptions.logger));\n continue;\n }\n default: {\n continue;\n }\n }\n }\n\n return function executeMiddlewares<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>) {\n return new Promise((resolve) => {\n void (async () => {\n for (const middleware of selectedMiddlewares) {\n // eslint-disable-next-line no-await-in-loop\n await middleware(request);\n }\n\n resolve(1);\n })();\n });\n };\n}\n\nexport function generatePostMiddlewares(\n activePostMiddlewares: ActivePostMiddleware,\n postMiddlewaresOptions: PostMiddlewareOptions,\n customPostMiddlewares: PostMiddleware[],\n) {\n const selectedMiddlewares: PostMiddleware[] = customPostMiddlewares;\n\n for (const key of activePostMiddlewares) {\n switch (key) {\n case POST_API_MIDDLEWARES.Logger: {\n selectedMiddlewares.push(generateConsolePostMiddleware(postMiddlewaresOptions.logger));\n continue;\n }\n\n default: {\n continue;\n }\n }\n }\n\n return function executeMiddlewares(response: Response | NodeResponse | undefined) {\n return new Promise((resolve) => {\n void (async () => {\n for (const middleware of selectedMiddlewares) {\n // eslint-disable-next-line no-await-in-loop\n await middleware(response);\n }\n\n resolve(1);\n })();\n });\n };\n}\n","import type {\n HeadersInit,\n BodyInit as NodeBodyInit,\n RequestInfo as NodeRequestInfo,\n RequestInit as NodeRequestInit,\n Response as NodeResponse,\n} from \"node-fetch\";\nimport { IS_BROWSER } from \"../../constants\";\nimport type {\n ActiveMiddleware,\n ActivePostMiddleware,\n Middleware,\n MiddlewaresOptions,\n PostMiddleware,\n PostMiddlewareOptions,\n RequestInterface,\n} from \"../../types\";\nimport { downloadFile } from \"../browser\";\nimport { isString } from \"../typings\";\nimport { createURLWithParams, wait } from \"../utils\";\nimport { RESPONSE_DATA_SYMBOL } from \"./constants\";\nimport { generateMiddlewares, generatePostMiddlewares } from \"./middlewares\";\n\ntype ResponseErrorOptions = {\n message: string;\n status: number;\n code?: number;\n description?: unknown;\n headers?: Record<string, string>;\n};\n\nexport class ResponseError extends Error {\n status: number;\n\n code?: number;\n\n description?: unknown;\n\n headers?: Record<string, string>;\n\n constructor({ message, status, description, code, headers }: ResponseErrorOptions) {\n super(message);\n this.status = status;\n this.description = description;\n this.code = code;\n this.headers = headers;\n }\n}\n\ntype CreateRequestClientInstance = {\n client:\n | ((url: URL | NodeRequestInfo, init?: NodeRequestInit) => Promise<NodeResponse>)\n | typeof fetch;\n activeMiddlewares?: ActiveMiddleware;\n middlewareOptions?: MiddlewaresOptions;\n customMiddlewares?: Middleware[];\n activePostMiddlewares?: ActivePostMiddleware;\n postMiddlewaresOptions?: PostMiddlewareOptions;\n customPostMiddlewares?: PostMiddleware[];\n};\n\nexport type RequestInstance = {\n <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<Incoming>;\n setOptions: (options: CreateRequestClientInstance) => void;\n};\n\nexport function createRequestClientInstance(options: CreateRequestClientInstance) {\n let executeMiddlewares: <\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ) => Promise<unknown>;\n\n let executePostMiddlewares: (response: Response | NodeResponse | undefined) => Promise<unknown>;\n\n function setMiddlewares({\n activeMiddlewares = [],\n middlewareOptions = {},\n customMiddlewares = [],\n activePostMiddlewares = [],\n postMiddlewaresOptions = {},\n customPostMiddlewares = [],\n }: Omit<CreateRequestClientInstance, \"client\"> = {}) {\n executeMiddlewares = generateMiddlewares(\n activeMiddlewares,\n middlewareOptions,\n customMiddlewares,\n );\n\n executePostMiddlewares = generatePostMiddlewares(\n activePostMiddlewares,\n postMiddlewaresOptions,\n customPostMiddlewares,\n );\n }\n\n setMiddlewares(options);\n\n async function handleRequest<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n responseWithStatus?: boolean,\n ): Promise<{ data: Incoming; status: number; headers: Record<string, string> } | Incoming> {\n if (request.delay) {\n await wait(request.delay);\n }\n if (request.mock) {\n const mock: unknown =\n typeof request.mock === \"function\" ? (request.mock as () => Incoming)() : request.mock;\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(mock as IncomingApi)\n : (mock as Incoming);\n\n return responseWithStatus\n ? { data: transformedResult, status: 200, headers: {} }\n : transformedResult;\n }\n\n await executeMiddlewares(request);\n\n const { method, body, path, params, headers = {} } = request;\n\n const url = createURLWithParams({ baseURL: path, params });\n const [, requestContentType] =\n Object.entries(headers).find(([header]) => header.toLowerCase() === \"content-type\") ?? [];\n\n let preparedBody: OutcomingApi = body as OutcomingApi;\n if (request.transformOutcomingData) {\n preparedBody = request.transformOutcomingData(body as Outcoming);\n }\n\n if (\n requestContentType == undefined &&\n !(preparedBody instanceof FormData) &&\n preparedBody != undefined &&\n !isString(preparedBody)\n ) {\n headers[\"content-type\"] = \"application/json; charset=UTF-8\";\n }\n\n if (\n (requestContentType == undefined || requestContentType.toLowerCase().includes(\"json\")) &&\n preparedBody != undefined &&\n !(preparedBody instanceof FormData) &&\n !isString(preparedBody)\n ) {\n preparedBody = JSON.stringify(preparedBody) as OutcomingApi;\n }\n\n const response: Response | NodeResponse | undefined = await options.client(url, {\n method,\n body: preparedBody as ((BodyInit | null) & NodeBodyInit) | undefined,\n headers: headers as globalThis.HeadersInit & HeadersInit,\n signal: request.signal as (AbortSignal & NodeRequestInit[\"signal\"]) | null | undefined,\n });\n\n await executePostMiddlewares(response);\n\n if (!response) {\n throw new Error(\"hasn't response\");\n }\n\n if (!response.ok) {\n if (response.status === 304) {\n return responseWithStatus\n ? {\n data: undefined as Incoming,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n }\n : (undefined as Incoming);\n }\n\n if (request.defaultResponse) {\n const defaultResponse: unknown =\n typeof request.defaultResponse === \"function\"\n ? (request.defaultResponse as () => Incoming)()\n : request.defaultResponse;\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(defaultResponse as IncomingApi)\n : (defaultResponse as Incoming);\n\n return responseWithStatus\n ? {\n data: transformedResult,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n }\n : transformedResult;\n }\n\n let result;\n try {\n const contentType = response.headers.get(\"content-type\");\n\n if (contentType?.includes?.(\"text\")) {\n result = await response.text();\n } else if (contentType?.includes?.(\"json\")) {\n result = await response.json();\n } else {\n result = await response.blob();\n }\n } catch {\n if (RESPONSE_DATA_SYMBOL in response) result = response[RESPONSE_DATA_SYMBOL];\n }\n\n throw new ResponseError({\n status: response.status,\n message: `HTTP error! Status: ${response.status}`,\n description: result,\n headers: Object.fromEntries(response.headers.entries()),\n });\n }\n\n if (request.downloadFile) {\n const data = await response.blob();\n const mimeType = response.headers.get(\"content-type\");\n const fileName = response.headers.get(\"content-disposition\");\n\n if (!mimeType || !fileName) throw new Error(\"Download Error! Empty info!\");\n\n if (IS_BROWSER)\n downloadFile({\n data: data as Blob,\n fileName,\n mimeType,\n });\n\n return responseWithStatus\n ? {\n data: data as Incoming,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n }\n : (data as Incoming);\n }\n\n const contentType = response.headers.get(\"content-type\");\n let result: Incoming | IncomingApi = undefined as Incoming | IncomingApi;\n\n try {\n if (contentType?.includes?.(\"text\")) {\n result = (await response.text()) as Incoming | IncomingApi;\n } else if (contentType?.includes?.(\"json\")) {\n result = (await response.json()) as Incoming | IncomingApi;\n } else {\n result = (await response.blob()) as Incoming | IncomingApi;\n }\n } catch {}\n\n const transformedResult = request.transformIncomingData\n ? request.transformIncomingData(result as IncomingApi)\n : (result as Incoming);\n\n return responseWithStatus\n ? {\n data: transformedResult,\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n }\n : transformedResult;\n }\n\n async function requestApi<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>): Promise<Incoming> {\n return handleRequest(request, false) as Promise<Incoming>;\n }\n\n async function requestApiWithMeta<\n IncomingApi,\n Incoming = IncomingApi,\n Outcoming = unknown,\n OutcomingApi = Outcoming,\n >(\n request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>,\n ): Promise<{ data: Incoming; status: number; headers: Record<string, string> }> {\n return handleRequest(request, true) as Promise<{\n data: Incoming;\n status: number;\n headers: Record<string, string>;\n }>;\n }\n\n return {\n requestApi,\n requestApiWithMeta,\n setMiddlewares,\n };\n}\n","import { COLOR_FORMATS } from \"../../constants\";\n\nexport function getColorFormat(color: string) {\n if (color.startsWith(\"#\")) {\n return COLOR_FORMATS.Hex;\n }\n if (color.startsWith(\"rgba\")) {\n return COLOR_FORMATS.Rgba;\n }\n if (color.startsWith(\"rgb\")) {\n return COLOR_FORMATS.Rgb;\n }\n if (color.startsWith(\"hsl\")) {\n return COLOR_FORMATS.Hsl;\n }\n}\n","export function transformHEXtoRGB(hex: string) {\n return `rgb(${hex.match(/\\w\\w/g)?.map((x) => +`0x${x}`)})`;\n}\n","export function transformRGBtoRGBA(rgb: string, opacity: number) {\n const code = rgb.match(/\\d+/g);\n code?.push(String(opacity / 100));\n\n return `rgba(${code?.join(\",\")})`;\n}\n","export function transformRGBAtoRGB(rgba: string) {\n const code = rgba.match(/\\d+/g);\n code?.splice(3);\n\n return `rgb(${code?.join(\",\")})`;\n}\n","import { COLOR_FORMATS } from \"../../constants\";\nimport { getColorFormat } from \"./get-color-format\";\nimport { transformHEXtoRGB } from \"./transform-hex-to-rgb\";\nimport { transformRGBtoRGBA } from \"./transform-rgb-to-rgba\";\nimport { transformRGBAtoRGB } from \"./transform-rgba-to-rgb\";\n\nexport function takeOpacityColors(color: string | undefined, opacities: number[]) {\n let rgbColor = color;\n\n if (!rgbColor) return [];\n\n if (getColorFormat(rgbColor) === COLOR_FORMATS.Hex) {\n rgbColor = transformHEXtoRGB(rgbColor);\n } else if (getColorFormat(rgbColor) === COLOR_FORMATS.Rgba) {\n rgbColor = transformRGBAtoRGB(rgbColor);\n }\n\n if (getColorFormat(rgbColor) !== COLOR_FORMATS.Rgb) return [];\n\n return [...opacities.map((opacity) => transformRGBtoRGBA(rgbColor, opacity))];\n}\n","import { COLOR_FORMATS } from \"../../constants\";\nimport type { ColorFormat } from \"../../types\";\nimport { isString } from \"../typings\";\nimport { getColorFormat } from \"./get-color-format\";\n\nexport function transformToColor(\n currentColor: unknown,\n defaultColor: string = \"black\",\n defaultFormat: ColorFormat = COLOR_FORMATS.Hex,\n) {\n if (!isString(currentColor)) return defaultColor;\n\n let correctColor = currentColor;\n\n if (!getColorFormat(correctColor)) {\n switch (defaultFormat) {\n case COLOR_FORMATS.Hex: {\n correctColor = `#${correctColor}`;\n break;\n }\n case COLOR_FORMATS.Rgb: {\n correctColor = `rgb(${correctColor})`;\n break;\n }\n case COLOR_FORMATS.Rgba: {\n correctColor = `rgba(${correctColor})`;\n break;\n }\n case COLOR_FORMATS.Hsl: {\n correctColor = `hsl(${correctColor})`;\n break;\n }\n default: {\n correctColor = `#${correctColor}`;\n break;\n }\n }\n }\n\n return correctColor;\n}\n","export function getRandomColor() {\n const randomColor = Math.floor(Math.random() * 16777215).toString(16);\n\n return `#${randomColor.padStart(6, \"0\")}`;\n}\n","export function type(value: unknown) {\n return value === null\n ? \"Null\"\n : value === undefined\n ? \"Undefined\"\n : Object.prototype.toString.call(value).slice(8, -1);\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { isPrimitive } from \"../typings\";\nimport { type } from \"./type\";\n\nexport function cloneDeep(value: unknown, map?: Map<unknown, unknown>) {\n map ??= new Map();\n\n // this avoids the slower switch with a quick if decision removing some milliseconds in each run.\n if (isPrimitive(value)) {\n return value;\n }\n\n function copy(copiedValue: object) {\n // Check for circular and same references on the object graph and return its corresponding clone.\n const cachedCopy = map!.get(value);\n\n if (cachedCopy) {\n return cachedCopy;\n }\n\n map!.set(value, copiedValue);\n\n for (const key in value as object) {\n if (Object.hasOwn(value as object, key)) {\n (copiedValue as Record<string, unknown>)[key] = cloneDeep(\n (value as Record<string, unknown>)[key],\n map,\n );\n }\n }\n\n return copiedValue;\n }\n\n switch (type(value)) {\n case \"Object\":\n return copy(Object.create(Object.getPrototypeOf(value) as object) as object);\n case \"Array\":\n return copy(Array((value as unknown[]).length));\n case \"Date\":\n return new Date((value as Date).valueOf());\n case \"RegExp\":\n return cloneRegExp(value as RegExp);\n case \"Int8Array\":\n case \"Uint8Array\":\n case \"Uint8ClampedArray\":\n case \"Int16Array\":\n case \"Uint16Array\":\n case \"Int32Array\":\n case \"Uint32Array\":\n case \"Float32Array\":\n case \"Float64Array\":\n case \"BigInt64Array\":\n case \"BigUint64Array\":\n return (value as Int8Array).slice();\n default:\n return value;\n }\n}\n\nfunction cloneRegExp(pattern: RegExp) {\n return new RegExp(\n pattern.source,\n pattern.flags\n ? pattern.flags\n : (pattern.global ? \"g\" : \"\") +\n (pattern.ignoreCase ? \"i\" : \"\") +\n (pattern.multiline ? \"m\" : \"\") +\n (pattern.sticky ? \"y\" : \"\") +\n (pattern.unicode ? \"u\" : \"\") +\n (pattern.dotAll ? \"s\" : \"\"),\n );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport function debounce<TArgs extends any[]>(\n { delay }: { delay: number },\n func: (...args: TArgs) => any,\n) {\n let timer: NodeJS.Timeout | undefined;\n let active = true;\n\n const debounced = (...args: TArgs) => {\n if (active) {\n clearTimeout(timer);\n timer = setTimeout(() => {\n if (active) {\n func(...args);\n }\n timer = undefined;\n }, delay);\n } else {\n func(...args);\n }\n };\n debounced.isPending = () => {\n return timer !== undefined;\n };\n debounced.cancel = () => {\n active = false;\n };\n debounced.flush = (...args: TArgs) => {\n func(...args);\n };\n\n return debounced;\n}\n","export function difference<T extends string | number | boolean | null | undefined>(\n first: T[],\n second: T[],\n): T[] {\n let idx = 0;\n const out: T[] = [];\n const toFilterOut = new Set();\n\n for (let i = 0; i < second.length; i += 1) {\n toFilterOut.add(second[i]);\n }\n\n while (idx < first.length) {\n if (!toFilterOut.has(first[idx])) {\n out[out.length] = first[idx];\n }\n idx += 1;\n }\n\n return out;\n}\n","export function differenceBy<T extends Record<string, unknown>>(\n first: T[],\n second: T[],\n key: keyof T,\n): T[] {\n let idx = 0;\n const out = [];\n const toFilterOut = new Set();\n\n for (let i = 0; i < second.length; i += 1) {\n toFilterOut.add(second[i][key]);\n }\n\n while (idx < first.length) {\n if (!toFilterOut.has(first[idx][key])) {\n out.push(first[idx]);\n }\n idx += 1;\n }\n\n return out;\n}\n","export function differenceWith<T = unknown>(\n first: T[],\n second: T[],\n extractPrimitive: (el: T) => string | number | boolean | undefined | null,\n): T[] {\n let idx = 0;\n const out = [];\n const toFilterOut = new Set();\n\n for (let i = 0; i < second.length; i += 1) {\n toFilterOut.add(extractPrimitive(second[i]));\n }\n\n while (idx < first.length) {\n if (!toFilterOut.has(extractPrimitive(first[idx]))) {\n out.push(first[idx]);\n }\n idx += 1;\n }\n\n return out;\n}\n","import { isObject } from \"../typings\";\n\nexport function isEqual(aVal: unknown, bVal: unknown) {\n if (aVal === bVal) return true;\n\n if (\n aVal == undefined ||\n bVal == undefined ||\n typeof aVal !== \"object\" ||\n typeof bVal !== \"object\"\n ) {\n return aVal === bVal;\n }\n\n if (aVal instanceof Date && bVal instanceof Date) {\n return aVal.getTime() === bVal.getTime();\n }\n\n if (aVal instanceof RegExp && bVal instanceof RegExp) {\n return aVal.toString() === bVal.toString();\n }\n\n if (aVal.constructor !== bVal.constructor) {\n return false;\n }\n\n if (Array.isArray(aVal) && Array.isArray(bVal)) {\n if (aVal.length !== bVal.length) return false;\n for (let i = 0; i < aVal.length; i++) {\n if (!isEqual(aVal[i], bVal[i])) return false;\n }\n\n return true;\n }\n\n if (isObject(aVal) && isObject(bVal)) {\n const keysA = Object.keys(aVal);\n const keysB = Object.keys(bVal);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!isEqual(aVal[key], bVal[key])) return false;\n }\n }\n\n return true;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport function throttle<TArgs extends any[]>(\n { interval }: { interval: number },\n func: (...args: TArgs) => any,\n) {\n let ready = true;\n let timer: NodeJS.Timeout | undefined;\n\n const throttled = (...args: TArgs) => {\n if (!ready) return;\n func(...args);\n ready = false;\n timer = setTimeout(() => {\n ready = true;\n timer = undefined;\n }, interval);\n };\n\n throttled.isThrottled = () => {\n return timer !== undefined;\n };\n\n return throttled;\n}\n"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ import { getOauthTokenFromOtherWindow } from '../oauth/token.js';
11
11
 
12
12
  let isFetchingAccessToken = false;
13
13
  const generateOauthMiddleware = (options) => async (request) => {
14
- if (!options.oauthUrl || !options.expiresTokenStorageName || !options.errorUrl) {
14
+ if (!options.expiresTokenStorageName) {
15
15
  throw new Error("Auth middleware hasn't required options");
16
16
  }
17
17
  const isSameOrigin = !startWith(request.path, "http");
@@ -29,7 +29,14 @@ const generateOauthMiddleware = (options) => async (request) => {
29
29
  let token;
30
30
  if (!expires || Number.isNaN(+expires) || Date.now() > +expires) {
31
31
  isFetchingAccessToken = true;
32
- await getOauthTokenFromOtherWindow(options);
32
+ await getOauthTokenFromOtherWindow({
33
+ onlyRefreshTokenWindowQueryName: options.onlyRefreshTokenWindowQueryName,
34
+ onWindowOpenError: options.onWindowOpenError,
35
+ refreshTokenWindowUrl: options.refreshTokenWindowUrl,
36
+ wait: options.wait,
37
+ expiresTokenStorageName: options.expiresTokenStorageName,
38
+ closeObserveInterval: options.closeObserveInterval,
39
+ });
33
40
  if (options.tokenRequest) {
34
41
  token = await options.tokenRequest();
35
42
  if (token != undefined && options.tokenStorageName) {
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-middleware.js","sources":["../../../../../src/lib/api/middlewares/oauth-middleware.ts"],"sourcesContent":["import type { Middleware, OauthMiddleWareOptions } from \"../../../types\";\nimport { startWith, waitUntil } from \"../../utils\";\nimport { getOauthTokenFromOtherWindow } from \"../oauth\";\n\nlet isFetchingAccessToken = false;\n\nexport const generateOauthMiddleware =\n (options: OauthMiddleWareOptions): Middleware =>\n async (request) => {\n if (!options.oauthUrl || !options.expiresTokenStorageName || !options.errorUrl) {\n throw new Error(\"Auth middleware hasn't required options\");\n }\n\n const isSameOrigin = !startWith(request.path, \"http\");\n\n if (request.token) {\n if (!isSameOrigin)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${request.token}`,\n };\n\n return;\n }\n\n if (isFetchingAccessToken) await waitUntil(() => isFetchingAccessToken);\n\n const expires = localStorage.getItem(options.expiresTokenStorageName);\n let token: string | undefined | null;\n if (!expires || Number.isNaN(+expires) || Date.now() > +expires) {\n isFetchingAccessToken = true;\n await getOauthTokenFromOtherWindow(options);\n if (options.tokenRequest) {\n token = await options.tokenRequest();\n if (token != undefined && options.tokenStorageName) {\n localStorage.setItem(options.tokenStorageName, token);\n }\n }\n isFetchingAccessToken = false;\n }\n\n if (!isSameOrigin && token)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${token}`,\n };\n };\n"],"names":[],"mappings":";;;;;;;;;;;AAIA,IAAI,qBAAqB,GAAG,KAAK;AAE1B,MAAM,uBAAuB,GAClC,CAAC,OAA+B,KAChC,OAAO,OAAO,KAAI;AAChB,IAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,uBAAuB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AAC9E,QAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;;IAG5D,MAAM,YAAY,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AAErD,IAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,QAAA,IAAI,CAAC,YAAY;YACf,OAAO,CAAC,OAAO,GAAG;gBAChB,GAAG,OAAO,CAAC,OAAO;AAClB,gBAAA,aAAa,EAAE,CAAA,OAAA,EAAU,OAAO,CAAC,KAAK,CAAE,CAAA;aACzC;QAEH;;AAGF,IAAA,IAAI,qBAAqB;AAAE,QAAA,MAAM,SAAS,CAAC,MAAM,qBAAqB,CAAC;IAEvE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC;AACrE,IAAA,IAAI,KAAgC;AACpC,IAAA,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE;QAC/D,qBAAqB,GAAG,IAAI;AAC5B,QAAA,MAAM,4BAA4B,CAAC,OAAO,CAAC;AAC3C,QAAA,IAAI,OAAO,CAAC,YAAY,EAAE;AACxB,YAAA,KAAK,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE;YACpC,IAAI,KAAK,IAAI,SAAS,IAAI,OAAO,CAAC,gBAAgB,EAAE;gBAClD,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC;;;QAGzD,qBAAqB,GAAG,KAAK;;IAG/B,IAAI,CAAC,YAAY,IAAI,KAAK;QACxB,OAAO,CAAC,OAAO,GAAG;YAChB,GAAG,OAAO,CAAC,OAAO;YAClB,aAAa,EAAE,CAAU,OAAA,EAAA,KAAK,CAAE,CAAA;SACjC;AACL;;;;"}
1
+ {"version":3,"file":"oauth-middleware.js","sources":["../../../../../src/lib/api/middlewares/oauth-middleware.ts"],"sourcesContent":["import type { Middleware, OauthMiddleWareOptions } from \"../../../types\";\nimport { startWith, waitUntil } from \"../../utils\";\nimport { getOauthTokenFromOtherWindow } from \"../oauth\";\n\nlet isFetchingAccessToken = false;\n\nexport const generateOauthMiddleware =\n (options: OauthMiddleWareOptions): Middleware =>\n async (request) => {\n if (!options.expiresTokenStorageName) {\n throw new Error(\"Auth middleware hasn't required options\");\n }\n\n const isSameOrigin = !startWith(request.path, \"http\");\n\n if (request.token) {\n if (!isSameOrigin)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${request.token}`,\n };\n\n return;\n }\n\n if (isFetchingAccessToken) await waitUntil(() => isFetchingAccessToken);\n\n const expires = localStorage.getItem(options.expiresTokenStorageName);\n let token: string | undefined | null;\n if (!expires || Number.isNaN(+expires) || Date.now() > +expires) {\n isFetchingAccessToken = true;\n await getOauthTokenFromOtherWindow({\n onlyRefreshTokenWindowQueryName: options.onlyRefreshTokenWindowQueryName,\n onWindowOpenError: options.onWindowOpenError,\n refreshTokenWindowUrl: options.refreshTokenWindowUrl,\n wait: options.wait,\n expiresTokenStorageName: options.expiresTokenStorageName,\n closeObserveInterval: options.closeObserveInterval,\n });\n if (options.tokenRequest) {\n token = await options.tokenRequest();\n if (token != undefined && options.tokenStorageName) {\n localStorage.setItem(options.tokenStorageName, token);\n }\n }\n isFetchingAccessToken = false;\n }\n\n if (!isSameOrigin && token)\n request.headers = {\n ...request.headers,\n Authorization: `Bearer ${token}`,\n };\n };\n"],"names":[],"mappings":";;;;;;;;;;;AAIA,IAAI,qBAAqB,GAAG,KAAK;AAE1B,MAAM,uBAAuB,GAClC,CAAC,OAA+B,KAChC,OAAO,OAAO,KAAI;AAChB,IAAA,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE;AACpC,QAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;;IAG5D,MAAM,YAAY,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;AAErD,IAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,QAAA,IAAI,CAAC,YAAY;YACf,OAAO,CAAC,OAAO,GAAG;gBAChB,GAAG,OAAO,CAAC,OAAO;AAClB,gBAAA,aAAa,EAAE,CAAA,OAAA,EAAU,OAAO,CAAC,KAAK,CAAE,CAAA;aACzC;QAEH;;AAGF,IAAA,IAAI,qBAAqB;AAAE,QAAA,MAAM,SAAS,CAAC,MAAM,qBAAqB,CAAC;IAEvE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC;AACrE,IAAA,IAAI,KAAgC;AACpC,IAAA,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE;QAC/D,qBAAqB,GAAG,IAAI;AAC5B,QAAA,MAAM,4BAA4B,CAAC;YACjC,+BAA+B,EAAE,OAAO,CAAC,+BAA+B;YACxE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;YAC5C,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;YACpD,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;YACxD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;AACnD,SAAA,CAAC;AACF,QAAA,IAAI,OAAO,CAAC,YAAY,EAAE;AACxB,YAAA,KAAK,GAAG,MAAM,OAAO,CAAC,YAAY,EAAE;YACpC,IAAI,KAAK,IAAI,SAAS,IAAI,OAAO,CAAC,gBAAgB,EAAE;gBAClD,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC;;;QAGzD,qBAAqB,GAAG,KAAK;;IAG/B,IAAI,CAAC,YAAY,IAAI,KAAK;QACxB,OAAO,CAAC,OAAO,GAAG;YAChB,GAAG,OAAO,CAAC,OAAO;YAClB,aAAa,EAAE,CAAU,OAAA,EAAA,KAAK,CAAE,CAAA;SACjC;AACL;;;;"}
@@ -10,35 +10,54 @@ import 'lodash/get';
10
10
  import 'lodash/set';
11
11
  import { getQueryValues } from '../../browser/get-query-values.js';
12
12
 
13
+ let waiting = false;
13
14
  async function getOauthTokenFromOtherWindow(options) {
14
- let waiting = true;
15
+ await waitUntil(() => waiting);
16
+ const expires = localStorage.getItem(options.expiresTokenStorageName);
17
+ if (expires != undefined && !Number.isNaN(+expires) && Date.now() < +expires)
18
+ return;
19
+ waiting = true;
15
20
  const url = new URL(typeof options.refreshTokenWindowUrl === "function"
16
21
  ? options.refreshTokenWindowUrl()
17
22
  : (options.refreshTokenWindowUrl ?? window.origin));
18
23
  url.searchParams.append(options.onlyRefreshTokenWindowQueryName, "true");
19
24
  let windowInstance = window.open(url.toString(), "_blank", "width=800,height=600,left=100,top=100");
20
- windowInstance ??= window.open(url.toString());
21
- if (!windowInstance) {
25
+ windowInstance ??= window.open(url.toString(), "_blank");
26
+ if (windowInstance) {
27
+ const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);
28
+ const windowCloseObserver = setInterval(() => {
29
+ if (windowInstance.closed) {
30
+ if (waiting) {
31
+ waiting = false;
32
+ channel.close();
33
+ clearInterval(windowCloseObserver);
34
+ }
35
+ }
36
+ }, options.closeObserveInterval ?? 500);
37
+ channel.onmessage = () => {
38
+ if (waiting) {
39
+ waiting = false;
40
+ channel.close();
41
+ clearInterval(windowCloseObserver);
42
+ }
43
+ };
44
+ setTimeout(() => {
45
+ if (waiting) {
46
+ waiting = false;
47
+ channel.close();
48
+ clearInterval(windowCloseObserver);
49
+ }
50
+ if (windowInstance && !windowInstance.closed) {
51
+ windowInstance.close();
52
+ }
53
+ }, options.wait ?? 15000);
54
+ }
55
+ else {
22
56
  if (options.onWindowOpenError)
23
57
  options.onWindowOpenError();
58
+ waiting = false;
24
59
  return;
25
60
  }
26
- const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);
27
- channel.onmessage = () => {
28
- if (waiting) {
29
- waiting = false;
30
- channel.close();
31
- }
32
- };
33
- setTimeout(() => {
34
- if (waiting) {
35
- waiting = false;
36
- channel.close();
37
- }
38
- if (windowInstance && !windowInstance.closed) {
39
- windowInstance.close();
40
- }
41
- }, 15000);
42
61
  await waitUntil(() => waiting);
43
62
  }
44
63
  function getOauthToken(options) {
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sources":["../../../../../src/lib/api/oauth/token.ts"],"sourcesContent":["import type { AuthTokenNoRefreshRequestOptions, OauthMiddleWareOptions } from \"../../../types\";\nimport { getQueryValues } from \"../../browser\";\nimport { isArray, isString } from \"../../typings\";\nimport { waitUntil } from \"../../utils\";\n\nexport async function getOauthTokenFromOtherWindow(options: AuthTokenNoRefreshRequestOptions) {\n let waiting = true;\n const url = new URL(\n typeof options.refreshTokenWindowUrl === \"function\"\n ? options.refreshTokenWindowUrl()\n : (options.refreshTokenWindowUrl ?? window.origin),\n );\n url.searchParams.append(options.onlyRefreshTokenWindowQueryName, \"true\");\n let windowInstance = window.open(\n url.toString(),\n \"_blank\",\n \"width=800,height=600,left=100,top=100\",\n );\n\n windowInstance ??= window.open(url.toString());\n\n if (!windowInstance) {\n if (options.onWindowOpenError) options.onWindowOpenError();\n\n return;\n }\n\n const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);\n channel.onmessage = () => {\n if (waiting) {\n waiting = false;\n channel.close();\n }\n };\n setTimeout(() => {\n if (waiting) {\n waiting = false;\n channel.close();\n }\n if (windowInstance && !windowInstance.closed) {\n windowInstance.close();\n }\n }, 15000);\n\n await waitUntil(() => waiting);\n}\n\nexport function getOauthToken(options: OauthMiddleWareOptions) {\n let expires: string | null | undefined = localStorage.getItem(options.expiresTokenStorageName);\n if (!expires || Number.isNaN(+expires) || Date.now() > +expires) expires = null;\n\n const queries = getQueryValues([\n options.expiresTokenQueryName,\n options.onlyRefreshTokenWindowQueryName,\n ]);\n const refreshQuery = queries?.[options.onlyRefreshTokenWindowQueryName];\n const expiresQuery = queries?.[options.expiresTokenQueryName];\n\n /** Is OnlyRefresh window */\n const isRefresh = isString(refreshQuery)\n ? refreshQuery === \"true\"\n : isArray(refreshQuery)\n ? refreshQuery[refreshQuery.length - 1] === \"true\"\n : false;\n /** Expires token */\n const expiresFromQuery = isString(expiresQuery)\n ? expiresQuery\n : isArray(expiresQuery)\n ? expiresQuery[expiresQuery.length - 1]\n : false;\n\n /** Extract expires from query */\n if (!expires && expiresFromQuery) {\n expires = expiresFromQuery;\n if (!expires || Number.isNaN(+expires) || Date.now() > +expires) expires = null;\n }\n\n /** OAuth flow if not expires */\n if (!expires) {\n window.location.replace(\n typeof options.oauthUrl === \"function\" ? options.oauthUrl() : options.oauthUrl,\n );\n\n return null;\n }\n\n localStorage.setItem(options.expiresTokenStorageName, expires);\n\n /** Close if OnlyRefresh window */\n if (isRefresh) {\n const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);\n channel.postMessage(true);\n channel.close();\n window.close();\n }\n\n /** Delete expires query */\n if (expiresFromQuery) {\n const url = new URL(window.location.href);\n url.searchParams.delete(options.expiresTokenQueryName);\n window.location.replace(url.toString());\n\n return null;\n }\n\n return expires;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token.js","sources":["../../../../../src/lib/api/oauth/token.ts"],"sourcesContent":["import type { GetOauthTokenFromOtherWindowOptions, GetOauthTokenOptions } from \"../../../types\";\nimport { getQueryValues } from \"../../browser\";\nimport { isArray, isString } from \"../../typings\";\nimport { waitUntil } from \"../../utils\";\n\nlet waiting = false;\n\nexport async function getOauthTokenFromOtherWindow(options: GetOauthTokenFromOtherWindowOptions) {\n await waitUntil(() => waiting);\n const expires: string | null | undefined = localStorage.getItem(options.expiresTokenStorageName);\n if (expires != undefined && !Number.isNaN(+expires) && Date.now() < +expires) return;\n\n waiting = true;\n const url = new URL(\n typeof options.refreshTokenWindowUrl === \"function\"\n ? options.refreshTokenWindowUrl()\n : (options.refreshTokenWindowUrl ?? window.origin),\n );\n url.searchParams.append(options.onlyRefreshTokenWindowQueryName, \"true\");\n\n let windowInstance = window.open(\n url.toString(),\n \"_blank\",\n \"width=800,height=600,left=100,top=100\",\n );\n windowInstance ??= window.open(url.toString(), \"_blank\");\n\n if (windowInstance) {\n const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);\n const windowCloseObserver = setInterval(() => {\n if (windowInstance.closed) {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n }\n }, options.closeObserveInterval ?? 500);\n channel.onmessage = () => {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n };\n setTimeout(() => {\n if (waiting) {\n waiting = false;\n channel.close();\n clearInterval(windowCloseObserver);\n }\n if (windowInstance && !windowInstance.closed) {\n windowInstance.close();\n }\n }, options.wait ?? 15000);\n } else {\n if (options.onWindowOpenError) options.onWindowOpenError();\n waiting = false;\n\n return;\n }\n\n await waitUntil(() => waiting);\n}\n\nexport function getOauthToken(options: GetOauthTokenOptions) {\n let expires: string | null | undefined = localStorage.getItem(options.expiresTokenStorageName);\n if (!expires || Number.isNaN(+expires) || Date.now() > +expires) expires = null;\n\n const queries = getQueryValues([\n options.expiresTokenQueryName,\n options.onlyRefreshTokenWindowQueryName,\n ]);\n const refreshQuery = queries?.[options.onlyRefreshTokenWindowQueryName];\n const expiresQuery = queries?.[options.expiresTokenQueryName];\n\n /** Is OnlyRefresh window */\n const isRefresh = isString(refreshQuery)\n ? refreshQuery === \"true\"\n : isArray(refreshQuery)\n ? refreshQuery[refreshQuery.length - 1] === \"true\"\n : false;\n /** Expires token */\n const expiresFromQuery = isString(expiresQuery)\n ? expiresQuery\n : isArray(expiresQuery)\n ? expiresQuery[expiresQuery.length - 1]\n : false;\n\n /** Extract expires from query */\n if (!expires && expiresFromQuery) {\n expires = expiresFromQuery;\n if (!expires || Number.isNaN(+expires) || Date.now() > +expires) expires = null;\n }\n\n /** OAuth flow if not expires */\n if (!expires) {\n window.location.replace(\n typeof options.oauthUrl === \"function\" ? options.oauthUrl() : options.oauthUrl,\n );\n\n return null;\n }\n\n localStorage.setItem(options.expiresTokenStorageName, expires);\n\n /** Close if OnlyRefresh window */\n if (isRefresh) {\n const channel = new BroadcastChannel(options.onlyRefreshTokenWindowQueryName);\n channel.postMessage(true);\n channel.close();\n window.close();\n }\n\n /** Delete expires query */\n if (expiresFromQuery) {\n const url = new URL(window.location.href);\n url.searchParams.delete(options.expiresTokenQueryName);\n window.location.replace(url.toString());\n\n return null;\n }\n\n return expires;\n}\n"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -105,29 +105,29 @@ type AuthUserUpdateRequestOptions<User extends Record<string, unknown>> = AuthUs
105
105
  type AuthUserRequestOptions = {
106
106
  authUserUrl: string;
107
107
  };
108
- type AuthTokenRequestOptions = {
109
- authTokenUrl: string;
110
- expiresTokenStorageName: string;
111
- tokenStorageName: string;
112
- pathToToken: string;
113
- pathToTokenExpires: string;
114
- };
115
- type AuthTokenNoRefreshRequestOptions = {
116
- refreshTokenWindowUrl?: (() => string) | string;
108
+ type OauthMiddleWareOptions = {
117
109
  expiresTokenStorageName: string;
118
110
  onlyRefreshTokenWindowQueryName: string;
111
+ refreshTokenWindowUrl?: (() => string) | string;
119
112
  onWindowOpenError?: () => void;
113
+ tokenStorageName?: string;
114
+ tokenRequest?: () => Promise<string | null | undefined>;
115
+ wait?: number;
116
+ closeObserveInterval?: number;
120
117
  };
121
- type OauthMiddleWareOptions = {
122
- errorUrl: (() => string) | string;
118
+ type GetOauthTokenOptions = {
123
119
  oauthUrl: (() => string) | string;
124
- refreshTokenWindowUrl?: (() => string) | string;
125
- tokenStorageName?: string;
126
120
  expiresTokenStorageName: string;
127
121
  expiresTokenQueryName: string;
128
122
  onlyRefreshTokenWindowQueryName: string;
129
- tokenRequest?: () => Promise<string | null | undefined>;
123
+ };
124
+ type GetOauthTokenFromOtherWindowOptions = {
125
+ refreshTokenWindowUrl?: (() => string) | string;
126
+ onlyRefreshTokenWindowQueryName: string;
127
+ expiresTokenStorageName: string;
130
128
  onWindowOpenError?: () => void;
129
+ wait?: number;
130
+ closeObserveInterval?: number;
131
131
  };
132
132
 
133
133
  type DateType = ValueOf<typeof DATE_TYPES>;
@@ -178,8 +178,8 @@ declare function createRequestClientInstance(options: CreateRequestClientInstanc
178
178
  setMiddlewares: ({ activeMiddlewares, middlewareOptions, customMiddlewares, activePostMiddlewares, postMiddlewaresOptions, customPostMiddlewares, }?: Omit<CreateRequestClientInstance, "client">) => void;
179
179
  };
180
180
 
181
- declare function getOauthTokenFromOtherWindow(options: AuthTokenNoRefreshRequestOptions): Promise<void>;
182
- declare function getOauthToken(options: OauthMiddleWareOptions): string | null;
181
+ declare function getOauthTokenFromOtherWindow(options: GetOauthTokenFromOtherWindowOptions): Promise<void>;
182
+ declare function getOauthToken(options: GetOauthTokenOptions): string | null;
183
183
 
184
184
  declare function updateAuthUser<User extends Record<string, unknown>>(options: AuthUserUpdateRequestOptions<User>): Promise<User | undefined>;
185
185
  declare function getAuthUser<User extends Record<string, unknown>>(options: AuthUserRequestOptions): Promise<User | null | undefined>;
@@ -399,4 +399,4 @@ declare function throttle<TArgs extends any[]>({ interval }: {
399
399
  declare function type(value: unknown): string;
400
400
 
401
401
  export { API_MIDDLEWARES, COLOR_FORMATS, DATE_TYPES, FIELD_TYPES, IS_BROWSER, IS_BUN, IS_DENO, IS_JEST, IS_NODE, IS_WEB_WORKER, POST_API_MIDDLEWARES, ResponseError, arrayToMapByKey, buildQueryString, checkType, cloneDeep, copyToClipboard, createGlobalId, createLocalIdGenerator, createRequestClientInstance, createURLWithParams, dateDifference, dateFormat, debounce, declination, difference, differenceBy, differenceWith, downloadFile, downloadJson, execAnimation, extractQueries, fieldViewFormat, getAuthUser, getByPath, getCallerFunctionName, getColorFormat, getDateByRules, getFileNameFromHeader, getOauthToken, getOauthTokenFromOtherWindow, getQueryValues, getRandomColor, getToday, getTomorrow, getVisiblePosition, getYesterday, isArray, isBoolean, isDate, isEqual, isId, isNull, isNullable, isNumber, isObject, isPrimitive, isString, isToday, isTomorrow, isUndefined, isYesterday, joinPaths, jsonParse, limitStreamOfRequests, randomNumber, randomString, readFile, setByPath, speedTest, startWith, syncObjectValues, takeOpacityColors, throttle, transformHEXtoRGB, transformRGBAtoRGB, transformRGBtoRGBA, transformToColor, transformToDayjs, transformToNumber, translit, trimUrl, type, updateAuthUser, wait, waitUntil };
402
- export type { ActiveMiddleware, ActivePostMiddleware, AuthTokenNoRefreshRequestOptions, AuthTokenRequestOptions, AuthUserRequestOptions, AuthUserUpdateRequestOptions, ColorFormat, DateGetterRule, DateType, DayJS, FieldType, IsEqual, LoggerMiddlewareOptions, LoggerPostMiddlewareOptions, Maybe, Middleware, MiddlewareType, MiddlewaresOptions, OauthMiddleWareOptions, ParamValueType, ParamsType, PositionPlacements, PostMiddleware, PostMiddlewareOptions, PostMiddlewareType, RequestInstance, RequestInterface, RequestMethod, RequestTransformIncoming, RequestTransformOutcoming, ValueOf, VisiblePosition };
402
+ export type { ActiveMiddleware, ActivePostMiddleware, AuthUserRequestOptions, AuthUserUpdateRequestOptions, ColorFormat, DateGetterRule, DateType, DayJS, FieldType, GetOauthTokenFromOtherWindowOptions, GetOauthTokenOptions, IsEqual, LoggerMiddlewareOptions, LoggerPostMiddlewareOptions, Maybe, Middleware, MiddlewareType, MiddlewaresOptions, OauthMiddleWareOptions, ParamValueType, ParamsType, PositionPlacements, PostMiddleware, PostMiddlewareOptions, PostMiddlewareType, RequestInstance, RequestInterface, RequestMethod, RequestTransformIncoming, RequestTransformOutcoming, ValueOf, VisiblePosition };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@krainovsd/js-helpers",
3
- "version": "0.15.0",
3
+ "version": "0.15.2",
4
4
  "description": "Krainov helpers",
5
5
  "type": "module",
6
6
  "author": "KrainovSD <denislosev48@gmail.com>",