@naturalcycles/nodejs-lib 15.78.1 → 15.78.2

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.
@@ -248,13 +248,13 @@ export declare class JsonSchemaObjectBuilder<IN extends AnyObject, OUT extends A
248
248
  * When set, the validation will not strip away properties that are not specified explicitly in the schema.
249
249
  */
250
250
  allowAdditionalProperties(): this;
251
- extend<P extends Record<string, JsonSchemaAnyBuilder<any, any, any>>>(props: P): JsonSchemaObjectBuilder<RelaxIndexSignature<Override<IN, {
251
+ extend<P extends Record<string, JsonSchemaAnyBuilder<any, any, any>>>(props: P): JsonSchemaObjectBuilder<RelaxIndexSignature<OptionalDbEntityFields<Override<IN, {
252
252
  [K in keyof P]?: P[K] extends JsonSchemaAnyBuilder<infer IN2, any, any> ? IN2 : never;
253
- }>>, AllowExtraKeys<RelaxIndexSignature<Override<OUT, {
253
+ }>>>, Override<OUT, {
254
254
  [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
255
  } & {
256
256
  [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
- }>>>, false>;
257
+ }>, false>;
258
258
  /**
259
259
  * Concatenates another schema to the current schema.
260
260
  *
@@ -277,15 +277,15 @@ export declare class JsonSchemaObjectBuilder<IN extends AnyObject, OUT extends A
277
277
  /**
278
278
  * Extends the current schema with `id`, `created` and `updated` according to NC DB conventions.
279
279
  */
280
- dbEntity(): JsonSchemaObjectBuilder<RelaxIndexSignature<Override<IN, {
280
+ dbEntity(): JsonSchemaObjectBuilder<RelaxIndexSignature<OptionalDbEntityFields<Override<IN, {
281
281
  id?: string | undefined;
282
282
  created?: any;
283
283
  updated?: any;
284
- }>>, AllowExtraKeys<RelaxIndexSignature<Override<OUT, {
284
+ }>>>, Override<OUT, {
285
285
  id: string;
286
286
  created: any;
287
287
  updated: any;
288
- } & {}>>>, false>;
288
+ } & {}>, false>;
289
289
  minProperties(minProperties: number): this;
290
290
  maxProperties(maxProperties: number): this;
291
291
  exclusiveProperties(propNames: readonly (keyof IN & string)[]): this;
@@ -421,7 +421,7 @@ declare function object<IN extends AnyObject>(props: {
421
421
  }): JsonSchemaObjectBuilder<IN, IN, false>;
422
422
  declare function objectInfer<P extends Record<string, JsonSchemaAnyBuilder<any, any, any>>>(props: P): JsonSchemaObjectInferringBuilder<P, false>;
423
423
  declare function objectDbEntity(props: AnyObject): never;
424
- declare function objectDbEntity<IN extends BaseDBEntity & AnyObject, EXTRA_KEYS extends Exclude<keyof IN, keyof BaseDBEntity> = Exclude<keyof IN, keyof BaseDBEntity>>(props: {
424
+ declare function objectDbEntity<IN extends BaseDBEntity, EXTRA_KEYS extends Exclude<keyof IN, keyof BaseDBEntity> = Exclude<keyof IN, keyof BaseDBEntity>>(props: {
425
425
  [K in EXTRA_KEYS]-?: BuilderFor<IN[K]>;
426
426
  } & (ExactMatch<IN['id'], BaseDBEntity['id']> extends true ? {
427
427
  id?: BuilderFor<BaseDBEntity['id']>;
@@ -456,18 +456,17 @@ type Expand<T> = {
456
456
  type StripIndexSignatureDeep<T> = T extends readonly unknown[] ? T : T extends Record<string, any> ? {
457
457
  [K in keyof T as string extends K ? never : number extends K ? never : symbol extends K ? never : K]: StripIndexSignatureDeep<T[K]>;
458
458
  } : T;
459
- type RelaxIndexSignature<T> = T extends readonly unknown[] ? T : T extends AnyObject ? string extends keyof T ? any : {
459
+ type RelaxIndexSignature<T> = T extends readonly unknown[] ? T : T extends AnyObject ? {
460
460
  [K in keyof T]: RelaxIndexSignature<T[K]>;
461
461
  } : T;
462
462
  type Override<T, U> = Omit<T, keyof U> & U;
463
463
  declare const allowExtraKeysSymbol: unique symbol;
464
- type AllowExtraKeys<T> = T & {
465
- readonly [allowExtraKeysSymbol]?: true;
466
- };
467
464
  type HasAllowExtraKeys<T> = T extends {
468
465
  readonly [allowExtraKeysSymbol]?: true;
469
466
  } ? true : false;
470
- type IsAssignableRelaxed<A, B> = [RelaxIndexSignature<A>] extends [B] ? true : false;
467
+ type IsAny<T> = 0 extends 1 & T ? true : false;
468
+ type IsAssignableRelaxed<A, B> = IsAny<RelaxIndexSignature<A>> extends true ? true : [RelaxIndexSignature<A>] extends [B] ? true : false;
469
+ type OptionalDbEntityFields<T> = T extends BaseDBEntity ? Omit<T, keyof BaseDBEntity> & Partial<Pick<T, keyof BaseDBEntity>> : T;
471
470
  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
471
  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
472
  type BuilderOutUnion<B extends readonly JsonSchemaAnyBuilder<any, any, any>[]> = {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@naturalcycles/nodejs-lib",
3
3
  "type": "module",
4
- "version": "15.78.1",
4
+ "version": "15.78.2",
5
5
  "dependencies": {
6
6
  "@naturalcycles/js-lib": "^15",
7
7
  "@types/js-yaml": "^4",
@@ -870,35 +870,33 @@ export class JsonSchemaObjectBuilder<
870
870
  props: P,
871
871
  ): JsonSchemaObjectBuilder<
872
872
  RelaxIndexSignature<
873
- Override<
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<
873
+ OptionalDbEntityFields<
882
874
  Override<
883
- OUT,
875
+ IN,
884
876
  {
885
- // required keys
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
877
+ [K in keyof P]?: P[K] extends JsonSchemaAnyBuilder<infer IN2, any, any> ? IN2 : never
898
878
  }
899
879
  >
900
880
  >
901
881
  >,
882
+ Override<
883
+ OUT,
884
+ {
885
+ // required keys
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
898
+ }
899
+ >,
902
900
  false
903
901
  > {
904
902
  const newBuilder = new JsonSchemaObjectBuilder()
@@ -1299,7 +1297,7 @@ function objectInfer<P extends Record<string, JsonSchemaAnyBuilder<any, any, any
1299
1297
 
1300
1298
  function objectDbEntity(props: AnyObject): never
1301
1299
  function objectDbEntity<
1302
- IN extends BaseDBEntity & AnyObject,
1300
+ IN extends BaseDBEntity,
1303
1301
  EXTRA_KEYS extends Exclude<keyof IN, keyof BaseDBEntity> = Exclude<keyof IN, keyof BaseDBEntity>,
1304
1302
  >(
1305
1303
  props: {
@@ -1462,20 +1460,27 @@ type StripIndexSignatureDeep<T> = T extends readonly unknown[]
1462
1460
  type RelaxIndexSignature<T> = T extends readonly unknown[]
1463
1461
  ? T
1464
1462
  : T extends AnyObject
1465
- ? string extends keyof T
1466
- ? any
1467
- : { [K in keyof T]: RelaxIndexSignature<T[K]> }
1463
+ ? { [K in keyof T]: RelaxIndexSignature<T[K]> }
1468
1464
  : T
1469
1465
 
1470
1466
  type Override<T, U> = Omit<T, keyof U> & U
1471
1467
 
1472
1468
  declare const allowExtraKeysSymbol: unique symbol
1473
1469
 
1474
- type AllowExtraKeys<T> = T & { readonly [allowExtraKeysSymbol]?: true }
1475
-
1476
1470
  type HasAllowExtraKeys<T> = T extends { readonly [allowExtraKeysSymbol]?: true } ? true : false
1477
1471
 
1478
- type IsAssignableRelaxed<A, B> = [RelaxIndexSignature<A>] extends [B] ? true : false
1472
+ type IsAny<T> = 0 extends 1 & T ? true : false
1473
+
1474
+ type IsAssignableRelaxed<A, B> =
1475
+ IsAny<RelaxIndexSignature<A>> extends true
1476
+ ? true
1477
+ : [RelaxIndexSignature<A>] extends [B]
1478
+ ? true
1479
+ : false
1480
+
1481
+ type OptionalDbEntityFields<T> = T extends BaseDBEntity
1482
+ ? Omit<T, keyof BaseDBEntity> & Partial<Pick<T, keyof BaseDBEntity>>
1483
+ : T
1479
1484
 
1480
1485
  type ExactMatchBase<A, B> =
1481
1486
  (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2