type-plus 6.4.0 → 6.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/cjs/index.d.ts +1 -0
  2. package/cjs/index.d.ts.map +1 -1
  3. package/cjs/index.js.map +1 -1
  4. package/cjs/nominal/brand.d.ts +7 -5
  5. package/cjs/nominal/brand.d.ts.map +1 -1
  6. package/cjs/nominal/brand.js +4 -4
  7. package/cjs/nominal/brand.js.map +1 -1
  8. package/cjs/nominal/{types.d.ts → constants.d.ts} +1 -1
  9. package/cjs/nominal/constants.d.ts.map +1 -0
  10. package/cjs/nominal/{types.js → constants.js} +1 -1
  11. package/cjs/nominal/constants.js.map +1 -0
  12. package/cjs/nominal/flavor.d.ts +14 -3
  13. package/cjs/nominal/flavor.d.ts.map +1 -1
  14. package/cjs/nominal/flavor.js +2 -2
  15. package/cjs/nominal/flavor.js.map +1 -1
  16. package/cjs/nominal/nominal_match.js +2 -2
  17. package/cjs/nominal/nominal_match.js.map +1 -1
  18. package/cjs/type/constants.d.ts +5 -0
  19. package/cjs/type/constants.d.ts.map +1 -0
  20. package/cjs/type/constants.js +8 -0
  21. package/cjs/type/constants.js.map +1 -0
  22. package/cjs/type/failed.d.ts +33 -0
  23. package/cjs/type/failed.d.ts.map +1 -0
  24. package/cjs/type/failed.js +4 -0
  25. package/cjs/type/failed.js.map +1 -0
  26. package/cjs/union/union_to_intersection.d.ts.map +1 -0
  27. package/cjs/union/union_to_intersection.js.map +1 -0
  28. package/esm/index.d.ts +1 -0
  29. package/esm/index.d.ts.map +1 -1
  30. package/esm/index.js.map +1 -1
  31. package/esm/nominal/brand.d.ts +7 -5
  32. package/esm/nominal/brand.d.ts.map +1 -1
  33. package/esm/nominal/brand.js +4 -4
  34. package/esm/nominal/brand.js.map +1 -1
  35. package/esm/nominal/{types.d.ts → constants.d.ts} +1 -1
  36. package/esm/nominal/constants.d.ts.map +1 -0
  37. package/esm/nominal/{types.js → constants.js} +1 -1
  38. package/esm/nominal/constants.js.map +1 -0
  39. package/esm/nominal/flavor.d.ts +14 -3
  40. package/esm/nominal/flavor.d.ts.map +1 -1
  41. package/esm/nominal/flavor.js +1 -1
  42. package/esm/nominal/flavor.js.map +1 -1
  43. package/esm/nominal/nominal_match.js +1 -1
  44. package/esm/nominal/nominal_match.js.map +1 -1
  45. package/esm/type/constants.d.ts +5 -0
  46. package/esm/type/constants.d.ts.map +1 -0
  47. package/esm/type/constants.js +5 -0
  48. package/esm/type/constants.js.map +1 -0
  49. package/esm/type/failed.d.ts +33 -0
  50. package/esm/type/failed.d.ts.map +1 -0
  51. package/esm/type/failed.js +2 -0
  52. package/esm/type/failed.js.map +1 -0
  53. package/esm/union/union_to_intersection.d.ts.map +1 -0
  54. package/esm/union/union_to_intersection.js.map +1 -0
  55. package/package.json +5 -5
  56. package/ts/assertion/readme.md +1 -2
  57. package/ts/index.ts +2 -0
  58. package/ts/nominal/brand.ts +15 -7
  59. package/ts/nominal/flavor.ts +17 -2
  60. package/ts/nominal/nominal_match.ts +1 -1
  61. package/ts/type/constants.ts +4 -0
  62. package/ts/type/failed.ts +34 -0
  63. package/cjs/nominal/types.d.ts.map +0 -1
  64. package/cjs/nominal/types.js.map +0 -1
  65. package/cjs/union_to_intersection.d.ts.map +0 -1
  66. package/cjs/union_to_intersection.js.map +0 -1
  67. package/esm/nominal/types.d.ts.map +0 -1
  68. package/esm/nominal/types.js.map +0 -1
  69. package/esm/union_to_intersection.d.ts.map +0 -1
  70. package/esm/union_to_intersection.js.map +0 -1
  71. /package/cjs/{union_to_intersection.d.ts → union/union_to_intersection.d.ts} +0 -0
  72. /package/cjs/{union_to_intersection.js → union/union_to_intersection.js} +0 -0
  73. /package/esm/{union_to_intersection.d.ts → union/union_to_intersection.d.ts} +0 -0
  74. /package/esm/{union_to_intersection.js → union/union_to_intersection.js} +0 -0
  75. /package/ts/nominal/{types.ts → constants.ts} +0 -0
  76. /package/ts/{union_to_intersection.ts → union/union_to_intersection.ts} +0 -0
package/cjs/index.d.ts CHANGED
@@ -44,6 +44,7 @@ export type { IsNotSymbol, IsSymbol, NotSymbolType, SymbolType } from './symbol/
44
44
  export * from './testing/stub.js';
45
45
  export * from './testing/test_type.js';
46
46
  export type { IsNotTuple, IsTuple, NotTupleType, TupleType } from './tuple/tuple_type.js';
47
+ export type { Failed, FailedT } from './type/failed.js';
47
48
  export type { IsNotUndefined, IsUndefined, NotUndefinedType, UndefinedType } from './undefined/undefined_type.js';
48
49
  export type { UnionKeys } from './union_keys.js';
