@duplojs/utils 1.4.35 → 1.4.37

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.
Files changed (70) hide show
  1. package/dist/common/asserts.cjs +23 -0
  2. package/dist/common/asserts.d.ts +38 -0
  3. package/dist/common/asserts.mjs +20 -0
  4. package/dist/common/index.d.ts +2 -1
  5. package/dist/common/simpleClone.cjs +11 -4
  6. package/dist/common/simpleClone.mjs +11 -4
  7. package/dist/common/types/index.d.ts +1 -0
  8. package/dist/common/types/json.d.ts +4 -0
  9. package/dist/dataParser/base.cjs +17 -16
  10. package/dist/dataParser/base.d.ts +35 -3
  11. package/dist/dataParser/base.mjs +17 -16
  12. package/dist/dataParser/baseExtended.cjs +3 -0
  13. package/dist/dataParser/baseExtended.mjs +3 -0
  14. package/dist/dataParser/parsers/array/index.cjs +2 -2
  15. package/dist/dataParser/parsers/array/index.mjs +2 -2
  16. package/dist/dataParser/parsers/bigint/index.cjs +2 -2
  17. package/dist/dataParser/parsers/bigint/index.mjs +2 -2
  18. package/dist/dataParser/parsers/boolean.cjs +2 -2
  19. package/dist/dataParser/parsers/boolean.mjs +2 -2
  20. package/dist/dataParser/parsers/date.cjs +2 -2
  21. package/dist/dataParser/parsers/date.mjs +2 -2
  22. package/dist/dataParser/parsers/empty.cjs +2 -2
  23. package/dist/dataParser/parsers/empty.mjs +2 -2
  24. package/dist/dataParser/parsers/lazy.cjs +2 -2
  25. package/dist/dataParser/parsers/lazy.d.ts +1 -1
  26. package/dist/dataParser/parsers/lazy.mjs +2 -2
  27. package/dist/dataParser/parsers/literal.cjs +2 -2
  28. package/dist/dataParser/parsers/literal.mjs +2 -2
  29. package/dist/dataParser/parsers/nil.cjs +2 -2
  30. package/dist/dataParser/parsers/nil.mjs +2 -2
  31. package/dist/dataParser/parsers/nullable.cjs +2 -2
  32. package/dist/dataParser/parsers/nullable.d.ts +1 -1
  33. package/dist/dataParser/parsers/nullable.mjs +2 -2
  34. package/dist/dataParser/parsers/number/index.cjs +2 -2
  35. package/dist/dataParser/parsers/number/index.mjs +2 -2
  36. package/dist/dataParser/parsers/object/index.cjs +2 -2
  37. package/dist/dataParser/parsers/object/index.mjs +2 -2
  38. package/dist/dataParser/parsers/optional.cjs +2 -2
  39. package/dist/dataParser/parsers/optional.d.ts +1 -1
  40. package/dist/dataParser/parsers/optional.mjs +2 -2
  41. package/dist/dataParser/parsers/pipe.cjs +2 -2
  42. package/dist/dataParser/parsers/pipe.mjs +2 -2
  43. package/dist/dataParser/parsers/record/index.cjs +2 -2
  44. package/dist/dataParser/parsers/record/index.mjs +2 -2
  45. package/dist/dataParser/parsers/recover.cjs +2 -2
  46. package/dist/dataParser/parsers/recover.mjs +2 -2
  47. package/dist/dataParser/parsers/string/index.cjs +2 -2
  48. package/dist/dataParser/parsers/string/index.mjs +2 -2
  49. package/dist/dataParser/parsers/templateLiteral/index.cjs +2 -2
  50. package/dist/dataParser/parsers/templateLiteral/index.mjs +2 -2
  51. package/dist/dataParser/parsers/time/index.cjs +2 -2
  52. package/dist/dataParser/parsers/time/index.mjs +2 -2
  53. package/dist/dataParser/parsers/transform.cjs +2 -2
  54. package/dist/dataParser/parsers/transform.mjs +2 -2
  55. package/dist/dataParser/parsers/tuple.cjs +2 -2
  56. package/dist/dataParser/parsers/tuple.mjs +2 -2
  57. package/dist/dataParser/parsers/union.cjs +2 -2
  58. package/dist/dataParser/parsers/union.mjs +2 -2
  59. package/dist/dataParser/parsers/unknown.cjs +2 -2
  60. package/dist/dataParser/parsers/unknown.mjs +2 -2
  61. package/dist/index.cjs +3 -0
  62. package/dist/index.mjs +1 -0
  63. package/dist/metadata.json +21 -0
  64. package/dist/string/index.cjs +2 -0
  65. package/dist/string/index.d.ts +2 -1
  66. package/dist/string/index.mjs +1 -0
  67. package/dist/string/to.cjs +10 -0
  68. package/dist/string/to.d.ts +23 -0
  69. package/dist/string/to.mjs +8 -0
  70. package/package.json +1 -1
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var errorKindNamespace = require('./errorKindNamespace.cjs');
4
+ var kind = require('./kind.cjs');
5
+
6
+ class AssertsError extends kind.kindHeritage("asserts-error", errorKindNamespace.createErrorKind("asserts-error"), Error) {
7
+ value;
8
+ constructor(value) {
9
+ super({}, ["Asserts Error."]);
10
+ this.value = value;
11
+ }
12
+ }
13
+ /**
14
+ * {@include common/asserts/index.md}
15
+ */
16
+ function asserts(input, predicate) {
17
+ if (!predicate(input)) {
18
+ throw new AssertsError(input);
19
+ }
20
+ }
21
+
22
+ exports.AssertsError = AssertsError;
23
+ exports.asserts = asserts;
@@ -0,0 +1,38 @@
1
+ declare const AssertsError_base: new (params: {
2
+ "@DuplojsUtilsError/asserts-error"?: unknown;
3
+ }, parentParams: [message?: string | undefined, options?: ErrorOptions | undefined]) => Error & import("./kind").Kind<import("./kind").KindDefinition<"asserts-error", unknown>, unknown> & import("./kind").Kind<import("./kind").KindDefinition<"@DuplojsUtilsError/asserts-error", unknown>, unknown>;
4
+ export declare class AssertsError extends AssertsError_base {
5
+ value: unknown;
6
+ constructor(value: unknown);
7
+ }
8
+ /**
9
+ * The asserts() function throws when a predicate fails and narrows the input type when it passes.
10
+ *
11
+ * **Supported call styles:**
12
+ * - Classic: `asserts(input, predicate)` → narrows the input type or throws
13
+ *
14
+ * It throws an `AssertsError` with the failing input value.
15
+ *
16
+ * ```ts
17
+ * const input: string | number = "demo";
18
+ * asserts(input, isType("string"));
19
+ *
20
+ * const payload: { id?: number } = { id: 1 };
21
+ * asserts(payload.id, isType("undefined"));
22
+ *
23
+ * try {
24
+ * asserts(42 as string | number, isType("string"));
25
+ * } catch (error) {
26
+ * if (error instanceof AssertsError) {
27
+ * const failedValue = error.value;
28
+ * }
29
+ * }
30
+ * ```
31
+ *
32
+ * @see https://utils.duplojs.dev/en/v1/api/common/asserts
33
+ *
34
+ * @namespace C
35
+ *
36
+ */
37
+ export declare function asserts<GenericInput extends unknown, GenericPredicate extends GenericInput>(input: GenericInput, predicate: (input: GenericInput) => input is GenericPredicate): asserts input is GenericPredicate;
38
+ export {};
@@ -0,0 +1,20 @@
1
+ import { createErrorKind } from './errorKindNamespace.mjs';
2
+ import { kindHeritage } from './kind.mjs';
3
+
4
+ class AssertsError extends kindHeritage("asserts-error", createErrorKind("asserts-error"), Error) {
5
+ value;
6
+ constructor(value) {
7
+ super({}, ["Asserts Error."]);
8
+ this.value = value;
9
+ }
10
+ }
11
+ /**
12
+ * {@include common/asserts/index.md}
13
+ */
14
+ function asserts(input, predicate) {
15
+ if (!predicate(input)) {
16
+ throw new AssertsError(input);
17
+ }
18
+ }
19
+
20
+ export { AssertsError, asserts };
@@ -14,7 +14,7 @@
14
14
  *
