@transcend-io/type-utils 2.0.1 → 3.0.0

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 (167) hide show
  1. package/LICENSE +201 -21
  2. package/dist/index.d.mts +591 -0
  3. package/dist/index.d.mts.map +1 -0
  4. package/dist/index.mjs +529 -0
  5. package/dist/index.mjs.map +1 -0
  6. package/package.json +33 -43
  7. package/.yarn/sdks/eslint/package.json +0 -14
  8. package/.yarn/sdks/prettier/package.json +0 -7
  9. package/.yarn/sdks/typescript/package.json +0 -10
  10. package/README.md +0 -37
  11. package/build/aggregateObjects.d.ts +0 -27
  12. package/build/aggregateObjects.d.ts.map +0 -1
  13. package/build/aggregateObjects.js +0 -34
  14. package/build/aggregateObjects.js.map +0 -1
  15. package/build/apply.d.ts +0 -35
  16. package/build/apply.d.ts.map +0 -1
  17. package/build/apply.js +0 -47
  18. package/build/apply.js.map +0 -1
  19. package/build/codecTools/FixedLengthArray.d.ts +0 -20
  20. package/build/codecTools/FixedLengthArray.d.ts.map +0 -1
  21. package/build/codecTools/FixedLengthArray.js +0 -11
  22. package/build/codecTools/FixedLengthArray.js.map +0 -1
  23. package/build/codecTools/FixedLengthString.d.ts +0 -17
  24. package/build/codecTools/FixedLengthString.d.ts.map +0 -1
  25. package/build/codecTools/FixedLengthString.js +0 -10
  26. package/build/codecTools/FixedLengthString.js.map +0 -1
  27. package/build/codecTools/NonEmptyString.d.ts +0 -12
  28. package/build/codecTools/NonEmptyString.d.ts.map +0 -1
  29. package/build/codecTools/NonEmptyString.js +0 -6
  30. package/build/codecTools/NonEmptyString.js.map +0 -1
  31. package/build/codecTools/createDefaultCodec.d.ts +0 -39
  32. package/build/codecTools/createDefaultCodec.d.ts.map +0 -1
  33. package/build/codecTools/createDefaultCodec.js +0 -114
  34. package/build/codecTools/createDefaultCodec.js.map +0 -1
  35. package/build/codecTools/decodeCodec.d.ts +0 -12
  36. package/build/codecTools/decodeCodec.d.ts.map +0 -1
  37. package/build/codecTools/decodeCodec.js +0 -47
  38. package/build/codecTools/decodeCodec.js.map +0 -1
  39. package/build/codecTools/dictionary.d.ts +0 -18
  40. package/build/codecTools/dictionary.d.ts.map +0 -1
  41. package/build/codecTools/dictionary.js +0 -13
  42. package/build/codecTools/dictionary.js.map +0 -1
  43. package/build/codecTools/index.d.ts +0 -10
  44. package/build/codecTools/index.d.ts.map +0 -1
  45. package/build/codecTools/index.js +0 -10
  46. package/build/codecTools/index.js.map +0 -1
  47. package/build/codecTools/isCodecError.d.ts +0 -7
  48. package/build/codecTools/isCodecError.d.ts.map +0 -1
  49. package/build/codecTools/isCodecError.js +0 -9
  50. package/build/codecTools/isCodecError.js.map +0 -1
  51. package/build/codecTools/partialRecord.d.ts +0 -16
  52. package/build/codecTools/partialRecord.d.ts.map +0 -1
  53. package/build/codecTools/partialRecord.js +0 -11
  54. package/build/codecTools/partialRecord.js.map +0 -1
  55. package/build/codecTools/toJsonSchema.d.ts +0 -11
  56. package/build/codecTools/toJsonSchema.d.ts.map +0 -1
  57. package/build/codecTools/toJsonSchema.js +0 -115
  58. package/build/codecTools/toJsonSchema.js.map +0 -1
  59. package/build/enum.d.ts +0 -47
  60. package/build/enum.d.ts.map +0 -1
  61. package/build/enum.js +0 -44
  62. package/build/enum.js.map +0 -1
  63. package/build/enums.d.ts +0 -20
  64. package/build/enums.d.ts.map +0 -1
  65. package/build/enums.js +0 -18
  66. package/build/enums.js.map +0 -1
  67. package/build/findAllWithRegex.d.ts +0 -41
  68. package/build/findAllWithRegex.d.ts.map +0 -1
  69. package/build/findAllWithRegex.js +0 -41
  70. package/build/findAllWithRegex.js.map +0 -1
  71. package/build/flattenObject.d.ts +0 -33
  72. package/build/flattenObject.d.ts.map +0 -1
  73. package/build/flattenObject.js +0 -72
  74. package/build/flattenObject.js.map +0 -1
  75. package/build/fromEntries.d.ts +0 -9
  76. package/build/fromEntries.d.ts.map +0 -1
  77. package/build/fromEntries.js +0 -9
  78. package/build/fromEntries.js.map +0 -1
  79. package/build/getEntries.d.ts +0 -8
  80. package/build/getEntries.d.ts.map +0 -1
  81. package/build/getEntries.js +0 -10
  82. package/build/getEntries.js.map +0 -1
  83. package/build/getKeys.d.ts +0 -14
  84. package/build/getKeys.d.ts.map +0 -1
  85. package/build/getKeys.js +0 -19
  86. package/build/getKeys.js.map +0 -1
  87. package/build/getValues.d.ts +0 -9
  88. package/build/getValues.d.ts.map +0 -1
  89. package/build/getValues.js +0 -9
  90. package/build/getValues.js.map +0 -1
  91. package/build/gql.d.ts +0 -22
  92. package/build/gql.d.ts.map +0 -1
  93. package/build/gql.js +0 -32
  94. package/build/gql.js.map +0 -1
  95. package/build/groupBy.d.ts +0 -11
  96. package/build/groupBy.d.ts.map +0 -1
  97. package/build/groupBy.js +0 -20
  98. package/build/groupBy.js.map +0 -1
  99. package/build/index.d.ts +0 -19
  100. package/build/index.d.ts.map +0 -1
  101. package/build/index.js +0 -19
  102. package/build/index.js.map +0 -1
  103. package/build/invert.d.ts +0 -23
  104. package/build/invert.d.ts.map +0 -1
  105. package/build/invert.js +0 -79
  106. package/build/invert.js.map +0 -1
  107. package/build/noExcess.d.ts +0 -33
  108. package/build/noExcess.d.ts.map +0 -1
  109. package/build/noExcess.js +0 -153
  110. package/build/noExcess.js.map +0 -1
  111. package/build/tests/FixedLengthArray.test.d.ts +0 -2
  112. package/build/tests/FixedLengthArray.test.d.ts.map +0 -1
  113. package/build/tests/FixedLengthArray.test.js +0 -15
  114. package/build/tests/FixedLengthArray.test.js.map +0 -1
  115. package/build/tests/aggregateObjects.test.d.ts +0 -2
  116. package/build/tests/aggregateObjects.test.d.ts.map +0 -1
  117. package/build/tests/aggregateObjects.test.js +0 -98
  118. package/build/tests/aggregateObjects.test.js.map +0 -1
  119. package/build/tests/createDefaultCodec.test.d.ts +0 -2
  120. package/build/tests/createDefaultCodec.test.d.ts.map +0 -1
  121. package/build/tests/createDefaultCodec.test.js +0 -104
  122. package/build/tests/createDefaultCodec.test.js.map +0 -1
  123. package/build/tests/decodeCodec.test.d.ts +0 -2
  124. package/build/tests/decodeCodec.test.d.ts.map +0 -1
  125. package/build/tests/decodeCodec.test.js +0 -43
  126. package/build/tests/decodeCodec.test.js.map +0 -1
  127. package/build/tests/enum.test.d.ts +0 -2
  128. package/build/tests/enum.test.d.ts.map +0 -1
  129. package/build/tests/enum.test.js +0 -21
  130. package/build/tests/enum.test.js.map +0 -1
  131. package/build/tests/flattenObject.test.d.ts +0 -2
  132. package/build/tests/flattenObject.test.d.ts.map +0 -1
  133. package/build/tests/flattenObject.test.js +0 -115
  134. package/build/tests/flattenObject.test.js.map +0 -1
  135. package/build/tests/gql.test.d.ts +0 -2
  136. package/build/tests/gql.test.d.ts.map +0 -1
  137. package/build/tests/gql.test.js +0 -44
  138. package/build/tests/gql.test.js.map +0 -1
  139. package/build/tests/groupBy.test.d.ts +0 -2
  140. package/build/tests/groupBy.test.d.ts.map +0 -1
  141. package/build/tests/groupBy.test.js +0 -13
  142. package/build/tests/groupBy.test.js.map +0 -1
  143. package/build/tests/invert.test.d.ts +0 -2
  144. package/build/tests/invert.test.d.ts.map +0 -1
  145. package/build/tests/invert.test.js +0 -50
  146. package/build/tests/invert.test.js.map +0 -1
  147. package/build/tests/noExcess.test.d.ts +0 -2
  148. package/build/tests/noExcess.test.d.ts.map +0 -1
  149. package/build/tests/noExcess.test.js +0 -65
  150. package/build/tests/noExcess.test.js.map +0 -1
  151. package/build/tests/transposeObjectArray.test.d.ts +0 -2
  152. package/build/tests/transposeObjectArray.test.d.ts.map +0 -1
  153. package/build/tests/transposeObjectArray.test.js +0 -155
  154. package/build/tests/transposeObjectArray.test.js.map +0 -1
  155. package/build/transposeObjectArray.d.ts +0 -67
  156. package/build/transposeObjectArray.d.ts.map +0 -1
  157. package/build/transposeObjectArray.js +0 -39
  158. package/build/transposeObjectArray.js.map +0 -1
  159. package/build/tsbuildinfo +0 -1
  160. package/build/types.d.ts +0 -150
  161. package/build/types.d.ts.map +0 -1
  162. package/build/types.js +0 -2
  163. package/build/types.js.map +0 -1
  164. package/build/valuesOf.d.ts +0 -12
  165. package/build/valuesOf.d.ts.map +0 -1
  166. package/build/valuesOf.js +0 -14
  167. package/build/valuesOf.js.map +0 -1
