ts-fortress 7.0.0 → 7.0.2

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 (54) hide show
  1. package/dist/compose/intersection.d.mts.map +1 -1
  2. package/dist/compose/intersection.mjs +18 -1
  3. package/dist/compose/intersection.mjs.map +1 -1
  4. package/dist/compose/union.d.mts.map +1 -1
  5. package/dist/compose/union.mjs +19 -2
  6. package/dist/compose/union.mjs.map +1 -1
  7. package/dist/index.mjs +1 -1
  8. package/dist/other-types/recursion.d.mts.map +1 -1
  9. package/dist/other-types/recursion.mjs +47 -2
  10. package/dist/other-types/recursion.mjs.map +1 -1
  11. package/dist/record/keyof.d.mts.map +1 -1
  12. package/dist/record/keyof.mjs +22 -3
  13. package/dist/record/keyof.mjs.map +1 -1
  14. package/dist/record/merge-records.d.mts.map +1 -1
  15. package/dist/record/merge-records.mjs +52 -8
  16. package/dist/record/merge-records.mjs.map +1 -1
  17. package/dist/record/omit.d.mts.map +1 -1
  18. package/dist/record/omit.mjs +6 -2
  19. package/dist/record/omit.mjs.map +1 -1
  20. package/dist/record/partial.d.mts.map +1 -1
  21. package/dist/record/partial.mjs +7 -3
  22. package/dist/record/partial.mjs.map +1 -1
  23. package/dist/record/pick.d.mts.map +1 -1
  24. package/dist/record/pick.mjs +6 -2
  25. package/dist/record/pick.mjs.map +1 -1
  26. package/dist/record/record.mjs +1 -1
  27. package/dist/record/record.mjs.map +1 -1
  28. package/dist/record/required.d.mts.map +1 -1
  29. package/dist/record/required.mjs +7 -3
  30. package/dist/record/required.mjs.map +1 -1
  31. package/dist/record/valueof.d.mts.map +1 -1
  32. package/dist/record/valueof.mjs +6 -4
  33. package/dist/record/valueof.mjs.map +1 -1
  34. package/dist/type.d.mts +16 -1
  35. package/dist/type.d.mts.map +1 -1
  36. package/dist/type.mjs +52 -4
  37. package/dist/type.mjs.map +1 -1
  38. package/package.json +2 -2
  39. package/src/compose/intersection.mts +31 -3
  40. package/src/compose/union.mts +32 -4
  41. package/src/other-types/recursion.mts +60 -4
  42. package/src/record/key-value-record.test.mts +41 -0
  43. package/src/record/keyof.mts +31 -6
  44. package/src/record/keyof.test.mts +30 -0
  45. package/src/record/merge-records.mts +75 -12
  46. package/src/record/merge-records.test.mts +1026 -37
  47. package/src/record/omit.mts +21 -1
  48. package/src/record/partial.mts +12 -3
  49. package/src/record/pick.mts +10 -1
  50. package/src/record/record.mts +1 -1
  51. package/src/record/required.mts +12 -3
  52. package/src/record/valueof.mts +10 -5
  53. package/src/record/valueof.test.mts +34 -0
  54. package/src/type.mts +77 -4