15
15
  * What you will find in this namespace:
16
16
  * - composition helpers (`pipe`, `innerPipe`, `asyncPipe`, `asyncInnerPipe`, `forward`)
17
- * - predicates and guards (`when`, `whenNot`, `whenElse`, `and`, `or`, `isType`, `instanceOf`)
17
+ * - predicates and guards (`when`, `whenNot`, `whenElse`, `and`, `or`, `isType`, `asserts`, `instanceOf`)
18
18
  * - control flow (`loop`, `asyncLoop`, `asyncRetry`, `sleep`, `memo`)
19
19
  * - promise utilities (`externalPromise`, `promiseObject`)
20
20
  * - string and value conversions (`toString`, `stringToMillisecond`, `stringToBytes`, `escapeRegExp`)
@@ -74,3 +74,4 @@ export * from "./hasSomeKinds";
74
74
  export * from "./hasKinds";
75
75
  export * from "./toCurriedPredicate";
76
76
  export * from "./pipeCall";
77
+ export * from "./asserts";
@@ -12,10 +12,17 @@ function simpleClone(unknownValue) {
12
12
  }
13
13
  else if (unknownValue.constructor === undefined
14
14
  || unknownValue.constructor.name === "Object") {
15
- return Object.entries(unknownValue).reduce((pv, [key, value]) => {
16
- pv[key] = simpleClone(value);
17
- return pv;
18
- }, {});
15
+ const result = {};
16
+ for (const key in unknownValue) {
17
+ const desc = Object.getOwnPropertyDescriptor(unknownValue, key);
18
+ if (desc?.set || desc?.get) {
19
+ Object.defineProperty(result, key, desc);
20
+ }
21
+ else {
22
+ result[key] = simpleClone(unknownValue[key]);
23
+ }
24
+ }
25
+ return result;
19
26
  }
