ts-fortress 7.0.1 → 7.0.3

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 (84) hide show
  1. package/dist/compose/intersection.d.mts.map +1 -1
  2. package/dist/compose/intersection.mjs +6 -7
  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 +7 -9
  6. package/dist/compose/union.mjs.map +1 -1
  7. package/dist/index.mjs +1 -1
  8. package/dist/other-types/recursion.mjs +4 -4
  9. package/dist/other-types/recursion.mjs.map +1 -1
  10. package/dist/record/keyof.d.mts.map +1 -1
  11. package/dist/record/keyof.mjs +21 -2
  12. package/dist/record/keyof.mjs.map +1 -1
  13. package/dist/record/merge-records.d.mts.map +1 -1
  14. package/dist/record/merge-records.mjs +52 -8
  15. package/dist/record/merge-records.mjs.map +1 -1
  16. package/dist/record/omit.d.mts.map +1 -1
  17. package/dist/record/omit.mjs +6 -2
  18. package/dist/record/omit.mjs.map +1 -1
  19. package/dist/record/partial.d.mts.map +1 -1
  20. package/dist/record/partial.mjs +7 -3
  21. package/dist/record/partial.mjs.map +1 -1
  22. package/dist/record/pick.d.mts.map +1 -1
  23. package/dist/record/pick.mjs +6 -2
  24. package/dist/record/pick.mjs.map +1 -1
  25. package/dist/record/record.mjs +1 -1
  26. package/dist/record/record.mjs.map +1 -1
  27. package/dist/record/required.d.mts.map +1 -1
  28. package/dist/record/required.mjs +7 -3
  29. package/dist/record/required.mjs.map +1 -1
  30. package/dist/record/valueof.d.mts.map +1 -1
  31. package/dist/record/valueof.mjs +6 -4
  32. package/dist/record/valueof.mjs.map +1 -1
  33. package/dist/type.d.mts +16 -1
  34. package/dist/type.d.mts.map +1 -1
  35. package/dist/type.mjs +52 -4
  36. package/dist/type.mjs.map +1 -1
  37. package/package.json +25 -24
  38. package/src/brand/branded-number.test.mts +1 -1
  39. package/src/brand/branded-string.test.mts +1 -1
  40. package/src/compose/intersection.mts +7 -16
  41. package/src/compose/union.mts +8 -19
  42. package/src/other-types/literal.test.mts +3 -3
  43. package/src/other-types/map.test.mts +3 -3
  44. package/src/other-types/recursion.mts +4 -4
  45. package/src/other-types/set.test.mts +5 -5
  46. package/src/other-types/template-literal.test.mts +1 -3
  47. package/src/predefined/brand/number/finite-number.test.mts +3 -3
  48. package/src/predefined/brand/number/int.test.mts +3 -3
  49. package/src/predefined/brand/number/int16.test.mts +1 -1
  50. package/src/predefined/brand/number/int32.test.mts +1 -1
  51. package/src/predefined/brand/number/non-negative-finite-number.test.mts +1 -1
  52. package/src/predefined/brand/number/non-zero-finite-number.test.mts +1 -1
  53. package/src/predefined/brand/number/non-zero-int.test.mts +1 -1
  54. package/src/predefined/brand/number/non-zero-safe-int.test.mts +1 -1
  55. package/src/predefined/brand/number/positive-finite-number.test.mts +1 -1
  56. package/src/predefined/brand/number/positive-int.test.mts +3 -3
  57. package/src/predefined/brand/number/positive-safe-int.test.mts +1 -1
  58. package/src/predefined/brand/number/safe-int.test.mts +1 -1
  59. package/src/predefined/brand/number/safe-uint.test.mts +1 -1
  60. package/src/predefined/brand/number/uint.test.mts +3 -3
  61. package/src/predefined/brand/number/uint16.test.mts +1 -1
  62. package/src/predefined/brand/number/uint32.test.mts +1 -1
  63. package/src/predefined/brand/string/iso-8601.test.mts +1 -1
  64. package/src/predefined/brand/string/json-string.test.mts +1 -1
  65. package/src/primitives/bigint.test.mts +21 -23
  66. package/src/primitives/boolean.test.mts +3 -3
  67. package/src/primitives/null.test.mts +4 -4
  68. package/src/primitives/number.test.mts +20 -20
  69. package/src/primitives/string.test.mts +21 -21
  70. package/src/primitives/symbol.test.mts +3 -3
  71. package/src/primitives/undefined.test.mts +4 -4
  72. package/src/record/key-value-record.test.mts +41 -0
  73. package/src/record/keyof.mts +31 -6
  74. package/src/record/keyof.test.mts +30 -0
  75. package/src/record/merge-records.mts +75 -12
  76. package/src/record/merge-records.test.mts +1026 -37
  77. package/src/record/omit.mts +21 -1
  78. package/src/record/partial.mts +12 -3
  79. package/src/record/pick.mts +10 -1
  80. package/src/record/record.mts +1 -1
  81. package/src/record/required.mts +12 -3
  82. package/src/record/valueof.mts +10 -5
  83. package/src/record/valueof.test.mts +34 -0
  84. 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,EAIL,KAAK,IAAI,EACT,KAAK,MAAM,EAEZ,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,CAgFxB,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,4 @@
