@naturalcycles/nodejs-lib 15.78.1 → 15.79.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.
|
@@ -65,6 +65,7 @@ export declare const j: {
|
|
|
65
65
|
and(): {
|
|
66
66
|
silentBob: () => never;
|
|
67
67
|
};
|
|
68
|
+
literal<const V extends string | number | boolean | null>(v: V): JsonSchemaEnumBuilder<V, V, false>;
|
|
68
69
|
};
|
|
69
70
|
export declare class JsonSchemaTerminal<IN, OUT, Opt> {
|
|
70
71
|
protected schema: JsonSchema;
|
|
@@ -248,13 +249,13 @@ export declare class JsonSchemaObjectBuilder<IN extends AnyObject, OUT extends A
|
|
|
248
249
|
* When set, the validation will not strip away properties that are not specified explicitly in the schema.
|
|
249
250
|
*/
|
|
250
251
|
allowAdditionalProperties(): this;
|
|
251
|
-
extend<P extends Record<string, JsonSchemaAnyBuilder<any, any, any>>>(props: P): JsonSchemaObjectBuilder<RelaxIndexSignature<Override<IN, {
|
|
252
|
+
extend<P extends Record<string, JsonSchemaAnyBuilder<any, any, any>>>(props: P): JsonSchemaObjectBuilder<RelaxIndexSignature<OptionalDbEntityFields<Override<IN, {
|
|
252
253
|
[K in keyof P]?: P[K] extends JsonSchemaAnyBuilder<infer IN2, any, any> ? IN2 : never;
|
|
253
|
-
}
|
|
254
|
+
}>>>, Override<OUT, {
|
|
254
255
|
[K in keyof P as P[K] extends JsonSchemaAnyBuilder<any, any, infer IsOpt> ? IsOpt extends true ? never : K : never]: P[K] extends JsonSchemaAnyBuilder<any, infer OUT2, any> ? OUT2 : never;
|
|
255
256
|
} & {
|
|
256
257
|
[K in keyof P as P[K] extends JsonSchemaAnyBuilder<any, any, infer IsOpt> ? IsOpt extends true ? K : never : never]?: P[K] extends JsonSchemaAnyBuilder<any, infer OUT2, any> ? OUT2 : never;
|
|
257
|
-
}
|
|
258
|
+
}>, false>;
|
|
258
259
|
/**
|
|
259
260
|
* Concatenates another schema to the current schema.
|
|
260
261
|
*
|
|
@@ -277,15 +278,15 @@ export declare class JsonSchemaObjectBuilder<IN extends AnyObject, OUT extends A
|
|
|
277
278
|
/**
|
|
278
279
|
* Extends the current schema with `id`, `created` and `updated` according to NC DB conventions.
|
|
279
280
|
*/
|
|
280
|
-
dbEntity(): JsonSchemaObjectBuilder<RelaxIndexSignature<Override<IN, {
|
|
281
|
+
dbEntity(): JsonSchemaObjectBuilder<RelaxIndexSignature<OptionalDbEntityFields<Override<IN, {
|
|
281
282
|
id?: string | undefined;
|
|
282
283
|
created?: any;
|
|
283
284
|
updated?: any;
|
|
284
|
-
}
|
|
285
|
+
}>>>, Override<OUT, {
|
|
285
286
|
id: string;
|
|
286
287
|
created: any;
|
|
287
288
|
updated: any;
|
|
288
|
-
} & {}
|
|
289
|
+
} & {}>, false>;
|
|
289
290
|
minProperties(minProperties: number): this;
|
|
290
291
|
maxProperties(maxProperties: number): this;
|
|
291
292
|
exclusiveProperties(propNames: readonly (keyof IN & string)[]): this;
|
|
@@ -421,7 +422,7 @@ declare function object<IN extends AnyObject>(props: {
|
|
|
421
422
|
}): JsonSchemaObjectBuilder<IN, IN, false>;
|
|
422
423
|
declare function objectInfer<P extends Record<string, JsonSchemaAnyBuilder<any, any, any>>>(props: P): JsonSchemaObjectInferringBuilder<P, false>;
|
|
423
424
|
declare function objectDbEntity(props: AnyObject): never;
|
|
424
|
-
declare function objectDbEntity<IN extends BaseDBEntity
|
|
425
|
+
declare function objectDbEntity<IN extends BaseDBEntity, EXTRA_KEYS extends Exclude<keyof IN, keyof BaseDBEntity> = Exclude<keyof IN, keyof BaseDBEntity>>(props: {
|
|
425
426
|
[K in EXTRA_KEYS]-?: BuilderFor<IN[K]>;
|
|
426
427
|
} & (ExactMatch<IN['id'], BaseDBEntity['id']> extends true ? {
|
|
427
428
|
id?: BuilderFor<BaseDBEntity['id']>;
|
|
@@ -456,18 +457,17 @@ type Expand<T> = {
|
|
|
456
457
|
type StripIndexSignatureDeep<T> = T extends readonly unknown[] ? T : T extends Record<string, any> ? {
|
|
457
458
|
[K in keyof T as string extends K ? never : number extends K ? never : symbol extends K ? never : K]: StripIndexSignatureDeep<T[K]>;
|
|
458
459
|
} : T;
|
|
459
|
-
type RelaxIndexSignature<T> = T extends readonly unknown[] ? T : T extends AnyObject ?
|
|
460
|
+
type RelaxIndexSignature<T> = T extends readonly unknown[] ? T : T extends AnyObject ? {
|
|
460
461
|
[K in keyof T]: RelaxIndexSignature<T[K]>;
|
|
461
462
|
} : T;
|
|
462
463
|
type Override<T, U> = Omit<T, keyof U> & U;
|
|
463
464
|
declare const allowExtraKeysSymbol: unique symbol;
|
|
464
|
-
type AllowExtraKeys<T> = T & {
|
|
465
|
-
readonly [allowExtraKeysSymbol]?: true;
|
|
466
|
-
};
|
|
467
465
|
type HasAllowExtraKeys<T> = T extends {
|
|
468
466
|
readonly [allowExtraKeysSymbol]?: true;
|
|
469
467
|
} ? true : false;
|
|
470
|
-
type
|
|
468
|
+
type IsAny<T> = 0 extends 1 & T ? true : false;
|
|
469
|
+
type IsAssignableRelaxed<A, B> = IsAny<RelaxIndexSignature<A>> extends true ? true : [RelaxIndexSignature<A>] extends [B] ? true : false;
|
|
470
|
+
type OptionalDbEntityFields<T> = T extends BaseDBEntity ? Omit<T, keyof BaseDBEntity> & Partial<Pick<T, keyof BaseDBEntity>> : T;
|
|
471
471
|
type ExactMatchBase<A, B> = (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2 ? (<T>() => T extends B ? 1 : 2) extends <T>() => T extends A ? 1 : 2 ? true : false : false;
|
|
472
472
|
type ExactMatch<A, B> = HasAllowExtraKeys<B> extends true ? IsAssignableRelaxed<B, A> : ExactMatchBase<Expand<A>, Expand<B>> extends true ? true : ExactMatchBase<Expand<StripIndexSignatureDeep<A>>, Expand<StripIndexSignatureDeep<B>>>;
|
|
473
473
|
type BuilderOutUnion<B extends readonly JsonSchemaAnyBuilder<any, any, any>[]> = {
|
|
@@ -138,6 +138,14 @@ export const j = {
|
|
|
138
138
|
},
|
|
139
139
|
};
|
|
140
140
|
},
|
|
141
|
+
literal(v) {
|
|
142
|
+
let baseType = 'other';
|
|
143
|
+
if (typeof v === 'string')
|
|
144
|
+
baseType = 'string';
|
|
145
|
+
if (typeof v === 'number')
|
|
146
|
+
baseType = 'number';
|
|
147
|
+
return new JsonSchemaEnumBuilder([v], baseType);
|
|
148
|
+
},
|
|
141
149
|
};
|
|
142
150
|
const TS_2500 = 16725225600; // 2500-01-01
|
|
143
151
|
const TS_2500_MILLIS = TS_2500 * 1000;
|
package/package.json
CHANGED
|
@@ -223,6 +223,13 @@ export const j = {
|
|
|
223
223
|
},
|
|
224
224
|
}
|
|
225
225
|
},
|
|
226
|
+
|
|
227
|
+
literal<const V extends string | number | boolean | null>(v: V) {
|
|
228
|
+
let baseType: EnumBaseType = 'other'
|
|
229
|
+
if (typeof v === 'string') baseType = 'string'
|
|
230
|
+
if (typeof v === 'number') baseType = 'number'
|
|
231
|
+
return new JsonSchemaEnumBuilder<V>([v], baseType)
|
|
232
|
+
},
|
|
226
233
|
}
|
|
227
234
|
|
|
228
235
|
const TS_2500 = 16725225600 // 2500-01-01
|
|
@@ -870,35 +877,33 @@ export class JsonSchemaObjectBuilder<
|
|
|
870
877
|
props: P,
|
|
871
878
|
): JsonSchemaObjectBuilder<
|
|
872
879
|
RelaxIndexSignature<
|
|
873
|
-
|
|
874
|
-
IN,
|
|
875
|
-
{
|
|
876
|
-
[K in keyof P]?: P[K] extends JsonSchemaAnyBuilder<infer IN2, any, any> ? IN2 : never
|
|
877
|
-
}
|
|
878
|
-
>
|
|
879
|
-
>,
|
|
880
|
-
AllowExtraKeys<
|
|
881
|
-
RelaxIndexSignature<
|
|
880
|
+
OptionalDbEntityFields<
|
|
882
881
|
Override<
|
|
883
|
-
|
|
882
|
+
IN,
|
|
884
883
|
{
|
|
885
|
-
|
|
886
|
-
[K in keyof P as P[K] extends JsonSchemaAnyBuilder<any, any, infer IsOpt>
|
|
887
|
-
? IsOpt extends true
|
|
888
|
-
? never
|
|
889
|
-
: K
|
|
890
|
-
: never]: P[K] extends JsonSchemaAnyBuilder<any, infer OUT2, any> ? OUT2 : never
|
|
891
|
-
} & {
|
|
892
|
-
// optional keys
|
|
893
|
-
[K in keyof P as P[K] extends JsonSchemaAnyBuilder<any, any, infer IsOpt>
|
|
894
|
-
? IsOpt extends true
|
|
895
|
-
? K
|
|
896
|
-
: never
|
|
897
|
-
: never]?: P[K] extends JsonSchemaAnyBuilder<any, infer OUT2, any> ? OUT2 : never
|
|
884
|
+
[K in keyof P]?: P[K] extends JsonSchemaAnyBuilder<infer IN2, any, any> ? IN2 : never
|
|
898
885
|
}
|
|
899
886
|
>
|
|
900
887
|
>
|
|
901
888
|
>,
|
|
889
|
+
Override<
|
|
890
|
+
OUT,
|
|
891
|
+
{
|
|
892
|
+
// required keys
|
|
893
|
+
[K in keyof P as P[K] extends JsonSchemaAnyBuilder<any, any, infer IsOpt>
|
|
894
|
+
? IsOpt extends true
|
|
895
|
+
? never
|
|
896
|
+
: K
|
|
897
|
+
: never]: P[K] extends JsonSchemaAnyBuilder<any, infer OUT2, any> ? OUT2 : never
|
|
898
|
+
} & {
|
|
899
|
+
// optional keys
|
|
900
|
+
[K in keyof P as P[K] extends JsonSchemaAnyBuilder<any, any, infer IsOpt>
|
|
901
|
+
? IsOpt extends true
|
|
902
|
+
? K
|
|
903
|
+
: never
|
|
904
|
+
: never]?: P[K] extends JsonSchemaAnyBuilder<any, infer OUT2, any> ? OUT2 : never
|
|
905
|
+
}
|
|
906
|
+
>,
|
|
902
907
|
false
|
|
903
908
|
> {
|
|
904
909
|
const newBuilder = new JsonSchemaObjectBuilder()
|
|
@@ -1299,7 +1304,7 @@ function objectInfer<P extends Record<string, JsonSchemaAnyBuilder<any, any, any
|
|
|
1299
1304
|
|
|
1300
1305
|
function objectDbEntity(props: AnyObject): never
|
|
1301
1306
|
function objectDbEntity<
|
|
1302
|
-
IN extends BaseDBEntity
|
|
1307
|
+
IN extends BaseDBEntity,
|
|
1303
1308
|
EXTRA_KEYS extends Exclude<keyof IN, keyof BaseDBEntity> = Exclude<keyof IN, keyof BaseDBEntity>,
|
|
1304
1309
|
>(
|
|
1305
1310
|
props: {
|
|
@@ -1462,20 +1467,27 @@ type StripIndexSignatureDeep<T> = T extends readonly unknown[]
|
|
|
1462
1467
|
type RelaxIndexSignature<T> = T extends readonly unknown[]
|
|
1463
1468
|
? T
|
|
1464
1469
|
: T extends AnyObject
|
|
1465
|
-
?
|
|
1466
|
-
? any
|
|
1467
|
-
: { [K in keyof T]: RelaxIndexSignature<T[K]> }
|
|
1470
|
+
? { [K in keyof T]: RelaxIndexSignature<T[K]> }
|
|
1468
1471
|
: T
|
|
1469
1472
|
|
|
1470
1473
|
type Override<T, U> = Omit<T, keyof U> & U
|
|
1471
1474
|
|
|
1472
1475
|
declare const allowExtraKeysSymbol: unique symbol
|
|
1473
1476
|
|
|
1474
|
-
type AllowExtraKeys<T> = T & { readonly [allowExtraKeysSymbol]?: true }
|
|
1475
|
-
|
|
1476
1477
|
type HasAllowExtraKeys<T> = T extends { readonly [allowExtraKeysSymbol]?: true } ? true : false
|
|
1477
1478
|
|
|
1478
|
-
type
|
|
1479
|
+
type IsAny<T> = 0 extends 1 & T ? true : false
|
|
1480
|
+
|
|
1481
|
+
type IsAssignableRelaxed<A, B> =
|
|
1482
|
+
IsAny<RelaxIndexSignature<A>> extends true
|
|
1483
|
+
? true
|
|
1484
|
+
: [RelaxIndexSignature<A>] extends [B]
|
|
1485
|
+
? true
|
|
1486
|
+
: false
|
|
1487
|
+
|
|
1488
|
+
type OptionalDbEntityFields<T> = T extends BaseDBEntity
|
|
1489
|
+
? Omit<T, keyof BaseDBEntity> & Partial<Pick<T, keyof BaseDBEntity>>
|
|
1490
|
+
: T
|
|
1479
1491
|
|
|
1480
1492
|
type ExactMatchBase<A, B> =
|
|
1481
1493
|
(<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2
|