@transcend-io/type-utils 2.0.1 → 3.0.1

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 +530 -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
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=gql.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gql.test.d.ts","sourceRoot":"","sources":["../../src/tests/gql.test.ts"],"names":[],"mappings":""}
@@ -1,44 +0,0 @@
1
- // external
2
- import { expect } from 'chai';
3
- // global
4
- import { gql } from '../gql.js';
5
- describe('gql', () => {
6
- it('should compile a template with no expressions', () => {
7
- expect(gql `This is a test`).equals('This is a test');
8
- });
9
- it('should compile a template with expressions', () => {
10
- const interfaceType = gql `
11
- """
12
- A classification of data subjects that the organization may have
13
- """
14
- interface DataSubjectInterface {
15
- """
16
- This is an id
17
- """
18
- id: ID
19
- }
20
- `;
21
- const typeType = gql `
22
- """ The internal configuration for a data subject """
23
- type DataSubjectInternal implements DataSubjectInterface {
24
- ${interfaceType}
25
- """ Whether the data subject is currently turned on """
26
- active: Boolean!,
27
- }
28
- `;
29
- expect(typeType).equals(`
30
- """ The internal configuration for a data subject """
31
- type DataSubjectInternal implements DataSubjectInterface {
32
- ${' '}
33
- """
34
- This is an id
35
- """
36
- id: ID
37
- ${' '}
38
- """ Whether the data subject is currently turned on """
39
- active: Boolean!,
40
- }
41
- `);
42
- });
43
- });
44
- //# sourceMappingURL=gql.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gql.test.js","sourceRoot":"","sources":["../../src/tests/gql.test.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,SAAS;AACT,OAAO,EAAE,GAAG,EAAO,MAAM,WAAW,CAAC;AAErC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,GAAG,CAAA,gBAAgB,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAMpD,MAAM,aAAa,GAAG,GAAG,CAAA;;;;;;;;;;KAUK,CAAC;QAC/B,MAAM,QAAQ,GAAG,GAAG,CAAA;;;UAGd,aAAa;;;;KAIlB,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CACrB;;;EAGJ,UAAU;;;;;EAKV,QAAQ;;;;KAIL,CACA,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=groupBy.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"groupBy.test.d.ts","sourceRoot":"","sources":["../../src/tests/groupBy.test.ts"],"names":[],"mappings":""}
@@ -1,13 +0,0 @@
1
- // external
2
- import { expect } from 'chai';
3
- // global
4
- import { groupBy } from '../groupBy.js';
5
- describe('groupBy', () => {
6
- it('should group by a given key', () => {
7
- const expected = new Map();
8
- expected.set('foo', [{ a: 'foo' }, { a: 'foo' }]);
9
- expected.set('bar', [{ a: 'bar' }]);
10
- expect(groupBy([{ a: 'foo' }, { a: 'bar' }, { a: 'foo' }], ({ a }) => a)).deep.equals(expected);
11
- });
12
- });
13
- //# sourceMappingURL=groupBy.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"groupBy.test.js","sourceRoot":"","sources":["../../src/tests/groupBy.test.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,SAAS;AACT,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAQxC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;QACjD,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAClD,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAEpC,MAAM,CACJ,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAClE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=invert.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invert.test.d.ts","sourceRoot":"","sources":["../../src/tests/invert.test.ts"],"names":[],"mappings":""}
@@ -1,50 +0,0 @@
1
- // external
2
- import { expect } from 'chai';
3
- // global
4
- import { invert, invertSafe } from '../invert.js';
5
- describe('invert', () => {
6
- it('should invert a string -> string object', () => {
7
- expect(invert({
8
- a: 'b',
9
- c: 'd',
10
- e: 'f',
11
- })).deep.equals({
12
- b: 'a',
13
- d: 'c',
14
- f: 'e',
15
- });
16
- });
17
- it('should throw an error when 1-1 invert is impossible', () => {
18
- expect(() => invert({
19
- a: 'b',
20
- c: 'b',
21
- e: 'f',
22
- })).to.throw('Encountered duplicate value inverting object: "b: c and a"');
23
- });
24
- it('should invert a string -> string[] object', () => {
25
- expect(invert({
26
- a: ['b', 'd'],
27
- c: ['d', 'e'],
28
- e: ['f'],
29
- })).deep.equals({
30
- b: ['a'],
31
- d: ['a', 'c'],
32
- f: ['e'],
33
- e: ['c'],
34
- });
35
- });
36
- });
37
- describe('invertSafe', () => {
38
- it('should invert a string -> string[] object', () => {
39
- expect(invertSafe({
40
- a: 'b',
41
- c: 'd',
42
- e: 'f',
43
- })).deep.equals({
44
- b: ['a'],
45
- d: ['c'],
46
- f: ['e'],
47
- });
48
- });
49
- });
50
- //# sourceMappingURL=invert.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invert.test.js","sourceRoot":"","sources":["../../src/tests/invert.test.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,SAAS;AACT,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAElD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CACJ,MAAM,CAAC;YACL,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;SACP,CAAC,CACH,CAAC,IAAI,CAAC,MAAM,CAAC;YACZ,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;SACP,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,GAAG,EAAE,CACV,MAAM,CAAC;YACL,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;SACP,CAAC,CACH,CAAC,EAAE,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CACJ,MAAM,CAAC;YACL,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;YACb,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;YACb,CAAC,EAAE,CAAC,GAAG,CAAC;SACT,CAAC,CACH,CAAC,IAAI,CAAC,MAAM,CAAC;YACZ,CAAC,EAAE,CAAC,GAAG,CAAC;YACR,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;YACb,CAAC,EAAE,CAAC,GAAG,CAAC;YACR,CAAC,EAAE,CAAC,GAAG,CAAC;SACT,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CACJ,UAAU,CAAC;YACT,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;SACP,CAAC,CACH,CAAC,IAAI,CAAC,MAAM,CAAC;YACZ,CAAC,EAAE,CAAC,GAAG,CAAC;YACR,CAAC,EAAE,CAAC,GAAG,CAAC;YACR,CAAC,EAAE,CAAC,GAAG,CAAC;SACT,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=noExcess.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"noExcess.test.d.ts","sourceRoot":"","sources":["../../src/tests/noExcess.test.ts"],"names":[],"mappings":""}
@@ -1,65 +0,0 @@
1
- /* eslint-disable max-len */
2
- import { expect } from 'chai';
3
- import * as t from 'io-ts';
4
- import { noExcess } from '../noExcess.js';
5
- import { decodeCodec } from '../codecTools/index.js';
6
- describe('noExcess', () => {
7
- it('should decode a wrapped codec as expected', () => {
8
- const c = noExcess(t.type({
9
- str: t.string,
10
- num: t.number,
11
- headers: t.record(t.string, t.string),
12
- }));
13
- const obj = {
14
- str: 'abcd',
15
- num: 123,
16
- headers: {
17
- yolo: 'one-life',
18
- },
19
- };
20
- const decoded = decodeCodec(c, obj);
21
- expect(decoded).to.deep.equal(obj);
22
- });
23
- // Confirms default functionality without noExcess wrapper
24
- it('should not throw an error when unwrapped codec has an excess key', () => {
25
- const c = t.type({
26
- str: t.string,
27
- num: t.number,
28
- headers: t.record(t.string, t.string),
29
- });
30
- const obj = {
31
- str: 'abcd',
32
- num: 123,
33
- headers: {
34
- yolo: 'one-life',
35
- },
36
- extraKey: 'extraValue',
37
- };
38
- const decoded = decodeCodec(c, obj);
39
- expect(decoded).to.deep.equal(obj);
40
- });
41
- it('should throw an error when noExcess wrapped codec has an excess key', () => {
42
- const c = noExcess(t.type({
43
- str: t.string,
44
- num: t.number,
45
- headers: t.record(t.string, t.string),
46
- }));
47
- const obj = {
48
- str: 'abcd',
49
- num: 123,
50
- headers: {
51
- yolo: 'one-life',
52
- },
53
- extraKey: 'extraValue',
54
- };
55
- try {
56
- decodeCodec(c, obj);
57
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
- }
59
- catch (e) {
60
- expect(e.message).to.equal('Failed to decode codec: [\n " expected type \'{| str: string, num: number, headers: { [K in string]: string } |}\'"\n]');
61
- }
62
- });
63
- });
64
- /* eslint-enable max-len */
65
- //# sourceMappingURL=noExcess.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"noExcess.test.js","sourceRoot":"","sources":["../../src/tests/noExcess.test.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CAAC,GAAG,QAAQ,CAChB,CAAC,CAAC,IAAI,CAAC;YACL,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,CACH,CAAC;QAEF,MAAM,GAAG,GAAG;YACV,GAAG,EAAE,MAAM;YACX,GAAG,EAAE,GAAG;YACR,OAAO,EAAE;gBACP,IAAI,EAAE,UAAU;aACjB;SACF,CAAC;QAEF,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,0DAA0D;IAC1D,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,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;QAEH,MAAM,GAAG,GAAG;YACV,GAAG,EAAE,MAAM;YACX,GAAG,EAAE,GAAG;YACR,OAAO,EAAE;gBACP,IAAI,EAAE,UAAU;aACjB;YACD,QAAQ,EAAE,YAAY;SACvB,CAAC;QAEF,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,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,CAAC,GAAG,QAAQ,CAChB,CAAC,CAAC,IAAI,CAAC;YACL,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,CACH,CAAC;QAEF,MAAM,GAAG,GAAG;YACV,GAAG,EAAE,MAAM;YACX,GAAG,EAAE,GAAG;YACR,OAAO,EAAE;gBACP,IAAI,EAAE,UAAU;aACjB;YACD,QAAQ,EAAE,YAAY;SACvB,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,yHAAyH,CAC1H,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AACH,2BAA2B"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=transposeObjectArray.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transposeObjectArray.test.d.ts","sourceRoot":"","sources":["../../src/tests/transposeObjectArray.test.ts"],"names":[],"mappings":""}
@@ -1,155 +0,0 @@
1
- import { expect } from 'chai';
2
- import { transposeObjectArray } from '../transposeObjectArray.js';
3
- describe('transposeObjectArray', () => {
4
- it('should handle empty array', () => {
5
- const result = transposeObjectArray({
6
- objects: [],
7
- properties: ['id', 'name'],
8
- });
9
- expect(result).to.deep.equal({});
10
- });
11
- it('should extract multiple properties from array of objects', () => {
12
- const objects = [
13
- { id: 1, name: 'John', age: 25, city: 'NY' },
14
- { id: 2, name: 'Jane', age: 30, city: 'LA' },
15
- ];
16
- const result = transposeObjectArray({
17
- objects,
18
- properties: ['id', 'name'],
19
- });
20
- expect(result).to.deep.equal({
21
- id: [1, 2],
22
- name: ['John', 'Jane'],
23
- rest: [
24
- { age: 25, city: 'NY' },
25
- { age: 30, city: 'LA' },
26
- ],
27
- });
28
- });
29
- it('should handle objects with missing properties', () => {
30
- const objects = [
31
- { id: 1, name: 'John', age: 25 },
32
- { id: 2, age: 30 },
33
- { id: 3, name: 'Bob', city: 'LA' },
34
- ];
35
- const result = transposeObjectArray({
36
- objects,
37
- properties: ['id', 'name'],
38
- });
39
- expect(result).to.deep.equal({
40
- id: [1, 2, 3],
41
- name: ['John', undefined, 'Bob'],
42
- rest: [{ age: 25 }, { age: 30 }, { city: 'LA' }],
43
- });
44
- });
45
- it('should handle different value types', () => {
46
- const objects = [
47
- { id: 1, active: true, count: 10, tags: ['a', 'b'] },
48
- { id: 2, active: false, count: 20, tags: ['c'] },
49
- ];
50
- const result = transposeObjectArray({
51
- objects,
52
- properties: ['active', 'tags'],
53
- });
54
- expect(result).to.deep.equal({
55
- active: [true, false],
56
- tags: [['a', 'b'], ['c']],
57
- rest: [
58
- { id: 1, count: 10 },
59
- { id: 2, count: 20 },
60
- ],
61
- });
62
- });
63
- it('should handle extracting all properties (empty rest)', () => {
64
- const objects = [
65
- { id: 1, name: 'John' },
66
- { id: 2, name: 'Jane' },
67
- ];
68
- const result = transposeObjectArray({
69
- objects,
70
- properties: ['id', 'name'],
71
- });
72
- expect(result).to.deep.equal({
73
- id: [1, 2],
74
- name: ['John', 'Jane'],
75
- rest: [{}, {}],
76
- });
77
- });
78
- it('should handle extracting no properties (everything in rest)', () => {
79
- const objects = [
80
- { id: 1, name: 'John' },
81
- { id: 2, name: 'Jane' },
82
- ];
83
- const result = transposeObjectArray({ objects, properties: [] });
84
- expect(result).to.deep.equal({
85
- rest: [
86
- { id: 1, name: 'John' },
87
- { id: 2, name: 'Jane' },
88
- ],
89
- });
90
- });
91
- it('should handle objects with null or undefined values', () => {
92
- const objects = [
93
- { id: 1, name: null, age: 25 },
94
- { id: 2, name: undefined, age: 30 },
95
- ];
96
- const result = transposeObjectArray({
97
- objects,
98
- properties: ['id', 'name'],
99
- });
100
- expect(result).to.deep.equal({
101
- id: [1, 2],
102
- name: [null, undefined],
103
- rest: [{ age: 25 }, { age: 30 }],
104
- });
105
- });
106
- it('should handle nested objects', () => {
107
- const objects = [
108
- { id: 1, user: { name: 'John', age: 25 } },
109
- { id: 2, user: { name: 'Jane', age: 30 } },
110
- ];
111
- const result = transposeObjectArray({
112
- objects,
113
- properties: ['id', 'user'],
114
- });
115
- expect(result).to.deep.equal({
116
- id: [1, 2],
117
- user: [
118
- { name: 'John', age: 25 },
119
- { name: 'Jane', age: 30 },
120
- ],
121
- rest: [{}, {}],
122
- });
123
- });
124
- it('should preserve property order in rest object', () => {
125
- const objects = [
126
- { a: 1, b: 2, c: 3, d: 4 },
127
- { a: 5, b: 6, c: 7, d: 8 },
128
- ];
129
- const result = transposeObjectArray({ objects, properties: ['a', 'c'] });
130
- expect(result).to.deep.equal({
131
- a: [1, 5],
132
- c: [3, 7],
133
- rest: [
134
- { b: 2, d: 4 },
135
- { b: 6, d: 8 },
136
- ],
137
- });
138
- });
139
- it('should omit rest properties if includeOtherProperties is false', () => {
140
- const objects = [
141
- { id: 1, name: null, age: 25 },
142
- { id: 2, name: undefined, age: 30 },
143
- ];
144
- const result = transposeObjectArray({
145
- objects,
146
- properties: ['id', 'name'],
147
- options: { includeOtherProperties: false },
148
- });
149
- expect(result).to.deep.equal({
150
- id: [1, 2],
151
- name: [null, undefined],
152
- });
153
- });
154
- });
155
- //# sourceMappingURL=transposeObjectArray.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transposeObjectArray.test.js","sourceRoot":"","sources":["../../src/tests/transposeObjectArray.test.ts"],"names":[],"mappings":"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"}
@@ -1,67 +0,0 @@
1
- /**
2
- * Type representing a transposed array of objects.
3
- *
4
- * For each selected property K from the original object type T:
5
- * - Creates an array containing all values of that property
6
- * - The array type matches the property's original type
7
- * - Includes a 'rest' array containing all non-selected properties
8
- * @template T - The source object type
9
- * @template K - The keys to transpose into arrays
10
- * @example
11
- * // Original array of objects:
12
- * const users = [
13
- * { id: 1, name: 'John', age: 25, city: 'NY' },
14
- * { id: 2, name: 'Jane', age: 30, city: 'LA' }
15
- * ];
16
- *
17
- * // Type for transposing 'id' and 'name':
18
- * type Result = TransposedObjectArray<typeof users[0], 'id' | 'name'>;
19
- *
20
- * // Resulting type structure:
21
- * {
22
- * id: number[]; // Array of all IDs: [1, 2]
23
- * name: string[]; // Array of all names: ['John', 'Jane']
24
- * rest: Array<{ // Array of remaining properties
25
- * age: number; // [{ age: 25, city: 'NY' },
26
- * city: string; // { age: 30, city: 'LA' }]
27
- * }>;
28
- * }
29
- */
30
- type TransposedObjectArray<T, K extends keyof T> = {
31
- [P in K]: Array<T[P]>;
32
- } & {
33
- /** Properties not selected for transposition */
34
- rest: Array<Omit<T, K>>;
35
- };
36
- /**
37
- * Transposes an array of objects by converting selected properties into arrays
38
- * while keeping the remaining properties grouped in a 'rest' array.
39
- * @template T - The type of objects in the input array
40
- * @template K - The keys of properties to transpose
41
- * @param param - the objects, properties, and transposing options
42
- * @returns An object containing transposed arrays for each selected property
43
- * @example
44
- * const objects = [
45
- * { id: 1, name: 'John', age: 25 },
46
- * { id: 2, name: 'Jane', age: 30 }
47
- * ]
48
- * const result = transposeObjectArray({objects, properties: ['id', 'name']});
49
- * // Returns: {
50
- * // id: [1, 2],
51
- * // name: ['John', 'Jane'],
52
- * // rest: [{age: 25}, {age: 30}]
53
- * // }
54
- */
55
- export declare const transposeObjectArray: <T extends object, K extends keyof T>({ objects, properties, options, }: {
56
- /** Array of objects to transpose */
57
- objects: T[];
58
- /** Array of property keys to transpose into arrays */
59
- properties: K[];
60
- /** Options for how to transpose the array */
61
- options?: {
62
- /** Whether to include non-tranposed properties in the final result */
63
- includeOtherProperties?: boolean | undefined;
64
- } | undefined;
65
- }) => TransposedObjectArray<T, K>;
66
- export {};
67
- //# sourceMappingURL=transposeObjectArray.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transposeObjectArray.d.ts","sourceRoot":"","sources":["../src/transposeObjectArray.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,KAAK,qBAAqB,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI;KAChD,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CACtB,GAAG;IACF,gDAAgD;IAChD,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CACzB,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,oBAAoB;IAK/B,oCAAoC;;IAEpC,sDAAsD;;IAEtD,6CAA6C;;QAE3C,sEAAsE;;;iCA2BvE,CAAC"}
@@ -1,39 +0,0 @@
1
- // eslint-disable-next-line eslint-comments/disable-enable-pair
2
- /* eslint-disable @typescript-eslint/no-explicit-any */
3
- /**
4
- * Transposes an array of objects by converting selected properties into arrays
5
- * while keeping the remaining properties grouped in a 'rest' array.
6
- * @template T - The type of objects in the input array
7
- * @template K - The keys of properties to transpose
8
- * @param param - the objects, properties, and transposing options
9
- * @returns An object containing transposed arrays for each selected property
10
- * @example
11
- * const objects = [
12
- * { id: 1, name: 'John', age: 25 },
13
- * { id: 2, name: 'Jane', age: 30 }
14
- * ]
15
- * const result = transposeObjectArray({objects, properties: ['id', 'name']});
16
- * // Returns: {
17
- * // id: [1, 2],
18
- * // name: ['John', 'Jane'],
19
- * // rest: [{age: 25}, {age: 30}]
20
- * // }
21
- */
22
- export const transposeObjectArray = ({ objects, properties, options = { includeOtherProperties: true }, }) => objects.reduce((acc, item) => {
23
- const result = { ...acc };
24
- properties.forEach((prop) => {
25
- const currentArray = (acc[prop] || []);
26
- result[prop] = [...currentArray, item[prop]];
27
- });
28
- const restObject = {};
29
- Object.entries(item).forEach(([key, value]) => {
30
- if (!properties.includes(key)) {
31
- restObject[key] = value;
32
- }
33
- });
34
- if (options.includeOtherProperties) {
35
- result.rest = [...(acc.rest || []), restObject];
36
- }
37
- return result;
38
- }, {});
39
- //# sourceMappingURL=transposeObjectArray.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transposeObjectArray.js","sourceRoot":"","sources":["../src/transposeObjectArray.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,uDAAuD;AAsCvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAsC,EACxE,OAAO,EACP,UAAU,EACV,OAAO,GAAG,EAAE,sBAAsB,EAAE,IAAI,EAAE,GAW3C,EAA+B,EAAE,CAChC,OAAO,CAAC,MAAM,CACZ,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;IACZ,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAiC,CAAC;IAEzD,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1B,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAW,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAQ,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,EAAgB,CAAC;IACpC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC5C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAQ,CAAC,EAAE,CAAC;YAClC,UAAkB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,EACD,EAAiC,CAClC,CAAC"}