@powersync/service-sync-rules 0.35.0 → 0.37.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.
Files changed (138) hide show
  1. package/README.md +3 -3
  2. package/dist/BaseSqlDataQuery.d.ts +4 -4
  3. package/dist/BaseSqlDataQuery.js.map +1 -1
  4. package/dist/BucketDescription.d.ts +1 -1
  5. package/dist/BucketParameterQuerier.d.ts +23 -1
  6. package/dist/BucketParameterQuerier.js +24 -0
  7. package/dist/BucketParameterQuerier.js.map +1 -1
  8. package/dist/BucketSource.d.ts +36 -29
  9. package/dist/BucketSource.js +12 -28
  10. package/dist/BucketSource.js.map +1 -1
  11. package/dist/HydratedSyncConfig.d.ts +80 -0
  12. package/dist/HydratedSyncConfig.js +207 -0
  13. package/dist/HydratedSyncConfig.js.map +1 -0
  14. package/dist/HydrationState.d.ts +29 -6
  15. package/dist/HydrationState.js +17 -5
  16. package/dist/HydrationState.js.map +1 -1
  17. package/dist/SourceTableRef.d.ts +9 -0
  18. package/dist/SourceTableRef.js +4 -0
  19. package/dist/SourceTableRef.js.map +1 -0
  20. package/dist/SqlBucketDescriptor.d.ts +5 -4
  21. package/dist/SqlBucketDescriptor.js +3 -0
  22. package/dist/SqlBucketDescriptor.js.map +1 -1
  23. package/dist/SqlDataQuery.d.ts +2 -2
  24. package/dist/SqlDataQuery.js.map +1 -1
  25. package/dist/SqlParameterQuery.d.ts +8 -7
  26. package/dist/SqlParameterQuery.js +8 -4
  27. package/dist/SqlParameterQuery.js.map +1 -1
  28. package/dist/SqlSyncRules.d.ts +1 -1
  29. package/dist/StaticSqlParameterQuery.d.ts +2 -2
  30. package/dist/StaticSqlParameterQuery.js.map +1 -1
  31. package/dist/StorageVersion.d.ts +27 -0
  32. package/dist/StorageVersion.js +17 -0
  33. package/dist/StorageVersion.js.map +1 -0
  34. package/dist/SyncConfig.d.ts +17 -11
  35. package/dist/SyncConfig.js +17 -19
  36. package/dist/SyncConfig.js.map +1 -1
  37. package/dist/TablePattern.d.ts +8 -2
  38. package/dist/TablePattern.js +8 -0
  39. package/dist/TablePattern.js.map +1 -1
  40. package/dist/TableValuedFunctionSqlParameterQuery.d.ts +2 -2
  41. package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -1
  42. package/dist/TableValuedFunctions.js +16 -10
  43. package/dist/TableValuedFunctions.js.map +1 -1
  44. package/dist/cast.js +7 -5
  45. package/dist/cast.js.map +1 -1
  46. package/dist/compatibility.d.ts +3 -1
  47. package/dist/compatibility.js +12 -3
  48. package/dist/compatibility.js.map +1 -1
  49. package/dist/compiler/compiler.d.ts +2 -2
  50. package/dist/compiler/equality.d.ts +2 -0
  51. package/dist/compiler/equality.js +36 -0
  52. package/dist/compiler/equality.js.map +1 -1
  53. package/dist/compiler/parser.d.ts +1 -1
  54. package/dist/compiler/parser.js +7 -5
  55. package/dist/compiler/parser.js.map +1 -1
  56. package/dist/compiler/querier_graph.js +13 -2
  57. package/dist/compiler/querier_graph.js.map +1 -1
  58. package/dist/compiler/scope.d.ts +2 -2
  59. package/dist/compiler/scope.js +2 -1
  60. package/dist/compiler/scope.js.map +1 -1
  61. package/dist/compiler/sqlite.d.ts +4 -0
  62. package/dist/compiler/sqlite.js.map +1 -1
  63. package/dist/compiler/table.d.ts +26 -0
  64. package/dist/compiler/table.js +76 -0
  65. package/dist/compiler/table.js.map +1 -1
  66. package/dist/events/SqlEventDescriptor.d.ts +3 -3
  67. package/dist/events/SqlEventDescriptor.js +1 -1
  68. package/dist/events/SqlEventDescriptor.js.map +1 -1
  69. package/dist/events/SqlEventSourceQuery.d.ts +2 -2
  70. package/dist/events/SqlEventSourceQuery.js.map +1 -1
  71. package/dist/from_yaml.js +83 -19
  72. package/dist/from_yaml.js.map +1 -1
  73. package/dist/index.d.ts +4 -4
  74. package/dist/index.js +4 -4
  75. package/dist/index.js.map +1 -1
  76. package/dist/json_schema.js +7 -0
  77. package/dist/json_schema.js.map +1 -1
  78. package/dist/sql_functions.d.ts +4 -4
  79. package/dist/sql_functions.js +12 -6
  80. package/dist/sql_functions.js.map +1 -1
  81. package/dist/streams/filter.d.ts +8 -7
  82. package/dist/streams/filter.js +5 -3
  83. package/dist/streams/filter.js.map +1 -1
  84. package/dist/streams/stream.d.ts +5 -4
  85. package/dist/streams/stream.js +3 -0
  86. package/dist/streams/stream.js.map +1 -1
  87. package/dist/streams/variant.js +2 -2
  88. package/dist/streams/variant.js.map +1 -1
  89. package/dist/sync_plan/engine/factory.d.ts +4 -0
  90. package/dist/sync_plan/engine/factory.js +13 -0
  91. package/dist/sync_plan/engine/factory.js.map +1 -0
  92. package/dist/sync_plan/engine/javascript.js +0 -1
  93. package/dist/sync_plan/engine/javascript.js.map +1 -1
  94. package/dist/sync_plan/engine/scalar_expression_engine.d.ts +0 -4
  95. package/dist/sync_plan/engine/scalar_expression_engine.js +2 -2
  96. package/dist/sync_plan/engine/scalar_expression_engine.js.map +1 -1
  97. package/dist/sync_plan/engine/sqlite.d.ts +26 -5
  98. package/dist/sync_plan/engine/sqlite.js +38 -23
  99. package/dist/sync_plan/engine/sqlite.js.map +1 -1
  100. package/dist/sync_plan/evaluator/bucket_data_source.d.ts +6 -7
  101. package/dist/sync_plan/evaluator/bucket_data_source.js +67 -57
  102. package/dist/sync_plan/evaluator/bucket_data_source.js.map +1 -1
  103. package/dist/sync_plan/evaluator/bucket_source.d.ts +2 -2
  104. package/dist/sync_plan/evaluator/bucket_source.js +4 -4
  105. package/dist/sync_plan/evaluator/bucket_source.js.map +1 -1
  106. package/dist/sync_plan/evaluator/index.d.ts +0 -2
  107. package/dist/sync_plan/evaluator/index.js.map +1 -1
  108. package/dist/sync_plan/evaluator/parameter_evaluator.d.ts +52 -3
  109. package/dist/sync_plan/evaluator/parameter_evaluator.js +238 -25
  110. package/dist/sync_plan/evaluator/parameter_evaluator.js.map +1 -1
  111. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.d.ts +9 -11
  112. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js +63 -32
  113. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js.map +1 -1
  114. package/dist/sync_plan/expression.js +1 -1
  115. package/dist/sync_plan/expression.js.map +1 -1
  116. package/dist/sync_plan/expression_to_sql.js +1 -1
  117. package/dist/sync_plan/expression_to_sql.js.map +1 -1
  118. package/dist/sync_plan/expression_visitor.d.ts +4 -1
  119. package/dist/sync_plan/expression_visitor.js +21 -12
  120. package/dist/sync_plan/expression_visitor.js.map +1 -1
  121. package/dist/sync_plan/plan.d.ts +3 -3
  122. package/dist/sync_plan/serialize.d.ts +2 -2
  123. package/dist/types/custom_sqlite_value.d.ts +1 -1
  124. package/dist/types/custom_sqlite_value.js +1 -1
  125. package/dist/types.d.ts +13 -3
  126. package/dist/types.js +1 -1
  127. package/dist/types.js.map +1 -1
  128. package/dist/utils.d.ts +2 -1
  129. package/dist/utils.js +14 -1
  130. package/dist/utils.js.map +1 -1
  131. package/package.json +6 -6
  132. package/schema/sync_rules.json +13 -0
  133. package/dist/HydratedSyncRules.d.ts +0 -46
  134. package/dist/HydratedSyncRules.js +0 -88
  135. package/dist/HydratedSyncRules.js.map +0 -1
  136. package/dist/SourceTableInterface.d.ts +0 -5
  137. package/dist/SourceTableInterface.js +0 -2
  138. package/dist/SourceTableInterface.js.map +0 -1
