tsondb 0.12.6 → 0.12.7
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.
- package/dist/src/node/schema/declarations/EntityDecl.d.ts +9 -7
- package/dist/src/node/schema/declarations/EntityDecl.js +2 -2
- package/dist/src/node/schema/declarations/EnumDecl.d.ts +2 -0
- package/dist/src/node/schema/declarations/EnumDecl.js +2 -0
- package/dist/src/node/schema/types/Type.d.ts +20 -6
- package/dist/src/node/utils/displayName.js +1 -0
- package/dist/src/shared/schema/declarations/EntityDecl.d.ts +13 -9
- package/dist/src/shared/utils/object.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,28 +1,30 @@
|
|
|
1
1
|
import { Lazy } from "../../../shared/utils/lazy.ts";
|
|
2
|
-
import type { Leaves } from "../../../shared/utils/object.ts";
|
|
3
2
|
import type { DisplayNameCustomizer } from "../../utils/displayName.ts";
|
|
4
|
-
import type { GetNestedDeclarations, GetReferences, Predicate,
|
|
3
|
+
import type { GetNestedDeclarations, GetReferences, Predicate, Serialized, TypeArgumentsResolver, Validator } from "../Node.ts";
|
|
5
4
|
import { NodeKind } from "../Node.ts";
|
|
6
5
|
import type { MemberDecl, ObjectType } from "../types/generic/ObjectType.ts";
|
|
7
6
|
import { StringType } from "../types/primitives/StringType.ts";
|
|
8
|
-
import type {
|
|
7
|
+
import type { NestedEntityMapType } from "../types/references/NestedEntityMapType.ts";
|
|
9
8
|
import type { BaseDecl } from "./Declaration.ts";
|
|
10
9
|
import { TypeAliasDecl } from "./TypeAliasDecl.ts";
|
|
11
10
|
export type GenericEntityDisplayName = string | {
|
|
12
11
|
pathToLocaleMap?: string;
|
|
13
12
|
pathInLocaleMap?: string;
|
|
14
13
|
} | null;
|
|
15
|
-
export type EntityDisplayName<T extends TConstraint> =
|
|
14
|
+
export type EntityDisplayName<T extends TConstraint> = PathTo<T, StringType> | {
|
|
16
15
|
/**
|
|
17
16
|
* @default "translations"
|
|
18
17
|
*/
|
|
19
|
-
pathToLocaleMap?:
|
|
18
|
+
pathToLocaleMap?: PathTo<T, NestedEntityMapType>;
|
|
20
19
|
/**
|
|
21
20
|
* @default "name"
|
|
22
21
|
*/
|
|
23
22
|
pathInLocaleMap?: string;
|
|
24
23
|
} | null;
|
|
25
24
|
type TConstraint = Record<string, MemberDecl>;
|
|
25
|
+
type PathTo<T extends TConstraint, R> = {
|
|
26
|
+
[K in keyof T]: T[K] extends MemberDecl<infer V> ? V extends R ? K : R extends V ? string : T[K] extends ObjectType<infer P> ? `${Extract<K, string>}.${PathTo<P, R>}` : never : never;
|
|
27
|
+
}[Extract<keyof T, string>];
|
|
26
28
|
export interface EntityDecl<Name extends string = string, T extends TConstraint = TConstraint, FK extends Extract<keyof T, string> | undefined = Extract<keyof T, string> | undefined> extends BaseDecl<Name, []> {
|
|
27
29
|
kind: NodeKind["EntityDecl"];
|
|
28
30
|
namePlural: string;
|
|
@@ -31,7 +33,7 @@ export interface EntityDecl<Name extends string = string, T extends TConstraint
|
|
|
31
33
|
/**
|
|
32
34
|
* @default "name"
|
|
33
35
|
*/
|
|
34
|
-
displayName?:
|
|
36
|
+
displayName?: GenericEntityDisplayName;
|
|
35
37
|
displayNameCustomizer?: DisplayNameCustomizer<ObjectType<T>>;
|
|
36
38
|
isDeprecated?: boolean;
|
|
37
39
|
}
|
|
@@ -75,5 +77,5 @@ export declare const addEphemeralUUIDToType: <T extends TConstraint>(decl: Entit
|
|
|
75
77
|
}>;
|
|
76
78
|
export declare const createEntityIdentifierType: () => StringType;
|
|
77
79
|
export declare const createEntityIdentifierTypeAsDecl: <Name extends string>(decl: EntityDecl<Name>) => TypeAliasDecl<`${Name}_ID`, StringType, []>;
|
|
78
|
-
export declare const serializeEntityDecl:
|
|
80
|
+
export declare const serializeEntityDecl: <Name extends string, T extends TConstraint, FK extends Extract<keyof T, string> | undefined>(type: EntityDecl<Name, T, FK>) => Serialized<EntityDecl<Name, T, FK>>;
|
|
79
81
|
export declare const getReferencesForEntityDecl: GetReferences<EntityDecl>;
|
|
@@ -49,12 +49,12 @@ export const createEntityIdentifierTypeAsDecl = (decl) => TypeAliasDecl(decl.sou
|
|
|
49
49
|
name: (decl.name + "_ID"),
|
|
50
50
|
type: createEntityIdentifierType,
|
|
51
51
|
});
|
|
52
|
-
export const serializeEntityDecl = (type) => ({
|
|
52
|
+
export const serializeEntityDecl = ((type) => ({
|
|
53
53
|
...type,
|
|
54
54
|
type: serializeObjectType(type.type.value),
|
|
55
55
|
displayName: typeof type.displayName === "function"
|
|
56
56
|
? null
|
|
57
57
|
: type.displayName,
|
|
58
58
|
displayNameCustomizer: type.displayNameCustomizer !== undefined,
|
|
59
|
-
});
|
|
59
|
+
}));
|
|
60
60
|
export const getReferencesForEntityDecl = (decl, value, inDecl) => getReferencesForObjectType(decl.type.value, value, [...inDecl, decl]);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type EnumValue } from "../../../shared/schema/declarations/EnumDecl.ts";
|
|
1
2
|
import { Lazy } from "../../../shared/utils/lazy.ts";
|
|
2
3
|
import type { GetNestedDeclarations, GetReferences, Predicate, Serializer, TypeArgumentsResolver, ValidatorOfParamDecl } from "../Node.ts";
|
|
3
4
|
import { NodeKind } from "../Node.ts";
|
|
@@ -33,3 +34,4 @@ export declare const resolveTypeArgumentsInEnumDecl: TypeArgumentsResolver<EnumD
|
|
|
33
34
|
export declare const serializeEnumDecl: Serializer<EnumDecl>;
|
|
34
35
|
export declare const getReferencesForEnumDecl: GetReferences<EnumDecl>;
|
|
35
36
|
export declare const cases: <T extends TConstraint>(decl: EnumDecl<string, T>) => EnumCaseDecl<T[keyof T]["type"]>[];
|
|
37
|
+
export declare const getAnyEnumCaseValue: <K extends string, V>(enumValue: { [Key in K]: EnumValue<Key, V>; }[K]) => V;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ENUM_DISCRIMINATOR_KEY, } from "../../../shared/schema/declarations/EnumDecl.js";
|
|
1
2
|
import { Lazy } from "../../../shared/utils/lazy.js";
|
|
2
3
|
import { onlyKeys } from "../../../shared/utils/object.js";
|
|
3
4
|
import { NodeKind } from "../Node.js";
|
|
@@ -46,3 +47,4 @@ export const serializeEnumDecl = decl => ({
|
|
|
46
47
|
});
|
|
47
48
|
export const getReferencesForEnumDecl = (decl, value, inDecl) => getReferencesForEnumType(decl.type.value, value, [...inDecl, decl]);
|
|
48
49
|
export const cases = (decl) => Object.values(decl.type.value.values);
|
|
50
|
+
export const getAnyEnumCaseValue = (enumValue) => enumValue[enumValue[ENUM_DISCRIMINATOR_KEY]];
|
|
@@ -25,14 +25,28 @@ type EnumCaseTypeAsType<Case extends string, T extends Type | null> = T extends
|
|
|
25
25
|
} : {
|
|
26
26
|
kind: Case;
|
|
27
27
|
};
|
|
28
|
-
|
|
28
|
+
type EnumCaseTypeAsDeepType<Case extends string, T extends Type | null> = T extends object ? {
|
|
29
|
+
kind: Case;
|
|
30
|
+
} & {
|
|
31
|
+
[AV in Case]: AsDeepType<T>;
|
|
32
|
+
} : {
|
|
33
|
+
kind: Case;
|
|
34
|
+
};
|
|
35
|
+
type MemberDeclsAsType<P extends Record<string, MemberDecl>> = {
|
|
29
36
|
[K in keyof P]: P[K] extends MemberDecl<Type, true> ? AsType<P[K]["type"]> : AsType<P[K]["type"]> | undefined;
|
|
30
|
-
}
|
|
31
|
-
|
|
37
|
+
};
|
|
38
|
+
type MemberDeclsAsDeepType<P extends Record<string, MemberDecl>> = {
|
|
39
|
+
[K in keyof P]: P[K] extends MemberDecl<Type, true> ? AsDeepType<P[K]["type"]> : // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -- it does make a difference here
|
|
40
|
+
AsDeepType<P[K]["type"]> | undefined;
|
|
41
|
+
};
|
|
42
|
+
export type AsDeepType<T extends Type> = T extends ArrayType<infer I> ? AsDeepType<I>[] : T extends ObjectType<infer P> ? MemberDeclsAsDeepType<P> : T extends BooleanType ? boolean : T extends DateType ? Date : T extends FloatType ? number : T extends IntegerType ? number : T extends StringType ? string : T extends TypeArgumentType ? unknown : T extends IncludeIdentifierType<TypeParameter[], infer Decl> ? Decl extends TypeAliasDecl<string, infer TA> ? AsDeepType<TA> : Decl extends EnumDecl<string, infer EC> ? AsDeepType<EnumType<EC>> : unknown : T extends NestedEntityMapType<string, infer TC> ? {
|
|
43
|
+
[id: string]: MemberDeclsAsDeepType<TC>;
|
|
44
|
+
} : T extends ReferenceIdentifierType ? string : T extends ChildEntitiesType ? never : T extends EnumType<infer EC> ? EC extends Record<string, EnumCaseDecl> ? {
|
|
45
|
+
[Case in keyof EC]: EnumCaseTypeAsDeepType<Case & string, EC[Case]["type"]>;
|
|
32
46
|
}[keyof EC] : never : never;
|
|
33
|
-
export type AsType<T extends Type> = T extends ArrayType<infer I> ? AsType<I>[] : T extends ObjectType<infer P> ? {
|
|
34
|
-
[
|
|
35
|
-
} : T extends
|
|
47
|
+
export type AsType<T extends Type> = T extends ArrayType<infer I> ? AsType<I>[] : T extends ObjectType<infer P> ? MemberDeclsAsType<P> : T extends BooleanType ? boolean : T extends DateType ? Date : T extends FloatType ? number : T extends IntegerType ? number : T extends StringType ? string : T extends TypeArgumentType ? unknown : T extends IncludeIdentifierType ? unknown : T extends NestedEntityMapType<string, infer TC> ? {
|
|
48
|
+
[id: string]: MemberDeclsAsType<TC>;
|
|
49
|
+
} : T extends ReferenceIdentifierType ? string : T extends ChildEntitiesType ? string[] : T extends EnumType<infer EC> ? EC extends Record<string, EnumCaseDecl> ? {
|
|
36
50
|
[Case in keyof EC]: EnumCaseTypeAsType<Case & string, EC[Case]["type"]>;
|
|
37
51
|
}[keyof EC] : never : never;
|
|
38
52
|
export type AsNode<T> = T extends (infer I)[] ? ArrayType<AsNode<I>> : T extends Record<string, unknown> ? ObjectType<{
|
|
@@ -4,6 +4,7 @@ export const getDisplayNameFromEntityInstance = (entity, instanceContainer, getI
|
|
|
4
4
|
if (useCustomizer && entity.displayNameCustomizer) {
|
|
5
5
|
const calculatedName = getDisplayNameFromEntityInstance(entity, instanceContainer, getInstanceById, getChildInstancesForInstanceId, locales, defaultName, false);
|
|
6
6
|
return entity.displayNameCustomizer({
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment -- otherwise type instiatiation too deep
|
|
7
8
|
instance: instanceContainer.content,
|
|
8
9
|
instanceId: instanceContainer.id,
|
|
9
10
|
instanceDisplayName: calculatedName.name,
|
|
@@ -1,20 +1,24 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { GenericEntityDisplayName } from "../../../node/schema/index.ts";
|
|
2
2
|
import { NodeKind, type GetReferencesSerialized, type SerializedNode, type SerializedTypeArgumentsResolver } from "../Node.ts";
|
|
3
|
+
import type { SerializedNestedEntityMapType } from "../types/NestedEntityMapType.ts";
|
|
3
4
|
import { type SerializedMemberDecl, type SerializedObjectType } from "../types/ObjectType.ts";
|
|
4
|
-
import type {
|
|
5
|
+
import type { SerializedStringType } from "../types/StringType.ts";
|
|
5
6
|
import type { SerializedBaseDecl } from "./Declaration.ts";
|
|
6
|
-
export type SerializedEntityDisplayName<T extends
|
|
7
|
+
export type SerializedEntityDisplayName<T extends TSerializedConstraint> = SerializedPathTo<T, SerializedStringType> | {
|
|
7
8
|
/**
|
|
8
9
|
* @default "translations"
|
|
9
10
|
*/
|
|
10
|
-
pathToLocaleMap?:
|
|
11
|
+
pathToLocaleMap?: SerializedPathTo<T, SerializedNestedEntityMapType>;
|
|
11
12
|
/**
|
|
12
13
|
* @default "name"
|
|
13
14
|
*/
|
|
14
15
|
pathInLocaleMap?: string;
|
|
15
16
|
} | null;
|
|
16
|
-
type
|
|
17
|
-
|
|
17
|
+
type TSerializedConstraint = Record<string, SerializedMemberDecl>;
|
|
18
|
+
type SerializedPathTo<T extends TSerializedConstraint, R> = {
|
|
19
|
+
[K in keyof T]: T[K] extends SerializedMemberDecl<infer V> ? V extends R ? K : R extends V ? string : T[K] extends SerializedObjectType<infer P> ? `${Extract<K, string>}.${SerializedPathTo<P, R>}` : never : never;
|
|
20
|
+
}[Extract<keyof T, string>];
|
|
21
|
+
export interface SerializedEntityDecl<Name extends string = string, T extends TSerializedConstraint = TSerializedConstraint, FK extends Extract<keyof T, string> | undefined = Extract<keyof T, string> | undefined> extends SerializedBaseDecl<Name, []> {
|
|
18
22
|
kind: NodeKind["EntityDecl"];
|
|
19
23
|
namePlural: string;
|
|
20
24
|
type: SerializedObjectType<T>;
|
|
@@ -22,13 +26,13 @@ export interface SerializedEntityDecl<Name extends string = string, T extends TC
|
|
|
22
26
|
/**
|
|
23
27
|
* @default "name"
|
|
24
28
|
*/
|
|
25
|
-
displayName?:
|
|
29
|
+
displayName?: GenericEntityDisplayName;
|
|
26
30
|
displayNameCustomizer: boolean;
|
|
27
31
|
isDeprecated?: boolean;
|
|
28
32
|
}
|
|
29
33
|
export declare const isSerializedEntityDecl: (node: SerializedNode) => node is SerializedEntityDecl;
|
|
30
|
-
export declare const isSerializedEntityDeclWithParentReference: <Name extends string, T extends
|
|
31
|
-
export declare const isSerializedEntityDeclWithoutParentReference: <Name extends string, T extends
|
|
34
|
+
export declare const isSerializedEntityDeclWithParentReference: <Name extends string, T extends TSerializedConstraint, FK extends Extract<keyof T, string> | undefined>(decl: SerializedEntityDecl<Name, T, FK>) => decl is SerializedEntityDecl<Name, T, NonNullable<FK>>;
|
|
35
|
+
export declare const isSerializedEntityDeclWithoutParentReference: <Name extends string, T extends TSerializedConstraint>(decl: SerializedEntityDecl<Name, T>) => decl is SerializedEntityDecl<Name, T, undefined>;
|
|
32
36
|
export declare const resolveTypeArgumentsInSerializedEntityDecl: SerializedTypeArgumentsResolver<SerializedEntityDecl>;
|
|
33
37
|
export declare const getReferencesForSerializedEntityDecl: GetReferencesSerialized<SerializedEntityDecl>;
|
|
34
38
|
export {};
|
|
@@ -2,7 +2,7 @@ export declare const sortObjectKeys: (obj: Record<string, unknown>, keys: string
|
|
|
2
2
|
export declare const sortObjectKeysAlphabetically: (obj: Record<string, unknown>) => Record<string, unknown>;
|
|
3
3
|
export declare const mergeObjects: <T>(obj1: Record<string, T>, obj2: Record<string, T>, solveConflict: (a: T, b: T) => T) => Record<string, T>;
|
|
4
4
|
export type Leaves<T> = T extends object ? {
|
|
5
|
-
[K in keyof T]: T[K] extends unknown[] ? never : `${
|
|
5
|
+
[K in keyof T]: T[K] extends unknown[] ? never : `${Extract<K, string>}${Leaves<T[K]> extends never ? "" : `.${Leaves<T[K]>}`}`;
|
|
6
6
|
}[keyof T] : never;
|
|
7
7
|
export declare const onlyKeys: <T extends object, K extends keyof T>(obj: T, ...keys: K[]) => Pick<T, K>;
|
|
8
8
|
export declare const hasKey: <T extends object, K extends PropertyKey>(obj: T, key: K) => obj is T & { [k in K]: unknown; };
|