20
27
  else if (unknownValue instanceof Array && unknownValue.constructor.name === "Array") {
21
28
  return unknownValue.map(simpleClone);
@@ -10,10 +10,17 @@ function simpleClone(unknownValue) {
10
10
  }
11
11
  else if (unknownValue.constructor === undefined
12
12
  || unknownValue.constructor.name === "Object") {
13
- return Object.entries(unknownValue).reduce((pv, [key, value]) => {
14
- pv[key] = simpleClone(value);
15
- return pv;
16
- }, {});
13
+ const result = {};
14
+ for (const key in unknownValue) {
15
+ const desc = Object.getOwnPropertyDescriptor(unknownValue, key);
16
+ if (desc?.set || desc?.get) {
17
+ Object.defineProperty(result, key, desc);
18
+ }
19
+ else {
20
+ result[key] = simpleClone(unknownValue[key]);
21
+ }
22
+ }
23
+ return result;
17
24
  }
18
25
  else if (unknownValue instanceof Array && unknownValue.constructor.name === "Array") {
19
26
  return unknownValue.map(simpleClone);
@@ -44,3 +44,4 @@ export * from "./sortType";
44
44
  export * from "./maybeGetter";
45
45
  export * from "./falsyValue";
46
46
  export * from "./DeepReadonly";
47
+ export * from "./json";
@@ -0,0 +1,4 @@
1
+ import { type MaybeArray } from "./maybeArray";
2
+ export type Json = MaybeArray<string | undefined | boolean | number | null | {
3
+ [key: string]: Json;
4
+ }>;
@@ -27,7 +27,7 @@ const DPE = error.createError();
27
27
  const EE = error$1.error(null);
28
28
  const ES = success.success(null);
29
29
  const KWV = wrapValue.keyWrappedValue;
30
- function dataParserInit(kind, definition, exec) {
30
+ function dataParserInit(kind, definition, exec, specificOverrideHandler) {
31
31
  const formattedExec = typeof exec === "object"
32
32
  ? exec
33
33
  : {
@@ -35,18 +35,18 @@ function dataParserInit(kind, definition, exec) {
35
35
  async: exec,
36
36
  };
37
37
  function middleExec(data, error$1) {
38
- let result = formattedExec.sync(data, error$1, dataParser);
38
+ let result = formattedExec.sync(data, error$1, self);
39
39
  if (result === SDPEI) {
40
- error.addIssue(error$1, dataParser, data);
40
+ error.addIssue(error$1, self, data);
41
41
  return SDPE;
42
42
  }
43
43
  else if (result === SDPEPI) {
44
- error.addPromiseIssue(error$1, dataParser, data);
44
+ error.addPromiseIssue(error$1, self, data);
45
45
  return SDPE;
46
46
  }
47
47
  else if (result !== SDPE
48
- && dataParser.definition.checkers.length) {
49
- for (const checker of dataParser.definition.checkers) {
48
+ && self.definition.checkers.length) {
49
+ for (const checker of self.definition.checkers) {
50
50
  const checkerResult = checker.exec(result, checker);
51
51
  if (checkerResult === SDPEI) {
52
52
  error.addIssue(error$1, checker, result);
@@ -60,18 +60,18 @@ function dataParserInit(kind, definition, exec) {
60
60
  return result;
61
61
  }
62
62
  async function middleAsyncExec(data, error$1) {
63
- let result = await formattedExec.async(data, error$1, dataParser);
63
+ let result = await formattedExec.async(data, error$1, self);
64
64
  if (result === SDPEI) {
65
- error.addIssue(error$1, dataParser, data);
65
+ error.addIssue(error$1, self, data);
66
66
  return SDPE;
67
67
  }
68
68
  else if (result === SDPEPI) {
69
- error.addPromiseIssue(error$1, dataParser, data);
69
+ error.addPromiseIssue(error$1, self, data);
70
70
  return SDPE;
71
71
  }
72
72
  else if (result !== SDPE
73
- && dataParser.definition.checkers.length) {
74
- for (const checker of dataParser.definition.checkers) {
73
+ && self.definition.checkers.length) {
74
+ for (const checker of self.definition.checkers) {
75
75
  const checkerResult = checker.exec(result, checker);
76
76
  if (checkerResult === SDPEI) {
77
77
  error.addIssue(error$1, checker, result);
@@ -84,7 +84,7 @@ function dataParserInit(kind, definition, exec) {
84
84
  }
85
85
  return result;
86
86
  }
87
- const dataParser = pipe.pipe({
87
+ const self = pipe.pipe({
88
88
  definition,
89
89
  exec: middleExec,
90
90
  asyncExec: middleAsyncExec,
@@ -127,10 +127,11 @@ function dataParserInit(kind, definition, exec) {
127
127
  addChecker: (...checkers) => dataParserInit(kind, simpleClone.simpleClone({
128
128
  ...definition,
129
129
  checkers: [...definition.checkers, ...checkers],
130
- }), exec),
131
- clone: () => dataParserInit(kind, simpleClone.simpleClone(definition), exec),
132
- }, (value) => dataParserKind.setTo(value, null), kind.setTo, dataParserInit.overrideHandler.apply);
133
- return dataParser;
130
+ }), exec, specificOverrideHandler),
131
+ clone: () => dataParserInit(kind, simpleClone.simpleClone(definition), exec, specificOverrideHandler),
132
+ contract: () => self,
133
+ }, (value) => dataParserKind.setTo(value, null), kind.setTo, (value) => dataParserInit.overrideHandler.apply(value), (value) => specificOverrideHandler.apply(value));
134
+ return self;
134
135
  }
135
136
  dataParserInit.overrideHandler = override.createOverride("@duplojs/utils/data-parser/base");
136
137
 
@@ -1,4 +1,4 @@
1
- import { type GetKindHandler, type GetKindValue, type Kind, type KindHandler, type RemoveKind } from "../common";
1
+ import { type GetKindHandler, type GetKindValue, type IsEqual, type Kind, type KindHandler, type OverrideHandler, type RemoveKind } from "../common";
2
2
  import { SymbolDataParserErrorIssue, SymbolDataParserErrorPromiseIssue, type DataParserError } from "./error";
3
3
  import * as DEither from "../either";
4
4
  export declare const SymbolDataParserErrorLabel = "SymbolDataParserError";
@@ -22,6 +22,7 @@ export interface DataParserDefinition<GenericChecker extends DataParserChecker =
22
22
  readonly errorMessage?: string;
23
23
  readonly checkers: readonly GenericChecker[];
24
24
  }
25
+ declare const SymbolContractError: unique symbol;
25
26
  export interface DataParser<GenericDefinition extends DataParserDefinition = DataParserDefinition, GenericOutput extends unknown = unknown, GenericInput extends unknown = GenericOutput> extends Kind<typeof dataParserKind.definition, {
26
27
  input: GenericInput;
27
28
  output: GenericOutput;
@@ -137,14 +138,45 @@ export interface DataParser<GenericDefinition extends DataParserDefinition = Dat
137
138
  *
138
139
  */
139
140
  clone(): this;
141
+ /**
142
+ * The contract() method validates that the parser output type exactly matches the type you want to assign it to.
143
+ *
144
+ * **Supported call styles:**
145
+ * - Method: `dataParser.contract<Output>()` -> returns the same parser if types match
146
+ *
147
+ * It does not change runtime behavior; it enforces at compile time that the parser output type and the expected type are exactly the same.
148
+ *
149
+ * ```ts
150
+ * interface User {
151
+ * id: number;
152
+ * name: string;
153
+ * }
154
+ *
155
+ * const userParser: DP.Contract<User> = DP.object({
156
+ * id: DP.number(),
157
+ * name: DP.string(),
158
+ * }).contract();
159
+ *
160
+ * const statusParser: DP.Contract<"draft" | "published">
161
+ * = DP.literal(["draft", "published"]).contract();
162
+ * ```
163
+ *
164
+ * @see https://utils.duplojs.dev/en/v1/api/dataParser
165
+ *
166
+ * @namespace DP
167
+ *
168
+ */
169
+ contract<GenericValue extends unknown>(...args: IsEqual<Output<this>, GenericValue> extends true ? [] : [] & {
170
+ [SymbolContractError]: "Contract error.";
171
+ }): Contract<GenericValue>;
140
172
  }
141
173
  interface DataParserInitExecParams<GenericDataParser extends DataParser> {
142
174
  sync(...args: [...Parameters<GenericDataParser["exec"]>, self: GenericDataParser]): (GetKindValue<typeof dataParserKind, GenericDataParser>["output"] | SymbolDataParserErrorIssue | SymbolDataParserErrorPromiseIssue);
143
175
  async(...args: [...Parameters<GenericDataParser["exec"]>, self: GenericDataParser]): Promise<GetKindValue<typeof dataParserKind, GenericDataParser>["output"] | SymbolDataParserErrorIssue | SymbolDataParserErrorPromiseIssue>;
144
176
  }
145
- export declare function dataParserInit<GenericDataParser extends DataParser>(kind: Exclude<GetKindHandler<GenericDataParser>, typeof dataParserKind>, definition: GenericDataParser["definition"], exec: (DataParserInitExecParams<GenericDataParser> | DataParserInitExecParams<GenericDataParser>["sync"])): GenericDataParser;
177
+ export declare function dataParserInit<GenericDataParser extends DataParser>(kind: Exclude<GetKindHandler<GenericDataParser>, typeof dataParserKind>, definition: GenericDataParser["definition"], exec: (DataParserInitExecParams<GenericDataParser> | DataParserInitExecParams<GenericDataParser>["sync"]), specificOverrideHandler: OverrideHandler<GenericDataParser>): GenericDataParser;
146
178
  export declare namespace dataParserInit {
147
- var overrideHandler: import("../common").OverrideHandler<DataParser<DataParserDefinition<DataParserChecker<DataParserCheckerDefinition, unknown>>, unknown, unknown>>;
179
+ var overrideHandler: OverrideHandler<DataParser<DataParserDefinition<DataParserChecker<DataParserCheckerDefinition, unknown>>, unknown, unknown>>;
148
180
  }
149
181
  export type Output<GenericDataParser extends DataParser> = GetKindValue<typeof dataParserKind, GenericDataParser>["output"];
150
182
  export type Input<GenericDataParser extends DataParser> = GetKindValue<typeof dataParserKind, GenericDataParser>["input"];
@@ -25,7 +25,7 @@ const DPE = createError();
25
25
  const EE = error(null);
26
26
  const ES = success(null);
27
27
  const KWV = keyWrappedValue;
28
- function dataParserInit(kind, definition, exec) {
28
+ function dataParserInit(kind, definition, exec, specificOverrideHandler) {
29
29
  const formattedExec = typeof exec === "object"
30
30
  ? exec
31
31
  : {
@@ -33,18 +33,18 @@ function dataParserInit(kind, definition, exec) {
33
33
  async: exec,
34
34
  };
35
35
  function middleExec(data, error) {
36
- let result = formattedExec.sync(data, error, dataParser);
36
+ let result = formattedExec.sync(data, error, self);
37
37
  if (result === SDPEI) {
38
- addIssue(error, dataParser, data);
38
+ addIssue(error, self, data);
39
39
  return SDPE;
40
40
  }
41
41
  else if (result === SDPEPI) {
42
- addPromiseIssue(error, dataParser, data);
42
+ addPromiseIssue(error, self, data);
43
43
  return SDPE;
44
44
  }
45
45
  else if (result !== SDPE
46
- && dataParser.definition.checkers.length) {
47
- for (const checker of dataParser.definition.checkers) {
46
+ && self.definition.checkers.length) {
47
+ for (const checker of self.definition.checkers) {
48
48
  const checkerResult = checker.exec(result, checker);
49
49
  if (checkerResult === SDPEI) {
50
50
  addIssue(error, checker, result);
@@ -58,18 +58,18 @@ function dataParserInit(kind, definition, exec) {
58
58
  return result;
59
59
  }
60
60
  async function middleAsyncExec(data, error) {
61
- let result = await formattedExec.async(data, error, dataParser);
61
+ let result = await formattedExec.async(data, error, self);
62
62
  if (result === SDPEI) {
63
- addIssue(error, dataParser, data);
63
+ addIssue(error, self, data);
64
64
  return SDPE;
65
65
  }
66
66
  else if (result === SDPEPI) {
67
- addPromiseIssue(error, dataParser, data);
67
+ addPromiseIssue(error, self, data);
68
68
  return SDPE;
69
69
  }
70
70
  else if (result !== SDPE
71
- && dataParser.definition.checkers.length) {
72
- for (const checker of dataParser.definition.checkers) {
71
+ && self.definition.checkers.length) {
72
+ for (const checker of self.definition.checkers) {
73
73
  const checkerResult = checker.exec(result, checker);
74
74
  if (checkerResult === SDPEI) {
75
75
  addIssue(error, checker, result);
@@ -82,7 +82,7 @@ function dataParserInit(kind, definition, exec) {
82
82
  }
83
83
  return result;
84
84
  }
85
- const dataParser = pipe({
85
+ const self = pipe({
86
86
  definition,
87
87
  exec: middleExec,
88
88
  asyncExec: middleAsyncExec,
@@ -125,10 +125,11 @@ function dataParserInit(kind, definition, exec) {
125
125
  addChecker: (...checkers) => dataParserInit(kind, simpleClone({
126
126
  ...definition,
127
127
  checkers: [...definition.checkers, ...checkers],
128
- }), exec),
129
- clone: () => dataParserInit(kind, simpleClone(definition), exec),
130
- }, (value) => dataParserKind.setTo(value, null), kind.setTo, dataParserInit.overrideHandler.apply);
131
- return dataParser;
128
+ }), exec, specificOverrideHandler),
129
+ clone: () => dataParserInit(kind, simpleClone(definition), exec, specificOverrideHandler),
130
+ contract: () => self,
131
+ }, (value) => dataParserKind.setTo(value, null), kind.setTo, (value) => dataParserInit.overrideHandler.apply(value), (value) => specificOverrideHandler.apply(value));
132
+ return self;
132
133
  }
133
134
  dataParserInit.overrideHandler = createOverride("@duplojs/utils/data-parser/base");
134
135
 
@@ -59,6 +59,9 @@ function dataParserExtendedInit(dataParser, rest) {
59
59
  recover(recoveredValue, definition) {
60
60
  return recover.recover(self, recoveredValue, definition);
61
61
  },
62
+ contract() {
63
+ return self;
64
+ },
62
65
  }, extendedKind.setTo, dataParserExtendedInit.overrideHandler.apply);
63
66
  return self;
64
67
  }
@@ -57,6 +57,9 @@ function dataParserExtendedInit(dataParser, rest) {
57
57
  recover(recoveredValue, definition) {
58
58
  return recover(self, recoveredValue, definition);
59
59
  },
60
+ contract() {
61
+ return self;
62
+ },
60
63
  }, extendedKind.setTo, dataParserExtendedInit.overrideHandler.apply);
61
64
  return self;
62
65
  }
@@ -59,8 +59,8 @@ function array(element, definition) {
59
59
  void (data.length && error.popErrorPath(error$1));
60
60
  return output;
61
61
  },
62
- });
63
- return array.overrideHandler.apply(self);
62
+ }, array.overrideHandler);
63
+ return self;
64
64
  }
65
65
  array.overrideHandler = override.createOverride("@duplojs/utils/data-parser/array");
66
66
 
@@ -57,8 +57,8 @@ function array(element, definition) {
57
57
  void (data.length && popErrorPath(error));
58
58
  return output;
59
59
  },
60
- });
61
- return array.overrideHandler.apply(self);
60
+ }, array.overrideHandler);
61
+ return self;
62
62
  }
63
63
  array.overrideHandler = createOverride("@duplojs/utils/data-parser/array");
64
64
 
@@ -26,8 +26,8 @@ function bigint(definition) {
26
26
  return data;
27
27
  }
28
28
  return error.SymbolDataParserErrorIssue;
29
- });
30
- return bigint.overrideHandler.apply(self);
29
+ }, bigint.overrideHandler);
30
+ return self;
31
31
  }