package/README.md CHANGED
@@ -1,17 +1,17 @@
1
1
  # powersync-sync-rules
2
2
 
3
- A library containing logic for PowerSync sync rules.
3
+ A library containing logic for PowerSync sync config.
4
4
 
5
5
  This is not intended to be used directly by users of PowerSync. If you are interested in the internals, read on.
6
6
 
7
7
  # Overview
8
8
 
9
- A core design constraint is that sync rules define two operations:
9
+ A core design constraint is that the sync config defines two operations:
10
10
 
11
11
  1. Given a data row, compute a list of buckets that it belongs to.
12
12
  2. Given an authenticated user, return a list of buckets for the user.
13
13
 
14
- This implementation of sync rules use SQL queries to declaratively define those operations using familiar SQL operations.
14
+ This implementation of sync config uses SQL queries to declaratively define those operations using familiar SQL operations.
15
15
 
16
16
  We define (1) using data queries, and (2) using parameter queries.
17
17
 
@@ -1,7 +1,7 @@
1
1
  import { SelectedColumn } from 'pgsql-ast-parser';
2
2
  import { SqlRuleError } from './errors.js';
3
3
  import { ColumnDefinition } from './ExpressionType.js';
4
- import { SourceTableInterface } from './SourceTableInterface.js';
4
+ import { SourceTableRef } from './SourceTableRef.js';
5
5
  import { AvailableTable, SqlTools } from './sql_filters.js';
