@powersync/service-sync-rules 0.42.0 → 0.44.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 (130) hide show
  1. package/README.md +49 -14
  2. package/dist/BucketSource.d.ts +2 -2
  3. package/dist/HydratedSyncConfig.d.ts +2 -0
  4. package/dist/HydratedSyncConfig.js +9 -3
  5. package/dist/HydratedSyncConfig.js.map +1 -1
  6. package/dist/SourceTableConfig.d.ts +42 -0
  7. package/dist/SourceTableConfig.js +152 -0
  8. package/dist/SourceTableConfig.js.map +1 -0
  9. package/dist/SqlSyncRules.d.ts +14 -0
  10. package/dist/SqlSyncRules.js +2 -1
  11. package/dist/SqlSyncRules.js.map +1 -1
  12. package/dist/StorageVersion.d.ts +0 -1
  13. package/dist/StorageVersion.js +0 -1
  14. package/dist/StorageVersion.js.map +1 -1
  15. package/dist/SyncConfig.d.ts +3 -1
  16. package/dist/SyncConfig.js +3 -1
  17. package/dist/SyncConfig.js.map +1 -1
  18. package/dist/SyncConfigDiagnostics.d.ts +12 -0
  19. package/dist/SyncConfigDiagnostics.js +2 -0
  20. package/dist/SyncConfigDiagnostics.js.map +1 -0
  21. package/dist/TablePattern.d.ts +2 -2
  22. package/dist/TablePattern.js +17 -7
  23. package/dist/TablePattern.js.map +1 -1
  24. package/dist/compatibility.d.ts +2 -1
  25. package/dist/compatibility.js +4 -2
  26. package/dist/compatibility.js.map +1 -1
  27. package/dist/compiler/compiler.d.ts +4 -4
  28. package/dist/compiler/compiler.js +2 -2
  29. package/dist/compiler/equality.d.ts +2 -2
  30. package/dist/compiler/equality.js +2 -2
  31. package/dist/compiler/expression.d.ts +3 -3
  32. package/dist/compiler/expression.js +2 -2
  33. package/dist/compiler/parser.d.ts +1 -1
  34. package/dist/compiler/parser.js +2 -2
  35. package/dist/compiler/sqlite.js +1 -2
  36. package/dist/compiler/sqlite.js.map +1 -1
  37. package/dist/compiler/table.d.ts +2 -2
  38. package/dist/compiler/table.js +1 -1
  39. package/dist/from_yaml.d.ts +3 -1
  40. package/dist/from_yaml.js +121 -26
  41. package/dist/from_yaml.js.map +1 -1
  42. package/dist/index.d.ts +5 -0
  43. package/dist/index.js +5 -0
  44. package/dist/index.js.map +1 -1
  45. package/dist/json.d.ts +7 -0
  46. package/dist/json.js +2 -0
  47. package/dist/json.js.map +1 -0
  48. package/dist/json_schema.d.ts +10 -0
  49. package/dist/json_schema.js +26 -7
  50. package/dist/json_schema.js.map +1 -1
  51. package/dist/legacy/BaseSqlDataQuery.d.ts +12 -0
  52. package/dist/legacy/BaseSqlDataQuery.js +3 -0
  53. package/dist/legacy/BaseSqlDataQuery.js.map +1 -1
  54. package/dist/legacy/SqlBucketDescriptor.d.ts +9 -0
  55. package/dist/legacy/SqlBucketDescriptor.js +6 -0
  56. package/dist/legacy/SqlBucketDescriptor.js.map +1 -1
  57. package/dist/legacy/SqlDataQuery.d.ts +6 -0
  58. package/dist/legacy/SqlDataQuery.js +3 -0
  59. package/dist/legacy/SqlDataQuery.js.map +1 -1
  60. package/dist/legacy/SqlParameterQuery.d.ts +4 -0
  61. package/dist/legacy/SqlParameterQuery.js +1 -0
  62. package/dist/legacy/SqlParameterQuery.js.map +1 -1
  63. package/dist/legacy/StaticSqlParameterQuery.d.ts +4 -0
  64. package/dist/legacy/StaticSqlParameterQuery.js +1 -0
  65. package/dist/legacy/StaticSqlParameterQuery.js.map +1 -1
  66. package/dist/legacy/TableQuerySchema.d.ts +1 -0
  67. package/dist/legacy/TableQuerySchema.js +1 -0
  68. package/dist/legacy/TableQuerySchema.js.map +1 -1
  69. package/dist/legacy/TableValuedFunctionSqlParameterQuery.d.ts +4 -0
  70. package/dist/legacy/TableValuedFunctionSqlParameterQuery.js +1 -0
  71. package/dist/legacy/TableValuedFunctionSqlParameterQuery.js.map +1 -1
  72. package/dist/legacy/sql_filters.d.ts +13 -0
  73. package/dist/legacy/sql_filters.js +10 -0
  74. package/dist/legacy/sql_filters.js.map +1 -1
  75. package/dist/legacy/sql_support.d.ts +33 -0
  76. package/dist/legacy/sql_support.js +33 -0
  77. package/dist/legacy/sql_support.js.map +1 -1
  78. package/dist/legacy/streams/filter.d.ts +22 -0
  79. package/dist/legacy/streams/filter.js +19 -0
  80. package/dist/legacy/streams/filter.js.map +1 -1
  81. package/dist/legacy/streams/from_sql.d.ts +3 -0
  82. package/dist/legacy/streams/from_sql.js +5 -2
  83. package/dist/legacy/streams/from_sql.js.map +1 -1
  84. package/dist/legacy/streams/functions.d.ts +3 -0
  85. package/dist/legacy/streams/functions.js +3 -0
  86. package/dist/legacy/streams/functions.js.map +1 -1
  87. package/dist/legacy/streams/parameter.d.ts +10 -0
  88. package/dist/legacy/streams/stream.d.ts +7 -1
  89. package/dist/legacy/streams/stream.js +7 -1
  90. package/dist/legacy/streams/stream.js.map +1 -1
  91. package/dist/legacy/streams/variant.d.ts +6 -0
  92. package/dist/legacy/streams/variant.js +1 -0
  93. package/dist/legacy/streams/variant.js.map +1 -1
  94. package/dist/legacy/validators.d.ts +1 -0
  95. package/dist/legacy/validators.js +1 -0
  96. package/dist/legacy/validators.js.map +1 -1
  97. package/dist/mongo/MongoBsonValidators.d.ts +78 -0
  98. package/dist/mongo/MongoBsonValidators.js +129 -0
  99. package/dist/mongo/MongoBsonValidators.js.map +1 -0
  100. package/dist/mongo/MongoFilterExpression.d.ts +65 -0
  101. package/dist/mongo/MongoFilterExpression.js +183 -0
  102. package/dist/mongo/MongoFilterExpression.js.map +1 -0
  103. package/dist/mongo/MongoFilterValidation.d.ts +28 -0
  104. package/dist/mongo/MongoFilterValidation.js +47 -0
  105. package/dist/mongo/MongoFilterValidation.js.map +1 -0
  106. package/dist/schema-generators/TsSchemaGenerator.d.ts +1 -0
  107. package/dist/schema-generators/TsSchemaGenerator.js +15 -9
  108. package/dist/schema-generators/TsSchemaGenerator.js.map +1 -1
  109. package/dist/sync_plan/evaluator/bucket_source.js +1 -1
  110. package/dist/sync_plan/evaluator/parameter_evaluator.d.ts +1 -1
  111. package/dist/sync_plan/evaluator/parameter_evaluator.js +1 -1
  112. package/dist/sync_plan/plan.d.ts +3 -1
  113. package/dist/sync_plan/schema_inference.d.ts +1 -1
  114. package/dist/sync_plan/schema_inference.js +1 -1
  115. package/dist/sync_plan/serialize.d.ts +13 -2
  116. package/dist/sync_plan/serialize.js +17 -8
  117. package/dist/sync_plan/serialize.js.map +1 -1
  118. package/dist/types.d.ts +1 -8
  119. package/dist/types.js +8 -13
  120. package/dist/types.js.map +1 -1
  121. package/dist/utils.d.ts +1 -0
  122. package/dist/utils.js +43 -12
  123. package/dist/utils.js.map +1 -1
  124. package/dist/yaml_source_locations.d.ts +14 -0
  125. package/dist/yaml_source_locations.js +112 -0
  126. package/dist/yaml_source_locations.js.map +1 -0
  127. package/dist/yaml_validation.js.map +1 -1
  128. package/package.json +9 -3
  129. package/schema/sync_config.json +620 -0
  130. package/schema/sync_rules.json +387 -4
