-
Notifications
You must be signed in to change notification settings - Fork 198
/
order.ts
92 lines (84 loc) · 2.85 KB
/
order.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import { EntrySkeletonType, FieldsType } from './util'
import { EntryFields, EntryFieldType, EntryFieldTypes, EntrySys } from '../entry'
import { AssetSys } from '../asset'
import { ConditionalPick } from 'type-fest'
import { TagSys } from '../tag'
export type SupportedTypes =
| EntryFields.Symbol
| EntryFields.Integer
| EntryFields.Number
| EntryFields.Date
| EntryFields.Boolean
| EntryFields.Location
| undefined
export type SupportedEntryFieldTypes =
| EntryFieldTypes.Symbol
| EntryFieldTypes.Integer
| EntryFieldTypes.Number
| EntryFieldTypes.Date
| EntryFieldTypes.Boolean
| EntryFieldTypes.Location
| undefined
export type SupportedLinkTypes =
| EntryFieldTypes.AssetLink
| EntryFieldTypes.EntryLink<any>
| undefined
export type OrderFilterPaths<Fields extends FieldsType, Prefix extends string> =
| `${Prefix}.${keyof ConditionalPick<Fields, SupportedTypes> & string}`
| `-${Prefix}.${keyof ConditionalPick<Fields, SupportedTypes> & string}`
/**
* Order for provided fields in an entry
* @see {@link https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/search-parameters/order | Documentation}
* @internal
*/
export type EntryOrderFilterWithFields<
Fields extends Record<string, EntryFieldType<EntrySkeletonType>>,
> = {
order?: (
| `fields.${keyof ConditionalPick<Fields, SupportedEntryFieldTypes> & string}`
| `-fields.${keyof ConditionalPick<Fields, SupportedEntryFieldTypes> & string}`
| `fields.${keyof ConditionalPick<Fields, SupportedLinkTypes> & string}.sys.id`
| `-fields.${keyof ConditionalPick<Fields, SupportedLinkTypes> & string}.sys.id`
| OrderFilterPaths<EntrySys, 'sys'>
| 'sys.contentType.sys.id'
| '-sys.contentType.sys.id'
)[]
}
/**
* Order in an entry
* @see {@link https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/search-parameters/order | Documentation}
* @internal
*/
export type EntryOrderFilter = {
order?: (
| OrderFilterPaths<EntrySys, 'sys'>
| 'sys.contentType.sys.id'
| '-sys.contentType.sys.id'
)[]
}
/**
* Order in an asset
* @see {@link https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/search-parameters/order | Documentation}
* @internal
*/
export type AssetOrderFilter = {
order?: (
| OrderFilterPaths<AssetSys, 'sys'>
| 'fields.file.contentType'
| '-fields.file.contentType'
| 'fields.file.fileName'
| '-fields.file.fileName'
| 'fields.file.url'
| '-fields.file.url'
| 'fields.file.details.size'
| '-fields.file.details.size'
)[]
}
/**
* Order in a tag
* @see {@link https://www.contentful.com/developers/docs/references/content-delivery-api/#/reference/search-parameters/order | Documentation}
* @internal
*/
export type TagOrderFilter = {
order?: (OrderFilterPaths<TagSys, 'sys'> | 'name' | '-name')[]
}