package/build/noExcess.js DELETED
@@ -1,153 +0,0 @@
1
- import { either, isRight, left, right } from 'fp-ts/Either';
2
- import * as t from 'io-ts';
3
- /**
4
- * Yanked from https://github.com/gcanti/io-ts/issues/322#issuecomment-584658211
5
- *
6
- * The code creates a way to reject objects that have extra/unexpected properties
7
- * beyond what's defined in a type schema. This is useful for strict validation
8
- * where you want to ensure incoming data contains only expected fields.
9
- * @example usage
10
- * ```
11
- * const UserCodec = t.type({
12
- * name: t.string,
13
- * age: t.number
14
- * });
15
- *
16
- * const StrictUserCodec = noExcess(UserCodec);
17
- * // This would pass
18
- * StrictUserCodec.decode({ name: "Kirby", age: 33 })
19
- *
20
- * // This would fail with "excess key 'email' found"
21
- * StrictUserCodec.decode({ name: "Kirby", age: 33, email: "kirby@transcend.io" })
22
- * ```
23
- */
24
- /**
25
- * Creates a type guard function that checks if a codec matches a specific tag.
26
- *
27
- * @template T - The expected codec type
28
- * @param tag - The tag string to match against (e.g., 'InterfaceType', 'PartialType')
29
- * @returns A type guard function that checks if a codec is of type T
30
- */
31
- const getIsCodec = (tag) => (codec) =>
32
- /* eslint-disable-next-line no-underscore-dangle, @typescript-eslint/no-explicit-any */
33
- codec._tag === tag;
34
- const isInterfaceCodec = getIsCodec('InterfaceType');
35
- const isPartialCodec = getIsCodec('PartialType');
36
- /**
37
- * Extracts property definitions from various codec types, handling
38
- * nested structures like intersections and refinements.
39
- *
40
- * @param codec - The codec to extract properties from
41
- * @returns The props object containing all property definitions
42
- */
43
- const getProps = (codec) => {
44
- /* eslint-disable-next-line no-underscore-dangle */
45
- switch (codec._tag) {
46
- case 'RefinementType':
47
- case 'ReadonlyType':
48
- return getProps(codec.type);
49
- case 'InterfaceType':
50
- case 'StrictType':
51
- case 'PartialType':
52
- return codec.props;
53
- case 'IntersectionType':
54
- return codec.types.reduce((props, type) => Object.assign(props, getProps(type)), {});
55
- default:
56
- return {};
57
- }
58
- };
59
- /**
60
- * Generates a string representation of props for type naming.
61
- *
62
- * @param props - The props object to convert to string
63
- * @returns A comma-separated string of "key: type" pairs
64
- */
65
- const getNameFromProps = (props) => Object.keys(props)
66
- .map((k) => `${k}: ${props[k].name}`)
67
- .join(', ');
68
- /**
69
- * Wraps a type name with Partial<> syntax for partial types.
70
- *
71
- * @param inner - The inner type string to wrap
72
- * @returns The wrapped type string in Partial<> format
73
- */
74
- const getPartialTypeName = (inner) => `Partial<${inner}>`;
75
- /**
76
- * Generates a human-readable type name for the noExcess wrapper.
77
- *
78
- * @param codec - The codec to generate a name for
79
- * @returns A string representation of the excess-checked type
80
- */
81
- const getNoExcessTypeName = (codec) => {
82
- if (isInterfaceCodec(codec)) {
83
- return `{| ${getNameFromProps(codec.props)} |}`;
84
- }
85
- if (isPartialCodec(codec)) {
86
- return getPartialTypeName(`{| ${getNameFromProps(codec.props)} |}`);
87
- }
88
- return `Excess<${codec.name}>`;
89
- };
90
- /**
91
- * Compares an object's keys against expected properties and returns either
92
- * the object (if valid) or a list of excess keys.
93
- *
94
- * @template T - The type of the object being checked
95
- * @param o - The object to check for excess keys
96
- * @param props - The expected properties definition
97
- * @returns Either a Left with excess keys array or Right with the valid object
98
- */
99
- /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
100
- const stripKeys = (o, props) => {
101
- const keys = Object.getOwnPropertyNames(o);
102
- const propsKeys = Object.getOwnPropertyNames(props);
103
- propsKeys.forEach((pk) => {
104
- const index = keys.indexOf(pk);
105
- if (index !== -1) {
106
- keys.splice(index, 1);
107
- }
108
- });
109
- return keys.length ? left(keys) : right(o);
110
- };
111
- /**
112
- * Creates an enhanced codec that validates objects with strict property checking.
113
- *
114
- * The enhanced codec performs validation in three steps:
115
- * 1. Validates structure using the original codec
116
- * 2. Checks for excess properties using stripKeys
117
- * 3. Returns validation errors for any unexpected keys with the message "excess key "{key}" found"
118
- *
119
- * @template C - The codec type that extends HasProps
120
- * @param codec - The base codec to enhance with excess property checking
121
- * @param name - Optional custom name for the enhanced type (auto-generated if not provided)
122
- * @returns A new NoExcessType that wraps the original codec with strict validation
123
- */
124
- export const noExcess = (codec, name = getNoExcessTypeName(codec)) => {
125
- const props = getProps(codec);
126
- return new NoExcessType(name, (u) => isRight(stripKeys(u, props)) && codec.is(u), (u, c) => either.chain(t.UnknownRecord.validate(u, c), () => either.chain(codec.validate(u, c), (a) => either.mapLeft(stripKeys(a, props), (keys) => keys.map((k) => ({
127
- value: a[k],
128
- context: c,
129
- message: `excess key "${k}" found`,
130
- }))))),
131
- /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
132
- (a) => codec.encode(stripKeys(a, props).right), codec);
133
- };
134
- /**
135
- * The NoExcess Type - a wrapper type to be used with io-ts to ensure there aren't any excess keys
136
- */
137
- export class NoExcessType extends t.Type {
138
- /**
139
- * Creates a new NoExcessType instance that wraps another codec with excess property validation.
140
- *
141
- * @param name - The name of this type for debugging and error messages
142
- * @param is - Type guard function that checks if a value is of this type
143
- * @param validate - Validation function that decodes input and validates structure
144
- * @param encode - Encoding function that converts the type back to its output representation
145
- * @param type - The original wrapped codec that this NoExcessType enhances
146
- */
147
- constructor(name, is, validate, encode, type) {
148
- super(name, is, validate, encode);
149
- this.type = type;
150
- this._tag = 'NoExcessType';
151
- }
152
- }
153
- //# sourceMappingURL=noExcess.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"noExcess.js","sourceRoot":"","sources":["../src/noExcess.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=FixedLengthArray.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FixedLengthArray.test.d.ts","sourceRoot":"","sources":["../../src/tests/FixedLengthArray.test.ts"],"names":[],"mappings":""}
@@ -1,15 +0,0 @@
1
- // external
2
- import { expect } from 'chai';
3
- import * as t from 'io-ts';
4
- // global
5
- import { decodeCodec, FixedLengthArray } from '../codecTools/index.js';
6
- describe('FixedLengthArray', () => {
7
- const TwoItemArray = FixedLengthArray(2, 2, t.number);
8
- it('decode a fixed length array successfully', () => {
9
- expect(() => decodeCodec(TwoItemArray, [1, 2])).to.not.throw();
10
- });
11
- it('error if the array does not have the expected length', () => {
12
- expect(() => decodeCodec(TwoItemArray, [1, 2, 3])).to.throw();
13
- });
14
- });
15
- //# sourceMappingURL=FixedLengthArray.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FixedLengthArray.test.js","sourceRoot":"","sources":["../../src/tests/FixedLengthArray.test.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAE3B,SAAS;AACT,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAEvE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAEtD,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=aggregateObjects.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"aggregateObjects.test.d.ts","sourceRoot":"","sources":["../../src/tests/aggregateObjects.test.ts"],"names":[],"mappings":""}
@@ -1,98 +0,0 @@
1
- import { expect } from 'chai';
2
- import { aggregateObjects } from '../aggregateObjects.js';
3
- describe('aggregateObjects', () => {
4
- it('should return empty object for empty input array', () => {
5
- const result = aggregateObjects({ objs: [] });
6
- expect(result).to.deep.equal({});
7
- });
8
- it('should aggregate objects with same keys', () => {
9
- const objs = [
10
- { name: 'John', age: 30 },
11
- { name: 'Jane', age: 25 },
12
- { name: 'Bob', age: 35 },
13
- ];
14
- const result = aggregateObjects({ objs });
15
- expect(result).to.deep.equal({
16
- name: 'John,Jane,Bob',
17
- age: '30,25,35',
18
- });
19
- });
20
- it('should handle missing properties with missing keys', () => {
21
- const objs = [
22
- { name: 'John', age: 30 },
23
- { name: 'Jane' },
24
- { name: 'Bob', age: 35 },
25
- ];
26
- const result = aggregateObjects({ objs });
27
- expect(result).to.deep.equal({
28
- name: 'John,Jane,Bob',
29
- age: '30,,35',
30
- });
31
- });
32
- it('should handle null and undefined values', () => {
33
- const objs = [
34
- { name: 'John', age: null },
35
- { name: undefined, hobby: 'reading' },
36
- { name: 'Bob', hobby: null },
37
- ];
38
- const result = aggregateObjects({ objs });
39
- expect(result).to.deep.equal({
40
- name: 'John,,Bob',
41
- age: ',,',
42
- hobby: ',reading,',
43
- });
44
- });
45
- it('should wrap values in brackets when wrap option is true', () => {
46
- const objs = [
47
- { name: 'John', age: 30 },
48
- { name: 'Jane' },
49
- { name: 'Bob', age: 35 },
50
- ];
51
- const result = aggregateObjects({ objs, wrap: true });
52
- expect(result).to.deep.equal({
53
- name: '[John],[Jane],[Bob]',
54
- age: '[30],[],[35]',
55
- });
56
- });
57
- it('should handle objects with different keys', () => {
58
- const objs = [
59
- { name: 'John', age: 30 },
60
- { city: 'NY', country: 'USA' },
61
- { name: 'Bob', country: 'UK' },
62
- ];
63
- const result = aggregateObjects({ objs });
64
- expect(result).to.deep.equal({
65
- name: 'John,,Bob',
66
- age: '30,,',
67
- city: ',NY,',
68
- country: ',USA,UK',
69
- });
70
- });
71
- it('should handle empty objects', () => {
72
- const objs = [{ name: 'John' }, {}, { name: 'Bob' }];
73
- const result = aggregateObjects({ objs });
74
- expect(result).to.deep.equal({
75
- name: 'John,,Bob',
76
- });
77
- });
78
- it('should handle array with null or undefined objects', () => {
79
- const objs = [{ name: 'John' }, null, undefined, { name: 'Bob' }];
80
- const result = aggregateObjects({ objs });
81
- expect(result).to.deep.equal({
82
- name: 'John,,,Bob',
83
- });
84
- });
85
- it('should handle numeric and boolean values', () => {
86
- const objs = [
87
- { count: 1, active: true },
88
- { count: 2, active: false },
89
- { count: 3, active: true },
90
- ];
91
- const result = aggregateObjects({ objs });
92
- expect(result).to.deep.equal({
93
- count: '1,2,3',
94
- active: 'true,false,true',
95
- });
96
- });
97
- });
98
- //# sourceMappingURL=aggregateObjects.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"aggregateObjects.test.js","sourceRoot":"","sources":["../../src/tests/aggregateObjects.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=createDefaultCodec.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createDefaultCodec.test.d.ts","sourceRoot":"","sources":["../../src/tests/createDefaultCodec.test.ts"],"names":[],"mappings":""}
@@ -1,104 +0,0 @@
1
- import * as t from 'io-ts';
2
- import chai, { expect } from 'chai';
3
- import deepEqualInAnyOrder from 'deep-equal-in-any-order';
4
- import { createDefaultCodec } from '../codecTools/index.js';
5
- chai.use(deepEqualInAnyOrder);
6
- describe('buildDefaultCodec', () => {
7
- it('should correctly build a default codec for null', () => {
8
- const result = createDefaultCodec(t.null);
9
- expect(result).to.equal(null);
10
- });
11
- it('should correctly build a default codec for number', () => {
12
- const result = createDefaultCodec(t.number);
13
- expect(result).to.equal(0);
14
- });
15
- it('should correctly build a default codec for boolean', () => {
16
- const result = createDefaultCodec(t.boolean);
17
- expect(result).to.equal(false);
18
- });
19
- it('should correctly build a default codec for undefined', () => {
20
- const result = createDefaultCodec(t.undefined);
21
- expect(result).to.equal(undefined);
22
- });
23
- it('should correctly build a default codec for string', () => {
24
- const result = createDefaultCodec(t.string);
25
- expect(result).to.equal('');
26
- });
27
- it('should correctly build a default codec for a union of literals', () => {
28
- const codec = t.union([t.literal('A'), t.literal('B')]);
29
- const defaultCodec = createDefaultCodec(codec);
30
- expect(defaultCodec).to.equal('A');
31
- });
32
- it('should correctly build a default codec for an object', () => {
33
- const codec = t.object;
34
- const defaultCodec = createDefaultCodec(codec);
35
- expect(defaultCodec).to.deep.equal({});
36
- });
37
- it('should correctly build a default codec for a union with null', () => {
38
- const result = createDefaultCodec(t.union([t.string, t.null]));
39
- // should default to null if the union contains null
40
- expect(result).to.equal(null);
41
- });
42
- it('should correctly build a default codec for a union with object', () => {
43
- const result = createDefaultCodec(t.union([t.string, t.null, t.type({ name: t.string })]));
44
- // should default to the type if the union contains an object
45
- expect(result).to.deep.equal({ name: '' });
46
- });
47
- it('should correctly build a default codec for a union with array of type', () => {
48
- const result = createDefaultCodec(t.union([
49
- t.string,
50
- t.null,
51
- t.type({ name: t.string }),
52
- t.array(t.string),
53
- ]));
54
- // should default to the empty array if the union contains an array of type
55
- expect(result).to.deep.equal([]);
56
- });
57
- it('should correctly build a default codec for a union with array of object', () => {
58
- const result = createDefaultCodec(t.union([
59
- t.string,
60
- t.null,
61
- t.type({ name: t.string }),
62
- t.array(t.type({ age: t.number })),
63
- ]));
64
- // should default to the array with object if the union contains an array of objects
65
- expect(result).to.deep.equal([{ age: 0 }]);
66
- });
67
- it('should correctly build a default codec for a union without null', () => {
68
- const result = createDefaultCodec(t.union([t.string, t.number]));
69
- // should default to the first value if the union does not contains null
70
- expect(result).to.equal('');
71
- });
72
- it('should correctly build a default codec for an array of object types', () => {
73
- const result = createDefaultCodec(t.array(t.type({ name: t.string, age: t.number })));
74
- // should default to the first value if the union does not contains null
75
- expect(result).to.deep.equalInAnyOrder([{ name: '', age: 0 }]);
76
- });
77
- it('should correctly build a default codec for an array of object partials', () => {
78
- const result = createDefaultCodec(t.array(t.partial({ name: t.string, age: t.number })));
79
- // should default to the first value if the union does not contains null
80
- expect(result).to.deep.equalInAnyOrder([{ name: '', age: 0 }]);
81
- });
82
- it('should correctly build a default codec for an array of object intersections', () => {
83
- const result = createDefaultCodec(t.array(t.intersection([
84
- t.partial({ name: t.string, age: t.number }),
85
- t.type({ city: t.string }),
86
- ])));
87
- // should default to the first value if the union does not contains null
88
- expect(result).to.deep.equalInAnyOrder([{ name: '', age: 0, city: '' }]);
89
- });
90
- it('should correctly build a default codec for an array of strings', () => {
91
- const result = createDefaultCodec(t.array(t.string));
92
- // should default to the first value if the union does not contains null
93
- expect(result).to.deep.equal([]);
94
- });
95
- it('should correctly build a default codec for an intersection', () => {
96
- const result = createDefaultCodec(t.intersection([
97
- t.type({ id: t.string, name: t.string }),
98
- t.partial({ age: t.number }),
99
- ]));
100
- // should default to the first value if the union does not contains null
101
- expect(result).to.deep.equalInAnyOrder({ id: '', name: '', age: 0 });
102
- });
103
- });
104
- //# sourceMappingURL=createDefaultCodec.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createDefaultCodec.test.js","sourceRoot":"","sources":["../../src/tests/createDefaultCodec.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=decodeCodec.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decodeCodec.test.d.ts","sourceRoot":"","sources":["../../src/tests/decodeCodec.test.ts"],"names":[],"mappings":""}
@@ -1,43 +0,0 @@
1
- import { expect } from 'chai';
2
- import * as t from 'io-ts';
3
- import { decodeCodec } from '../codecTools/index.js';
4
- describe('decodeCodec', () => {
5
- it('should decode a codec as expected', () => {
6
- const c = t.type({
7
- str: t.string,
8
- num: t.number,
9
- headers: t.record(t.string, t.string),
10
- });
11
- const obj = {
12
- str: 'abcd',
13
- num: 123,
14
- headers: {
15
- yolo: 'one-life',
16
- },
17
- };
18
- const decoded = decodeCodec(c, obj);
19
- expect(decoded).to.deep.equal(obj);
20
- });
21
- it('should throw an error when the input does not match the codec', () => {
22
- const c = t.type({
23
- str: t.string,
24
- num: t.number,
25
- headers: t.record(t.string, t.string),
26
- });
27
- const obj = {
28
- str: 123,
29
- num: 123,
30
- headers: {
31
- yolo: 'one-life',
32
- },
33
- };
34
- try {
35
- decodeCodec(c, obj);
36
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
- }
38
- catch (e) {
39
- expect(e.message).to.equal('Failed to decode codec: [\n ".str expected type \'string\'"\n]');
40
- }
41
- });
42
- });
43
- //# sourceMappingURL=decodeCodec.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decodeCodec.test.js","sourceRoot":"","sources":["../../src/tests/decodeCodec.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACf,GAAG,EAAE,CAAC,CAAC,MAAM;YACb,GAAG,EAAE,CAAC,CAAC,MAAM;YACb,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;SACtC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG;YACV,GAAG,EAAE,MAAM;YACX,GAAG,EAAE,GAAG;YACR,OAAO,EAAE;gBACP,IAAI,EAAE,UAAU;aACjB;SACF,CAAC;QACF,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YACf,GAAG,EAAE,CAAC,CAAC,MAAM;YACb,GAAG,EAAE,CAAC,CAAC,MAAM;YACb,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;SACtC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG;YACV,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,GAAG;YACR,OAAO,EAAE;gBACP,IAAI,EAAE,UAAU;aACjB;SACF,CAAC;QACF,IAAI,CAAC;YACH,WAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACpB,8DAA8D;QAChE,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CACxB,iEAAiE,CAClE,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=enum.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enum.test.d.ts","sourceRoot":"","sources":["../../src/tests/enum.test.ts"],"names":[],"mappings":""}
@@ -1,21 +0,0 @@
1
- // external
2
- import { expect } from 'chai';
3
- // global
4
- import { createEnum } from '../enum.js';
5
- describe('Enum', () => {
6
- const enumVar = createEnum({
7
- my: 'my',
8
- property: 'property',
9
- });
10
- it('should index a property that exists', () => {
11
- expect(enumVar.my).equals('my');
12
- expect(enumVar.property).equals('property');
13
- });
14
- it('should allow iteration over keys', () => {
15
- expect(Object.keys(enumVar)).deep.equal(['my', 'property']);
16
- });
17
- it('should allow iteration over values', () => {
18
- expect(Object.values(enumVar)).deep.equal(['my', 'property']);
19
- });
20
- });
21
- //# sourceMappingURL=enum.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enum.test.js","sourceRoot":"","sources":["../../src/tests/enum.test.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,MAAM,OAAO,GAAG,UAAU,CAAC;QACzB,EAAE,EAAE,IAAI;QACR,QAAQ,EAAE,UAAU;KACrB,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=flattenObject.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flattenObject.test.d.ts","sourceRoot":"","sources":["../../src/tests/flattenObject.test.ts"],"names":[],"mappings":""}
@@ -1,115 +0,0 @@
1
- import { expect } from 'chai';
2
- import { flattenObject } from '../flattenObject.js';
3
- describe('flattenObject', () => {
4
- it('should return empty object for null input', () => {
5
- const result = flattenObject({ obj: null });
6
- expect(result).to.deep.equal({});
7
- });
8
- it('should return empty object for undefined input', () => {
9
- let obj;
10
- const result = flattenObject({ obj });
11
- expect(result).to.deep.equal({});
12
- });
13
- it('should flatten list of objects with some entries missing properties', () => {
14
- // create a list of users with one of them missiging the age property
15
- const obj = {
16
- users: [
17
- {
18
- name: 'Bob',
19
- },
20
- {
21
- name: 'Alice',
22
- age: 18,
23
- },
24
- ],
25
- };
26
- const result = flattenObject({ obj });
27
- // the flattened object should include the missing age property
28
- expect(result).to.deep.equal({
29
- users_name: 'Bob,Alice',
30
- users_age: ',18',
31
- });
32
- });
33
- it('should ignore primitive and null types within list containing objects', () => {
34
- // create a list of a mix of objects, strings, and null
35
- const obj = {
36
- users: [
37
- 'example@domain.com',
38
- null,
39
- {
40
- name: 'Bob',
41
- },
42
- {
43
- name: 'Alice',
44
- age: 18,
45
- },
46
- ],
47
- };
48
- const result = flattenObject({ obj });
49
- // the flattened object should not include the strings
50
- expect(result).to.deep.equal({
51
- users_name: 'Bob,Alice',
52
- users_age: ',18',
53
- });
54
- });
55
- it('should flatten an object with null entries', () => {
56
- const obj = {
57
- user: {
58
- siblings: null,
59
- },
60
- };
61
- const result = flattenObject({ obj });
62
- expect(result).to.deep.equal({
63
- user_siblings: '',
64
- });
65
- });
66
- it('should flatten an object with empty entries', () => {
67
- const obj = {
68
- user: {
69
- siblings: [],
70
- },
71
- };
72
- const result = flattenObject({ obj });
73
- expect(result).to.deep.equal({
74
- user_siblings: '',
75
- });
76
- });
77
- it('should flatten a deep nested object', () => {
78
- const obj = {
79
- user: {
80
- name: 'John',
81
- address: {
82
- city: 'NY',
83
- zip: 10001,
84
- },
85
- hobbies: ['reading', 'gaming'],
86
- parents: [
87
- {
88
- name: 'Alice',
89
- biological: true,
90
- age: 52,
91
- },
92
- {
93
- name: 'Bob',
94
- biological: false,
95
- },
96
- ],
97
- siblings: [],
98
- grandParents: null,
99
- },
100
- };
101
- const result = flattenObject({ obj });
102
- expect(result).to.deep.equal({
103
- user_name: 'John',
104
- user_address_city: 'NY',
105
- user_address_zip: 10001,
106
- user_hobbies: 'reading,gaming',
107
- user_parents_name: 'Alice,Bob',
108
- user_parents_biological: 'true,false',
109
- user_parents_age: '52,',
110
- user_siblings: '',
111
- user_grandParents: '',
112
- });
113
- });
114
- });
115
- //# sourceMappingURL=flattenObject.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flattenObject.test.js","sourceRoot":"","sources":["../../src/tests/flattenObject.test.ts"],"names":[],"mappings":"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"}