@xyo-network/object 2.82.0-rc.1 → 2.83.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 (152) hide show
  1. package/dist/browser/AnyObject.d.cts +6 -1
  2. package/dist/browser/AnyObject.d.cts.map +1 -1
  3. package/dist/browser/AnyObject.d.mts +6 -1
  4. package/dist/browser/AnyObject.d.mts.map +1 -1
  5. package/dist/browser/AnyObject.d.ts +6 -1
  6. package/dist/browser/AnyObject.d.ts.map +1 -1
  7. package/dist/browser/AsObjectFactory.d.cts +4 -4
  8. package/dist/browser/AsObjectFactory.d.cts.map +1 -1
  9. package/dist/browser/AsObjectFactory.d.mts +4 -4
  10. package/dist/browser/AsObjectFactory.d.mts.map +1 -1
  11. package/dist/browser/AsObjectFactory.d.ts +4 -4
  12. package/dist/browser/AsObjectFactory.d.ts.map +1 -1
  13. package/dist/browser/AsTypeFactory.d.cts +12 -0
  14. package/dist/browser/AsTypeFactory.d.cts.map +1 -0
  15. package/dist/browser/AsTypeFactory.d.mts +12 -0
  16. package/dist/browser/AsTypeFactory.d.mts.map +1 -0
  17. package/dist/browser/AsTypeFactory.d.ts +12 -0
  18. package/dist/browser/AsTypeFactory.d.ts.map +1 -0
  19. package/dist/browser/Base.d.cts +13 -0
  20. package/dist/browser/Base.d.cts.map +1 -0
  21. package/dist/browser/Base.d.mts +13 -0
  22. package/dist/browser/Base.d.mts.map +1 -0
  23. package/dist/browser/Base.d.ts +13 -0
  24. package/dist/browser/Base.d.ts.map +1 -0
  25. package/dist/browser/EmptyObject.d.cts +7 -2
  26. package/dist/browser/EmptyObject.d.cts.map +1 -1
  27. package/dist/browser/EmptyObject.d.mts +7 -2
  28. package/dist/browser/EmptyObject.d.mts.map +1 -1
  29. package/dist/browser/EmptyObject.d.ts +7 -2
  30. package/dist/browser/EmptyObject.d.ts.map +1 -1
  31. package/dist/browser/IsObjectFactory.d.cts +6 -6
  32. package/dist/browser/IsObjectFactory.d.cts.map +1 -1
  33. package/dist/browser/IsObjectFactory.d.mts +6 -6
  34. package/dist/browser/IsObjectFactory.d.mts.map +1 -1
  35. package/dist/browser/IsObjectFactory.d.ts +6 -6
  36. package/dist/browser/IsObjectFactory.d.ts.map +1 -1
  37. package/dist/browser/Validator.d.cts +11 -0
  38. package/dist/browser/Validator.d.cts.map +1 -0
  39. package/dist/browser/Validator.d.mts +11 -0
  40. package/dist/browser/Validator.d.mts.map +1 -0
  41. package/dist/browser/Validator.d.ts +11 -0
  42. package/dist/browser/Validator.d.ts.map +1 -0
  43. package/dist/browser/WithAdditional.d.cts +2 -2
  44. package/dist/browser/WithAdditional.d.cts.map +1 -1
  45. package/dist/browser/WithAdditional.d.mts +2 -2
  46. package/dist/browser/WithAdditional.d.mts.map +1 -1
  47. package/dist/browser/WithAdditional.d.ts +2 -2
  48. package/dist/browser/WithAdditional.d.ts.map +1 -1
  49. package/dist/browser/asObject.d.cts +4 -3
  50. package/dist/browser/asObject.d.cts.map +1 -1
  51. package/dist/browser/asObject.d.mts +4 -3
  52. package/dist/browser/asObject.d.mts.map +1 -1
  53. package/dist/browser/asObject.d.ts +4 -3
  54. package/dist/browser/asObject.d.ts.map +1 -1
  55. package/dist/browser/index.cjs +35 -9
  56. package/dist/browser/index.cjs.map +1 -1
  57. package/dist/browser/index.d.cts +3 -0
  58. package/dist/browser/index.d.cts.map +1 -1
  59. package/dist/browser/index.d.mts +3 -0
  60. package/dist/browser/index.d.mts.map +1 -1
  61. package/dist/browser/index.d.ts +3 -0
  62. package/dist/browser/index.d.ts.map +1 -1
  63. package/dist/browser/index.js +35 -9
  64. package/dist/browser/index.js.map +1 -1
  65. package/dist/browser/isObject.d.cts +2 -1
  66. package/dist/browser/isObject.d.cts.map +1 -1
  67. package/dist/browser/isObject.d.mts +2 -1
  68. package/dist/browser/isObject.d.mts.map +1 -1
  69. package/dist/browser/isObject.d.ts +2 -1
  70. package/dist/browser/isObject.d.ts.map +1 -1
  71. package/dist/node/AnyObject.d.cts +6 -1
  72. package/dist/node/AnyObject.d.cts.map +1 -1
  73. package/dist/node/AnyObject.d.mts +6 -1
  74. package/dist/node/AnyObject.d.mts.map +1 -1
  75. package/dist/node/AnyObject.d.ts +6 -1
  76. package/dist/node/AnyObject.d.ts.map +1 -1
  77. package/dist/node/AsObjectFactory.d.cts +4 -4
  78. package/dist/node/AsObjectFactory.d.cts.map +1 -1
  79. package/dist/node/AsObjectFactory.d.mts +4 -4
  80. package/dist/node/AsObjectFactory.d.mts.map +1 -1
  81. package/dist/node/AsObjectFactory.d.ts +4 -4
  82. package/dist/node/AsObjectFactory.d.ts.map +1 -1
  83. package/dist/node/AsTypeFactory.d.cts +12 -0
  84. package/dist/node/AsTypeFactory.d.cts.map +1 -0
  85. package/dist/node/AsTypeFactory.d.mts +12 -0
  86. package/dist/node/AsTypeFactory.d.mts.map +1 -0
  87. package/dist/node/AsTypeFactory.d.ts +12 -0
  88. package/dist/node/AsTypeFactory.d.ts.map +1 -0
  89. package/dist/node/Base.d.cts +13 -0
  90. package/dist/node/Base.d.cts.map +1 -0
  91. package/dist/node/Base.d.mts +13 -0
  92. package/dist/node/Base.d.mts.map +1 -0
  93. package/dist/node/Base.d.ts +13 -0
  94. package/dist/node/Base.d.ts.map +1 -0
  95. package/dist/node/EmptyObject.d.cts +7 -2
  96. package/dist/node/EmptyObject.d.cts.map +1 -1
  97. package/dist/node/EmptyObject.d.mts +7 -2
  98. package/dist/node/EmptyObject.d.mts.map +1 -1
  99. package/dist/node/EmptyObject.d.ts +7 -2
  100. package/dist/node/EmptyObject.d.ts.map +1 -1
  101. package/dist/node/IsObjectFactory.d.cts +6 -6
  102. package/dist/node/IsObjectFactory.d.cts.map +1 -1
  103. package/dist/node/IsObjectFactory.d.mts +6 -6
  104. package/dist/node/IsObjectFactory.d.mts.map +1 -1
  105. package/dist/node/IsObjectFactory.d.ts +6 -6
  106. package/dist/node/IsObjectFactory.d.ts.map +1 -1
  107. package/dist/node/Validator.d.cts +11 -0
  108. package/dist/node/Validator.d.cts.map +1 -0
  109. package/dist/node/Validator.d.mts +11 -0
  110. package/dist/node/Validator.d.mts.map +1 -0
  111. package/dist/node/Validator.d.ts +11 -0
  112. package/dist/node/Validator.d.ts.map +1 -0
  113. package/dist/node/WithAdditional.d.cts +2 -2
  114. package/dist/node/WithAdditional.d.cts.map +1 -1
  115. package/dist/node/WithAdditional.d.mts +2 -2
  116. package/dist/node/WithAdditional.d.mts.map +1 -1
  117. package/dist/node/WithAdditional.d.ts +2 -2
  118. package/dist/node/WithAdditional.d.ts.map +1 -1
  119. package/dist/node/asObject.d.cts +4 -3
  120. package/dist/node/asObject.d.cts.map +1 -1
  121. package/dist/node/asObject.d.mts +4 -3
  122. package/dist/node/asObject.d.mts.map +1 -1
  123. package/dist/node/asObject.d.ts +4 -3
  124. package/dist/node/asObject.d.ts.map +1 -1
  125. package/dist/node/index.cjs +41 -10
  126. package/dist/node/index.cjs.map +1 -1
  127. package/dist/node/index.d.cts +3 -0
  128. package/dist/node/index.d.cts.map +1 -1
  129. package/dist/node/index.d.mts +3 -0
  130. package/dist/node/index.d.mts.map +1 -1
  131. package/dist/node/index.d.ts +3 -0
  132. package/dist/node/index.d.ts.map +1 -1
  133. package/dist/node/index.js +37 -9
  134. package/dist/node/index.js.map +1 -1
  135. package/dist/node/isObject.d.cts +2 -1
  136. package/dist/node/isObject.d.cts.map +1 -1
  137. package/dist/node/isObject.d.mts +2 -1
  138. package/dist/node/isObject.d.mts.map +1 -1
  139. package/dist/node/isObject.d.ts +2 -1
  140. package/dist/node/isObject.d.ts.map +1 -1
  141. package/package.json +4 -4
  142. package/src/AnyObject.ts +7 -2
  143. package/src/AsObjectFactory.ts +4 -45
  144. package/src/AsTypeFactory.ts +54 -0
  145. package/src/Base.ts +23 -0
  146. package/src/EmptyObject.ts +8 -1
  147. package/src/IsObjectFactory.ts +8 -12
  148. package/src/Validator.ts +13 -0
  149. package/src/WithAdditional.ts +4 -2
  150. package/src/asObject.ts +2 -2
  151. package/src/index.ts +3 -0
  152. package/src/isObject.ts +2 -2
