@xylabs/object 3.2.0 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/browser/AsObjectFactory.d.cts +11 -3
  2. package/dist/browser/AsObjectFactory.d.cts.map +1 -1
  3. package/dist/browser/AsObjectFactory.d.mts +11 -3
  4. package/dist/browser/AsObjectFactory.d.mts.map +1 -1
  5. package/dist/browser/AsObjectFactory.d.ts +11 -3
  6. package/dist/browser/AsObjectFactory.d.ts.map +1 -1
  7. package/dist/browser/AsTypeFactory.d.cts +5 -4
  8. package/dist/browser/AsTypeFactory.d.cts.map +1 -1
  9. package/dist/browser/AsTypeFactory.d.mts +5 -4
  10. package/dist/browser/AsTypeFactory.d.mts.map +1 -1
  11. package/dist/browser/AsTypeFactory.d.ts +5 -4
  12. package/dist/browser/AsTypeFactory.d.ts.map +1 -1
  13. package/dist/browser/IsObjectFactory.d.cts +2 -2
  14. package/dist/browser/IsObjectFactory.d.cts.map +1 -1
  15. package/dist/browser/IsObjectFactory.d.mts +2 -2
  16. package/dist/browser/IsObjectFactory.d.mts.map +1 -1
  17. package/dist/browser/IsObjectFactory.d.ts +2 -2
  18. package/dist/browser/IsObjectFactory.d.ts.map +1 -1
  19. package/dist/browser/asObject.d.cts +10 -2
  20. package/dist/browser/asObject.d.cts.map +1 -1
  21. package/dist/browser/asObject.d.mts +10 -2
  22. package/dist/browser/asObject.d.mts.map +1 -1
  23. package/dist/browser/asObject.d.ts +10 -2
  24. package/dist/browser/asObject.d.ts.map +1 -1
  25. package/dist/browser/index.cjs +5 -0
  26. package/dist/browser/index.cjs.map +1 -1
  27. package/dist/browser/index.js +5 -0
  28. package/dist/browser/index.js.map +1 -1
  29. package/dist/neutral/AsObjectFactory.d.cts +11 -3
  30. package/dist/neutral/AsObjectFactory.d.cts.map +1 -1
  31. package/dist/neutral/AsObjectFactory.d.mts +11 -3
  32. package/dist/neutral/AsObjectFactory.d.mts.map +1 -1
  33. package/dist/neutral/AsObjectFactory.d.ts +11 -3
  34. package/dist/neutral/AsObjectFactory.d.ts.map +1 -1
  35. package/dist/neutral/AsTypeFactory.d.cts +5 -4
  36. package/dist/neutral/AsTypeFactory.d.cts.map +1 -1
  37. package/dist/neutral/AsTypeFactory.d.mts +5 -4
  38. package/dist/neutral/AsTypeFactory.d.mts.map +1 -1
  39. package/dist/neutral/AsTypeFactory.d.ts +5 -4
  40. package/dist/neutral/AsTypeFactory.d.ts.map +1 -1
  41. package/dist/neutral/IsObjectFactory.d.cts +2 -2
  42. package/dist/neutral/IsObjectFactory.d.cts.map +1 -1
  43. package/dist/neutral/IsObjectFactory.d.mts +2 -2
  44. package/dist/neutral/IsObjectFactory.d.mts.map +1 -1
  45. package/dist/neutral/IsObjectFactory.d.ts +2 -2
  46. package/dist/neutral/IsObjectFactory.d.ts.map +1 -1
  47. package/dist/neutral/asObject.d.cts +10 -2
  48. package/dist/neutral/asObject.d.cts.map +1 -1
  49. package/dist/neutral/asObject.d.mts +10 -2
  50. package/dist/neutral/asObject.d.mts.map +1 -1
  51. package/dist/neutral/asObject.d.ts +10 -2
  52. package/dist/neutral/asObject.d.ts.map +1 -1
  53. package/dist/neutral/index.cjs +5 -0
  54. package/dist/neutral/index.cjs.map +1 -1
  55. package/dist/neutral/index.js +5 -0
  56. package/dist/neutral/index.js.map +1 -1
  57. package/dist/node/AsObjectFactory.d.cts +11 -3
  58. package/dist/node/AsObjectFactory.d.cts.map +1 -1
  59. package/dist/node/AsObjectFactory.d.mts +11 -3
  60. package/dist/node/AsObjectFactory.d.mts.map +1 -1
  61. package/dist/node/AsObjectFactory.d.ts +11 -3
  62. package/dist/node/AsObjectFactory.d.ts.map +1 -1
  63. package/dist/node/AsTypeFactory.d.cts +5 -4
  64. package/dist/node/AsTypeFactory.d.cts.map +1 -1
  65. package/dist/node/AsTypeFactory.d.mts +5 -4
  66. package/dist/node/AsTypeFactory.d.mts.map +1 -1
  67. package/dist/node/AsTypeFactory.d.ts +5 -4
  68. package/dist/node/AsTypeFactory.d.ts.map +1 -1
  69. package/dist/node/IsObjectFactory.d.cts +2 -2
  70. package/dist/node/IsObjectFactory.d.cts.map +1 -1
  71. package/dist/node/IsObjectFactory.d.mts +2 -2
  72. package/dist/node/IsObjectFactory.d.mts.map +1 -1
  73. package/dist/node/IsObjectFactory.d.ts +2 -2
  74. package/dist/node/IsObjectFactory.d.ts.map +1 -1
  75. package/dist/node/asObject.d.cts +10 -2
  76. package/dist/node/asObject.d.cts.map +1 -1
  77. package/dist/node/asObject.d.mts +10 -2
  78. package/dist/node/asObject.d.mts.map +1 -1
  79. package/dist/node/asObject.d.ts +10 -2
  80. package/dist/node/asObject.d.ts.map +1 -1
  81. package/dist/node/index.cjs +5 -0
  82. package/dist/node/index.cjs.map +1 -1
  83. package/dist/node/index.js +5 -0
  84. package/dist/node/index.js.map +1 -1
  85. package/package.json +4 -4
  86. package/src/AsObjectFactory.ts +2 -2
  87. package/src/AsTypeFactory.ts +15 -5
  88. package/src/IsObjectFactory.ts +2 -2