1
- import { Arr, Obj, Result } from 'ts-data-forge';
1
+ import { Arr, Result } from 'ts-data-forge';
2
2
  import { hasRecordInternals } from '../type.mjs';
3
3
  import { createAssertFn } from '../utils/create-assert-fn.mjs';
4
4
  import { createCastFn } from '../utils/create-cast-fn.mjs';
@@ -46,17 +46,16 @@ const intersection = (types, defaultType, options) => {
46
46
  };
47
47
  // If all types are records, add RecordTypeInternals
48
48
  if (types.every(hasRecordInternals)) {
49
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
50
- const recordTypes = types;
51
- const shapes = Arr.map(recordTypes, (t) => t.shape);
52
- const mergedShape = Obj.merge(...shapes);
53
- const excessProperty = recordTypes.some((t) => t.excessProperty === 'reject')
49
+ const shapeStructures = Arr.map(types, (t) => t.shapeStructure);
50
+ const excessProperty = Arr.some(types, (t) => t.excessProperty === 'reject')
54
51
  ? 'reject'
55
52
  : 'allow';
56
53
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
57
54
  return {
58
55
  ...baseType,
59
- shape: mergedShape,
56
+ shapeStructure: Arr.isArrayOfLength(shapeStructures, 1)
57
+ ? shapeStructures[0]
58
+ : { kind: 'intersection', parts: shapeStructures },
60
59
  excessProperty,
61
60
  };
62
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"intersection.mjs","sources":["../../src/compose/intersection.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAiBO,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;;QAEnC,MAAM,WAAW,GAAG,KAEnB;AAED,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CACpB,WAAW,EACX,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CACmB;QAEnC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAiB;AAExD,QAAA,MAAM,cAAc,GAAyB,WAAW,CAAC,IAAI,CAC3D,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,KAAK,QAAQ;AAEpC,cAAE;cACA,OAAO;;QAGX,OAAO;AACL,YAAA,GAAG,QAAQ;AACX,YAAA,KAAK,EAAE,WAAW;YAClB,cAAc;SACY;;AAG9B,IAAA,OAAO,QAAmC;AAC5C;;;;"}
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,EAIL,KAAK,IAAI,EACT,KAAK,MAAM,EAEZ,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,CA4EjB,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,4 @@
1
- import { memoizeFunction, Arr, Obj, Result } from 'ts-data-forge';
1
+ import { memoizeFunction, Arr, Result } from 'ts-data-forge';
2
2
  import { hasRecordInternals } from '../type.mjs';
3
3
  import { createAssertFn } from '../utils/create-assert-fn.mjs';
4
4
  import { createCastFn } from '../utils/create-cast-fn.mjs';
@@ -38,20 +38,18 @@ const union = (types, options) => {
38
38
  assertIs: createAssertFn(validate),
39
39
  cast: createCastFn(validate),
40
40
  };
41
- // If all types are records, add RecordTypeInternals
41
+ // If all types are records, add RecordTypeInternals with union structure
42
42
  if (types.every(hasRecordInternals)) {
43
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
44
- const recordTypes = types;
45
- const shapes = Arr.map(recordTypes, (t) => t.shape);
46
- // For union, merge all shapes to get all possible keys
47
- const mergedShape = Obj.merge(...shapes);
48
- const excessProperty = recordTypes.some((t) => t.excessProperty === 'reject')
43
+ const shapeStructures = Arr.map(types, (t) => t.shapeStructure);
44
+ const excessProperty = Arr.some(types, (t) => t.excessProperty === 'reject')
49
45
  ? 'reject'
50
46
  : 'allow';
51
47
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
52
48
  return {
53
49
  ...baseType,
54
- shape: mergedShape,
50
+ shapeStructure: Arr.isArrayOfLength(shapeStructures, 1)
51
+ ? shapeStructures[0]
52
+ : { kind: 'union', variants: shapeStructures },
55
53
  excessProperty,
56
54
  };
57
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"union.mjs","sources":["../../src/compose/union.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;MAiBa,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;;QAEnC,MAAM,WAAW,GAAG,KAEnB;AAED,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CACpB,WAAW,EACX,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CACmB;;QAInC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAiB;AAExD,QAAA,MAAM,cAAc,GAAyB,WAAW,CAAC,IAAI,CAC3D,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,KAAK,QAAQ;AAEpC,cAAE;cACA,OAAO;;QAGX,OAAO;AACL,YAAA,GAAG,QAAQ;AACX,YAAA,KAAK,EAAE,WAAW;YAClB,cAAc;SACK;;AAGvB,IAAA,OAAO,QAA4B;AACrC;;;;"}
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';
@@ -168,7 +168,7 @@ const recursion = (typeName, definition, options) => {
168
168
  // Proxy to propagate RecordTypeInternals if the inner type has them
169
169
  return new Proxy(baseType, {
170
170
  get: (target, prop) => {
171
- if (prop === 'shape' || prop === 'excessProperty') {
171
+ if (prop === 'shapeStructure' || prop === 'excessProperty') {
172
172
  const inner = getInnerType();
173
173
  if (hasRecordInternals(inner)) {
174
174
  return inner[prop];
@@ -182,7 +182,7 @@ const recursion = (typeName, definition, options) => {
182
182
  return undefined;
183
183
  },
184
184
  has: (target, prop) => {
185
- if (prop === 'shape' || prop === 'excessProperty') {
185
+ if (prop === 'shapeStructure' || prop === 'excessProperty') {
186
186
  const inner = getInnerType();
187
187
  return hasRecordInternals(inner);
188
188
  }
@@ -191,12 +191,12 @@ const recursion = (typeName, definition, options) => {
191
191
  ownKeys: (target) => {
192
192
  const inner = getInnerType();
193
193
  if (hasRecordInternals(inner)) {
194
- return [...Object.keys(target), 'shape', 'excessProperty'];
194
+ return [...Object.keys(target), 'shapeStructure', 'excessProperty'];
195
195
  }
196
196
  return Object.keys(target);
197
197
  },
198
198
  getOwnPropertyDescriptor: (target, prop) => {
199
- if (prop === 'shape' || prop === 'excessProperty') {
199
+ if (prop === 'shapeStructure' || prop === 'excessProperty') {
200
200
  const inner = getInnerType();
201
201
  if (hasRecordInternals(inner)) {
202
202
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"recursion.mjs","sources":["../../src/other-types/recursion.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
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"}
@@ -10,13 +10,32 @@ const keyof = (recordType, options) => {
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
- import { hasRecordInternals } from '../type.mjs';
5
6
  import '../other-types/unknown.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,5 +1,5 @@
1
1
  import { Arr } from 'ts-data-forge';
2
- import { hasRecordInternals } from '../type.mjs';
2
+ import { hasRecordInternals, flattenShapeStructure } from '../type.mjs';
3
3
  import { union } from '../compose/union.mjs';
4
4
  import '@sindresorhus/is';
5
5
  import '../other-types/unknown.mjs';
@@ -9,9 +9,11 @@ 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;;;;"}
package/dist/type.d.mts CHANGED
@@ -33,11 +33,26 @@ export type TypeOf<A extends Type<unknown>> = A['defaultValue'];
33
33
  export type ExcessPropertyOption = 'allow' | 'reject';
34
34
  /** @internal */
35
35
  export type UnknownShape = ReadonlyRecord<string, Type<unknown>>;
36
+ /** @internal Shape structure that can represent union and intersection */
37
+ export type ShapeStructure = Readonly<{
38
+ kind: 'simple';
39
+ shape: UnknownShape;
40
+ } | {
41
+ kind: 'union';
42
+ variants: readonly ShapeStructure[];
43
+ } | {
44
+ kind: 'intersection';
45
+ parts: readonly ShapeStructure[];
46
+ }>;
36
47
  /** @internal Runtime type for accessing internal record properties via cast. */
37
48
  export type RecordTypeInternals = Readonly<{
38
- shape: UnknownShape;
49
+ shapeStructure: ShapeStructure;
39
50
  excessProperty: ExcessPropertyOption;
40
51
  }>;
52
+ /** @internal Helper to flatten ShapeStructure to a simple shape if possible */
53
+ export declare const flattenShapeStructure: (structure: ShapeStructure) => UnknownShape | undefined;
54
+ /** @internal Backward compatibility: simple shape accessor */
55
+ export declare const getShape: (internals: RecordTypeInternals) => UnknownShape;
41
56
  /** @internal Runtime check for record type internals. */
42
57
  export declare const hasRecordInternals: <T extends Type<unknown>>(t: T) => t is T & RecordTypeInternals;
43
58
  //# sourceMappingURL=type.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"type.d.mts","sourceRoot":"","sources":["../src/type.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC,CAAC;IAEhE,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;AAEhE;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtD,gBAAgB;AAChB,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAEjE,gFAAgF;AAChF,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,KAAK,EAAE,YAAY,CAAC;IACpB,cAAc,EAAE,oBAAoB,CAAC;CACtC,CAAC,CAAC;AAEH,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,EACxD,GAAG,CAAC,KACH,CAAC,IAAI,CAAC,GAAG,mBAAgD,CAAC"}
1
+ {"version":3,"file":"type.d.mts","sourceRoot":"","sources":["../src/type.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;;;;;;GASG;AACH,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,CAAC,CAAC;IAChB,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC,CAAC;IAEhE,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,IAAI,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;AAEhE;;;;;;;;GAQG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtD,gBAAgB;AAChB,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAEjE,0EAA0E;AAC1E,MAAM,MAAM,cAAc,GAAG,QAAQ,CACjC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAA;CAAE,CAC7D,CAAC;AAEF,gFAAgF;AAChF,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,oBAAoB,CAAC;CACtC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,eAAO,MAAM,qBAAqB,GAChC,WAAW,cAAc,KACxB,YAAY,GAAG,SAsBjB,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,QAAQ,GAAI,WAAW,mBAAmB,KAAG,YAUzD,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,EACxD,GAAG,CAAC,KACH,CAAC,IAAI,CAAC,GAAG,mBAAgD,CAAC"}