@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 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) => undefined | TType;
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
- `undefined` \| `TType`
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): undefined | TType;
176
+ <TType> (value): TType | undefined;
176
177
  <TType> (value, config): TType;
177
- <TType> (value, config): undefined | TType;
178
- <TType> (value, assert): undefined | TType;
178
+ <TType> (value, config): TType | undefined;
179
+ <TType> (value, assert): TType | undefined;
179
180
  <TType> (value, assert, config): TType;
180
- <TType> (value, assert, config): undefined | TType;
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): undefined | TType;
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
- `undefined` \| `TType`
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): undefined | TType;
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
- `undefined` \| `TType`
263
+ `TType` \| `undefined`
263
264
 
264
265
  ## Call Signature
265
266
 
266
267
  ```ts
267
- <TType>(value, assert): undefined | TType;
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
- `undefined` \| `TType`
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): undefined | TType;
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
- `undefined` \| `TType`
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
- `undefined` | `number` | [`TypeCheckConfig`](#../interfaces/TypeCheckConfig)
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.79",
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.79",
42
- "@xylabs/logger": "~5.0.79",
43
- "@xylabs/promise": "~5.0.79",
44
- "@xylabs/typeof": "~5.0.79"
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.3.2",
48
- "@xylabs/tsconfig": "~7.3.2",
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>>
@@ -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
- }
@@ -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
@@ -1,2 +0,0 @@
1
- // Returns a negative number if a < b, zero if a == b, and a positive number if a > b
2
- export type Compare<T> = (a: T, b: T) => number
@@ -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
@@ -1,5 +0,0 @@
1
- export * from './AnyObject.ts'
2
- export * from './AsTypeFunction.ts'
3
- export * from './Compare.ts'
4
- export * from './EmptyObject.ts'
5
- export * from './types.ts'
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
- }