@powersync/service-sync-rules 0.0.0-dev-20251209070120 → 0.0.0-dev-20260114145741

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 (74) hide show
  1. package/dist/BaseSqlDataQuery.d.ts +3 -9
  2. package/dist/BaseSqlDataQuery.js +10 -10
  3. package/dist/BaseSqlDataQuery.js.map +1 -1
  4. package/dist/BucketParameterQuerier.d.ts +15 -5
  5. package/dist/BucketParameterQuerier.js +18 -3
  6. package/dist/BucketParameterQuerier.js.map +1 -1
  7. package/dist/BucketSource.d.ts +94 -25
  8. package/dist/BucketSource.js +67 -0
  9. package/dist/BucketSource.js.map +1 -1
  10. package/dist/HydratedSyncRules.d.ts +46 -0
  11. package/dist/HydratedSyncRules.js +88 -0
  12. package/dist/HydratedSyncRules.js.map +1 -0
  13. package/dist/HydrationState.d.ts +45 -0
  14. package/dist/HydrationState.js +41 -0
  15. package/dist/HydrationState.js.map +1 -0
  16. package/dist/SqlBucketDescriptor.d.ts +31 -28
  17. package/dist/SqlBucketDescriptor.js +89 -112
  18. package/dist/SqlBucketDescriptor.js.map +1 -1
  19. package/dist/SqlDataQuery.d.ts +4 -4
  20. package/dist/SqlDataQuery.js +5 -6
  21. package/dist/SqlDataQuery.js.map +1 -1
  22. package/dist/SqlParameterQuery.d.ts +17 -9
  23. package/dist/SqlParameterQuery.js +49 -21
  24. package/dist/SqlParameterQuery.js.map +1 -1
  25. package/dist/SqlSyncRules.d.ts +13 -29
  26. package/dist/SqlSyncRules.js +48 -77
  27. package/dist/SqlSyncRules.js.map +1 -1
  28. package/dist/StaticSqlParameterQuery.d.ts +13 -3
  29. package/dist/StaticSqlParameterQuery.js +39 -4
  30. package/dist/StaticSqlParameterQuery.js.map +1 -1
  31. package/dist/TableValuedFunctionSqlParameterQuery.d.ts +14 -4
  32. package/dist/TableValuedFunctionSqlParameterQuery.js +42 -7
  33. package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -1
  34. package/dist/compatibility.d.ts +23 -1
  35. package/dist/compatibility.js +32 -4
  36. package/dist/compatibility.js.map +1 -1
  37. package/dist/events/SqlEventDescriptor.js +1 -1
  38. package/dist/events/SqlEventDescriptor.js.map +1 -1
  39. package/dist/events/SqlEventSourceQuery.d.ts +1 -1
  40. package/dist/events/SqlEventSourceQuery.js +1 -2
  41. package/dist/events/SqlEventSourceQuery.js.map +1 -1
  42. package/dist/index.d.ts +2 -0
  43. package/dist/index.js +2 -0
  44. package/dist/index.js.map +1 -1
  45. package/dist/json_schema.js +5 -1
  46. package/dist/json_schema.js.map +1 -1
  47. package/dist/request_functions.js +1 -1
  48. package/dist/request_functions.js.map +1 -1
  49. package/dist/schema-generators/SchemaGenerator.js +1 -1
  50. package/dist/schema-generators/SchemaGenerator.js.map +1 -1
  51. package/dist/streams/filter.d.ts +34 -4
  52. package/dist/streams/filter.js +93 -23
  53. package/dist/streams/filter.js.map +1 -1
  54. package/dist/streams/from_sql.js +2 -5
  55. package/dist/streams/from_sql.js.map +1 -1
  56. package/dist/streams/parameter.d.ts +7 -6
  57. package/dist/streams/stream.d.ts +25 -15
  58. package/dist/streams/stream.js +59 -87
  59. package/dist/streams/stream.js.map +1 -1
  60. package/dist/streams/variant.d.ts +14 -21
  61. package/dist/streams/variant.js +68 -45
  62. package/dist/streams/variant.js.map +1 -1
  63. package/dist/types/custom_sqlite_value.d.ts +1 -1
  64. package/dist/types/time.d.ts +24 -5
  65. package/dist/types/time.js +67 -12
  66. package/dist/types/time.js.map +1 -1
  67. package/dist/types.d.ts +44 -24
  68. package/dist/types.js +4 -1
  69. package/dist/types.js.map +1 -1
  70. package/dist/utils.d.ts +4 -2
  71. package/dist/utils.js +6 -3
  72. package/dist/utils.js.map +1 -1
  73. package/package.json +4 -3
  74. package/schema/sync_rules.json +9 -0
@@ -4,7 +4,7 @@ import { ColumnDefinition } from './ExpressionType.js';
4
4
  import { SourceTableInterface } from './SourceTableInterface.js';
