@krainovsd/js-helpers 0.16.3 → 0.16.5

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.
@@ -10,7 +10,7 @@ function loggerAfterHandler(options = {}) {
10
10
  (options.filterStatus && !options.filterStatus(response.status)) ||
11
11
  (options.filterUrl && !options.filterUrl(response.url)) ||
12
12
  (options.filterHeaders && !options.filterHeaders(response.headers))) {
13
- resolve(true);
13
+ resolve();
14
14
  return;
15
15
  }
16
16
  const contentType = response.headers.get("content-type");
@@ -36,16 +36,16 @@ function loggerAfterHandler(options = {}) {
36
36
  headers: response.headers,
37
37
  body: result,
38
38
  });
39
- resolve(true);
39
+ resolve();
40
40
  }
41
41
  catch {
42
42
  if (response) {
43
43
  console.log({ url: response.url, status: response.status, headers: response.headers });
44
44
  }
45
- resolve(true);
45
+ resolve();
46
46
  }
47
47
  })().finally(() => {
48
- resolve(true);
48
+ resolve();
49
49
  });
50
50
  });
51
51
  };
@@ -1 +1 @@
1
- {"version":3,"file":"logger-after-handler.js","sources":["../../../../src/api/after/logger-after-handler.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport type { Headers as NodeHeaders, Response as NodeResponse } from \"node-fetch\";\nimport { RESPONSE_DATA_SYMBOL } from \"../api.constants\";\nimport type { AfterHandler } from \"../api.types\";\n\nexport type LoggerAfterHandlerOptions = {\n filter?: (response: Response | NodeResponse | undefined) => boolean;\n filterStatus?: (status: number) => boolean;\n filterUrl?: (url: string) => boolean;\n filterHeaders?: (headers: Headers | NodeHeaders) => boolean;\n};\n\nexport function loggerAfterHandler(options: LoggerAfterHandlerOptions = {}): AfterHandler {\n return (request, 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"],"names":[],"mappings":";;AAYgB,SAAA,kBAAkB,CAAC,OAAA,GAAqC,EAAE,EAAA;AACxE,IAAA,OAAO,CAAC,OAAO,EAAE,QAAQ,KAAI;AAC3B,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,KAAK,CAAC,eAAe,MAAM,GAAA;AACzB,gBAAA,IAAI;AACF,oBAAA,IACE,CAAC,QAAQ;yBACR,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC7C,yBAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChE,yBAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvD,yBAAC,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EACnE;wBACA,OAAO,CAAC,IAAI,CAAC;wBAEb;;oBAGF,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACxD,oBAAA,IAAI,MAAM;oBACV,IAAI,WAAW,EAAE,QAAQ,GAAG,MAAM,CAAC,EAAE;AACnC,wBAAA,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;yBACzB,IAAI,WAAW,EAAE,QAAQ,GAAG,MAAM,CAAC,EAAE;AAC1C,wBAAA,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;yBACzB;AACL,wBAAA,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;AAGhC,oBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,oBAAoB,EAAE;AACpD,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,QAAQ,EAAE,KAAK;AACf,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,YAAY,EAAE,IAAI;AACnB,qBAAA,CAAC;oBAEF,OAAO,CAAC,GAAG,CAAC;wBACV,GAAG,EAAE,QAAQ,CAAC,GAAG;wBACjB,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;AACzB,wBAAA,IAAI,EAAE,MAAM;AACb,qBAAA,CAAC;oBAEF,OAAO,CAAC,IAAI,CAAC;;AACb,gBAAA,MAAM;oBACN,IAAI,QAAQ,EAAE;wBACZ,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;;oBAGxF,OAAO,CAAC,IAAI,CAAC;;AAEjB,aAAC,GAAG,CAAC,OAAO,CAAC,MAAK;gBAChB,OAAO,CAAC,IAAI,CAAC;AACf,aAAC,CAAC;AACJ,SAAC,CAAC;AACJ,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"logger-after-handler.js","sources":["../../../../src/api/after/logger-after-handler.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport type { Headers as NodeHeaders, Response as NodeResponse } from \"node-fetch\";\nimport { RESPONSE_DATA_SYMBOL } from \"../api.constants\";\nimport type { AfterHandler } from \"../api.types\";\n\nexport type LoggerAfterHandlerOptions = {\n filter?: (response: Response | NodeResponse | undefined) => boolean;\n filterStatus?: (status: number) => boolean;\n filterUrl?: (url: string) => boolean;\n filterHeaders?: (headers: Headers | NodeHeaders) => boolean;\n};\n\nexport function loggerAfterHandler(options: LoggerAfterHandlerOptions = {}): AfterHandler {\n return (request, 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();\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();\n } catch {\n if (response) {\n console.log({ url: response.url, status: response.status, headers: response.headers });\n }\n\n resolve();\n }\n })().finally(() => {\n resolve();\n });\n });\n };\n}\n"],"names":[],"mappings":";;AAYgB,SAAA,kBAAkB,CAAC,OAAA,GAAqC,EAAE,EAAA;AACxE,IAAA,OAAO,CAAC,OAAO,EAAE,QAAQ,KAAI;AAC3B,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,KAAK,CAAC,eAAe,MAAM,GAAA;AACzB,gBAAA,IAAI;AACF,oBAAA,IACE,CAAC,QAAQ;yBACR,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC7C,yBAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChE,yBAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvD,yBAAC,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EACnE;AACA,wBAAA,OAAO,EAAE;wBAET;;oBAGF,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AACxD,oBAAA,IAAI,MAAM;oBACV,IAAI,WAAW,EAAE,QAAQ,GAAG,MAAM,CAAC,EAAE;AACnC,wBAAA,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;yBACzB,IAAI,WAAW,EAAE,QAAQ,GAAG,MAAM,CAAC,EAAE;AAC1C,wBAAA,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;yBACzB;AACL,wBAAA,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;;AAGhC,oBAAA,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,oBAAoB,EAAE;AACpD,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,QAAQ,EAAE,KAAK;AACf,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,YAAY,EAAE,IAAI;AACnB,qBAAA,CAAC;oBAEF,OAAO,CAAC,GAAG,CAAC;wBACV,GAAG,EAAE,QAAQ,CAAC,GAAG;wBACjB,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;AACzB,wBAAA,IAAI,EAAE,MAAM;AACb,qBAAA,CAAC;AAEF,oBAAA,OAAO,EAAE;;AACT,gBAAA,MAAM;oBACN,IAAI,QAAQ,EAAE;wBACZ,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;;AAGxF,oBAAA,OAAO,EAAE;;AAEb,aAAC,GAAG,CAAC,OAAO,CAAC,MAAK;AAChB,gBAAA,OAAO,EAAE;AACX,aAAC,CAAC;AACJ,SAAC,CAAC;AACJ,KAAC;AACH;;;;"}
@@ -9,8 +9,8 @@ import '../lib/date/is-tomorrow.js';
9
9
  import '../lib/date/is-yesterday.js';
