@xylabs/object-model 5.0.79 → 5.0.81
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/README.md +36 -16
- package/package.json +7 -10
- package/src/AnyObject.ts +0 -9
- package/src/AsTypeFactory.ts +0 -55
- package/src/AsTypeFunction.ts +0 -19
- package/src/Compare.ts +0 -2
- package/src/EmptyObject.ts +0 -29
- package/src/index.ts +0 -5
- package/src/types.ts +0 -24
package/README.md
CHANGED
|
@@ -33,6 +33,7 @@ Base functionality used throughout XY Labs TypeScript/JavaScript libraries
|
|
|
33
33
|
- [AsTypeFunction](#type-aliases/AsTypeFunction)
|
|
34
34
|
- [AsOptionalTypeFunction](#type-aliases/AsOptionalTypeFunction)
|
|
35
35
|
- [Compare](#type-aliases/Compare)
|
|
36
|
+
- [EmptyObject](#type-aliases/EmptyObject)
|
|
36
37
|
- [StringOrAlertFunction](#type-aliases/StringOrAlertFunction)
|
|
37
38
|
- [TypeCheck](#type-aliases/TypeCheck)
|
|
38
39
|
|
|
@@ -126,7 +127,7 @@ required: true;
|
|
|
126
127
|
***
|
|
127
128
|
|
|
128
129
|
```ts
|
|
129
|
-
type AnyObject = Record<TypedKey, unknown
|
|
130
|
+
type AnyObject = EmptyObject & Partial<Record<TypedKey, unknown>>;
|
|
130
131
|
```
|
|
131
132
|
|
|
132
133
|
Any object, which means that it does not enforce the set of fields that it has. Extending from AnyObject
|
|
@@ -139,7 +140,7 @@ will result in a type that includes the universal set of field names
|
|
|
139
140
|
***
|
|
140
141
|
|
|
141
142
|
```ts
|
|
142
|
-
type AsOptionalTypeFunction<T> = <TType>(value) =>
|
|
143
|
+
type AsOptionalTypeFunction<T> = <TType>(value) => TType | undefined;
|
|
143
144
|
```
|
|
144
145
|
|
|
145
146
|
## Type Parameters
|
|
@@ -162,7 +163,7 @@ type AsOptionalTypeFunction<T> = <TType>(value) => undefined | TType;
|
|
|
162
163
|
|
|
163
164
|
## Returns
|
|
164
165
|
|
|
165
|
-
`
|
|
166
|
+
`TType` \| `undefined`
|
|
166
167
|
|
|
167
168
|
### <a id="AsTypeFunction"></a>AsTypeFunction
|
|
168
169
|
|
|
@@ -172,12 +173,12 @@ type AsOptionalTypeFunction<T> = <TType>(value) => undefined | TType;
|
|
|
172
173
|
|
|
173
174
|
```ts
|
|
174
175
|
type AsTypeFunction<T> = {
|
|
175
|
-
<TType> (value):
|
|
176
|
+
<TType> (value): TType | undefined;
|
|
176
177
|
<TType> (value, config): TType;
|
|
177
|
-
<TType> (value, config):
|
|
178
|
-
<TType> (value, assert):
|
|
178
|
+
<TType> (value, config): TType | undefined;
|
|
179
|
+
<TType> (value, assert): TType | undefined;
|
|
179
180
|
<TType> (value, assert, config): TType;
|
|
180
|
-
<TType> (value, assert, config):
|
|
181
|
+
<TType> (value, assert, config): TType | undefined;
|
|
181
182
|
};
|
|
182
183
|
```
|
|
183
184
|
|
|
@@ -190,7 +191,7 @@ type AsTypeFunction<T> = {
|
|
|
190
191
|
## Call Signature
|
|
191
192
|
|
|
192
193
|
```ts
|
|
193
|
-
<TType>(value):
|
|
194
|
+
<TType>(value): TType | undefined;
|
|
194
195
|
```
|
|
195
196
|
|
|
196
197
|
### Type Parameters
|
|
@@ -207,7 +208,7 @@ type AsTypeFunction<T> = {
|
|
|
207
208
|
|
|
208
209
|
### Returns
|
|
209
210
|
|
|
210
|
-
`
|
|
211
|
+
`TType` \| `undefined`
|
|
211
212
|
|
|
212
213
|
## Call Signature
|
|
213
214
|
|
|
@@ -238,7 +239,7 @@ type AsTypeFunction<T> = {
|
|
|
238
239
|
## Call Signature
|
|
239
240
|
|
|
240
241
|
```ts
|
|
241
|
-
<TType>(value, config):
|
|
242
|
+
<TType>(value, config): TType | undefined;
|
|
242
243
|
```
|
|
243
244
|
|
|
244
245
|
### Type Parameters
|
|
@@ -259,12 +260,12 @@ type AsTypeFunction<T> = {
|
|
|
259
260
|
|
|
260
261
|
### Returns
|
|
261
262
|
|
|
262
|
-
`
|
|
263
|
+
`TType` \| `undefined`
|
|
263
264
|
|
|
264
265
|
## Call Signature
|
|
265
266
|
|
|
266
267
|
```ts
|
|
267
|
-
<TType>(value, assert):
|
|
268
|
+
<TType>(value, assert): TType | undefined;
|
|
268
269
|
```
|
|
269
270
|
|
|
270
271
|
### Type Parameters
|
|
@@ -285,7 +286,7 @@ type AsTypeFunction<T> = {
|
|
|
285
286
|
|
|
286
287
|
### Returns
|
|
287
288
|
|
|
288
|
-
`
|
|
289
|
+
`TType` \| `undefined`
|
|
289
290
|
|
|
290
291
|
## Call Signature
|
|
291
292
|
|
|
@@ -326,7 +327,7 @@ type AsTypeFunction<T> = {
|
|
|
326
327
|
<TType>(
|
|
327
328
|
value,
|
|
328
329
|
assert,
|
|
329
|
-
config):
|
|
330
|
+
config): TType | undefined;
|
|
330
331
|
```
|
|
331
332
|
|
|
332
333
|
### Type Parameters
|
|
@@ -351,7 +352,7 @@ type AsTypeFunction<T> = {
|
|
|
351
352
|
|
|
352
353
|
### Returns
|
|
353
354
|
|
|
354
|
-
`
|
|
355
|
+
`TType` \| `undefined`
|
|
355
356
|
|
|
356
357
|
### <a id="Compare"></a>Compare
|
|
357
358
|
|
|
@@ -383,6 +384,25 @@ type Compare<T> = (a, b) => number;
|
|
|
383
384
|
|
|
384
385
|
`number`
|
|
385
386
|
|
|
387
|
+
### <a id="EmptyObject"></a>EmptyObject
|
|
388
|
+
|
|
389
|
+
[**@xylabs/object-model**](#../README)
|
|
390
|
+
|
|
391
|
+
***
|
|
392
|
+
|
|
393
|
+
```ts
|
|
394
|
+
type EmptyObject<T> = Exclude<{ [K in keyof T]?: never }, unknown[] | (...args) => unknown | null>;
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
An empty object, which means that it does enforce the set of field names, defaulting to an empty set until
|
|
398
|
+
extended from, which then adds only those additional fields
|
|
399
|
+
|
|
400
|
+
## Type Parameters
|
|
401
|
+
|
|
402
|
+
### T
|
|
403
|
+
|
|
404
|
+
`T` *extends* `object` = `object`
|
|
405
|
+
|
|
386
406
|
### <a id="StringOrAlertFunction"></a>StringOrAlertFunction
|
|
387
407
|
|
|
388
408
|
[**@xylabs/object-model**](#../README)
|
|
@@ -469,7 +489,7 @@ type TypeCheck<T> = {
|
|
|
469
489
|
|
|
470
490
|
### config
|
|
471
491
|
|
|
472
|
-
`
|
|
492
|
+
`number` | [`TypeCheckConfig`](#../interfaces/TypeCheckConfig) | `undefined`
|
|
473
493
|
|
|
474
494
|
### Returns
|
|
475
495
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xylabs/object-model",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.81",
|
|
4
4
|
"description": "Base functionality used throughout XY Labs TypeScript/JavaScript libraries",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -22,30 +22,27 @@
|
|
|
22
22
|
"exports": {
|
|
23
23
|
".": {
|
|
24
24
|
"types": "./dist/neutral/index.d.ts",
|
|
25
|
-
"source": "./src/index.ts",
|
|
26
25
|
"default": "./dist/neutral/index.mjs"
|
|
27
26
|
},
|
|
28
27
|
"./package.json": "./package.json"
|
|
29
28
|
},
|
|
30
29
|
"module": "./dist/neutral/index.mjs",
|
|
31
|
-
"source": "./src/index.ts",
|
|
32
30
|
"types": "./dist/neutral/index.d.ts",
|
|
33
31
|
"files": [
|
|
34
32
|
"dist",
|
|
35
|
-
"src",
|
|
36
33
|
"!**/*.bench.*",
|
|
37
34
|
"!**/*.spec.*",
|
|
38
35
|
"!**/*.test.*"
|
|
39
36
|
],
|
|
40
37
|
"dependencies": {
|
|
41
|
-
"@xylabs/assert": "~5.0.
|
|
42
|
-
"@xylabs/logger": "~5.0.
|
|
43
|
-
"@xylabs/promise": "~5.0.
|
|
44
|
-
"@xylabs/typeof": "~5.0.
|
|
38
|
+
"@xylabs/assert": "~5.0.81",
|
|
39
|
+
"@xylabs/logger": "~5.0.81",
|
|
40
|
+
"@xylabs/promise": "~5.0.81",
|
|
41
|
+
"@xylabs/typeof": "~5.0.81"
|
|
45
42
|
},
|
|
46
43
|
"devDependencies": {
|
|
47
|
-
"@xylabs/ts-scripts-yarn3": "~7.
|
|
48
|
-
"@xylabs/tsconfig": "~7.
|
|
44
|
+
"@xylabs/ts-scripts-yarn3": "~7.4.11",
|
|
45
|
+
"@xylabs/tsconfig": "~7.4.11",
|
|
49
46
|
"typescript": "~5.9.3",
|
|
50
47
|
"vitest": "~4.0.18"
|
|
51
48
|
},
|
package/src/AnyObject.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { TypedKey } from '@xylabs/typeof'
|
|
2
|
-
|
|
3
|
-
import type { EmptyObject } from './EmptyObject.ts'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Any object, which means that it does not enforce the set of fields that it has. Extending from AnyObject
|
|
7
|
-
* will result in a type that includes the universal set of field names
|
|
8
|
-
*/
|
|
9
|
-
export type AnyObject = EmptyObject & Partial<Record<TypedKey, unknown>>
|
package/src/AsTypeFactory.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { assertDefinedEx } from '@xylabs/assert'
|
|
2
|
-
import type { AnyNonPromise } from '@xylabs/promise'
|
|
3
|
-
import { isPromise } from '@xylabs/promise'
|
|
4
|
-
import { isTruthy } from '@xylabs/typeof'
|
|
5
|
-
|
|
6
|
-
import type { AsTypeFunction } from './AsTypeFunction.ts'
|
|
7
|
-
import type {
|
|
8
|
-
StringOrAlertFunction, TypeCheck, TypeCheckConfig,
|
|
9
|
-
TypeCheckRequiredConfig,
|
|
10
|
-
} from './types.ts'
|
|
11
|
-
|
|
12
|
-
export const AsTypeFactory = {
|
|
13
|
-
create: <T extends AnyNonPromise>(typeCheck: TypeCheck<T>): AsTypeFunction<T> => {
|
|
14
|
-
const func = (
|
|
15
|
-
value: AnyNonPromise,
|
|
16
|
-
assertOrConfig?: StringOrAlertFunction<T> | TypeCheckConfig,
|
|
17
|
-
config?: TypeCheckConfig,
|
|
18
|
-
): T | undefined => {
|
|
19
|
-
// when used as a predicate, it seems that the index is passed as the second parameter (filter,map)
|
|
20
|
-
const isPredicate = typeof assertOrConfig === 'number'
|
|
21
|
-
const resolvedAssert = isPredicate
|
|
22
|
-
? undefined
|
|
23
|
-
: (typeof assertOrConfig === 'object' ? undefined : assertOrConfig) as (StringOrAlertFunction<T> | undefined)
|
|
24
|
-
const resolvedConfig = isPredicate ? undefined : typeof assertOrConfig === 'object' ? assertOrConfig : config
|
|
25
|
-
|
|
26
|
-
// only return undefined if not required
|
|
27
|
-
const required = isTruthy((resolvedConfig as (TypeCheckRequiredConfig | undefined))?.required)
|
|
28
|
-
if (!required && (value === undefined || value === null)) {
|
|
29
|
-
return undefined
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
if (isPromise(value)) {
|
|
33
|
-
throw new TypeError('un-awaited promises may not be sent to "as" functions')
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const result = typeCheck(value, resolvedConfig) ? (value as T) : undefined
|
|
37
|
-
|
|
38
|
-
if (resolvedAssert !== undefined) {
|
|
39
|
-
return typeof resolvedAssert === 'function' ? assertDefinedEx<T>(result, resolvedAssert) : assertDefinedEx<T>(result, () => resolvedAssert)
|
|
40
|
-
}
|
|
41
|
-
return result
|
|
42
|
-
}
|
|
43
|
-
return func
|
|
44
|
-
},
|
|
45
|
-
createOptional: <T extends AnyNonPromise>(typeCheck: TypeCheck<T>) => {
|
|
46
|
-
const func = (value: AnyNonPromise): T | undefined => {
|
|
47
|
-
if (value === undefined || value === null) return undefined
|
|
48
|
-
if (isPromise(value)) {
|
|
49
|
-
throw new TypeError('un-awaited promises may not be sent to "as" functions')
|
|
50
|
-
}
|
|
51
|
-
return typeCheck(value) ? (value as T) : undefined
|
|
52
|
-
}
|
|
53
|
-
return func
|
|
54
|
-
},
|
|
55
|
-
}
|
package/src/AsTypeFunction.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { AnyNonPromise } from '@xylabs/promise'
|
|
2
|
-
|
|
3
|
-
import type {
|
|
4
|
-
StringOrAlertFunction,
|
|
5
|
-
TypeCheckConfig, TypeCheckOptionalConfig, TypeCheckRequiredConfig,
|
|
6
|
-
} from './types.ts'
|
|
7
|
-
|
|
8
|
-
export type AsTypeFunction<T extends AnyNonPromise = AnyNonPromise> = {
|
|
9
|
-
<TType extends T>(value: AnyNonPromise): TType | undefined
|
|
10
|
-
<TType extends T>(value: AnyNonPromise, config: TypeCheckRequiredConfig): TType
|
|
11
|
-
<TType extends T>(value: AnyNonPromise, config: TypeCheckConfig | TypeCheckOptionalConfig): TType | undefined
|
|
12
|
-
<TType extends T>(value: AnyNonPromise, assert: StringOrAlertFunction<TType>): TType | undefined
|
|
13
|
-
<TType extends T>(value: AnyNonPromise, assert: StringOrAlertFunction<TType>, config: TypeCheckRequiredConfig): TType
|
|
14
|
-
<TType extends T>(value: AnyNonPromise, assert: StringOrAlertFunction<TType>, config: TypeCheckConfig | TypeCheckOptionalConfig): TType | undefined
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export type AsOptionalTypeFunction<T extends AnyNonPromise = AnyNonPromise> = {
|
|
18
|
-
<TType extends T>(value: AnyNonPromise): TType | undefined
|
|
19
|
-
}
|
package/src/Compare.ts
DELETED
package/src/EmptyObject.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
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> = Exclude<{ [K in keyof T]?: never }, unknown[] | ((...args: unknown[]) => unknown) | null>
|
|
7
|
-
|
|
8
|
-
/* export type EmptyObjectExperimental = Exclude<
|
|
9
|
-
|
|
10
|
-
Record<TypedKey, unknown>,
|
|
11
|
-
unknown[] | ((...args: unknown[]) => unknown) | null
|
|
12
|
-
> */
|
|
13
|
-
|
|
14
|
-
/*
|
|
15
|
-
const foo: EmptyObjectExperimental = {}
|
|
16
|
-
const bar: EmptyObjectExperimental = []
|
|
17
|
-
const baz: EmptyObjectExperimental = () => null
|
|
18
|
-
const qux: EmptyObjectExperimental = null
|
|
19
|
-
|
|
20
|
-
type x = EmptyObjectExperimental & { test: boolean }
|
|
21
|
-
|
|
22
|
-
const y: x = { test: true, arie: 1 }
|
|
23
|
-
|
|
24
|
-
export type AnyObject = EmptyObjectExperimental & Partial<Record<TypedKey, unknown>>
|
|
25
|
-
|
|
26
|
-
export abstract class ValidatorBase<T extends EmptyObjectExperimental = AnyObject> {
|
|
27
|
-
abstract validate(payload: T): Promise<Error[]>
|
|
28
|
-
}
|
|
29
|
-
*/
|
package/src/index.ts
DELETED
package/src/types.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { AssertExMessageFunc } from '@xylabs/assert'
|
|
2
|
-
import type { Logger } from '@xylabs/logger'
|
|
3
|
-
import type { AnyNonPromise } from '@xylabs/promise'
|
|
4
|
-
import type { TypedValue } from '@xylabs/typeof'
|
|
5
|
-
|
|
6
|
-
export interface TypeCheckConfig {
|
|
7
|
-
log?: boolean | Logger
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export interface TypeCheckRequiredConfig extends TypeCheckConfig {
|
|
11
|
-
required: true
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface TypeCheckOptionalConfig extends TypeCheckConfig {
|
|
15
|
-
required: false
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export type StringOrAlertFunction<T extends AnyNonPromise> = string | AssertExMessageFunc<T>
|
|
19
|
-
|
|
20
|
-
export type TypeCheck<T extends TypedValue> = {
|
|
21
|
-
(obj: AnyNonPromise): obj is T
|
|
22
|
-
(obj: AnyNonPromise, config: TypeCheckConfig): obj is T
|
|
23
|
-
(obj: AnyNonPromise, config: TypeCheckConfig | number /* for use as predicate */ | undefined): obj is T
|
|
24
|
-
}
|