@graphprotocol/hypergraph 0.12.0 → 0.13.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/dist/entity/find-many-public.d.ts.map +1 -1
- package/dist/entity/find-many-public.js +33 -4
- package/dist/entity/find-many-public.js.map +1 -1
- package/dist/entity/types.d.ts +8 -0
- package/dist/entity/types.d.ts.map +1 -1
- package/dist/typesync-studio/dist/assets/{authenticate-callback-DffCNmxZ.js → authenticate-callback-ClHGCEBM.js} +1 -1
- package/dist/typesync-studio/dist/assets/{authenticate-callback-DffCNmxZ.js.map → authenticate-callback-ClHGCEBM.js.map} +1 -1
- package/dist/typesync-studio/dist/assets/{ccip-BJ7g8YE6.js → ccip-CVB5IdFh.js} +1 -1
- package/dist/typesync-studio/dist/assets/{ccip-BJ7g8YE6.js.map → ccip-CVB5IdFh.js.map} +1 -1
- package/dist/typesync-studio/dist/assets/{index-CHTDYpLG.js → index-CZGD3lPb.js} +1 -1
- package/dist/typesync-studio/dist/assets/{index-CHTDYpLG.js.map → index-CZGD3lPb.js.map} +1 -1
- package/dist/typesync-studio/dist/assets/{index-B5RxXGeM.js → index-Dmh0I_CD.js} +102 -102
- package/dist/typesync-studio/dist/assets/{index-B5RxXGeM.js.map → index-Dmh0I_CD.js.map} +1 -1
- package/dist/typesync-studio/dist/index.html +1 -1
- package/dist/utils/translate-filter-to-graphql.d.ts +22 -5
- package/dist/utils/translate-filter-to-graphql.d.ts.map +1 -1
- package/dist/utils/translate-filter-to-graphql.js +77 -11
- package/dist/utils/translate-filter-to-graphql.js.map +1 -1
- package/package.json +2 -2
- package/src/entity/find-many-public.ts +46 -9
- package/src/entity/types.ts +11 -0
- package/src/utils/translate-filter-to-graphql.ts +85 -14
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
<title>Graph Protocol | Hypergraph TypeSync</title>
|
|
22
22
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
23
23
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
24
|
-
<script type="module" crossorigin src="/assets/index-
|
|
24
|
+
<script type="module" crossorigin src="/assets/index-Dmh0I_CD.js"></script>
|
|
25
25
|
<link rel="stylesheet" crossorigin href="/assets/index-BY93eSrW.css">
|
|
26
26
|
</head>
|
|
27
27
|
<body class="h-full w-full">
|
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
import { type Entity } from '@graphprotocol/hypergraph';
|
|
2
2
|
import type * as Schema from 'effect/Schema';
|
|
3
|
+
type EntityIdGraphqlFilter = {
|
|
4
|
+
is: string;
|
|
5
|
+
} | {
|
|
6
|
+
in: readonly string[];
|
|
7
|
+
};
|
|
8
|
+
type RelationSomeFilter = {
|
|
9
|
+
typeId: {
|
|
10
|
+
is: string;
|
|
11
|
+
};
|
|
12
|
+
toEntityId?: EntityIdGraphqlFilter;
|
|
13
|
+
};
|
|
14
|
+
type BacklinkSomeFilter = {
|
|
15
|
+
typeId: {
|
|
16
|
+
is: string;
|
|
17
|
+
};
|
|
18
|
+
fromEntityId?: EntityIdGraphqlFilter;
|
|
19
|
+
};
|
|
3
20
|
type GraphqlFilterEntry = {
|
|
4
21
|
values: {
|
|
5
22
|
some: {
|
|
@@ -43,11 +60,11 @@ type GraphqlFilterEntry = {
|
|
|
43
60
|
and: GraphqlFilterEntry[];
|
|
44
61
|
} | {
|
|
45
62
|
relations: {
|
|
46
|
-
some:
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
63
|
+
some: RelationSomeFilter;
|
|
64
|
+
};
|
|
65
|
+
} | {
|
|
66
|
+
backlinks: {
|
|
67
|
+
some: BacklinkSomeFilter;
|
|
51
68
|
};
|
|
52
69
|
} | {
|
|
53
70
|
id: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translate-filter-to-graphql.d.ts","sourceRoot":"","sources":["../../src/utils/translate-filter-to-graphql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAG7C,KAAK,kBAAkB,GACnB;IACE,MAAM,EAAE;QACN,IAAI,EACA;YACE,UAAU,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC;YAC3B,IAAI,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,GAAG;gBAAE,UAAU,EAAE,MAAM,CAAA;aAAE,GAAG;gBAAE,QAAQ,EAAE,MAAM,CAAA;aAAE,GAAG;gBAAE,QAAQ,EAAE,MAAM,CAAA;aAAE,CAAC;SAC7F,GACD;YACE,UAAU,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC;YAC3B,OAAO,EAAE;gBAAE,EAAE,EAAE,OAAO,CAAA;aAAE,CAAC;SAC1B,GACD;YACE,UAAU,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC;YAC3B,KAAK,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,GAAG;gBAAE,WAAW,EAAE,MAAM,CAAA;aAAE,GAAG;gBAAE,QAAQ,EAAE,MAAM,CAAA;aAAE,CAAC;SACxE,CAAC;KACP,CAAC;CACH,GACD;IACE,GAAG,EAAE,kBAAkB,CAAC;CACzB,GACD;IACE,EAAE,EAAE,kBAAkB,EAAE,CAAC;CAC1B,GACD;IACE,GAAG,EAAE,kBAAkB,EAAE,CAAC;CAC3B,GACD;IACE,SAAS,EAAE;QACT,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"translate-filter-to-graphql.d.ts","sourceRoot":"","sources":["../../src/utils/translate-filter-to-graphql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAG7C,KAAK,qBAAqB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAExE,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,YAAY,CAAC,EAAE,qBAAqB,CAAC;CACtC,CAAC;AAEF,KAAK,kBAAkB,GACnB;IACE,MAAM,EAAE;QACN,IAAI,EACA;YACE,UAAU,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC;YAC3B,IAAI,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,GAAG;gBAAE,UAAU,EAAE,MAAM,CAAA;aAAE,GAAG;gBAAE,QAAQ,EAAE,MAAM,CAAA;aAAE,GAAG;gBAAE,QAAQ,EAAE,MAAM,CAAA;aAAE,CAAC;SAC7F,GACD;YACE,UAAU,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC;YAC3B,OAAO,EAAE;gBAAE,EAAE,EAAE,OAAO,CAAA;aAAE,CAAC;SAC1B,GACD;YACE,UAAU,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,CAAC;YAC3B,KAAK,EAAE;gBAAE,EAAE,EAAE,MAAM,CAAA;aAAE,GAAG;gBAAE,WAAW,EAAE,MAAM,CAAA;aAAE,GAAG;gBAAE,QAAQ,EAAE,MAAM,CAAA;aAAE,CAAC;SACxE,CAAC;KACP,CAAC;CACH,GACD;IACE,GAAG,EAAE,kBAAkB,CAAC;CACzB,GACD;IACE,EAAE,EAAE,kBAAkB,EAAE,CAAC;CAC1B,GACD;IACE,GAAG,EAAE,kBAAkB,EAAE,CAAC;CAC3B,GACD;IACE,SAAS,EAAE;QACT,IAAI,EAAE,kBAAkB,CAAC;KAC1B,CAAC;CACH,GACD;IACE,SAAS,EAAE;QACT,IAAI,EAAE,kBAAkB,CAAC;KAC1B,CAAC;CACH,GACD;IACE,EAAE,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;CACH,GACD;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CAAE,CAAC;AAE3B;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,YAAY,EAC3E,MAAM,EAAE;KAAG,CAAC,IAAI,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GAAG,SAAS,EAC/G,IAAI,EAAE,CAAC,GACN,kBAAkB,CAsLpB"}
|
|
@@ -10,15 +10,6 @@ export function translateFilterToGraphql(filter, type) {
|
|
|
10
10
|
return {};
|
|
11
11
|
}
|
|
12
12
|
const graphqlFilter = [];
|
|
13
|
-
const buildRelationExistsFilter = propertyId => ({
|
|
14
|
-
relations: {
|
|
15
|
-
some: {
|
|
16
|
-
typeId: {
|
|
17
|
-
is: propertyId
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
13
|
for (const [fieldName, fieldFilter] of Object.entries(filter)) {
|
|
23
14
|
if (fieldName === 'or') {
|
|
24
15
|
graphqlFilter.push({
|
|
@@ -53,17 +44,92 @@ export function translateFilterToGraphql(filter, type) {
|
|
|
53
44
|
if (!Option.isSome(propertyId) || !Option.isSome(propertyType)) continue;
|
|
54
45
|
if (propertyType.value === 'relation') {
|
|
55
46
|
const relationFilter = fieldFilter;
|
|
47
|
+
const isBacklink = SchemaAST.getAnnotation(Constants.RelationBacklinkSymbol)(propertySignature.type).pipe(Option.getOrElse(() => false));
|
|
48
|
+
// Normalize entityId shorthand: string → { is: string }
|
|
49
|
+
const entityIdFilter = typeof relationFilter.entityId === 'string' ? {
|
|
50
|
+
is: relationFilter.entityId
|
|
51
|
+
} : relationFilter.entityId;
|
|
52
|
+
if (entityIdFilter) {
|
|
53
|
+
const entityIdValue = typeof entityIdFilter.is === 'string' && entityIdFilter.is ? {
|
|
54
|
+
is: entityIdFilter.is
|
|
55
|
+
} : Array.isArray(entityIdFilter.in) && entityIdFilter.in.length > 0 ? {
|
|
56
|
+
in: entityIdFilter.in
|
|
57
|
+
} : undefined;
|
|
58
|
+
if (entityIdValue === undefined) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (isBacklink) {
|
|
62
|
+
graphqlFilter.push({
|
|
63
|
+
backlinks: {
|
|
64
|
+
some: {
|
|
65
|
+
typeId: {
|
|
66
|
+
is: propertyId.value
|
|
67
|
+
},
|
|
68
|
+
fromEntityId: entityIdValue
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
} else {
|
|
73
|
+
graphqlFilter.push({
|
|
74
|
+
relations: {
|
|
75
|
+
some: {
|
|
76
|
+
typeId: {
|
|
77
|
+
is: propertyId.value
|
|
78
|
+
},
|
|
79
|
+
toEntityId: entityIdValue
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
56
85
|
if (relationFilter.exists === true) {
|
|
57
|
-
|
|
86
|
+
if (isBacklink) {
|
|
87
|
+
graphqlFilter.push({
|
|
88
|
+
backlinks: {
|
|
89
|
+
some: {
|
|
90
|
+
typeId: {
|
|
91
|
+
is: propertyId.value
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
} else {
|
|
97
|
+
graphqlFilter.push({
|
|
98
|
+
relations: {
|
|
99
|
+
some: {
|
|
100
|
+
typeId: {
|
|
101
|
+
is: propertyId.value
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
58
107
|
continue;
|
|
59
108
|
}
|
|
60
109
|
if (relationFilter.exists === false) {
|
|
61
|
-
const existsFilter =
|
|
110
|
+
const existsFilter = isBacklink ? {
|
|
111
|
+
backlinks: {
|
|
112
|
+
some: {
|
|
113
|
+
typeId: {
|
|
114
|
+
is: propertyId.value
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
} : {
|
|
119
|
+
relations: {
|
|
120
|
+
some: {
|
|
121
|
+
typeId: {
|
|
122
|
+
is: propertyId.value
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
};
|
|
62
127
|
graphqlFilter.push({
|
|
63
128
|
not: existsFilter
|
|
64
129
|
});
|
|
65
130
|
continue;
|
|
66
131
|
}
|
|
132
|
+
continue;
|
|
67
133
|
}
|
|
68
134
|
if (propertyType.value === 'string' && (fieldFilter.is || fieldFilter.startsWith || fieldFilter.endsWith || fieldFilter.contains)) {
|
|
69
135
|
graphqlFilter.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translate-filter-to-graphql.js","names":["Constants","Option","SchemaAST","translateFilterToGraphql","filter","type","graphqlFilter","
|
|
1
|
+
{"version":3,"file":"translate-filter-to-graphql.js","names":["Constants","Option","SchemaAST","translateFilterToGraphql","filter","type","graphqlFilter","fieldName","fieldFilter","Object","entries","push","or","map","not","idFilter","is","id","ast","propertySignature","propertySignatures","find","a","name","propertyId","getAnnotation","PropertyIdSymbol","propertyType","PropertyTypeSymbol","isSome","value","relationFilter","isBacklink","RelationBacklinkSymbol","pipe","getOrElse","entityIdFilter","entityId","entityIdValue","Array","isArray","in","length","undefined","backlinks","some","typeId","fromEntityId","relations","toEntityId","exists","existsFilter","startsWith","endsWith","contains","values","text","includes","boolean","greaterThan","lessThan","float","and"],"sources":["../../src/utils/translate-filter-to-graphql.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@graphprotocol/hypergraph",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "SDK for building performant, type-safe, local-first dapps on top of The Graph ecosystem knowledge graphs.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"@effect/platform-node": "^0.96.1",
|
|
42
42
|
"@effect/printer": "^0.45.0",
|
|
43
43
|
"@effect/printer-ansi": "^0.45.0",
|
|
44
|
-
"@geoprotocol/geo-sdk": "^0.
|
|
44
|
+
"@geoprotocol/geo-sdk": "^0.3.0",
|
|
45
45
|
"@noble/ciphers": "^1.3.0",
|
|
46
46
|
"@noble/curves": "^1.9.7",
|
|
47
47
|
"@noble/hashes": "^1.8.0",
|
|
@@ -58,13 +58,6 @@ const buildEntitiesQuery = (
|
|
|
58
58
|
.filter(Boolean)
|
|
59
59
|
.join(', ');
|
|
60
60
|
|
|
61
|
-
const orderByArgs = useOrderBy ? 'propertyId: $propertyId\n sortDirection: $sortDirection\n ' : '';
|
|
62
|
-
const entitySpaceFilter =
|
|
63
|
-
spaceSelection.mode === 'single'
|
|
64
|
-
? 'spaceIds: {in: [$spaceId]},'
|
|
65
|
-
: spaceSelection.mode === 'many'
|
|
66
|
-
? 'spaceIds: {in: $spaceIds},'
|
|
67
|
-
: '';
|
|
68
61
|
const valuesListFilter =
|
|
69
62
|
spaceSelection.mode === 'single'
|
|
70
63
|
? '(filter: { spaceId: { is: $spaceId } })'
|
|
@@ -72,11 +65,22 @@ const buildEntitiesQuery = (
|
|
|
72
65
|
? '(filter: { spaceId: { in: $spaceIds } })'
|
|
73
66
|
: '';
|
|
74
67
|
|
|
75
|
-
|
|
68
|
+
// entitiesOrderedByProperty doesn't support the native typeIds filter yet,
|
|
69
|
+
// so we fall back to the relation-based filter for orderBy queries
|
|
70
|
+
if (useOrderBy) {
|
|
71
|
+
const orderByArgs = 'propertyId: $propertyId\n sortDirection: $sortDirection\n ';
|
|
72
|
+
const entitySpaceFilter =
|
|
73
|
+
spaceSelection.mode === 'single'
|
|
74
|
+
? 'spaceIds: {in: [$spaceId]},'
|
|
75
|
+
: spaceSelection.mode === 'many'
|
|
76
|
+
? 'spaceIds: {in: $spaceIds},'
|
|
77
|
+
: '';
|
|
78
|
+
|
|
79
|
+
return `
|
|
76
80
|
query ${queryName}(${variableDefinitions}) {
|
|
77
81
|
entities: ${queryName}(
|
|
78
82
|
${orderByArgs}filter: { and: [{
|
|
79
|
-
relations: {some: {typeId: {is: "8f151ba4de204e3c9cb499ddf96f48f1"}, toEntityId: {in: $typeIds}}},
|
|
83
|
+
relations: {some: {typeId: {is: "8f151ba4de204e3c9cb499ddf96f48f1"}, toEntityId: {in: $typeIds}}},
|
|
80
84
|
${entitySpaceFilter}
|
|
81
85
|
}, $filter]}
|
|
82
86
|
first: $first
|
|
@@ -95,6 +99,39 @@ query ${queryName}(${variableDefinitions}) {
|
|
|
95
99
|
}
|
|
96
100
|
${level1Relations}
|
|
97
101
|
}
|
|
102
|
+
}`;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// For the regular entities query, use the native spaceId/spaceIds and typeIds filters
|
|
106
|
+
const spaceArg =
|
|
107
|
+
spaceSelection.mode === 'single'
|
|
108
|
+
? 'spaceId: $spaceId'
|
|
109
|
+
: spaceSelection.mode === 'many'
|
|
110
|
+
? 'spaceIds: {in: $spaceIds}'
|
|
111
|
+
: '';
|
|
112
|
+
|
|
113
|
+
return `
|
|
114
|
+
query ${queryName}(${variableDefinitions}) {
|
|
115
|
+
entities: ${queryName}(
|
|
116
|
+
${spaceArg}
|
|
117
|
+
typeIds: {in: $typeIds}
|
|
118
|
+
filter: $filter
|
|
119
|
+
first: $first
|
|
120
|
+
offset: $offset
|
|
121
|
+
) {
|
|
122
|
+
id
|
|
123
|
+
name${spaceIdsSelection}
|
|
124
|
+
valuesList${valuesListFilter} {
|
|
125
|
+
propertyId
|
|
126
|
+
text
|
|
127
|
+
boolean
|
|
128
|
+
float
|
|
129
|
+
datetime
|
|
130
|
+
point
|
|
131
|
+
schedule
|
|
132
|
+
}
|
|
133
|
+
${level1Relations}
|
|
134
|
+
}
|
|
98
135
|
}`;
|
|
99
136
|
};
|
|
100
137
|
|
package/src/entity/types.ts
CHANGED
|
@@ -74,6 +74,16 @@ export type EntityIdFilter = {
|
|
|
74
74
|
is?: string;
|
|
75
75
|
};
|
|
76
76
|
|
|
77
|
+
export type RelationEntityIdFilter =
|
|
78
|
+
| {
|
|
79
|
+
is: string;
|
|
80
|
+
in?: never;
|
|
81
|
+
}
|
|
82
|
+
| {
|
|
83
|
+
in: readonly string[];
|
|
84
|
+
is?: never;
|
|
85
|
+
};
|
|
86
|
+
|
|
77
87
|
export type CrossFieldFilter<T, Extra extends object = Record<never, never>> = {
|
|
78
88
|
[K in keyof T]?: EntityFieldFilter<T[K]>;
|
|
79
89
|
} & Extra & {
|
|
@@ -84,6 +94,7 @@ export type CrossFieldFilter<T, Extra extends object = Record<never, never>> = {
|
|
|
84
94
|
type RelationExistsFilter<T> = [T] extends [readonly unknown[] | undefined]
|
|
85
95
|
? {
|
|
86
96
|
exists?: boolean;
|
|
97
|
+
entityId?: string | RelationEntityIdFilter;
|
|
87
98
|
}
|
|
88
99
|
: Record<never, never>;
|
|
89
100
|
|
|
@@ -3,6 +3,18 @@ import * as Option from 'effect/Option';
|
|
|
3
3
|
import type * as Schema from 'effect/Schema';
|
|
4
4
|
import * as SchemaAST from 'effect/SchemaAST';
|
|
5
5
|
|
|
6
|
+
type EntityIdGraphqlFilter = { is: string } | { in: readonly string[] };
|
|
7
|
+
|
|
8
|
+
type RelationSomeFilter = {
|
|
9
|
+
typeId: { is: string };
|
|
10
|
+
toEntityId?: EntityIdGraphqlFilter;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
type BacklinkSomeFilter = {
|
|
14
|
+
typeId: { is: string };
|
|
15
|
+
fromEntityId?: EntityIdGraphqlFilter;
|
|
16
|
+
};
|
|
17
|
+
|
|
6
18
|
type GraphqlFilterEntry =
|
|
7
19
|
| {
|
|
8
20
|
values: {
|
|
@@ -32,9 +44,12 @@ type GraphqlFilterEntry =
|
|
|
32
44
|
}
|
|
33
45
|
| {
|
|
34
46
|
relations: {
|
|
35
|
-
some:
|
|
36
|
-
|
|
37
|
-
|
|
47
|
+
some: RelationSomeFilter;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
| {
|
|
51
|
+
backlinks: {
|
|
52
|
+
some: BacklinkSomeFilter;
|
|
38
53
|
};
|
|
39
54
|
}
|
|
40
55
|
| {
|
|
@@ -58,14 +73,6 @@ export function translateFilterToGraphql<S extends Schema.Schema.AnyNoContext>(
|
|
|
58
73
|
|
|
59
74
|
const graphqlFilter: GraphqlFilterEntry[] = [];
|
|
60
75
|
|
|
61
|
-
const buildRelationExistsFilter = (propertyId: string): GraphqlFilterEntry => ({
|
|
62
|
-
relations: {
|
|
63
|
-
some: {
|
|
64
|
-
typeId: { is: propertyId },
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
|
|
69
76
|
for (const [fieldName, fieldFilter] of Object.entries(filter)) {
|
|
70
77
|
if (fieldName === 'or') {
|
|
71
78
|
graphqlFilter.push({
|
|
@@ -107,20 +114,84 @@ export function translateFilterToGraphql<S extends Schema.Schema.AnyNoContext>(
|
|
|
107
114
|
if (!Option.isSome(propertyId) || !Option.isSome(propertyType)) continue;
|
|
108
115
|
|
|
109
116
|
if (propertyType.value === 'relation') {
|
|
110
|
-
const relationFilter = fieldFilter as {
|
|
117
|
+
const relationFilter = fieldFilter as {
|
|
118
|
+
exists?: boolean;
|
|
119
|
+
entityId?: string | { is?: string; in?: readonly string[] };
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
const isBacklink = SchemaAST.getAnnotation<boolean>(Constants.RelationBacklinkSymbol)(
|
|
123
|
+
propertySignature.type,
|
|
124
|
+
).pipe(Option.getOrElse(() => false));
|
|
125
|
+
|
|
126
|
+
// Normalize entityId shorthand: string → { is: string }
|
|
127
|
+
const entityIdFilter =
|
|
128
|
+
typeof relationFilter.entityId === 'string' ? { is: relationFilter.entityId } : relationFilter.entityId;
|
|
129
|
+
|
|
130
|
+
if (entityIdFilter) {
|
|
131
|
+
const entityIdValue: EntityIdGraphqlFilter | undefined =
|
|
132
|
+
typeof entityIdFilter.is === 'string' && entityIdFilter.is
|
|
133
|
+
? { is: entityIdFilter.is }
|
|
134
|
+
: Array.isArray(entityIdFilter.in) && entityIdFilter.in.length > 0
|
|
135
|
+
? { in: entityIdFilter.in }
|
|
136
|
+
: undefined;
|
|
137
|
+
|
|
138
|
+
if (entityIdValue === undefined) {
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (isBacklink) {
|
|
143
|
+
graphqlFilter.push({
|
|
144
|
+
backlinks: {
|
|
145
|
+
some: {
|
|
146
|
+
typeId: { is: propertyId.value },
|
|
147
|
+
fromEntityId: entityIdValue,
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
} else {
|
|
152
|
+
graphqlFilter.push({
|
|
153
|
+
relations: {
|
|
154
|
+
some: {
|
|
155
|
+
typeId: { is: propertyId.value },
|
|
156
|
+
toEntityId: entityIdValue,
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
}
|
|
111
162
|
|
|
112
163
|
if (relationFilter.exists === true) {
|
|
113
|
-
|
|
164
|
+
if (isBacklink) {
|
|
165
|
+
graphqlFilter.push({
|
|
166
|
+
backlinks: {
|
|
167
|
+
some: {
|
|
168
|
+
typeId: { is: propertyId.value },
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
} else {
|
|
173
|
+
graphqlFilter.push({
|
|
174
|
+
relations: {
|
|
175
|
+
some: {
|
|
176
|
+
typeId: { is: propertyId.value },
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
}
|
|
114
181
|
continue;
|
|
115
182
|
}
|
|
116
183
|
|
|
117
184
|
if (relationFilter.exists === false) {
|
|
118
|
-
const existsFilter =
|
|
185
|
+
const existsFilter: GraphqlFilterEntry = isBacklink
|
|
186
|
+
? { backlinks: { some: { typeId: { is: propertyId.value } } } }
|
|
187
|
+
: { relations: { some: { typeId: { is: propertyId.value } } } };
|
|
119
188
|
graphqlFilter.push({
|
|
120
189
|
not: existsFilter,
|
|
121
190
|
});
|
|
122
191
|
continue;
|
|
123
192
|
}
|
|
193
|
+
|
|
194
|
+
continue;
|
|
124
195
|
}
|
|
125
196
|
|
|
126
197
|
if (
|