@naturalcycles/js-lib 15.33.3 → 15.34.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.
|
@@ -21,9 +21,9 @@ export declare const j: {
|
|
|
21
21
|
unixTimestamp2000(): JsonSchemaNumberBuilder<UnixTimestamp>;
|
|
22
22
|
string<T extends string = string>(): JsonSchemaStringBuilder<T>;
|
|
23
23
|
isoDate(): JsonSchemaStringBuilder<IsoDate>;
|
|
24
|
-
object
|
|
24
|
+
object: typeof object;
|
|
25
25
|
rootObject<T extends AnyObject>(props: { [K in keyof T]: JsonSchemaAnyBuilder<T[K]>; }): JsonSchemaObjectBuilder<T>;
|
|
26
|
-
array<
|
|
26
|
+
array<T extends JsonSchemaAnyBuilder<any>>(itemSchema: T): JsonSchemaArrayBuilder<T["infer"]>;
|
|
27
27
|
tuple<T extends any[] = unknown[]>(items: JsonSchemaAnyBuilder[]): JsonSchemaTupleBuilder<T>;
|
|
28
28
|
oneOf<T = unknown>(items: JsonSchemaAnyBuilder[]): JsonSchemaAnyBuilder<T, JsonSchemaOneOf<T>>;
|
|
29
29
|
allOf<T = unknown>(items: JsonSchemaAnyBuilder[]): JsonSchemaAnyBuilder<T, JsonSchemaAllOf<T>>;
|
|
@@ -46,7 +46,9 @@ export declare class JsonSchemaAnyBuilder<T = unknown, SCHEMA_TYPE extends JsonS
|
|
|
46
46
|
oneOf(schemas: JsonSchema[]): this;
|
|
47
47
|
allOf(schemas: JsonSchema[]): this;
|
|
48
48
|
instanceof(of: string): this;
|
|
49
|
-
optional(
|
|
49
|
+
optional(): JsonSchemaAnyBuilder<T | undefined, JsonSchema<T | undefined>>;
|
|
50
|
+
optional(optional: true): JsonSchemaAnyBuilder<T | undefined, JsonSchema<T | undefined>>;
|
|
51
|
+
optional(optional: false): JsonSchemaAnyBuilder<Exclude<T, undefined>, JsonSchema<Exclude<T, undefined>>>;
|
|
50
52
|
/**
|
|
51
53
|
* Produces a "clean schema object" without methods.
|
|
52
54
|
* Same as if it would be JSON.stringified.
|
|
@@ -81,6 +83,7 @@ export declare class JsonSchemaNumberBuilder<T extends number = number> extends
|
|
|
81
83
|
unixTimestampMillis2000: () => this;
|
|
82
84
|
utcOffset: () => this;
|
|
83
85
|
utcOffsetHours: () => this;
|
|
86
|
+
branded<B extends number>(): JsonSchemaNumberBuilder<B>;
|
|
84
87
|
}
|
|
85
88
|
export declare class JsonSchemaStringBuilder<T extends string = string> extends JsonSchemaAnyBuilder<T, JsonSchemaString<T>> {
|
|
86
89
|
constructor();
|
|
@@ -104,6 +107,7 @@ export declare class JsonSchemaStringBuilder<T extends string = string> extends
|
|
|
104
107
|
trim: (trim?: boolean) => this;
|
|
105
108
|
toLowerCase: (toLowerCase?: boolean) => this;
|
|
106
109
|
toUpperCase: (toUpperCase?: boolean) => this;
|
|
110
|
+
branded<B extends string>(): JsonSchemaStringBuilder<B>;
|
|
107
111
|
private transformModify;
|
|
108
112
|
}
|
|
109
113
|
export declare class JsonSchemaObjectBuilder<T extends AnyObject> extends JsonSchemaAnyBuilder<T, JsonSchemaObject<T>> {
|
|
@@ -131,3 +135,10 @@ export declare class JsonSchemaArrayBuilder<ITEM> extends JsonSchemaAnyBuilder<I
|
|
|
131
135
|
export declare class JsonSchemaTupleBuilder<T extends any[]> extends JsonSchemaAnyBuilder<T, JsonSchemaTuple<T>> {
|
|
132
136
|
constructor(items: JsonSchemaBuilder[]);
|
|
133
137
|
}
|
|
138
|
+
declare function object<P extends Record<string, JsonSchemaAnyBuilder<any, any>>>(props: P): JsonSchemaObjectBuilder<{
|
|
139
|
+
[K in keyof P]: P[K] extends JsonSchemaAnyBuilder<infer U, any> ? U : never;
|
|
140
|
+
}>;
|
|
141
|
+
declare function object<T extends AnyObject>(props: {
|
|
142
|
+
[K in keyof T]: JsonSchemaAnyBuilder<T[K]>;
|
|
143
|
+
}): JsonSchemaObjectBuilder<T>;
|
|
144
|
+
export {};
|
|
@@ -61,9 +61,7 @@ export const j = {
|
|
|
61
61
|
},
|
|
62
62
|
// email: () => new JsonSchemaStringBuilder().email(),
|
|
63
63
|
// complex types
|
|
64
|
-
object
|
|
65
|
-
return new JsonSchemaObjectBuilder().addProperties(props);
|
|
66
|
-
},
|
|
64
|
+
object,
|
|
67
65
|
rootObject(props) {
|
|
68
66
|
return new JsonSchemaObjectBuilder().addProperties(props).$schemaDraft7();
|
|
69
67
|
},
|
|
@@ -214,6 +212,9 @@ export class JsonSchemaNumberBuilder extends JsonSchemaAnyBuilder {
|
|
|
214
212
|
unixTimestampMillis2000 = () => this.format('unixTimestampMillis2000').description('UnixTimestampMillis2000');
|
|
215
213
|
utcOffset = () => this.format('utcOffset');
|
|
216
214
|
utcOffsetHours = () => this.format('utcOffsetHours');
|
|
215
|
+
branded() {
|
|
216
|
+
return this;
|
|
217
|
+
}
|
|
217
218
|
}
|
|
218
219
|
export class JsonSchemaStringBuilder extends JsonSchemaAnyBuilder {
|
|
219
220
|
constructor() {
|
|
@@ -256,6 +257,9 @@ export class JsonSchemaStringBuilder extends JsonSchemaAnyBuilder {
|
|
|
256
257
|
trim = (trim = true) => this.transformModify('trim', trim);
|
|
257
258
|
toLowerCase = (toLowerCase = true) => this.transformModify('toLowerCase', toLowerCase);
|
|
258
259
|
toUpperCase = (toUpperCase = true) => this.transformModify('toUpperCase', toUpperCase);
|
|
260
|
+
branded() {
|
|
261
|
+
return this;
|
|
262
|
+
}
|
|
259
263
|
transformModify(t, add) {
|
|
260
264
|
if (add) {
|
|
261
265
|
this.schema.transform = _uniq([...(this.schema.transform || []), t]);
|
|
@@ -357,3 +361,6 @@ export class JsonSchemaTupleBuilder extends JsonSchemaAnyBuilder {
|
|
|
357
361
|
});
|
|
358
362
|
}
|
|
359
363
|
}
|
|
364
|
+
function object(props) {
|
|
365
|
+
return new JsonSchemaObjectBuilder().addProperties(props);
|
|
366
|
+
}
|
package/package.json
CHANGED
|
@@ -86,18 +86,14 @@ export const j = {
|
|
|
86
86
|
},
|
|
87
87
|
// email: () => new JsonSchemaStringBuilder().email(),
|
|
88
88
|
// complex types
|
|
89
|
-
object
|
|
90
|
-
[K in keyof T]: JsonSchemaAnyBuilder<T[K]>
|
|
91
|
-
}) {
|
|
92
|
-
return new JsonSchemaObjectBuilder<T>().addProperties(props)
|
|
93
|
-
},
|
|
89
|
+
object,
|
|
94
90
|
rootObject<T extends AnyObject>(props: {
|
|
95
91
|
[K in keyof T]: JsonSchemaAnyBuilder<T[K]>
|
|
96
92
|
}) {
|
|
97
93
|
return new JsonSchemaObjectBuilder<T>().addProperties(props).$schemaDraft7()
|
|
98
94
|
},
|
|
99
|
-
array<
|
|
100
|
-
return new JsonSchemaArrayBuilder<
|
|
95
|
+
array<T extends JsonSchemaAnyBuilder<any>>(itemSchema: T) {
|
|
96
|
+
return new JsonSchemaArrayBuilder<T['infer']>(itemSchema)
|
|
101
97
|
},
|
|
102
98
|
tuple<T extends any[] = unknown[]>(items: JsonSchemaAnyBuilder[]) {
|
|
103
99
|
return new JsonSchemaTupleBuilder<T>(items)
|
|
@@ -181,7 +177,12 @@ export class JsonSchemaAnyBuilder<T = unknown, SCHEMA_TYPE extends JsonSchema<T>
|
|
|
181
177
|
return this
|
|
182
178
|
}
|
|
183
179
|
|
|
184
|
-
optional(
|
|
180
|
+
optional(): JsonSchemaAnyBuilder<T | undefined, JsonSchema<T | undefined>>
|
|
181
|
+
optional(optional: true): JsonSchemaAnyBuilder<T | undefined, JsonSchema<T | undefined>>
|
|
182
|
+
optional(
|
|
183
|
+
optional: false,
|
|
184
|
+
): JsonSchemaAnyBuilder<Exclude<T, undefined>, JsonSchema<Exclude<T, undefined>>>
|
|
185
|
+
optional(optional = true): JsonSchemaAnyBuilder<any, JsonSchema<any>> {
|
|
185
186
|
if (optional) {
|
|
186
187
|
this.schema.optionalField = true
|
|
187
188
|
} else {
|
|
@@ -275,6 +276,10 @@ export class JsonSchemaNumberBuilder<T extends number = number> extends JsonSche
|
|
|
275
276
|
|
|
276
277
|
utcOffset = (): this => this.format('utcOffset')
|
|
277
278
|
utcOffsetHours = (): this => this.format('utcOffsetHours')
|
|
279
|
+
|
|
280
|
+
branded<B extends number>(): JsonSchemaNumberBuilder<B> {
|
|
281
|
+
return this as unknown as JsonSchemaNumberBuilder<B>
|
|
282
|
+
}
|
|
278
283
|
}
|
|
279
284
|
|
|
280
285
|
export class JsonSchemaStringBuilder<T extends string = string> extends JsonSchemaAnyBuilder<
|
|
@@ -329,6 +334,10 @@ export class JsonSchemaStringBuilder<T extends string = string> extends JsonSche
|
|
|
329
334
|
toLowerCase = (toLowerCase = true): this => this.transformModify('toLowerCase', toLowerCase)
|
|
330
335
|
toUpperCase = (toUpperCase = true): this => this.transformModify('toUpperCase', toUpperCase)
|
|
331
336
|
|
|
337
|
+
branded<B extends string>(): JsonSchemaStringBuilder<B> {
|
|
338
|
+
return this as unknown as JsonSchemaStringBuilder<B>
|
|
339
|
+
}
|
|
340
|
+
|
|
332
341
|
private transformModify(t: 'trim' | 'toLowerCase' | 'toUpperCase', add: boolean): this {
|
|
333
342
|
if (add) {
|
|
334
343
|
this.schema.transform = _uniq([...(this.schema.transform || []), t])
|
|
@@ -457,3 +466,21 @@ export class JsonSchemaTupleBuilder<T extends any[]> extends JsonSchemaAnyBuilde
|
|
|
457
466
|
})
|
|
458
467
|
}
|
|
459
468
|
}
|
|
469
|
+
|
|
470
|
+
// TODO and Notes
|
|
471
|
+
// The issue is that in `j` we mix two approaches:
|
|
472
|
+
// 1) the builder driven approach
|
|
473
|
+
// 2) the type driven approach.
|
|
474
|
+
|
|
475
|
+
function object<P extends Record<string, JsonSchemaAnyBuilder<any, any>>>(
|
|
476
|
+
props: P,
|
|
477
|
+
): JsonSchemaObjectBuilder<{
|
|
478
|
+
[K in keyof P]: P[K] extends JsonSchemaAnyBuilder<infer U, any> ? U : never
|
|
479
|
+
}>
|
|
480
|
+
function object<T extends AnyObject>(props: {
|
|
481
|
+
[K in keyof T]: JsonSchemaAnyBuilder<T[K]>
|
|
482
|
+
}): JsonSchemaObjectBuilder<T>
|
|
483
|
+
|
|
484
|
+
function object(props: any): any {
|
|
485
|
+
return new JsonSchemaObjectBuilder<any>().addProperties(props)
|
|
486
|
+
}
|