49
50
  export type { IsNotUnknown, IsUnknown, NotUnknownType, UnknownType } from './unknown/unknown_type.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC7D,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC7E,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAClD,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzF,cAAc,kBAAkB,CAAA;AAChC,cAAc,4BAA4B,CAAA;AAC1C,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC/F,YAAY,EACX,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,MAAM,gCAAgC,CAAA;AACvC,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACrG,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3F,YAAY,EACX,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,MAAM,kCAAkC,CAAA;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACtF,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAChF,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACvD,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC7D,cAAc,gCAAgC,CAAA;AAC9C,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC3G,YAAY,EACX,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,MAAM,oCAAoC,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAChF,YAAY,EACX,GAAG,EACH,GAAG,EACH,SAAS,EACT,KAAK,EACL,UAAU,EACV,WAAW,EACX,SAAS,EACT,GAAG,EACH,QAAQ,EACR,MAAM,iBAAiB,CAAA;AACxB,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAC9G,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnF,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChG,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAC5F,OAAO,KAAK,UAAU,MAAM,yBAAyB,CAAA;AACrD,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAC/F,YAAY,EACX,YAAY,EACZ,SAAS,EACT,cAAc,EACd,OAAO,EACP,WAAW,EACX,IAAI,EACJ,MAAM,0BAA0B,CAAA;AACjC,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC5F,YAAY,EACX,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,MAAM,gCAAgC,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAC/F,cAAc,uBAAuB,CAAA;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,cAAc,oBAAoB,CAAA;AAClC,YAAY,EACX,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,MAAM,gCAAgC,CAAA;AACvC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAC/F,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAC/F,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACzF,YAAY,EACX,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,MAAM,+BAA+B,CAAA;AACtC,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACrG,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"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"}
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAA6D;AAApD,qGAAA,QAAQ,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,sGAAA,SAAS,OAAA;AAI1C,mEAAkD;AAElD,mDAAgC;AAChC,6DAA0C;AAiB1C,mDAAgC;AAIhC,iEAA8C;AAQ9C,wDAAqC;AAcrC,oDAAiC;AACjC,qDAAkC;AAIlC,sEAAqD;AAiBrD,oDAAiC;AAEjC,wDAAqC;AAErC,qDAAkC;AASlC,oDAAiC;AACjC,yDAAsC;AAUtC,mDAAgC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAA6D;AAApD,qGAAA,QAAQ,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,sGAAA,SAAS,OAAA;AAI1C,mEAAkD;AAElD,mDAAgC;AAChC,6DAA0C;AAiB1C,mDAAgC;AAIhC,iEAA8C;AAQ9C,wDAAqC;AAcrC,oDAAiC;AACjC,qDAAkC;AAIlC,sEAAqD;AAiBrD,oDAAiC;AAEjC,wDAAqC;AAErC,qDAAkC;AASlC,oDAAiC;AACjC,yDAAsC;AAWtC,mDAAgC"}
@@ -1,15 +1,17 @@
1
1
  import type { Widen } from '../utils/index.js';
2
- import { typeSym, valueSym } from './types.js';
2
+ import { typeSym, valueSym } from './constants.js';
3
3
  /**
4
4
  * Create a "branded" version of a type.
5
5
  * TypeScript won't allow implicit conversion to this type
6
6
  */
7
- export type Brand<B extends string, T> = T extends object ? T & {
8
- [typeSym]: B;
9
- } : {
7
+ export type Brand<B extends string, T = never> = [T] extends [null] | [undefined] | [symbol] | [void] ? Branded<B, T> : Branded<B, T> & T;
8
+ /**
9
+ * A branded type of `B` with value of `T`.
10
+ */
11
+ export interface Branded<B extends string, T> {
10
12
  [typeSym]: B;
11
13
  [valueSym]: T;
12
- };
14
+ }
13
15
  /**
14
16
  * Creates a brand creator with the specified type.
15
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../ts/nominal/brand.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE9C;;;GAGG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,GACtD,CAAC,GAAG;IAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;CAAE,GACpB;IAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;CAAE,CAAA;AAElC;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACvF;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../ts/nominal/brand.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAElD;;;GAGG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAClG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GACb,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;AAEpB;;GAEG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC;IAC3C,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACZ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;CACb;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACvF;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -4,15 +4,15 @@
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.brand = void 0;
6
6
  const isType_js_1 = require("../predicates/isType.js");
7
- const types_js_1 = require("./types.js");
8
- function brand(type, subject) {
7
+ const constants_js_1 = require("./constants.js");
8
+ function brand(typeInput, subject) {
9
9
  if (subject === undefined)
10
10
  return function (subject) {
11
- return brand(type, subject);
11
+ return brand(typeInput, subject);
12
12
  };
13
13
  if ((0, isType_js_1.isType)(subject, s => typeof s === 'object' && s !== null)) {
14
14
  // if subject is not an object, the branding will exist only in type-level.
15
- subject[types_js_1.typeSym] = type;
15
+ subject[constants_js_1.typeSym] = typeInput;
16
16
  }
17
17
  return subject;
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../ts/nominal/brand.ts"],"names":[],"mappings":";AAAA,kHAAkH;AAClH,uEAAuE;;;AAEvE,uDAAgD;AAEhD,yCAA8C;AAkB9C,SAAgB,KAAK,CAAC,IAAY,EAAE,OAAiB;IACpD,IAAI,OAAO,KAAK,SAAS;QACxB,OAAO,UAAa,OAAU;YAC7B,OAAO,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC5B,CAAC,CAAA;IAEF,IAAI,IAAA,kBAAM,EAAwB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;QACrF,2EAA2E;QAC3E,OAAO,CAAC,kBAAO,CAAC,GAAG,IAAI,CAAA;KACvB;IACD,OAAO,OAAO,CAAA;AACf,CAAC;AAXD,sBAWC"}
1
+ {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../ts/nominal/brand.ts"],"names":[],"mappings":";AAAA,kHAAkH;AAClH,uEAAuE;;;AAEvE,uDAAgD;AAEhD,iDAAkD;AA0BlD,SAAgB,KAAK,CAAC,SAAiB,EAAE,OAAiB;IACzD,IAAI,OAAO,KAAK,SAAS;QACxB,OAAO,UAAa,OAAU;YAC7B,OAAO,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACjC,CAAC,CAAA;IAEF,IAAI,IAAA,kBAAM,EAAwB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;QACrF,2EAA2E;QAC3E,OAAO,CAAC,sBAAO,CAAC,GAAG,SAAS,CAAA;KAC5B;IACD,OAAO,OAAO,CAAA;AACf,CAAC;AAXD,sBAWC"}
@@ -1,3 +1,3 @@
1
1
  export declare const typeSym: unique symbol;
2
2
  export declare const valueSym: unique symbol;
3
- //# sourceMappingURL=types.d.ts.map
3
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../ts/nominal/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,eAAiB,CAAA;AACrC,eAAO,MAAM,QAAQ,eAAkB,CAAA"}
@@ -3,4 +3,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.valueSym = exports.typeSym = void 0;
4
4
  exports.typeSym = Symbol('type');
5
5
  exports.valueSym = Symbol('value');
6
- //# sourceMappingURL=types.js.map
6
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../ts/nominal/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACxB,QAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA"}
@@ -1,14 +1,25 @@
1
1
  import type { Widen } from '../utils/index.js';
2
- import { typeSym } from './types.js';
2
+ import { typeSym, valueSym } from './constants.js';
3
3
  /**
4
4
  * Create a "flavored" version of a type.
5
5
  * TypeScript will disallow mixing flavors,
6
6
  * but will allow unflavored values of that type to be passed in where a flavored version is expected.
7
7
  * This is a less restrictive form of branding.
8
8
  */