@@ -1 +1 @@
1
- {"version":3,"file":"intersection.d.mts","sourceRoot":"","sources":["../../src/compose/intersection.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AASrD,eAAO,MAAM,YAAY,GAAI,KAAK,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAC3E,OAAO,KAAK,EACZ,aAAa,gBAAgB,CAAC,KAAK,CAAC,EACpC,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CACH,KACA,gBAAgB,CAAC,KAAK,CAkDxB,CAAC;AAEF,KAAK,gBAAgB,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CACtE,qBAAqB,CAAC,KAAK,CAAC,CAC7B,CAAC;AAEF,KAAK,qBAAqB,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IACnE,kBAAkB,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAEtD,kBAAU,kBAAkB,CAAC;IAC3B,MAAM,MAAM,yBAAyB,CACnC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IACxC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE/C,KAAK,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAClE,CAAC,GACD,KAAK,CAAC;;CACX;AA4BD,KAAK,cAAc,CAAC,KAAK,SAAS,SAAS,IAAI,CAAC,OAAO,CAAC,EAAE,IACxD,kBAAkB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAE3C,kBAAU,kBAAkB,CAAC;IAC3B,MAAM,MAAM,cAAc,CAAC,KAAK,SAAS,SAAS,OAAO,EAAE,IACzD,KAAK,SAAS,SAAS,EAAE,GACrB,SAAS,EAAE,GACX,KAAK,SAAS,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GAChD,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,GACvD,KAAK,CAAC;IAGd,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;;CACzD"}
1
+ {"version":3,"file":"intersection.d.mts","sourceRoot":"","sources":["../../src/compose/intersection.mts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,IAAI,EACT,KAAK,MAAM,EACZ,MAAM,aAAa,CAAC;AASrB,eAAO,MAAM,YAAY,GAAI,KAAK,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAC3E,OAAO,KAAK,EACZ,aAAa,gBAAgB,CAAC,KAAK,CAAC,EACpC,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CACH,KACA,gBAAgB,CAAC,KAAK,CAyExB,CAAC;AAEF,KAAK,gBAAgB,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CACtE,qBAAqB,CAAC,KAAK,CAAC,CAC7B,CAAC;AAEF,KAAK,qBAAqB,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IACnE,kBAAkB,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;AAEtD,kBAAU,kBAAkB,CAAC;IAC3B,MAAM,MAAM,yBAAyB,CACnC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IACxC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE/C,KAAK,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAClE,CAAC,GACD,KAAK,CAAC;;CACX;AA4BD,KAAK,cAAc,CAAC,KAAK,SAAS,SAAS,IAAI,CAAC,OAAO,CAAC,EAAE,IACxD,kBAAkB,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAE3C,kBAAU,kBAAkB,CAAC;IAC3B,MAAM,MAAM,cAAc,CAAC,KAAK,SAAS,SAAS,OAAO,EAAE,IACzD,KAAK,SAAS,SAAS,EAAE,GACrB,SAAS,EAAE,GACX,KAAK,SAAS,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GAChD,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,GACvD,KAAK,CAAC;IAGd,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;;CACzD"}
@@ -1,4 +1,5 @@
1
1
  import { Arr, Result } from 'ts-data-forge';
2
+ import { hasRecordInternals } from '../type.mjs';
2
3
  import { createAssertFn } from '../utils/create-assert-fn.mjs';
3
4
  import { createCastFn } from '../utils/create-cast-fn.mjs';
4
5
  import { createIsFn } from '../utils/create-is-fn.mjs';
@@ -34,7 +35,7 @@ const intersection = (types, defaultType, options) => {
34
35
  };
35
36
  const is = createIsFn(validate);
36
37
  const fill = (a) => (is(a) ? a : defaultType.fill(a));
37
- return {
38
+ const baseType = {
38
39
  typeName: typeNameFilled,
39
40
  defaultValue: defaultType.defaultValue,
40
41
  fill,
@@ -43,6 +44,22 @@ const intersection = (types, defaultType, options) => {
43
44
  assertIs: createAssertFn(validate),
44
45
  cast: createCastFn(validate),
45
46
  };
47
+ // If all types are records, add RecordTypeInternals
48
+ if (types.every(hasRecordInternals)) {
49
+ const shapeStructures = Arr.map(types, (t) => t.shapeStructure);
50
+ const excessProperty = Arr.some(types, (t) => t.excessProperty === 'reject')
51
+ ? 'reject'
52
+ : 'allow';
53
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
54
+ return {
55
+ ...baseType,
56
+ shapeStructure: Arr.isArrayOfLength(shapeStructures, 1)
57
+ ? shapeStructures[0]
58
+ : { kind: 'intersection', parts: shapeStructures },
59
+ excessProperty,
60
+ };
61
+ }
62
+ return baseType;
46
63
  };
47
64
 
48
65
  export { intersection };
@@ -1 +1 @@
1
- {"version":3,"file":"intersection.mjs","sources":["../../src/compose/intersection.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAUO,MAAM,YAAY,GAAG,CAC1B,KAAY,EACZ,WAAoC,EACpC,OAIC,KAC0B;AAG3B,IAAA,MAAM,cAAc,GAClB,OAAO,EAAE,QAAQ;AACjB,QAAA,CAAA,CAAA,EAAI,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG;AAE3D,IAAA,MAAM,QAAQ,GAAwB,CAAC,CAAC,KAAI;AAC1C,QAAA,MAAM,MAAM,GAA+B,GAAG,CAAC,QAAQ,CAAC,aAAS;AAC/D,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE5B,gBAAA,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBACrB,MAAM;AACJ,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,WAAW,EAAE,CAAC;AACd,wBAAA,YAAY,EAAE,cAAc;AAC5B,wBAAA,QAAQ,EAAE,cAAc;AACxB,wBAAA,OAAO,EAAE;AACP,4BAAA,IAAI,EAAE,cAAc;AACpB,4BAAA,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;AACxC,yBAAA;qBACwB;AAE3B,oBAAA,OAAO,GAAG,CAAC,KAAK;;;AAGtB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC1B,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;;;AAI3B,QAAA,OAAO,MAAM,CAAC,EAAE,CAAC,CAAM,CAAC;AAC1B,IAAA,CAAC;AAED,IAAA,MAAM,EAAE,GAAG,UAAU,CAAI,QAAQ,CAAC;IAElC,MAAM,IAAI,GAAoB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEtE,OAAO;AACL,QAAA,QAAQ,EAAE,cAAc;QACxB,YAAY,EAAE,WAAW,CAAC,YAAY;QACtC,IAAI;QACJ,QAAQ;QACR,EAAE;AACF,QAAA,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;KAC7B;AACH;;;;"}
1
+ {"version":3,"file":"intersection.mjs","sources":["../../src/compose/intersection.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAeO,MAAM,YAAY,GAAG,CAC1B,KAAY,EACZ,WAAoC,EACpC,OAIC,KAC0B;AAG3B,IAAA,MAAM,cAAc,GAClB,OAAO,EAAE,QAAQ;AACjB,QAAA,CAAA,CAAA,EAAI,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG;AAE3D,IAAA,MAAM,QAAQ,GAAwB,CAAC,CAAC,KAAI;AAC1C,QAAA,MAAM,MAAM,GAA+B,GAAG,CAAC,QAAQ,CAAC,aAAS;AAC/D,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE5B,gBAAA,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBACrB,MAAM;AACJ,wBAAA,IAAI,EAAE,EAAE;AACR,wBAAA,WAAW,EAAE,CAAC;AACd,wBAAA,YAAY,EAAE,cAAc;AAC5B,wBAAA,QAAQ,EAAE,cAAc;AACxB,wBAAA,OAAO,EAAE;AACP,4BAAA,IAAI,EAAE,cAAc;AACpB,4BAAA,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;AACxC,yBAAA;qBACwB;AAE3B,oBAAA,OAAO,GAAG,CAAC,KAAK;;;AAGtB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAC1B,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;;;AAI3B,QAAA,OAAO,MAAM,CAAC,EAAE,CAAC,CAAM,CAAC;AAC1B,IAAA,CAAC;AAED,IAAA,MAAM,EAAE,GAAG,UAAU,CAAI,QAAQ,CAAC;IAElC,MAAM,IAAI,GAAoB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEtE,IAAA,MAAM,QAAQ,GAAY;AACxB,QAAA,QAAQ,EAAE,cAAc;QACxB,YAAY,EAAE,WAAW,CAAC,YAAY;QACtC,IAAI;QACJ,QAAQ;QACR,EAAE;AACF,QAAA,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;KACpB;;AAGV,IAAA,IAAI,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE;AACnC,QAAA,MAAM,eAAe,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC;AAE/D,QAAA,MAAM,cAAc,GAAyB,GAAG,CAAC,IAAI,CACnD,KAAK,EACL,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,KAAK,QAAQ;AAEpC,cAAE;cACA,OAAO;;QAGX,OAAO;AACL,YAAA,GAAG,QAAQ;YACX,cAAc,EAAE,GAAG,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;AACpD,kBAAE,eAAe,CAAC,CAAC;kBAChB,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAY;YAC/D,cAAc;SACY;;AAG9B,IAAA,OAAO,QAAmC;AAC5C;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"union.d.mts","sourceRoot":"","sources":["../../src/compose/union.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AASrD,eAAO,MAAM,KAAK,GAAI,KAAK,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EACpE,OAAO,KAAK,EACZ,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;CAC/B,CAAC,CACH,KACA,SAAS,CAAC,KAAK,CA4CjB,CAAC;AAEF,KAAK,SAAS,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAC/D,cAAc,CAAC,KAAK,CAAC,CACtB,CAAC;AAEF,KAAK,cAAc,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAC5D,kBAAkB,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAE/C,kBAAU,kBAAkB,CAAC;IAC3B,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IACvE,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnC,KAAK,WAAW,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;;CAC7E"}
1
+ {"version":3,"file":"union.d.mts","sourceRoot":"","sources":["../../src/compose/union.mts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,IAAI,EACT,KAAK,MAAM,EACZ,MAAM,aAAa,CAAC;AASrB,eAAO,MAAM,KAAK,GAAI,KAAK,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EACpE,OAAO,KAAK,EACZ,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;CAC/B,CAAC,CACH,KACA,SAAS,CAAC,KAAK,CAmEjB,CAAC;AAEF,KAAK,SAAS,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAC/D,cAAc,CAAC,KAAK,CAAC,CACtB,CAAC;AAEF,KAAK,cAAc,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAC5D,kBAAkB,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAE/C,kBAAU,kBAAkB,CAAC;IAC3B,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IACvE,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnC,KAAK,WAAW,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;;CAC7E"}
@@ -1,4 +1,5 @@
1
- import { memoizeFunction, Result } from 'ts-data-forge';
1
+ import { memoizeFunction, Arr, Result } from 'ts-data-forge';
2
+ import { hasRecordInternals } from '../type.mjs';
2
3
  import { createAssertFn } from '../utils/create-assert-fn.mjs';
3
4
  import { createCastFn } from '../utils/create-cast-fn.mjs';
4
5
  import { createIsFn } from '../utils/create-is-fn.mjs';
@@ -26,7 +27,7 @@ const union = (types, options) => {
26
27
  ]);
27
28
  const is = createIsFn(validate);
28
29
  const fill = (a) => (is(a) ? a : getDefaultType().fill(a));
29
- return {
30
+ const baseType = {
30
31
  typeName: typeNameFilled,
31
32
  get defaultValue() {
32
33
  return getDefaultType().defaultValue;
@@ -37,6 +38,22 @@ const union = (types, options) => {
37
38
  assertIs: createAssertFn(validate),
38
39
  cast: createCastFn(validate),
39
40
  };
41
+ // If all types are records, add RecordTypeInternals with union structure
42
+ if (types.every(hasRecordInternals)) {
43
+ const shapeStructures = Arr.map(types, (t) => t.shapeStructure);
44
+ const excessProperty = Arr.some(types, (t) => t.excessProperty === 'reject')
45
+ ? 'reject'
46
+ : 'allow';
47
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
48
+ return {
49
+ ...baseType,
50
+ shapeStructure: Arr.isArrayOfLength(shapeStructures, 1)
51
+ ? shapeStructures[0]
52
+ : { kind: 'union', variants: shapeStructures },
53
+ excessProperty,
54
+ };
55
+ }
56
+ return baseType;
40
57
  };
41
58
 
42
59
  export { union };
@@ -1 +1 @@
1
- {"version":3,"file":"union.mjs","sources":["../../src/compose/union.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;MAUa,KAAK,GAAG,CACnB,KAAY,EACZ,OAKC,KACmB;AAGpB,IAAA,MAAM,cAAc,GAAG,eAAe,CACpC;;IAEE,OAAO,EAAE,WAAW,IAAK,KAAK,CAAC,CAAC,CAAsB,CACzD;IAED,MAAM,cAAc,GAClB,OAAO,EAAE,QAAQ,IAAI,CAAA,CAAA,EAAI,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA,CAAA,CAAG;IAEzE,MAAM,QAAQ,GAAwB,CAAC,CAAC,KACtC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvB;AACE,YAAA,MAAM,CAAC,EAAE,CAAC,CAAM;AAClB,UAAE,MAAM,CAAC,GAAG,CAAC;AACT,YAAA;AACE,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,YAAY,EAAE,cAAc;AAC5B,gBAAA,QAAQ,EAAE,cAAc;AACxB,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;AACxC,iBAAA;AACwB,aAAA;AAC5B,SAAA,CAAC;AAER,IAAA,MAAM,EAAE,GAAG,UAAU,CAAI,QAAQ,CAAC;IAElC,MAAM,IAAI,GAAoB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3E,OAAO;AACL,QAAA,QAAQ,EAAE,cAAc;AACxB,QAAA,IAAI,YAAY,GAAA;AACd,YAAA,OAAO,cAAc,EAAE,CAAC,YAAY;SACrC;QACD,IAAI;QACJ,QAAQ;QACR,EAAE;AACF,QAAA,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;KAC7B;AACH;;;;"}
1
+ {"version":3,"file":"union.mjs","sources":["../../src/compose/union.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;MAea,KAAK,GAAG,CACnB,KAAY,EACZ,OAKC,KACmB;AAGpB,IAAA,MAAM,cAAc,GAAG,eAAe,CACpC;;IAEE,OAAO,EAAE,WAAW,IAAK,KAAK,CAAC,CAAC,CAAsB,CACzD;IAED,MAAM,cAAc,GAClB,OAAO,EAAE,QAAQ,IAAI,CAAA,CAAA,EAAI,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA,CAAA,CAAG;IAEzE,MAAM,QAAQ,GAAwB,CAAC,CAAC,KACtC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvB;AACE,YAAA,MAAM,CAAC,EAAE,CAAC,CAAM;AAClB,UAAE,MAAM,CAAC,GAAG,CAAC;AACT,YAAA;AACE,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,YAAY,EAAE,cAAc;AAC5B,gBAAA,QAAQ,EAAE,cAAc;AACxB,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;AACxC,iBAAA;AACwB,aAAA;AAC5B,SAAA,CAAC;AAER,IAAA,MAAM,EAAE,GAAG,UAAU,CAAI,QAAQ,CAAC;IAElC,MAAM,IAAI,GAAoB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE3E,IAAA,MAAM,QAAQ,GAAY;AACxB,QAAA,QAAQ,EAAE,cAAc;AACxB,QAAA,IAAI,YAAY,GAAA;AACd,YAAA,OAAO,cAAc,EAAE,CAAC,YAAY;SACrC;QACD,IAAI;QACJ,QAAQ;QACR,EAAE;AACF,QAAA,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;KACpB;;AAGV,IAAA,IAAI,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE;AACnC,QAAA,MAAM,eAAe,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC;AAE/D,QAAA,MAAM,cAAc,GAAyB,GAAG,CAAC,IAAI,CACnD,KAAK,EACL,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,KAAK,QAAQ;AAEpC,cAAE;cACA,OAAO;;QAGX,OAAO;AACL,YAAA,GAAG,QAAQ;YACX,cAAc,EAAE,GAAG,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;AACpD,kBAAE,eAAe,CAAC,CAAC;kBAChB,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAY;YAC3D,cAAc;SACK;;AAGvB,IAAA,OAAO,QAA4B;AACrC;;;;"}
package/dist/index.mjs CHANGED
@@ -59,7 +59,7 @@ export { pick } from './record/pick.mjs';
59
59
  export { record, strictRecord } from './record/record.mjs';
60
60
  export { required } from './record/required.mjs';
61
61
  export { valueof } from './record/valueof.mjs';
62
- export { hasRecordInternals } from './type.mjs';
62
+ export { flattenShapeStructure, getShape, hasRecordInternals } from './type.mjs';
63
63
  export { createAssertFn } from './utils/create-assert-fn.mjs';
64
64
  export { createCastFn } from './utils/create-cast-fn.mjs';
65
65
  export { createIsFn } from './utils/create-is-fn.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"recursion.d.mts","sourceRoot":"","sources":["../../src/other-types/recursion.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAGxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+IG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EACzB,UAAU,MAAM,EAChB,YAAY,MAAM,IAAI,CAAC,CAAC,CAAC,EACzB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,YAAY,EAAE,CAAC,CAAC;CACjB,CAAC,CACH,KACA,IAAI,CAAC,CAAC,CAwBR,CAAC"}
1
+ {"version":3,"file":"recursion.d.mts","sourceRoot":"","sources":["../../src/other-types/recursion.mts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,IAAI,EAAE,MAAM,aAAa,CAAC;AAG5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+IG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EACzB,UAAU,MAAM,EAChB,YAAY,MAAM,IAAI,CAAC,CAAC,CAAC,EACzB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,YAAY,EAAE,CAAC,CAAC;CACjB,CAAC,CACH,KACA,IAAI,CAAC,CAAC,CAgFR,CAAC"}
@@ -1,4 +1,5 @@
1
- import { memoizeFunction } from 'ts-data-forge';
1
+ import { memoizeFunction, isRecord, hasKey } from 'ts-data-forge';
2
+ import { hasRecordInternals } from '../type.mjs';
2
3
  import { createAssertFn } from '../utils/create-assert-fn.mjs';
3
4
  import { createCastFn } from '../utils/create-cast-fn.mjs';
4
5
  import { createIsFn } from '../utils/create-is-fn.mjs';
@@ -153,7 +154,7 @@ const recursion = (typeName, definition, options) => {
153
154
  const validate = (a) => getInnerType().validate(a);
154
155
  const is = createIsFn(validate);
155
156
  const fill = (a) => getInnerType().fill(a);
156
- return {
157
+ const baseType = {
157
158
  typeName,
158
159
  get defaultValue() {
159
160
  return getDefaultValue();
@@ -164,6 +165,50 @@ const recursion = (typeName, definition, options) => {
164
165
  assertIs: createAssertFn(validate),
165
166
  cast: createCastFn(validate),
166
167
  };
168
+ // Proxy to propagate RecordTypeInternals if the inner type has them
169
+ return new Proxy(baseType, {
170
+ get: (target, prop) => {
171
+ if (prop === 'shapeStructure' || prop === 'excessProperty') {
172
+ const inner = getInnerType();
173
+ if (hasRecordInternals(inner)) {
174
+ return inner[prop];
175
+ }
176
+ }
177
+ if (typeof prop === 'string' &&
178
+ isRecord(target) &&
179
+ hasKey(target, prop)) {
180
+ return target[prop];
181
+ }
182
+ return undefined;
183
+ },
184
+ has: (target, prop) => {
185
+ if (prop === 'shapeStructure' || prop === 'excessProperty') {
186
+ const inner = getInnerType();
187
+ return hasRecordInternals(inner);
188
+ }
189
+ return isRecord(target) && hasKey(target, prop);
190
+ },
191
+ ownKeys: (target) => {
192
+ const inner = getInnerType();
193
+ if (hasRecordInternals(inner)) {
194
+ return [...Object.keys(target), 'shapeStructure', 'excessProperty'];
195
+ }
196
+ return Object.keys(target);
197
+ },
198
+ getOwnPropertyDescriptor: (target, prop) => {
199
+ if (prop === 'shapeStructure' || prop === 'excessProperty') {
200
+ const inner = getInnerType();
201
+ if (hasRecordInternals(inner)) {
202
+ return {
203
+ enumerable: true,
204
+ configurable: true,
205
+ value: inner[prop],
206
+ };
207
+ }
208
+ }
209
+ return Object.getOwnPropertyDescriptor(target, prop);
210
+ },
211
+ });
167
212
  };
168
213
 
169
214
  export { recursion };
@@ -1 +1 @@
1
- {"version":3,"file":"recursion.mjs","sources":["../../src/other-types/recursion.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+IG;AACI,MAAM,SAAS,GAAG,CACvB,QAAgB,EAChB,UAAyB,EACzB,OAIC,KACU;AACX,IAAA,MAAM,eAAe,GAAG,eAAe,CACrC,MAAS,OAAO,EAAE,YAAY,IAAI,YAAY,EAAE,CAAC,YAAY,CAC9D;AAED,IAAA,MAAM,YAAY,GAAkB,eAAe,CAAC,UAAU,CAAC;AAE/D,IAAA,MAAM,QAAQ,GAAwB,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEvE,IAAA,MAAM,EAAE,GAAG,UAAU,CAAI,QAAQ,CAAC;AAElC,IAAA,MAAM,IAAI,GAAoB,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAE3D,OAAO;QACL,QAAQ;AACR,QAAA,IAAI,YAAY,GAAA;YACd,OAAO,eAAe,EAAE;QAC1B,CAAC;QACD,IAAI;QACJ,QAAQ;QACR,EAAE;AACF,QAAA,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;AAClC,QAAA,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC;KAC7B;AACH;;;;"}
1
+ {"version":3,"file":"recursion.mjs","sources":["../../src/other-types/recursion.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"keyof.d.mts","sourceRoot":"","sources":["../../src/record/keyof.mts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,IAAI,EAEV,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,KAAK,GAAI,KAAK,CAAC,CAAC,SAAS,aAAa,EACjD,YAAY,IAAI,CAAC,CAAC,CAAC,EACnB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CACH,KACA,SAAS,CAAC,CAAC,CAeb,CAAC;AAMF,KAAK,SAAS,CAAC,CAAC,SAAS,aAAa,IACpC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"keyof.d.mts","sourceRoot":"","sources":["../../src/record/keyof.mts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,IAAI,EAGV,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,KAAK,GAAI,KAAK,CAAC,CAAC,SAAS,aAAa,EACjD,YAAY,IAAI,CAAC,CAAC,CAAC,EACnB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CACH,KACA,SAAS,CAAC,CAAC,CAeb,CAAC;AA+BF,KAAK,SAAS,CAAC,CAAC,SAAS,aAAa,IACpC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC"}
@@ -1,22 +1,41 @@
1
1
  import { pipe, Arr } from 'ts-data-forge';
2
2
  import { enumType } from '../enum/enum.mjs';
3
3
  import '@sindresorhus/is';
4
+ import { hasRecordInternals } from '../type.mjs';
4
5
  import '../other-types/unknown.mjs';
5
6
  import { undefinedType } from '../primitives/undefined.mjs';
6
- import { hasRecordInternals } from '../type.mjs';
7
7
 
8
8
  const keyof = (recordType, options) => {
9
9
  if (!hasRecordInternals(recordType)) {
10
10
  throw new Error(`Expected a record type but received: ${recordType.typeName}`);
11
11
  }
12
12
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
13
- return pipe(getKeys(recordType)).map((keys) => Arr.isNonEmpty(keys)
13
+ return pipe(getKeysFromStructure(recordType.shapeStructure)).map((keys) => Arr.isNonEmpty(keys)
14
14
  ? enumType(keys, {
15
15
  typeName: options?.typeName ?? `keyof ${recordType.typeName}`,
16
16
  })
17
17
  : undefinedType).value;
18
18
  };
19
- const getKeys = (recordType) => Object.keys(recordType.shape);
19
+ const getKeysFromStructure = (structure) => {
20
+ switch (structure.kind) {
21
+ case 'simple':
22
+ return Object.keys(structure.shape);
23
+ case 'union':
24
+ return getKeysHelper(structure.variants);
25
+ case 'intersection':
26
+ return getKeysHelper(structure.parts);
27
+ }
28
+ };
29
+ const getKeysHelper = (structures) => {
30
+ const mut_allKeys = new Set();
31
+ for (const part of structures) {
32
+ const keys = getKeysFromStructure(part);
33
+ for (const key of keys) {
34
+ mut_allKeys.add(key);
35
+ }
36
+ }
37
+ return Array.from(mut_allKeys);
38
+ };
20
39
 
21
40
  export { keyof };
22
41
  //# sourceMappingURL=keyof.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"keyof.mjs","sources":["../../src/record/keyof.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;MAUa,KAAK,GAAG,CACnB,UAAmB,EACnB,OAIC,KACe;AAChB,IAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,UAAU,CAAC,QAAQ,CAAA,CAAE,CAC9D;;;IAIH,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KACxC,GAAG,CAAC,UAAU,CAAC,IAAI;AACjB,UAAG,QAAQ,CAAC,IAAI,EAAE;YACd,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAA,MAAA,EAAS,UAAU,CAAC,QAAQ,CAAA,CAAE;SAC9D;AACH,UAAG,aAAwC,CAC9C,CAAC,KAAqB;AACzB;AAEA,MAAM,OAAO,GAAG,CACd,UAA+C,KACzB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;;;"}
1
+ {"version":3,"file":"keyof.mjs","sources":["../../src/record/keyof.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;MAUa,KAAK,GAAG,CACnB,UAAmB,EACnB,OAIC,KACe;AAChB,IAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,UAAU,CAAC,QAAQ,CAAA,CAAE,CAC9D;;;IAIH,OAAO,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KACpE,GAAG,CAAC,UAAU,CAAC,IAAI;AACjB,UAAG,QAAQ,CAAC,IAAI,EAAE;YACd,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAA,MAAA,EAAS,UAAU,CAAC,QAAQ,CAAA,CAAE;SAC9D;AACH,UAAG,aAAwC,CAC9C,CAAC,KAAqB;AACzB;AAEA,MAAM,oBAAoB,GAAG,CAAC,SAAyB,KAAuB;AAC5E,IAAA,QAAQ,SAAS,CAAC,IAAI;AACpB,QAAA,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAErC,QAAA,KAAK,OAAO;AACV,YAAA,OAAO,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC;AAE1C,QAAA,KAAK,cAAc;AACjB,YAAA,OAAO,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC;;AAE3C,CAAC;AAED,MAAM,aAAa,GAAG,CACpB,UAAqC,KAChB;AACrB,IAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU;AAErC,IAAA,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;AAC7B,QAAA,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC;AAEvC,QAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,YAAA,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;;;AAIxB,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC;AAChC,CAAC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"merge-records.d.mts","sourceRoot":"","sources":["../../src/record/merge-records.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,oBAAoB,EAGzB,KAAK,IAAI,EAGV,MAAM,aAAa,CAAC;AAIrB,eAAO,MAAM,YAAY,GACvB,KAAK,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAEtD,aAAa,KAAK,EAClB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,oBAAoB,CAAC;CACtC,CAAC,CACH,KACA,gBAAgB,CAAC,KAAK,CA6BxB,CAAC;AAEF,KAAK,gBAAgB,CAAC,KAAK,SAAS,SAAS,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,IAAI,CACxE,gBAAgB,CAAC,KAAK,CAAC,CACxB,CAAC;AAEF,+EAA+E;AAC/E,KAAK,gBAAgB,CAAC,KAAK,SAAS,SAAS,IAAI,CAAC,aAAa,CAAC,EAAE,IAChE,mBAAmB,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE5D,oGAAoG;AACpG,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,SAAS,aAAa,GACjD,QAAQ,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,GAClC,CAAC,CAAC;AAEN,KAAK,eAAe,CAAC,KAAK,SAAS,SAAS,OAAO,EAAE,IACnD,KAAK,SAAS,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GAC9C,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,GACvD,SAAS,EAAE,CAAC;AAElB,KAAK,YAAY,CAAC,CAAC,IACjB,CAAC,SAAS,QAAQ,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"merge-records.d.mts","sourceRoot":"","sources":["../../src/record/merge-records.mts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,oBAAoB,EAGzB,KAAK,IAAI,EAIV,MAAM,aAAa,CAAC;AAMrB,eAAO,MAAM,YAAY,GACvB,KAAK,CAAC,KAAK,SAAS,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAEtD,aAAa,KAAK,EAClB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,oBAAoB,CAAC;CACtC,CAAC,CACH,KACA,gBAAgB,CAAC,KAAK,CA6DxB,CAAC;AA6BF,KAAK,gBAAgB,CAAC,KAAK,SAAS,SAAS,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,IAAI,CACxE,gBAAgB,CAAC,KAAK,CAAC,CACxB,CAAC;AAEF,+EAA+E;AAC/E,KAAK,gBAAgB,CAAC,KAAK,SAAS,SAAS,IAAI,CAAC,aAAa,CAAC,EAAE,IAChE,mBAAmB,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE5D,oGAAoG;AACpG,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,SAAS,aAAa,GACjD,QAAQ,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,GAClC,CAAC,CAAC;AAEN,KAAK,eAAe,CAAC,KAAK,SAAS,SAAS,OAAO,EAAE,IACnD,KAAK,SAAS,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,GAC9C,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,GACvD,SAAS,EAAE,CAAC;AAElB,KAAK,YAAY,CAAC,CAAC,IACjB,CAAC,SAAS,QAAQ,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC"}
@@ -1,26 +1,70 @@
1
1
  import { Arr, Obj } from 'ts-data-forge';
2
+ import { hasRecordInternals } from '../type.mjs';
2
3
  import { toIntersectionString } from '../utils/to-union-string.mjs';
4
+ import { union } from '../compose/union.mjs';
3
5
  import '@sindresorhus/is';
4
6
  import '../other-types/unknown.mjs';
5
- import { hasRecordInternals } from '../type.mjs';
6
7
  import { record } from './record.mjs';
7
8
 
9
+ const MERGE_RECORDS_MAX_VARIANTS = 10_000;
8
10
  const mergeRecords = (recordTypes, options) => {
9
11
  if (!recordTypes.every(hasRecordInternals)) {
10
12
  throw new Error('Expected a record type but received a non-record type in mergeRecords');
11
13
  }
12
14
  const typeNameFilled = options?.typeName ??
13
15
  `(${toIntersectionString(recordTypes.map((a) => a.typeName))})`;
14
- const shapes = Arr.map(recordTypes, (t) => t.shape);
15
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
16
- const mergedShape = Obj.merge(...shapes);
16
+ // Expand all shape structures to get all possible shape combinations
17
+ const expandedShapesPerType = Arr.map(recordTypes, (t) => expandShapeStructure(t.shapeStructure));
18
+ // Estimate the total number of merged variants that would be produced.
19
+ // This is the product of the number of variants for each record type.
20
+ const estimatedVariantCount = expandedShapesPerType.reduce((acc, shapes) => acc * shapes.length, 1);
21
+ if (estimatedVariantCount > MERGE_RECORDS_MAX_VARIANTS) {
22
+ throw new Error(`mergeRecords would create ${estimatedVariantCount} record variants, exceeding the limit of ${MERGE_RECORDS_MAX_VARIANTS}. ` +
23
+ 'This could lead to excessive memory or CPU usage. Consider simplifying the record types or reducing union/intersection nesting.');
24
+ }
25
+ // For merging records (which is an intersection operation),
26
+ // we need to create the cartesian product of all variants
27
+ // For example: {a} & ({b} | {c}) = ({a} & {b}) | ({a} & {c})
28
+ const allCombinations = Arr.cartesianProduct(expandedShapesPerType);
29
+ // Merge each combination
30
+ const mergedShapes = Arr.map(allCombinations, (shapes) => Obj.merge(...shapes));
17
31
  const excessProperty = options?.excessProperty ?? deriveStrictestExcessProperty(recordTypes);
18
- const internalRecord = record(mergedShape, {
32
+ // If there's only one merged shape, return it directly
33
+ if (Arr.isArrayOfLength(mergedShapes, 1)) {
34
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
35
+ return record(mergedShapes[0], {
36
+ typeName: typeNameFilled,
37
+ excessProperty,
38
+ });
39
+ }
40
+ // If there are multiple variants, we need to return a union
41
+ const variants = Arr.map(mergedShapes, (shape) => record(shape, { excessProperty }));
42
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
43
+ return union(variants, {
19
44
  typeName: typeNameFilled,
20
- excessProperty,
21
45
  });
22
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
23
- return internalRecord;
46
+ };
47
+ /**
48
+ * Expands a ShapeStructure into all possible simple shapes.
49
+ * For union structures, returns an array of all variant shapes.
50
+ * For intersection structures, computes cartesian product of all parts.
51
+ */
52
+ const expandShapeStructure = (structure) => {
53
+ switch (structure.kind) {
54
+ case 'simple': {
55
+ return [structure.shape];
56
+ }
57
+ case 'union': {
58
+ // Union: flatten all variants
59
+ return structure.variants.flatMap(expandShapeStructure);
60
+ }
61
+ case 'intersection': {
62
+ // Intersection: compute cartesian product of all parts
63
+ const expandedParts = structure.parts.map(expandShapeStructure);
64
+ const combinations = Arr.cartesianProduct(expandedParts);
65
+ return Arr.map(combinations, (shapes) => Obj.merge(...shapes));
66
+ }
67
+ }
24
68
  };
25
69
  const deriveStrictestExcessProperty = (types) => types.some((t) => t.excessProperty === 'reject') ? 'reject' : 'allow';
26
70
 
@@ -1 +1 @@
1
- {"version":3,"file":"merge-records.mjs","sources":["../../src/record/merge-records.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;MAaa,YAAY,GAAG,CAG1B,WAAkB,EAClB,OAKC,KAC0B;IAC3B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE;AAC1C,QAAA,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE;;AAGH,IAAA,MAAM,cAAc,GAClB,OAAO,EAAE,QAAQ;AACjB,QAAA,CAAA,CAAA,EAAI,oBAAoB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG;AAEjE,IAAA,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CACpB,WAAW,EACX,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CACmB;;IAGnC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAiB;IAExD,MAAM,cAAc,GAClB,OAAO,EAAE,cAAc,IAAI,6BAA6B,CAAC,WAAW,CAAC;AAEvE,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,EAAE;AACzC,QAAA,QAAQ,EAAE,cAAc;QACxB,cAAc;AACf,KAAA,CAAC;;AAGF,IAAA,OAAO,cAAoD;AAC7D;AAuBA,MAAM,6BAA6B,GAAG,CACpC,KAAqC,KAErC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,KAAK,QAAQ,CAAC,GAAG,QAAQ,GAAG,OAAO;;;;"}
1
+ {"version":3,"file":"merge-records.mjs","sources":["../../src/record/merge-records.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AAeA,MAAM,0BAA0B,GAAG,MAAM;MAE5B,YAAY,GAAG,CAG1B,WAAkB,EAClB,OAKC,KAC0B;IAC3B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE;AAC1C,QAAA,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE;;AAGH,IAAA,MAAM,cAAc,GAClB,OAAO,EAAE,QAAQ;AACjB,QAAA,CAAA,CAAA,EAAI,oBAAoB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG;;IAGjE,MAAM,qBAAqB,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,KACnD,oBAAoB,CAAC,CAAC,CAAC,cAAc,CAAC,CACvC;;;IAID,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,MAAM,CACxD,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EACpC,CAAC,CACF;AAED,IAAA,IAAI,qBAAqB,GAAG,0BAA0B,EAAE;AACtD,QAAA,MAAM,IAAI,KAAK,CACb,6BAA6B,qBAAqB,CAAA,yCAAA,EAA4C,0BAA0B,CAAA,EAAA,CAAI;AAC1H,YAAA,iIAAiI,CACpI;;;;;IAMH,MAAM,eAAe,GAAG,GAAG,CAAC,gBAAgB,CAAC,qBAAqB,CAAC;;IAGnE,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,MAAM,KACnD,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CACrB;IAED,MAAM,cAAc,GAClB,OAAO,EAAE,cAAc,IAAI,6BAA6B,CAAC,WAAW,CAAC;;IAGvE,IAAI,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE;;AAExC,QAAA,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;AAC7B,YAAA,QAAQ,EAAE,cAAc;YACxB,cAAc;AACf,SAAA,CAA4B;;;IAI/B,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,KAAK,KAC3C,MAAM,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,CAAC,CAClC;;IAGD,OAAO,KAAK,CAAC,QAA8C,EAAE;AAC3D,QAAA,QAAQ,EAAE,cAAc;AACzB,KAAA,CAA4B;AAC/B;AAEA;;;;AAIG;AACH,MAAM,oBAAoB,GAAG,CAC3B,SAAyB,KACE;AAC3B,IAAA,QAAQ,SAAS,CAAC,IAAI;QACpB,KAAK,QAAQ,EAAE;AACb,YAAA,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;;QAE1B,KAAK,OAAO,EAAE;;YAEZ,OAAO,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC;;QAEzD,KAAK,cAAc,EAAE;;YAEnB,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC;YAE/D,MAAM,YAAY,GAAG,GAAG,CAAC,gBAAgB,CAAC,aAAa,CAAC;AAExD,YAAA,OAAO,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC;;;AAGpE,CAAC;AAuBD,MAAM,6BAA6B,GAAG,CACpC,KAAqC,KAErC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,KAAK,QAAQ,CAAC,GAAG,QAAQ,GAAG,OAAO;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"omit.d.mts","sourceRoot":"","sources":["../../src/record/omit.mts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,IAAI,EAEV,MAAM,aAAa,CAAC;AAIrB,+CAA+C;AAC/C,eAAO,MAAM,IAAI,GACf,KAAK,CAAC,CAAC,SAAS,aAAa,EAC7B,KAAK,CAAC,UAAU,SAAS,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,EAEtD,YAAY,IAAI,CAAC,CAAC,CAAC,EACnB,YAAY,UAAU,EACtB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,oBAAoB,CAAC;CACtC,CAAC,CACH,KACA,WAAW,CAAC,CAAC,EAAE,UAAU,CAe3B,CAAC;AAEF,KAAK,WAAW,CACd,CAAC,SAAS,aAAa,EACvB,UAAU,SAAS,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,IAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"omit.d.mts","sourceRoot":"","sources":["../../src/record/omit.mts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EAGzB,KAAK,IAAI,EAEV,MAAM,aAAa,CAAC;AAIrB,+CAA+C;AAC/C,eAAO,MAAM,IAAI,GACf,KAAK,CAAC,CAAC,SAAS,aAAa,EAC7B,KAAK,CAAC,UAAU,SAAS,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,EAEtD,YAAY,IAAI,CAAC,CAAC,CAAC,EACnB,YAAY,UAAU,EACtB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,oBAAoB,CAAC;CACtC,CAAC,CACH,KACA,WAAW,CAAC,CAAC,EAAE,UAAU,CAuB3B,CAAC;AAEF,KAAK,WAAW,CACd,CAAC,SAAS,aAAa,EACvB,UAAU,SAAS,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,IAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Obj } from 'ts-data-forge';
2
- import { hasRecordInternals } from '../type.mjs';
2
+ import { hasRecordInternals, flattenShapeStructure } from '../type.mjs';
3
3
  import { toUnionKeyString } from '../utils/to-union-string.mjs';
4
4
  import { record } from './record.mjs';
5
5
 
@@ -8,8 +8,12 @@ const omit = (recordType, keysToOmit, options) => {
8
8
  if (!hasRecordInternals(recordType)) {
9
9
  throw new Error(`Expected a record type but received: ${recordType.typeName}`);
10
10
  }
11
+ const shape = flattenShapeStructure(recordType.shapeStructure);
12
+ if (shape === undefined) {
13
+ throw new Error(`omit() requires a simple or intersection record type, but received a union type`);
14
+ }
11
15
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
12
- return record(Obj.omit(recordType.shape, keysToOmit), {
16
+ return record(Obj.omit(shape, keysToOmit), {
13
17
  typeName: options?.typeName ??
14
18
  `Omit<${recordType.typeName}, ${toUnionKeyString(keysToOmit)}>`,
15
19
  excessProperty: options?.excessProperty ?? recordType.excessProperty,
@@ -1 +1 @@
1
- {"version":3,"file":"omit.mjs","sources":["../../src/record/omit.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAUA;AACO,MAAM,IAAI,GAAG,CAIlB,UAAmB,EACnB,UAAsB,EACtB,OAKC,KAC6B;AAC9B,IAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,UAAU,CAAC,QAAQ,CAAA,CAAE,CAC9D;;;AAIH,IAAA,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;QACpD,QAAQ,EACN,OAAO,EAAE,QAAQ;YACjB,CAAA,KAAA,EAAQ,UAAU,CAAC,QAAQ,CAAA,EAAA,EAAK,gBAAgB,CAAC,UAAU,CAAC,CAAA,CAAA,CAAG;AAEjE,QAAA,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,UAAU,CAAC,cAAc;AACrE,KAAA,CAA0C;AAC7C;;;;"}
1
+ {"version":3,"file":"omit.mjs","sources":["../../src/record/omit.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAWA;AACO,MAAM,IAAI,GAAG,CAIlB,UAAmB,EACnB,UAAsB,EACtB,OAKC,KAC6B;AAC9B,IAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,UAAU,CAAC,QAAQ,CAAA,CAAE,CAC9D;;IAGH,MAAM,KAAK,GAAG,qBAAqB,CAAC,UAAU,CAAC,cAAc,CAAC;AAE9D,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,QAAA,MAAM,IAAI,KAAK,CACb,CAAA,+EAAA,CAAiF,CAClF;;;IAIH,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;QACzC,QAAQ,EACN,OAAO,EAAE,QAAQ;YACjB,CAAA,KAAA,EAAQ,UAAU,CAAC,QAAQ,CAAA,EAAA,EAAK,gBAAgB,CAAC,UAAU,CAAC,CAAA,CAAA,CAAG;AAEjE,QAAA,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,UAAU,CAAC,cAAc;AACrE,KAAA,CAA0C;AAC7C;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"partial.d.mts","sourceRoot":"","sources":["../../src/record/partial.mts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,IAAI,EAGV,MAAM,aAAa,CAAC;AAKrB;;;GAGG;AACH,eAAO,MAAM,OAAO,GAClB,KAAK,CAAC,CAAC,SAAS,aAAa,EAC7B,KAAK,CAAC,gBAAgB,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAE9D,YAAY,IAAI,CAAC,CAAC,CAAC,EACnB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,oBAAoB,CAAC;CACtC,CAAC,CACH,KACA,WAAW,CAAC,CAAC,EAAE,gBAAgB,CA4BjC,CAAC;AAEF,KAAK,WAAW,CACd,CAAC,SAAS,aAAa,EACvB,gBAAgB,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,SAAS,GAClE,SAAS,IACT,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAE5C,sCAAsC;AACtC,KAAK,YAAY,CACf,CAAC,SAAS,aAAa,EACvB,gBAAgB,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,SAAS,IAEpE,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,SAAS,IAAI,GAC5C,OAAO,CAAC,CAAC,CAAC,GACV,gBAAgB,CAAC,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"partial.d.mts","sourceRoot":"","sources":["../../src/record/partial.mts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,IAAI,EAKV,MAAM,aAAa,CAAC;AAKrB;;;GAGG;AACH,eAAO,MAAM,OAAO,GAClB,KAAK,CAAC,CAAC,SAAS,aAAa,EAC7B,KAAK,CAAC,gBAAgB,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAE9D,YAAY,IAAI,CAAC,CAAC,CAAC,EACnB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,oBAAoB,CAAC;CACtC,CAAC,CACH,KACA,WAAW,CAAC,CAAC,EAAE,gBAAgB,CAoCjC,CAAC;AAEF,KAAK,WAAW,CACd,CAAC,SAAS,aAAa,EACvB,gBAAgB,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,SAAS,GAClE,SAAS,IACT,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAE5C,sCAAsC;AACtC,KAAK,YAAY,CACf,CAAC,SAAS,aAAa,EACvB,gBAAgB,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,SAAS,IAEpE,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,SAAS,IAAI,GAC5C,OAAO,CAAC,CAAC,CAAC,GACV,gBAAgB,CAAC,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import 'ts-data-forge';
2
- import { hasRecordInternals } from '../type.mjs';
2
+ import { hasRecordInternals, flattenShapeStructure } from '../type.mjs';
3
3
  import { toUnionKeyString } from '../utils/to-union-string.mjs';
4
4
  import { optional } from './optional.mjs';
5
5
  import { record } from './record.mjs';
@@ -12,12 +12,16 @@ const partial = (recordType, options) => {
12
12
  if (!hasRecordInternals(recordType)) {
13
13
  throw new Error(`Expected a record type but received: ${recordType.typeName}`);
14
14
  }
15
+ const shape = flattenShapeStructure(recordType.shapeStructure);
16
+ if (shape === undefined) {
17
+ throw new Error(`partial() requires a simple or intersection record type, but received a union type`);
18
+ }
15
19
  const typeNameFilled = options?.typeName ??
16
20
  (options?.keysToBeOptional === undefined
17
21
  ? `Partial<${recordType.typeName}>`
18
22
  : `PartiallyPartial<${recordType.typeName}, ${toUnionKeyString(options.keysToBeOptional)}>`);
19
- const keysToBeOptional = new Set(options?.keysToBeOptional ?? Object.keys(recordType.shape));
20
- const partialShape = Object.fromEntries(Object.entries(recordType.shape).map(([k, v]) => [k, keysToBeOptional.has(k) ? optional(v) : v]));
23
+ const keysToBeOptional = new Set(options?.keysToBeOptional ?? Object.keys(shape));
24
+ const partialShape = Object.fromEntries(Object.entries(shape).map(([k, v]) => [k, keysToBeOptional.has(k) ? optional(v) : v]));
21
25
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
22
26
  return record(partialShape, {
23
27
  typeName: typeNameFilled,
@@ -1 +1 @@
1
- {"version":3,"file":"partial.mjs","sources":["../../src/record/partial.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAYA;;;AAGG;MACU,OAAO,GAAG,CAIrB,UAAmB,EACnB,OAMC,KACmC;AACpC,IAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,UAAU,CAAC,QAAQ,CAAA,CAAE,CAC9D;;AAGH,IAAA,MAAM,cAAc,GAClB,OAAO,EAAE,QAAQ;AACjB,SAAC,OAAO,EAAE,gBAAgB,KAAK;AAC7B,cAAE,CAAA,QAAA,EAAW,UAAU,CAAC,QAAQ,CAAA,CAAA;AAChC,cAAE,CAAA,iBAAA,EAAoB,UAAU,CAAC,QAAQ,CAAA,EAAA,EAAK,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA,CAAA,CAAG,CAAC;AAEhG,IAAA,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CACnD,OAAO,EAAE,gBAAgB,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAC3D;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CACrC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAClC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAU,CACpE,CACqB;;IAGxB,OAAO,MAAM,CAAC,YAAY,EAAE;AAC1B,QAAA,QAAQ,EAAE,cAAc;AACxB,QAAA,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,UAAU,CAAC,cAAc;AACrE,KAAA,CAAgD;AACnD;;;;"}
1
+ {"version":3,"file":"partial.mjs","sources":["../../src/record/partial.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAaA;;;AAGG;MACU,OAAO,GAAG,CAIrB,UAAmB,EACnB,OAMC,KACmC;AACpC,IAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,UAAU,CAAC,QAAQ,CAAA,CAAE,CAC9D;;IAGH,MAAM,KAAK,GAAG,qBAAqB,CAAC,UAAU,CAAC,cAAc,CAAC;AAE9D,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,QAAA,MAAM,IAAI,KAAK,CACb,CAAA,kFAAA,CAAoF,CACrF;;AAGH,IAAA,MAAM,cAAc,GAClB,OAAO,EAAE,QAAQ;AACjB,SAAC,OAAO,EAAE,gBAAgB,KAAK;AAC7B,cAAE,CAAA,QAAA,EAAW,UAAU,CAAC,QAAQ,CAAA,CAAA;AAChC,cAAE,CAAA,iBAAA,EAAoB,UAAU,CAAC,QAAQ,CAAA,EAAA,EAAK,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA,CAAA,CAAG,CAAC;AAEhG,IAAA,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CACnD,OAAO,EAAE,gBAAgB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAChD;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CACrC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CACvB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAU,CACpE,CACqB;;IAGxB,OAAO,MAAM,CAAC,YAAY,EAAE;AAC1B,QAAA,QAAQ,EAAE,cAAc;AACxB,QAAA,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,UAAU,CAAC,cAAc;AACrE,KAAA,CAAgD;AACnD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"pick.d.mts","sourceRoot":"","sources":["../../src/record/pick.mts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,IAAI,EAEV,MAAM,aAAa,CAAC;AAIrB,8CAA8C;AAC9C,eAAO,MAAM,IAAI,GACf,KAAK,CAAC,CAAC,SAAS,aAAa,EAC7B,KAAK,CAAC,UAAU,SAAS,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,EAEtD,YAAY,IAAI,CAAC,CAAC,CAAC,EACnB,YAAY,UAAU,EACtB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,oBAAoB,CAAC;CACtC,CAAC,CACH,KACA,UAAU,CAAC,CAAC,EAAE,UAAU,CAe1B,CAAC;AAEF,KAAK,UAAU,CACb,CAAC,SAAS,aAAa,EACvB,UAAU,SAAS,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,IAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"pick.d.mts","sourceRoot":"","sources":["../../src/record/pick.mts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EAGzB,KAAK,IAAI,EAEV,MAAM,aAAa,CAAC;AAIrB,8CAA8C;AAC9C,eAAO,MAAM,IAAI,GACf,KAAK,CAAC,CAAC,SAAS,aAAa,EAC7B,KAAK,CAAC,UAAU,SAAS,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,EAEtD,YAAY,IAAI,CAAC,CAAC,CAAC,EACnB,YAAY,UAAU,EACtB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,oBAAoB,CAAC;CACtC,CAAC,CACH,KACA,UAAU,CAAC,CAAC,EAAE,UAAU,CAuB1B,CAAC;AAEF,KAAK,UAAU,CACb,CAAC,SAAS,aAAa,EACvB,UAAU,SAAS,SAAS,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,IAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Obj } from 'ts-data-forge';
2
- import { hasRecordInternals } from '../type.mjs';
2
+ import { hasRecordInternals, flattenShapeStructure } from '../type.mjs';
3
3
  import { toUnionKeyString } from '../utils/to-union-string.mjs';
4
4
  import { record } from './record.mjs';
5
5
 
@@ -8,8 +8,12 @@ const pick = (recordType, keysToPick, options) => {
8
8
  if (!hasRecordInternals(recordType)) {
9
9
  throw new Error(`Expected a record type but received: ${recordType.typeName}`);
10
10
  }
11
+ const shape = flattenShapeStructure(recordType.shapeStructure);
12
+ if (shape === undefined) {
13
+ throw new Error(`pick() requires a simple or intersection record type, but received a union type`);
14
+ }
11
15
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
12
- return record(Obj.pick(recordType.shape, keysToPick), {
16
+ return record(Obj.pick(shape, keysToPick), {
13
17
  typeName: options?.typeName ??
14
18
  `Pick<${recordType.typeName}, ${toUnionKeyString(keysToPick)}>`,
15
19
  excessProperty: options?.excessProperty ?? recordType.excessProperty,
@@ -1 +1 @@
1
- {"version":3,"file":"pick.mjs","sources":["../../src/record/pick.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAUA;AACO,MAAM,IAAI,GAAG,CAIlB,UAAmB,EACnB,UAAsB,EACtB,OAKC,KAC4B;AAC7B,IAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,UAAU,CAAC,QAAQ,CAAA,CAAE,CAC9D;;;AAIH,IAAA,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;QACpD,QAAQ,EACN,OAAO,EAAE,QAAQ;YACjB,CAAA,KAAA,EAAQ,UAAU,CAAC,QAAQ,CAAA,EAAA,EAAK,gBAAgB,CAAC,UAAU,CAAC,CAAA,CAAA,CAAG;AAEjE,QAAA,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,UAAU,CAAC,cAAc;AACrE,KAAA,CAAyC;AAC5C;;;;"}
1
+ {"version":3,"file":"pick.mjs","sources":["../../src/record/pick.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAWA;AACO,MAAM,IAAI,GAAG,CAIlB,UAAmB,EACnB,UAAsB,EACtB,OAKC,KAC4B;AAC7B,IAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,UAAU,CAAC,QAAQ,CAAA,CAAE,CAC9D;;IAGH,MAAM,KAAK,GAAG,qBAAqB,CAAC,UAAU,CAAC,cAAc,CAAC;AAE9D,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,QAAA,MAAM,IAAI,KAAK,CACb,CAAA,+EAAA,CAAiF,CAClF;;;IAIH,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;QACzC,QAAQ,EACN,OAAO,EAAE,QAAQ;YACjB,CAAA,KAAA,EAAQ,UAAU,CAAC,QAAQ,CAAA,EAAA,EAAK,gBAAgB,CAAC,UAAU,CAAC,CAAA,CAAA,CAAG;AAEjE,QAAA,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,UAAU,CAAC,cAAc;AACrE,KAAA,CAAyC;AAC5C;;;;"}
@@ -109,7 +109,7 @@ const record = (shape, options) => {
109
109
  is: createIsFn(validate),
110
110
  assertIs: createAssertFn(validate),
111
111
  cast: createCastFn(validate),
112
- shape,
112
+ shapeStructure: { kind: 'simple', shape },
113
113
  excessProperty: ep,
114
114
  };
115
115
  };
@@ -1 +1 @@
1
- {"version":3,"file":"record.mjs","sources":["../../src/record/record.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"record.mjs","sources":["../../src/record/record.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"required.d.mts","sourceRoot":"","sources":["../../src/record/required.mts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,IAAI,EAGV,MAAM,aAAa,CAAC;AAKrB;;;GAGG;AACH,eAAO,MAAM,QAAQ,GACnB,KAAK,CAAC,CAAC,SAAS,aAAa,EAC7B,KAAK,CAAC,gBAAgB,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAE9D,YAAY,IAAI,CAAC,CAAC,CAAC,EACnB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,oBAAoB,CAAC;CACtC,CAAC,CACH,KACA,YAAY,CAAC,CAAC,EAAE,gBAAgB,CA4BlC,CAAC;AAEF,KAAK,YAAY,CACf,CAAC,SAAS,aAAa,EACvB,gBAAgB,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IACtD,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAE7C,uCAAuC;AACvC,KAAK,aAAa,CAChB,CAAC,SAAS,aAAa,EACvB,gBAAgB,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,SAAS,IAEpE,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,SAAS,IAAI,GAC5C,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GACrB,iBAAiB,CAAC,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"required.d.mts","sourceRoot":"","sources":["../../src/record/required.mts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,IAAI,EAGV,MAAM,aAAa,CAAC;AAKrB;;;GAGG;AACH,eAAO,MAAM,QAAQ,GACnB,KAAK,CAAC,CAAC,SAAS,aAAa,EAC7B,KAAK,CAAC,gBAAgB,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAE9D,YAAY,IAAI,CAAC,CAAC,CAAC,EACnB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,oBAAoB,CAAC;CACtC,CAAC,CACH,KACA,YAAY,CAAC,CAAC,EAAE,gBAAgB,CAoClC,CAAC;AAEF,KAAK,YAAY,CACf,CAAC,SAAS,aAAa,EACvB,gBAAgB,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IACtD,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAE7C,uCAAuC;AACvC,KAAK,aAAa,CAChB,CAAC,SAAS,aAAa,EACvB,gBAAgB,SAAS,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,SAAS,IAEpE,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,SAAS,IAAI,GAC5C,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GACrB,iBAAiB,CAAC,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import 'ts-data-forge';
2
- import { hasRecordInternals } from '../type.mjs';
2
+ import { hasRecordInternals, flattenShapeStructure } from '../type.mjs';
3
3
  import { toUnionKeyString } from '../utils/to-union-string.mjs';
4
4
  import { isOptionalProperty } from './optional.mjs';
5
5
  import { record } from './record.mjs';
@@ -12,12 +12,16 @@ const required = (recordType, options) => {
12
12
  if (!hasRecordInternals(recordType)) {
13
13
  throw new Error(`Expected a record type but received: ${recordType.typeName}`);
14
14
  }
15
+ const shape = flattenShapeStructure(recordType.shapeStructure);
16
+ if (shape === undefined) {
17
+ throw new Error(`required() requires a simple or intersection record type, but received a union type`);
18
+ }
15
19
  const typeNameFilled = options?.typeName ??
16
20
  (options?.keysToBeRequired === undefined
17
21
  ? `Required<${recordType.typeName}>`
18
22
  : `PartiallyRequired<${recordType.typeName}, ${toUnionKeyString(options.keysToBeRequired)}>`);
19
- const keysToBeRequired = new Set(options?.keysToBeRequired ?? Object.keys(recordType.shape));
20
- const requiredShape = Object.fromEntries(Object.entries(recordType.shape).map(([k, v]) => [k, keysToBeRequired.has(k) ? makeRequired(v) : v]));
23
+ const keysToBeRequired = new Set(options?.keysToBeRequired ?? Object.keys(shape));
24
+ const requiredShape = Object.fromEntries(Object.entries(shape).map(([k, v]) => [k, keysToBeRequired.has(k) ? makeRequired(v) : v]));
21
25
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
22
26
  return record(requiredShape, {
23
27
  typeName: typeNameFilled,
@@ -1 +1 @@
1
- {"version":3,"file":"required.mjs","sources":["../../src/record/required.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAYA;;;AAGG;MACU,QAAQ,GAAG,CAItB,UAAmB,EACnB,OAMC,KACoC;AACrC,IAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,UAAU,CAAC,QAAQ,CAAA,CAAE,CAC9D;;AAGH,IAAA,MAAM,cAAc,GAClB,OAAO,EAAE,QAAQ;AACjB,SAAC,OAAO,EAAE,gBAAgB,KAAK;AAC7B,cAAE,CAAA,SAAA,EAAY,UAAU,CAAC,QAAQ,CAAA,CAAA;AACjC,cAAE,CAAA,kBAAA,EAAqB,UAAU,CAAC,QAAQ,CAAA,EAAA,EAAK,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA,CAAA,CAAG,CAAC;AAEjG,IAAA,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CACnD,OAAO,EAAE,gBAAgB,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAC3D;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CACtC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAClC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAU,CACxE,CACqC;;IAGxC,OAAO,MAAM,CAAC,aAAa,EAAE;AAC3B,QAAA,QAAQ,EAAE,cAAc;AACxB,QAAA,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,UAAU,CAAC,cAAc;AACrE,KAAA,CAAwD;AAC3D;AAgBA;;AAEG;AACH,MAAM,YAAY,GAAG,CACnB,CAAI,KACuB;AAC3B,IAAA,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;;AAE1B,QAAA,OAAO,CAA4B;;IAGrC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC;;AAGlC,IAAA,OAAO,IAA+B;AACxC,CAAC;;;;"}
1
+ {"version":3,"file":"required.mjs","sources":["../../src/record/required.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAaA;;;AAGG;MACU,QAAQ,GAAG,CAItB,UAAmB,EACnB,OAMC,KACoC;AACrC,IAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,UAAU,CAAC,QAAQ,CAAA,CAAE,CAC9D;;IAGH,MAAM,KAAK,GAAG,qBAAqB,CAAC,UAAU,CAAC,cAAc,CAAC;AAE9D,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,QAAA,MAAM,IAAI,KAAK,CACb,CAAA,mFAAA,CAAqF,CACtF;;AAGH,IAAA,MAAM,cAAc,GAClB,OAAO,EAAE,QAAQ;AACjB,SAAC,OAAO,EAAE,gBAAgB,KAAK;AAC7B,cAAE,CAAA,SAAA,EAAY,UAAU,CAAC,QAAQ,CAAA,CAAA;AACjC,cAAE,CAAA,kBAAA,EAAqB,UAAU,CAAC,QAAQ,CAAA,EAAA,EAAK,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA,CAAA,CAAG,CAAC;AAEjG,IAAA,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CACnD,OAAO,EAAE,gBAAgB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAChD;IAED,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CACtC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CACvB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAU,CACxE,CACqC;;IAGxC,OAAO,MAAM,CAAC,aAAa,EAAE;AAC3B,QAAA,QAAQ,EAAE,cAAc;AACxB,QAAA,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,UAAU,CAAC,cAAc;AACrE,KAAA,CAAwD;AAC3D;AAgBA;;AAEG;AACH,MAAM,YAAY,GAAG,CACnB,CAAI,KACuB;AAC3B,IAAA,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;;AAE1B,QAAA,OAAO,CAA4B;;IAGrC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC;;AAGlC,IAAA,OAAO,IAA+B;AACxC,CAAC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"valueof.d.mts","sourceRoot":"","sources":["../../src/record/valueof.mts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,IAAI,EAGV,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,OAAO,GAAI,KAAK,CAAC,CAAC,SAAS,aAAa,EACnD,YAAY,IAAI,CAAC,CAAC,CAAC,EACnB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CACH,KACA,WAAW,CAAC,CAAC,CA4Bf,CAAC;AAEF,KAAK,WAAW,CAAC,CAAC,SAAS,aAAa,IACtC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"valueof.d.mts","sourceRoot":"","sources":["../../src/record/valueof.mts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,IAAI,EAEV,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,OAAO,GAAI,KAAK,CAAC,CAAC,SAAS,aAAa,EACnD,YAAY,IAAI,CAAC,CAAC,CAAC,EACnB,UAAU,OAAO,CACf,QAAQ,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CACH,KACA,WAAW,CAAC,CAAC,CAiCf,CAAC;AAEF,KAAK,WAAW,CAAC,CAAC,SAAS,aAAa,IACtC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -1,17 +1,19 @@
1
1
  import { Arr } from 'ts-data-forge';
2
+ import { hasRecordInternals, flattenShapeStructure } from '../type.mjs';
2
3
  import { union } from '../compose/union.mjs';
3
4
  import '@sindresorhus/is';
4
5
  import '../other-types/unknown.mjs';
5
6
  import { undefinedType } from '../primitives/undefined.mjs';
6
- import { hasRecordInternals } from '../type.mjs';
7
7
 
8
8
  const valueof = (recordType, options) => {
9
9
  if (!hasRecordInternals(recordType)) {
10
10
  throw new Error(`Expected a record type but received: ${recordType.typeName}`);
11
11
  }
12
- const types = Object.values(
13
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
14
- recordType.shape);
12
+ const shape = flattenShapeStructure(recordType.shapeStructure);
13
+ if (shape === undefined) {
14
+ throw new Error(`valueof() requires a simple or intersection record type, but received a union type`);
15
+ }
16
+ const types = Object.values(shape);
15
17
  if (Arr.isArrayAtLeastLength(types, 2)) {
16
18
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
17
19
  return union(types, {
@@ -1 +1 @@
1
- {"version":3,"file":"valueof.mjs","sources":["../../src/record/valueof.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;MAUa,OAAO,GAAG,CACrB,UAAmB,EACnB,OAIC,KACiB;AAClB,IAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,UAAU,CAAC,QAAQ,CAAA,CAAE,CAC9D;;AAGH,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM;;IAExB,UAA2D,CAAC,KAAK,CACnE;IAED,IAAI,GAAG,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;;QAEtC,OAAO,KAAK,CAAC,KAAK,EAAE;YAClB,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAA,QAAA,EAAW,UAAU,CAAC,QAAQ,CAAA,CAAA,CAAG;AACjE,SAAA,CAAmB;;AAGtB,IAAA,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;;AAEzB,QAAA,OAAO,KAAK,CAAC,CAAC,CAAmB;;;;AAMnC,IAAA,OAAO,aAAyD;AAClE;;;;"}
1
+ {"version":3,"file":"valueof.mjs","sources":["../../src/record/valueof.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;MAUa,OAAO,GAAG,CACrB,UAAmB,EACnB,OAIC,KACiB;AAClB,IAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CACb,CAAA,qCAAA,EAAwC,UAAU,CAAC,QAAQ,CAAA,CAAE,CAC9D;;IAGH,MAAM,KAAK,GAAG,qBAAqB,CAAC,UAAU,CAAC,cAAc,CAAC;AAE9D,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,QAAA,MAAM,IAAI,KAAK,CACb,CAAA,kFAAA,CAAoF,CACrF;;IAGH,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;IAElC,IAAI,GAAG,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE;;QAEtC,OAAO,KAAK,CAAC,KAAK,EAAE;YAClB,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAA,QAAA,EAAW,UAAU,CAAC,QAAQ,CAAA,CAAA,CAAG;AACjE,SAAA,CAAmB;;AAGtB,IAAA,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;;AAEzB,QAAA,OAAO,KAAK,CAAC,CAAC,CAAmB;;;;AAMnC,IAAA,OAAO,aAAyD;AAClE;;;;"}