10
10
  import { wait } from '../lib/utils/wait.js';
11
11
  import { createURLWithQueries } from '../lib/utils/create-url-with-queries.js';
12
- import 'lodash/get';
13
- import 'lodash/set';
12
+ import '../lib/lodash/get-by-path.js';
13
+ import '../lib/lodash/set-by-path.js';
14
14
  import { REQUEST_ERROR, RESPONSE_DATA_SYMBOL } from './api.constants.js';
15
15
  import { refetchAfterOauth } from './oauth.js';
16
16
 
@@ -7,12 +7,12 @@ function loggerBeforeHandler(options = {}) {
7
7
  (options.filterMethod && !options.filterMethod(request.method)) ||
8
8
  (options.filterParams && !options.filterParams(request.queries)) ||
9
9
  (options.filterPath && !options.filterPath(request.path))) {
10
- resolve(true);
10
+ resolve();
11
11
  return;
12
12
  }
13
13
  // eslint-disable-next-line no-console
14
14
  console.log(request);
15
- resolve(true);
15
+ resolve();
16
16
  });
17
17
  };
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logger-before-handler.js","sources":["../../../../src/api/before/logger-before-handler.ts"],"sourcesContent":["import type {\n BeforeHandler,\n RequestHeader,\n RequestInterface,\n RequestMethod,\n RequestQuery,\n} from \"../api.types\";\n\nexport type LoggerBeforeHandlerOptions = {\n filter?: (request: RequestInterface<unknown, unknown, unknown, unknown>) => boolean;\n filterPath?: (path: string) => boolean;\n filterMethod?: (method: RequestMethod) => boolean;\n filterParams?: (params?: RequestQuery) => boolean;\n filterHeaders?: (headers?: RequestHeader) => boolean;\n};\n\nexport function loggerBeforeHandler(options: LoggerBeforeHandlerOptions = {}): BeforeHandler {\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.queries)) ||\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"],"names":[],"mappings":"AAgBgB,SAAA,mBAAmB,CAAC,OAAA,GAAsC,EAAE,EAAA;IAC1E,OAAO,CAAC,OAAO,KAAI;AACjB,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,IACE,CAAC,OAAO,CAAC,MAAM;AACb,gBAAA,CAAC,OAAO,CAAC,MAAM,CAAC,OAA+D,CAAC;AAClF,iBAAC,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAClE,iBAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/D,iBAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAChE,iBAAC,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EACzD;gBACA,OAAO,CAAC,IAAI,CAAC;gBAEb;;;AAGF,YAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC;AACf,SAAC,CAAC;AACJ,KAAC;AACH;;;;"}
1
+ {"version":3,"file":"logger-before-handler.js","sources":["../../../../src/api/before/logger-before-handler.ts"],"sourcesContent":["import type {\n BeforeHandler,\n RequestHeader,\n RequestInterface,\n RequestMethod,\n RequestQuery,\n} from \"../api.types\";\n\nexport type LoggerBeforeHandlerOptions = {\n filter?: (request: RequestInterface<unknown, unknown, unknown, unknown>) => boolean;\n filterPath?: (path: string) => boolean;\n filterMethod?: (method: RequestMethod) => boolean;\n filterParams?: (params?: RequestQuery) => boolean;\n filterHeaders?: (headers?: RequestHeader) => boolean;\n};\n\nexport function loggerBeforeHandler(options: LoggerBeforeHandlerOptions = {}): BeforeHandler {\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.queries)) ||\n (options.filterPath && !options.filterPath(request.path))\n ) {\n resolve();\n\n return;\n }\n // eslint-disable-next-line no-console\n console.log(request);\n resolve();\n });\n };\n}\n"],"names":[],"mappings":"AAgBgB,SAAA,mBAAmB,CAAC,OAAA,GAAsC,EAAE,EAAA;IAC1E,OAAO,CAAC,OAAO,KAAI;AACjB,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,IACE,CAAC,OAAO,CAAC,MAAM;AACb,gBAAA,CAAC,OAAO,CAAC,MAAM,CAAC,OAA+D,CAAC;AAClF,iBAAC,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAClE,iBAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/D,iBAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAChE,iBAAC,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EACzD;AACA,gBAAA,OAAO,EAAE;gBAET;;;AAGF,YAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACpB,YAAA,OAAO,EAAE;AACX,SAAC,CAAC;AACJ,KAAC;AACH;;;;"}
@@ -4,8 +4,8 @@ import 'dayjs';
4
4
  import '../../lib/date/is-today.js';
