industrial-model 0.5.0 → 0.7.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.
- package/README.md +723 -545
- package/dist/cognite-core/index.cjs +1882 -0
- package/dist/cognite-core/index.cjs.map +1 -0
- package/dist/cognite-core/index.d.cts +535 -0
- package/dist/cognite-core/index.d.ts +535 -0
- package/dist/cognite-core/index.js +1879 -0
- package/dist/cognite-core/index.js.map +1 -0
- package/dist/index.cjs +544 -193
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -263
- package/dist/index.d.ts +8 -263
- package/dist/index.js +545 -192
- package/dist/index.js.map +1 -1
- package/dist/types-2jjbs2i7.d.cts +267 -0
- package/dist/types-2jjbs2i7.d.ts +267 -0
- package/package.json +11 -1
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
interface NodeDefinition {
|
|
2
|
+
instanceType: "node";
|
|
3
|
+
version?: number;
|
|
4
|
+
space: string;
|
|
5
|
+
externalId: string;
|
|
6
|
+
properties?: Record<string, Record<string, Record<string, unknown>>>;
|
|
7
|
+
createdTime?: number;
|
|
8
|
+
deletedTime?: number;
|
|
9
|
+
lastUpdatedTime?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
type NodeId = {
|
|
13
|
+
externalId: string;
|
|
14
|
+
space: string;
|
|
15
|
+
};
|
|
16
|
+
type DataModelId = NodeId & {
|
|
17
|
+
version: string;
|
|
18
|
+
};
|
|
19
|
+
type SortDirection = "ascending" | "descending";
|
|
20
|
+
interface IndustrialModelClientOptions {
|
|
21
|
+
validateResults?: boolean;
|
|
22
|
+
}
|
|
23
|
+
type Simplify<T> = {
|
|
24
|
+
[K in keyof T]: T[K];
|
|
25
|
+
} & {};
|
|
26
|
+
type Merge<A, B> = Simplify<Omit<A, keyof B> & B>;
|
|
27
|
+
type NonNull<T> = Exclude<T, null | undefined>;
|
|
28
|
+
type ArrayItem<T> = T extends readonly (infer U)[] ? U : never;
|
|
29
|
+
type QueryDepth = 0 | 1 | 2 | 3;
|
|
30
|
+
type PrevDepth = {
|
|
31
|
+
0: 0;
|
|
32
|
+
1: 0;
|
|
33
|
+
2: 1;
|
|
34
|
+
3: 2;
|
|
35
|
+
};
|
|
36
|
+
declare const MODEL_RELATIONS: unique symbol;
|
|
37
|
+
type IndustrialModel<TProps, TRelations = {}> = Simplify<TProps & {
|
|
38
|
+
readonly [MODEL_RELATIONS]?: TRelations;
|
|
39
|
+
}>;
|
|
40
|
+
type ModelProps<TModel> = Simplify<Omit<TModel, typeof MODEL_RELATIONS>>;
|
|
41
|
+
type ModelRelations<TModel> = TModel extends {
|
|
42
|
+
readonly [MODEL_RELATIONS]?: infer TRelations;
|
|
43
|
+
} ? NonNull<TRelations> : never;
|
|
44
|
+
type RelationKeys<TModel> = [ModelRelations<TModel>] extends [never] ? never : keyof ModelRelations<TModel>;
|
|
45
|
+
type IsOptionalKey<T, K extends PropertyKey> = K extends keyof T ? {} extends Pick<T, K> ? true : false : false;
|
|
46
|
+
type UnwrapRelationTarget<T> = NonNull<T> extends readonly unknown[] ? ArrayItem<NonNull<T>> : NonNull<T>;
|
|
47
|
+
type BaseSelectFor<T, TDepth extends QueryDepth = 3> = [NonNull<T>] extends [NodeId] ? boolean : NonNull<T> extends readonly unknown[] ? [ArrayItem<NonNull<T>>] extends [NodeId] ? boolean : TDepth extends 0 ? boolean : NonNull<ArrayItem<NonNull<T>>> extends object ? boolean | QuerySelect<NonNull<ArrayItem<NonNull<T>>>, PrevDepth[TDepth]> : boolean : TDepth extends 0 ? boolean : NonNull<T> extends object ? boolean | QuerySelect<NonNull<T>, PrevDepth[TDepth]> : boolean;
|
|
48
|
+
type RelationSelectFor<T, TDepth extends QueryDepth = 3> = TDepth extends 0 ? never : QuerySelect<UnwrapRelationTarget<T>, PrevDepth[TDepth]>;
|
|
49
|
+
type QuerySelectValue<TModel, K extends PropertyKey, TDepth extends QueryDepth> = K extends RelationKeys<TModel> ? K extends keyof ModelProps<TModel> ? boolean | RelationSelectFor<ModelRelations<TModel>[K], TDepth> : RelationSelectFor<ModelRelations<TModel>[K], TDepth> : K extends keyof ModelProps<TModel> ? BaseSelectFor<ModelProps<TModel>[K], TDepth> : never;
|
|
50
|
+
type QuerySelect<TModel, TDepth extends QueryDepth = 3> = {
|
|
51
|
+
_all?: true;
|
|
52
|
+
} & {
|
|
53
|
+
[K in keyof ModelProps<TModel> | RelationKeys<TModel>]?: QuerySelectValue<TModel, K, TDepth>;
|
|
54
|
+
};
|
|
55
|
+
type SortInput<TModel> = {
|
|
56
|
+
[K in keyof ModelProps<TModel> as NonNull<ModelProps<TModel>[K]> extends string | number | boolean | Date | NodeId ? K : never]?: SortDirection;
|
|
57
|
+
};
|
|
58
|
+
interface QueryOptions<TModel, TSelect extends QuerySelect<TModel> | undefined = QuerySelect<TModel> | undefined> {
|
|
59
|
+
viewExternalId: string;
|
|
60
|
+
select?: TSelect;
|
|
61
|
+
filters?: WhereInput<TModel>;
|
|
62
|
+
sort?: SortInput<TModel>;
|
|
63
|
+
limit?: number;
|
|
64
|
+
cursor?: string | null;
|
|
65
|
+
}
|
|
66
|
+
type QueryResultMetadata = Pick<NodeDefinition, "space" | "externalId" | "version" | "createdTime" | "deletedTime" | "lastUpdatedTime">;
|
|
67
|
+
type ResultShapeForKey<TModel, K extends PropertyKey> = K extends keyof ModelProps<TModel> ? ModelProps<TModel>[K] : K extends RelationKeys<TModel> ? ModelRelations<TModel>[K] : never;
|
|
68
|
+
type ResultEntityForKey<TModel, K extends PropertyKey> = K extends RelationKeys<TModel> ? ModelRelations<TModel>[K] : K extends keyof ModelProps<TModel> ? ModelProps<TModel>[K] : never;
|
|
69
|
+
type WrapResultValue<TShape, TValue> = [NonNull<TShape>] extends [readonly unknown[]] ? TValue[] : TValue;
|
|
70
|
+
type AsQuerySelect<TModel, TSelect> = TSelect extends QuerySelect<TModel> ? TSelect : never;
|
|
71
|
+
type SelectedValue<TModel, K extends PropertyKey, TValue, TDepth extends QueryDepth> = TValue extends true ? K extends keyof ModelProps<TModel> ? ModelProps<TModel>[K] : never : TDepth extends 0 ? never : TValue extends object ? WrapResultValue<ResultShapeForKey<TModel, K>, QueryResultItem<UnwrapRelationTarget<ResultEntityForKey<TModel, K>>, AsQuerySelect<UnwrapRelationTarget<ResultEntityForKey<TModel, K>>, TValue>, PrevDepth[TDepth]>> : never;
|
|
72
|
+
type ExplicitSelectionResult<TModel, TSelect, TDepth extends QueryDepth> = Simplify<{
|
|
73
|
+
[K in keyof NonNull<TSelect> as K extends "_all" ? never : SelectedValue<TModel, K, NonNull<TSelect>[K], TDepth> extends never ? never : IsOptionalKey<ModelProps<TModel>, K> extends true ? never : IsOptionalKey<ModelRelations<TModel>, K> extends true ? never : K]-?: SelectedValue<TModel, K, NonNull<TSelect>[K], TDepth>;
|
|
74
|
+
} & {
|
|
75
|
+
[K in keyof NonNull<TSelect> as K extends "_all" ? never : SelectedValue<TModel, K, NonNull<TSelect>[K], TDepth> extends never ? never : IsOptionalKey<ModelProps<TModel>, K> extends true ? K : IsOptionalKey<ModelRelations<TModel>, K> extends true ? K : never]?: SelectedValue<TModel, K, NonNull<TSelect>[K], TDepth>;
|
|
76
|
+
}>;
|
|
77
|
+
type QueryResultItem<TModel, TSelect extends QuerySelect<TModel> | undefined = undefined, TDepth extends QueryDepth = 3> = [TSelect] extends [undefined] ? Merge<QueryResultMetadata, ModelProps<TModel>> : Merge<TSelect extends {
|
|
78
|
+
_all: true;
|
|
79
|
+
} ? Merge<QueryResultMetadata, ModelProps<TModel>> : QueryResultMetadata, ExplicitSelectionResult<TModel, TSelect, TDepth>>;
|
|
80
|
+
interface QueryResult<TItem = Record<string, unknown>> {
|
|
81
|
+
items: TItem[];
|
|
82
|
+
cursor: string | null;
|
|
83
|
+
}
|
|
84
|
+
type QueryExecutor<TModel> = {
|
|
85
|
+
<const TSelect extends QuerySelect<TModel>>(options: Omit<QueryOptions<TModel, TSelect>, "select"> & {
|
|
86
|
+
select: TSelect & QuerySelect<TModel>;
|
|
87
|
+
}): Promise<QueryResult<QueryResultItem<TModel, TSelect>>>;
|
|
88
|
+
(options: Omit<QueryOptions<TModel, undefined>, "select"> & {
|
|
89
|
+
select?: undefined;
|
|
90
|
+
}): Promise<QueryResult<QueryResultItem<TModel, undefined>>>;
|
|
91
|
+
};
|
|
92
|
+
type GroupableValue<T> = [NonNull<T>] extends [NodeId] ? true : [NonNull<T>] extends [string | number | boolean] ? true : false;
|
|
93
|
+
type GroupByKey<TModel> = {
|
|
94
|
+
[K in keyof ModelProps<TModel>]: GroupableValue<ModelProps<TModel>[K]> extends true ? K : never;
|
|
95
|
+
}[keyof ModelProps<TModel>];
|
|
96
|
+
type AggregateGroupBy<TModel> = {
|
|
97
|
+
[K in GroupByKey<TModel>]?: true;
|
|
98
|
+
};
|
|
99
|
+
type NumericKey<TModel> = {
|
|
100
|
+
[K in keyof ModelProps<TModel>]: ModelProps<TModel>[K] extends number ? K : never;
|
|
101
|
+
}[keyof ModelProps<TModel>];
|
|
102
|
+
type CountableKey<TModel> = GroupByKey<TModel> | "externalId" | "space";
|
|
103
|
+
type AggregateDefinition<TModel> = {
|
|
104
|
+
avg: NumericKey<TModel>;
|
|
105
|
+
} | {
|
|
106
|
+
min: NumericKey<TModel>;
|
|
107
|
+
} | {
|
|
108
|
+
max: NumericKey<TModel>;
|
|
109
|
+
} | {
|
|
110
|
+
sum: NumericKey<TModel>;
|
|
111
|
+
} | {
|
|
112
|
+
count: CountableKey<TModel> | Record<string, never>;
|
|
113
|
+
};
|
|
114
|
+
type SelectedGroupKeys<TGroupBy> = Extract<{
|
|
115
|
+
[K in keyof TGroupBy & string]: TGroupBy[K] extends true ? K : never;
|
|
116
|
+
}[keyof TGroupBy & string], string>;
|
|
117
|
+
type GroupValues<TModel, TGroupBy extends AggregateGroupBy<TModel> | undefined> = TGroupBy extends AggregateGroupBy<TModel> ? Simplify<Pick<ModelProps<TModel>, SelectedGroupKeys<TGroupBy> & keyof ModelProps<TModel>>> : undefined;
|
|
118
|
+
type AggregateValue<TDef> = TDef extends {
|
|
119
|
+
avg: infer P extends PropertyKey;
|
|
120
|
+
} ? {
|
|
121
|
+
property: P;
|
|
122
|
+
value: number;
|
|
123
|
+
} : TDef extends {
|
|
124
|
+
min: infer P extends PropertyKey;
|
|
125
|
+
} ? {
|
|
126
|
+
property: P;
|
|
127
|
+
value: number;
|
|
128
|
+
} : TDef extends {
|
|
129
|
+
max: infer P extends PropertyKey;
|
|
130
|
+
} ? {
|
|
131
|
+
property: P;
|
|
132
|
+
value: number;
|
|
133
|
+
} : TDef extends {
|
|
134
|
+
sum: infer P extends PropertyKey;
|
|
135
|
+
} ? {
|
|
136
|
+
property: P;
|
|
137
|
+
value: number;
|
|
138
|
+
} : TDef extends {
|
|
139
|
+
count: infer P;
|
|
140
|
+
} ? Record<string, never> extends P ? {
|
|
141
|
+
value: number;
|
|
142
|
+
} : {
|
|
143
|
+
property: P;
|
|
144
|
+
value: number;
|
|
145
|
+
} : never;
|
|
146
|
+
interface AggregateOptions<TModel> {
|
|
147
|
+
viewExternalId: string;
|
|
148
|
+
filters?: WhereInput<TModel>;
|
|
149
|
+
groupBy?: AggregateGroupBy<TModel>;
|
|
150
|
+
aggregate?: AggregateDefinition<TModel>;
|
|
151
|
+
}
|
|
152
|
+
type AggregateResultItem<TModel, TGroupBy extends AggregateGroupBy<TModel> | undefined = undefined, TAggregate extends AggregateDefinition<TModel> | undefined = undefined> = {
|
|
153
|
+
group?: GroupValues<TModel, TGroupBy>;
|
|
154
|
+
aggregate?: AggregateValue<TAggregate>;
|
|
155
|
+
};
|
|
156
|
+
interface AggregateResult<TItem = Record<string, unknown>> {
|
|
157
|
+
items: TItem[];
|
|
158
|
+
}
|
|
159
|
+
type AggregateExecutor<TModel> = <const TOptions extends AggregateOptions<TModel>>(options: TOptions) => Promise<AggregateResult<AggregateResultItem<TModel, TOptions["groupBy"], TOptions["aggregate"]>>>;
|
|
160
|
+
type RelationReferenceValue<T> = [NonNull<T>] extends [readonly unknown[]] ? NodeId[] : NodeId;
|
|
161
|
+
type NodeIdLike = {
|
|
162
|
+
space: string;
|
|
163
|
+
externalId: string;
|
|
164
|
+
};
|
|
165
|
+
type ArrayReferencePropertyKeys<TModel> = {
|
|
166
|
+
[K in keyof ModelProps<TModel>]: [NonNull<ModelProps<TModel>[K]>] extends [readonly unknown[]] ? [ArrayItem<NonNull<ModelProps<TModel>[K]>>] extends [NodeIdLike] ? K : never : never;
|
|
167
|
+
}[keyof ModelProps<TModel>];
|
|
168
|
+
type ArrayRelationKeys<TModel> = {
|
|
169
|
+
[K in RelationKeys<TModel>]: [NonNull<ModelRelations<TModel>[K]>] extends [readonly unknown[]] ? K : never;
|
|
170
|
+
}[RelationKeys<TModel>];
|
|
171
|
+
type UpsertProperties<TModel> = Simplify<Partial<ModelProps<TModel>> & {
|
|
172
|
+
[K in RelationKeys<TModel>]?: RelationReferenceValue<ModelRelations<TModel>[K]>;
|
|
173
|
+
}>;
|
|
174
|
+
type UpsertNode<TModel> = Simplify<NodeId & Partial<Omit<UpsertProperties<TModel>, keyof NodeId>>>;
|
|
175
|
+
interface EdgeCreationContext {
|
|
176
|
+
startNode: NodeId;
|
|
177
|
+
endNode: NodeId;
|
|
178
|
+
edgeType: NodeId;
|
|
179
|
+
}
|
|
180
|
+
type EdgeCreationCallback = (context: EdgeCreationContext) => NodeId;
|
|
181
|
+
type EdgeCreationCallbacks<TProperty extends string = string> = Partial<Record<TProperty, EdgeCreationCallback>>;
|
|
182
|
+
type OnEdgeCreation<TModel> = EdgeCreationCallbacks<Extract<ArrayReferencePropertyKeys<TModel> | ArrayRelationKeys<TModel>, string>>;
|
|
183
|
+
type EdgeMode = "append" | "replace";
|
|
184
|
+
interface UpsertOptions<TModel> {
|
|
185
|
+
viewExternalId: string;
|
|
186
|
+
items: UpsertNode<TModel>[];
|
|
187
|
+
onEdgeCreation?: OnEdgeCreation<TModel>;
|
|
188
|
+
replace?: boolean;
|
|
189
|
+
edgeMode?: EdgeMode;
|
|
190
|
+
}
|
|
191
|
+
type UpsertResultItem = {
|
|
192
|
+
instanceType: "node" | "edge";
|
|
193
|
+
version?: number;
|
|
194
|
+
wasModified?: boolean;
|
|
195
|
+
space: string;
|
|
196
|
+
externalId: string;
|
|
197
|
+
createdTime?: number;
|
|
198
|
+
lastUpdatedTime?: number;
|
|
199
|
+
};
|
|
200
|
+
interface UpsertResult {
|
|
201
|
+
items: UpsertResultItem[];
|
|
202
|
+
}
|
|
203
|
+
type UpsertExecutor<TModel> = (options: UpsertOptions<TModel>) => Promise<UpsertResult>;
|
|
204
|
+
type DeleteResultItem = Omit<UpsertResultItem, "instanceType"> & {
|
|
205
|
+
instanceType: "node";
|
|
206
|
+
};
|
|
207
|
+
interface DeleteResult {
|
|
208
|
+
items: DeleteResultItem[];
|
|
209
|
+
}
|
|
210
|
+
type DeleteExecutor = <TItem extends NodeId>(items: TItem[]) => Promise<DeleteResult>;
|
|
211
|
+
type SearchFilter = {
|
|
212
|
+
query: string;
|
|
213
|
+
operator?: "OR" | "AND";
|
|
214
|
+
};
|
|
215
|
+
type StringFilters = {
|
|
216
|
+
eq?: string;
|
|
217
|
+
in?: string[];
|
|
218
|
+
prefix?: string;
|
|
219
|
+
search?: SearchFilter;
|
|
220
|
+
exists?: boolean;
|
|
221
|
+
};
|
|
222
|
+
type NumberFilters = {
|
|
223
|
+
eq?: number;
|
|
224
|
+
in?: number[];
|
|
225
|
+
gt?: number;
|
|
226
|
+
gte?: number;
|
|
227
|
+
lt?: number;
|
|
228
|
+
lte?: number;
|
|
229
|
+
exists?: boolean;
|
|
230
|
+
};
|
|
231
|
+
type BooleanFilters = {
|
|
232
|
+
eq?: boolean;
|
|
233
|
+
exists?: boolean;
|
|
234
|
+
};
|
|
235
|
+
type DateFilters = {
|
|
236
|
+
eq?: string;
|
|
237
|
+
in?: string[];
|
|
238
|
+
gt?: string;
|
|
239
|
+
gte?: string;
|
|
240
|
+
lt?: string;
|
|
241
|
+
lte?: string;
|
|
242
|
+
exists?: boolean;
|
|
243
|
+
};
|
|
244
|
+
type NodeIdFilters = {
|
|
245
|
+
eq?: NodeId;
|
|
246
|
+
in?: NodeId[];
|
|
247
|
+
exists?: boolean;
|
|
248
|
+
};
|
|
249
|
+
type ListFilters<T> = {
|
|
250
|
+
containsAny?: T[];
|
|
251
|
+
containsAll?: T[];
|
|
252
|
+
exists?: boolean;
|
|
253
|
+
} & (T extends string ? {
|
|
254
|
+
search?: SearchFilter;
|
|
255
|
+
} : unknown);
|
|
256
|
+
type BaseFilterFor<T> = T extends NodeId ? NodeIdFilters : T extends string ? StringFilters : T extends number ? NumberFilters : T extends boolean ? BooleanFilters : T extends Date ? DateFilters : T extends Array<infer U> ? ListFilters<U> : T extends object ? NodeIdFilters | WhereInput<T> : never;
|
|
257
|
+
type RelationFilterFor<T> = UnwrapRelationTarget<T> extends object ? WhereInput<UnwrapRelationTarget<T>> : never;
|
|
258
|
+
type QueryFilterValue<TModel, K extends PropertyKey> = K extends RelationKeys<TModel> ? K extends keyof ModelProps<TModel> ? BaseFilterFor<ModelProps<TModel>[K]> | RelationFilterFor<ModelRelations<TModel>[K]> : RelationFilterFor<ModelRelations<TModel>[K]> : K extends keyof ModelProps<TModel> ? BaseFilterFor<ModelProps<TModel>[K]> : never;
|
|
259
|
+
type WhereInput<TModel> = {
|
|
260
|
+
AND?: WhereInput<TModel> | WhereInput<TModel>[];
|
|
261
|
+
OR?: WhereInput<TModel>[];
|
|
262
|
+
NOT?: WhereInput<TModel> | WhereInput<TModel>[];
|
|
263
|
+
} & {
|
|
264
|
+
[K in keyof ModelProps<TModel> | RelationKeys<TModel>]?: QueryFilterValue<TModel, K>;
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
export type { AggregateExecutor as A, DataModelId as D, EdgeCreationCallback as E, IndustrialModelClientOptions as I, ModelProps as M, NodeId as N, OnEdgeCreation as O, QueryExecutor as Q, UpsertExecutor as U, DeleteResult as a, AggregateResult as b, AggregateResultItem as c, DeleteExecutor as d, DeleteResultItem as e, EdgeCreationCallbacks as f, EdgeCreationContext as g, EdgeMode as h, IndustrialModel as i, ModelRelations as j, QueryResult as k, QueryResultItem as l, QuerySelect as m, UpsertNode as n, UpsertOptions as o, UpsertProperties as p, UpsertResult as q, UpsertResultItem as r, AggregateOptions as s, QueryOptions as t };
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
interface NodeDefinition {
|
|
2
|
+
instanceType: "node";
|
|
3
|
+
version?: number;
|
|
4
|
+
space: string;
|
|
5
|
+
externalId: string;
|
|
6
|
+
properties?: Record<string, Record<string, Record<string, unknown>>>;
|
|
7
|
+
createdTime?: number;
|
|
8
|
+
deletedTime?: number;
|
|
9
|
+
lastUpdatedTime?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
type NodeId = {
|
|
13
|
+
externalId: string;
|
|
14
|
+
space: string;
|
|
15
|
+
};
|
|
16
|
+
type DataModelId = NodeId & {
|
|
17
|
+
version: string;
|
|
18
|
+
};
|
|
19
|
+
type SortDirection = "ascending" | "descending";
|
|
20
|
+
interface IndustrialModelClientOptions {
|
|
21
|
+
validateResults?: boolean;
|
|
22
|
+
}
|
|
23
|
+
type Simplify<T> = {
|
|
24
|
+
[K in keyof T]: T[K];
|
|
25
|
+
} & {};
|
|
26
|
+
type Merge<A, B> = Simplify<Omit<A, keyof B> & B>;
|
|
27
|
+
type NonNull<T> = Exclude<T, null | undefined>;
|
|
28
|
+
type ArrayItem<T> = T extends readonly (infer U)[] ? U : never;
|
|
29
|
+
type QueryDepth = 0 | 1 | 2 | 3;
|
|
30
|
+
type PrevDepth = {
|
|
31
|
+
0: 0;
|
|
32
|
+
1: 0;
|
|
33
|
+
2: 1;
|
|
34
|
+
3: 2;
|
|
35
|
+
};
|
|
36
|
+
declare const MODEL_RELATIONS: unique symbol;
|
|
37
|
+
type IndustrialModel<TProps, TRelations = {}> = Simplify<TProps & {
|
|
38
|
+
readonly [MODEL_RELATIONS]?: TRelations;
|
|
39
|
+
}>;
|
|
40
|
+
type ModelProps<TModel> = Simplify<Omit<TModel, typeof MODEL_RELATIONS>>;
|
|
41
|
+
type ModelRelations<TModel> = TModel extends {
|
|
42
|
+
readonly [MODEL_RELATIONS]?: infer TRelations;
|
|
43
|
+
} ? NonNull<TRelations> : never;
|
|
44
|
+
type RelationKeys<TModel> = [ModelRelations<TModel>] extends [never] ? never : keyof ModelRelations<TModel>;
|
|
45
|
+
type IsOptionalKey<T, K extends PropertyKey> = K extends keyof T ? {} extends Pick<T, K> ? true : false : false;
|
|
46
|
+
type UnwrapRelationTarget<T> = NonNull<T> extends readonly unknown[] ? ArrayItem<NonNull<T>> : NonNull<T>;
|
|
47
|
+
type BaseSelectFor<T, TDepth extends QueryDepth = 3> = [NonNull<T>] extends [NodeId] ? boolean : NonNull<T> extends readonly unknown[] ? [ArrayItem<NonNull<T>>] extends [NodeId] ? boolean : TDepth extends 0 ? boolean : NonNull<ArrayItem<NonNull<T>>> extends object ? boolean | QuerySelect<NonNull<ArrayItem<NonNull<T>>>, PrevDepth[TDepth]> : boolean : TDepth extends 0 ? boolean : NonNull<T> extends object ? boolean | QuerySelect<NonNull<T>, PrevDepth[TDepth]> : boolean;
|
|
48
|
+
type RelationSelectFor<T, TDepth extends QueryDepth = 3> = TDepth extends 0 ? never : QuerySelect<UnwrapRelationTarget<T>, PrevDepth[TDepth]>;
|
|
49
|
+
type QuerySelectValue<TModel, K extends PropertyKey, TDepth extends QueryDepth> = K extends RelationKeys<TModel> ? K extends keyof ModelProps<TModel> ? boolean | RelationSelectFor<ModelRelations<TModel>[K], TDepth> : RelationSelectFor<ModelRelations<TModel>[K], TDepth> : K extends keyof ModelProps<TModel> ? BaseSelectFor<ModelProps<TModel>[K], TDepth> : never;
|
|
50
|
+
type QuerySelect<TModel, TDepth extends QueryDepth = 3> = {
|
|
51
|
+
_all?: true;
|
|
52
|
+
} & {
|
|
53
|
+
[K in keyof ModelProps<TModel> | RelationKeys<TModel>]?: QuerySelectValue<TModel, K, TDepth>;
|
|
54
|
+
};
|
|
55
|
+
type SortInput<TModel> = {
|
|
56
|
+
[K in keyof ModelProps<TModel> as NonNull<ModelProps<TModel>[K]> extends string | number | boolean | Date | NodeId ? K : never]?: SortDirection;
|
|
57
|
+
};
|
|
58
|
+
interface QueryOptions<TModel, TSelect extends QuerySelect<TModel> | undefined = QuerySelect<TModel> | undefined> {
|
|
59
|
+
viewExternalId: string;
|
|
60
|
+
select?: TSelect;
|
|
61
|
+
filters?: WhereInput<TModel>;
|
|
62
|
+
sort?: SortInput<TModel>;
|
|
63
|
+
limit?: number;
|
|
64
|
+
cursor?: string | null;
|
|
65
|
+
}
|
|
66
|
+
type QueryResultMetadata = Pick<NodeDefinition, "space" | "externalId" | "version" | "createdTime" | "deletedTime" | "lastUpdatedTime">;
|
|
67
|
+
type ResultShapeForKey<TModel, K extends PropertyKey> = K extends keyof ModelProps<TModel> ? ModelProps<TModel>[K] : K extends RelationKeys<TModel> ? ModelRelations<TModel>[K] : never;
|
|
68
|
+
type ResultEntityForKey<TModel, K extends PropertyKey> = K extends RelationKeys<TModel> ? ModelRelations<TModel>[K] : K extends keyof ModelProps<TModel> ? ModelProps<TModel>[K] : never;
|
|
69
|
+
type WrapResultValue<TShape, TValue> = [NonNull<TShape>] extends [readonly unknown[]] ? TValue[] : TValue;
|
|
70
|
+
type AsQuerySelect<TModel, TSelect> = TSelect extends QuerySelect<TModel> ? TSelect : never;
|
|
71
|
+
type SelectedValue<TModel, K extends PropertyKey, TValue, TDepth extends QueryDepth> = TValue extends true ? K extends keyof ModelProps<TModel> ? ModelProps<TModel>[K] : never : TDepth extends 0 ? never : TValue extends object ? WrapResultValue<ResultShapeForKey<TModel, K>, QueryResultItem<UnwrapRelationTarget<ResultEntityForKey<TModel, K>>, AsQuerySelect<UnwrapRelationTarget<ResultEntityForKey<TModel, K>>, TValue>, PrevDepth[TDepth]>> : never;
|
|
72
|
+
type ExplicitSelectionResult<TModel, TSelect, TDepth extends QueryDepth> = Simplify<{
|
|
73
|
+
[K in keyof NonNull<TSelect> as K extends "_all" ? never : SelectedValue<TModel, K, NonNull<TSelect>[K], TDepth> extends never ? never : IsOptionalKey<ModelProps<TModel>, K> extends true ? never : IsOptionalKey<ModelRelations<TModel>, K> extends true ? never : K]-?: SelectedValue<TModel, K, NonNull<TSelect>[K], TDepth>;
|
|
74
|
+
} & {
|
|
75
|
+
[K in keyof NonNull<TSelect> as K extends "_all" ? never : SelectedValue<TModel, K, NonNull<TSelect>[K], TDepth> extends never ? never : IsOptionalKey<ModelProps<TModel>, K> extends true ? K : IsOptionalKey<ModelRelations<TModel>, K> extends true ? K : never]?: SelectedValue<TModel, K, NonNull<TSelect>[K], TDepth>;
|
|
76
|
+
}>;
|
|
77
|
+
type QueryResultItem<TModel, TSelect extends QuerySelect<TModel> | undefined = undefined, TDepth extends QueryDepth = 3> = [TSelect] extends [undefined] ? Merge<QueryResultMetadata, ModelProps<TModel>> : Merge<TSelect extends {
|
|
78
|
+
_all: true;
|
|
79
|
+
} ? Merge<QueryResultMetadata, ModelProps<TModel>> : QueryResultMetadata, ExplicitSelectionResult<TModel, TSelect, TDepth>>;
|
|
80
|
+
interface QueryResult<TItem = Record<string, unknown>> {
|
|
81
|
+
items: TItem[];
|
|
82
|
+
cursor: string | null;
|
|
83
|
+
}
|
|
84
|
+
type QueryExecutor<TModel> = {
|
|
85
|
+
<const TSelect extends QuerySelect<TModel>>(options: Omit<QueryOptions<TModel, TSelect>, "select"> & {
|
|
86
|
+
select: TSelect & QuerySelect<TModel>;
|
|
87
|
+
}): Promise<QueryResult<QueryResultItem<TModel, TSelect>>>;
|
|
88
|
+
(options: Omit<QueryOptions<TModel, undefined>, "select"> & {
|
|
89
|
+
select?: undefined;
|
|
90
|
+
}): Promise<QueryResult<QueryResultItem<TModel, undefined>>>;
|
|
91
|
+
};
|
|
92
|
+
type GroupableValue<T> = [NonNull<T>] extends [NodeId] ? true : [NonNull<T>] extends [string | number | boolean] ? true : false;
|
|
93
|
+
type GroupByKey<TModel> = {
|
|
94
|
+
[K in keyof ModelProps<TModel>]: GroupableValue<ModelProps<TModel>[K]> extends true ? K : never;
|
|
95
|
+
}[keyof ModelProps<TModel>];
|
|
96
|
+
type AggregateGroupBy<TModel> = {
|
|
97
|
+
[K in GroupByKey<TModel>]?: true;
|
|
98
|
+
};
|
|
99
|
+
type NumericKey<TModel> = {
|
|
100
|
+
[K in keyof ModelProps<TModel>]: ModelProps<TModel>[K] extends number ? K : never;
|
|
101
|
+
}[keyof ModelProps<TModel>];
|
|
102
|
+
type CountableKey<TModel> = GroupByKey<TModel> | "externalId" | "space";
|
|
103
|
+
type AggregateDefinition<TModel> = {
|
|
104
|
+
avg: NumericKey<TModel>;
|
|
105
|
+
} | {
|
|
106
|
+
min: NumericKey<TModel>;
|
|
107
|
+
} | {
|
|
108
|
+
max: NumericKey<TModel>;
|
|
109
|
+
} | {
|
|
110
|
+
sum: NumericKey<TModel>;
|
|
111
|
+
} | {
|
|
112
|
+
count: CountableKey<TModel> | Record<string, never>;
|
|
113
|
+
};
|
|
114
|
+
type SelectedGroupKeys<TGroupBy> = Extract<{
|
|
115
|
+
[K in keyof TGroupBy & string]: TGroupBy[K] extends true ? K : never;
|
|
116
|
+
}[keyof TGroupBy & string], string>;
|
|
117
|
+
type GroupValues<TModel, TGroupBy extends AggregateGroupBy<TModel> | undefined> = TGroupBy extends AggregateGroupBy<TModel> ? Simplify<Pick<ModelProps<TModel>, SelectedGroupKeys<TGroupBy> & keyof ModelProps<TModel>>> : undefined;
|
|
118
|
+
type AggregateValue<TDef> = TDef extends {
|
|
119
|
+
avg: infer P extends PropertyKey;
|
|
120
|
+
} ? {
|
|
121
|
+
property: P;
|
|
122
|
+
value: number;
|
|
123
|
+
} : TDef extends {
|
|
124
|
+
min: infer P extends PropertyKey;
|
|
125
|
+
} ? {
|
|
126
|
+
property: P;
|
|
127
|
+
value: number;
|
|
128
|
+
} : TDef extends {
|
|
129
|
+
max: infer P extends PropertyKey;
|
|
130
|
+
} ? {
|
|
131
|
+
property: P;
|
|
132
|
+
value: number;
|
|
133
|
+
} : TDef extends {
|
|
134
|
+
sum: infer P extends PropertyKey;
|
|
135
|
+
} ? {
|
|
136
|
+
property: P;
|
|
137
|
+
value: number;
|
|
138
|
+
} : TDef extends {
|
|
139
|
+
count: infer P;
|
|
140
|
+
} ? Record<string, never> extends P ? {
|
|
141
|
+
value: number;
|
|
142
|
+
} : {
|
|
143
|
+
property: P;
|
|
144
|
+
value: number;
|
|
145
|
+
} : never;
|
|
146
|
+
interface AggregateOptions<TModel> {
|
|
147
|
+
viewExternalId: string;
|
|
148
|
+
filters?: WhereInput<TModel>;
|
|
149
|
+
groupBy?: AggregateGroupBy<TModel>;
|
|
150
|
+
aggregate?: AggregateDefinition<TModel>;
|
|
151
|
+
}
|
|
152
|
+
type AggregateResultItem<TModel, TGroupBy extends AggregateGroupBy<TModel> | undefined = undefined, TAggregate extends AggregateDefinition<TModel> | undefined = undefined> = {
|
|
153
|
+
group?: GroupValues<TModel, TGroupBy>;
|
|
154
|
+
aggregate?: AggregateValue<TAggregate>;
|
|
155
|
+
};
|
|
156
|
+
interface AggregateResult<TItem = Record<string, unknown>> {
|
|
157
|
+
items: TItem[];
|
|
158
|
+
}
|
|
159
|
+
type AggregateExecutor<TModel> = <const TOptions extends AggregateOptions<TModel>>(options: TOptions) => Promise<AggregateResult<AggregateResultItem<TModel, TOptions["groupBy"], TOptions["aggregate"]>>>;
|
|
160
|
+
type RelationReferenceValue<T> = [NonNull<T>] extends [readonly unknown[]] ? NodeId[] : NodeId;
|
|
161
|
+
type NodeIdLike = {
|
|
162
|
+
space: string;
|
|
163
|
+
externalId: string;
|
|
164
|
+
};
|
|
165
|
+
type ArrayReferencePropertyKeys<TModel> = {
|
|
166
|
+
[K in keyof ModelProps<TModel>]: [NonNull<ModelProps<TModel>[K]>] extends [readonly unknown[]] ? [ArrayItem<NonNull<ModelProps<TModel>[K]>>] extends [NodeIdLike] ? K : never : never;
|
|
167
|
+
}[keyof ModelProps<TModel>];
|
|
168
|
+
type ArrayRelationKeys<TModel> = {
|
|
169
|
+
[K in RelationKeys<TModel>]: [NonNull<ModelRelations<TModel>[K]>] extends [readonly unknown[]] ? K : never;
|
|
170
|
+
}[RelationKeys<TModel>];
|
|
171
|
+
type UpsertProperties<TModel> = Simplify<Partial<ModelProps<TModel>> & {
|
|
172
|
+
[K in RelationKeys<TModel>]?: RelationReferenceValue<ModelRelations<TModel>[K]>;
|
|
173
|
+
}>;
|
|
174
|
+
type UpsertNode<TModel> = Simplify<NodeId & Partial<Omit<UpsertProperties<TModel>, keyof NodeId>>>;
|
|
175
|
+
interface EdgeCreationContext {
|
|
176
|
+
startNode: NodeId;
|
|
177
|
+
endNode: NodeId;
|
|
178
|
+
edgeType: NodeId;
|
|
179
|
+
}
|
|
180
|
+
type EdgeCreationCallback = (context: EdgeCreationContext) => NodeId;
|
|
181
|
+
type EdgeCreationCallbacks<TProperty extends string = string> = Partial<Record<TProperty, EdgeCreationCallback>>;
|
|
182
|
+
type OnEdgeCreation<TModel> = EdgeCreationCallbacks<Extract<ArrayReferencePropertyKeys<TModel> | ArrayRelationKeys<TModel>, string>>;
|
|
183
|
+
type EdgeMode = "append" | "replace";
|
|
184
|
+
interface UpsertOptions<TModel> {
|
|
185
|
+
viewExternalId: string;
|
|
186
|
+
items: UpsertNode<TModel>[];
|
|
187
|
+
onEdgeCreation?: OnEdgeCreation<TModel>;
|
|
188
|
+
replace?: boolean;
|
|
189
|
+
edgeMode?: EdgeMode;
|
|
190
|
+
}
|
|
191
|
+
type UpsertResultItem = {
|
|
192
|
+
instanceType: "node" | "edge";
|
|
193
|
+
version?: number;
|
|
194
|
+
wasModified?: boolean;
|
|
195
|
+
space: string;
|
|
196
|
+
externalId: string;
|
|
197
|
+
createdTime?: number;
|
|
198
|
+
lastUpdatedTime?: number;
|
|
199
|
+
};
|
|
200
|
+
interface UpsertResult {
|
|
201
|
+
items: UpsertResultItem[];
|
|
202
|
+
}
|
|
203
|
+
type UpsertExecutor<TModel> = (options: UpsertOptions<TModel>) => Promise<UpsertResult>;
|
|
204
|
+
type DeleteResultItem = Omit<UpsertResultItem, "instanceType"> & {
|
|
205
|
+
instanceType: "node";
|
|
206
|
+
};
|
|
207
|
+
interface DeleteResult {
|
|
208
|
+
items: DeleteResultItem[];
|
|
209
|
+
}
|
|
210
|
+
type DeleteExecutor = <TItem extends NodeId>(items: TItem[]) => Promise<DeleteResult>;
|
|
211
|
+
type SearchFilter = {
|
|
212
|
+
query: string;
|
|
213
|
+
operator?: "OR" | "AND";
|
|
214
|
+
};
|
|
215
|
+
type StringFilters = {
|
|
216
|
+
eq?: string;
|
|
217
|
+
in?: string[];
|
|
218
|
+
prefix?: string;
|
|
219
|
+
search?: SearchFilter;
|
|
220
|
+
exists?: boolean;
|
|
221
|
+
};
|
|
222
|
+
type NumberFilters = {
|
|
223
|
+
eq?: number;
|
|
224
|
+
in?: number[];
|
|
225
|
+
gt?: number;
|
|
226
|
+
gte?: number;
|
|
227
|
+
lt?: number;
|
|
228
|
+
lte?: number;
|
|
229
|
+
exists?: boolean;
|
|
230
|
+
};
|
|
231
|
+
type BooleanFilters = {
|
|
232
|
+
eq?: boolean;
|
|
233
|
+
exists?: boolean;
|
|
234
|
+
};
|
|
235
|
+
type DateFilters = {
|
|
236
|
+
eq?: string;
|
|
237
|
+
in?: string[];
|
|
238
|
+
gt?: string;
|
|
239
|
+
gte?: string;
|
|
240
|
+
lt?: string;
|
|
241
|
+
lte?: string;
|
|
242
|
+
exists?: boolean;
|
|
243
|
+
};
|
|
244
|
+
type NodeIdFilters = {
|
|
245
|
+
eq?: NodeId;
|
|
246
|
+
in?: NodeId[];
|
|
247
|
+
exists?: boolean;
|
|
248
|
+
};
|
|
249
|
+
type ListFilters<T> = {
|
|
250
|
+
containsAny?: T[];
|
|
251
|
+
containsAll?: T[];
|
|
252
|
+
exists?: boolean;
|
|
253
|
+
} & (T extends string ? {
|
|
254
|
+
search?: SearchFilter;
|
|
255
|
+
} : unknown);
|
|
256
|
+
type BaseFilterFor<T> = T extends NodeId ? NodeIdFilters : T extends string ? StringFilters : T extends number ? NumberFilters : T extends boolean ? BooleanFilters : T extends Date ? DateFilters : T extends Array<infer U> ? ListFilters<U> : T extends object ? NodeIdFilters | WhereInput<T> : never;
|
|
257
|
+
type RelationFilterFor<T> = UnwrapRelationTarget<T> extends object ? WhereInput<UnwrapRelationTarget<T>> : never;
|
|
258
|
+
type QueryFilterValue<TModel, K extends PropertyKey> = K extends RelationKeys<TModel> ? K extends keyof ModelProps<TModel> ? BaseFilterFor<ModelProps<TModel>[K]> | RelationFilterFor<ModelRelations<TModel>[K]> : RelationFilterFor<ModelRelations<TModel>[K]> : K extends keyof ModelProps<TModel> ? BaseFilterFor<ModelProps<TModel>[K]> : never;
|
|
259
|
+
type WhereInput<TModel> = {
|
|
260
|
+
AND?: WhereInput<TModel> | WhereInput<TModel>[];
|
|
261
|
+
OR?: WhereInput<TModel>[];
|
|
262
|
+
NOT?: WhereInput<TModel> | WhereInput<TModel>[];
|
|
263
|
+
} & {
|
|
264
|
+
[K in keyof ModelProps<TModel> | RelationKeys<TModel>]?: QueryFilterValue<TModel, K>;
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
export type { AggregateExecutor as A, DataModelId as D, EdgeCreationCallback as E, IndustrialModelClientOptions as I, ModelProps as M, NodeId as N, OnEdgeCreation as O, QueryExecutor as Q, UpsertExecutor as U, DeleteResult as a, AggregateResult as b, AggregateResultItem as c, DeleteExecutor as d, DeleteResultItem as e, EdgeCreationCallbacks as f, EdgeCreationContext as g, EdgeMode as h, IndustrialModel as i, ModelRelations as j, QueryResult as k, QueryResultItem as l, QuerySelect as m, UpsertNode as n, UpsertOptions as o, UpsertProperties as p, UpsertResult as q, UpsertResultItem as r, AggregateOptions as s, QueryOptions as t };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "industrial-model",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "TypeScript SDK for querying Cognite Industrial Data Models with a type-safe, graph-aware API",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"keywords": [
|
|
@@ -36,6 +36,16 @@
|
|
|
36
36
|
"types": "./dist/index.d.cts",
|
|
37
37
|
"default": "./dist/index.cjs"
|
|
38
38
|
}
|
|
39
|
+
},
|
|
40
|
+
"./cognite-core": {
|
|
41
|
+
"import": {
|
|
42
|
+
"types": "./dist/cognite-core/index.d.ts",
|
|
43
|
+
"default": "./dist/cognite-core/index.js"
|
|
44
|
+
},
|
|
45
|
+
"require": {
|
|
46
|
+
"types": "./dist/cognite-core/index.d.cts",
|
|
47
|
+
"default": "./dist/cognite-core/index.cjs"
|
|
48
|
+
}
|
|
39
49
|
}
|
|
40
50
|
},
|
|
41
51
|
"main": "./dist/index.cjs",
|