11import { storage } from '@powersync/service-core' ;
2- import { ParameterLookup , RequestParameters } from '@powersync/service-sync-rules' ;
2+ import {
3+ mergeBucketParameterQueriers ,
4+ ParameterLookup ,
5+ PendingQueriers ,
6+ RequestParameters
7+ } from '@powersync/service-sync-rules' ;
38import { SqlBucketDescriptor } from '@powersync/service-sync-rules/src/SqlBucketDescriptor.js' ;
49import { expect , test } from 'vitest' ;
510import * as test_utils from '../test-utils/test-utils-index.js' ;
@@ -314,7 +319,7 @@ bucket_definitions:
314319 data: []
315320 `
316321 } ) ;
317- const sync_rules = syncRules . parsed ( test_utils . PARSE_OPTIONS ) . sync_rules ;
322+ const sync_rules = syncRules . parsed ( test_utils . PARSE_OPTIONS ) . hydratedSyncRules ( ) ;
318323 const bucketStorage = factory . getInstance ( syncRules ) ;
319324
320325 await bucketStorage . startBatch ( test_utils . BATCH_OPTIONS , async ( batch ) => {
@@ -333,22 +338,19 @@ bucket_definitions:
333338
334339 const parameters = new RequestParameters ( { sub : 'u1' } , { } ) ;
335340
336- const q1 = ( sync_rules . bucketParameterSources [ 0 ] as SqlBucketDescriptor ) . parameterQueries [ 0 ] ;
341+ const querier = sync_rules . getBucketParameterQuerier ( test_utils . querierOptions ( parameters ) ) . querier ;
337342
338- const lookups = q1 . getLookups ( parameters ) ;
343+ const lookups = querier . parameterQueryLookups ;
339344 expect ( lookups ) . toEqual ( [ ParameterLookup . normalized ( 'by_workspace' , '1' , [ 'u1' ] ) ] ) ;
340345
341346 const parameter_sets = await checkpoint . getParameterSets ( lookups ) ;
342347 expect ( parameter_sets ) . toEqual ( [ { workspace_id : 'workspace1' } ] ) ;
343348
344- const buckets = await sync_rules
345- . hydrate ( )
346- . getBucketParameterQuerier ( test_utils . querierOptions ( parameters ) )
347- . querier . queryDynamicBucketDescriptions ( {
348- getParameterSets ( lookups ) {
349- return checkpoint . getParameterSets ( lookups ) ;
350- }
351- } ) ;
349+ const buckets = await querier . queryDynamicBucketDescriptions ( {
350+ getParameterSets ( lookups ) {
351+ return checkpoint . getParameterSets ( lookups ) ;
352+ }
353+ } ) ;
352354 expect ( buckets ) . toEqual ( [
353355 { bucket : 'by_workspace["workspace1"]' , priority : 3 , definition : 'by_workspace' , inclusion_reasons : [ 'default' ] }
354356 ] ) ;
@@ -368,7 +370,7 @@ bucket_definitions:
368370 data: []
369371 `
370372 } ) ;
371- const sync_rules = syncRules . parsed ( test_utils . PARSE_OPTIONS ) . sync_rules ;
373+ const sync_rules = syncRules . parsed ( test_utils . PARSE_OPTIONS ) . hydratedSyncRules ( ) ;
372374 const bucketStorage = factory . getInstance ( syncRules ) ;
373375
374376 await bucketStorage . startBatch ( test_utils . BATCH_OPTIONS , async ( batch ) => {
@@ -409,23 +411,20 @@ bucket_definitions:
409411
410412 const parameters = new RequestParameters ( { sub : 'unknown' } , { } ) ;
411413
412- const q1 = ( sync_rules . bucketParameterSources [ 0 ] as SqlBucketDescriptor ) . parameterQueries [ 0 ] ;
414+ const querier = sync_rules . getBucketParameterQuerier ( test_utils . querierOptions ( parameters ) ) . querier ;
413415
414- const lookups = q1 . getLookups ( parameters ) ;
416+ const lookups = querier . parameterQueryLookups ;
415417 expect ( lookups ) . toEqual ( [ ParameterLookup . normalized ( 'by_public_workspace' , '1' , [ ] ) ] ) ;
416418
417419 const parameter_sets = await checkpoint . getParameterSets ( lookups ) ;
418420 parameter_sets . sort ( ( a , b ) => JSON . stringify ( a ) . localeCompare ( JSON . stringify ( b ) ) ) ;
419421 expect ( parameter_sets ) . toEqual ( [ { workspace_id : 'workspace1' } , { workspace_id : 'workspace3' } ] ) ;
420422
421- const buckets = await sync_rules
422- . hydrate ( )
423- . getBucketParameterQuerier ( test_utils . querierOptions ( parameters ) )
424- . querier . queryDynamicBucketDescriptions ( {
425- getParameterSets ( lookups ) {
426- return checkpoint . getParameterSets ( lookups ) ;
427- }
428- } ) ;
423+ const buckets = await querier . queryDynamicBucketDescriptions ( {
424+ getParameterSets ( lookups ) {
425+ return checkpoint . getParameterSets ( lookups ) ;
426+ }
427+ } ) ;
429428 buckets . sort ( ( a , b ) => a . bucket . localeCompare ( b . bucket ) ) ;
430429 expect ( buckets ) . toEqual ( [
431430 {
@@ -459,7 +458,7 @@ bucket_definitions:
459458 data: []
460459 `
461460 } ) ;
462- const sync_rules = syncRules . parsed ( test_utils . PARSE_OPTIONS ) . sync_rules ;
461+ const sync_rules = syncRules . parsed ( test_utils . PARSE_OPTIONS ) . hydratedSyncRules ( ) ;
463462 const bucketStorage = factory . getInstance ( syncRules ) ;
464463
465464 await bucketStorage . startBatch ( test_utils . BATCH_OPTIONS , async ( batch ) => {
@@ -513,32 +512,25 @@ bucket_definitions:
513512 const parameters = new RequestParameters ( { sub : 'u1' } , { } ) ;
514513
515514 // Test intermediate values - could be moved to sync_rules.test.ts
516- const q1 = ( sync_rules . bucketParameterSources [ 0 ] as SqlBucketDescriptor ) . parameterQueries [ 0 ] ;
517- const lookups1 = q1 . getLookups ( parameters ) ;
518- expect ( lookups1 ) . toEqual ( [ ParameterLookup . normalized ( 'by_workspace' , '1' , [ ] ) ] ) ;
519-
520- const parameter_sets1 = await checkpoint . getParameterSets ( lookups1 ) ;
521- parameter_sets1 . sort ( ( a , b ) => JSON . stringify ( a ) . localeCompare ( JSON . stringify ( b ) ) ) ;
522- expect ( parameter_sets1 ) . toEqual ( [ { workspace_id : 'workspace1' } ] ) ;
515+ const querier = sync_rules . getBucketParameterQuerier ( test_utils . querierOptions ( parameters ) ) . querier ;
523516
524- const q2 = ( sync_rules . bucketParameterSources [ 0 ] as SqlBucketDescriptor ) . parameterQueries [ 1 ] ;
525- const lookups2 = q2 . getLookups ( parameters ) ;
526- expect ( lookups2 ) . toEqual ( [ ParameterLookup . normalized ( 'by_workspace' , '2' , [ 'u1' ] ) ] ) ;
517+ const lookups = querier . parameterQueryLookups ;
518+ expect ( lookups ) . toEqual ( [
519+ ParameterLookup . normalized ( 'by_workspace' , '1' , [ ] ) ,
520+ ParameterLookup . normalized ( 'by_workspace' , '2' , [ 'u1' ] )
521+ ] ) ;
527522
528- const parameter_sets2 = await checkpoint . getParameterSets ( lookups2 ) ;
529- parameter_sets2 . sort ( ( a , b ) => JSON . stringify ( a ) . localeCompare ( JSON . stringify ( b ) ) ) ;
530- expect ( parameter_sets2 ) . toEqual ( [ { workspace_id : 'workspace3' } ] ) ;
523+ const parameter_sets = await checkpoint . getParameterSets ( lookups ) ;
524+ parameter_sets . sort ( ( a , b ) => JSON . stringify ( a ) . localeCompare ( JSON . stringify ( b ) ) ) ;
525+ expect ( parameter_sets ) . toEqual ( [ { workspace_id : 'workspace1' } , { workspace_id : 'workspace3' } ] ) ;
531526
532527 // Test final values - the important part
533528 const buckets = (
534- await sync_rules
535- . hydrate ( )
536- . getBucketParameterQuerier ( test_utils . querierOptions ( parameters ) )
537- . querier . queryDynamicBucketDescriptions ( {
538- getParameterSets ( lookups ) {
539- return checkpoint . getParameterSets ( lookups ) ;
540- }
541- } )
529+ await querier . queryDynamicBucketDescriptions ( {
530+ getParameterSets ( lookups ) {
531+ return checkpoint . getParameterSets ( lookups ) ;
532+ }
533+ } )
542534 ) . map ( ( e ) => e . bucket ) ;
543535 buckets . sort ( ) ;
544536 expect ( buckets ) . toEqual ( [ 'by_workspace["workspace1"]' , 'by_workspace["workspace3"]' ] ) ;
0 commit comments