@guillaume-docquier/tools-ts 7.5.2 → 8.1.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.
package/README.md CHANGED
@@ -69,19 +69,19 @@ pseudo-random sequences.
69
69
 
70
70
  These exports are type-only helpers for common TypeScript modeling problems.
71
71
 
72
- | Export | What it is | Use it when |
73
- | ------------------------------------------ | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
74
- | `Branded`, `branded` | A nominal typing helper plus a runtime no-op for branding values. | Structurally identical values need distinct domain types, such as separate ID kinds. |
75
- | `Unbranded` | Removes a brand from a type. | An API accepts the underlying value of a branded type. |
76
- | `UnbrandedProperties` | Removes brands from an object's property types. | An object input should use raw values for branded fields. |
77
- | `ConstructorType` | A type for class constructors. | A function accepts a class and later uses `new` or `instanceof` against it. |
78
- | `EnumKeyType`, `EnumValueType`, `EnumType` | Broad shapes for enum-like objects. | You are writing generic utilities that operate on TypeScript enums or const-object enums. |
79
- | `Enumify` | Converts a const object into a union of its values. | A project avoids TypeScript `enum` but wants enum-like ergonomics from `as const` objects. |
80
- | `ValueOf` | Produces a union of an object's value types. | You need the values of a lookup object as a type. |
81
- | `Prettify` | Re-expands an object type for easier editor hovers. | Intersections or mapped types are correct but hard to read in tooling. |
82
- | `OmitOverUnion` | Applies `Omit` distributively across union members. | Native `Omit` collapses a discriminated union in a way that loses member-specific fields. |
83
- | `PartialProperties` | Makes selected object properties partial, not the whole object. | Only nested property objects should become partial while the parent shape stays required. |
84
- | `Mutable` | Removes `readonly` from selected properties. | You have a narrow, deliberate mutation need. Avoid this unless there is no cleaner model. |
72
+ | Export | What it is | Use it when |
73
+ | ------------------------------------------ | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
74
+ | `Branded<TBrand, TType>`, `branded` | A composable nominal typing helper plus a runtime no-op for branding values. | Structurally identical values need distinct domain types. |
75
+ | `Unbranded` | Removes a brand from a type. | An API accepts the underlying value of a branded type. |
76
+ | `UnbrandedProperties` | Removes brands from an object's property types. | An object input should use raw values for branded fields. |
77
+ | `ConstructorType` | A type for class constructors. | A function accepts a class and later uses `new` or `instanceof` against it. |
78
+ | `EnumKeyType`, `EnumValueType`, `EnumType` | Broad shapes for enum-like objects. | You are writing generic utilities that operate on TypeScript enums or const-object enums. |
79
+ | `Enumify` | Converts a const object into a union of its values. | A project avoids TypeScript `enum` but wants enum-like ergonomics from `as const` objects. |
80
+ | `ValueOf` | Produces a union of an object's value types. | You need the values of a lookup object as a type. |
81
+ | `Prettify` | Re-expands an object type for easier editor hovers. | Intersections or mapped types are correct but hard to read in tooling. |
82
+ | `OmitOverUnion` | Applies `Omit` distributively across union members. | Native `Omit` collapses a discriminated union in a way that loses member-specific fields. |
83
+ | `PartialProperties` | Makes selected object properties partial, not the whole object. | Only nested property objects should become partial while the parent shape stays required. |
84
+ | `Mutable` | Removes `readonly` from selected properties. | You have a narrow, deliberate mutation need. Avoid this unless there is no cleaner model. |
85
85
 
86
86
  ### Logging
87
87
 
