@xyo-network/payload-builder 3.6.0-rc.4 → 3.6.0-rc.6
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/Builder.d.ts +4 -4
- package/dist/browser/Builder.d.ts.map +1 -1
- package/dist/browser/BuilderBase.d.ts +16 -19
- package/dist/browser/BuilderBase.d.ts.map +1 -1
- package/dist/browser/Options.d.ts +4 -4
- package/dist/browser/Options.d.ts.map +1 -1
- package/dist/browser/index.mjs +19 -31
- package/dist/browser/index.mjs.map +1 -1
- package/dist/neutral/Builder.d.ts +4 -4
- package/dist/neutral/Builder.d.ts.map +1 -1
- package/dist/neutral/BuilderBase.d.ts +16 -19
- package/dist/neutral/BuilderBase.d.ts.map +1 -1
- package/dist/neutral/Options.d.ts +4 -4
- package/dist/neutral/Options.d.ts.map +1 -1
- package/dist/neutral/index.mjs +19 -31
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/node/Builder.d.ts +4 -4
- package/dist/node/Builder.d.ts.map +1 -1
- package/dist/node/BuilderBase.d.ts +16 -19
- package/dist/node/BuilderBase.d.ts.map +1 -1
- package/dist/node/Options.d.ts +4 -4
- package/dist/node/Options.d.ts.map +1 -1
- package/dist/node/index.mjs +19 -31
- package/dist/node/index.mjs.map +1 -1
- package/package.json +9 -9
- package/src/Builder.ts +7 -20
- package/src/BuilderBase.ts +49 -44
- package/src/Options.ts +6 -4
package/src/BuilderBase.ts
CHANGED
|
@@ -1,23 +1,31 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
|
-
import type { AnyObject } from '@xylabs/object'
|
|
2
|
+
import type { AnyObject, EmptyObject } from '@xylabs/object'
|
|
3
3
|
import {
|
|
4
4
|
isJsonObject, omitBy, toJson,
|
|
5
5
|
} from '@xylabs/object'
|
|
6
6
|
import type { Promisable } from '@xylabs/promise'
|
|
7
7
|
import { removeEmptyFields } from '@xyo-network/hash'
|
|
8
|
-
import type {
|
|
8
|
+
import type {
|
|
9
|
+
DeepOmitStartsWith,
|
|
10
|
+
Payload, Schema,
|
|
11
|
+
WithOptionalSchema,
|
|
12
|
+
WithoutClientMeta,
|
|
13
|
+
WithoutMeta,
|
|
14
|
+
WithoutPrivateStorageMeta,
|
|
15
|
+
WithoutSchema,
|
|
16
|
+
WithoutStorageMeta,
|
|
17
|
+
} from '@xyo-network/payload-model'
|
|
9
18
|
|
|
10
|
-
import { PayloadBuilder } from './Builder.ts'
|
|
11
19
|
import type { PayloadBuilderOptions } from './Options.ts'
|
|
12
20
|
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
21
|
+
export const omitByPrefix = <T extends EmptyObject, P extends string>(payload: T, prefix: P, maxDepth = 100): DeepOmitStartsWith<T, P> => {
|
|
22
|
+
return omitBy(payload, omitByPrefixPredicate(prefix), maxDepth) as unknown as DeepOmitStartsWith<T, P>
|
|
23
|
+
}
|
|
16
24
|
|
|
17
|
-
export const
|
|
18
|
-
const
|
|
25
|
+
export const omitSchema = <T extends WithOptionalSchema>(payload: T): WithoutSchema<T> => {
|
|
26
|
+
const result = structuredClone(payload)
|
|
19
27
|
delete result.schema
|
|
20
|
-
return result
|
|
28
|
+
return result
|
|
21
29
|
}
|
|
22
30
|
|
|
23
31
|
const omitByPrefixPredicate = (prefix: string) => (_: unknown, key: string) => {
|
|
@@ -25,78 +33,75 @@ const omitByPrefixPredicate = (prefix: string) => (_: unknown, key: string) => {
|
|
|
25
33
|
return key.startsWith(prefix)
|
|
26
34
|
}
|
|
27
35
|
|
|
28
|
-
export class PayloadBuilderBase<T extends Payload = Payload<AnyObject>,
|
|
29
|
-
|
|
36
|
+
export class PayloadBuilderBase<T extends Payload = Payload<AnyObject>,
|
|
37
|
+
O extends PayloadBuilderOptions<T> = PayloadBuilderOptions<T>> {
|
|
38
|
+
protected _fields?: WithoutMeta<WithoutSchema<T>>
|
|
30
39
|
protected _schema: Schema
|
|
31
40
|
|
|
32
41
|
constructor(readonly options: O) {
|
|
33
42
|
const { schema, fields } = options
|
|
34
43
|
this._schema = schema
|
|
35
|
-
|
|
44
|
+
if (fields) {
|
|
45
|
+
this.fields(fields)
|
|
46
|
+
}
|
|
36
47
|
}
|
|
37
48
|
|
|
38
49
|
static dataHashableFields<T extends Payload>(
|
|
39
50
|
schema: Schema,
|
|
40
51
|
payload: WithoutSchema<T>,
|
|
41
52
|
|
|
42
|
-
): Promisable<
|
|
53
|
+
): Promisable<WithoutMeta<T>> {
|
|
43
54
|
const cleanFields = removeEmptyFields({ ...payload, schema })
|
|
44
55
|
assertEx(
|
|
45
56
|
cleanFields === undefined || isJsonObject(cleanFields),
|
|
46
57
|
() => `Fields must be JsonObject: ${JSON.stringify(toJson(cleanFields), null, 2)}`,
|
|
47
58
|
)
|
|
48
|
-
return this.omitMeta(cleanFields) as T
|
|
59
|
+
return this.omitMeta(cleanFields) as WithoutMeta<T>
|
|
49
60
|
}
|
|
50
61
|
|
|
51
|
-
static omitClientMeta<T extends
|
|
52
|
-
static omitClientMeta<T extends
|
|
53
|
-
static omitClientMeta<T extends
|
|
62
|
+
static omitClientMeta<T extends EmptyObject>(payload: T, maxDepth?: number): WithoutClientMeta<T>
|
|
63
|
+
static omitClientMeta<T extends EmptyObject>(payloads: T[], maxDepth?: number): WithoutClientMeta<T>[]
|
|
64
|
+
static omitClientMeta<T extends EmptyObject>(payloads: T | T[], maxDepth = 100): WithoutClientMeta<T> | WithoutClientMeta<T>[] {
|
|
54
65
|
return Array.isArray(payloads)
|
|
55
|
-
? payloads.map(payload => this.omitClientMeta(payload, maxDepth))
|
|
56
|
-
:
|
|
66
|
+
? payloads.map(payload => this.omitClientMeta(payload, maxDepth))
|
|
67
|
+
: omitByPrefix(payloads, '$', maxDepth)
|
|
57
68
|
}
|
|
58
69
|
|
|
59
|
-
static omitMeta<T extends
|
|
60
|
-
static omitMeta<T extends
|
|
61
|
-
static omitMeta<T extends
|
|
70
|
+
static omitMeta<T extends EmptyObject>(payload: T, maxDepth?: number): WithoutMeta<T>
|
|
71
|
+
static omitMeta<T extends EmptyObject>(payloads: T[], maxDepth?: number): WithoutMeta<T>[]
|
|
72
|
+
static omitMeta<T extends EmptyObject>(payloads: T | T[], maxDepth = 100): WithoutMeta<T> | WithoutMeta<T>[] {
|
|
62
73
|
return Array.isArray(payloads)
|
|
63
|
-
?
|
|
64
|
-
: this.omitStorageMeta(this.omitClientMeta(payloads, maxDepth), maxDepth)
|
|
74
|
+
? payloads.map(payload => this.omitMeta(payload, maxDepth))
|
|
75
|
+
: this.omitStorageMeta(this.omitClientMeta(payloads, maxDepth), maxDepth) as unknown as WithoutMeta<T>
|
|
65
76
|
}
|
|
66
77
|
|
|
67
|
-
static omitPrivateStorageMeta<T extends
|
|
68
|
-
static omitPrivateStorageMeta<T extends
|
|
69
|
-
static omitPrivateStorageMeta<T extends
|
|
78
|
+
static omitPrivateStorageMeta<T extends EmptyObject>(payload: T, maxDepth?: number): WithoutPrivateStorageMeta<T>
|
|
79
|
+
static omitPrivateStorageMeta<T extends EmptyObject>(payloads: T[], maxDepth?: number): WithoutPrivateStorageMeta<T>[]
|
|
80
|
+
static omitPrivateStorageMeta<T extends EmptyObject>(payloads: T | T[], maxDepth = 100): WithoutPrivateStorageMeta<T> | WithoutPrivateStorageMeta<T>[] {
|
|
70
81
|
return Array.isArray(payloads)
|
|
71
|
-
? payloads.map(payload => this.omitPrivateStorageMeta(payload, maxDepth))
|
|
72
|
-
:
|
|
82
|
+
? payloads.map(payload => this.omitPrivateStorageMeta(payload, maxDepth))
|
|
83
|
+
: omitByPrefix(payloads, '__', maxDepth)
|
|
73
84
|
}
|
|
74
85
|
|
|
75
|
-
static omitStorageMeta<T extends
|
|
76
|
-
static omitStorageMeta<T extends
|
|
77
|
-
static omitStorageMeta<T extends
|
|
86
|
+
static omitStorageMeta<T extends EmptyObject>(payload: T, maxDepth?: number): WithoutStorageMeta<T>
|
|
87
|
+
static omitStorageMeta<T extends EmptyObject>(payloads: T[], maxDepth?: number): WithoutStorageMeta<T>[]
|
|
88
|
+
static omitStorageMeta<T extends EmptyObject>(payloads: T | T[], maxDepth = 100): WithoutStorageMeta<T> | WithoutStorageMeta<T>[] {
|
|
78
89
|
return Array.isArray(payloads)
|
|
79
|
-
? payloads.map(payload => this.omitStorageMeta(payload, maxDepth))
|
|
80
|
-
:
|
|
90
|
+
? payloads.map(payload => this.omitStorageMeta(payload, maxDepth))
|
|
91
|
+
: omitByPrefix(payloads, '_', maxDepth)
|
|
81
92
|
}
|
|
82
93
|
|
|
83
94
|
async dataHashableFields() {
|
|
84
95
|
return await PayloadBuilderBase.dataHashableFields(
|
|
85
96
|
assertEx(this._schema, () => 'Payload: Missing Schema'),
|
|
86
97
|
// TDOD: Add verification that required fields are present
|
|
87
|
-
this._fields as T
|
|
98
|
+
this._fields as WithoutSchema<T>,
|
|
88
99
|
)
|
|
89
100
|
}
|
|
90
101
|
|
|
91
|
-
fields(fields:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
const { schema } = fieldsClone
|
|
95
|
-
if (schema) {
|
|
96
|
-
this.schema(schema)
|
|
97
|
-
}
|
|
98
|
-
this._fields = removeEmptyFields(removeMetaAndSchema<T>(fieldsClone))
|
|
99
|
-
}
|
|
102
|
+
fields(fields: WithoutMeta<WithoutSchema<T>>) {
|
|
103
|
+
// we need to do the cast here since ts seems to not like nested, yet same, generics
|
|
104
|
+
this._fields = omitSchema(PayloadBuilderBase.omitMeta(removeEmptyFields(structuredClone(fields)))) as unknown as WithoutMeta<WithoutSchema<T>>
|
|
100
105
|
return this
|
|
101
106
|
}
|
|
102
107
|
|
package/src/Options.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { Logger } from '@xylabs/logger'
|
|
2
|
-
import type { JsonObject } from '@xylabs/object'
|
|
3
|
-
import type {
|
|
2
|
+
import type { EmptyObject, JsonObject } from '@xylabs/object'
|
|
3
|
+
import type {
|
|
4
|
+
Schema, WithoutMeta, WithoutSchema,
|
|
5
|
+
} from '@xyo-network/payload-model'
|
|
4
6
|
|
|
5
|
-
export interface PayloadBuilderOptions<T> {
|
|
6
|
-
readonly fields?:
|
|
7
|
+
export interface PayloadBuilderOptions<T extends EmptyObject = EmptyObject> {
|
|
8
|
+
readonly fields?: WithoutMeta<WithoutSchema<T>>
|
|
7
9
|
readonly logger?: Logger
|
|
8
10
|
readonly meta?: JsonObject
|
|
9
11
|
readonly schema: Schema
|