32
32
  bigint.overrideHandler = override.createOverride("@duplojs/utils/data-parser/bigint");
33
33
 
@@ -24,8 +24,8 @@ function bigint(definition) {
24
24
  return data;
25
25
  }
26
26
  return SymbolDataParserErrorIssue;
27
- });
28
- return bigint.overrideHandler.apply(self);
27
+ }, bigint.overrideHandler);
28
+ return self;
29
29
  }
30
30
  bigint.overrideHandler = createOverride("@duplojs/utils/data-parser/bigint");
31
31
 
@@ -35,8 +35,8 @@ function boolean(definition) {
35
35
  }
36
36
  }
37
37
  return error.SymbolDataParserErrorIssue;
38
- });
39
- return boolean.overrideHandler.apply(self);
38
+ }, boolean.overrideHandler);
39
+ return self;
40
40
  }
41
41
  boolean.overrideHandler = override.createOverride("@duplojs/utils/data-parser/boolean");
42
42
 
@@ -33,8 +33,8 @@ function boolean(definition) {
33
33
  }
34
34
  }
35
35
  return SymbolDataParserErrorIssue;
36
- });
37
- return boolean.overrideHandler.apply(self);
36
+ }, boolean.overrideHandler);
37
+ return self;
38
38
  }
39
39
  boolean.overrideHandler = createOverride("@duplojs/utils/data-parser/boolean");