5
5
  import '../../lib/date/is-tomorrow.js';
6
6
  import '../../lib/date/is-yesterday.js';
7
- import 'lodash/get';
8
- import 'lodash/set';
7
+ import '../../lib/lodash/get-by-path.js';
8
+ import '../../lib/lodash/set-by-path.js';
9
9
  import { startWith } from '../../lib/utils/start-with.js';
10
10
  import { OAUTH_STATE } from '../api.constants.js';
11
11
  import { getOauthTokenFromOtherWindow } from '../oauth.js';
@@ -6,8 +6,8 @@ import '../lib/date/is-tomorrow.js';
6
6
  import '../lib/date/is-yesterday.js';
7
7
  import { isArray } from '../lib/typings/is-array.js';
8
8
  import { isString } from '../lib/typings/is-string.js';
9
- import 'lodash/get';
10
- import 'lodash/set';
9
+ import '../lib/lodash/get-by-path.js';
10
+ import '../lib/lodash/set-by-path.js';
11
11
  import { getQueryValues } from '../lib/browser/get-query-values.js';
12
12
  import { OAUTH_STATE } from './api.constants.js';
13
13
 
@@ -3,8 +3,8 @@ import 'dayjs';
3
3
  import '../date/is-today.js';
4
4
  import '../date/is-tomorrow.js';
5
5
  import '../date/is-yesterday.js';
6
- import 'lodash/get';
7
- import 'lodash/set';
6
+ import '../lodash/get-by-path.js';
7
+ import '../lodash/set-by-path.js';
8
8
  import { getFileNameFromHeader } from '../utils/get-file-name-from-header.js';
9
9
 
