@zajno/common 2.8.6 → 2.8.7

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.
@@ -2,9 +2,19 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RequestMeta = void 0;
4
4
  exports.createConfig = createConfig;
5
+ const isPlainObject_js_1 = require("../types/isPlainObject.js");
5
6
  const config_js_1 = require("./config.js");
6
7
  function createConfig(endpointsConfig, api, data, extra) {
7
8
  const { headers, log = 'res', noLoader, ...restExtra } = extra || {};
9
+ // Guard against non-plain objects (e.g. FormData, Blob) that would be destroyed by spread.
10
+ // Only plain objects can be spread for path/query extraction.
11
+ if (data != null && typeof data === 'object' && !(0, isPlainObject_js_1.isPlainObject)(data)) {
12
+ const name = data.constructor?.name ?? typeof data;
13
+ throw new TypeError(`API caller received a non-plain object as data (got ${name}). `
14
+ + 'Only plain objects are supported because data is spread for path/query extraction. '
15
+ + 'For FormData/multipart uploads, pass a plain object and use the IEndpointFormData extension '
16
+ + 'with .asFormData(), or use a beforeRequest hook to replace config.data.');
17
+ }
8
18
  const resultInput = data && { ...data };
9
19
  const pathInputs = {};
10
20
  const queryInputs = {};
@@ -1 +1 @@
1
- {"version":3,"file":"call.config.js","sourceRoot":"","sources":["../../../src/api/call.config.ts"],"names":[],"mappings":";;;AAMA,oCA4EC;AAhFD,2CAAmD;AAInD,SAAgB,YAAY,CACxB,eAAqC,EACrC,GAAM,EACN,IAAiC,EACjC,KAAgC;IAKhC,MAAM,EACF,OAAO,EACP,GAAG,GAAG,KAAK,EACX,QAAQ,EACR,GAAG,SAAS,EACf,GAAG,KAAK,IAAI,EAAE,CAAC;IAEhB,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;IACxC,MAAM,UAAU,GAAoC,EAAE,CAAC;IACvD,MAAM,WAAW,GAAc,EAAE,CAAC;IAClC,IAAI,QAAQ,GAAW,EAAE,CAAC;IAE1B,gCAAgC;IAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC;IAChC,IAAI,WAAW,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YACzB,UAAU,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YACnC,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,iCAAiC;IACjC,MAAM,iBAAiB,GAAG,GAAG,CAAC,SAAS,CAAC;IACxC,IAAI,WAAW,IAAI,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC3C,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;gBACZ,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrB,KAAK,GAAG,KAAK,CAAC;YAClB,CAAC;YACD,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QAED,uBAAuB;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC;YAChD,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACvC,CAAC;IACL,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;QAClE,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC;IACnC,MAAM,MAAM,GAAmC;QAC3C,MAAM;QACN,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,UAA0C,CAAC,GAAG,QAAQ;QACxF,IAAI,EAAE,WAAW,IAAI,SAAS;QAC9B,OAAO,EAAE,OAAoB,IAAI,EAAE;QAEnC,KAAK,EAAE,IAAI,WAAW,CAClB,GAAG,EACH,eAAe,EACf,GAAG,EACH,QAAQ,IAAI,MAAgB,KAAK,KAAK,EACtC,SAAmB,CACtB;KACJ,CAAC;IAEF,OAAO;QACH,MAAM;QACN,WAAW;QACX,UAAU;QACV,WAAW;KACd,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAa,WAAW;IAEA;IACA;IACA;IACA;IACA;IALpB,YACoB,GAAM,EACN,cAAoC,IAAI,gCAAoB,EAAE,EAC9D,MAAgB,KAAK,EACrB,WAAoB,KAAK,EACzB,QAAgB,EAA8B;QAJ9C,QAAG,GAAH,GAAG,CAAG;QACN,gBAAW,GAAX,WAAW,CAAmD;QAC9D,QAAG,GAAH,GAAG,CAAkB;QACrB,aAAQ,GAAR,QAAQ,CAAiB;QACzB,UAAK,GAAL,KAAK,CAAyC;IAGlE,CAAC;CACJ;AAVD,kCAUC"}
1
+ {"version":3,"file":"call.config.js","sourceRoot":"","sources":["../../../src/api/call.config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IEndpointFormData = void 0;
4
+ exports.createFormDataSerializer = createFormDataSerializer;
5
+ const isPlainObject_js_1 = require("../../types/isPlainObject.js");
6
+ /**
7
+ * Creates a default FormData serializer.
8
+ *
9
+ * Iterates over own enumerable properties of the data object and appends them to a new FormData instance.
10
+ *
11
+ * - `Blob`/`File` values are appended as-is
12
+ * - `null`/`undefined` values are skipped
13
+ * - Primitive values are converted to strings
14
+ * - Objects/arrays are JSON-stringified by default (configurable via `serializeValue`)
15
+ */
16
+ function createFormDataSerializer(options) {
17
+ const Ctor = options?.FormData ?? globalThis.FormData;
18
+ if (typeof Ctor !== 'function') {
19
+ throw new TypeError('FormData is not available in this environment. '
20
+ + 'Pass a FormData constructor via options.FormData (e.g., from the `form-data` npm package).');
21
+ }
22
+ const serializeValue = options?.serializeValue ?? 'json';
23
+ return (data) => {
24
+ const fd = new Ctor();
25
+ for (const [key, value] of Object.entries(data)) {
26
+ if (value == null) {
27
+ continue;
28
+ }
29
+ if (typeof Blob !== 'undefined' && value instanceof Blob) {
30
+ fd.append(key, value);
31
+ continue;
32
+ }
33
+ if (typeof value !== 'object') {
34
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
35
+ fd.append(key, String(value));
36
+ continue;
37
+ }
38
+ if (typeof serializeValue === 'function') {
39
+ const serialized = serializeValue(key, value);
40
+ if (typeof Blob !== 'undefined' && serialized instanceof Blob) {
41
+ fd.append(key, serialized);
42
+ }
43
+ else {
44
+ fd.append(key, serialized);
45
+ }
46
+ }
47
+ else {
48
+ fd.append(key, JSON.stringify(value));
49
+ }
50
+ }
51
+ return fd;
52
+ };
53
+ }
54
+ var IEndpointFormData;
55
+ (function (IEndpointFormData) {
56
+ IEndpointFormData.extender = (base) => {
57
+ const ext = {
58
+ formData: undefined,
59
+ asFormData(serializer) {
60
+ this.formData = serializer ?? true;
61
+ return this;
62
+ },
63
+ };
64
+ return Object.assign(base, ext);
65
+ };
66
+ function guard(api) {
67
+ return 'formData' in api && !!api.formData;
68
+ }
69
+ IEndpointFormData.guard = guard;
70
+ /**
71
+ * Creates caller hooks for FormData serialization.
72
+ *
73
+ * The hook converts `config.data` (plain object) into a FormData instance using the provided serializer.
74
+ *
75
+ * @param serializer - Default serializer used when endpoint has `.asFormData()` without a custom serializer.
76
+ * Use {@link createFormDataSerializer} for the built-in one, or provide a fully custom function.
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * // Simplest setup (global FormData, JSON-stringify objects)
81
+ * IEndpointFormData.createHooks(createFormDataSerializer())
82
+ *
83
+ * // Custom FormData constructor
84
+ * import FormDataNode from 'form-data';
85
+ * IEndpointFormData.createHooks(createFormDataSerializer({ FormData: FormDataNode as any }))
86
+ *
87
+ * // Fully custom serializer
88
+ * IEndpointFormData.createHooks((data) => {
89
+ * const fd = new FormData();
90
+ * // custom logic...
91
+ * return fd;
92
+ * })
93
+ * ```
94
+ */
95
+ function createHooks(serializer) {
96
+ return {
97
+ beforeRequest: (config) => {
98
+ if (!guard(config._meta.api) || !config.data) {
99
+ return;
100
+ }
101
+ // Skip if data was already transformed by a previous hook (e.g., to FormData, Blob, string)
102
+ if (!(0, isPlainObject_js_1.isPlainObject)(config.data)) {
103
+ return;
104
+ }
105
+ const endpoint = config._meta.api;
106
+ const ser = typeof endpoint.formData === 'function'
107
+ ? endpoint.formData
108
+ : serializer;
109
+ config.data = ser(config.data);
110
+ },
111
+ };
112
+ }
113
+ IEndpointFormData.createHooks = createHooks;
114
+ })(IEndpointFormData || (exports.IEndpointFormData = IEndpointFormData = {}));
115
+ //# sourceMappingURL=formData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formData.js","sourceRoot":"","sources":["../../../../src/api/extensions/formData.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./contentType.js"), exports);
5
+ tslib_1.__exportStar(require("./formData.js"), exports);
5
6
  tslib_1.__exportStar(require("./validation.js"), exports);
6
7
  tslib_1.__exportStar(require("./endpointHooks.js"), exports);
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/extensions/index.ts"],"names":[],"mappings":";;;AAAA,2DAAiC;AACjC,0DAAgC;AAChC,6DAAmC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/extensions/index.ts"],"names":[],"mappings":";;;AAAA,2DAAiC;AACjC,wDAA8B;AAC9B,0DAAgC;AAChC,6DAAmC"}
@@ -5,4 +5,5 @@ tslib_1.__exportStar(require("./deep.js"), exports);
5
5
  tslib_1.__exportStar(require("./getter.js"), exports);
6
6
  tslib_1.__exportStar(require("./comparator.js"), exports);
7
7
  tslib_1.__exportStar(require("./misc.js"), exports);
8
+ tslib_1.__exportStar(require("./isPlainObject.js"), exports);
8
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;AAAA,oDAA0B;AAC1B,sDAA4B;AAC5B,0DAAgC;AAChC,oDAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;AAAA,oDAA0B;AAC1B,sDAA4B;AAC5B,0DAAgC;AAChC,oDAA0B;AAC1B,6DAAmC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isPlainObject = isPlainObject;
4
+ /**
5
+ * Checks if a value is a plain object (created by `{}`, `Object.create(null)`, or `new Object()`).
6
+ * Returns `false` for class instances like `FormData`, `Blob`, `Buffer`, etc.
7
+ */
8
+ function isPlainObject(value) {
9
+ if (value == null || typeof value !== 'object') {
10
+ return false;
11
+ }
12
+ const proto = Object.getPrototypeOf(value);
13
+ return proto === Object.prototype || proto === null;
14
+ }
15
+ //# sourceMappingURL=isPlainObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isPlainObject.js","sourceRoot":"","sources":["../../../src/types/isPlainObject.ts"],"names":[],"mappings":";;AAKA,sCAMC;AAVD;;;GAGG;AACH,SAAgB,aAAa,CAAC,KAAc;IACxC,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AACxD,CAAC"}
@@ -1,7 +1,17 @@
1
1
  import {} from '../types/misc.js';
2
+ import { isPlainObject } from '../types/isPlainObject.js';
2
3
  import { EndpointsPathsConfig } from './config.js';
3
4
  export function createConfig(endpointsConfig, api, data, extra) {
4
5
  const { headers, log = 'res', noLoader, ...restExtra } = extra || {};
6
+ // Guard against non-plain objects (e.g. FormData, Blob) that would be destroyed by spread.
7
+ // Only plain objects can be spread for path/query extraction.
8
+ if (data != null && typeof data === 'object' && !isPlainObject(data)) {
9
+ const name = data.constructor?.name ?? typeof data;
10
+ throw new TypeError(`API caller received a non-plain object as data (got ${name}). `
11
+ + 'Only plain objects are supported because data is spread for path/query extraction. '
12
+ + 'For FormData/multipart uploads, pass a plain object and use the IEndpointFormData extension '
13
+ + 'with .asFormData(), or use a beforeRequest hook to replace config.data.');
14
+ }
5
15
  const resultInput = data && { ...data };
6
16
  const pathInputs = {};
7
17
  const queryInputs = {};
@@ -1 +1 @@
1
- {"version":3,"file":"call.config.js","sourceRoot":"","sources":["../../../src/api/call.config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"call.config.js","sourceRoot":"","sources":["../../../src/api/call.config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ import { isPlainObject } from '../../types/isPlainObject.js';
2
+ /**
3
+ * Creates a default FormData serializer.
4
+ *
5
+ * Iterates over own enumerable properties of the data object and appends them to a new FormData instance.
6
+ *
7
+ * - `Blob`/`File` values are appended as-is
8
+ * - `null`/`undefined` values are skipped
9
+ * - Primitive values are converted to strings
10
+ * - Objects/arrays are JSON-stringified by default (configurable via `serializeValue`)
11
+ */
12
+ export function createFormDataSerializer(options) {
13
+ const Ctor = options?.FormData ?? globalThis.FormData;
14
+ if (typeof Ctor !== 'function') {
15
+ throw new TypeError('FormData is not available in this environment. '
16
+ + 'Pass a FormData constructor via options.FormData (e.g., from the `form-data` npm package).');
17
+ }
18
+ const serializeValue = options?.serializeValue ?? 'json';
19
+ return (data) => {
20
+ const fd = new Ctor();
21
+ for (const [key, value] of Object.entries(data)) {
22
+ if (value == null) {
23
+ continue;
24
+ }
25
+ if (typeof Blob !== 'undefined' && value instanceof Blob) {
26
+ fd.append(key, value);
27
+ continue;
28
+ }
29
+ if (typeof value !== 'object') {
30
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
31
+ fd.append(key, String(value));
32
+ continue;
33
+ }
34
+ if (typeof serializeValue === 'function') {
35
+ const serialized = serializeValue(key, value);
36
+ if (typeof Blob !== 'undefined' && serialized instanceof Blob) {
37
+ fd.append(key, serialized);
38
+ }
39
+ else {
40
+ fd.append(key, serialized);
41
+ }
42
+ }
43
+ else {
44
+ fd.append(key, JSON.stringify(value));
45
+ }
46
+ }
47
+ return fd;
48
+ };
49
+ }
50
+ export var IEndpointFormData;
51
+ (function (IEndpointFormData) {
52
+ IEndpointFormData.extender = (base) => {
53
+ const ext = {
54
+ formData: undefined,
55
+ asFormData(serializer) {
56
+ this.formData = serializer ?? true;
57
+ return this;
58
+ },
59
+ };
60
+ return Object.assign(base, ext);
61
+ };
62
+ function guard(api) {
63
+ return 'formData' in api && !!api.formData;
64
+ }
65
+ IEndpointFormData.guard = guard;
66
+ /**
67
+ * Creates caller hooks for FormData serialization.
68
+ *
69
+ * The hook converts `config.data` (plain object) into a FormData instance using the provided serializer.
70
+ *
71
+ * @param serializer - Default serializer used when endpoint has `.asFormData()` without a custom serializer.
72
+ * Use {@link createFormDataSerializer} for the built-in one, or provide a fully custom function.
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * // Simplest setup (global FormData, JSON-stringify objects)
77
+ * IEndpointFormData.createHooks(createFormDataSerializer())
78
+ *
79
+ * // Custom FormData constructor
80
+ * import FormDataNode from 'form-data';
81
+ * IEndpointFormData.createHooks(createFormDataSerializer({ FormData: FormDataNode as any }))
82
+ *
83
+ * // Fully custom serializer
84
+ * IEndpointFormData.createHooks((data) => {
85
+ * const fd = new FormData();
86
+ * // custom logic...
87
+ * return fd;
88
+ * })
89
+ * ```
90
+ */
91
+ function createHooks(serializer) {
92
+ return {
93
+ beforeRequest: (config) => {
94
+ if (!guard(config._meta.api) || !config.data) {
95
+ return;
96
+ }
97
+ // Skip if data was already transformed by a previous hook (e.g., to FormData, Blob, string)
98
+ if (!isPlainObject(config.data)) {
99
+ return;
100
+ }
101
+ const endpoint = config._meta.api;
102
+ const ser = typeof endpoint.formData === 'function'
103
+ ? endpoint.formData
104
+ : serializer;
105
+ config.data = ser(config.data);
106
+ },
107
+ };
108
+ }
109
+ IEndpointFormData.createHooks = createHooks;
110
+ })(IEndpointFormData || (IEndpointFormData = {}));
111
+ //# sourceMappingURL=formData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formData.js","sourceRoot":"","sources":["../../../../src/api/extensions/formData.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export * from './contentType.js';
2
+ export * from './formData.js';
2
3
  export * from './validation.js';
3
4
  export * from './endpointHooks.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/extensions/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/extensions/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
@@ -2,4 +2,5 @@ export * from './deep.js';
2
2
  export * from './getter.js';
3
3
  export * from './comparator.js';
4
4
  export * from './misc.js';
5
+ export * from './isPlainObject.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Checks if a value is a plain object (created by `{}`, `Object.create(null)`, or `new Object()`).
3
+ * Returns `false` for class instances like `FormData`, `Blob`, `Buffer`, etc.
4
+ */
5
+ export function isPlainObject(value) {
6
+ if (value == null || typeof value !== 'object') {
7
+ return false;
8
+ }
9
+ const proto = Object.getPrototypeOf(value);
10
+ return proto === Object.prototype || proto === null;
11
+ }
12
+ //# sourceMappingURL=isPlainObject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isPlainObject.js","sourceRoot":"","sources":["../../../src/types/isPlainObject.ts"],"names":[],"mappings":"AACA;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IACxC,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AACxD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zajno/common",
3
- "version": "2.8.6",
3
+ "version": "2.8.7",
4
4
  "description": "Zajno's re-usable utilities for JS/TS projects",
5
5
  "private": false,
6
6
  "type": "module",
@@ -1 +1 @@
1
- {"root":["../src/api/builder.ts","../src/api/call.config.ts","../src/api/call.ts","../src/api/call.types.ts","../src/api/config.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/hooks.ts","../src/api/index.ts","../src/api/interceptor.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/endpointhooks.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/debounce.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/lazy/extensions.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/empty.ts","../src/logger/index.ts","../src/logger/loggable.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/provider.ts","../src/logger/proxy.ts","../src/logger/types.ts","../src/logger/buffered/base.ts","../src/logger/buffered/buffered.logger.ts","../src/logger/buffered/buffered.memory.ts","../src/logger/buffered/index.ts","../src/logger/buffered/file/buffered.file.ts","../src/logger/buffered/file/index.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/debouncedevent.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/timeout.ts","../src/observing/timer.ts","../src/observing/transition.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/extendobject.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/singleton.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.helpers.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.helpers.ts","../src/structures/path/types.ts","../src/structures/path/utils/combineurls.ts","../src/structures/path/utils/index.ts","../src/structures/path/utils/indextrim.ts","../src/structures/path/utils/optionals.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validationerror.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
1
+ {"root":["../src/api/builder.ts","../src/api/call.config.ts","../src/api/call.ts","../src/api/call.types.ts","../src/api/config.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/hooks.ts","../src/api/index.ts","../src/api/interceptor.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/endpointhooks.ts","../src/api/extensions/formdata.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/debounce.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/lazy/extensions.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/empty.ts","../src/logger/index.ts","../src/logger/loggable.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/provider.ts","../src/logger/proxy.ts","../src/logger/types.ts","../src/logger/buffered/base.ts","../src/logger/buffered/buffered.logger.ts","../src/logger/buffered/buffered.memory.ts","../src/logger/buffered/index.ts","../src/logger/buffered/file/buffered.file.ts","../src/logger/buffered/file/index.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/debouncedevent.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/timeout.ts","../src/observing/timer.ts","../src/observing/transition.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/extendobject.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/singleton.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.helpers.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.helpers.ts","../src/structures/path/types.ts","../src/structures/path/utils/combineurls.ts","../src/structures/path/utils/index.ts","../src/structures/path/utils/indextrim.ts","../src/structures/path/utils/optionals.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/isplainobject.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validationerror.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
@@ -1 +1 @@
1
- {"root":["../src/api/builder.ts","../src/api/call.config.ts","../src/api/call.ts","../src/api/call.types.ts","../src/api/config.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/hooks.ts","../src/api/index.ts","../src/api/interceptor.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/endpointhooks.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/debounce.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/lazy/extensions.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/empty.ts","../src/logger/index.ts","../src/logger/loggable.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/provider.ts","../src/logger/proxy.ts","../src/logger/types.ts","../src/logger/buffered/base.ts","../src/logger/buffered/buffered.logger.ts","../src/logger/buffered/buffered.memory.ts","../src/logger/buffered/index.ts","../src/logger/buffered/file/buffered.file.ts","../src/logger/buffered/file/index.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/debouncedevent.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/timeout.ts","../src/observing/timer.ts","../src/observing/transition.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/extendobject.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/singleton.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.helpers.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.helpers.ts","../src/structures/path/types.ts","../src/structures/path/utils/combineurls.ts","../src/structures/path/utils/index.ts","../src/structures/path/utils/indextrim.ts","../src/structures/path/utils/optionals.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validationerror.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
1
+ {"root":["../src/api/builder.ts","../src/api/call.config.ts","../src/api/call.ts","../src/api/call.types.ts","../src/api/config.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/hooks.ts","../src/api/index.ts","../src/api/interceptor.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/endpointhooks.ts","../src/api/extensions/formdata.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/debounce.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/lazy/extensions.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/empty.ts","../src/logger/index.ts","../src/logger/loggable.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/provider.ts","../src/logger/proxy.ts","../src/logger/types.ts","../src/logger/buffered/base.ts","../src/logger/buffered/buffered.logger.ts","../src/logger/buffered/buffered.memory.ts","../src/logger/buffered/index.ts","../src/logger/buffered/file/buffered.file.ts","../src/logger/buffered/file/index.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/debouncedevent.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/timeout.ts","../src/observing/timer.ts","../src/observing/transition.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/extendobject.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/singleton.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.helpers.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.helpers.ts","../src/structures/path/types.ts","../src/structures/path/utils/combineurls.ts","../src/structures/path/utils/index.ts","../src/structures/path/utils/indextrim.ts","../src/structures/path/utils/optionals.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/isplainobject.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validationerror.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
@@ -1 +1 @@
1
- {"root":["../src/api/builder.ts","../src/api/call.config.ts","../src/api/call.ts","../src/api/call.types.ts","../src/api/config.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/hooks.ts","../src/api/index.ts","../src/api/interceptor.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/endpointhooks.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/debounce.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/lazy/extensions.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/empty.ts","../src/logger/index.ts","../src/logger/loggable.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/provider.ts","../src/logger/proxy.ts","../src/logger/types.ts","../src/logger/buffered/base.ts","../src/logger/buffered/buffered.logger.ts","../src/logger/buffered/buffered.memory.ts","../src/logger/buffered/index.ts","../src/logger/buffered/file/buffered.file.ts","../src/logger/buffered/file/index.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/debouncedevent.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/timeout.ts","../src/observing/timer.ts","../src/observing/transition.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/extendobject.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/singleton.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.helpers.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.helpers.ts","../src/structures/path/types.ts","../src/structures/path/utils/combineurls.ts","../src/structures/path/utils/index.ts","../src/structures/path/utils/indextrim.ts","../src/structures/path/utils/optionals.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validationerror.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
1
+ {"root":["../src/api/builder.ts","../src/api/call.config.ts","../src/api/call.ts","../src/api/call.types.ts","../src/api/config.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/hooks.ts","../src/api/index.ts","../src/api/interceptor.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/endpointhooks.ts","../src/api/extensions/formdata.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/debounce.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/lazy/extensions.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/empty.ts","../src/logger/index.ts","../src/logger/loggable.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/provider.ts","../src/logger/proxy.ts","../src/logger/types.ts","../src/logger/buffered/base.ts","../src/logger/buffered/buffered.logger.ts","../src/logger/buffered/buffered.memory.ts","../src/logger/buffered/index.ts","../src/logger/buffered/file/buffered.file.ts","../src/logger/buffered/file/index.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/debouncedevent.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/timeout.ts","../src/observing/timer.ts","../src/observing/transition.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/extendobject.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/singleton.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.helpers.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.helpers.ts","../src/structures/path/types.ts","../src/structures/path/utils/combineurls.ts","../src/structures/path/utils/index.ts","../src/structures/path/utils/indextrim.ts","../src/structures/path/utils/optionals.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/isplainobject.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validationerror.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
@@ -0,0 +1,89 @@
1
+ import type { ApiEndpoint } from '../endpoint.js';
2
+ import type { IEndpointInfo } from '../endpoint.types.js';
3
+ import type { CallerHooks } from '../hooks.js';
4
+ /**
5
+ * Serializer function that converts a plain object into a FormData instance (or similar body).
6
+ */
7
+ export type IFormDataSerializer = (data: Record<string, unknown>) => unknown;
8
+ /**
9
+ * Options for the default FormData serializer factory.
10
+ */
11
+ export interface FormDataSerializerOptions {
12
+ /**
13
+ * FormData constructor to use. Defaults to `globalThis.FormData`.
14
+ *
15
+ * Useful for:
16
+ * - Older Node.js versions using `form-data` npm package
17
+ * - Testing with mocks
18
+ */
19
+ FormData?: new () => FormData;
20
+ /**
21
+ * How to serialize non-primitive, non-Blob values (e.g., nested objects, arrays).
22
+ * - `'json'` (default): `JSON.stringify(value)`
23
+ * - Custom function: `(key, value) => string | Blob`
24
+ */
25
+ serializeValue?: 'json' | ((key: string, value: unknown) => string | Blob);
26
+ }
27
+ /**
28
+ * Creates a default FormData serializer.
29
+ *
30
+ * Iterates over own enumerable properties of the data object and appends them to a new FormData instance.
31
+ *
32
+ * - `Blob`/`File` values are appended as-is
33
+ * - `null`/`undefined` values are skipped
34
+ * - Primitive values are converted to strings
35
+ * - Objects/arrays are JSON-stringified by default (configurable via `serializeValue`)
36
+ */
37
+ export declare function createFormDataSerializer(options?: FormDataSerializerOptions): IFormDataSerializer;
38
+ /**
39
+ * FormData serialization extension for endpoint.
40
+ *
41
+ * Marks an endpoint to have its request body serialized as FormData before sending.
42
+ * Works with any HTTP transport (fetch, axios, etc.) — the library converts the plain object
43
+ * to FormData via a configurable serializer, so the transport receives a ready-to-send FormData body.
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * const Endpoint = ApiEndpoint.create.extend(IEndpointFormData.extender);
48
+ *
49
+ * const upload = Endpoint('Upload')
50
+ * .post<{ name: string, file: File }, { url: string }>()
51
+ * .asFormData();
52
+ * ```
53
+ */
54
+ export interface IEndpointFormData {
55
+ /** Whether this endpoint should serialize body data as FormData. `true` uses the default serializer; a function uses a custom one. */
56
+ readonly formData?: boolean | IFormDataSerializer;
57
+ /** Marks this endpoint to serialize request body as FormData using the provided (or default) serializer. */
58
+ asFormData(serializer?: IFormDataSerializer): this;
59
+ }
60
+ export declare namespace IEndpointFormData {
61
+ const extender: ApiEndpoint.IBuilderExtender<IEndpointFormData>;
62
+ function guard(api: IEndpointInfo): api is (IEndpointInfo & IEndpointFormData);
63
+ /**
64
+ * Creates caller hooks for FormData serialization.
65
+ *
66
+ * The hook converts `config.data` (plain object) into a FormData instance using the provided serializer.
67
+ *
68
+ * @param serializer - Default serializer used when endpoint has `.asFormData()` without a custom serializer.
69
+ * Use {@link createFormDataSerializer} for the built-in one, or provide a fully custom function.
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * // Simplest setup (global FormData, JSON-stringify objects)
74
+ * IEndpointFormData.createHooks(createFormDataSerializer())
75
+ *
76
+ * // Custom FormData constructor
77
+ * import FormDataNode from 'form-data';
78
+ * IEndpointFormData.createHooks(createFormDataSerializer({ FormData: FormDataNode as any }))
79
+ *
80
+ * // Fully custom serializer
81
+ * IEndpointFormData.createHooks((data) => {
82
+ * const fd = new FormData();
83
+ * // custom logic...
84
+ * return fd;
85
+ * })
86
+ * ```
87
+ */
88
+ function createHooks(serializer: IFormDataSerializer): CallerHooks<object>;
89
+ }
@@ -1,3 +1,4 @@
1
1
  export * from './contentType.js';
2
+ export * from './formData.js';
2
3
  export * from './validation.js';
3
4
  export * from './endpointHooks.js';
@@ -2,3 +2,4 @@ export * from './deep.js';
2
2
  export * from './getter.js';
3
3
  export * from './comparator.js';
4
4
  export * from './misc.js';
5
+ export * from './isPlainObject.js';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Checks if a value is a plain object (created by `{}`, `Object.create(null)`, or `new Object()`).
3
+ * Returns `false` for class instances like `FormData`, `Blob`, `Buffer`, etc.
4
+ */
5
+ export declare function isPlainObject(value: unknown): value is Record<string, unknown>;