40
40
 
@@ -44,8 +44,8 @@ function date(definition) {
44
44
  return data;
45
45
  }
46
46
  return error.SymbolDataParserErrorIssue;
47
- });
48
- return date.overrideHandler.apply(self);
47
+ }, date.overrideHandler);
48
+ return self;
49
49
  }
50
50
  date.overrideHandler = override.createOverride("@duplojs/utils/data-parser/date");
51
51
 
@@ -42,8 +42,8 @@ function date(definition) {
42
42
  return data;
43
43
  }
44
44
  return SymbolDataParserErrorIssue;
45
- });
46
- return date.overrideHandler.apply(self);
45
+ }, date.overrideHandler);
46
+ return self;
47
47
  }
48
48
  date.overrideHandler = createOverride("@duplojs/utils/data-parser/date");
49
49
 
@@ -22,8 +22,8 @@ function empty(definition) {
22
22
  return undefined;
23
23
  }
24
24
  return error.SymbolDataParserErrorIssue;
25
- });
26
- return empty.overrideHandler.apply(self);
25
+ }, empty.overrideHandler);
26
+ return self;
27
27
  }
28
28
  empty.overrideHandler = override.createOverride("@duplojs/utils/data-parser/empty");
29
29
 
@@ -20,8 +20,8 @@ function empty(definition) {
20
20
  return undefined;
21
21
  }
22
22
  return SymbolDataParserErrorIssue;
23
- });
24
- return empty.overrideHandler.apply(self);
23
+ }, empty.overrideHandler);
24
+ return self;
25
25
  }
26
26
  empty.overrideHandler = createOverride("@duplojs/utils/data-parser/empty");
27
27
 
@@ -17,8 +17,8 @@ function lazy(getter, definition) {
17
17
  }, {
18
18
  sync: (data, _error, self) => self.definition.getter.value.exec(data, _error),
19
19
  async: (data, _error, self) => self.definition.getter.value.asyncExec(data, _error),
20
- });
21
- return lazy.overrideHandler.apply(self);
20
+ }, lazy.overrideHandler);
21
+ return self;
22
22
  }
23
23
  lazy.overrideHandler = override.createOverride("@duplojs/utils/data-parser/lazy");
24
24
 
@@ -63,6 +63,6 @@ export declare function lazy<GenericDataParser extends DataParser, const Generic
63
63
  getter: Memoized<GenericDataParser>;
64
64
  }>>;
65
65
  export declare namespace lazy {
66
- var overrideHandler: import("../../common").OverrideHandler<DataParserLazyCheckerCustom<unknown>>;
66
+ var overrideHandler: import("../../common").OverrideHandler<DataParserLazy<DataParserDefinitionLazy>>;
67
67
  }
68
68
  export {};
@@ -15,8 +15,8 @@ function lazy(getter, definition) {
15
15
  }, {
16
16
  sync: (data, _error, self) => self.definition.getter.value.exec(data, _error),
17
17
  async: (data, _error, self) => self.definition.getter.value.asyncExec(data, _error),
18
- });
19
- return lazy.overrideHandler.apply(self);
18
+ }, lazy.overrideHandler);
19
+ return self;
20
20
  }
21
21
  lazy.overrideHandler = createOverride("@duplojs/utils/data-parser/lazy");
22
22
 
@@ -20,8 +20,8 @@ function literal(value, definition) {
20
20
  return data;
21
21
  }
22
22
  return error.SymbolDataParserErrorIssue;
23
- });
24
- return literal.overrideHandler.apply(self);
23
+ }, literal.overrideHandler);
24
+ return self;
25
25
  }
26
26
  literal.overrideHandler = override.createOverride("@duplojs/utils/data-parser/literal");
27
27
 
@@ -18,8 +18,8 @@ function literal(value, definition) {
18
18
  return data;
19
19
  }
20
20
  return SymbolDataParserErrorIssue;
21
- });
22
- return literal.overrideHandler.apply(self);
21
+ }, literal.overrideHandler);
22
+ return self;
23
23
  }
24
24
  literal.overrideHandler = createOverride("@duplojs/utils/data-parser/literal");
25
25
 
@@ -22,8 +22,8 @@ function nil(definition) {
22
22
  return null;
23
23
  }
24
24
  return error.SymbolDataParserErrorIssue;
25
- });
26
- return nil.overrideHandler.apply(self);
25
+ }, nil.overrideHandler);
26
+ return self;
27
27
  }
28
28
  nil.overrideHandler = override.createOverride("@duplojs/utils/data-parser/nil");
29
29
 
@@ -20,8 +20,8 @@ function nil(definition) {
20
20
  return null;
21
21
  }
22
22
  return SymbolDataParserErrorIssue;
23
- });
24
- return nil.overrideHandler.apply(self);
23
+ }, nil.overrideHandler);
24
+ return self;
25
25
  }
26
26
  nil.overrideHandler = createOverride("@duplojs/utils/data-parser/nil");
27
27
 
@@ -27,8 +27,8 @@ function nullable(inner, definition) {
27
27
  }
28
28
  return self.definition.inner.asyncExec(data, error);
29
29
  },
30
- });
31
- return nullable.overrideHandler.apply(self);
30
+ }, nullable.overrideHandler);
31
+ return self;
32
32
  }
33
33
  nullable.overrideHandler = override.createOverride("@duplojs/utils/data-parser/nullable");
34
34
 
@@ -51,7 +51,7 @@ export interface DataParserNullable<GenericDefinition extends DataParserDefiniti
51
51
  * @namespace DP
