@xylabs/object 2.88.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 (233) hide show
  1. package/LICENSE +840 -0
  2. package/README.md +69 -0
  3. package/dist/browser/AnyObject.d.cts +7 -0
  4. package/dist/browser/AnyObject.d.cts.map +1 -0
  5. package/dist/browser/AnyObject.d.mts +7 -0
  6. package/dist/browser/AnyObject.d.mts.map +1 -0
  7. package/dist/browser/AnyObject.d.ts +7 -0
  8. package/dist/browser/AnyObject.d.ts.map +1 -0
  9. package/dist/browser/AsObjectFactory.d.cts +8 -0
  10. package/dist/browser/AsObjectFactory.d.cts.map +1 -0
  11. package/dist/browser/AsObjectFactory.d.mts +8 -0
  12. package/dist/browser/AsObjectFactory.d.mts.map +1 -0
  13. package/dist/browser/AsObjectFactory.d.ts +8 -0
  14. package/dist/browser/AsObjectFactory.d.ts.map +1 -0
  15. package/dist/browser/AsTypeFactory.d.cts +12 -0
  16. package/dist/browser/AsTypeFactory.d.cts.map +1 -0
  17. package/dist/browser/AsTypeFactory.d.mts +12 -0
  18. package/dist/browser/AsTypeFactory.d.mts.map +1 -0
  19. package/dist/browser/AsTypeFactory.d.ts +12 -0
  20. package/dist/browser/AsTypeFactory.d.ts.map +1 -0
  21. package/dist/browser/Base.d.cts +13 -0
  22. package/dist/browser/Base.d.cts.map +1 -0
  23. package/dist/browser/Base.d.mts +13 -0
  24. package/dist/browser/Base.d.mts.map +1 -0
  25. package/dist/browser/Base.d.ts +13 -0
  26. package/dist/browser/Base.d.ts.map +1 -0
  27. package/dist/browser/EmptyObject.d.cts +9 -0
  28. package/dist/browser/EmptyObject.d.cts.map +1 -0
  29. package/dist/browser/EmptyObject.d.mts +9 -0
  30. package/dist/browser/EmptyObject.d.mts.map +1 -0
  31. package/dist/browser/EmptyObject.d.ts +9 -0
  32. package/dist/browser/EmptyObject.d.ts.map +1 -0
  33. package/dist/browser/IsObjectFactory.d.cts +10 -0
  34. package/dist/browser/IsObjectFactory.d.cts.map +1 -0
  35. package/dist/browser/IsObjectFactory.d.mts +10 -0
  36. package/dist/browser/IsObjectFactory.d.mts.map +1 -0
  37. package/dist/browser/IsObjectFactory.d.ts +10 -0
  38. package/dist/browser/IsObjectFactory.d.ts.map +1 -0
  39. package/dist/browser/JsonObject.d.cts +6 -0
  40. package/dist/browser/JsonObject.d.cts.map +1 -0
  41. package/dist/browser/JsonObject.d.mts +6 -0
  42. package/dist/browser/JsonObject.d.mts.map +1 -0
  43. package/dist/browser/JsonObject.d.ts +6 -0
  44. package/dist/browser/JsonObject.d.ts.map +1 -0
  45. package/dist/browser/ObjectWrapper.d.cts +8 -0
  46. package/dist/browser/ObjectWrapper.d.cts.map +1 -0
  47. package/dist/browser/ObjectWrapper.d.mts +8 -0
  48. package/dist/browser/ObjectWrapper.d.mts.map +1 -0
  49. package/dist/browser/ObjectWrapper.d.ts +8 -0
  50. package/dist/browser/ObjectWrapper.d.ts.map +1 -0
  51. package/dist/browser/Override.d.cts +3 -0
  52. package/dist/browser/Override.d.cts.map +1 -0
  53. package/dist/browser/Override.d.mts +3 -0
  54. package/dist/browser/Override.d.mts.map +1 -0
  55. package/dist/browser/Override.d.ts +3 -0
  56. package/dist/browser/Override.d.ts.map +1 -0
  57. package/dist/browser/PartialRecord.d.cts +5 -0
  58. package/dist/browser/PartialRecord.d.cts.map +1 -0
  59. package/dist/browser/PartialRecord.d.mts +5 -0
  60. package/dist/browser/PartialRecord.d.mts.map +1 -0
  61. package/dist/browser/PartialRecord.d.ts +5 -0
  62. package/dist/browser/PartialRecord.d.ts.map +1 -0
  63. package/dist/browser/StringKeyObject.d.cts +4 -0
  64. package/dist/browser/StringKeyObject.d.cts.map +1 -0
  65. package/dist/browser/StringKeyObject.d.mts +4 -0
  66. package/dist/browser/StringKeyObject.d.mts.map +1 -0
  67. package/dist/browser/StringKeyObject.d.ts +4 -0
  68. package/dist/browser/StringKeyObject.d.ts.map +1 -0
  69. package/dist/browser/Validator.d.cts +11 -0
  70. package/dist/browser/Validator.d.cts.map +1 -0
  71. package/dist/browser/Validator.d.mts +11 -0
  72. package/dist/browser/Validator.d.mts.map +1 -0
  73. package/dist/browser/Validator.d.ts +11 -0
  74. package/dist/browser/Validator.d.ts.map +1 -0
  75. package/dist/browser/WithAdditional.d.cts +3 -0
  76. package/dist/browser/WithAdditional.d.cts.map +1 -0
  77. package/dist/browser/WithAdditional.d.mts +3 -0
  78. package/dist/browser/WithAdditional.d.mts.map +1 -0
  79. package/dist/browser/WithAdditional.d.ts +3 -0
  80. package/dist/browser/WithAdditional.d.ts.map +1 -0
  81. package/dist/browser/asObject.d.cts +6 -0
  82. package/dist/browser/asObject.d.cts.map +1 -0
  83. package/dist/browser/asObject.d.mts +6 -0
  84. package/dist/browser/asObject.d.mts.map +1 -0
  85. package/dist/browser/asObject.d.ts +6 -0
  86. package/dist/browser/asObject.d.ts.map +1 -0
  87. package/dist/browser/index.cjs +165 -0
  88. package/dist/browser/index.cjs.map +1 -0
  89. package/dist/browser/index.d.cts +17 -0
  90. package/dist/browser/index.d.cts.map +1 -0
  91. package/dist/browser/index.d.mts +17 -0
  92. package/dist/browser/index.d.mts.map +1 -0
  93. package/dist/browser/index.d.ts +17 -0
  94. package/dist/browser/index.d.ts.map +1 -0
  95. package/dist/browser/index.js +144 -0
  96. package/dist/browser/index.js.map +1 -0
  97. package/dist/browser/isObject.d.cts +3 -0
  98. package/dist/browser/isObject.d.cts.map +1 -0
  99. package/dist/browser/isObject.d.mts +3 -0
  100. package/dist/browser/isObject.d.mts.map +1 -0
  101. package/dist/browser/isObject.d.ts +3 -0
  102. package/dist/browser/isObject.d.ts.map +1 -0
  103. package/dist/browser/isType.d.cts +4 -0
  104. package/dist/browser/isType.d.cts.map +1 -0
  105. package/dist/browser/isType.d.mts +4 -0
  106. package/dist/browser/isType.d.mts.map +1 -0
  107. package/dist/browser/isType.d.ts +4 -0
  108. package/dist/browser/isType.d.ts.map +1 -0
  109. package/dist/node/AnyObject.d.cts +7 -0
  110. package/dist/node/AnyObject.d.cts.map +1 -0
  111. package/dist/node/AnyObject.d.mts +7 -0
  112. package/dist/node/AnyObject.d.mts.map +1 -0
  113. package/dist/node/AnyObject.d.ts +7 -0
  114. package/dist/node/AnyObject.d.ts.map +1 -0
  115. package/dist/node/AsObjectFactory.d.cts +8 -0
  116. package/dist/node/AsObjectFactory.d.cts.map +1 -0
  117. package/dist/node/AsObjectFactory.d.mts +8 -0
  118. package/dist/node/AsObjectFactory.d.mts.map +1 -0
  119. package/dist/node/AsObjectFactory.d.ts +8 -0
  120. package/dist/node/AsObjectFactory.d.ts.map +1 -0
  121. package/dist/node/AsTypeFactory.d.cts +12 -0
  122. package/dist/node/AsTypeFactory.d.cts.map +1 -0
  123. package/dist/node/AsTypeFactory.d.mts +12 -0
  124. package/dist/node/AsTypeFactory.d.mts.map +1 -0
  125. package/dist/node/AsTypeFactory.d.ts +12 -0
  126. package/dist/node/AsTypeFactory.d.ts.map +1 -0
  127. package/dist/node/Base.d.cts +13 -0
  128. package/dist/node/Base.d.cts.map +1 -0
  129. package/dist/node/Base.d.mts +13 -0
  130. package/dist/node/Base.d.mts.map +1 -0
  131. package/dist/node/Base.d.ts +13 -0
  132. package/dist/node/Base.d.ts.map +1 -0
  133. package/dist/node/EmptyObject.d.cts +9 -0
  134. package/dist/node/EmptyObject.d.cts.map +1 -0
  135. package/dist/node/EmptyObject.d.mts +9 -0
  136. package/dist/node/EmptyObject.d.mts.map +1 -0
  137. package/dist/node/EmptyObject.d.ts +9 -0
  138. package/dist/node/EmptyObject.d.ts.map +1 -0
  139. package/dist/node/IsObjectFactory.d.cts +10 -0
  140. package/dist/node/IsObjectFactory.d.cts.map +1 -0
  141. package/dist/node/IsObjectFactory.d.mts +10 -0
  142. package/dist/node/IsObjectFactory.d.mts.map +1 -0
  143. package/dist/node/IsObjectFactory.d.ts +10 -0
  144. package/dist/node/IsObjectFactory.d.ts.map +1 -0
  145. package/dist/node/JsonObject.d.cts +6 -0
  146. package/dist/node/JsonObject.d.cts.map +1 -0
  147. package/dist/node/JsonObject.d.mts +6 -0
  148. package/dist/node/JsonObject.d.mts.map +1 -0
  149. package/dist/node/JsonObject.d.ts +6 -0
  150. package/dist/node/JsonObject.d.ts.map +1 -0
  151. package/dist/node/ObjectWrapper.d.cts +8 -0
  152. package/dist/node/ObjectWrapper.d.cts.map +1 -0
  153. package/dist/node/ObjectWrapper.d.mts +8 -0
  154. package/dist/node/ObjectWrapper.d.mts.map +1 -0
  155. package/dist/node/ObjectWrapper.d.ts +8 -0
  156. package/dist/node/ObjectWrapper.d.ts.map +1 -0
  157. package/dist/node/Override.d.cts +3 -0
  158. package/dist/node/Override.d.cts.map +1 -0
  159. package/dist/node/Override.d.mts +3 -0
  160. package/dist/node/Override.d.mts.map +1 -0
  161. package/dist/node/Override.d.ts +3 -0
  162. package/dist/node/Override.d.ts.map +1 -0
  163. package/dist/node/PartialRecord.d.cts +5 -0
  164. package/dist/node/PartialRecord.d.cts.map +1 -0
  165. package/dist/node/PartialRecord.d.mts +5 -0
  166. package/dist/node/PartialRecord.d.mts.map +1 -0
  167. package/dist/node/PartialRecord.d.ts +5 -0
  168. package/dist/node/PartialRecord.d.ts.map +1 -0
  169. package/dist/node/StringKeyObject.d.cts +4 -0
  170. package/dist/node/StringKeyObject.d.cts.map +1 -0
  171. package/dist/node/StringKeyObject.d.mts +4 -0
  172. package/dist/node/StringKeyObject.d.mts.map +1 -0
  173. package/dist/node/StringKeyObject.d.ts +4 -0
  174. package/dist/node/StringKeyObject.d.ts.map +1 -0
  175. package/dist/node/Validator.d.cts +11 -0
  176. package/dist/node/Validator.d.cts.map +1 -0
  177. package/dist/node/Validator.d.mts +11 -0
  178. package/dist/node/Validator.d.mts.map +1 -0
  179. package/dist/node/Validator.d.ts +11 -0
  180. package/dist/node/Validator.d.ts.map +1 -0
  181. package/dist/node/WithAdditional.d.cts +3 -0
  182. package/dist/node/WithAdditional.d.cts.map +1 -0
  183. package/dist/node/WithAdditional.d.mts +3 -0
  184. package/dist/node/WithAdditional.d.mts.map +1 -0
  185. package/dist/node/WithAdditional.d.ts +3 -0
  186. package/dist/node/WithAdditional.d.ts.map +1 -0
  187. package/dist/node/asObject.d.cts +6 -0
  188. package/dist/node/asObject.d.cts.map +1 -0
  189. package/dist/node/asObject.d.mts +6 -0
  190. package/dist/node/asObject.d.mts.map +1 -0
  191. package/dist/node/asObject.d.ts +6 -0
  192. package/dist/node/asObject.d.ts.map +1 -0
  193. package/dist/node/index.cjs +180 -0
  194. package/dist/node/index.cjs.map +1 -0
  195. package/dist/node/index.d.cts +17 -0
  196. package/dist/node/index.d.cts.map +1 -0
  197. package/dist/node/index.d.mts +17 -0
  198. package/dist/node/index.d.mts.map +1 -0
  199. package/dist/node/index.d.ts +17 -0
  200. package/dist/node/index.d.ts.map +1 -0
  201. package/dist/node/index.js +147 -0
  202. package/dist/node/index.js.map +1 -0
  203. package/dist/node/isObject.d.cts +3 -0
  204. package/dist/node/isObject.d.cts.map +1 -0
  205. package/dist/node/isObject.d.mts +3 -0
  206. package/dist/node/isObject.d.mts.map +1 -0
  207. package/dist/node/isObject.d.ts +3 -0
  208. package/dist/node/isObject.d.ts.map +1 -0
  209. package/dist/node/isType.d.cts +4 -0
  210. package/dist/node/isType.d.cts.map +1 -0
  211. package/dist/node/isType.d.mts +4 -0
  212. package/dist/node/isType.d.mts.map +1 -0
  213. package/dist/node/isType.d.ts +4 -0
  214. package/dist/node/isType.d.ts.map +1 -0
  215. package/package.json +63 -0
  216. package/src/AnyObject.ts +7 -0
  217. package/src/AsObjectFactory.ts +8 -0
  218. package/src/AsTypeFactory.ts +52 -0
  219. package/src/Base.ts +23 -0
  220. package/src/EmptyObject.ts +8 -0
  221. package/src/IsObjectFactory.ts +30 -0
  222. package/src/JsonObject.ts +3 -0
  223. package/src/ObjectWrapper.ts +12 -0
  224. package/src/Override.ts +3 -0
  225. package/src/PartialRecord.ts +6 -0
  226. package/src/StringKeyObject.ts +1 -0
  227. package/src/Validator.ts +13 -0
  228. package/src/WithAdditional.ts +5 -0
  229. package/src/asObject.ts +5 -0
  230. package/src/index.ts +16 -0
  231. package/src/isObject.ts +6 -0
  232. package/src/isType.ts +31 -0
  233. package/typedoc.json +5 -0
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
22
+ }
23
+ }
@@ -0,0 +1,8 @@
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
@@ -0,0 +1,30 @@
1
+ import { AnyObject } from './AnyObject'
2
+ import { TypeCheck, TypeCheckConfig } from './AsTypeFactory'
3
+ import { EmptyObject } from './EmptyObject'
4
+ import { isType, ObjectTypeShape } from './isType'
5
+
6
+ export interface ObjectTypeConfig extends TypeCheckConfig {}
7
+
8
+ export class IsObjectFactory<T extends EmptyObject> {
9
+ create(shape?: ObjectTypeShape, additionalChecks?: TypeCheck<AnyObject | EmptyObject>[]): TypeCheck<T> {
10
+ return (obj, { log } = {}): obj is T => {
11
+ if (!obj || typeof obj !== 'object') {
12
+ return false
13
+ }
14
+ return (
15
+ //do primary check
16
+ Object.entries(shape ?? {}).filter(([key, type]) => {
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ const result = isType((obj as any)[key], type)
19
+ if (!result && log) {
20
+ const logger = typeof log === 'object' ? log : console
21
+ logger.warn(`isType Failed: ${key}: ${type}`)
22
+ }
23
+ return !result
24
+ }).length === 0 &&
25
+ //perform additional checks
26
+ (additionalChecks?.reduce((prev, check) => prev && check(obj, { log }), true) ?? true)
27
+ )
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,3 @@
1
+ export type JsonValue = string | number | boolean | null | JsonObject | JsonArray
2
+ export type JsonObject = { [key: string]: JsonValue }
3
+ export type JsonArray = JsonValue[]
@@ -0,0 +1,12 @@
1
+ import { EmptyObject } from './EmptyObject'
2
+ import { StringKeyObject } from './StringKeyObject'
3
+
4
+ export abstract class ObjectWrapper<T extends EmptyObject = EmptyObject> {
5
+ readonly obj: T
6
+ constructor(obj: T) {
7
+ this.obj = obj
8
+ }
9
+ protected get stringKeyObj() {
10
+ return this.obj as StringKeyObject
11
+ }
12
+ }
@@ -0,0 +1,3 @@
1
+ type Override<T1, T2> = Omit<T1, keyof T2> & T2
2
+
3
+ export type { Override }
@@ -0,0 +1,6 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
3
+ /** @deprecated use Partial<Record<>> instead */
4
+ export type PartialRecord<K extends keyof any, T> = {
5
+ [P in K]?: T
6
+ }
@@ -0,0 +1 @@
1
+ export type StringKeyObject = { [key: string]: unknown }
@@ -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
+ }
@@ -0,0 +1,5 @@
1
+ import { EmptyObject } from './EmptyObject'
2
+
3
+ export type WithAdditional<T extends EmptyObject | void, TAdditional extends EmptyObject | void = void> = TAdditional extends EmptyObject
4
+ ? T & TAdditional
5
+ : T
@@ -0,0 +1,5 @@
1
+ import { AnyObject } from './AnyObject'
2
+ import { AsObjectFactory } from './AsObjectFactory'
3
+ import { isObject } from './isObject'
4
+
5
+ export const asAnyObject = (() => AsObjectFactory.create<AnyObject>(<T extends AnyObject>(obj: unknown): obj is T => isObject(obj)))()
package/src/index.ts ADDED
@@ -0,0 +1,16 @@
1
+ export * from './AnyObject'
2
+ export * from './asObject'
3
+ export * from './AsObjectFactory'
4
+ export * from './AsTypeFactory'
5
+ export * from './Base'
6
+ export * from './EmptyObject'
7
+ export * from './isObject'
8
+ export * from './IsObjectFactory'
9
+ export * from './isType'
10
+ export * from './JsonObject'
11
+ export * from './ObjectWrapper'
12
+ export * from './Override'
13
+ export * from './PartialRecord'
14
+ export * from './StringKeyObject'
15
+ export * from './Validator'
16
+ export * from './WithAdditional'
@@ -0,0 +1,6 @@
1
+ import { AnyObject } from './AnyObject'
2
+ import { isType } from './isType'
3
+
4
+ export const isObject = (value: unknown): value is AnyObject => {
5
+ return isType(value, 'object')
6
+ }
package/src/isType.ts ADDED
@@ -0,0 +1,31 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+
3
+ export type FieldType = 'string' | 'number' | 'object' | 'symbol' | 'symbol' | 'undefined' | 'null' | 'array' | 'function'
4
+
5
+ export type ObjectTypeShape = Record<string | number | symbol, FieldType>
6
+
7
+ export const isType = (value: unknown, expectedType: FieldType) => {
8
+ const typeofValue = typeof value
9
+ switch (expectedType) {
10
+ case 'array': {
11
+ return Array.isArray(value)
12
+ }
13
+ case 'null': {
14
+ return value === null
15
+ }
16
+ case 'undefined': {
17
+ return value === undefined
18
+ }
19
+ case 'object': {
20
+ //nulls resolve to objects, so exclude them
21
+ if (value === null) {
22
+ return false
23
+ }
24
+ //arrays resolve to objects, so exclude them
25
+ return typeofValue === 'object' && !Array.isArray(value)
26
+ }
27
+ default: {
28
+ return typeofValue === expectedType
29
+ }
30
+ }
31
+ }
package/typedoc.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "$schema": "https://typedoc.org/schema.json",
3
+ "entryPoints": ["./src/index.ts"],
4
+ "tsconfig": "./tsconfig.typedoc.json"
5
+ }