6
6
  import { TablePattern } from './TablePattern.js';
7
7
  import { QueryParameters, QuerySchema, SourceSchema, SourceSchemaTable, SqliteJsonRow, SqliteRow, UnscopedEvaluationResult } from './types.js';
@@ -10,7 +10,7 @@ export interface RowValueExtractor {
10
10
  getTypes(schema: QuerySchema, into: Record<string, ColumnDefinition>): void;
11
11
  }
12
12
  export interface EvaluateRowOptions {
13
- table: SourceTableInterface;
13
+ table: SourceTableRef;
14
14
  row: SqliteRow;
15
15
  serializedBucketParameters: (params: QueryParameters) => string[];
16
16
  }
@@ -62,8 +62,8 @@ export declare class BaseSqlDataQuery {
62
62
  private readonly tools;
63
63
  readonly errors: SqlRuleError[];
64
64
  constructor(options: BaseSqlDataQueryOptions);
65
- applies(table: SourceTableInterface): boolean;
66
- addSpecialParameters(table: SourceTableInterface, row: SqliteRow): SqliteRow;
65
+ applies(table: SourceTableRef): boolean;
66
+ addSpecialParameters(table: SourceTableRef, row: SqliteRow): SqliteRow;
67
67
  getOutputName(sourceTable: string): string;
68
68
  isUnaliasedWildcard(): boolean;
69
69
  columnOutputNames(): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"BaseSqlDataQuery.js","sourceRoot":"","sources":["../src/BaseSqlDataQuery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseSqlDataQuery.js","sourceRoot":"","sources":["../src/BaseSqlDataQuery.ts"],"names":[],"mappings":"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"}
@@ -35,7 +35,7 @@ export type NonEnumerableBucketDataSource = NonEnumerableSourceClass;
35
35
  export interface BucketDescription extends NonEnumerableBucketDataSource {
36
36
  /**
37
37
  * The id of the bucket, which is derived from the name of the bucket's definition
38
- * in the sync rules as well as the values returned by the parameter queries.
38
+ * in the sync config as well as the values returned by the parameter queries.
39
39
  */
40
40
  bucket: string;
41
41
  /**
@@ -68,7 +68,17 @@ export interface PendingQueriers {
68
68
  errors: QuerierError[];
69
69
  }
70
70
  export interface ParameterLookupSource {
71
- getParameterSets: (lookups: ScopedParameterLookup[]) => Promise<SqliteJsonRow[]>;
71
+ getParameterSets: (lookups: ScopedParameterLookup[], debugDefinition: string) => Promise<ParameterLookupRows[]>;
72
+ }
73
+ export interface ParameterLookupRows {
74
+ /**
75
+ * A lookup passed to {@link ParameterLookupSource.getParameterSets}.
76
+ */
77
+ lookup: ScopedParameterLookup;
78
+ /**
79
+ * Rows returned from the {@link lookup}.
80
+ */
81
+ rows: SqliteJsonRow[];
72
82
  }
73
83
  export interface QueryBucketDescriptorOptions extends ParameterLookupSource {
74
84
  parameters: RequestParameters;
@@ -88,6 +98,18 @@ export declare class ScopedParameterLookup {
88
98
  * The result of this getter is cached to avoid re-computing the JSON value for lookups that get reused.
89
99
  */
90
100
  get serializedRepresentation(): string;
101
+ /**
102
+ * Index id.
103
+ *
104
+ * This depends on the lookup being constructed with lookupName = indexId, and queryId = ''.
105
+ */
106
+ get indexId(): string;
107
+ /**
108
+ * Returns the "key" portion of the lookup values.
109
+ *
110
+ * This is this.values, excluding the first "lookupName" and "queryId".
111
+ */
112
+ get indexKey(): SqliteJsonValue[];
91
113
  static normalized(scope: ParameterLookupScope, lookup: UnscopedParameterLookup): ScopedParameterLookup;
92
114
  /**
93
115
  * Primarily for test fixtures.
@@ -33,6 +33,30 @@ export class ScopedParameterLookup {
33
33
  get serializedRepresentation() {
34
34
  return (this.#cachedSerializedForm ??= JSONBig.stringify(this.values));
35
35
  }
36
+ /**
37
+ * Index id.
38
+ *
39
+ * This depends on the lookup being constructed with lookupName = indexId, and queryId = ''.
40
+ */
41
+ get indexId() {
42
+ const indexId = this.values[0];
43
+ // TODO: Consider restructuring so that these values aren't present at all
44
+ if (this.values[1] != '') {
45
+ throw new Error('Unexpected queryId');
46
+ }
47
+ else if (typeof indexId != 'string') {
48
+ throw new Error('Unexpected indexId');
49
+ }
50
+ return indexId;
51
+ }
52
+ /**
53
+ * Returns the "key" portion of the lookup values.
54
+ *
55
+ * This is this.values, excluding the first "lookupName" and "queryId".
56
+ */
57
+ get indexKey() {
58
+ return this.values.slice(2);
59
+ }
36
60
  static normalized(scope, lookup) {
37
61
  return new ScopedParameterLookup(scope.source, [scope.lookupName, scope.queryId, ...lookup.lookupValues]);
38
62
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BucketParameterQuerier.js","sourceRoot":"","sources":["../src/BucketParameterQuerier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAMrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AA+ErD,MAAM,UAAU,4BAA4B,CAAC,QAAkC;IAC7E,OAAO;QACL,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;QACvD,iBAAiB,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACvE,KAAK,CAAC,8BAA8B,CAAC,MAA6B;YAChE,IAAI,OAAO,GAAqB,EAAE,CAAC;YACnC,KAAK,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACvB,IAAI,CAAC,CAAC,iBAAiB,EAAE,CAAC;oBACxB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,qBAAqB;IAChC,kEAAkE;IACzD,MAAM,CAA6B;IACnC,OAAO,CAA8B;IAE9C,qBAAqB,CAAU;IAE/B;;;;OAIG;IACH,IAAI,wBAAwB;QAC1B,OAAO,CAAC,IAAI,CAAC,qBAAqB,KAAK,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,KAA2B,EAAE,MAA+B;QAC5E,OAAO,IAAI,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5G,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,KAA2B,EAAE,MAAyB;QAClE,OAAO,IAAI,qBAAqB,CAAC,KAAK,CAAC,MAAM,EAAE;YAC7C,KAAK,CAAC,UAAU;YAChB,KAAK,CAAC,OAAO;YACb,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC;SACvC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,YAAoB,MAAmC,EAAE,MAAyB;QAChF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAED,MAAM,OAAO,uBAAuB;IACzB,YAAY,CAAoB;IAEzC,MAAM,CAAC,UAAU,CAAC,MAAyB;QACzC,OAAO,IAAI,uBAAuB,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,YAAY,YAA+B;QACzC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF"}
1
+ {"version":3,"file":"BucketParameterQuerier.js","sourceRoot":"","sources":["../src/BucketParameterQuerier.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,24 @@
1
1
  import { PendingQueriers } from './BucketParameterQuerier.js';
2
2
  import { ColumnDefinition } from './ExpressionType.js';
3
- import { HydrationState, ParameterLookupScope } from './HydrationState.js';
4
- import { SourceTableInterface } from './SourceTableInterface.js';
3
+ import { HydrationState, ParameterLookupDefinitionId } from './HydrationState.js';
4
+ import { SourceTableRef } from './SourceTableRef.js';
5
5
  import { GetQuerierOptions } from './SqlSyncRules.js';
6
+ import { ScalarExpressionEngine } from './sync_plan/engine/scalar_expression_engine.js';
7
+ import { SQLite } from './sync_plan/engine/sqlite.js';
6
8
  import { TablePattern } from './TablePattern.js';
7
9
  import { EvaluatedParametersResult, EvaluateRowOptions, EvaluationResult, SourceSchema, SqliteRow, UnscopedEvaluatedParametersResult, UnscopedEvaluationResult } from './types.js';
8
10
  export interface CreateSourceParams {
9
11
  hydrationState: HydrationState;
10
12
  }
13
+ export interface HydrateSyncConfigParams extends CreateSourceParams {
14
+ /**
15
+ * The SQLite engine to use to evaluate scalar expressions in Sync Streams.
16
+ */
17
+ sqlite: SQLite | null;
18
+ }
19
+ export interface HydrationInput extends CreateSourceParams {
20
+ scalarExpressions: ScalarExpressionEngine;
21
+ }
11
22
  /**
12
23
  * A BucketSource is a _logical_ bucket or sync stream definition. It is primarily used to group together
13
24
  * related BucketDataSource, BucketParameterLookupSource and BucketParameterQuerierSource definitions,
@@ -35,7 +46,7 @@ export interface BucketSource {
35
46
  */
36
47
  readonly parameterIndexLookupCreators: ParameterIndexLookupCreator[];
37
48
  debugRepresentation(): any;
38
- hydrate(params: CreateSourceParams): HydratedBucketSource;
49
+ hydrate(params: HydrationInput): HydratedBucketSource;
39
50
  }
40
51
  /**
41
52
  * Internal interface for individual queriers. This is not used on its in the public API directly, apart
@@ -54,7 +65,7 @@ export interface HydratedBucketSource extends BucketParameterQuerierSource {
54
65
  readonly definition: BucketSource;
55
66
  }
56
67
  export type ScopedEvaluateRow = (options: EvaluateRowOptions) => EvaluationResult[];
57
- export type ScopedEvaluateParameterRow = (sourceTable: SourceTableInterface, row: SqliteRow) => EvaluatedParametersResult[];
68
+ export type ScopedEvaluateParameterRow = (sourceTable: SourceTableRef, row: SqliteRow) => EvaluatedParametersResult[];
58
69
  /**
59
70
  * Encodes a static definition of a bucket source, as parsed from sync rules or stream definitions.
60
71
  *
@@ -63,7 +74,7 @@ export type ScopedEvaluateParameterRow = (sourceTable: SourceTableInterface, row
63
74
  */
64
75
  export interface BucketDataSource {
65
76
  /**
66
- * Unique name of the data source within a sync rules version.
77
+ * Unique name of the data source within a replication stream.
67
78
  *
68
79
  * This may be used as the basis for bucketPrefix (or it could be ignored).
69
80
  */
@@ -73,12 +84,8 @@ export interface BucketDataSource {
73
84
  */
74
85
  readonly bucketParameters: string[];
75
86
  getSourceTables(): Set<TablePattern>;
76
- tableSyncsData(table: SourceTableInterface): boolean;
77
- /**
78
- * Given a row as it appears in a table that affects sync data, return buckets, logical table names and transformed
79
- * data for rows to add to buckets.
80
- */
81
- evaluateRow(options: EvaluateRowOptions): UnscopedEvaluationResult[];
87
+ tableSyncsData(table: SourceTableRef): boolean;
88
+ createEvaluator(input: HydrationInput): BucketDataEvaluator;
82
89
  /**
83
90
  * Given a static schema, infer all logical tables and associated columns that appear in buckets defined by this
84
91
  * source.
@@ -90,6 +97,13 @@ export interface BucketDataSource {
90
97
  query: string;
91
98
  }[]>): void;
92
99
  }
100
+ export interface BucketDataEvaluator {
101
+ /**
102
+ * Given a row as it appears in a table that affects sync data, return buckets, logical table names and transformed
103
+ * data for rows to add to buckets.
104
+ */
105
+ evaluateRow(options: EvaluateRowOptions): UnscopedEvaluationResult[];
106
+ }
93
107
  /**
94
108
  * This defines how to extract parameter index lookup values from parameter queries or stream subqueries.
95
109
  *
@@ -99,10 +113,16 @@ export interface ParameterIndexLookupCreator {
99
113
  /**
100
114
  * lookupName + queryId is used to uniquely identify parameter queries for parameter storage.
101
115
  *
102
- * This defines the default values if no transformations are applied.
116
+ * The values here specifically identify the definition uniquely within a single SyncConfig.
117
+ * It does not guarantee uniqueness across different SyncConfigs.
103
118
  */
104
- readonly defaultLookupScope: ParameterLookupScope;
119
+ readonly sourceId: ParameterLookupDefinitionId;
105
120
  getSourceTables(): Set<TablePattern>;
121
+ /** Whether the table possibly affects the buckets resolved by this source. */
122
+ tableSyncsParameters(table: SourceTableRef): boolean;
123
+ createEvaluator(input: HydrationInput): ParameterIndexLookupEvaluator;
124
+ }
125
+ export interface ParameterIndexLookupEvaluator {
106
126
  /**
107
127
  * Given a row in a source table that affects sync parameters, returns a structure to index which buckets rows should
108
128
  * be associated with.
@@ -110,13 +130,7 @@ export interface ParameterIndexLookupCreator {
110
130
  * The returned {@link UnscopedParameterLookup} can be referenced by {@link pushBucketParameterQueriers} to allow the storage
111
131
  * system to find buckets.
112
132
  */
113
- evaluateParameterRow(sourceTable: SourceTableInterface, row: SqliteRow): UnscopedEvaluatedParametersResult[];
114
- /** Whether the table possibly affects the buckets resolved by this source. */
115
- tableSyncsParameters(table: SourceTableInterface): boolean;
116
- }
117
- export interface DebugMergedSource extends HydratedBucketSource {
118
- evaluateRow: ScopedEvaluateRow;
119
- evaluateParameterRow: ScopedEvaluateParameterRow;
133
+ evaluateParameterRow(sourceTable: SourceTableRef, row: SqliteRow): UnscopedEvaluatedParametersResult[];
120
134
  }
121
135
  export declare enum BucketSourceType {
122
136
  SYNC_RULE = 0,
@@ -126,16 +140,9 @@ export type ResultSetDescription = {
126
140
  name: string;
127
141
  columns: ColumnDefinition[];
128
142
  };
129
- export declare function hydrateEvaluateRow(hydrationState: HydrationState, source: BucketDataSource): ScopedEvaluateRow;
130
- export declare function hydrateEvaluateParameterRow(hydrationState: HydrationState, source: ParameterIndexLookupCreator): ScopedEvaluateParameterRow;
131
- export declare function mergeDataSources(hydrationState: HydrationState, sources: BucketDataSource[]): {
143
+ export declare function mergeDataSources(input: HydrationInput, sources: BucketDataSource[]): {
132
144
  evaluateRow: ScopedEvaluateRow;
133
145
  };
134
- export declare function mergeParameterIndexLookupCreators(hydrationState: HydrationState, sources: ParameterIndexLookupCreator[]): {
146
+ export declare function mergeParameterIndexLookupCreators(input: HydrationInput, sources: ParameterIndexLookupCreator[]): {
135
147
  evaluateParameterRow: ScopedEvaluateParameterRow;
136
148
  };
137
- /**
138
- * For production purposes, we typically need to operate on the different sources separately. However, for debugging,
139
- * it is useful to have a single merged source that can evaluate everything.
140
- */
141
- export declare function debugHydratedMergedSource(bucketSource: BucketSource, params?: CreateSourceParams): DebugMergedSource;
@@ -1,5 +1,4 @@
1
1
  import { ScopedParameterLookup } from './BucketParameterQuerier.js';
2
- import { DEFAULT_HYDRATION_STATE } from './HydrationState.js';
3
2
  import { isEvaluationError } from './types.js';
4
3
  import { withBucketSource } from './utils.js';
5
4
  export var BucketSourceType;
@@ -7,10 +6,11 @@ export var BucketSourceType;
7
6
  BucketSourceType[BucketSourceType["SYNC_RULE"] = 0] = "SYNC_RULE";
8
7
  BucketSourceType[BucketSourceType["SYNC_STREAM"] = 1] = "SYNC_STREAM";
9
8
  })(BucketSourceType || (BucketSourceType = {}));
10
- export function hydrateEvaluateRow(hydrationState, source) {
11
- const scope = hydrationState.getBucketSourceScope(source);
9
+ function hydrateEvaluateRow(input, source) {
10
+ const evaluator = source.createEvaluator(input);
11
+ const scope = input.hydrationState.getBucketSourceScope(source);
12
12
  return (options) => {
13
- return source.evaluateRow(options).map((result) => {
13
+ return evaluator.evaluateRow(options).map((result) => {
14
14
  if (isEvaluationError(result)) {
15
15
  return result;
16
16
  }
@@ -24,10 +24,11 @@ export function hydrateEvaluateRow(hydrationState, source) {
24
24
  });
25
25
  };
26
26
  }
27
- export function hydrateEvaluateParameterRow(hydrationState, source) {
28
- const scope = hydrationState.getParameterIndexLookupScope(source);
27
+ function hydrateEvaluateParameterRow(input, source) {
28
+ const evaluator = source.createEvaluator(input);
29
+ const scope = input.hydrationState.getParameterIndexLookupScope(source);
29
30
  return (sourceTable, row) => {
30
- return source.evaluateParameterRow(sourceTable, row).map((result) => {
31
+ return evaluator.evaluateParameterRow(sourceTable, row).map((result) => {
31
32
  if (isEvaluationError(result)) {
32
33
  return result;
33
34
  }
@@ -38,37 +39,20 @@ export function hydrateEvaluateParameterRow(hydrationState, source) {
38
39
  });
39
40
  };
40
41
  }
41
- export function mergeDataSources(hydrationState, sources) {
42
- const withScope = sources.map((source) => hydrateEvaluateRow(hydrationState, source));
42
+ export function mergeDataSources(input, sources) {
43
+ const withScope = sources.map((source) => hydrateEvaluateRow(input, source));
43
44
  return {
44
45
  evaluateRow(options) {
45
46
  return withScope.flatMap((source) => source(options));
46
47
  }
47
48
  };
48
49
  }
49
- export function mergeParameterIndexLookupCreators(hydrationState, sources) {
50
- const withScope = sources.map((source) => hydrateEvaluateParameterRow(hydrationState, source));
50
+ export function mergeParameterIndexLookupCreators(input, sources) {
51
+ const withScope = sources.map((source) => hydrateEvaluateParameterRow(input, source));
51
52
  return {
52
53
  evaluateParameterRow(sourceTable, row) {
53
54
  return withScope.flatMap((source) => source(sourceTable, row));
54
55
  }
55
56
  };
56
57
  }
57
- /**
58
- * For production purposes, we typically need to operate on the different sources separately. However, for debugging,
59
- * it is useful to have a single merged source that can evaluate everything.
60
- */
61
- export function debugHydratedMergedSource(bucketSource, params) {
62
- const hydrationState = params?.hydrationState ?? DEFAULT_HYDRATION_STATE;
63
- const resolvedParams = { hydrationState };
64
- const dataSource = mergeDataSources(hydrationState, bucketSource.dataSources);
65
- const parameterLookupSource = mergeParameterIndexLookupCreators(hydrationState, bucketSource.parameterIndexLookupCreators);
66
- const hydratedBucketSource = bucketSource.hydrate(resolvedParams);
67
- return {
68
- definition: bucketSource,
69
- evaluateParameterRow: parameterLookupSource.evaluateParameterRow.bind(parameterLookupSource),
70
- evaluateRow: dataSource.evaluateRow.bind(dataSource),
71
- pushBucketParameterQueriers: hydratedBucketSource.pushBucketParameterQueriers.bind(hydratedBucketSource)
72
- };
73
- }
74
58
  //# sourceMappingURL=BucketSource.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BucketSource.js","sourceRoot":"","sources":["../src/BucketSource.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,qBAAqB,EAEtB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,uBAAuB,EAAwC,MAAM,qBAAqB,CAAC;AAIpG,OAAO,EAML,iBAAiB,EAKlB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAwI9C,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,iEAAS,CAAA;IACT,qEAAW,CAAA;AACb,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAID,MAAM,UAAU,kBAAkB,CAAC,cAA8B,EAAE,MAAwB;IACzF,MAAM,KAAK,GAAG,cAAc,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC1D,OAAO,CAAC,OAA2B,EAAsB,EAAE;QACzD,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAChD,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9B,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,SAAS,GAAiB,gBAAgB,CAC9C;gBACE,MAAM,EAAE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,0BAA0B;gBAC9D,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,EACD,KAAK,CAAC,MAAM,CACb,CAAC;YACF,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,cAA8B,EAC9B,MAAmC;IAEnC,MAAM,KAAK,GAAG,cAAc,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAClE,OAAO,CAAC,WAAiC,EAAE,GAAc,EAA+B,EAAE;QACxF,OAAO,MAAM,CAAC,oBAAoB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAClE,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9B,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,OAAO;gBACL,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,MAAM,EAAE,qBAAqB,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;aACjC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,cAA8B,EAC9B,OAA2B;IAE3B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;IACtF,OAAO;QACL,WAAW,CAAC,OAA2B;YACrC,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,cAA8B,EAC9B,OAAsC;IAEtC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,2BAA2B,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/F,OAAO;QACL,oBAAoB,CAAC,WAAiC,EAAE,GAAc;YACpE,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;QACjE,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,YAA0B,EAAE,MAA2B;IAC/F,MAAM,cAAc,GAAG,MAAM,EAAE,cAAc,IAAI,uBAAuB,CAAC;IACzE,MAAM,cAAc,GAAG,EAAE,cAAc,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,gBAAgB,CAAC,cAAc,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAC9E,MAAM,qBAAqB,GAAG,iCAAiC,CAC7D,cAAc,EACd,YAAY,CAAC,4BAA4B,CAC1C,CAAC;IACF,MAAM,oBAAoB,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,OAAO;QACL,UAAU,EAAE,YAAY;QACxB,oBAAoB,EAAE,qBAAqB,CAAC,oBAAoB,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAC5F,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QACpD,2BAA2B,EAAE,oBAAoB,CAAC,2BAA2B,CAAC,IAAI,CAAC,oBAAoB,CAAC;KACzG,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"BucketSource.js","sourceRoot":"","sources":["../src/BucketSource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { BucketDataSource } from './BucketSource.js';
2
+ import { BucketSource, CompatibilityContext, EvaluatedParameters, EvaluatedRow, EvaluationError, GetBucketParameterQuerierResult, GetQuerierOptions, HydrateSyncConfigParams, ParameterIndexLookupCreator, SqlEventDescriptor, SqliteInputValue, SqliteValue, SyncConfig, TablePattern } from './index.js';
3
+ import { SourceTableRef } from './SourceTableRef.js';
4
+ import { EvaluateRowOptions, SqliteRow } from './types.js';
5
+ export interface MatchingSources {
6
+ bucketDataSources: BucketDataSource[];
7
+ parameterLookupSources: ParameterIndexLookupCreator[];
8
+ }
9
+ /**
10
+ * HydratedSyncConfig is sync config definitions along with persisted state.
11
+ *
12
+ * This may be a single SyncConfig, or multiple SyncConfigs merged together.
13
+ * In the case of multiple SyncConfigs, they must share the same CompatibilityContext,
14
+ * but can have different bucket sources.
15
+ *
16
+ * The persisted state specifically affects bucket names, as well as V3+ storage structure.
17
+ */
18
+ export declare class HydratedSyncConfig {
19
+ #private;
20
+ /**
21
+ * These are used by queriers, and do not support merging across multiple SyncConfigs.
22
+ */
23
+ private bucketSources;
24
+ eventDescriptors: SqlEventDescriptor[];
25
+ /**
26
+ * Only a single compatibility context is supported across all merged SyncConfigs.
27
+ */
28
+ compatibility: CompatibilityContext;
29
+ /**
30
+ * The source definitions.
31
+ *
32
+ * For most functionality, we don't use these directly, but rather use the
33
+ * merged definitions such as bucketDataSources.
34
+ */
35
+ private readonly sourceDefinitions;
36
+ /**
37
+ * Bucket data sources from underlying SyncConfig definitions.
38
+ */
39
+ readonly bucketDataSources: BucketDataSource[];
40
+ readonly bucketParameterLookupSources: ParameterIndexLookupCreator[];
41
+ private readonly innerEvaluateRow;
42
+ private readonly innerEvaluateParameterRow;
43
+ private readonly hydrationInput;
44
+ private readonly matchingSourcesCache;
45
+ private mergedEvaluatorCache;
46
+ private mergedParameterIndexCreatorCache;
47
+ constructor(params: {
48
+ definitions: SyncConfig[];
49
+ createParams: HydrateSyncConfigParams;
50
+ });
51
+ get bucketSourceDefinitions(): BucketSource[];
52
+ getSourceTables(): TablePattern[];
53
+ tableTriggersEvent(table: SourceTableRef): boolean;
54
+ tableSyncsData(table: SourceTableRef): boolean;
55
+ tableSyncsParameters(table: SourceTableRef): boolean;
56
+ getMatchingSources(source: SourceTableRef): MatchingSources;
57
+ applyRowContext<MaybeToast extends undefined = never>(source: SqliteRow<SqliteInputValue | MaybeToast>): SqliteRow<SqliteValue | MaybeToast>;
58
+ /**
59
+ * Throws errors.
60
+ */
61
+ evaluateRow(options: EvaluateRowOptions): EvaluatedRow[];
62
+ evaluateRowWithErrors(options: EvaluateRowOptions): {
63
+ results: EvaluatedRow[];
64
+ errors: EvaluationError[];
65
+ };
66
+ /**
67
+ * Throws errors.
68
+ */
69
+ evaluateParameterRow(table: SourceTableRef, row: SqliteRow, options?: {
70
+ parameterLookupSources?: ParameterIndexLookupCreator[];
71
+ }): EvaluatedParameters[];
72
+ evaluateParameterRowWithErrors(table: SourceTableRef, row: SqliteRow, options?: {
73
+ parameterLookupSources?: ParameterIndexLookupCreator[];
74
+ }): {
75
+ results: EvaluatedParameters[];
76
+ errors: EvaluationError[];
77
+ };
78
+ getBucketParameterQuerier(options: GetQuerierOptions): GetBucketParameterQuerierResult;
79
+ private assertSingleSourceDefinition;
80
+ }