package/README.md CHANGED
@@ -1,19 +1,56 @@
1
- # powersync-sync-rules
1
+ # @powersync/service-sync-rules
2
2
 
3
- A library containing logic for PowerSync sync config.
3
+ A library containing the parsing, compilation and evaluation logic for the 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 the sync config defines two operations:
9
+ The sync config is the YAML document that defines which data each client receives. It supports two engines:
10
10
 
11
- 1. Given a data row, compute a list of buckets that it belongs to.
12
- 2. Given an authenticated user, return a list of buckets for the user.
11
+ - **Sync Streams** (`streams:`): the current engine. Queries are compiled by `src/compiler/` into a sync plan and evaluated by `src/sync_plan/`. Requires `config: edition: 3`.
12
+ - **Legacy Sync Rules** (`bucket_definitions:`): deprecated. Implemented in `src/legacy/` and kept only so that existing deployments keep working. Do not add features there. See [Legacy Sync Rules](#legacy-sync-rules-deprecated).
13
13
 
14
- This implementation of sync config uses SQL queries to declaratively define those operations using familiar SQL operations.
14
+ Both engines define the same two operations:
15
15
 
16
- We define (1) using data queries, and (2) using parameter queries.
16
+ 1. Given a data row, compute the list of buckets it belongs to.
17
+ 2. Given an authenticated request, return the list of buckets to sync.
18
+
19
+ None of the SQL is executed against a database. It is used to pre-process replicated rows into a format for efficient sync.
20
+
21
+ `SqlSyncRules.fromYaml()` in `src/SqlSyncRules.ts` parses either engine into a `SyncConfig`. The service hydrates it with persisted state into a `HydratedSyncConfig` (`src/HydratedSyncConfig.ts`), which is what replication and sync use at runtime.
22
+
23
+ # Sync Streams
24
+
25
+ Example:
26
+
27
+ ```yaml
28
+ config:
29
+ edition: 3
30
+
31
+ streams:
32
+ lists:
33
+ auto_subscribe: true
34
+ query: SELECT * FROM lists WHERE owner_id = auth.user_id()
35
+ todos:
36
+ query: SELECT * FROM todos WHERE list_id = subscription.parameter('list_id')
37
+ ```
38
+
39
+ A stream is one or more SQL queries over source tables. Streams with `auto_subscribe: true` sync when the client connects. Other streams sync when the client subscribes to them, optionally with parameters read through `subscription.parameter()`. Request-level values come from `auth.*` functions (JWT claims) and `connection.parameters()`.
40
+
41
+ Compilation and evaluation:
42
+
43
+ 1. `SyncStreamsCompiler` (`src/compiler/compiler.ts`) parses each query and builds an intermediate representation. Compilation is schema-independent; the source schema, when available, is only used for validation warnings and output schema inference.
44
+ 2. `toSyncPlan()` produces a `SyncPlan` (`src/sync_plan/plan.ts`) describing bucket data sources, parameter lookups and queriers. The plan is serialized and stored alongside the deployed config.
45
+ 3. `PrecompiledSyncConfig` (`src/sync_plan/evaluator/`) evaluates the plan at runtime, using either the JavaScript or the SQLite expression engine (`src/sync_plan/engine/`).
46
+
47
+ The grammar is in `grammar/sync-streams-compiler.ebnf`. User documentation: https://docs.powersync.com/sync/streams/overview.
48
+
49
+ # Legacy Sync Rules (deprecated)
50
+
51
+ Sync Rules are deprecated in favour of Sync Streams. The sections below document the legacy implementation in `src/legacy/`, which is preserved for backwards compatibility only.
52
+
53
+ Legacy Sync Rules define the two operations above with explicit queries: parameter queries return the buckets for a request, and data queries assign rows to buckets.
17
54
 
18
55
  Example:
19
56
 
@@ -30,8 +67,6 @@ bucket_definitions:
30
67
 
31
68
  For the above example, a document with `org_id: 'org1'` will belong to a single bucket `by_org["org1"]`. Similarly, a user with `org_id: 'org1'` will sync the bucket `by_org["org1"]`.
32
69
 
33
- An important aspect is that none of these SQL queries are actually executed against any SQL database. Instead, it is used to pre-process data before storing the data in a format for efficient sync operations.
34
-
35
70
  When data is replicated from the source database to PowerSync, we do two things for each row:
36
71
 
37
72
  1. Evaluate data queries on the row: `syncRules.evaluateRow(row)`.
@@ -39,9 +74,9 @@ When data is replicated from the source database to PowerSync, we do two things
39
74
 
40
75
  Data queries also have the option to transform the row instead of just using `select *`. We store the transformed data for each of the buckets it belongs to.
41
76
 
42
- # Query Structure
77
+ ## Query Structure
43
78
 
44
- ## Data queries
79
+ ### Data queries
45
80
 
46
81
  A data query is turned into a function `(row) => Array<{bucket, data}>`. The main implementation is in the `SqlDataQuery` class.
47
82
 
@@ -67,14 +102,14 @@ bucket.param IN mytable.some_array -- ParameterMatchClause
67
102
  (mytable.column1 = bucket.param) OR (mytable.column2 = bucket.param) -- ParameterMatchClause
68
103
  ```
69
104
 
70
- ## Parameter Queries
105
+ ### Parameter Queries
71
106
 
72
107
  There are two types of parameter queries:
73
108
 
74
109
  1. Queries without tables. These just operate on request parameters. Example: `select token_parameters.user_id`. Thes are implemented in the `StaticSqlParameterQuery` class.
75
110
  2. Queries with tables. Example: `select org_id from users where id = token_parameters.user_id`. These use parameter tables, and are implemented in `SqlParameterQuery`. These are used to pre-process rows in the parameter tables for efficient lookup later.
76
111
 
77
- ### StaticSqlParameterQuery
112
+ #### StaticSqlParameterQuery
78
113
 
79
114
  These are effecitively just a function of `(request) => Array[{bucket}]`. These queries can select values from request parameters, and apply filters from request parameters.
80
115
 
@@ -90,7 +125,7 @@ request.parameters() -- ParameterValueClause
90
125
  fn(token_parameters.param) -- ParameterValueClause. This includes most operators.
91
126
  ```
92
127
 
93
- ### SqlParameterQuery
128
+ #### SqlParameterQuery
94
129
 
95
130
  These queries pre-process parameter tables to effectively create an "index" for efficient queries when syncing.
96
131
 
@@ -20,7 +20,7 @@ export interface HydrationInput extends CreateSourceParams {
20
20
  scalarExpressions: ScalarExpressionEngine;
21
21
  }
22
22
  /**
23
- * A BucketSource is a _logical_ bucket or sync stream definition. It is primarily used to group together
23
+ * A BucketSource is a _logical_ bucket or Sync Stream definition. It is primarily used to group together
24
24
  * related BucketDataSource, BucketParameterLookupSource and BucketParameterQuerierSource definitions,
25
25
  * for the purpose of subscribing to specific streams. It does not directly define the implementation
26
26
  * or replication process.
@@ -70,7 +70,7 @@ export type ScopedEvaluateParameterRow = (sourceTable: SourceTableRef, row: Sqli
70
70
  * Encodes a static definition of a bucket source, as parsed from sync rules or stream definitions.
71
71
  *
72
72
  * This does not require any "hydration" itself: All results are independent of bucket names.
73
- * The higher-level HydratedSyncRules will use a HydrationState to generate bucket names.
73
+ * The higher-level HydratedSyncConfig will use a HydrationState to generate bucket names.
74
74
  */
75
75
  export interface BucketDataSource {
76
76
  /**
@@ -1,5 +1,6 @@
1
1
  import { BucketDataSource } from './BucketSource.js';
2
2
  import { BucketSource, CompatibilityContext, EvaluatedParameters, EvaluatedRow, EvaluationError, GetBucketParameterQuerierResult, GetQuerierOptions, HydratedEventDescriptor, HydrateSyncConfigParams, ParameterIndexLookupCreator, SqliteInputValue, SqliteValue, SyncConfig, TablePattern } from './index.js';
3
+ import { SourceTableConfigMap } from './SourceTableConfig.js';
3
4
  import { SourceTableRef } from './SourceTableRef.js';
4
5
  import { EvaluateRowOptions, SqliteRow } from './types.js';
5
6
  export interface MatchingSources {
@@ -17,6 +18,7 @@ export interface MatchingSources {
17
18
  */
18
19
  export declare class HydratedSyncConfig {
19
20
  #private;
21
+ readonly sourceTableConfig: SourceTableConfigMap;
20
22
  /**
21
23
  * These are used by queriers, and do not support merging across multiple SyncConfigs.
22
24
  */
@@ -1,6 +1,7 @@
1
1
  import { CompatibilityContext, isEvaluatedParameters, isEvaluatedRow, isEvaluationError, mergeBucketParameterQueriers, mergeDataSources, mergeParameterIndexLookupCreators, parameterLookupScopeKey } from './index.js';
2
2
  import { sourceTableRefKey } from './SourceTableRef.js';
3
3
  import { createScalarExpressionEngine } from './sync_plan/engine/factory.js';
4
+ import { PrecompiledSyncConfig } from './sync_plan/evaluator/index.js';
4
5
  import { applyRowContext, uniqueBy } from './utils.js';
5
6
  /**
6
7
  * HydratedSyncConfig is sync config definitions along with persisted state.
@@ -12,6 +13,7 @@ import { applyRowContext, uniqueBy } from './utils.js';
12
13
  * The persisted state specifically affects bucket names, as well as V3+ storage structure.
13
14
  */
14
15
  export class HydratedSyncConfig {
16
+ sourceTableConfig;
15
17
  /**
16
18
  * These are used by queriers, and do not support merging across multiple SyncConfigs.
17
19
  */
@@ -54,8 +56,12 @@ export class HydratedSyncConfig {
54
56
  const hydrationState = params.createParams.hydrationState;
55
57
  const definitions = params.definitions;
56
58
  if (definitions.length == 0) {
57
- throw new Error('HydratedSyncRules requires at least one SyncConfig definition');
59
+ throw new Error('HydratedSyncConfig requires at least one SyncConfig definition');
58
60
  }
61
+ // The service validates that definitions sharing a source reader have compatible source-table options.
62
+ const firstConfig = definitions[0];
63
+ this.sourceTableConfig =
64
+ firstConfig instanceof PrecompiledSyncConfig ? (firstConfig.plan.sourceTableConfig ?? {}) : {};
59
65
  this.sourceDefinitions = [...definitions];
60
66
  this.compatibility = assertSharedCompatibility(this.sourceDefinitions);
61
67
  this.hydrationInput = {
@@ -199,7 +205,7 @@ export class HydratedSyncConfig {
199
205
  assertSingleSourceDefinition(debugName) {
200
206
  // We may split the types in the future to enforce this on a type level instead of runtime level
201
207
  if (this.sourceDefinitions.length != 1) {
202
- throw new Error(`${debugName} is not supported for HydratedSyncRules with multiple SyncConfigs`);
208
+ throw new Error(`${debugName} is not supported for HydratedSyncConfig with multiple SyncConfigs`);
203
209
  }
204
210
  }
205
211
  }
@@ -210,7 +216,7 @@ function assertSharedCompatibility(definitions) {
210
216
  }
211
217
  for (const definition of definitions) {
212
218
  if (!definition.compatibility.equals(compatibility)) {
213
- throw new Error('All SyncConfigs in a HydratedSyncRules instance must use the same CompatibilityContext');
219
+ throw new Error('All SyncConfigs in a HydratedSyncConfig instance must use the same CompatibilityContext');
214
220
  }
215
221
  }
216
222
  return compatibility;
@@ -1 +1 @@
1
- {"version":3,"file":"HydratedSyncConfig.js","sourceRoot":"","sources":["../src/HydratedSyncConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HydratedSyncConfig.js","sourceRoot":"","sources":["../src/HydratedSyncConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { JsonObject } from './json.js';
2
+ import { type MongoTableFilter } from './mongo/MongoFilterExpression.js';
3
+ import { ImplicitSchemaTablePattern } from './TablePattern.js';
4
+ /**
5
+ * Options for one entry in `config.source_table_options`. MongoDB filtering is parsed in every edition; execution support is validated by the source adapter.
6
+ */
7
+ export interface SourceTableConfig {
8
+ mongodb_filter_expression?: MongoTableFilter;
9
+ }
10
+ /**
11
+ * Source-table options keyed by an authored table pattern.
12
+ */
13
+ export type SourceTableConfigMap<TTableConfig extends SourceTableConfig = SourceTableConfig> = Readonly<Partial<Record<string, TTableConfig>>>;
14
+ /**
15
+ * Generate the source-table options schema with MongoDB pre-filtering expressions.
16
+ */
17
+ export declare function createSourceTableConfigSchema(): JsonObject;
18
+ /**
19
+ * Parse a source-table key using the same right-to-left qualification as Sync Stream table references.
20
+ */
21
+ export declare function parseSourceTableConfigKey(name: string): ImplicitSchemaTablePattern;
22
+ /**
23
+ * Find authored keys that identify the same pattern after SQL identifier normalization.
24
+ * Invalid keys are left to the source-table schema validator.
25
+ */
26
+ export declare function findDuplicateSourceTableConfigKeys(keys: Iterable<string>): Array<[string, string]>;
27
+ /**
28
+ * Validate and copy source-table options while preserving declaration order.
29
+ */
30
+ export declare function normalizeSourceTableConfig(value: unknown): SourceTableConfigMap;
31
+ /**
32
+ * Reject filter connection tags that query hydration cannot honor.
33
+ */
34
+ export declare function assertMongoFilterConnection(pattern: ImplicitSchemaTablePattern): void;
35
+ /**
36
+ * Conservative equality: declaration order and expression order are significant.
37
+ */
38
+ export declare function sourceTableConfigsEqual(left: SourceTableConfigMap, right: SourceTableConfigMap): boolean;
39
+ /**
40
+ * Configured expressions require execution support even when current collections opt out.
41
+ */
42
+ export declare function hasMongoFilterExpressions(config: SourceTableConfigMap, connectionTag: string): boolean;
@@ -0,0 +1,152 @@
1
+ import { MONGO_FILTER_VALIDATOR } from './mongo/MongoFilterExpression.js';
2
+ import { DEFAULT_TAG, ImplicitSchemaTablePattern, TablePattern } from './TablePattern.js';
3
+ const SOURCE_TABLE_NAME_ERROR = 'Source table patterns must use <table>, <database>.<table>, or <connection>.<database>.<table>. Double-quote names containing dots or quotes.';
4
+ /**
5
+ * Generate the source-table options schema with MongoDB pre-filtering expressions.
6
+ */
7
+ export function createSourceTableConfigSchema() {
8
+ return {
9
+ type: 'object',
10
+ propertyNames: {
11
+ minLength: 1,
12
+ pattern: '^(?:[^."]+|"(?:[^"]|"")+")(?:\\.(?:[^."]+|"(?:[^"]|"")+")){0,2}$'
13
+ },
14
+ additionalProperties: {
15
+ type: 'object',
16
+ properties: {
17
+ mongodb_filter_expression: {
18
+ anyOf: [{ $ref: '#/definitions/mongodb_filter_expression' }, { const: 'disabled' }]
19
+ }
20
+ },
21
+ additionalProperties: false
22
+ }
23
+ };
24
+ }
25
+ /**
26
+ * Parse a source-table key using the same right-to-left qualification as Sync Stream table references.
27
+ */
28
+ export function parseSourceTableConfigKey(name) {
29
+ const parts = parseQualifiedIdentifiers(name);
30
+ if (parts.length > 3)
31
+ throw new Error(SOURCE_TABLE_NAME_ERROR);
32
+ if (parts.length == 1)
33
+ return new ImplicitSchemaTablePattern(null, parts[0]);
34
+ if (parts.length == 2)
35
+ return new TablePattern(parts[0], parts[1], DEFAULT_TAG);
36
+ return new TablePattern(parts[1], parts[2], parts[0]);
37
+ }
38
+ /**
39
+ * Find authored keys that identify the same pattern after SQL identifier normalization.
40
+ * Invalid keys are left to the source-table schema validator.
41
+ */
42
+ export function findDuplicateSourceTableConfigKeys(keys) {
43
+ const seen = new Map();
44
+ const duplicates = [];
45
+ for (const key of keys) {
46
+ let pattern;
47
+ try {
48
+ pattern = parseSourceTableConfigKey(key);
49
+ }
50
+ catch {
51
+ continue;
52
+ }
53
+ const identity = JSON.stringify([pattern.connectionTag, pattern.schema, pattern.tablePattern]);
54
+ const previous = seen.get(identity);
55
+ if (previous !== undefined) {
56
+ duplicates.push([previous, key]);
57
+ }
58
+ else {
59
+ seen.set(identity, key);
60
+ }
61
+ }
62
+ return duplicates;
63
+ }
64
+ /**
65
+ * Split a source-table key on unquoted dots and normalize each identifier.
66
+ */
67
+ function parseQualifiedIdentifiers(name) {
68
+ /*
69
+ * Match <table>, <database>.<table>, or <connection>.<database>.<table> from right to left.
70
+ * Each component is either unquoted without dots or quotes, or quoted to allow dots and escaped quotes within it.
71
+ * A quote inside a quoted component is represented by two consecutive quotes, following SQL identifier syntax.
72
+ */
73
+ const qualifiedIdentifier = /^(?:(?:(?<connection>"(?:[^"]|"")+"|[^."]+)\.)?(?<database>"(?:[^"]|"")+"|[^."]+)\.)?(?<table>"(?:[^"]|"")+"|[^."]+)$/;
74
+ const match = qualifiedIdentifier.exec(name);
75
+ if (match == null)
76
+ throw new Error(SOURCE_TABLE_NAME_ERROR);
77
+ // Nesting the optional groups aligns one-, two-, and three-part names from the right.
78
+ return [match.groups.connection, match.groups.database, match.groups.table]
79
+ .filter((part) => part != null)
80
+ .map((part) => {
81
+ // Quoted names preserve case and may contain dots or escaped quotes. Unquoted names follow SQL case folding.
82
+ return part.startsWith('"') ? part.slice(1, -1).replaceAll('""', '"') : part.toLowerCase();
83
+ });
84
+ }
85
+ /**
86
+ * Validate and copy source-table options while preserving declaration order.
87
+ */
88
+ export function normalizeSourceTableConfig(value) {
89
+ if (value === undefined)
90
+ return {};
91
+ assertObject(value, 'Source table configuration must be a JSON object.');
92
+ const duplicate = findDuplicateSourceTableConfigKeys(Object.keys(value))[0];
93
+ if (duplicate != null) {
94
+ const [previous, key] = duplicate;
95
+ throw new Error(`Source-table keys ${JSON.stringify(previous)} and ${JSON.stringify(key)} resolve to the same pattern.`);
96
+ }
97
+ return Object.fromEntries(Object.entries(value).map(([table, options]) => {
98
+ if (!table)
99
+ throw new Error('A source table name must not be empty.');
100
+ const pattern = parseSourceTableConfigKey(table);
101
+ assertObject(options, 'Source table options must be JSON objects.');
102
+ for (const key of Object.keys(options)) {
103
+ if (key !== 'mongodb_filter_expression')
104
+ throw new Error(`Unknown source-table option: ${key}`);
105
+ }
106
+ const filter = options.mongodb_filter_expression;
107
+ if (filter !== undefined && filter !== 'disabled') {
108
+ assertMongoFilterConnection(pattern);
109
+ const result = MONGO_FILTER_VALIDATOR.safeParse(filter);
110
+ if (!result.success) {
111
+ throw new Error(`Invalid MongoDB pre-filtering expression for source table ${JSON.stringify(table)}: ${result.error.message}`);
112
+ }
113
+ }
114
+ return [table, structuredClone(options)];
115
+ }));
116
+ }
117
+ /**
118
+ * Reject filter connection tags that query hydration cannot honor.
119
+ */
120
+ export function assertMongoFilterConnection(pattern) {
121
+ // FIXME: Revisit when multiple connections are supported and query hydration honors explicit tags.
122
+ // Until then, accepting another tag can silently omit its filter while the query reads the default connection.
123
+ const tag = pattern.connectionTag ?? DEFAULT_TAG;
124
+ if (tag !== DEFAULT_TAG) {
125
+ throw new Error(`MongoDB replication pre-filtering only supports the "${DEFAULT_TAG}" connection; connection ${JSON.stringify(tag)} is not supported.`);
126
+ }
127
+ }
128
+ /**
129
+ * Conservative equality: declaration order and expression order are significant.
130
+ */
131
+ export function sourceTableConfigsEqual(left, right) {
132
+ try {
133
+ return JSON.stringify(normalizeSourceTableConfig(left)) == JSON.stringify(normalizeSourceTableConfig(right));
134
+ }
135
+ catch {
136
+ // Saved options may no longer validate after an upgrade. Do not reuse their replication stream.
137
+ return false;
138
+ }
139
+ }
140
+ function assertObject(value, message) {
141
+ if (value == null || typeof value != 'object' || Array.isArray(value))
142
+ throw new Error(message);
143
+ }
144
+ /**
145
+ * Configured expressions require execution support even when current collections opt out.
146
+ */
147
+ export function hasMongoFilterExpressions(config, connectionTag) {
148
+ return Object.entries(config).some(([name, options]) => (parseSourceTableConfigKey(name).connectionTag ?? DEFAULT_TAG) === connectionTag &&
149
+ options?.mongodb_filter_expression !== undefined &&
150
+ options.mongodb_filter_expression !== 'disabled');
151
+ }
152
+ //# sourceMappingURL=SourceTableConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SourceTableConfig.js","sourceRoot":"","sources":["../src/SourceTableConfig.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,16 @@ import { BucketPriority } from './BucketDescription.js';
2
2
  import { SyncConfig, SyncConfigWithErrors } from './SyncConfig.js';