10
10
  function downloadFile({ data, fileName, mimeType }) {
@@ -1,12 +1,75 @@
1
- import get from 'lodash/get';
2
1
  import { isArray } from '../typings/is-array.js';
3
2
  import { isString } from '../typings/is-string.js';
4
3
  import { isObject } from '../typings/is-object.js';
5
4
 
5
+ /* eslint-disable max-depth */
6
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
7
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
8
+ const startArray = "[".codePointAt(0);
9
+ const endArray = "]".codePointAt(0);
10
+ const separator = ".".codePointAt(0);
11
+ const numbers = new Set(["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"].map((n) => n.codePointAt(0)));
6
12
  function getByPath(data, path, defaultValue) {
7
- if ((!isObject(data) && !isArray(data)) || !isString(path))
13
+ if (!isString(path) || (!isObject(data) && !isArray(data)))
8
14
  return defaultValue;
9
- return get(data, path, defaultValue);
15
+ let cursor = 0;
16
+ let pathStart = 0;
17
+ let arrayPathStart = -1;
18
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+ let extractedData = data;
20
+ try {
21
+ while (cursor < path.length) {
22
+ const char = path.codePointAt(cursor);
23
+ if (char === separator) {
24
+ arrayPathStart = -1;
25
+ if (pathStart === cursor) {
26
+ pathStart++;
27
+ }
28
+ else {
29
+ if (extractedData == undefined || typeof extractedData !== "object")
30
+ return defaultValue;
31
+ extractedData = extractedData[path.slice(pathStart, cursor)];
32
+ pathStart = cursor + 1;
33
+ }
34
+ /** start array path if not started yet */
35
+ }
36
+ else if (char === startArray && arrayPathStart === -1) {
37
+ arrayPathStart = cursor;
38
+ /** end array if its started min 2 char ago */
39
+ }
40
+ else if (char === endArray && arrayPathStart !== -1 && cursor - arrayPathStart > 1) {
41
+ /** before array was an object path */
42
+ if (pathStart < arrayPathStart) {
43
+ if (extractedData == undefined || typeof extractedData !== "object")
44
+ return defaultValue;
45
+ extractedData = extractedData[path.slice(pathStart, arrayPathStart)];
46
+ }
47
+ const index = +path.slice(arrayPathStart + 1, cursor);
48
+ if (!Array.isArray(extractedData))
49
+ return defaultValue;
50
+ extractedData = extractedData[index];
51
+ arrayPathStart = -1;
52
+ pathStart = cursor + 1;
53
+ /** if array started but char is not number */
54
+ }
55
+ else if (arrayPathStart !== -1 && !numbers.has(char)) {
56
+ arrayPathStart = -1;
57
+ }
58
+ cursor++;
59
+ }
60
+ if (pathStart < path.length) {
61
+ if (extractedData == undefined || typeof extractedData !== "object")
62
+ return defaultValue;
63
+ extractedData = extractedData[path.slice(pathStart, cursor)];
64
+ }
65
+ }
66
+ catch {
67
+ return defaultValue;
68
+ }
69
+ if (extractedData === undefined) {
70
+ return defaultValue;
71
+ }
72
+ return extractedData;
10
73
  }
11
74
 
12
75
  export { getByPath };
@@ -1 +1 @@
1
- {"version":3,"file":"get-by-path.js","sources":["../../../../src/lib/lodash/get-by-path.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;;;SAGgB,SAAS,CAAmB,IAAa,EAAE,IAAa,EAAE,YAAgB,EAAA;AACxF,IAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,YAAiB;IAEpF,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAU;AAC/C;;;;"}
1
+ {"version":3,"file":"get-by-path.js","sources":["../../../../src/lib/lodash/get-by-path.ts"],"sourcesContent":["/* eslint-disable max-depth */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { isArray, isObject, isString } from \"../typings\";\n\nconst startArray = \"[\".codePointAt(0)!;\nconst endArray = \"]\".codePointAt(0)!;\nconst separator = \".\".codePointAt(0)!;\nconst numbers = new Set(\n [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"].map((n) => n.codePointAt(0)!),\n);\nexport function getByPath<T, D>(data: unknown, path: string | undefined, defaultValue?: D): T | D {\n if (!isString(path) || (!isObject(data) && !isArray(data))) return defaultValue as D;\n\n let cursor = 0;\n let pathStart = 0;\n let arrayPathStart = -1;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let extractedData: any = data;\n\n try {\n while (cursor < path.length) {\n const char = path.codePointAt(cursor)!;\n\n if (char === separator) {\n arrayPathStart = -1;\n if (pathStart === cursor) {\n pathStart++;\n } else {\n if (extractedData == undefined || typeof extractedData !== \"object\")\n return defaultValue as D;\n extractedData = extractedData[path.slice(pathStart, cursor)];\n\n pathStart = cursor + 1;\n }\n /** start array path if not started yet */\n } else if (char === startArray && arrayPathStart === -1) {\n arrayPathStart = cursor;\n /** end array if its started min 2 char ago */\n } else if (char === endArray && arrayPathStart !== -1 && cursor - arrayPathStart > 1) {\n /** before array was an object path */\n if (pathStart < arrayPathStart) {\n if (extractedData == undefined || typeof extractedData !== \"object\")\n return defaultValue as D;\n extractedData = extractedData[path.slice(pathStart, arrayPathStart)];\n }\n\n const index = +path.slice(arrayPathStart + 1, cursor);\n if (!Array.isArray(extractedData)) return defaultValue as D;\n extractedData = extractedData[index];\n\n arrayPathStart = -1;\n pathStart = cursor + 1;\n\n /** if array started but char is not number */\n } else if (arrayPathStart !== -1 && !numbers.has(char)) {\n arrayPathStart = -1;\n }\n cursor++;\n }\n\n if (pathStart < path.length) {\n if (extractedData == undefined || typeof extractedData !== \"object\") return defaultValue as D;\n extractedData = extractedData[path.slice(pathStart, cursor)];\n }\n } catch {\n return defaultValue as D;\n }\n\n if (extractedData === undefined) {\n return defaultValue as D;\n }\n\n return extractedData as T;\n}\n"],"names":[],"mappings":"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"}
@@ -1,16 +1,116 @@
1
- import set from 'lodash/set';
2
1
  import { isArray } from '../typings/is-array.js';
2
+ import { isString } from '../typings/is-string.js';
3
3
  import { isObject } from '../typings/is-object.js';
4
4
 
5
- function setByPath(data, path, value) {
5
+ /* eslint-disable max-depth */
6
+ /* eslint-disable @typescript-eslint/no-unsafe-member-access */
7
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
8
+ const startArray = "[".codePointAt(0);
9
+ const endArray = "]".codePointAt(0);
10
+ const separator = ".".codePointAt(0);
11
+ const numbers = new Set(["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"].map((n) => n.codePointAt(0)));
12
+ function setByPath(data, path, settableValue) {
13
+ if (!isString(path) || (!isObject(data) && !isArray(data)))
14
+ return false;
15
+ let cursor = 0;
16
+ let pathStart = 0;
17
+ let arrayPathStart = -1;
18
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+ let extractedData = data;
20
+ let prevPath;
6
21
  try {
7
- if (!isObject(data) && !isArray(data))
8
- throw new Error("bad data");
9
- set(data, path, value);
22
+ while (cursor < path.length) {
23
+ const char = path.codePointAt(cursor);
24
+ /** get */
25
+ if (char === separator) {
26
+ arrayPathStart = -1;
27
+ if (pathStart === cursor) {
28
+ pathStart++;
29
+ }
30
+ else {
31
+ if (prevPath) {
32
+ const object = {};
33
+ extractedData[prevPath] = object;
34
+ extractedData = object;
35
+ }
36
+ if (cursor === path.length - 1) {
37
+ extractedData[path.slice(pathStart, cursor)] = settableValue;
38
+ }
39
+ else {
40
+ const currentPath = path.slice(pathStart, cursor);
41
+ const extractedValue = extractedData[currentPath];
42
+ if (extractedValue == undefined) {
43
+ prevPath = currentPath;
44
+ }
45
+ else {
46
+ extractedData = extractedValue;
47
+ }
48
+ pathStart = cursor + 1;
49
+ }
50
+ }
51
+ /** start array path if not started yet */
52
+ }
53
+ else if (char === startArray && arrayPathStart === -1) {
54
+ arrayPathStart = cursor;
55
+ /** end array if its started min 2 char ago */
56
+ }
57
+ else if (char === endArray && arrayPathStart !== -1 && cursor - arrayPathStart > 1) {
58
+ /** before array was an object path */
59
+ if (pathStart < arrayPathStart) {
60
+ if (prevPath) {
61
+ const object = {};
62
+ extractedData[prevPath] = object;
63
+ extractedData = object;
64
+ }
65
+ const currentPath = path.slice(pathStart, arrayPathStart);
66
+ const extractedValue = extractedData[currentPath];
67
+ if (extractedValue == undefined) {
68
+ prevPath = currentPath;
69
+ }
70
+ else {
71
+ extractedData = extractedValue;
72
+ }
73
+ }
74
+ if (prevPath) {
75
+ const array = [];
76
+ extractedData[prevPath] = array;
77
+ extractedData = array;
78
+ }
79
+ const index = +path.slice(arrayPathStart + 1, cursor);
80
+ if (cursor === path.length - 1) {
81
+ extractedData[index] = settableValue;
82
+ }
83
+ else {
84
+ const extractedValue = extractedData[index];
85
+ if (extractedValue == undefined) {
86
+ prevPath = index;
87
+ }
88
+ else {
89
+ extractedData = extractedValue;
90
+ }
91
+ }
92
+ arrayPathStart = -1;
93
+ pathStart = cursor + 1;
94
+ /** if array started but char is not number */
95
+ }
96
+ else if (arrayPathStart !== -1 && !numbers.has(char)) {
97
+ arrayPathStart = -1;
98
+ }
99
+ cursor++;
100
+ }
101
+ if (pathStart < path.length) {
102
+ if (prevPath) {
103
+ const object = {};
104
+ extractedData[prevPath] = object;
105
+ extractedData = object;
106
+ }
107
+ extractedData[path.slice(pathStart, cursor)] = settableValue;
108
+ }
10
109
  }
11
- catch (error) {
12
- console.warn(error);
110
+ catch {
111
+ return false;
13
112
  }
113
+ return true;
14
114
  }
15
115
 
16
116
  export { setByPath };
@@ -1 +1 @@
1
- {"version":3,"file":"set-by-path.js","sources":["../../../../src/lib/lodash/set-by-path.ts"],"sourcesContent":["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"],"names":[],"mappings":";;;;SAGgB,SAAS,CAAC,IAAyC,EAAE,IAAY,EAAE,KAAc,EAAA;AAC/F,IAAA,IAAI;QACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;AAElE,QAAA,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;;IACtB,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;;AAEvB;;;;"}
1
+ {"version":3,"file":"set-by-path.js","sources":["../../../../src/lib/lodash/set-by-path.ts"],"sourcesContent":["/* eslint-disable max-depth */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { isArray, isObject } from \"../typings\";\nimport { isString } from \"../typings\";\n\nconst startArray = \"[\".codePointAt(0)!;\nconst endArray = \"]\".codePointAt(0)!;\nconst separator = \".\".codePointAt(0)!;\nconst numbers = new Set(\n [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"].map((n) => n.codePointAt(0)!),\n);\nexport function setByPath(data: unknown, path: string | undefined, settableValue: unknown) {\n if (!isString(path) || (!isObject(data) && !isArray(data))) return false;\n\n let cursor = 0;\n let pathStart = 0;\n let arrayPathStart = -1;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let extractedData: any = data;\n let prevPath: string | number | undefined;\n\n try {\n while (cursor < path.length) {\n const char = path.codePointAt(cursor)!;\n /** get */\n if (char === separator) {\n arrayPathStart = -1;\n if (pathStart === cursor) {\n pathStart++;\n } else {\n if (prevPath) {\n const object = {};\n extractedData[prevPath] = object;\n extractedData = object;\n }\n\n if (cursor === path.length - 1) {\n extractedData[path.slice(pathStart, cursor)] = settableValue;\n } else {\n const currentPath = path.slice(pathStart, cursor);\n const extractedValue = extractedData[currentPath];\n if (extractedValue == undefined) {\n prevPath = currentPath;\n } else {\n extractedData = extractedValue;\n }\n pathStart = cursor + 1;\n }\n }\n\n /** start array path if not started yet */\n } else if (char === startArray && arrayPathStart === -1) {\n arrayPathStart = cursor;\n /** end array if its started min 2 char ago */\n } else if (char === endArray && arrayPathStart !== -1 && cursor - arrayPathStart > 1) {\n /** before array was an object path */\n if (pathStart < arrayPathStart) {\n if (prevPath) {\n const object = {};\n extractedData[prevPath] = object;\n extractedData = object;\n }\n const currentPath = path.slice(pathStart, arrayPathStart);\n const extractedValue = extractedData[currentPath];\n if (extractedValue == undefined) {\n prevPath = currentPath;\n } else {\n extractedData = extractedValue;\n }\n }\n\n if (prevPath) {\n const array: unknown[] = [];\n extractedData[prevPath] = array;\n extractedData = array;\n }\n const index = +path.slice(arrayPathStart + 1, cursor);\n if (cursor === path.length - 1) {\n extractedData[index] = settableValue;\n } else {\n const extractedValue = extractedData[index];\n if (extractedValue == undefined) {\n prevPath = index;\n } else {\n extractedData = extractedValue;\n }\n }\n arrayPathStart = -1;\n pathStart = cursor + 1;\n\n /** if array started but char is not number */\n } else if (arrayPathStart !== -1 && !numbers.has(char)) {\n arrayPathStart = -1;\n }\n cursor++;\n }\n\n if (pathStart < path.length) {\n if (prevPath) {\n const object = {};\n extractedData[prevPath] = object;\n extractedData = object;\n }\n extractedData[path.slice(pathStart, cursor)] = settableValue;\n }\n } catch {\n return false;\n }\n\n return true;\n}\n"],"names":[],"mappings":"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"}
@@ -4,11 +4,11 @@ function speedTest(cb, opts) {
4
4
  if (type === "performance") {
5
5
  const start = performance.now();
6
6
  if (iterations <= 1) {
7
- result = cb();
7
+ result = cb(0);
8
8
  }
9
9
  else {
10
10
  for (let i = 0; i < iterations; i++) {
11
- result = cb();
11
+ result = cb(i);
12
12
  }
13
13
  }
14
14
  const end = performance.now();
@@ -19,11 +19,11 @@ function speedTest(cb, opts) {
19
19
  // eslint-disable-next-line no-console
20
20
  console.time(name);
21
21
  if (iterations <= 1) {
22
- result = cb();
22
+ result = cb(0);
23
23
  }
24
24
  else {
25
25
  for (let i = 0; i < iterations; i++) {
26
- result = cb();
26
+ result = cb(i);
27
27
  }
28
28
  }
29
29
  // eslint-disable-next-line no-console
@@ -1 +1 @@
1
- {"version":3,"file":"speed-test.js","sources":["../../../../src/lib/utils/speed-test.ts"],"sourcesContent":["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 = \"performance\" } = 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"],"names":[],"mappings":"AAMgB,SAAA,SAAS,CAAI,EAAW,EAAE,IAAsB,EAAA;AAC9D,IAAA,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,KAAK,EAAE,IAAI,GAAG,aAAa,EAAE,GAAG,IAAI;AAC/D,IAAA,IAAI,MAAqB;AAEzB,IAAA,IAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;AAE/B,QAAA,IAAI,UAAU,IAAI,CAAC,EAAE;YACnB,MAAM,GAAG,EAAE,EAAE;;aACR;AACL,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,GAAG,EAAE,EAAE;;;AAIjB,QAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE;;QAE7B,OAAO,CAAC,GAAG,CAAC,CAAG,EAAA,IAAI,CAAI,EAAA,CAAA,EAAE,GAAG,GAAG,KAAK,CAAC;;SAChC;;AAEL,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AAElB,QAAA,IAAI,UAAU,IAAI,CAAC,EAAE;YACnB,MAAM,GAAG,EAAE,EAAE;;aACR;AACL,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,GAAG,EAAE,EAAE;;;;AAKjB,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;;AAGvB,IAAA,OAAO,MAAW;AACpB;;;;"}
1
+ {"version":3,"file":"speed-test.js","sources":["../../../../src/lib/utils/speed-test.ts"],"sourcesContent":["type SpeedTestOptions = {\n name: string;\n iterations?: number;\n type?: \"time\" | \"performance\";\n};\n\nexport function speedTest<T>(cb: (i: number) => T, opts: SpeedTestOptions): T {\n const { name, iterations = 10000, type = \"performance\" } = opts;\n let result: T | undefined;\n\n if (type === \"performance\") {\n const start = performance.now();\n\n if (iterations <= 1) {\n result = cb(0);\n } else {\n for (let i = 0; i < iterations; i++) {\n result = cb(i);\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(0);\n } else {\n for (let i = 0; i < iterations; i++) {\n result = cb(i);\n }\n }\n\n // eslint-disable-next-line no-console\n console.timeEnd(name);\n }\n\n return result as T;\n}\n"],"names":[],"mappings":"AAMgB,SAAA,SAAS,CAAI,EAAoB,EAAE,IAAsB,EAAA;AACvE,IAAA,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,KAAK,EAAE,IAAI,GAAG,aAAa,EAAE,GAAG,IAAI;AAC/D,IAAA,IAAI,MAAqB;AAEzB,IAAA,IAAI,IAAI,KAAK,aAAa,EAAE;AAC1B,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;AAE/B,QAAA,IAAI,UAAU,IAAI,CAAC,EAAE;AACnB,YAAA,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;;aACT;AACL,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACnC,gBAAA,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;;;AAIlB,QAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE;;QAE7B,OAAO,CAAC,GAAG,CAAC,CAAG,EAAA,IAAI,CAAI,EAAA,CAAA,EAAE,GAAG,GAAG,KAAK,CAAC;;SAChC;;AAEL,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AAElB,QAAA,IAAI,UAAU,IAAI,CAAC,EAAE;AACnB,YAAA,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;;aACT;AACL,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;AACnC,gBAAA,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;;;;AAKlB,QAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;;AAGvB,IAAA,OAAO,MAAW;AACpB;;;;"}
package/lib/index.d.ts CHANGED
@@ -146,8 +146,8 @@ type RequestTransformIncoming<IncomingApi, Incoming> = IsEqual<Incoming, Incomin
146
146
  } : {
147
147
  transformIncomingData: (data: IncomingApi) => Incoming;
148
148
  };
149
- type BeforeHandler = <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>) => Promise<unknown>;
150
- type AfterHandler = <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>, response: Response | Response$1 | undefined) => Promise<unknown>;
149
+ type BeforeHandler = <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>) => Promise<void> | void;
150
+ type AfterHandler = <IncomingApi, Incoming = IncomingApi, Outcoming = unknown, OutcomingApi = Outcoming>(request: RequestInterface<IncomingApi, Incoming, Outcoming, OutcomingApi>, response: Response | Response$1 | undefined) => Promise<void> | void;
151
151
  type OauthOptions = {
152
152
  /** A name of expires token in localstorage */
153
153
  expiresTokenStorageName: string;
@@ -389,7 +389,7 @@ type SpeedTestOptions = {
389
389
  iterations?: number;
390
390
  type?: "time" | "performance";
391
391
  };
392
- declare function speedTest<T>(cb: () => T, opts: SpeedTestOptions): T;
392
+ declare function speedTest<T>(cb: (i: number) => T, opts: SpeedTestOptions): T;
393
393
 
394
394
  declare function createGlobalId(): number;
395
395
 
@@ -431,9 +431,9 @@ declare function isDate(value: unknown): value is Date;
431
431
 
432
432
  declare function isPrimitive(value: unknown): value is string | number | boolean | null | undefined;
433
433
 
434
- declare function getByPath<T, D = undefined>(data: unknown, path?: string, defaultValue?: D): T | D;
434
+ declare function getByPath<T, D>(data: unknown, path: string | undefined, defaultValue?: D): T | D;
435
435
 
436
- declare function setByPath(data: Record<string, unknown> | unknown[], path: string, value: unknown): void;
436
+ declare function setByPath(data: unknown, path: string | undefined, settableValue: unknown): boolean;
437
437
 
438
438
  declare function cloneDeep<T>(value: T): T;
439
439
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@krainovsd/js-helpers",
3
- "version": "0.16.3",
3
+ "version": "0.16.5",
4
4
  "description": "Krainov helpers",
5
5
  "type": "module",
6
6
  "author": "KrainovSD <denislosev48@gmail.com>",
@@ -45,8 +45,7 @@
45
45
  "test-coverage": "jest --coverage"
46
46
  },
47
47
  "dependencies": {
48
- "dayjs": "1.11.13",
49
- "lodash": "4.17.21"
48
+ "dayjs": "^1.11.13"
50
49
  },
51
50
  "devDependencies": {
52
51
  "@krainovsd/presets": "0.3.6",
@@ -59,7 +58,6 @@
59
58
  "@swc/core": "1.11.5",
60
59
  "@swc/jest": "0.2.37",
61
60
  "@types/jest": "29.5.14",
62
- "@types/lodash": "4.17.14",
63
61
  "@types/node": "22.13.8",
64
62
  "jest": "29.7.0",
65
63
  "node-fetch": "2.7.0",