@naturalcycles/nodejs-lib 15.46.0 → 15.46.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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Set2 } from '@naturalcycles/js-lib/object';
|
|
2
|
-
import { type AnyObject, type IANATimezone, type Inclusiveness, type IsoDate, type IsoDateTime, type NumberEnum, type StringEnum, type StringMap, type UnixTimestamp, type UnixTimestampMillis } from '@naturalcycles/js-lib/types';
|
|
2
|
+
import { type AnyObject, type BaseDBEntity, type IANATimezone, type Inclusiveness, type IsoDate, type IsoDateTime, type NumberEnum, type StringEnum, type StringMap, type UnixTimestamp, type UnixTimestampMillis } from '@naturalcycles/js-lib/types';
|
|
3
3
|
export declare const j: {
|
|
4
4
|
string(): JsonSchemaStringBuilder<string, string, false>;
|
|
5
5
|
number(): JsonSchemaNumberBuilder<number, number, false>;
|
|
@@ -252,21 +252,33 @@ declare function object<IN extends AnyObject>(props: {
|
|
|
252
252
|
[key in keyof IN]: JsonSchemaAnyBuilder<any, IN[key], any>;
|
|
253
253
|
}): JsonSchemaObjectBuilder<IN, IN, false>;
|
|
254
254
|
declare function objectInfer<P extends Record<string, JsonSchemaAnyBuilder<any, any, any>>>(props: P): JsonSchemaObjectInferringBuilder<P, false>;
|
|
255
|
-
declare function objectDbEntity(props
|
|
256
|
-
declare function objectDbEntity<IN extends AnyObject>(props
|
|
257
|
-
[
|
|
258
|
-
}
|
|
255
|
+
declare function objectDbEntity(props: AnyObject): never;
|
|
256
|
+
declare function objectDbEntity<IN extends BaseDBEntity & AnyObject, EXTRA_KEYS extends Exclude<keyof IN, keyof BaseDBEntity> = Exclude<keyof IN, keyof BaseDBEntity>>(props: {
|
|
257
|
+
[K in EXTRA_KEYS]-?: BuilderFor<IN[K]>;
|
|
258
|
+
} & (ExactMatch<IN['id'], BaseDBEntity['id']> extends true ? {
|
|
259
|
+
id?: BuilderFor<BaseDBEntity['id']>;
|
|
260
|
+
} : {
|
|
261
|
+
id: BuilderFor<IN['id']>;
|
|
262
|
+
}) & (ExactMatch<IN['created'], BaseDBEntity['created']> extends true ? {
|
|
263
|
+
created?: BuilderFor<BaseDBEntity['created']>;
|
|
264
|
+
} : {
|
|
265
|
+
created: BuilderFor<IN['created']>;
|
|
266
|
+
}) & (ExactMatch<IN['updated'], BaseDBEntity['updated']> extends true ? {
|
|
267
|
+
updated?: BuilderFor<BaseDBEntity['updated']>;
|
|
268
|
+
} : {
|
|
269
|
+
updated: BuilderFor<IN['updated']>;
|
|
270
|
+
})): JsonSchemaObjectBuilder<IN, IN, false>;
|
|
259
271
|
type Expand<T> = T extends infer O ? {
|
|
260
272
|
[K in keyof O]: O[K];
|
|
261
273
|
} : never;
|
|
262
274
|
type ExactMatch<A, B> = (<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2 ? true : false;
|
|
263
|
-
type PartiallyOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
264
275
|
type BuilderOutUnion<B extends readonly JsonSchemaAnyBuilder<any, any, any>[]> = {
|
|
265
276
|
[K in keyof B]: B[K] extends JsonSchemaAnyBuilder<any, infer O, any> ? O : never;
|
|
266
277
|
}[number];
|
|
267
278
|
type BuilderInUnion<B extends readonly JsonSchemaAnyBuilder<any, any, any>[]> = {
|
|
268
279
|
[K in keyof B]: B[K] extends JsonSchemaAnyBuilder<infer I, any, any> ? I : never;
|
|
269
280
|
}[number];
|
|
281
|
+
type BuilderFor<T> = JsonSchemaAnyBuilder<any, T, any>;
|
|
270
282
|
interface JsonBuilderRuleOpt {
|
|
271
283
|
/**
|
|
272
284
|
* Text of error message to return when the validation fails for the given rule:
|
package/package.json
CHANGED
|
@@ -13,6 +13,7 @@ import type { Set2 } from '@naturalcycles/js-lib/object'
|
|
|
13
13
|
import { _deepCopy, _sortObject } from '@naturalcycles/js-lib/object'
|
|
14
14
|
import {
|
|
15
15
|
type AnyObject,
|
|
16
|
+
type BaseDBEntity,
|
|
16
17
|
type IANATimezone,
|
|
17
18
|
type Inclusiveness,
|
|
18
19
|
type IsoDate,
|
|
@@ -888,22 +889,28 @@ function objectInfer<P extends Record<string, JsonSchemaAnyBuilder<any, any, any
|
|
|
888
889
|
return new JsonSchemaObjectInferringBuilder<P, false>(props)
|
|
889
890
|
}
|
|
890
891
|
|
|
891
|
-
function objectDbEntity(props
|
|
892
|
-
function objectDbEntity<
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
892
|
+
function objectDbEntity(props: AnyObject): never
|
|
893
|
+
function objectDbEntity<
|
|
894
|
+
IN extends BaseDBEntity & AnyObject,
|
|
895
|
+
EXTRA_KEYS extends Exclude<keyof IN, keyof BaseDBEntity> = Exclude<keyof IN, keyof BaseDBEntity>,
|
|
896
|
+
>(
|
|
897
|
+
props: {
|
|
898
|
+
// ✅ all non-system fields must be explicitly provided
|
|
899
|
+
[K in EXTRA_KEYS]-?: BuilderFor<IN[K]>
|
|
900
|
+
} &
|
|
901
|
+
// ✅ if `id` differs, it’s required
|
|
902
|
+
(ExactMatch<IN['id'], BaseDBEntity['id']> extends true
|
|
903
|
+
? { id?: BuilderFor<BaseDBEntity['id']> }
|
|
904
|
+
: { id: BuilderFor<IN['id']> }) &
|
|
905
|
+
(ExactMatch<IN['created'], BaseDBEntity['created']> extends true
|
|
906
|
+
? { created?: BuilderFor<BaseDBEntity['created']> }
|
|
907
|
+
: { created: BuilderFor<IN['created']> }) &
|
|
908
|
+
(ExactMatch<IN['updated'], BaseDBEntity['updated']> extends true
|
|
909
|
+
? { updated?: BuilderFor<BaseDBEntity['updated']> }
|
|
910
|
+
: { updated: BuilderFor<IN['updated']> }),
|
|
911
|
+
): JsonSchemaObjectBuilder<IN, IN, false>
|
|
912
|
+
|
|
913
|
+
function objectDbEntity(props: AnyObject): any {
|
|
907
914
|
return j.object({
|
|
908
915
|
id: j.string(),
|
|
909
916
|
created: j.number().unixTimestamp2000(),
|
|
@@ -917,8 +924,6 @@ type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never
|
|
|
917
924
|
type ExactMatch<A, B> =
|
|
918
925
|
(<T>() => T extends A ? 1 : 2) extends <T>() => T extends B ? 1 : 2 ? true : false
|
|
919
926
|
|
|
920
|
-
type PartiallyOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>
|
|
921
|
-
|
|
922
927
|
type BuilderOutUnion<B extends readonly JsonSchemaAnyBuilder<any, any, any>[]> = {
|
|
923
928
|
[K in keyof B]: B[K] extends JsonSchemaAnyBuilder<any, infer O, any> ? O : never
|
|
924
929
|
}[number]
|
|
@@ -927,6 +932,8 @@ type BuilderInUnion<B extends readonly JsonSchemaAnyBuilder<any, any, any>[]> =
|
|
|
927
932
|
[K in keyof B]: B[K] extends JsonSchemaAnyBuilder<infer I, any, any> ? I : never
|
|
928
933
|
}[number]
|
|
929
934
|
|
|
935
|
+
type BuilderFor<T> = JsonSchemaAnyBuilder<any, T, any>
|
|
936
|
+
|
|
930
937
|
interface JsonBuilderRuleOpt {
|
|
931
938
|
/**
|
|
932
939
|
* Text of error message to return when the validation fails for the given rule:
|