3
3
  import { YamlError } from './errors.js';
4
4
  import { RequestParameters, SourceSchema, SqliteJsonRow } from './types.js';
5
+ /**
6
+ * Source connection types keyed by connection tag for sync config validation.
7
+ */
8
+ export type SourceConnectionMap = Record<string, {
9
+ type: string;
10
+ }>;
5
11
  export interface SyncRulesOptions {
12
+ /**
13
+ * Source database schema.
14
+ */
6
15
  schema?: SourceSchema;
7
16
  /**
8
17
  * The default schema to use when only a table name is specified.
@@ -10,6 +19,11 @@ export interface SyncRulesOptions {
10
19
  * 'public' for Postgres, default database for MongoDB/MySQL.
11
20
  */
12
21
  defaultSchema: string;
22
+ /**
23
+ * Source connection types keyed by connection tag. When omitted, source-specific options report warnings
24
+ * if their connection type cannot be checked.
25
+ */
26
+ connections?: SourceConnectionMap;
13
27
  throwOnError?: boolean;
14
28
  }
15
29
  export interface RequestedStream {
@@ -23,7 +23,8 @@ export class SqlSyncRules extends SyncConfig {
23
23
  const parser = new SyncConfigFromYaml({
24
24
  throwOnError: options.throwOnError ?? true,
25
25
  schema: options.schema,
26
- defaultSchema: options.defaultSchema
26
+ defaultSchema: options.defaultSchema,
27
+ connections: options.connections
27
28
  }, yaml);
28
29
  return parser.read();
29
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SqlSyncRules.js","sourceRoot":"","sources":["../src/SqlSyncRules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAwDpD,MAAM,OAAO,YAAa,SAAQ,UAAU;IAC1C,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,OAAyB;QACrD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC3C,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,eAAe,EAAE,CAAC;gBACjC,OAAO,CAAC,CAAC,MAAM,CAAC;YAClB,CAAC;iBAAM,IAAI,CAAC,YAAY,SAAS,EAAE,CAAC;gBAClC,OAAO,CAAC,CAAC,CAAC,CAAC;YACb,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,OAAyB;QACrD,MAAM,MAAM,GAAG,IAAI,kBAAkB,CACnC;YACE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;YAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,EACD,IAAI,CACL,CAAC;QAEF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;CACF"}
1
+ {"version":3,"file":"SqlSyncRules.js","sourceRoot":"","sources":["../src/SqlSyncRules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAuEpD,MAAM,OAAO,YAAa,SAAQ,UAAU;IAC1C,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,OAAyB;QACrD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC3C,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,eAAe,EAAE,CAAC;gBACjC,OAAO,CAAC,CAAC,MAAM,CAAC;YAClB,CAAC;iBAAM,IAAI,CAAC,YAAY,SAAS,EAAE,CAAC;gBAClC,OAAO,CAAC,CAAC,CAAC,CAAC;YACb,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,OAAyB;QACrD,MAAM,MAAM,GAAG,IAAI,kBAAkB,CACnC;YACE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;YAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,EACD,IAAI,CACL,CAAC;QAEF,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;CACF"}
@@ -16,7 +16,6 @@ export interface ValidatedStorageVersion {
16
16
  stable: boolean;
17
17
  }
18
18
  export declare const STORAGE_VERSIONS: Map<number, ValidatedStorageVersion>;
19
- export declare const DEFAULT_STORAGE_VERSION: ValidatedStorageVersion;
20
19
  /**
21
20
  * Parse a storage version.
22
21
  *
@@ -4,7 +4,6 @@ export const STORAGE_VERSIONS = new Map([
4
4
  [3, { version: 3, stable: false }],
5
5
  [4, { version: 4, stable: true }]
6
6
  ]);
7
- export const DEFAULT_STORAGE_VERSION = STORAGE_VERSIONS.get(2);
8
7
  /**
9
8
  * Parse a storage version.
10
9
  *
@@ -1 +1 @@
1
- {"version":3,"file":"StorageVersion.js","sourceRoot":"","sources":["../src/StorageVersion.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAkC;IACvE,mFAAmF;IACnF,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;CAClC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;AAEhE;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,OAAO,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"StorageVersion.js","sourceRoot":"","sources":["../src/StorageVersion.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAkC;IACvE,mFAAmF;IACnF,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAClC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;CAClC,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,OAAO,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC"}
@@ -14,7 +14,9 @@ export declare abstract class SyncConfig {
14
14
  bucketDataSources: BucketDataSource[];
15
15
  bucketParameterLookupSources: ParameterIndexLookupCreator[];
16
16
  bucketSources: BucketSource[];
17
- /** Prepared event definitions. Executable event descriptors only exist on {@link HydratedSyncConfig}. */
17
+ /**
18
+ * Prepared event definitions. Executable event descriptors only exist on {@link HydratedSyncConfig}.
19
+ */
18
20
  eventDefinitions: EventDefinition[];
19
21
  compatibility: CompatibilityContext;
20
22
  /**
@@ -9,7 +9,9 @@ export class SyncConfig {
9
9
  bucketDataSources = [];
10
10
  bucketParameterLookupSources = [];
11
11
  bucketSources = [];
12
- /** Prepared event definitions. Executable event descriptors only exist on {@link HydratedSyncConfig}. */
12
+ /**
13
+ * Prepared event definitions. Executable event descriptors only exist on {@link HydratedSyncConfig}.
14
+ */
13
15
  eventDefinitions = [];
14
16
  compatibility = CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY;
15
17
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"SyncConfig.js","sourceRoot":"","sources":["../src/SyncConfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SyncConfig.js","sourceRoot":"","sources":["../src/SyncConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ErrorLocation } from './errors.js';
2
+ /**
3
+ * A decoded config path, for example `['config', 'source_table_options', 'orders', 'option']`.
4
+ */
5
+ export type SyncConfigSourcePath = readonly (string | number)[];
6
+ export type SyncConfigSourceLocationTarget = 'key' | 'value';
7
+ export interface SyncConfigSourceLocationResolver {
8
+ /**
9
+ * Resolve a field to its source span, falling back to its nearest existing ancestor.
10
+ */
11
+ getLocation(path: SyncConfigSourcePath, target?: SyncConfigSourceLocationTarget): ErrorLocation | undefined;
12
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SyncConfigDiagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncConfigDiagnostics.js","sourceRoot":"","sources":["../src/SyncConfigDiagnostics.ts"],"names":[],"mappings":""}
@@ -14,7 +14,7 @@ export declare class ImplicitSchemaTablePattern implements Equatable {
14
14
  readonly tablePattern: string;
15
15
  readonly connectionTag: string | null;
16
16
  readonly schema: string | null;
17
- constructor(schema: string | null, tablePattern: string);
17
+ constructor(schema: string | null, tablePattern: string, connectionTag?: string | null);
18
18
  get isWildcard(): boolean;
19
19
  get isSchemaWildcard(): boolean;
20
20
  get name(): string;
@@ -28,7 +28,7 @@ export declare class ImplicitSchemaTablePattern implements Equatable {
28
28
  export declare class TablePattern extends ImplicitSchemaTablePattern {
29
29
  readonly connectionTag: string;
30
30
  readonly schema: string;
31
- constructor(schema: string, tablePattern: string);
31
+ constructor(schema: string, tablePattern: string, connectionTag?: string);
32
32
  /**
33
33
  * Unique key for this table pattern, used for caching.
34
34
  *
@@ -12,13 +12,19 @@ export class ImplicitSchemaTablePattern {
12
12
  tablePattern;
13
13
  connectionTag;
14
14
  schema;
15
- constructor(schema, tablePattern) {
15
+ constructor(schema, tablePattern, connectionTag) {
16
16
  this.tablePattern = tablePattern;
17
- if (schema) {
17
+ if (connectionTag != null) {
18
+ // A connection tag identifies a database on that connection, so a schema must be provided with it.
19
+ if (schema == null)
20
+ throw new Error('A schema is required when a connection tag is set.');
21
+ this.connectionTag = connectionTag;
22
+ this.schema = schema;
23
+ }
24
+ else if (schema) {
18
25
  const splitSchema = schema.split('.');
19
- if (splitSchema.length > 2) {
26
+ if (splitSchema.length > 2)
20
27
  throw new Error(`Invalid schema: ${schema}`);
21
- }
22
28
  if (splitSchema.length == 2) {
23
29
  this.connectionTag = splitSchema[0];
24
30
  this.schema = splitSchema[1];
@@ -46,7 +52,11 @@ export class ImplicitSchemaTablePattern {
46
52
  return this.tablePattern;
47
53
  }
48
54
  toTablePattern(defaultSchema) {
49
- return new TablePattern(this.schema ?? defaultSchema, this.tablePattern);
55
+ // Preserve existing hydration behavior: explicit connection tags are stored but resolve to the default tag.
56
+ // FIXME: When multiple connections are supported, honor explicit tags consistently across SQL, source-table options,
57
+ // and hydration while preserving the interpretation of existing saved plans.
58
+ // Pass a tag for explicit schemas so quoted dots stay literal; undefined lets runtime defaults retain qualification.
59
+ return new TablePattern(this.schema ?? defaultSchema, this.tablePattern, this.schema == null ? undefined : DEFAULT_TAG);
50
60
  }
51
61
  buildHash(hasher) {
52
62
  if (this.connectionTag) {
@@ -68,8 +78,8 @@ export class ImplicitSchemaTablePattern {
68
78
  * Some pattern matching SourceTables.
69
79
  */
70
80
  export class TablePattern extends ImplicitSchemaTablePattern {
71
- constructor(schema, tablePattern) {
72
- super(schema, tablePattern);
81
+ constructor(schema, tablePattern, connectionTag) {
82
+ super(schema, tablePattern, connectionTag);
73
83
  }
74
84
  /**
75
85
  * Unique key for this table pattern, used for caching.