52
52
  *
53
53
  */
54
- export declare function nullable<GenericDataParser extends DataParser, const GenericDefinition extends Partial<Omit<DataParserDefinitionNullable<Output<GenericDataParser> | null>, "inner">> = never>(inner: GenericDataParser, definition?: GenericDefinition): DataParserNullable<MergeDefinition<DataParserDefinitionNullable, NeverCoalescing<GenericDefinition, {}> & {
54
+ export declare function nullable<GenericDataParser extends DataParser, const GenericDefinition extends Partial<Omit<DataParserDefinitionNullable<Output<GenericDataParser>>, "inner">> = never>(inner: GenericDataParser, definition?: GenericDefinition): DataParserNullable<MergeDefinition<DataParserDefinitionNullable, NeverCoalescing<GenericDefinition, {}> & {
55
55
  inner: GenericDataParser;
56
56
  }>>;
57
57
  export declare namespace nullable {
@@ -25,8 +25,8 @@ function nullable(inner, definition) {
25
25
  }
26
26
  return self.definition.inner.asyncExec(data, error);
27
27
  },
28
- });
29
- return nullable.overrideHandler.apply(self);
28
+ }, nullable.overrideHandler);
29
+ return self;
30
30
  }
31
31
  nullable.overrideHandler = createOverride("@duplojs/utils/data-parser/nullable");
32
32
 
@@ -26,8 +26,8 @@ function number(definition) {
26
26
  return data;
27
27
  }
28
28
  return error.SymbolDataParserErrorIssue;
29
- });
30
- return number.overrideHandler.apply(self);
29
+ }, number.overrideHandler);
30
+ return self;
31
31
  }
32
32
  number.overrideHandler = override.createOverride("@duplojs/utils/data-parser/number");
33
33
 
@@ -24,8 +24,8 @@ function number(definition) {
24
24
  return data;
25
25
  }
26
26
  return SymbolDataParserErrorIssue;
27
- });
28
- return number.overrideHandler.apply(self);
27
+ }, number.overrideHandler);
28
+ return self;
29
29
  }
30
30
  number.overrideHandler = createOverride("@duplojs/utils/data-parser/number");
31
31
 
@@ -69,8 +69,8 @@ function object(shape, definition) {
69
69
  void (self.definition.optimizedShape.value.length && error.popErrorPath(error$1));
70
70
  return output;
71
71
  },
72
- });
73
- return object.overrideHandler.apply(self);
72
+ }, object.overrideHandler);
73
+ return self;
74
74
  }
75
75
  object.overrideHandler = override.createOverride("@duplojs/utils/data-parser/object");
76
76
 
@@ -67,8 +67,8 @@ function object(shape, definition) {
67
67
  void (self.definition.optimizedShape.value.length && popErrorPath(error));
68
68
  return output;
69
69
  },
70
- });
71
- return object.overrideHandler.apply(self);
70
+ }, object.overrideHandler);
71
+ return self;
72
72
  }
73
73
  object.overrideHandler = createOverride("@duplojs/utils/data-parser/object");
74
74
 
@@ -27,8 +27,8 @@ function optional(inner, definition) {
27
27
  }
28
28
  return self.definition.inner.asyncExec(data, error);
29
29
  },
30
- });
31
- return optional.overrideHandler.apply(self);
30
+ }, optional.overrideHandler);
31
+ return self;
32
32
  }
33
33
  optional.overrideHandler = override.createOverride("@duplojs/utils/data-parser/optional");
34
34
 
@@ -51,7 +51,7 @@ export interface DataParserOptional<GenericDefinition extends DataParserDefiniti
51
51
  * @namespace DP
52
52
  *
53
53
  */
54
- export declare function optional<GenericDataParser extends DataParser, const GenericDefinition extends Partial<Omit<DataParserDefinitionOptional<Output<GenericDataParser> | undefined>, "inner">> = never>(inner: GenericDataParser, definition?: GenericDefinition): DataParserOptional<MergeDefinition<DataParserDefinitionOptional, NeverCoalescing<GenericDefinition, {}> & {
54
+ export declare function optional<GenericDataParser extends DataParser, const GenericDefinition extends Partial<Omit<DataParserDefinitionOptional<Output<GenericDataParser>>, "inner">> = never>(inner: GenericDataParser, definition?: GenericDefinition): DataParserOptional<MergeDefinition<DataParserDefinitionOptional, NeverCoalescing<GenericDefinition, {}> & {
55
55
  inner: GenericDataParser;
56
56
  }>>;
57
57
  export declare namespace optional {
@@ -25,8 +25,8 @@ function optional(inner, definition) {
25
25
  }
26
26
  return self.definition.inner.asyncExec(data, error);
27
27
  },
28
- });
29
- return optional.overrideHandler.apply(self);
28
+ }, optional.overrideHandler);
29
+ return self;
30
30
  }
31
31
  optional.overrideHandler = createOverride("@duplojs/utils/data-parser/optional");
32
32
 
@@ -29,8 +29,8 @@ function pipe(input, output, definition) {
29
29
  }
30
30
  return self.definition.output.asyncExec(result, error);
31
31
  },
32
- });
33
- return pipe.overrideHandler.apply(self);
32
+ }, pipe.overrideHandler);
33
+ return self;
34
34
  }
35
35
  pipe.overrideHandler = override.createOverride("@duplojs/utils/data-parser/pipe");
36
36
 
@@ -27,8 +27,8 @@ function pipe(input, output, definition) {
27
27
  }
28
28
  return self.definition.output.asyncExec(result, error);
29
29
  },
30
- });
31
- return pipe.overrideHandler.apply(self);
30
+ }, pipe.overrideHandler);
31
+ return self;
32
32
  }
33
33
  pipe.overrideHandler = createOverride("@duplojs/utils/data-parser/pipe");
34
34
 
@@ -94,8 +94,8 @@ function record(key, value, definition) {
94
94
  }
95
95
  return output;
96
96
  },
97
- });
98
- return record.overrideHandler.apply(self);
97
+ }, record.overrideHandler);
98
+ return self;
99
99
  }
100
100
  record.overrideHandler = override.createOverride("@duplojs/utils/data-parser/record");
101
101
 
@@ -93,8 +93,8 @@ function record(key, value, definition) {
93
93
  }
94
94
  return output;
95
95
  },
96
- });
97
- return record.overrideHandler.apply(self);
96
+ }, record.overrideHandler);
97
+ return self;
98
98
  }
99
99
  record.overrideHandler = createOverride("@duplojs/utils/data-parser/record");
100
100
 