5
5
  import { AvailableTable, SqlTools } from './sql_filters.js';
6
6
  import { TablePattern } from './TablePattern.js';
7
- import { BucketIdTransformer, EvaluationResult, QueryParameters, QuerySchema, SourceSchema, SourceSchemaTable, SqliteJsonRow, SqliteRow } from './types.js';
7
+ import { QueryParameters, QuerySchema, UnscopedEvaluationResult, SourceSchema, SourceSchemaTable, SqliteJsonRow, SqliteRow } from './types.js';
8
8
  export interface RowValueExtractor {
9
9
  extract(tables: QueryParameters, into: SqliteRow): void;
10
10
  getTypes(schema: QuerySchema, into: Record<string, ColumnDefinition>): void;
@@ -12,8 +12,7 @@ export interface RowValueExtractor {
12
12
  export interface EvaluateRowOptions {
13
13
  table: SourceTableInterface;
14
14
  row: SqliteRow;
15
- bucketIds: (params: QueryParameters) => string[];
16
- bucketIdTransformer: BucketIdTransformer | null;
15
+ serializedBucketParameters: (params: QueryParameters) => string[];
17
16
  }
18
17
  export interface BaseSqlDataQueryOptions {
19
18
  sourceTable: TablePattern;
@@ -21,7 +20,6 @@ export interface BaseSqlDataQueryOptions {
21
20
  sql: string;
22
21
  columns: SelectedColumn[];
23
22
  extractors: RowValueExtractor[];
24
- descriptorName: string;
25
23
  bucketParameters: string[];
26
24
  tools: SqlTools;
27
25
  errors?: SqlRuleError[];
@@ -51,10 +49,6 @@ export declare class BaseSqlDataQuery {
51
49
  * This may include plain column names, wildcards, and basic expressions.
52
50
  */
53
51
  readonly extractors: RowValueExtractor[];
54
- /**
55
- * Bucket definition name.
56
- */
57
- readonly descriptorName: string;
58
52
  /**
59
53
  * Bucket parameter names, without the `bucket.` prefix.
60
54
  *
@@ -78,7 +72,7 @@ export declare class BaseSqlDataQuery {
78
72
  columns: ColumnDefinition[];
79
73
  }[];
80
74
  resolveResultSets(schema: SourceSchema, tables: Record<string, Record<string, ColumnDefinition>>): void;
81
- evaluateRowWithOptions(options: Omit<EvaluateRowOptions, 'bucketIdTransformer'>): EvaluationResult[];
75
+ evaluateRowWithOptions(options: EvaluateRowOptions): UnscopedEvaluationResult[];
82
76
  protected transformRow(tables: QueryParameters): SqliteJsonRow;
83
77
  protected getColumnOutputsFor(schemaTable: SourceSchemaTable, output: Record<string, ColumnDefinition>): void;
84
78
  }
@@ -1,5 +1,5 @@
1
- import { filterJsonRow } from './utils.js';
2
1
  import { castAsText } from './sql_functions.js';
2
+ import { filterJsonRow } from './utils.js';
3
3
  export class BaseSqlDataQuery {
4
4
  /**
5
5
  * Source table or table pattern.
@@ -25,10 +25,6 @@ export class BaseSqlDataQuery {
25
25
  * This may include plain column names, wildcards, and basic expressions.
26
26
  */
27
27
  extractors;
28
- /**
29
- * Bucket definition name.
30
- */
31
- descriptorName;
32
28
  /**
33
29
  * Bucket parameter names, without the `bucket.` prefix.
34
30
  *
@@ -47,7 +43,6 @@ export class BaseSqlDataQuery {
47
43
  this.sql = options.sql;
48
44
  this.columns = options.columns;
49
45
  this.extractors = options.extractors;
50
- this.descriptorName = options.descriptorName;
51
46
  this.bucketParameters = options.bucketParameters;
52
47
  this.tools = options.tools;
53
48
  this.errors = options.errors ?? [];
@@ -122,9 +117,14 @@ export class BaseSqlDataQuery {
122
117
  }
123
118
  evaluateRowWithOptions(options) {
124
119
  try {
125
- const { table, row, bucketIds } = options;
120
+ const { table, row, serializedBucketParameters } = options;
126
121
  const tables = { [this.table.nameInSchema]: this.addSpecialParameters(table, row) };
127
- const resolvedBucketIds = bucketIds(tables);
122
+ // Array of _serialized_ parameters, one per output result.
123
+ const resolvedBucketParameters = serializedBucketParameters(tables);
124
+ if (resolvedBucketParameters.length == 0) {
125
+ // Short-circuit: No need to transform the row if there are no matching buckets.
126
+ return [];
127
+ }
128
128
  const data = this.transformRow(tables);
129
129
  let id = data.id;
130
130
  if (typeof id != 'string') {
@@ -137,9 +137,9 @@ export class BaseSqlDataQuery {
137
137
  id = castAsText(id) ?? '';
138
138
  }
139
139
  const outputTable = this.getOutputName(table.name);
140
- return resolvedBucketIds.map((bucketId) => {
140
+ return resolvedBucketParameters.map((serializedBucketParameters) => {
141
141
  return {
142
- bucket: bucketId,
142
+ serializedBucketParameters,
143
143
  table: outputTable,
144
144
  id: id,
145
145
  data
@@ -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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"}
@@ -1,4 +1,5 @@
1
1
  import { ResolvedBucket } from './BucketDescription.js';
2
+ import { ParameterLookupScope } from './HydrationState.js';
2
3
  import { RequestedStream } from './SqlSyncRules.js';
3
4
  import { RequestParameters, SqliteJsonRow, SqliteJsonValue } from './types.js';
4
5
  /**
@@ -21,7 +22,7 @@ export interface BucketParameterQuerier {
21
22
  * and parameterQueryLookups.length == 0.
22
23
  */
23
24
  readonly hasDynamicBuckets: boolean;
24
- readonly parameterQueryLookups: ParameterLookup[];
25
+ readonly parameterQueryLookups: ScopedParameterLookup[];
25
26
  /**
26
27
  * These buckets depend on parameter storage, and needs to be retrieved dynamically for each checkpoint.
27
28
  *
@@ -50,7 +51,7 @@ export interface PendingQueriers {
50
51
  errors: QuerierError[];
51
52
  }
52
53
  export interface ParameterLookupSource {
53
- getParameterSets: (lookups: ParameterLookup[]) => Promise<SqliteJsonRow[]>;
54
+ getParameterSets: (lookups: ScopedParameterLookup[]) => Promise<SqliteJsonRow[]>;
54
55
  }
55
56
  export interface QueryBucketDescriptorOptions extends ParameterLookupSource {
56
57
  parameters: RequestParameters;
@@ -61,12 +62,21 @@ export declare function mergeBucketParameterQueriers(queriers: BucketParameterQu
61
62
  *
62
63
  * Other query types are not supported yet.
63
64
  */
64
- export declare class ParameterLookup {
65
+ export declare class ScopedParameterLookup {
65
66
  readonly values: SqliteJsonValue[];
66
- static normalized(bucketDefinitionName: string, queryIndex: string, values: SqliteJsonValue[]): ParameterLookup;
67
+ static normalized(scope: ParameterLookupScope, lookup: UnscopedParameterLookup): ScopedParameterLookup;
68
+ /**
69
+ * Primarily for test fixtures.
70
+ */
71
+ static direct(scope: ParameterLookupScope, values: SqliteJsonValue[]): ScopedParameterLookup;
67
72
  /**
68
73
  *
69
74
  * @param values must be pre-normalized (any integer converted into bigint)
70
75
  */
71
- constructor(values: SqliteJsonValue[]);
76
+ private constructor();
77
+ }
78
+ export declare class UnscopedParameterLookup {
79
+ readonly lookupValues: SqliteJsonValue[];
80
+ static normalized(values: SqliteJsonValue[]): UnscopedParameterLookup;
81
+ constructor(lookupValues: SqliteJsonValue[]);
72
82
  }
@@ -21,11 +21,17 @@ export function mergeBucketParameterQueriers(queriers) {
21
21
  *
22
22
  * Other query types are not supported yet.
23
23
  */
24
- export class ParameterLookup {
24
+ export class ScopedParameterLookup {
25
25
  // bucket definition name, parameter query index, ...lookup values
26
26
  values;
27
- static normalized(bucketDefinitionName, queryIndex, values) {
28
- return new ParameterLookup([bucketDefinitionName, queryIndex, ...values.map(normalizeParameterValue)]);
27
+ static normalized(scope, lookup) {
28
+ return new ScopedParameterLookup([scope.lookupName, scope.queryId, ...lookup.lookupValues]);
29
+ }
30
+ /**
31
+ * Primarily for test fixtures.
32
+ */
33
+ static direct(scope, values) {
34
+ return new ScopedParameterLookup([scope.lookupName, scope.queryId, ...values.map(normalizeParameterValue)]);
29
35
  }
30
36
  /**
31
37
  *
@@ -35,4 +41,13 @@ export class ParameterLookup {
35
41
  this.values = values;
36
42
  }
37
43
  }
44
+ export class UnscopedParameterLookup {
45
+ lookupValues;
46
+ static normalized(values) {
47
+ return new UnscopedParameterLookup(values.map(normalizeParameterValue));
48
+ }
49
+ constructor(lookupValues) {
50
+ this.lookupValues = lookupValues;
51
+ }
52
+ }
38
53
  //# sourceMappingURL=BucketParameterQuerier.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BucketParameterQuerier.js","sourceRoot":"","sources":["../src/BucketParameterQuerier.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAgErD,MAAM,UAAU,4BAA4B,CAAC,QAAkC;IAC7E,MAAM,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;IAC/E,OAAO;QACL,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;QACvD,iBAAiB,EAAE,qBAAqB,CAAC,MAAM,GAAG,CAAC;QACnD,qBAAqB,EAAE,qBAAqB;QAC5C,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,eAAe;IAC1B,kEAAkE;IACzD,MAAM,CAAoB;IAEnC,MAAM,CAAC,UAAU,CAAC,oBAA4B,EAAE,UAAkB,EAAE,MAAyB;QAC3F,OAAO,IAAI,eAAe,CAAC,CAAC,oBAAoB,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACzG,CAAC;IAED;;;OAGG;IACH,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
1
+ {"version":3,"file":"BucketParameterQuerier.js","sourceRoot":"","sources":["../src/BucketParameterQuerier.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAgErD,MAAM,UAAU,4BAA4B,CAAC,QAAkC;IAC7E,MAAM,qBAAqB,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;IAC/E,OAAO;QACL,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;QACvD,iBAAiB,EAAE,qBAAqB,CAAC,MAAM,GAAG,CAAC;QACnD,qBAAqB,EAAE,qBAAqB;QAC5C,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,CAAoB;IAEnC,MAAM,CAAC,UAAU,CAAC,KAA2B,EAAE,MAA+B;QAC5E,OAAO,IAAI,qBAAqB,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,KAA2B,EAAE,MAAyB;QAClE,OAAO,IAAI,qBAAqB,CAAC,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;IAC9G,CAAC;IAED;;;OAGG;IACH,YAAoB,MAAyB;QAC3C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,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,36 +1,47 @@
1
1
  import { PendingQueriers } from './BucketParameterQuerier.js';
2
2
  import { ColumnDefinition } from './ExpressionType.js';
3
+ import { HydrationState, ParameterLookupScope } from './HydrationState.js';
3
4
  import { SourceTableInterface } from './SourceTableInterface.js';
4
5
  import { GetQuerierOptions } from './SqlSyncRules.js';
5
6
  import { TablePattern } from './TablePattern.js';
6
- import { EvaluatedParametersResult, EvaluateRowOptions, EvaluationResult, SourceSchema, SqliteRow } from './types.js';
7
+ import { EvaluatedParametersResult, EvaluateRowOptions, EvaluationResult, UnscopedEvaluationResult, SourceSchema, SqliteRow, UnscopedEvaluatedParametersResult } from './types.js';
8
+ export interface CreateSourceParams {
9
+ hydrationState: HydrationState;
10
+ }
7
11
  /**
8
- * An interface declaring
9
- *
10
- * - which buckets the sync service should create when processing change streams from the database.
11
- * - how data in source tables maps to data in buckets (e.g. when we're not selecting all columns).
12
- * - which buckets a given connection has access to.
13
- *
14
- * There are two ways to define bucket sources: Via sync rules made up of parameter and data queries, and via stream
15
- * definitions that only consist of a single query.
12
+ * A BucketSource is a _logical_ bucket or sync stream definition. It is primarily used to group together
13
+ * related BucketDataSource, BucketParameterLookupSource and BucketParameterQuerierSource definitions,
14
+ * for the purpose of subscribing to specific streams. It does not directly define the implementation
15
+ * or replication process.
16
16
  */
17
17
  export interface BucketSource {
18
18
  readonly name: string;
19
19
  readonly type: BucketSourceType;
20
20
  readonly subscribedToByDefault: boolean;
21
21
  /**
22
- * Given a row in a source table that affects sync parameters, returns a structure to index which buckets rows should
23
- * be associated with.
22
+ * BucketDataSource describing the data in this bucket/stream definition.
24
23
  *
25
- * The returned {@link ParameterLookup} can be referenced by {@link pushBucketParameterQueriers} to allow the storage
26
- * system to find buckets.
24
+ * The same data source could in theory be present in multiple stream definitions.
25
+ *
26
+ * Sources must _only_ be split into multiple ones if they will result in different buckets being created.
27
+ * Specifically, bucket definitions would always have a single data source, while stream definitions may have
28
+ * one per variant.
27
29
  */
28
- evaluateParameterRow(sourceTable: SourceTableInterface, row: SqliteRow): EvaluatedParametersResult[];
30
+ readonly dataSources: BucketDataSource[];
29
31
  /**
30
- * Given a row as it appears in a table that affects sync data, return buckets, logical table names and transformed
31
- * data for rows to add to buckets.
32
+ * BucketParameterLookupSource describing the parameter tables used in this bucket/stream definition.
33
+ *
34
+ * The same source could in theory be present in multiple stream definitions.
32
35
  */
33
- evaluateRow(options: EvaluateRowOptions): EvaluationResult[];
36
+ readonly parameterIndexLookupCreators: ParameterIndexLookupCreator[];
37
+ debugRepresentation(): any;
38
+ hydrate(params: CreateSourceParams): HydratedBucketSource;
39
+ }
40
+ /**
41
+ * Internal interface for individual queriers. This is not used on its in the public API directly, apart
42
+ * from in HydratedBucketSource. Everywhere else it is just to standardize the internal functions that we re-use.
43
+ */
44
+ export interface BucketParameterQuerierSource {
34
45
  /**
35
46
  * Reports {@link BucketParameterQuerier}s resolving buckets that a specific stream request should have access to.
36
47
  *
@@ -38,18 +49,36 @@ export interface BucketSource {
38
49
  * @param options Options, including parameters that may affect the buckets loaded by this source.
39
50
  */
40
51
  pushBucketParameterQueriers(result: PendingQueriers, options: GetQuerierOptions): void;
52
+ }
53
+ export interface HydratedBucketSource extends BucketParameterQuerierSource {
54
+ readonly definition: BucketSource;
55
+ }
56
+ export type ScopedEvaluateRow = (options: EvaluateRowOptions) => EvaluationResult[];
57
+ export type ScopedEvaluateParameterRow = (sourceTable: SourceTableInterface, row: SqliteRow) => EvaluatedParametersResult[];
58
+ /**
59
+ * Encodes a static definition of a bucket source, as parsed from sync rules or stream definitions.
60
+ *
61
+ * This does not require any "hydration" itself: All results are independent of bucket names.
62
+ * The higher-level HydratedSyncRules will use a HydrationState to generate bucket names.
63
+ */
64
+ export interface BucketDataSource {
41
65
  /**
42
- * Whether {@link pushBucketParameterQueriers} may include a querier where
43
- * {@link BucketParameterQuerier.hasDynamicBuckets} is true.
66
+ * Unique name of the data source within a sync rules version.
44
67
  *
45
- * This is mostly used for testing.
68
+ * This may be used as the basis for bucketPrefix (or it could be ignored).
46
69
  */
47
- hasDynamicBucketQueries(): boolean;
70
+ readonly uniqueName: string;
71
+ /**
72
+ * For debug use only.
73
+ */
74
+ readonly bucketParameters: string[];
48
75
  getSourceTables(): Set<TablePattern>;
49
- /** Whether the table possibly affects the buckets resolved by this source. */
50
- tableSyncsParameters(table: SourceTableInterface): boolean;
51
- /** Whether the table possibly affects the contents of buckets resolved by this source. */
52
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[];
53
82
  /**
54
83
  * Given a static schema, infer all logical tables and associated columns that appear in buckets defined by this
55
84
  * source.
@@ -60,7 +89,34 @@ export interface BucketSource {
60
89
  debugWriteOutputTables(result: Record<string, {
61
90
  query: string;
62
91
  }[]>): void;
63
- debugRepresentation(): any;
92
+ }
93
+ /**
94
+ * This defines how to extract parameter index lookup values from parameter queries or stream subqueries.
95
+ *
96
+ * This is only relevant for parameter queries and subqueries that query tables.
97
+ */
98
+ export interface ParameterIndexLookupCreator {
99
+ /**
100
+ * lookupName + queryId is used to uniquely identify parameter queries for parameter storage.
101
+ *
102
+ * This defines the default values if no transformations are applied.
103
+ */
104
+ readonly defaultLookupScope: ParameterLookupScope;
105
+ getSourceTables(): Set<TablePattern>;
106
+ /**
107
+ * Given a row in a source table that affects sync parameters, returns a structure to index which buckets rows should
108
+ * be associated with.
109
+ *
110
+ * The returned {@link UnscopedParameterLookup} can be referenced by {@link pushBucketParameterQueriers} to allow the storage
111
+ * system to find buckets.
112
+ */
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;
64
120
  }
65
121
  export declare enum BucketSourceType {
66
122
  SYNC_RULE = 0,
@@ -70,3 +126,16 @@ export type ResultSetDescription = {
70
126
  name: string;
71
127
  columns: ColumnDefinition[];
72
128
  };
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[]): {
132
+ evaluateRow: ScopedEvaluateRow;
133
+ };
134
+ export declare function mergeParameterIndexLookupCreators(hydrationState: HydrationState, sources: ParameterIndexLookupCreator[]): {
135
+ evaluateParameterRow: ScopedEvaluateParameterRow;
136
+ };
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,6 +1,73 @@
1
+ import { ScopedParameterLookup } from './BucketParameterQuerier.js';
2
+ import { DEFAULT_HYDRATION_STATE } from './HydrationState.js';
3
+ import { isEvaluationError } from './types.js';
4
+ import { buildBucketName } from './utils.js';
1
5
  export var BucketSourceType;
2
6
  (function (BucketSourceType) {
3
7
  BucketSourceType[BucketSourceType["SYNC_RULE"] = 0] = "SYNC_RULE";
4
8
  BucketSourceType[BucketSourceType["SYNC_STREAM"] = 1] = "SYNC_STREAM";
5
9
  })(BucketSourceType || (BucketSourceType = {}));
10
+ export function hydrateEvaluateRow(hydrationState, source) {
11
+ const scope = hydrationState.getBucketSourceScope(source);
12
+ return (options) => {
13
+ return source.evaluateRow(options).map((result) => {
14
+ if (isEvaluationError(result)) {
15
+ return result;
16
+ }
17
+ return {
18
+ bucket: buildBucketName(scope, result.serializedBucketParameters),
19
+ id: result.id,
20
+ table: result.table,
21
+ data: result.data
22
+ };
23
+ });
24
+ };
25
+ }
26
+ export function hydrateEvaluateParameterRow(hydrationState, source) {
27
+ const scope = hydrationState.getParameterIndexLookupScope(source);
28
+ return (sourceTable, row) => {
29
+ return source.evaluateParameterRow(sourceTable, row).map((result) => {
30
+ if (isEvaluationError(result)) {
31
+ return result;
32
+ }
33
+ return {
34
+ bucketParameters: result.bucketParameters,
35
+ lookup: ScopedParameterLookup.normalized(scope, result.lookup)
36
+ };
37
+ });
38
+ };
39
+ }
40
+ export function mergeDataSources(hydrationState, sources) {
41
+ const withScope = sources.map((source) => hydrateEvaluateRow(hydrationState, source));
42
+ return {
43
+ evaluateRow(options) {
44
+ return withScope.flatMap((source) => source(options));
45
+ }
46
+ };
47
+ }
48
+ export function mergeParameterIndexLookupCreators(hydrationState, sources) {
49
+ const withScope = sources.map((source) => hydrateEvaluateParameterRow(hydrationState, source));
50
+ return {
51
+ evaluateParameterRow(sourceTable, row) {
52
+ return withScope.flatMap((source) => source(sourceTable, row));
53
+ }
54
+ };
55
+ }
56
+ /**
57
+ * For production purposes, we typically need to operate on the different sources separately. However, for debugging,
58
+ * it is useful to have a single merged source that can evaluate everything.
59
+ */
60
+ export function debugHydratedMergedSource(bucketSource, params) {
61
+ const hydrationState = params?.hydrationState ?? DEFAULT_HYDRATION_STATE;
62
+ const resolvedParams = { hydrationState };
63
+ const dataSource = mergeDataSources(hydrationState, bucketSource.dataSources);
64
+ const parameterLookupSource = mergeParameterIndexLookupCreators(hydrationState, bucketSource.parameterIndexLookupCreators);
65
+ const hydratedBucketSource = bucketSource.hydrate(resolvedParams);
66
+ return {
67
+ definition: bucketSource,
68
+ evaluateParameterRow: parameterLookupSource.evaluateParameterRow.bind(parameterLookupSource),
69
+ evaluateRow: dataSource.evaluateRow.bind(dataSource),
70
+ pushBucketParameterQueriers: hydratedBucketSource.pushBucketParameterQueriers.bind(hydratedBucketSource)
71
+ };
72
+ }
6
73
  //# sourceMappingURL=BucketSource.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BucketSource.js","sourceRoot":"","sources":["../src/BucketSource.ts"],"names":[],"mappings":"AA2EA,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,iEAAS,CAAA;IACT,qEAAW,CAAA;AACb,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B"}
1
+ {"version":3,"file":"BucketSource.js","sourceRoot":"","sources":["../src/BucketSource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { BucketDataSource, CreateSourceParams, HydratedBucketSource } from './BucketSource.js';
2
+ import { ParameterIndexLookupCreator, CompatibilityContext, EvaluatedParameters, EvaluatedRow, EvaluationError, GetBucketParameterQuerierResult, GetQuerierOptions, SqlEventDescriptor, SqliteInputValue, SqliteValue, SqlSyncRules } from './index.js';
3
+ import { SourceTableInterface } from './SourceTableInterface.js';
4
+ import { EvaluateRowOptions, SqliteRow } from './types.js';
5
+ /**
6
+ * Hydrated sync rules is sync rule definitions along with persisted state. Currently, the persisted state
7
+ * specifically affects bucket names.
8
+ */
9
+ export declare class HydratedSyncRules {
10
+ bucketSources: HydratedBucketSource[];
11
+ eventDescriptors: SqlEventDescriptor[];
12
+ compatibility: CompatibilityContext;
13
+ readonly definition: SqlSyncRules;
14
+ private readonly innerEvaluateRow;
15
+ private readonly innerEvaluateParameterRow;
16
+ constructor(params: {
17
+ definition: SqlSyncRules;
18
+ createParams: CreateSourceParams;
19
+ bucketDataSources: BucketDataSource[];
20
+ bucketParameterIndexLookupCreators: ParameterIndexLookupCreator[];
21
+ eventDescriptors?: SqlEventDescriptor[];
22
+ compatibility?: CompatibilityContext;
23
+ });
24
+ getSourceTables(): import("./TablePattern.js").TablePattern[];
25
+ tableTriggersEvent(table: SourceTableInterface): boolean;
26
+ tableSyncsData(table: SourceTableInterface): boolean;
27
+ tableSyncsParameters(table: SourceTableInterface): boolean;
28
+ applyRowContext<MaybeToast extends undefined = never>(source: SqliteRow<SqliteInputValue | MaybeToast>): SqliteRow<SqliteValue | MaybeToast>;
29
+ /**
30
+ * Throws errors.
31
+ */
32
+ evaluateRow(options: EvaluateRowOptions): EvaluatedRow[];
33
+ evaluateRowWithErrors(options: EvaluateRowOptions): {
34
+ results: EvaluatedRow[];
35
+ errors: EvaluationError[];
36
+ };
37
+ /**
38
+ * Throws errors.
39
+ */
40
+ evaluateParameterRow(table: SourceTableInterface, row: SqliteRow): EvaluatedParameters[];
41
+ evaluateParameterRowWithErrors(table: SourceTableInterface, row: SqliteRow): {
42
+ results: EvaluatedParameters[];
43
+ errors: EvaluationError[];
44
+ };
45
+ getBucketParameterQuerier(options: GetQuerierOptions): GetBucketParameterQuerierResult;
46
+ }
@@ -0,0 +1,88 @@
1
+ import { CompatibilityContext, isEvaluatedParameters, isEvaluatedRow, isEvaluationError, mergeBucketParameterQueriers, mergeDataSources, mergeParameterIndexLookupCreators } from './index.js';
2
+ /**
3
+ * Hydrated sync rules is sync rule definitions along with persisted state. Currently, the persisted state
4
+ * specifically affects bucket names.
5
+ */
6
+ export class HydratedSyncRules {
7
+ bucketSources = [];
8
+ eventDescriptors = [];
9
+ compatibility = CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY;
10
+ definition;
11
+ innerEvaluateRow;
12
+ innerEvaluateParameterRow;
13
+ constructor(params) {
14
+ const hydrationState = params.createParams.hydrationState;
15
+ this.definition = params.definition;
16
+ this.innerEvaluateRow = mergeDataSources(hydrationState, params.bucketDataSources).evaluateRow;
17
+ this.innerEvaluateParameterRow = mergeParameterIndexLookupCreators(hydrationState, params.bucketParameterIndexLookupCreators).evaluateParameterRow;
18
+ if (params.eventDescriptors) {
19
+ this.eventDescriptors = params.eventDescriptors;
20
+ }
21
+ if (params.compatibility) {
22
+ this.compatibility = params.compatibility;
23
+ }
24
+ this.bucketSources = this.definition.bucketSources.map((source) => source.hydrate(params.createParams));
25
+ }
26
+ // These methods do not depend on hydration, so we can just forward them to the definition.
27
+ getSourceTables() {
28
+ return this.definition.getSourceTables();
29
+ }
30
+ tableTriggersEvent(table) {
31
+ return this.definition.tableTriggersEvent(table);
32
+ }
33
+ tableSyncsData(table) {
34
+ return this.definition.tableSyncsData(table);
35
+ }
36
+ tableSyncsParameters(table) {
37
+ return this.definition.tableSyncsParameters(table);
38
+ }
39
+ applyRowContext(source) {
40
+ return this.definition.applyRowContext(source);
41
+ }
42
+ /**
43
+ * Throws errors.
44
+ */
45
+ evaluateRow(options) {
46
+ const { results, errors } = this.evaluateRowWithErrors(options);
47
+ if (errors.length > 0) {
48
+ throw new Error(errors[0].error);
49
+ }
50
+ return results;
51
+ }
52
+ evaluateRowWithErrors(options) {
53
+ const rawResults = this.innerEvaluateRow(options);
54
+ const results = rawResults.filter(isEvaluatedRow);
55
+ const errors = rawResults.filter(isEvaluationError);
56
+ return { results, errors };
57
+ }
58
+ /**
59
+ * Throws errors.
60
+ */
61
+ evaluateParameterRow(table, row) {
62
+ const { results, errors } = this.evaluateParameterRowWithErrors(table, row);
63
+ if (errors.length > 0) {
64
+ throw new Error(errors[0].error);
65
+ }
66
+ return results;
67
+ }
68
+ evaluateParameterRowWithErrors(table, row) {
69
+ const rawResults = this.innerEvaluateParameterRow(table, row);
70
+ const results = rawResults.filter(isEvaluatedParameters);
71
+ const errors = rawResults.filter(isEvaluationError);
72
+ return { results, errors };
73
+ }
74
+ getBucketParameterQuerier(options) {
75
+ const queriers = [];
76
+ const errors = [];
77
+ const pending = { queriers, errors };
78
+ for (const source of this.bucketSources) {
79
+ if ((source.definition.subscribedToByDefault && options.hasDefaultStreams) ||
80
+ source.definition.name in options.streams) {
81
+ source.pushBucketParameterQueriers(pending, options);
82
+ }
83
+ }
84
+ const querier = mergeBucketParameterQueriers(queriers);
85
+ return { querier, errors };
86
+ }
87
+ }
88
+ //# sourceMappingURL=HydratedSyncRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HydratedSyncRules.js","sourceRoot":"","sources":["../src/HydratedSyncRules.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,oBAAoB,EAMpB,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,4BAA4B,EAC5B,gBAAgB,EAChB,iCAAiC,EAQlC,MAAM,YAAY,CAAC;AAIpB;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IAC5B,aAAa,GAA2B,EAAE,CAAC;IAC3C,gBAAgB,GAAyB,EAAE,CAAC;IAC5C,aAAa,GAAyB,oBAAoB,CAAC,4BAA4B,CAAC;IAE/E,UAAU,CAAe;IAEjB,gBAAgB,CAAoB;IACpC,yBAAyB,CAA6B;IAEvE,YAAY,MAOX;QACC,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC;QAE1D,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,cAAc,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC;QAC/F,IAAI,CAAC,yBAAyB,GAAG,iCAAiC,CAChE,cAAc,EACd,MAAM,CAAC,kCAAkC,CAC1C,CAAC,oBAAoB,CAAC;QAEvB,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAClD,CAAC;QACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED,2FAA2F;IAE3F,eAAe;QACb,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC;IAC3C,CAAC;IAED,kBAAkB,CAAC,KAA2B;QAC5C,OAAO,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,cAAc,CAAC,KAA2B;QACxC,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,oBAAoB,CAAC,KAA2B;QAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,eAAe,CACb,MAAgD;QAEhD,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAA2B;QACrC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,qBAAqB,CAAC,OAA2B;QAC/C,MAAM,UAAU,GAAuB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAmB,CAAC;QACpE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAsB,CAAC;QAEzE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,KAA2B,EAAE,GAAc;QAC9D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,8BAA8B,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,8BAA8B,CAC5B,KAA2B,EAC3B,GAAc;QAEd,MAAM,UAAU,GAAgC,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3F,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,qBAAqB,CAA0B,CAAC;QAClF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAsB,CAAC;QACzE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED,yBAAyB,CAAC,OAA0B;QAClD,MAAM,QAAQ,GAA6B,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAErC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxC,IACE,CAAC,MAAM,CAAC,UAAU,CAAC,qBAAqB,IAAI,OAAO,CAAC,iBAAiB,CAAC;gBACtE,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,EACzC,CAAC;gBACD,MAAM,CAAC,2BAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAC;QACvD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import { BucketDataSource, ParameterIndexLookupCreator } from './BucketSource.js';
2
+ export interface BucketDataScope {
3
+ /** The prefix is the bucket name before the parameters. */
4
+ bucketPrefix: string;
5
+ }
6
+ export interface ParameterLookupScope {
7
+ /** The lookup name + queryid is used to reference the parameter lookup record. */
8
+ lookupName: string;
9
+ queryId: string;
10
+ }
11
+ /**
12
+ * Hydration state information for a source.
13
+ *
14
+ * This is what keeps track of bucket name and parameter lookup mappings for hydration. This can be used
15
+ * both to re-use mappings across hydrations of different sync rule versions, or to generate new mappings.
16
+ */
17
+ export interface HydrationState {
18
+ /**
19
+ * Given a bucket data source definition, get the bucket prefix to use for it.
20
+ */
21
+ getBucketSourceScope(source: BucketDataSource): BucketDataScope;
22
+ /**
23
+ * Given a bucket parameter lookup definition, get the persistence name to use.
24
+ */
25
+ getParameterIndexLookupScope(source: ParameterIndexLookupCreator): ParameterLookupScope;
26
+ }
27
+ /**
28
+ * This represents hydration state that performs no transformations.
29
+ *
30
+ * This is the legacy default behavior with no bucket versioning.
31
+ */
32
+ export declare const DEFAULT_HYDRATION_STATE: HydrationState;
33
+ /**
34
+ * Transforms bucket ids generated when evaluating the row by e.g. encoding version information.
35
+ *
36
+ * Because buckets are recreated on a sync rule redeploy, it makes sense to use different bucket ids (otherwise, clients
37
+ * may run into checksum errors causing a sync to take longer than necessary or breaking progress).
38
+ *
39
+ * So, this transformer receives the original bucket id as generated by defined sync rules, and can prepend a version
40
+ * identifier.
41
+ *
42
+ * Note that this transformation has not been present in older versions of the sync service. To preserve backwards
43
+ * compatibility, sync rules will not use this without an opt-in.
44
+ */
45
+ export declare function versionedHydrationState(version: number): HydrationState;