package/dist/Assert.d.ts CHANGED
@@ -44,6 +44,21 @@ export declare class Assert {
44
44
  * ```
45
45
  */
46
46
  static isDefined<TType>(this: void, maybeDefined: TType | undefined | null, paramName?: string): asserts maybeDefined is TType;
47
+ /**
48
+ * Asserts that something is not defined (null or undefined).
49
+ * This function will throw a {@link AssertionError} if this is not the case, and narrow to null or undefined otherwise.
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * const somethingDefined: number | undefined = 1
54
+ * Assert.isNotDefined(somethingDefined) // Will throw!
55
+ *
56
+ * const somethingNotDefined: number | undefined = undefined
57
+ * Assert.isNotDefined(somethingNotDefined)
58
+ * somethingNotDefined // undefined
59
+ * ```
60
+ */
61
+ static isNotDefined<TType>(this: void, maybeNotDefined: TType | undefined | null, paramName?: string): asserts maybeNotDefined is undefined | null;
47
62
  /**
48
63
  * Asserts that something is a member of an enum.
49
64
  * This function will throw a {@link AssertionError} if this is not the case, and narrow to the expected type otherwise.
package/dist/Assert.js CHANGED
@@ -62,6 +62,30 @@ export class Assert {
62
62
  }, Assert.isDefined);
63
63
  }
64
64
  }
65
+ /**
66
+ * Asserts that something is not defined (null or undefined).
67
+ * This function will throw a {@link AssertionError} if this is not the case, and narrow to null or undefined otherwise.
68
+ *
69
+ * @example
70
+ * ```ts
71
+ * const somethingDefined: number | undefined = 1
72
+ * Assert.isNotDefined(somethingDefined) // Will throw!
73
+ *
74
+ * const somethingNotDefined: number | undefined = undefined
75
+ * Assert.isNotDefined(somethingNotDefined)
76
+ * somethingNotDefined // undefined
77
+ * ```
78
+ */
79
+ // oxlint-disable-next-line typescript/no-unnecessary-type-parameters -- Needed to extract from undefined | null
80
+ static isNotDefined(maybeNotDefined, paramName) {
81
+ if (maybeNotDefined !== undefined && maybeNotDefined !== null) {
82
+ throw new AssertionError("Defined.", {
83
+ paramName,
84
+ expected: "null or undefined",
85
+ received: formatPrimitiveValue(maybeNotDefined),
86
+ }, Assert.isNotDefined);
87
+ }
88
+ }
65
89
  /**
66
90
  * Asserts that something is a member of an enum.
67
91
  * This function will throw a {@link AssertionError} if this is not the case, and narrow to the expected type otherwise.
@@ -1 +1 @@
1
- {"version":3,"file":"Assert.js","sourceRoot":"","sources":["../src/Assert.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Assert.js","sourceRoot":"","sources":["../src/Assert.ts"],"names":[],"mappings":"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"}
package/dist/Brand.d.ts CHANGED
@@ -1,13 +1,15 @@
1
1
  declare const brand: unique symbol;
2
2
  declare const baseType: unique symbol;
3
- type AnyBrand = Branded<unknown, unknown>;
3
+ type AnyBrand = {
4
+ [baseType]: unknown;
5
+ };
4
6
  type TypeOf<TBrand extends AnyBrand> = TBrand[typeof baseType];
5
7
  /**
6
8
  * Type utility to create branded types.
7
9
  *
8
10
  * @example
9
11
  * ```ts
10
- * type UserId = Branded<string, "userId">
12
+ * type UserId = Branded<"UserId", string>
11
13
  * function getUser(userId: UserId): User {}
12
14
  *
13
15
  * const str = "a string"
@@ -16,9 +18,21 @@ type TypeOf<TBrand extends AnyBrand> = TBrand[typeof baseType];
16
18
  * getUser(str) // S2345: Argument of type string is not assignable to parameter of type UserId
17
19
  * getUser(userId) // works!
18
20
  * ```
21
+ *
22
+ * Brands can be composed with a normal type intersection.
23
+ *
24
+ * ```ts
25
+ * type PositiveNumber = Branded<"PositiveNumber", number>
26
+ * type Integer = Branded<"Integer", number>
27
+ * type PositiveInteger = PositiveNumber & Integer
28
+ *
29
+ * const positiveNumber: PositiveNumber = branded<PositiveInteger>(1)
30
+ * const integer: Integer = branded<PositiveInteger>(1)
31
+ * const positiveInteger: PositiveInteger = branded<PositiveInteger>(1)
32
+ * ```
19
33
  */
20
- export type Branded<TType, TBrand> = TType & {
21
- [brand]: TBrand;
34
+ export type Branded<TBrand, TType> = TType & {
35
+ readonly [brand]: (value: TBrand) => TBrand;
22
36
  } & {
23
37
  [baseType]: TType;
24
38
  };
@@ -31,7 +45,9 @@ export declare function branded<TBrand extends AnyBrand>(value: TypeOf<TBrand>):
31
45
  * Removes the brand from a branded type while leaving other types unchanged.
32
46
  * Usually useful for tests when you want to accept unbranded arguments and brand them to alleviate test code.
33
47
  */
34
- export type Unbranded<T> = T extends Branded<infer Base, infer _Tag> ? Base : T;
48
+ export type Unbranded<T> = T extends {
49
+ [baseType]: infer Base;
50
+ } ? Base : T;
35
51
  /**
36
52
  * Removes brands from an object's property types.
37
53
  * Usually useful for tests when you want to accept unbranded arguments and brand them to alleviate test code.
package/dist/Brand.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Brand.js","sourceRoot":"","sources":["../src/Brand.ts"],"names":[],"mappings":"AAuBA;;;GAGG;AACH,MAAM,UAAU,OAAO,CAA0B,KAAqB;IACpE,6HAA6H;IAC7H,OAAO,KAAe,CAAA;AACxB,CAAC"}
1
+ {"version":3,"file":"Brand.js","sourceRoot":"","sources":["../src/Brand.ts"],"names":[],"mappings":"AAmCA;;;GAGG;AACH,MAAM,UAAU,OAAO,CAA0B,KAAqB;IACpE,6HAA6H;IAC7H,OAAO,KAAe,CAAA;AACxB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@guillaume-docquier/tools-ts",
3
- "version": "7.5.2",
3
+ "version": "8.1.0",
4
4
  "description": "My personal collection of typescript tools",
5
5
  "homepage": "https://github.com/Guillaume-Docquier/tools-ts",
6
6
  "license": "MIT",
@@ -25,30 +25,29 @@
25
25
  "provenance": true
26
26
  },
27
27
  "dependencies": {
28
- "@logtape/logtape": "^2.3.2",
29
- "@logtape/redaction": "^2.3.2"
28
+ "@logtape/logtape": "^2.3.3",
29
+ "@logtape/redaction": "^2.3.3"
30
30
  },
31
31
  "devDependencies": {
32
- "@guillaume-docquier/oxfmt": "^1.0.6",
33
- "@guillaume-docquier/oxlint": "^1.8.0",
32
+ "@guillaume-docquier/oxfmt": "^1.0.8",
33
+ "@guillaume-docquier/oxlint": "^1.8.1",
34
34
  "@semantic-release/commit-analyzer": "^13.0.1",
35
35
  "@semantic-release/exec": "^7.1.0",
36
36
  "@semantic-release/github": "^12.0.9",
37
37
  "@semantic-release/release-notes-generator": "^14.1.1",
38
- "@types/node": "^25.9.5",
39
- "@vitest/coverage-v8": "^4.1.11",
38
+ "@types/node": "^26.4.1",
39
+ "@vitest/coverage-v8": "^5.0.0",
40
40
  "conventional-changelog-conventionalcommits": "^9.3.1",
41
41
  "husky": "^9.1.7",
42
42
  "jiti": "^2.7.0",
43
- "lint-staged": "^16.4.0",
44
- "oxfmt": "^0.65.0",
45
- "oxlint": "^1.80.0",
43
+ "lint-staged": "^17.5.0",
44
+ "oxfmt": ">=0.67.0",
45
+ "oxlint": "^1.82.0",
46
46
  "oxlint-tsgolint": "^7.0.2001",
47
47
  "semantic-release": "^25.0.9",
48
48
  "typescript": "~7.0.2",
49
49
  "vite": "^8.2.2",
50
- "vitest": "^4.1.11",
51
- "node": "runtime:26.8.1"
50
+ "vitest": "^5.0.0"
52
51
  },
53
52
  "lint-staged": {
54
53
  "*.{md,json,yml,yaml,css,scss}": "oxfmt --no-error-on-unmatched-pattern",
@@ -60,7 +59,7 @@
60
59
  "devEngines": {
61
60
  "packageManager": {
62
61
  "name": "pnpm",
63
- "version": "11.24.0",
62
+ "version": "12.3.4",
64
63
  "onFail": "download"
65
64
  },
66
65
  "runtime": {