@@ -117,6 +117,232 @@ describe('selectModulesInProjectSource', () => {
117117 }
118118 ` ) ;
119119 } ) ;
120+
121+ it ( 'keeps indices that are fully covered by the modules' , ( ) => {
122+ const result = run (
123+ gql `
124+ type Test
125+ @rootEntity(
126+ indices: [
127+ { fields: ["field1", "key"] }
128+ { fields: ["field1", "children.field1"], sparse: true }
129+ ]
130+ )
131+ @modules(in: "module1") {
132+ key: String @key @modules(in: "module1")
133+ field1: String @modules(in: "module1")
134+ children: [Child] @modules(in: "module1")
135+ }
136+
137+ type Child @childEntity @modules(in: "module1") {
138+ field1: String @modules(in: "module1")
139+ field2: String @modules(in: "module1")
140+ }
141+ ` ,
142+ [ 'module1' ] ,
143+ ) ;
144+ expect ( result ) . to . equal ( `
145+ type Test
146+ @rootEntity(
147+ indices: [
148+ { fields: ["field1", "key"] }
149+ { fields: ["field1", "children.field1"], sparse: true }
150+ ]
151+ )
152+ @modules(in: ["module1"]) {
153+ key: String @key @modules(in: ["module1"])
154+ field1: String @modules(in: ["module1"])
155+ children: [Child] @modules(in: ["module1"])
156+ }
157+
158+ type Child @childEntity @modules(in: ["module1"]) {
159+ field1: String @modules(in: ["module1"])
160+ field2: String @modules(in: ["module1"])
161+ }
162+ ` ) ;
163+ } ) ;
164+
165+ it ( 'removes indices where none of the specified fields are included in the selected modules' , ( ) => {
166+ const result = run (
167+ gql `
168+ type Test
169+ @rootEntity(
170+ indices: [
171+ { fields: ["field1", "key"] }
172+ { fields: ["field2", "children.field2"], sparse: true }
173+ ]
174+ )
175+ @modules(in: "module1") {
176+ key: String @key @modules(in: "module1")
177+ field1: String @modules(in: "module1")
178+ field2: String @modules(in: "module2")
179+ children: [Child] @modules(in: "module1")
180+ }
181+
182+ type Child @childEntity @modules(in: "module1") {
183+ field1: String @modules(in: "module1")
184+ field2: String @modules(in: "module2")
185+ }
186+ ` ,
187+ [ 'module1' ] ,
188+ ) ;
189+ expect ( result ) . to . equal ( `
190+ type Test
191+ @rootEntity(
192+ indices: [
193+ { fields: ["field1", "key"] }
194+
195+ ]
196+ )
197+ @modules(in: ["module1"]) {
198+ key: String @key @modules(in: ["module1"])
199+ field1: String @modules(in: ["module1"])
200+
201+ children: [Child] @modules(in: ["module1"])
202+ }
203+
204+ type Child @childEntity @modules(in: ["module1"]) {
205+ field1: String @modules(in: ["module1"])
206+
207+ }
208+ ` ) ;
209+ } ) ;
210+
211+ it ( 'removes the whole indices arg if all indices have been removed' , ( ) => {
212+ const result = run (
213+ gql `
214+ type Test
215+ @rootEntity(
216+ indices: [
217+ { fields: ["field2"] }
218+ { fields: ["field2", "children.field2"], sparse: true }
219+ ]
220+ )
221+ @modules(in: "module1") {
222+ key: String @key @modules(in: "module1")
223+ field1: String @modules(in: "module1")
224+ field2: String @modules(in: "module2")
225+ children: [Child] @modules(in: "module1")
226+ }
227+
228+ type Child @childEntity @modules(in: "module1") {
229+ field1: String @modules(in: "module1")
230+ field2: String @modules(in: "module2")
231+ }
232+ ` ,
233+ [ 'module1' ] ,
234+ ) ;
235+ expect ( result ) . to . equal ( `
236+ type Test
237+ @rootEntity
238+ @modules(in: ["module1"]) {
239+ key: String @key @modules(in: ["module1"])
240+ field1: String @modules(in: ["module1"])
241+
242+ children: [Child] @modules(in: ["module1"])
243+ }
244+
245+ type Child @childEntity @modules(in: ["module1"]) {
246+ field1: String @modules(in: ["module1"])
247+
248+ }
249+ ` ) ;
250+ } ) ;
251+
252+ it ( 'removes the whole indices arg if all indices have been removed (and there are other args)' , ( ) => {
253+ const result = run (
254+ gql `
255+ type Test
256+ @rootEntity(
257+ flexSearch: true
258+ indices: [
259+ { fields: ["field2"] }
260+ { fields: ["field2", "children.field2"], sparse: true }
261+ ]
262+ )
263+ @modules(in: "module1") {
264+ key: String @key @modules(in: "module1")
265+ field1: String @modules(in: "module1")
266+ field2: String @modules(in: "module2")
267+ children: [Child] @modules(in: "module1")
268+ }
269+
270+ type Child @childEntity @modules(in: "module1") {
271+ field1: String @modules(in: "module1")
272+ field2: String @modules(in: "module2")
273+ }
274+ ` ,
275+ [ 'module1' ] ,
276+ ) ;
277+ expect ( result ) . to . equal ( `
278+ type Test
279+ @rootEntity(
280+ flexSearch: true
281+
282+ )
283+ @modules(in: ["module1"]) {
284+ key: String @key @modules(in: ["module1"])
285+ field1: String @modules(in: ["module1"])
286+
287+ children: [Child] @modules(in: ["module1"])
288+ }
289+
290+ type Child @childEntity @modules(in: ["module1"]) {
291+ field1: String @modules(in: ["module1"])
292+
293+ }
294+ ` ) ;
295+ } ) ;
296+
297+ it ( 'trims down indices that are partially covered by the modules' , ( ) => {
298+ const result = run (
299+ gql `
300+ type Test
301+ @rootEntity(
302+ indices: [
303+ { fields: ["field1", "key"] }
304+ {
305+ fields: ["field1", "children.field1", "children.field2"]
306+ sparse: true
307+ }
308+ ]
309+ )
310+ @modules(in: "module1") {
311+ key: String @key @modules(in: "module1")
312+ field1: String @modules(in: "module1")
313+ children: [Child] @modules(in: "module1")
314+ }
315+
316+ type Child @childEntity @modules(in: "module1") {
317+ field1: String @modules(in: "module1")
318+ field2: String @modules(in: "module2")
319+ }
320+ ` ,
321+ [ 'module1' ] ,
322+ ) ;
323+ expect ( result ) . to . equal ( `
324+ type Test
325+ @rootEntity(
326+ indices: [
327+ { fields: ["field1", "key"] }
328+ {
329+ fields: ["field1", "children.field1"]
330+ sparse: true
331+ }
332+ ]
333+ )
334+ @modules(in: ["module1"]) {
335+ key: String @key @modules(in: ["module1"])
336+ field1: String @modules(in: ["module1"])
337+ children: [Child] @modules(in: ["module1"])
338+ }
339+
340+ type Child @childEntity @modules(in: ["module1"]) {
341+ field1: String @modules(in: ["module1"])
342+
343+ }
344+ ` ) ;
345+ } ) ;
120346 } ) ;
121347
122348 describe ( 'with removeModuleDeclarations = true' , ( ) => {
0 commit comments