@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.
- package/dist/browser/AnyObject.d.cts +6 -1
- package/dist/browser/AnyObject.d.cts.map +1 -1
- package/dist/browser/AnyObject.d.mts +6 -1
- package/dist/browser/AnyObject.d.mts.map +1 -1
- package/dist/browser/AnyObject.d.ts +6 -1
- package/dist/browser/AnyObject.d.ts.map +1 -1
- package/dist/browser/AsObjectFactory.d.cts +4 -4
- package/dist/browser/AsObjectFactory.d.cts.map +1 -1
- package/dist/browser/AsObjectFactory.d.mts +4 -4
- package/dist/browser/AsObjectFactory.d.mts.map +1 -1
- package/dist/browser/AsObjectFactory.d.ts +4 -4
- package/dist/browser/AsObjectFactory.d.ts.map +1 -1
- 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 +7 -2
- package/dist/browser/EmptyObject.d.cts.map +1 -1
- package/dist/browser/EmptyObject.d.mts +7 -2
- package/dist/browser/EmptyObject.d.mts.map +1 -1
- package/dist/browser/EmptyObject.d.ts +7 -2
- package/dist/browser/EmptyObject.d.ts.map +1 -1
- package/dist/browser/IsObjectFactory.d.cts +6 -6
- package/dist/browser/IsObjectFactory.d.cts.map +1 -1
- package/dist/browser/IsObjectFactory.d.mts +6 -6
- package/dist/browser/IsObjectFactory.d.mts.map +1 -1
- package/dist/browser/IsObjectFactory.d.ts +6 -6
- package/dist/browser/IsObjectFactory.d.ts.map +1 -1
- 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 +2 -2
- package/dist/browser/WithAdditional.d.cts.map +1 -1
- package/dist/browser/WithAdditional.d.mts +2 -2
- package/dist/browser/WithAdditional.d.mts.map +1 -1
- package/dist/browser/WithAdditional.d.ts +2 -2
- package/dist/browser/WithAdditional.d.ts.map +1 -1
- package/dist/browser/asObject.d.cts +4 -3
- package/dist/browser/asObject.d.cts.map +1 -1
- package/dist/browser/asObject.d.mts +4 -3
- package/dist/browser/asObject.d.mts.map +1 -1
- package/dist/browser/asObject.d.ts +4 -3
- package/dist/browser/asObject.d.ts.map +1 -1
- package/dist/browser/index.cjs +35 -9
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.d.cts +3 -0
- package/dist/browser/index.d.cts.map +1 -1
- package/dist/browser/index.d.mts +3 -0
- package/dist/browser/index.d.mts.map +1 -1
- package/dist/browser/index.d.ts +3 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +35 -9
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/isObject.d.cts +2 -1
- package/dist/browser/isObject.d.cts.map +1 -1
- package/dist/browser/isObject.d.mts +2 -1
- package/dist/browser/isObject.d.mts.map +1 -1
- package/dist/browser/isObject.d.ts +2 -1
- package/dist/browser/isObject.d.ts.map +1 -1
- package/dist/node/AnyObject.d.cts +6 -1
- package/dist/node/AnyObject.d.cts.map +1 -1
- package/dist/node/AnyObject.d.mts +6 -1
- package/dist/node/AnyObject.d.mts.map +1 -1
- package/dist/node/AnyObject.d.ts +6 -1
- package/dist/node/AnyObject.d.ts.map +1 -1
- package/dist/node/AsObjectFactory.d.cts +4 -4
- package/dist/node/AsObjectFactory.d.cts.map +1 -1
- package/dist/node/AsObjectFactory.d.mts +4 -4
- package/dist/node/AsObjectFactory.d.mts.map +1 -1
- package/dist/node/AsObjectFactory.d.ts +4 -4
- package/dist/node/AsObjectFactory.d.ts.map +1 -1
- 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 +7 -2
- package/dist/node/EmptyObject.d.cts.map +1 -1
- package/dist/node/EmptyObject.d.mts +7 -2
- package/dist/node/EmptyObject.d.mts.map +1 -1
- package/dist/node/EmptyObject.d.ts +7 -2
- package/dist/node/EmptyObject.d.ts.map +1 -1
- package/dist/node/IsObjectFactory.d.cts +6 -6
- package/dist/node/IsObjectFactory.d.cts.map +1 -1
- package/dist/node/IsObjectFactory.d.mts +6 -6
- package/dist/node/IsObjectFactory.d.mts.map +1 -1
- package/dist/node/IsObjectFactory.d.ts +6 -6
- package/dist/node/IsObjectFactory.d.ts.map +1 -1
- 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 +2 -2
- package/dist/node/WithAdditional.d.cts.map +1 -1
- package/dist/node/WithAdditional.d.mts +2 -2
- package/dist/node/WithAdditional.d.mts.map +1 -1
- package/dist/node/WithAdditional.d.ts +2 -2
- package/dist/node/WithAdditional.d.ts.map +1 -1
- package/dist/node/asObject.d.cts +4 -3
- package/dist/node/asObject.d.cts.map +1 -1
- package/dist/node/asObject.d.mts +4 -3
- package/dist/node/asObject.d.mts.map +1 -1
- package/dist/node/asObject.d.ts +4 -3
- package/dist/node/asObject.d.ts.map +1 -1
- package/dist/node/index.cjs +41 -10
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +3 -0
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.mts +3 -0
- package/dist/node/index.d.mts.map +1 -1
- package/dist/node/index.d.ts +3 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +37 -9
- package/dist/node/index.js.map +1 -1
- package/dist/node/isObject.d.cts +2 -1
- package/dist/node/isObject.d.cts.map +1 -1
- package/dist/node/isObject.d.mts +2 -1
- package/dist/node/isObject.d.mts.map +1 -1
- package/dist/node/isObject.d.ts +2 -1
- package/dist/node/isObject.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/AnyObject.ts +7 -2
- package/src/AsObjectFactory.ts +4 -45
- package/src/AsTypeFactory.ts +54 -0
- package/src/Base.ts +23 -0
- package/src/EmptyObject.ts +8 -1
- package/src/IsObjectFactory.ts +8 -12
- package/src/Validator.ts +13 -0
- package/src/WithAdditional.ts +4 -2
- package/src/asObject.ts +2 -2
- package/src/index.ts +3 -0
- package/src/isObject.ts +2 -2
package/src/AsObjectFactory.ts
CHANGED
|
@@ -1,49 +1,8 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
7
|
-
|
|
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
|
+
}
|
package/src/EmptyObject.ts
CHANGED
|
@@ -1 +1,8 @@
|
|
|
1
|
-
|
|
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
|
package/src/IsObjectFactory.ts
CHANGED
|
@@ -1,17 +1,12 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
13
|
-
|
|
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
|
-
|
|
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}`)
|
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/WithAdditional.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EmptyObject } from './EmptyObject'
|
|
2
2
|
|
|
3
|
-
export type WithAdditional<T extends
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|