@@ -27,8 +27,8 @@ function recover(inner, recoveredValue, definition) {
27
27
  ? self.definition.recoveredValue
28
28
  : result;
29
29
  },
30
- });
31
- return recover.overrideHandler.apply(self);
30
+ }, recover.overrideHandler);
31
+ return self;
32
32
  }
33
33
  recover.overrideHandler = override.createOverride("@duplojs/utils/data-parser/recover");
34
34
 
@@ -25,8 +25,8 @@ function recover(inner, recoveredValue, definition) {
25
25
  ? self.definition.recoveredValue
26
26
  : result;
27
27
  },
28
- });
29
- return recover.overrideHandler.apply(self);
28
+ }, recover.overrideHandler);
29
+ return self;
30
30
  }
31
31
  recover.overrideHandler = createOverride("@duplojs/utils/data-parser/recover");
32
32
 
@@ -26,8 +26,8 @@ function string(definition) {
26
26
  return data;
27
27
  }
28
28
  return error.SymbolDataParserErrorIssue;
29
- });
30
- return string.overrideHandler.apply(self);
29
+ }, string.overrideHandler);
30
+ return self;
31
31
  }
32
32
  string.overrideHandler = override.createOverride("@duplojs/utils/data-parser/string");
33
33
 
@@ -24,8 +24,8 @@ function string(definition) {
24
24
  return data;
25
25
  }
26
26
  return SymbolDataParserErrorIssue;
27
- });
28
- return string.overrideHandler.apply(self);
27
+ }, string.overrideHandler);
28
+ return self;
29
29
  }
30
30
  string.overrideHandler = createOverride("@duplojs/utils/data-parser/string");
31
31
 
@@ -23,8 +23,8 @@ function templateLiteral(template, definition) {
23
23
  return data;
24
24
  }
25
25
  return error.SymbolDataParserErrorIssue;
26
- });
27
- return templateLiteral.overrideHandler.apply(self);
26
+ }, templateLiteral.overrideHandler);
27
+ return self;
28
28
  }
29
29
  templateLiteral.overrideHandler = override.createOverride("@duplojs/utils/data-parser/templateLiteral");
30
30
 
@@ -21,8 +21,8 @@ function templateLiteral(template, definition) {
21
21
  return data;
22
22
  }
23
23
  return SymbolDataParserErrorIssue;
24
- });
25
- return templateLiteral.overrideHandler.apply(self);
24
+ }, templateLiteral.overrideHandler);
25
+ return self;
26
26
  }
27
27
  templateLiteral.overrideHandler = createOverride("@duplojs/utils/data-parser/templateLiteral");
28
28
 
@@ -41,8 +41,8 @@ function time(definition) {
41
41
  return data;
42
42
  }
43
43
  return error.SymbolDataParserErrorIssue;
44
- });
45
- return time.overrideHandler.apply(self);
44
+ }, time.overrideHandler);
45
+ return self;
46
46
  }
47
47
  time.overrideHandler = override.createOverride("@duplojs/utils/data-parser/time");
48
48
 
@@ -39,8 +39,8 @@ function time(definition) {
39
39
  return data;
40
40
  }
41
41
  return SymbolDataParserErrorIssue;
42
- });
43
- return time.overrideHandler.apply(self);
42
+ }, time.overrideHandler);
43
+ return self;
44
44
  }
45
45
  time.overrideHandler = createOverride("@duplojs/utils/data-parser/time");
46
46
 
@@ -38,8 +38,8 @@ function transform(inner, theFunction, definition) {
38
38
  }
39
39
  return result;
40
40
  },
41
- });
42
- return transform.overrideHandler.apply(self);
41
+ }, transform.overrideHandler);
42
+ return self;
43
43
  }
44
44
  transform.overrideHandler = override.createOverride("@duplojs/utils/data-parser/transform");
45
45
 
@@ -36,8 +36,8 @@ function transform(inner, theFunction, definition) {
36
36
  }
37
37
  return result;
38
38
  },
39
- });
40
- return transform.overrideHandler.apply(self);
39
+ }, transform.overrideHandler);
40
+ return self;
41
41
  }
42
42
  transform.overrideHandler = createOverride("@duplojs/utils/data-parser/transform");
43
43
 
@@ -78,8 +78,8 @@ function tuple(shape, definition) {
78
78
  void (self.definition.shape.length && error.popErrorPath(error$1));
79
79
  return output;
80
80
  },
81
- });
82
- return tuple.overrideHandler.apply(self);
81
+ }, tuple.overrideHandler);
82
+ return self;
83
83
  }
84
84
  tuple.overrideHandler = override.createOverride("@duplojs/utils/data-parser/tuple");
85
85
 
@@ -76,8 +76,8 @@ function tuple(shape, definition) {
76
76
  void (self.definition.shape.length && popErrorPath(error));
77
77
  return output;
78
78
  },
79
- });
80
- return tuple.overrideHandler.apply(self);
79
+ }, tuple.overrideHandler);
80
+ return self;
81
81
  }
82
82
  tuple.overrideHandler = createOverride("@duplojs/utils/data-parser/tuple");
83
83
 
@@ -33,8 +33,8 @@ function union(options, definition) {
33
33
  }
34
34
  return error.SymbolDataParserErrorIssue;
35
35
  },
36
- });
37
- return union.overrideHandler.apply(self);
36
+ }, union.overrideHandler);
37
+ return self;
38
38
  }
39
39
  union.overrideHandler = override.createOverride("@duplojs/utils/data-parser/union");
40
40
 
@@ -31,8 +31,8 @@ function union(options, definition) {
31
31
  }
32
32
  return SymbolDataParserErrorIssue;
33
33
  },
34
- });
35
- return union.overrideHandler.apply(self);
34
+ }, union.overrideHandler);
35
+ return self;
36
36
  }
37
37
  union.overrideHandler = createOverride("@duplojs/utils/data-parser/union");
38
38
 
@@ -12,8 +12,8 @@ function unknown(definition) {
12
12
  const self = base.dataParserInit(unknownKind, {
13
13
  errorMessage: definition?.errorMessage,
14
14
  checkers: definition?.checkers ?? [],
15
- }, (data) => data);
16
- return unknown.overrideHandler.apply(self);
15
+ }, (data) => data, unknown.overrideHandler);
16
+ return self;
17
17
  }
18
18
  unknown.overrideHandler = override.createOverride("@duplojs/utils/data-parser/unknown");
19
19
 
@@ -10,8 +10,8 @@ function unknown(definition) {
10
10
  const self = dataParserInit(unknownKind, {
11
11
  errorMessage: definition?.errorMessage,
12
12
  checkers: definition?.checkers ?? [],
13
- }, (data) => data);
14
- return unknown.overrideHandler.apply(self);
13
+ }, (data) => data, unknown.overrideHandler);
14
+ return self;
15
15
  }
