@naturalcycles/nodejs-lib 15.78.0 → 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<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<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<IN & {
280
+ dbEntity(): JsonSchemaObjectBuilder<RelaxIndexSignature<OptionalDbEntityFields<Override<IN, {
281
281
  id?: string | undefined;
282
282
  created?: any;
283
283
  updated?: any;
284
- }>, AllowExtraKeys<RelaxIndexSignature<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,17 +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
+ type Override<T, U> = Omit<T, keyof U> & U;
462
463
  declare const allowExtraKeysSymbol: unique symbol;
463
- type AllowExtraKeys<T> = T & {
464
- readonly [allowExtraKeysSymbol]?: true;
465
- };
466
464
  type HasAllowExtraKeys<T> = T extends {
467
465
  readonly [allowExtraKeysSymbol]?: true;
468
466
  } ? true : false;
469
- 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;
470
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;
471
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>>>;
472
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.0",
4
+ "version": "15.78.2",
5
5
  "dependencies": {
6
6
  "@naturalcycles/js-lib": "^15",
7
7
  "@types/js-yaml": "^4",
@@ -870,29 +870,33 @@ export class JsonSchemaObjectBuilder<
870
870
  props: P,
871
871
  ): JsonSchemaObjectBuilder<
872
872
  RelaxIndexSignature<
873
- IN & {
874
- [K in keyof P]?: P[K] extends JsonSchemaAnyBuilder<infer IN2, any, any> ? IN2 : never
875
- }
876
- >,
877
- AllowExtraKeys<
878
- RelaxIndexSignature<
879
- OUT & {
880
- // required keys
881
- [K in keyof P as P[K] extends JsonSchemaAnyBuilder<any, any, infer IsOpt>
882
- ? IsOpt extends true
883
- ? never
884
- : K
885
- : never]: P[K] extends JsonSchemaAnyBuilder<any, infer OUT2, any> ? OUT2 : never
886
- } & {
887
- // optional keys
888
- [K in keyof P as P[K] extends JsonSchemaAnyBuilder<any, any, infer IsOpt>
889
- ? IsOpt extends true
890
- ? K
891
- : never
892
- : never]?: P[K] extends JsonSchemaAnyBuilder<any, infer OUT2, any> ? OUT2 : never
893
- }
873
+ OptionalDbEntityFields<
874
+ Override<
875
+ IN,
876
+ {
877
+ [K in keyof P]?: P[K] extends JsonSchemaAnyBuilder<infer IN2, any, any> ? IN2 : never
878
+ }
879
+ >
894
880
  >
895
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
+ >,
896
900
  false
897
901
  > {
898
902
  const newBuilder = new JsonSchemaObjectBuilder()
@@ -1293,7 +1297,7 @@ function objectInfer<P extends Record<string, JsonSchemaAnyBuilder<any, any, any
1293
1297
 
1294
1298
  function objectDbEntity(props: AnyObject): never
1295
1299
  function objectDbEntity<
1296
- IN extends BaseDBEntity & AnyObject,
1300
+ IN extends BaseDBEntity,
1297
1301
  EXTRA_KEYS extends Exclude<keyof IN, keyof BaseDBEntity> = Exclude<keyof IN, keyof BaseDBEntity>,
1298
1302
  >(
1299
1303
  props: {
@@ -1456,18 +1460,27 @@ type StripIndexSignatureDeep<T> = T extends readonly unknown[]
1456
1460
  type RelaxIndexSignature<T> = T extends readonly unknown[]
1457
1461
  ? T
1458
1462
  : T extends AnyObject
1459
- ? string extends keyof T
1460
- ? any
1461
- : { [K in keyof T]: RelaxIndexSignature<T[K]> }
1463
+ ? { [K in keyof T]: RelaxIndexSignature<T[K]> }
1462
1464
  : T
1463
1465
 
1464
- declare const allowExtraKeysSymbol: unique symbol
1466
+ type Override<T, U> = Omit<T, keyof U> & U
1465
1467
 
1466
- type AllowExtraKeys<T> = T & { readonly [allowExtraKeysSymbol]?: true }
1468
+ declare const allowExtraKeysSymbol: unique symbol
1467
1469
 
1468
1470
  type HasAllowExtraKeys<T> = T extends { readonly [allowExtraKeysSymbol]?: true } ? true : false
1469
1471
 
1470
- 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
1471
1484
 
1472
1485
  type ExactMatchBase<A, B> =
1473
1486
  (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2