@@ -3,30 +3,34 @@ import { Logger } from '@xylabs/logger'
3
3
  import { AnyNonPromise, isPromise, TypedValue } from '@xylabs/promise'
4
4
 
5
5
  export interface TypeCheckConfig {
6
+ disallowChecks?: ((value: unknown) => unknown)[]
6
7
  log?: boolean | Logger
7
8
  }
8
9
 
9
10
  export type StringOrAlertFunction<T extends AnyNonPromise> = string | AssertExMessageFunc<T>
10
11
 
11
- export type TypeCheck<T extends TypedValue> = (obj: AnyNonPromise, config?: TypeCheckConfig) => obj is T
12
+ export type TypeCheck<T extends TypedValue, E = void> = (
13
+ obj: (E extends void ? Exclude<AnyNonPromise, E> : AnyNonPromise) | T,
14
+ config?: TypeCheckConfig,
15
+ ) => obj is T
12
16
 
13
17
  export const AsTypeFactory = {
14
18
  // eslint-disable-next-line @typescript-eslint/ban-types
15
- create: <T extends AnyNonPromise>(typeCheck: TypeCheck<T>) => {
19
+ create: <T extends AnyNonPromise, E = void>(typeCheck: TypeCheck<T, E>) => {
16
20
  function func<TType extends T>(
17
21
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
- value: AnyNonPromise,
22
+ value: (E extends void ? Exclude<AnyNonPromise, E> : AnyNonPromise) | T,
19
23
  config?: TypeCheckConfig,
20
24
  ): TType | undefined
21
25
  function func<TType extends T>(
22
26
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
- value: AnyNonPromise,
27
+ value: (E extends void ? Exclude<AnyNonPromise, E> : AnyNonPromise) | T,
24
28
  assert: StringOrAlertFunction<T>,
25
29
  config?: TypeCheckConfig,
26
30
  ): TType
27
31
  function func<TType extends T>(
28
32
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
- value: AnyNonPromise,
33
+ value: (E extends void ? Exclude<AnyNonPromise, E> : AnyNonPromise) | T,
30
34
  assertOrConfig?: StringOrAlertFunction<T> | TypeCheckConfig,
31
35
  config?: TypeCheckConfig,
32
36
  ): TType | undefined {
@@ -42,6 +46,12 @@ export const AsTypeFactory = {
42
46
  throw new TypeError('un-awaited promises may not be sent to "as" functions')
43
47
  }
44
48
 
49
+ for (const disallowCheck of config?.disallowChecks ?? []) {
50
+ if (disallowCheck(value)) {
51
+ throw new TypeError('disallowed type')
52
+ }
53
+ }
54
+
45
55
  const resolvedAssert = (typeof assertOrConfig === 'object' ? undefined : assertOrConfig) as StringOrAlertFunction<T> | undefined
46
56
  const resolvedConfig = typeof assertOrConfig === 'object' ? assertOrConfig : config
47
57
  const result = typeCheck(value, resolvedConfig) ? (value as TType) : undefined
@@ -5,8 +5,8 @@ import { isType, ObjectTypeShape } from './isType'
5
5
 
6
6
  export interface ObjectTypeConfig extends TypeCheckConfig {}
7
7
 
8
- export class IsObjectFactory<T extends TypedObject> {
9
- create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<TypedObject>[]): TypeCheck<T> {
8
+ export class IsObjectFactory<T extends TypedObject, E = void> {
9
+ create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<TypedObject, E>[]): TypeCheck<T, E> {
10
10
  return (obj, { log } = {}): obj is T => {
11
11
  if (!obj || typeof obj !== 'object') {
12
12
  return false