16
16
  unknown.overrideHandler = createOverride("@duplojs/utils/data-parser/unknown");
17
17
 
package/dist/index.cjs CHANGED
@@ -60,6 +60,7 @@ var hasSomeKinds = require('./common/hasSomeKinds.cjs');
60
60
  var hasKinds = require('./common/hasKinds.cjs');
61
61
  var toCurriedPredicate = require('./common/toCurriedPredicate.cjs');
62
62
  var pipeCall = require('./common/pipeCall.cjs');
63
+ var asserts = require('./common/asserts.cjs');
63
64
 
64
65
 
65
66
 
@@ -147,3 +148,5 @@ exports.hasSomeKinds = hasSomeKinds.hasSomeKinds;
147
148
  exports.hasKinds = hasKinds.hasKinds;
148
149
  exports.toCurriedPredicate = toCurriedPredicate.toCurriedPredicate;
149
150
  exports.pipeCall = pipeCall.pipeCall;
151
+ exports.AssertsError = asserts.AssertsError;
152
+ exports.asserts = asserts.asserts;
package/dist/index.mjs CHANGED
@@ -82,3 +82,4 @@ export { hasSomeKinds } from './common/hasSomeKinds.mjs';
82
82
  export { hasKinds } from './common/hasKinds.mjs';
83
83
  export { toCurriedPredicate } from './common/toCurriedPredicate.mjs';
84
84
  export { pipeCall } from './common/pipeCall.mjs';
85
+ export { AssertsError, asserts } from './common/asserts.mjs';
@@ -1074,6 +1074,9 @@
1074
1074
  {
1075
1075
  "name": "isUnion.d.ts"
1076
1076
  },
1077
+ {
1078
+ "name": "json.d.ts"
1079
+ },
1077
1080
  {
1078
1081
  "name": "lastUnionElement.d.ts"
1079
1082
  },
@@ -1166,6 +1169,15 @@
1166
1169
  {
1167
1170
  "name": "and.mjs"
1168
1171
  },
1172
+ {
1173
+ "name": "asserts.cjs"
1174
+ },
1175
+ {
1176
+ "name": "asserts.d.ts"
1177
+ },
1178
+ {
1179
+ "name": "asserts.mjs"
1180
+ },
1169
1181
  {
1170
1182
  "name": "asyncInnerPipe.cjs"
1171
1183
  },
@@ -4898,6 +4910,15 @@
4898
4910
  {
4899
4911
  "name": "test.mjs"
4900
4912
  },
4913
+ {
4914
+ "name": "to.cjs"
4915
+ },
4916
+ {
4917
+ "name": "to.d.ts"
4918
+ },
4919
+ {
4920
+ "name": "to.mjs"
4921
+ },
4901
4922
  {
4902
4923
  "name": "toLowerCase.cjs"
4903
4924
  },
@@ -29,6 +29,7 @@ var isIn = require('./isIn.cjs');
29
29
  var length = require('./length.cjs');
30
30
  var sort = require('./sort.cjs');
31
31
  var sortCompare = require('./sortCompare.cjs');
32
+ var to = require('./to.cjs');
32
33
  var _default = require('./at/default.cjs');
33
34
  var first = require('./at/first.cjs');
34
35
  var last = require('./at/last.cjs');
@@ -69,6 +70,7 @@ exports.isIn = isIn.isIn;
69
70
  exports.length = length.length;
70
71
  exports.sort = sort.sort;
71
72
  exports.sortCompare = sortCompare.sortCompare;
73
+ exports.to = to.to;
72
74
  exports.at = _default.at;
73
75
  exports.first = first.first;
74
76
  exports.last = last.last;
@@ -18,7 +18,7 @@
18
18
  * - composition and slicing (`S.concat`, `S.slice`, `S.substring`, `S.split`)
19
19
  * - indexing (`S.at`, `S.charAt`, `S.indexOf`, `S.lastIndexOf`)
20
20
  * - padding and repeat (`S.padStart`, `S.padEnd`, `S.repeat`)
21
- * - misc helpers (`S.normalize`, `S.isKeyof`, `S.isIn`, `S.length`, `S.sort`, `S.sortCompare`)
21
+ * - misc helpers (`S.normalize`, `S.isKeyof`, `S.isIn`, `S.length`, `S.sort`, `S.sortCompare`, `S.to`)
22
22
  *
23
23
  * @see https://utils.duplojs.dev/en/v1/api/string
24
24
  *
@@ -57,3 +57,4 @@ export * from "./isIn";
57
57
  export * from "./length";
58
58
  export * from "./sort";
59
59
  export * from "./sortCompare";
60
+ export * from "./to";
@@ -27,6 +27,7 @@ export { isIn } from './isIn.mjs';
27
27
  export { length } from './length.mjs';
28
28
  export { sort } from './sort.mjs';
29
29
  export { sortCompare } from './sortCompare.mjs';
30
+ export { to } from './to.mjs';
30
31
  export { at } from './at/default.mjs';
31
32
  export { first } from './at/first.mjs';
32
33
  export { last } from './at/last.mjs';
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * {@include string/to/index.md}
5
+ */
6
+ function to(value) {
7
+ return `${value}`;
8
+ }
9
+
10
+ exports.to = to;
@@ -0,0 +1,23 @@
1
+ type Primitive = (string | boolean | null | number | undefined | bigint);
2
+ /**
3
+ * Converts a primitive value to its string representation.
4
+ *
5
+ * **Supported call styles:**
6
+ * - Classic: `to(value)` -> returns a string
7
+ *
8
+ * It uses template literal conversion and preserves literal types when possible.
9
+ *
10
+ * ```ts
11
+ * const fromNumber = S.to(42);
12
+ * const fromBoolean = S.to(false);
13
+ * const fromNull = S.to(null);
14
+ * const fromBigInt = S.to(10n);
15
+ * ```
16
+ *
17
+ * @see https://utils.duplojs.dev/en/v1/api/string/to
18
+ *
19
+ * @namespace S
20
+ *
21
+ */
22
+ export declare function to<GenericValue extends Primitive>(value: GenericValue): `${GenericValue}`;
23
+ export {};
@@ -0,0 +1,8 @@
1
+ /**
2
+ * {@include string/to/index.md}
3
+ */
4
+ function to(value) {
5
+ return `${value}`;
6
+ }
7
+
8
+ export { to };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duplojs/utils",
3
- "version": "1.4.35",
3
+ "version": "1.4.37",
4
4
  "author": {
5
5
  "name": "mathcovax",
6
6
  "url": "https://github.com/mathcovax"