@@ -1,49 +1,8 @@
1
- import { assertEx } from '@xylabs/assert'
2
-
3
- import { ObjectTypeCheck, ObjectTypeConfig } from './IsObjectFactory'
1
+ import { AsTypeFactory, TypeCheck } from './AsTypeFactory'
2
+ import { EmptyObject } from './EmptyObject'
4
3
 
5
4
  export const AsObjectFactory = {
6
- // eslint-disable-next-line @typescript-eslint/ban-types
7
- create: <T extends object>(typeCheck: ObjectTypeCheck<T>) => {
8
- function func<TObject extends T>(
9
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
- obj: object | undefined | null,
11
- config?: ObjectTypeConfig,
12
- ): TObject | undefined
13
- function func<TObject extends T>(
14
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
- obj: object | undefined | null,
16
- assert: string | (() => string),
17
- config?: ObjectTypeConfig,
18
- ): TObject
19
- function func<TObject extends T>(
20
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
- obj: object | undefined | null,
22
- assertOrConfig?: string | (() => string) | ObjectTypeConfig,
23
- config?: ObjectTypeConfig,
24
- ): TObject | undefined {
25
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
- const noUndefined = (resolvedAssert: any): resolvedAssert is T => {
27
- return !!resolvedAssert
28
- }
29
-
30
- if (obj === undefined) {
31
- return undefined
32
- }
33
-
34
- if (obj === null) {
35
- return undefined
36
- }
37
- const resolvedAssert = typeof assertOrConfig === 'object' ? undefined : assertOrConfig
38
- const resolvedConfig = typeof assertOrConfig === 'object' ? assertOrConfig : config
39
- const result = typeCheck(obj, resolvedConfig) ? obj : undefined
40
-
41
- if (noUndefined(resolvedAssert)) {
42
- return assertEx(result, typeof resolvedAssert === 'function' ? resolvedAssert() : resolvedAssert) as TObject
43
- } else {
44
- return result as TObject
45
- }
46
- }
47
- return func
5
+ create: <T extends EmptyObject>(typeCheck: TypeCheck<T>) => {
6
+ return AsTypeFactory.create<T>(typeCheck)
48
7
  },
49
8
  }
@@ -0,0 +1,54 @@
1
+ import { assertEx } from '@xylabs/assert'
2
+ import { Logger } from '@xylabs/logger'
3
+
4
+ export interface TypeCheckConfig {
5
+ log?: boolean | Logger
6
+ }
7
+
8
+ export type TypeCheck<T> = (obj: unknown, config?: TypeCheckConfig) => obj is T
9
+
10
+ export const AsTypeFactory = {
11
+ // eslint-disable-next-line @typescript-eslint/ban-types
12
+ create: <T>(typeCheck: TypeCheck<T>) => {
13
+ function func<TType extends T>(
14
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
+ value: unknown,
16
+ config?: TypeCheckConfig,
17
+ ): TType | undefined
18
+ function func<TType extends T>(
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ value: unknown,
21
+ assert: string | (() => string),
22
+ config?: TypeCheckConfig,
23
+ ): TType
24
+ function func<TType extends T>(
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ value: unknown,
27
+ assertOrConfig?: string | (() => string) | TypeCheckConfig,
28
+ config?: TypeCheckConfig,
29
+ ): TType | undefined {
30
+ const noUndefined = (resolvedAssert: unknown): resolvedAssert is T => {
31
+ return resolvedAssert !== undefined
32
+ }
33
+
34
+ if (value === undefined) {
35
+ return undefined
36
+ }
37
+
38
+ if (value === null) {
39
+ return undefined
40
+ }
41
+
42
+ const resolvedAssert = typeof assertOrConfig === 'object' ? undefined : assertOrConfig
43
+ const resolvedConfig = typeof assertOrConfig === 'object' ? assertOrConfig : config
44
+ const result = typeCheck(value, resolvedConfig) ? value : undefined
45
+
46
+ if (noUndefined(resolvedAssert)) {
47
+ return assertEx(result, typeof resolvedAssert === 'function' ? resolvedAssert() : resolvedAssert) as TType
48
+ } else {
49
+ return result as TType
50
+ }
51
+ }
52
+ return func
53
+ },
54
+ }
package/src/Base.ts ADDED
@@ -0,0 +1,23 @@
1
+ import { Logger } from '@xylabs/logger'
2
+
3
+ import { EmptyObject } from './EmptyObject'
4
+
5
+ export type BaseParamsFields = {
6
+ logger?: Logger
7
+ }
8
+
9
+ export type BaseParams<TAdditionalParams extends EmptyObject | void = void> = TAdditionalParams extends EmptyObject
10
+ ? BaseParamsFields & TAdditionalParams
11
+ : BaseParamsFields
12
+
13
+ export abstract class Base<TParams extends BaseParams = BaseParams> {
14
+ static defaultLogger?: Logger
15
+
16
+ constructor(readonly params: TParams) {
17
+ params.logger?.debug(`Base constructed [${Object(this).name}]`)
18
+ }
19
+
20
+ protected get logger() {
21
+ return this.params?.logger ?? Base.defaultLogger ?? console
22
+ }
23
+ }
@@ -1 +1,8 @@
1
- export type EmptyObject = { [key: string | number | symbol]: never }
1
+ /**
2
+ * An empty object, which means that it does enforce the set of field names, defaulting to an empty set until
3
+ * extended from, which then adds only those additional fields
4
+ */
5
+
6
+ export type EmptyObject<T extends object = object> = { [K in keyof T]?: never }
7
+
8
+ export type EmptyObjectOf<T extends object> = EmptyObject<T> extends T ? EmptyObject<T> : never
@@ -1,17 +1,12 @@
1
- import { Logger } from '@xylabs/logger'
2
-
1
+ import { AnyObject } from './AnyObject'
2
+ import { TypeCheck, TypeCheckConfig } from './AsTypeFactory'
3
+ import { EmptyObject } from './EmptyObject'
3
4
  import { isType, ObjectTypeShape } from './isType'
4
5
 
5
- export interface ObjectTypeConfig {
6
- log?: boolean | Logger
7
- }
8
-
9
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
10
- export type ObjectTypeCheck<T extends {} = {}> = (obj: any, config?: ObjectTypeConfig) => obj is T
6
+ export interface ObjectTypeConfig extends TypeCheckConfig {}
11
7
 
12
- // eslint-disable-next-line @typescript-eslint/ban-types
13
- export class IsObjectFactory<T extends {}> {
14
- create(shape?: ObjectTypeShape, additionalChecks?: ObjectTypeCheck[]): ObjectTypeCheck<T> {
8
+ export class IsObjectFactory<T extends EmptyObject> {
9
+ create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<AnyObject | EmptyObject>[]): TypeCheck<T> {
15
10
  return (obj, { log } = {}): obj is T => {
16
11
  if (!obj || typeof obj !== 'object') {
17
12
  return false
@@ -19,7 +14,8 @@ export class IsObjectFactory<T extends {}> {
19
14
  return (
20
15
  //do primary check
21
16
  Object.entries(shape ?? {}).reduce((prev, [key, type]) => {
22
- const result = isType(obj[key], type)
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ const result = isType((obj as any)[key], type)
23
19
  if (!result && log) {
24
20
  const logger = typeof log === 'object' ? log : console
25
21
  logger.warn(`isType Failed: ${key}: ${type}`)
@@ -0,0 +1,13 @@
1
+ import { Promisable } from '@xylabs/promise'
2
+
3
+ import { AnyObject } from './AnyObject'
4
+ import { EmptyObject } from './EmptyObject'
5
+ import { ObjectWrapper } from './ObjectWrapper'
6
+
7
+ export interface Validator<T extends EmptyObject = AnyObject> {
8
+ validate(payload: T): Promisable<Error[]>
9
+ }
10
+
11
+ export abstract class ValidatorBase<T extends EmptyObject = AnyObject> extends ObjectWrapper<T> implements Validator<T> {
12
+ abstract validate(payload: T): Promisable<Error[]>
13
+ }
@@ -1,3 +1,5 @@
1
- import { AnyObject } from './AnyObject'
1
+ import { EmptyObject } from './EmptyObject'
2
2
 
3
- export type WithAdditional<T extends AnyObject, TAdditional extends AnyObject | void = void> = TAdditional extends AnyObject ? T & TAdditional : T
3
+ export type WithAdditional<T extends EmptyObject, TAdditional extends EmptyObject | void = void> = TAdditional extends EmptyObject
4
+ ? T & TAdditional
5
+ : T
package/src/asObject.ts CHANGED
@@ -1,5 +1,5 @@
1
+ import { AnyObject } from './AnyObject'
1
2
  import { AsObjectFactory } from './AsObjectFactory'
2
3
  import { isObject } from './isObject'
3
4
 
4
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
- export const asObject = (() => AsObjectFactory.create(<T>(obj: T): obj is T => isObject(obj)))()
5
+ export const asAnyObject = (() => AsObjectFactory.create<AnyObject>(<T extends AnyObject>(obj: unknown): obj is T => isObject(obj)))()
package/src/index.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  export * from './AnyObject'
2
2
  export * from './asObject'
3
3
  export * from './AsObjectFactory'
4
+ export * from './AsTypeFactory'
5
+ export * from './Base'
4
6
  export * from './EmptyObject'
5
7
  export * from './isObject'
6
8
  export * from './IsObjectFactory'
@@ -8,4 +10,5 @@ export * from './isType'
8
10
  export * from './JsonObject'
9
11
  export * from './ObjectWrapper'
10
12
  export * from './StringKeyObject'
13
+ export * from './Validator'
11
14
  export * from './WithAdditional'
package/src/isObject.ts CHANGED
@@ -1,6 +1,6 @@
1
+ import { AnyObject } from './AnyObject'
1
2
  import { isType } from './isType'
2
3
 
3
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
4
- export const isObject = (value: any): value is Record<string | number | symbol, any> => {
4
+ export const isObject = (value: unknown): value is AnyObject => {
5
5
  return isType(value, 'object')
6
6
  }