@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.
- package/LICENSE +840 -0
- package/README.md +69 -0
- package/dist/browser/AnyObject.d.cts +7 -0
- package/dist/browser/AnyObject.d.cts.map +1 -0
- package/dist/browser/AnyObject.d.mts +7 -0
- package/dist/browser/AnyObject.d.mts.map +1 -0
- package/dist/browser/AnyObject.d.ts +7 -0
- package/dist/browser/AnyObject.d.ts.map +1 -0
- package/dist/browser/AsObjectFactory.d.cts +8 -0
- package/dist/browser/AsObjectFactory.d.cts.map +1 -0
- package/dist/browser/AsObjectFactory.d.mts +8 -0
- package/dist/browser/AsObjectFactory.d.mts.map +1 -0
- package/dist/browser/AsObjectFactory.d.ts +8 -0
- package/dist/browser/AsObjectFactory.d.ts.map +1 -0
- package/dist/browser/AsTypeFactory.d.cts +12 -0
- package/dist/browser/AsTypeFactory.d.cts.map +1 -0
- package/dist/browser/AsTypeFactory.d.mts +12 -0
- package/dist/browser/AsTypeFactory.d.mts.map +1 -0
- package/dist/browser/AsTypeFactory.d.ts +12 -0
- package/dist/browser/AsTypeFactory.d.ts.map +1 -0
- package/dist/browser/Base.d.cts +13 -0
- package/dist/browser/Base.d.cts.map +1 -0
- package/dist/browser/Base.d.mts +13 -0
- package/dist/browser/Base.d.mts.map +1 -0
- package/dist/browser/Base.d.ts +13 -0
- package/dist/browser/Base.d.ts.map +1 -0
- package/dist/browser/EmptyObject.d.cts +9 -0
- package/dist/browser/EmptyObject.d.cts.map +1 -0
- package/dist/browser/EmptyObject.d.mts +9 -0
- package/dist/browser/EmptyObject.d.mts.map +1 -0
- package/dist/browser/EmptyObject.d.ts +9 -0
- package/dist/browser/EmptyObject.d.ts.map +1 -0
- package/dist/browser/IsObjectFactory.d.cts +10 -0
- package/dist/browser/IsObjectFactory.d.cts.map +1 -0
- package/dist/browser/IsObjectFactory.d.mts +10 -0
- package/dist/browser/IsObjectFactory.d.mts.map +1 -0
- package/dist/browser/IsObjectFactory.d.ts +10 -0
- package/dist/browser/IsObjectFactory.d.ts.map +1 -0
- package/dist/browser/JsonObject.d.cts +6 -0
- package/dist/browser/JsonObject.d.cts.map +1 -0
- package/dist/browser/JsonObject.d.mts +6 -0
- package/dist/browser/JsonObject.d.mts.map +1 -0
- package/dist/browser/JsonObject.d.ts +6 -0
- package/dist/browser/JsonObject.d.ts.map +1 -0
- package/dist/browser/ObjectWrapper.d.cts +8 -0
- package/dist/browser/ObjectWrapper.d.cts.map +1 -0
- package/dist/browser/ObjectWrapper.d.mts +8 -0
- package/dist/browser/ObjectWrapper.d.mts.map +1 -0
- package/dist/browser/ObjectWrapper.d.ts +8 -0
- package/dist/browser/ObjectWrapper.d.ts.map +1 -0
- package/dist/browser/Override.d.cts +3 -0
- package/dist/browser/Override.d.cts.map +1 -0
- package/dist/browser/Override.d.mts +3 -0
- package/dist/browser/Override.d.mts.map +1 -0
- package/dist/browser/Override.d.ts +3 -0
- package/dist/browser/Override.d.ts.map +1 -0
- package/dist/browser/PartialRecord.d.cts +5 -0
- package/dist/browser/PartialRecord.d.cts.map +1 -0
- package/dist/browser/PartialRecord.d.mts +5 -0
- package/dist/browser/PartialRecord.d.mts.map +1 -0
- package/dist/browser/PartialRecord.d.ts +5 -0
- package/dist/browser/PartialRecord.d.ts.map +1 -0
- package/dist/browser/StringKeyObject.d.cts +4 -0
- package/dist/browser/StringKeyObject.d.cts.map +1 -0
- package/dist/browser/StringKeyObject.d.mts +4 -0
- package/dist/browser/StringKeyObject.d.mts.map +1 -0
- package/dist/browser/StringKeyObject.d.ts +4 -0
- package/dist/browser/StringKeyObject.d.ts.map +1 -0
- package/dist/browser/Validator.d.cts +11 -0
- package/dist/browser/Validator.d.cts.map +1 -0
- package/dist/browser/Validator.d.mts +11 -0
- package/dist/browser/Validator.d.mts.map +1 -0
- package/dist/browser/Validator.d.ts +11 -0
- package/dist/browser/Validator.d.ts.map +1 -0
- package/dist/browser/WithAdditional.d.cts +3 -0
- package/dist/browser/WithAdditional.d.cts.map +1 -0
- package/dist/browser/WithAdditional.d.mts +3 -0
- package/dist/browser/WithAdditional.d.mts.map +1 -0
- package/dist/browser/WithAdditional.d.ts +3 -0
- package/dist/browser/WithAdditional.d.ts.map +1 -0
- package/dist/browser/asObject.d.cts +6 -0
- package/dist/browser/asObject.d.cts.map +1 -0
- package/dist/browser/asObject.d.mts +6 -0
- package/dist/browser/asObject.d.mts.map +1 -0
- package/dist/browser/asObject.d.ts +6 -0
- package/dist/browser/asObject.d.ts.map +1 -0
- package/dist/browser/index.cjs +165 -0
- package/dist/browser/index.cjs.map +1 -0
- package/dist/browser/index.d.cts +17 -0
- package/dist/browser/index.d.cts.map +1 -0
- package/dist/browser/index.d.mts +17 -0
- package/dist/browser/index.d.mts.map +1 -0
- package/dist/browser/index.d.ts +17 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +144 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/isObject.d.cts +3 -0
- package/dist/browser/isObject.d.cts.map +1 -0
- package/dist/browser/isObject.d.mts +3 -0
- package/dist/browser/isObject.d.mts.map +1 -0
- package/dist/browser/isObject.d.ts +3 -0
- package/dist/browser/isObject.d.ts.map +1 -0
- package/dist/browser/isType.d.cts +4 -0
- package/dist/browser/isType.d.cts.map +1 -0
- package/dist/browser/isType.d.mts +4 -0
- package/dist/browser/isType.d.mts.map +1 -0
- package/dist/browser/isType.d.ts +4 -0
- package/dist/browser/isType.d.ts.map +1 -0
- package/dist/node/AnyObject.d.cts +7 -0
- package/dist/node/AnyObject.d.cts.map +1 -0
- package/dist/node/AnyObject.d.mts +7 -0
- package/dist/node/AnyObject.d.mts.map +1 -0
- package/dist/node/AnyObject.d.ts +7 -0
- package/dist/node/AnyObject.d.ts.map +1 -0
- package/dist/node/AsObjectFactory.d.cts +8 -0
- package/dist/node/AsObjectFactory.d.cts.map +1 -0
- package/dist/node/AsObjectFactory.d.mts +8 -0
- package/dist/node/AsObjectFactory.d.mts.map +1 -0
- package/dist/node/AsObjectFactory.d.ts +8 -0
- package/dist/node/AsObjectFactory.d.ts.map +1 -0
- package/dist/node/AsTypeFactory.d.cts +12 -0
- package/dist/node/AsTypeFactory.d.cts.map +1 -0
- package/dist/node/AsTypeFactory.d.mts +12 -0
- package/dist/node/AsTypeFactory.d.mts.map +1 -0
- package/dist/node/AsTypeFactory.d.ts +12 -0
- package/dist/node/AsTypeFactory.d.ts.map +1 -0
- package/dist/node/Base.d.cts +13 -0
- package/dist/node/Base.d.cts.map +1 -0
- package/dist/node/Base.d.mts +13 -0
- package/dist/node/Base.d.mts.map +1 -0
- package/dist/node/Base.d.ts +13 -0
- package/dist/node/Base.d.ts.map +1 -0
- package/dist/node/EmptyObject.d.cts +9 -0
- package/dist/node/EmptyObject.d.cts.map +1 -0
- package/dist/node/EmptyObject.d.mts +9 -0
- package/dist/node/EmptyObject.d.mts.map +1 -0
- package/dist/node/EmptyObject.d.ts +9 -0
- package/dist/node/EmptyObject.d.ts.map +1 -0
- package/dist/node/IsObjectFactory.d.cts +10 -0
- package/dist/node/IsObjectFactory.d.cts.map +1 -0
- package/dist/node/IsObjectFactory.d.mts +10 -0
- package/dist/node/IsObjectFactory.d.mts.map +1 -0
- package/dist/node/IsObjectFactory.d.ts +10 -0
- package/dist/node/IsObjectFactory.d.ts.map +1 -0
- package/dist/node/JsonObject.d.cts +6 -0
- package/dist/node/JsonObject.d.cts.map +1 -0
- package/dist/node/JsonObject.d.mts +6 -0
- package/dist/node/JsonObject.d.mts.map +1 -0
- package/dist/node/JsonObject.d.ts +6 -0
- package/dist/node/JsonObject.d.ts.map +1 -0
- package/dist/node/ObjectWrapper.d.cts +8 -0
- package/dist/node/ObjectWrapper.d.cts.map +1 -0
- package/dist/node/ObjectWrapper.d.mts +8 -0
- package/dist/node/ObjectWrapper.d.mts.map +1 -0
- package/dist/node/ObjectWrapper.d.ts +8 -0
- package/dist/node/ObjectWrapper.d.ts.map +1 -0
- package/dist/node/Override.d.cts +3 -0
- package/dist/node/Override.d.cts.map +1 -0
- package/dist/node/Override.d.mts +3 -0
- package/dist/node/Override.d.mts.map +1 -0
- package/dist/node/Override.d.ts +3 -0
- package/dist/node/Override.d.ts.map +1 -0
- package/dist/node/PartialRecord.d.cts +5 -0
- package/dist/node/PartialRecord.d.cts.map +1 -0
- package/dist/node/PartialRecord.d.mts +5 -0
- package/dist/node/PartialRecord.d.mts.map +1 -0
- package/dist/node/PartialRecord.d.ts +5 -0
- package/dist/node/PartialRecord.d.ts.map +1 -0
- package/dist/node/StringKeyObject.d.cts +4 -0
- package/dist/node/StringKeyObject.d.cts.map +1 -0
- package/dist/node/StringKeyObject.d.mts +4 -0
- package/dist/node/StringKeyObject.d.mts.map +1 -0
- package/dist/node/StringKeyObject.d.ts +4 -0
- package/dist/node/StringKeyObject.d.ts.map +1 -0
- package/dist/node/Validator.d.cts +11 -0
- package/dist/node/Validator.d.cts.map +1 -0
- package/dist/node/Validator.d.mts +11 -0
- package/dist/node/Validator.d.mts.map +1 -0
- package/dist/node/Validator.d.ts +11 -0
- package/dist/node/Validator.d.ts.map +1 -0
- package/dist/node/WithAdditional.d.cts +3 -0
- package/dist/node/WithAdditional.d.cts.map +1 -0
- package/dist/node/WithAdditional.d.mts +3 -0
- package/dist/node/WithAdditional.d.mts.map +1 -0
- package/dist/node/WithAdditional.d.ts +3 -0
- package/dist/node/WithAdditional.d.ts.map +1 -0
- package/dist/node/asObject.d.cts +6 -0
- package/dist/node/asObject.d.cts.map +1 -0
- package/dist/node/asObject.d.mts +6 -0
- package/dist/node/asObject.d.mts.map +1 -0
- package/dist/node/asObject.d.ts +6 -0
- package/dist/node/asObject.d.ts.map +1 -0
- package/dist/node/index.cjs +180 -0
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.d.cts +17 -0
- package/dist/node/index.d.cts.map +1 -0
- package/dist/node/index.d.mts +17 -0
- package/dist/node/index.d.mts.map +1 -0
- package/dist/node/index.d.ts +17 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +147 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/isObject.d.cts +3 -0
- package/dist/node/isObject.d.cts.map +1 -0
- package/dist/node/isObject.d.mts +3 -0
- package/dist/node/isObject.d.mts.map +1 -0
- package/dist/node/isObject.d.ts +3 -0
- package/dist/node/isObject.d.ts.map +1 -0
- package/dist/node/isType.d.cts +4 -0
- package/dist/node/isType.d.cts.map +1 -0
- package/dist/node/isType.d.mts +4 -0
- package/dist/node/isType.d.mts.map +1 -0
- package/dist/node/isType.d.ts +4 -0
- package/dist/node/isType.d.ts.map +1 -0
- package/package.json +63 -0
- package/src/AnyObject.ts +7 -0
- package/src/AsObjectFactory.ts +8 -0
- package/src/AsTypeFactory.ts +52 -0
- package/src/Base.ts +23 -0
- package/src/EmptyObject.ts +8 -0
- package/src/IsObjectFactory.ts +30 -0
- package/src/JsonObject.ts +3 -0
- package/src/ObjectWrapper.ts +12 -0
- package/src/Override.ts +3 -0
- package/src/PartialRecord.ts +6 -0
- package/src/StringKeyObject.ts +1 -0
- package/src/Validator.ts +13 -0
- package/src/WithAdditional.ts +5 -0
- package/src/asObject.ts +5 -0
- package/src/index.ts +16 -0
- package/src/isObject.ts +6 -0
- package/src/isType.ts +31 -0
- 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,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
|
+
}
|
package/src/Override.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type StringKeyObject = { [key: string]: unknown }
|
package/src/Validator.ts
ADDED
|
@@ -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
|
+
}
|
package/src/asObject.ts
ADDED
|
@@ -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'
|
package/src/isObject.ts
ADDED
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
|
+
}
|