9
- export type Flavor<F extends string, T> = T & {
9
+ export type Flavor<F extends string, T> = [T] extends [null] | [undefined] | [symbol] | [void] ? FlavoredUnit<F, T> : Flavored<F> & T;
10
+ /**
11
+ * A flavored type of `F`
12
+ */
13
+ export interface Flavored<F extends string> {
14
+ [typeSym]?: F;
15
+ }
16
+ /**
17
+ * A special flavored type for special types.
18
+ */
19
+ export interface FlavoredUnit<F extends string, T> {
10
20
  [typeSym]?: F;
11
- };
21
+ [valueSym]: T;
22
+ }
12
23
  /**
13
24
  * Creates a brand creator with the specified type.
14
25
  */
@@ -1 +1 @@
1
- {"version":3,"file":"flavor.d.ts","sourceRoot":"","sources":["../../ts/nominal/flavor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG;IAC7C,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;CACb,CAAA;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACzF;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"flavor.d.ts","sourceRoot":"","sources":["../../ts/nominal/flavor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAElD;;;;;GAKG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAC3F,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,GAClB,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAElB;;GAEG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,MAAM;IACzC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC;IAChD,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IACb,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;CACb;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACzF;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -4,7 +4,7 @@
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.flavor = void 0;
6
6
  const isType_js_1 = require("../predicates/isType.js");
7
- const types_js_1 = require("./types.js");
7
+ const constants_js_1 = require("./constants.js");
8
8
  function flavor(type, subject) {
9
9
  if (subject === undefined)
10
10
  return function (subject) {
@@ -12,7 +12,7 @@ function flavor(type, subject) {
12
12
  };
13
13
  if ((0, isType_js_1.isType)(subject, s => typeof s === 'object' && s !== null)) {
14
14
  // if subject is not an object, the branding will exist only in type-level.
15
- subject[types_js_1.typeSym] = type;
15
+ subject[constants_js_1.typeSym] = type;
16
16
  }
17
17
  return subject;
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"flavor.js","sourceRoot":"","sources":["../../ts/nominal/flavor.ts"],"names":[],"mappings":";AAAA,kHAAkH;AAClH,uEAAuE;;;AAEvE,uDAAgD;AAEhD,yCAAoC;AAoBpC,SAAgB,MAAM,CAAC,IAAY,EAAE,OAAiB;IACrD,IAAI,OAAO,KAAK,SAAS;QACxB,OAAO,UAAa,OAAU;YAC7B,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC7B,CAAC,CAAA;IAEF,IAAI,IAAA,kBAAM,EAAwB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;QACrF,2EAA2E;QAC3E,OAAO,CAAC,kBAAO,CAAC,GAAG,IAAI,CAAA;KACvB;IAED,OAAO,OAAO,CAAA;AACf,CAAC;AAZD,wBAYC"}
1
+ {"version":3,"file":"flavor.js","sourceRoot":"","sources":["../../ts/nominal/flavor.ts"],"names":[],"mappings":";AAAA,kHAAkH;AAClH,uEAAuE;;;AAEvE,uDAAgD;AAEhD,iDAAkD;AAmClD,SAAgB,MAAM,CAAC,IAAY,EAAE,OAAiB;IACrD,IAAI,OAAO,KAAK,SAAS;QACxB,OAAO,UAAa,OAAU;YAC7B,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC7B,CAAC,CAAA;IAEF,IAAI,IAAA,kBAAM,EAAwB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;QACrF,2EAA2E;QAC3E,OAAO,CAAC,sBAAO,CAAC,GAAG,IAAI,CAAA;KACvB;IAED,OAAO,OAAO,CAAA;AACf,CAAC;AAZD,wBAYC"}
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.nominalMatch = void 0;
4
- const types_js_1 = require("./types.js");
4
+ const constants_js_1 = require("./constants.js");
5
5
  function nominalMatch(a, b) {
6
6
  if (typeof a === 'object' && a !== null && typeof b === 'object' && b !== null)
7
- return a[types_js_1.typeSym] === b[types_js_1.typeSym];
7
+ return a[constants_js_1.typeSym] === b[constants_js_1.typeSym];
8
8
  else {
9
9
  return true;
10
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nominal_match.js","sourceRoot":"","sources":["../../ts/nominal/nominal_match.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AAUpC,SAAgB,YAAY,CAC3B,CAAyC,EACzC,CAAyC;IAEzC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;QAC7E,OAAO,CAAC,CAAC,kBAAO,CAAC,KAAK,CAAC,CAAC,kBAAO,CAAC,CAAA;SAC5B;QACJ,OAAO,IAAI,CAAA;KACX;AACF,CAAC;AATD,oCASC"}
1
+ {"version":3,"file":"nominal_match.js","sourceRoot":"","sources":["../../ts/nominal/nominal_match.ts"],"names":[],"mappings":";;;AAEA,iDAAwC;AAUxC,SAAgB,YAAY,CAC3B,CAAyC,EACzC,CAAyC;IAEzC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;QAC7E,OAAO,CAAC,CAAC,sBAAO,CAAC,KAAK,CAAC,CAAC,sBAAO,CAAC,CAAA;SAC5B;QACJ,OAAO,IAAI,CAAA;KACX;AACF,CAAC;AATD,oCASC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * This is a internal symbol to create branded types.
3
+ */
4
+ export declare const uniSym: unique symbol;
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../ts/type/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,MAAM,eAAsB,CAAA"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uniSym = void 0;
4
+ /**
5
+ * This is a internal symbol to create branded types.
6
+ */
7
+ exports.uniSym = Symbol('type-plus');
8
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../ts/type/constants.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA"}
@@ -0,0 +1,33 @@
1
+ import { uniSym } from './constants.js';
2
+ /**
3
+ * A failed type with message.
4
+ *
5
+ * This is analogous to the `Error` class in JavaScript.
6
+ *
7
+ * It can be used in type-level programming to failed an error message.
8
+ *
9
+ * If you want to add additional type information,
10
+ * use `FailedT` or create your own failed type instead.
11
+ *
12
+ * ```ts
13
+ * import { Failed } from 'type-plus'
14
+ *
15
+ * type T = Failed<'error message'>
16
+ * ```
17
+ */
18
+ export interface Failed<Msg extends string> {
19
+ [uniSym]: Msg;
20
+ }
21
+ /**
22
+ * A failed type with message and one additional type.
23
+ *
24
+ * Use this to add a generic type to the failed type.
25
+ *
26
+ * e.g. `FailedT<'missing', number | string>`
27
+ *
28
+ * It's recommended to create custom failed types instead of using this to provide better message.
29
+ */
30
+ export interface FailedT<Msg extends string, T> {
31
+ [uniSym]: Msg;
32
+ }
33
+ //# sourceMappingURL=failed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failed.d.ts","sourceRoot":"","sources":["../../ts/type/failed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,MAAM,CAAC,GAAG,SAAS,MAAM;IACzC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAA;CACb;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,OAAO,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC;IAC7C,CAAC,MAAM,CAAC,EAAE,GAAG,CAAA;CACb"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const constants_js_1 = require("./constants.js");
4
+ //# sourceMappingURL=failed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failed.js","sourceRoot":"","sources":["../../ts/type/failed.ts"],"names":[],"mappings":";;AAAA,iDAAuC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union_to_intersection.d.ts","sourceRoot":"","sources":["../../ts/union/union_to_intersection.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GACvG,CAAC,GACD,KAAK,CAAA;AAER,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAElE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union_to_intersection.js","sourceRoot":"","sources":["../../ts/union/union_to_intersection.ts"],"names":[],"mappings":";;;AAMA,SAAgB,cAAc,CAAI,KAAQ;IACzC,OAAO,KAAsC,CAAA;AAC9C,CAAC;AAFD,wCAEC"}
package/esm/index.d.ts CHANGED
@@ -44,6 +44,7 @@ export type { IsNotSymbol, IsSymbol, NotSymbolType, SymbolType } from './symbol/
44
44
  export * from './testing/stub.js';
45
45
  export * from './testing/test_type.js';
46
46
  export type { IsNotTuple, IsTuple, NotTupleType, TupleType } from './tuple/tuple_type.js';
47
+ export type { Failed, FailedT } from './type/failed.js';
47
48
  export type { IsNotUndefined, IsUndefined, NotUndefinedType, UndefinedType } from './undefined/undefined_type.js';
48
49
  export type { UnionKeys } from './union_keys.js';
49
50
  export type { IsNotUnknown, IsUnknown, NotUnknownType, UnknownType } from './unknown/unknown_type.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC7D,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC7E,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAClD,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzF,cAAc,kBAAkB,CAAA;AAChC,cAAc,4BAA4B,CAAA;AAC1C,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC/F,YAAY,EACX,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,MAAM,gCAAgC,CAAA;AACvC,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACrG,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3F,YAAY,EACX,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,MAAM,kCAAkC,CAAA;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACtF,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAChF,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACvD,YAAY,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAC7D,cAAc,gCAAgC,CAAA;AAC9C,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC3G,YAAY,EACX,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,MAAM,oCAAoC,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAChF,YAAY,EACX,GAAG,EACH,GAAG,EACH,SAAS,EACT,KAAK,EACL,UAAU,EACV,WAAW,EACX,SAAS,EACT,GAAG,EACH,QAAQ,EACR,MAAM,iBAAiB,CAAA;AACxB,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAC9G,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnF,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChG,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAC5F,OAAO,KAAK,UAAU,MAAM,yBAAyB,CAAA;AACrD,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAC/F,YAAY,EACX,YAAY,EACZ,SAAS,EACT,cAAc,EACd,OAAO,EACP,WAAW,EACX,IAAI,EACJ,MAAM,0BAA0B,CAAA;AACjC,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC5F,YAAY,EACX,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,MAAM,gCAAgC,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAC/F,cAAc,uBAAuB,CAAA;AACrC,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,cAAc,oBAAoB,CAAA;AAClC,YAAY,EACX,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,MAAM,gCAAgC,CAAA;AACvC,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAC/F,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAC/F,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACzF,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACvD,YAAY,EACX,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,MAAM,+BAA+B,CAAA;AACtC,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACrG,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA"}
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAI7D,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAElD,cAAc,kBAAkB,CAAA;AAChC,cAAc,4BAA4B,CAAA;AAiB1C,cAAc,kBAAkB,CAAA;AAIhC,cAAc,gCAAgC,CAAA;AAQ9C,cAAc,uBAAuB,CAAA;AAcrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAIlC,OAAO,KAAK,UAAU,MAAM,yBAAyB,CAAA;AAiBrD,cAAc,mBAAmB,CAAA;AAEjC,cAAc,uBAAuB,CAAA;AAErC,cAAc,oBAAoB,CAAA;AASlC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AAUtC,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAI7D,OAAO,KAAK,SAAS,MAAM,uBAAuB,CAAA;AAElD,cAAc,kBAAkB,CAAA;AAChC,cAAc,4BAA4B,CAAA;AAiB1C,cAAc,kBAAkB,CAAA;AAIhC,cAAc,gCAAgC,CAAA;AAQ9C,cAAc,uBAAuB,CAAA;AAcrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAIlC,OAAO,KAAK,UAAU,MAAM,yBAAyB,CAAA;AAiBrD,cAAc,mBAAmB,CAAA;AAEjC,cAAc,uBAAuB,CAAA;AAErC,cAAc,oBAAoB,CAAA;AASlC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AAWtC,cAAc,kBAAkB,CAAA"}
@@ -1,15 +1,17 @@
1
1
  import type { Widen } from '../utils/index.js';
2
- import { typeSym, valueSym } from './types.js';
2
+ import { typeSym, valueSym } from './constants.js';
3
3
  /**
4
4
  * Create a "branded" version of a type.
5
5
  * TypeScript won't allow implicit conversion to this type
6
6
  */
7
- export type Brand<B extends string, T> = T extends object ? T & {
8
- [typeSym]: B;
9
- } : {
7
+ export type Brand<B extends string, T = never> = [T] extends [null] | [undefined] | [symbol] | [void] ? Branded<B, T> : Branded<B, T> & T;
8
+ /**
9
+ * A branded type of `B` with value of `T`.
10
+ */
11
+ export interface Branded<B extends string, T> {
10
12
  [typeSym]: B;
11
13
  [valueSym]: T;
12
- };
14
+ }
13
15
  /**
14
16
  * Creates a brand creator with the specified type.
15
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../ts/nominal/brand.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE9C;;;GAGG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,GACtD,CAAC,GAAG;IAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;CAAE,GACpB;IAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;CAAE,CAAA;AAElC;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACvF;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../ts/nominal/brand.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAElD;;;GAGG;AACH,MAAM,MAAM,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAClG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GACb,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA;AAEpB;;GAEG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC;IAC3C,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACZ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;CACb;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACvF;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -1,15 +1,15 @@
1
1
  // By Drew Colthorp, <https://spin.atomicobject.com/2018/01/15/typescript-flexible-nominal-typing/#comment-604580>
2
2
  // <https://gist.github.com/dcolthorp/aa21cf87d847ae9942106435bf47565d>
3
3
  import { isType } from '../predicates/isType.js';
4
- import { typeSym, valueSym } from './types.js';
5
- export function brand(type, subject) {
4
+ import { typeSym, valueSym } from './constants.js';
5
+ export function brand(typeInput, subject) {
6
6
  if (subject === undefined)
7
7
  return function (subject) {
8
- return brand(type, subject);
8
+ return brand(typeInput, subject);
9
9
  };
10
10
  if (isType(subject, s => typeof s === 'object' && s !== null)) {
11
11
  // if subject is not an object, the branding will exist only in type-level.
12
- subject[typeSym] = type;
12
+ subject[typeSym] = typeInput;
13
13
  }
14
14
  return subject;
15
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../ts/nominal/brand.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAClH,uEAAuE;AAEvE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAkB9C,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,OAAiB;IACpD,IAAI,OAAO,KAAK,SAAS;QACxB,OAAO,UAAa,OAAU;YAC7B,OAAO,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC5B,CAAC,CAAA;IAEF,IAAI,MAAM,CAAwB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;QACrF,2EAA2E;QAC3E,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;KACvB;IACD,OAAO,OAAO,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../ts/nominal/brand.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAClH,uEAAuE;AAEvE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AA0BlD,MAAM,UAAU,KAAK,CAAC,SAAiB,EAAE,OAAiB;IACzD,IAAI,OAAO,KAAK,SAAS;QACxB,OAAO,UAAa,OAAU;YAC7B,OAAO,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACjC,CAAC,CAAA;IAEF,IAAI,MAAM,CAAwB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;QACrF,2EAA2E;QAC3E,OAAO,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;KAC5B;IACD,OAAO,OAAO,CAAA;AACf,CAAC"}
@@ -1,3 +1,3 @@
1
1
  export declare const typeSym: unique symbol;
2
2
  export declare const valueSym: unique symbol;
3
- //# sourceMappingURL=types.d.ts.map
3
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../ts/nominal/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,eAAiB,CAAA;AACrC,eAAO,MAAM,QAAQ,eAAkB,CAAA"}
@@ -1,3 +1,3 @@
1
1
  export const typeSym = Symbol('type');
2
2
  export const valueSym = Symbol('value');
3
- //# sourceMappingURL=types.js.map
3
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../ts/nominal/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACrC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA"}
@@ -1,14 +1,25 @@
1
1
  import type { Widen } from '../utils/index.js';
2
- import { typeSym } from './types.js';
2
+ import { typeSym, valueSym } from './constants.js';
3
3
  /**
4
4
  * Create a "flavored" version of a type.
5
5
  * TypeScript will disallow mixing flavors,
6
6
  * but will allow unflavored values of that type to be passed in where a flavored version is expected.
7
7
  * This is a less restrictive form of branding.
8
8
  */
9
- export type Flavor<F extends string, T> = T & {
9
+ export type Flavor<F extends string, T> = [T] extends [null] | [undefined] | [symbol] | [void] ? FlavoredUnit<F, T> : Flavored<F> & T;
10
+ /**
11
+ * A flavored type of `F`
12
+ */
13
+ export interface Flavored<F extends string> {
14
+ [typeSym]?: F;
15
+ }
16
+ /**
17
+ * A special flavored type for special types.
18
+ */
19
+ export interface FlavoredUnit<F extends string, T> {
10
20
  [typeSym]?: F;
11
- };
21
+ [valueSym]: T;
22
+ }
12
23
  /**
13
24
  * Creates a brand creator with the specified type.
14
25
  */
@@ -1 +1 @@
1
- {"version":3,"file":"flavor.d.ts","sourceRoot":"","sources":["../../ts/nominal/flavor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG;IAC7C,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;CACb,CAAA;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACzF;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"flavor.d.ts","sourceRoot":"","sources":["../../ts/nominal/flavor.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAElD;;;;;GAKG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAC3F,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,GAClB,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAElB;;GAEG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,MAAM;IACzC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC;IAChD,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IACb,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;CACb;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACzF;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  // By Drew Colthorp, <https://spin.atomicobject.com/2018/01/15/typescript-flexible-nominal-typing/#comment-604580>
2
2
  // <https://gist.github.com/dcolthorp/aa21cf87d847ae9942106435bf47565d>
3
3
  import { isType } from '../predicates/isType.js';
4
- import { typeSym } from './types.js';
4
+ import { typeSym, valueSym } from './constants.js';
5
5
  export function flavor(type, subject) {
6
6
  if (subject === undefined)
7
7
  return function (subject) {
@@ -1 +1 @@
1
- {"version":3,"file":"flavor.js","sourceRoot":"","sources":["../../ts/nominal/flavor.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAClH,uEAAuE;AAEvE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAoBpC,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,OAAiB;IACrD,IAAI,OAAO,KAAK,SAAS;QACxB,OAAO,UAAa,OAAU;YAC7B,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC7B,CAAC,CAAA;IAEF,IAAI,MAAM,CAAwB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;QACrF,2EAA2E;QAC3E,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;KACvB;IAED,OAAO,OAAO,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"flavor.js","sourceRoot":"","sources":["../../ts/nominal/flavor.ts"],"names":[],"mappings":"AAAA,kHAAkH;AAClH,uEAAuE;AAEvE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAmClD,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,OAAiB;IACrD,IAAI,OAAO,KAAK,SAAS;QACxB,OAAO,UAAa,OAAU;YAC7B,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC7B,CAAC,CAAA;IAEF,IAAI,MAAM,CAAwB,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;QACrF,2EAA2E;QAC3E,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAA;KACvB;IAED,OAAO,OAAO,CAAA;AACf,CAAC"}
@@ -1,4 +1,4 @@
1
- import { typeSym } from './types.js';
1
+ import { typeSym } from './constants.js';
2
2
  export function nominalMatch(a, b) {
3
3
  if (typeof a === 'object' && a !== null && typeof b === 'object' && b !== null)
4
4
  return a[typeSym] === b[typeSym];
@@ -1 +1 @@
1
- {"version":3,"file":"nominal_match.js","sourceRoot":"","sources":["../../ts/nominal/nominal_match.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAUpC,MAAM,UAAU,YAAY,CAC3B,CAAyC,EACzC,CAAyC;IAEzC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;QAC7E,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAA;SAC5B;QACJ,OAAO,IAAI,CAAA;KACX;AACF,CAAC"}
1
+ {"version":3,"file":"nominal_match.js","sourceRoot":"","sources":["../../ts/nominal/nominal_match.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAUxC,MAAM,UAAU,YAAY,CAC3B,CAAyC,EACzC,CAAyC;IAEzC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;QAC7E,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAA;SAC5B;QACJ,OAAO,IAAI,CAAA;KACX;AACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * This is a internal symbol to create branded types.
3
+ */
4
+ export declare const uniSym: unique symbol;
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../ts/type/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,MAAM,eAAsB,CAAA"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * This is a internal symbol to create branded types.
3
+ */
4
+ export const uniSym = Symbol('type-plus');
5
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../ts/type/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA"}
@@ -0,0 +1,33 @@
1
+ import { uniSym } from './constants.js';
2
+ /**
3
+ * A failed type with message.
4
+ *
5
+ * This is analogous to the `Error` class in JavaScript.
6
+ *
7
+ * It can be used in type-level programming to failed an error message.
8
+ *
9
+ * If you want to add additional type information,
10
+ * use `FailedT` or create your own failed type instead.
11
+ *
12
+ * ```ts
13
+ * import { Failed } from 'type-plus'
14
+ *
15
+ * type T = Failed<'error message'>
16
+ * ```
17
+ */
18
+ export interface Failed<Msg extends string> {
19
+ [uniSym]: Msg;
20
+ }
21
+ /**
22
+ * A failed type with message and one additional type.
23
+ *
24
+ * Use this to add a generic type to the failed type.
25
+ *
26
+ * e.g. `FailedT<'missing', number | string>`
27
+ *
28
+ * It's recommended to create custom failed types instead of using this to provide better message.
29
+ */
30
+ export interface FailedT<Msg extends string, T> {
31
+ [uniSym]: Msg;
32
+ }
33
+ //# sourceMappingURL=failed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failed.d.ts","sourceRoot":"","sources":["../../ts/type/failed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,MAAM,CAAC,GAAG,SAAS,MAAM;IACzC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAA;CACb;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,OAAO,CAAC,GAAG,SAAS,MAAM,EAAE,CAAC;IAC7C,CAAC,MAAM,CAAC,EAAE,GAAG,CAAA;CACb"}
@@ -0,0 +1,2 @@
1
+ import { uniSym } from './constants.js';
2
+ //# sourceMappingURL=failed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failed.js","sourceRoot":"","sources":["../../ts/type/failed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union_to_intersection.d.ts","sourceRoot":"","sources":["../../ts/union/union_to_intersection.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GACvG,CAAC,GACD,KAAK,CAAA;AAER,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAElE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union_to_intersection.js","sourceRoot":"","sources":["../../ts/union/union_to_intersection.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,cAAc,CAAI,KAAQ;IACzC,OAAO,KAAsC,CAAA;AAC9C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "type-plus",
3
- "version": "6.4.0",
3
+ "version": "6.5.0",
4
4
  "description": "Provides additional types for TypeScript.",
5
5
  "homepage": "https://github.com/unional/type-plus",
6
6
  "bugs": {
@@ -67,17 +67,17 @@
67
67
  "size-limit": "^8.2.4",
68
68
  "ts-jest": "^29.1.0",
69
69
  "tslib": "^2.4.0",
70
- "typedoc": "^0.23.0",
71
- "typedoc-plugin-extras": "^2.2.3",
70
+ "typedoc": "^0.24.1",
71
+ "typedoc-plugin-extras": "^2.3.2",
72
72
  "typescript": "^5.0.2"
73
73
  },
74
- "packageManager": "pnpm@8.1.0",
74
+ "packageManager": "pnpm@8.2.0",
75
75
  "scripts": {
76
76
  "build": "run-p build:cjs build:esm build:tslib",
77
77
  "build:cjs": "tsc -p tsconfig.cjs.json && ncp package.cjs.json cjs/package.json",
78
78
  "build:esm": "tsc -p tsconfig.esm.json",
79
79
  "build:tslib": "tsc -p tsconfig.tslib.json && ncp package.cjs.json tslib/package.json",
80
- "build:doc": "typedoc",
80
+ "build:doc": "typedoc --plugin typedoc-plugin-extras",
81
81
  "clean": "rimraf cjs coverage esm lib libm tslib",
82
82
  "coverage": "cross-env NODE_OPTIONS=--experimental-vm-modules NODE_NO_WARNINGS=1 jest --coverage",
83
83
  "cs": "changeset",
@@ -11,5 +11,4 @@ so that that type of the value can be narrowed down.
11
11
 
12
12
  - [Handbook][assertion_functions]
13
13
 
14
-
15
- [assertion_functions]: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions
14
+ [assertion_functions]: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions
package/ts/index.ts CHANGED
@@ -86,6 +86,7 @@ export type { IsNotSymbol, IsSymbol, NotSymbolType, SymbolType } from './symbol/
86
86
  export * from './testing/stub.js'
87
87
  export * from './testing/test_type.js'
88
88
  export type { IsNotTuple, IsTuple, NotTupleType, TupleType } from './tuple/tuple_type.js'
89
+ export type { Failed, FailedT } from './type/failed.js'
89
90
  export type {
90
91
  IsNotUndefined,
91
92
  IsUndefined,
@@ -96,3 +97,4 @@ export type { UnionKeys } from './union_keys.js'
96
97
  export type { IsNotUnknown, IsUnknown, NotUnknownType, UnknownType } from './unknown/unknown_type.js'
97
98
  export * from './utils/index.js'
98
99
  export type { IsNotVoid, IsVoid, NotVoidType, VoidType } from './void/void_type.js'
100
+
@@ -3,15 +3,23 @@
3
3
 
4
4
  import { isType } from '../predicates/isType.js'
5
5
  import type { Widen } from '../utils/index.js'
6
- import { typeSym, valueSym } from './types.js'
6
+ import { typeSym, valueSym } from './constants.js'
7
7
 
8
8
  /**
9
9
  * Create a "branded" version of a type.
10
10
  * TypeScript won't allow implicit conversion to this type
11
11
  */
12
- export type Brand<B extends string, T> = T extends object
13
- ? T & { [typeSym]: B }
14
- : { [typeSym]: B; [valueSym]: T }
12
+ export type Brand<B extends string, T = never> = [T] extends [null] | [undefined] | [symbol] | [void]
13
+ ? Branded<B, T>
14
+ : Branded<B, T> & T
15
+
16
+ /**
17
+ * A branded type of `B` with value of `T`.
18
+ */
19
+ export interface Branded<B extends string, T> {
20
+ [typeSym]: B
21
+ [valueSym]: T
22
+ }
15
23
 
16
24
  /**
17
25
  * Creates a brand creator with the specified type.
@@ -21,15 +29,15 @@ export function brand<B extends string>(type: B): <T>(subject: T) => Brand<B, Wi
21
29
  * Creates a branded value of specified type.
22
30
  */
23
31
  export function brand<B extends string, T>(type: B, subject: T): Brand<B, Widen<T>>
24
- export function brand(type: string, subject?: unknown) {
32
+ export function brand(typeInput: string, subject?: unknown) {
25
33
  if (subject === undefined)
26
34
  return function <T>(subject: T) {
27
- return brand(type, subject)
35
+ return brand(typeInput, subject)
28
36
  }
29
37
 
30
38
  if (isType<{ [typeSym]: string }>(subject, s => typeof s === 'object' && s !== null)) {
31
39
  // if subject is not an object, the branding will exist only in type-level.
32
- subject[typeSym] = type
40
+ subject[typeSym] = typeInput
33
41
  }
34
42
  return subject
35
43
  }
@@ -3,7 +3,7 @@
3
3
 
4
4
  import { isType } from '../predicates/isType.js'
5
5
  import type { Widen } from '../utils/index.js'
6
- import { typeSym } from './types.js'
6
+ import { typeSym, valueSym } from './constants.js'
7
7
 
8
8
  /**
9
9
  * Create a "flavored" version of a type.
@@ -11,8 +11,23 @@ import { typeSym } from './types.js'
11
11
  * but will allow unflavored values of that type to be passed in where a flavored version is expected.
12
12
  * This is a less restrictive form of branding.
13
13
  */
14
- export type Flavor<F extends string, T> = T & {
14
+ export type Flavor<F extends string, T> = [T] extends [null] | [undefined] | [symbol] | [void]
15
+ ? FlavoredUnit<F, T>
16
+ : Flavored<F> & T
17
+
18
+ /**
19
+ * A flavored type of `F`
20
+ */
21
+ export interface Flavored<F extends string> {
22
+ [typeSym]?: F
23
+ }
24
+
25
+ /**
26
+ * A special flavored type for special types.
27
+ */
28
+ export interface FlavoredUnit<F extends string, T> {
15
29
  [typeSym]?: F
30
+ [valueSym]: T
16
31
  }
17
32
 
18
33
  /**
@@ -1,6 +1,6 @@
1
1
  import type { Brand } from './brand.js'
2
2
  import type { Flavor } from './flavor.js'
3
- import { typeSym } from './types.js'
3
+ import { typeSym } from './constants.js'
4
4
 
5
5
  export function nominalMatch<A extends string, B extends A>(
6
6
  a: Brand<A, unknown>,
@@ -0,0 +1,4 @@
1
+ /**
2
+ * This is a internal symbol to create branded types.
3
+ */
4
+ export const uniSym = Symbol('type-plus')
@@ -0,0 +1,34 @@
1
+ import { uniSym } from './constants.js'
2
+
3
+ /**
4
+ * A failed type with message.
5
+ *
6
+ * This is analogous to the `Error` class in JavaScript.
7
+ *
8
+ * It can be used in type-level programming to failed an error message.
9
+ *
10
+ * If you want to add additional type information,
11
+ * use `FailedT` or create your own failed type instead.
12
+ *
13
+ * ```ts
14
+ * import { Failed } from 'type-plus'
15
+ *
16
+ * type T = Failed<'error message'>
17
+ * ```
18
+ */
19
+ export interface Failed<Msg extends string> {
20
+ [uniSym]: Msg
21
+ }
22
+
23
+ /**
24
+ * A failed type with message and one additional type.
25
+ *
26
+ * Use this to add a generic type to the failed type.
27
+ *
28
+ * e.g. `FailedT<'missing', number | string>`
29
+ *
30
+ * It's recommended to create custom failed types instead of using this to provide better message.
31
+ */
32
+ export interface FailedT<Msg extends string, T> {
33
+ [uniSym]: Msg
34
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../ts/nominal/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,eAAiB,CAAA;AACrC,eAAO,MAAM,QAAQ,eAAkB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../ts/nominal/types.ts"],"names":[],"mappings":";;;AAAa,QAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACxB,QAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"union_to_intersection.d.ts","sourceRoot":"","sources":["../ts/union_to_intersection.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GACvG,CAAC,GACD,KAAK,CAAA;AAER,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAElE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"union_to_intersection.js","sourceRoot":"","sources":["../ts/union_to_intersection.ts"],"names":[],"mappings":";;;AAMA,SAAgB,cAAc,CAAI,KAAQ;IACzC,OAAO,KAAsC,CAAA;AAC9C,CAAC;AAFD,wCAEC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../ts/nominal/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,eAAiB,CAAA;AACrC,eAAO,MAAM,QAAQ,eAAkB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../ts/nominal/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AACrC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"union_to_intersection.d.ts","sourceRoot":"","sources":["../ts/union_to_intersection.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GACvG,CAAC,GACD,KAAK,CAAA;AAER,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAElE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"union_to_intersection.js","sourceRoot":"","sources":["../ts/union_to_intersection.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,cAAc,CAAI,KAAQ;IACzC,OAAO,KAAsC,CAAA;AAC9C,CAAC"}
File without changes