@powersync/service-sync-rules 0.0.0-dev-20260909133214 → 0.0.0-dev-20261005112123

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 (120) 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 +6 -3
  5. package/dist/HydratedSyncConfig.js.map +1 -1
  6. package/dist/SourceTableConfig.d.ts +33 -0
  7. package/dist/SourceTableConfig.js +135 -0
  8. package/dist/SourceTableConfig.js.map +1 -0
  9. package/dist/SqlSyncRules.d.ts +15 -0
  10. package/dist/SqlSyncRules.js +3 -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 +8 -1
  16. package/dist/SyncConfig.js +7 -1
  17. package/dist/SyncConfig.js.map +1 -1
  18. package/dist/SyncConfigParserHooks.d.ts +103 -0
  19. package/dist/SyncConfigParserHooks.js +11 -0
  20. package/dist/SyncConfigParserHooks.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 +14 -1
  40. package/dist/from_yaml.js +88 -19
  41. package/dist/from_yaml.js.map +1 -1
  42. package/dist/index.d.ts +3 -0
  43. package/dist/index.js +3 -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 +11 -0
  49. package/dist/json_schema.js +28 -6
  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 +4 -1
  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/sync_plan/evaluator/bucket_source.js +1 -1
  98. package/dist/sync_plan/evaluator/index.js +1 -0
  99. package/dist/sync_plan/evaluator/index.js.map +1 -1
  100. package/dist/sync_plan/evaluator/parameter_evaluator.d.ts +1 -1
  101. package/dist/sync_plan/evaluator/parameter_evaluator.js +1 -1
  102. package/dist/sync_plan/plan.d.ts +7 -1
  103. package/dist/sync_plan/schema_inference.d.ts +1 -1
  104. package/dist/sync_plan/schema_inference.js +1 -1
  105. package/dist/sync_plan/serialize.d.ts +18 -2
  106. package/dist/sync_plan/serialize.js +36 -8
  107. package/dist/sync_plan/serialize.js.map +1 -1
  108. package/dist/types.d.ts +1 -8
  109. package/dist/types.js +8 -13
  110. package/dist/types.js.map +1 -1
  111. package/dist/utils.d.ts +1 -0
  112. package/dist/utils.js +43 -12
  113. package/dist/utils.js.map +1 -1
  114. package/dist/yaml_source_locations.d.ts +14 -0
  115. package/dist/yaml_source_locations.js +117 -0
  116. package/dist/yaml_source_locations.js.map +1 -0
  117. package/dist/yaml_validation.js.map +1 -1
  118. package/package.json +6 -2
  119. package/schema/sync_config.json +253 -0
  120. package/schema/sync_rules.json +19 -3
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
  */
@@ -12,6 +12,7 @@ import { applyRowContext, uniqueBy } from './utils.js';
12
12
  * The persisted state specifically affects bucket names, as well as V3+ storage structure.
13
13
  */
14
14
  export class HydratedSyncConfig {
15
+ sourceTableConfig;
15
16
  /**
16
17
  * These are used by queriers, and do not support merging across multiple SyncConfigs.
17
18
  */
@@ -54,8 +55,10 @@ export class HydratedSyncConfig {
54
55
  const hydrationState = params.createParams.hydrationState;
55
56
  const definitions = params.definitions;
56
57
  if (definitions.length == 0) {
57
- throw new Error('HydratedSyncRules requires at least one SyncConfig definition');
58
+ throw new Error('HydratedSyncConfig requires at least one SyncConfig definition');
58
59
  }
60
+ // The service validates that definitions sharing a source reader have compatible source-table options.
61
+ this.sourceTableConfig = definitions[0].sourceTableConfig;
59
62
  this.sourceDefinitions = [...definitions];
60
63
  this.compatibility = assertSharedCompatibility(this.sourceDefinitions);
61
64
  this.hydrationInput = {
@@ -199,7 +202,7 @@ export class HydratedSyncConfig {
199
202
  assertSingleSourceDefinition(debugName) {
200
203
  // We may split the types in the future to enforce this on a type level instead of runtime level
201
204
  if (this.sourceDefinitions.length != 1) {
202
- throw new Error(`${debugName} is not supported for HydratedSyncRules with multiple SyncConfigs`);
205
+ throw new Error(`${debugName} is not supported for HydratedSyncConfig with multiple SyncConfigs`);
203
206
  }
204
207
  }
205
208
  }
@@ -210,7 +213,7 @@ function assertSharedCompatibility(definitions) {
210
213
  }
211
214
  for (const definition of definitions) {
212
215
  if (!definition.compatibility.equals(compatibility)) {
213
- throw new Error('All SyncConfigs in a HydratedSyncRules instance must use the same CompatibilityContext');
216
+ throw new Error('All SyncConfigs in a HydratedSyncConfig instance must use the same CompatibilityContext');
214
217
  }
215
218
  }
216
219
  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,33 @@
1
+ import * as t from 'ts-codec';
2
+ import type { JsonObject } from './json.js';
3
+ import { ImplicitSchemaTablePattern } from './TablePattern.js';
4
+ /**
5
+ * Options for one entry in `config.source_table_options`. Core has no source-specific options.
6
+ */
7
+ export declare const SOURCE_TABLE_CONFIG: t.ObjectCodec<{}>;
8
+ export type SourceTableConfig = t.Decoded<typeof SOURCE_TABLE_CONFIG>;
9
+ /**
10
+ * Source-table options keyed by an authored table pattern.
11
+ */
12
+ export type SourceTableConfigMap<TTableConfig extends SourceTableConfig = SourceTableConfig> = Readonly<Partial<Record<string, TTableConfig>>>;
13
+ /**
14
+ * Generate the common source-table map while making the empty base option explicit.
15
+ */
16
+ export declare function createSourceTableConfigSchema(): JsonObject;
17
+ /**
18
+ * Parse a source-table key using the same right-to-left qualification as Sync Stream table references.
19
+ */
20
+ export declare function parseSourceTableConfigKey(name: string): ImplicitSchemaTablePattern;
21
+ /**
22
+ * Find authored keys that identify the same pattern after SQL identifier normalization.
23
+ * Invalid keys are left to the source-table schema validator.
24
+ */
25
+ export declare function findDuplicateSourceTableConfigKeys(keys: Iterable<string>): Array<[string, string]>;
26
+ /**
27
+ * Validate and copy portable source-table options while preserving declaration order.
28
+ */
29
+ export declare function normalizeSourceTableConfig(value: unknown): SourceTableConfigMap;
30
+ /**
31
+ * Conservative equality: declaration order and expression order are significant.
32
+ */
33
+ export declare function sourceTableConfigsEqual(left: SourceTableConfigMap, right: SourceTableConfigMap): boolean;
@@ -0,0 +1,135 @@
1
+ import * as t from 'ts-codec';
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
+ * Options for one entry in `config.source_table_options`. Core has no source-specific options.
6
+ */
7
+ export const SOURCE_TABLE_CONFIG = t.object({});
8
+ /**
9
+ * Generate the common source-table map while making the empty base option explicit.
10
+ */
11
+ export function createSourceTableConfigSchema() {
12
+ return {
13
+ type: 'object',
14
+ propertyNames: {
15
+ minLength: 1,
16
+ pattern: '^(?:[^."]+|"(?:[^"]|"")+")(?:\\.(?:[^."]+|"(?:[^"]|"")+")){0,2}$',
17
+ patternErrorMessage: 'Use <table>, <database>.<table>, or <connection>.<database>.<table>. Double-quote names containing dots or quotes.'
18
+ },
19
+ additionalProperties: {
20
+ type: 'object',
21
+ properties: {},
22
+ additionalProperties: false
23
+ }
24
+ };
25
+ }
26
+ /**
27
+ * Parse a source-table key using the same right-to-left qualification as Sync Stream table references.
28
+ */
29
+ export function parseSourceTableConfigKey(name) {
30
+ const parts = parseQualifiedIdentifiers(name);
31
+ if (parts.length > 3)
32
+ throw new Error(SOURCE_TABLE_NAME_ERROR);
33
+ if (parts.length == 1)
34
+ return new ImplicitSchemaTablePattern(null, parts[0]);
35
+ if (parts.length == 2)
36
+ return new TablePattern(parts[0], parts[1], DEFAULT_TAG);
37
+ return new TablePattern(parts[1], parts[2], parts[0]);
38
+ }
39
+ /**
40
+ * Find authored keys that identify the same pattern after SQL identifier normalization.
41
+ * Invalid keys are left to the source-table schema validator.
42
+ */
43
+ export function findDuplicateSourceTableConfigKeys(keys) {
44
+ const seen = new Map();
45
+ const duplicates = [];
46
+ for (const key of keys) {
47
+ let pattern;
48
+ try {
49
+ pattern = parseSourceTableConfigKey(key);
50
+ }
51
+ catch {
52
+ continue;
53
+ }
54
+ const identity = JSON.stringify([pattern.connectionTag, pattern.schema, pattern.tablePattern]);
55
+ const previous = seen.get(identity);
56
+ if (previous !== undefined) {
57
+ duplicates.push([previous, key]);
58
+ }
59
+ else {
60
+ seen.set(identity, key);
61
+ }
62
+ }
63
+ return duplicates;
64
+ }
65
+ /**
66
+ * Split a source-table key on unquoted dots and normalize each identifier.
67
+ */
68
+ function parseQualifiedIdentifiers(name) {
69
+ /*
70
+ * Match <table>, <database>.<table>, or <connection>.<database>.<table> from right to left.
71
+ * Each component is either unquoted without dots or quotes, or quoted to allow dots and escaped quotes within it.
72
+ * A quote inside a quoted component is represented by two consecutive quotes, following SQL identifier syntax.
73
+ */
74
+ const qualifiedIdentifier = /^(?:(?:(?<connection>"(?:[^"]|"")+"|[^."]+)\.)?(?<database>"(?:[^"]|"")+"|[^."]+)\.)?(?<table>"(?:[^"]|"")+"|[^."]+)$/;
75
+ const match = qualifiedIdentifier.exec(name);
76
+ if (match == null)
77
+ throw new Error(SOURCE_TABLE_NAME_ERROR);
78
+ // Nesting the optional groups aligns one-, two-, and three-part names from the right.
79
+ return [match.groups.connection, match.groups.database, match.groups.table]
80
+ .filter((part) => part != null)
81
+ .map((part) => {
82
+ // Quoted names preserve case and may contain dots or escaped quotes. Unquoted names follow SQL case folding.
83
+ return part.startsWith('"') ? part.slice(1, -1).replaceAll('""', '"') : part.toLowerCase();
84
+ });
85
+ }
86
+ /**
87
+ * Validate and copy portable source-table options while preserving declaration order.
88
+ */
89
+ export function normalizeSourceTableConfig(value) {
90
+ if (value === undefined)
91
+ return {};
92
+ assertJsonObject(value, 'Source table configuration must be a JSON object.');
93
+ const duplicate = findDuplicateSourceTableConfigKeys(Object.keys(value))[0];
94
+ if (duplicate != null) {
95
+ const [previous, key] = duplicate;
96
+ throw new Error(`Source-table keys ${JSON.stringify(previous)} and ${JSON.stringify(key)} resolve to the same pattern.`);
97
+ }
98
+ return Object.fromEntries(Object.entries(value).map(([table, options]) => {
99
+ if (!table)
100
+ throw new Error('A source table name must not be empty.');
101
+ parseSourceTableConfigKey(table);
102
+ assertJsonObject(options, 'Source table options must be JSON objects.');
103
+ return [table, structuredClone(options)];
104
+ }));
105
+ }
106
+ /**
107
+ * Conservative equality: declaration order and expression order are significant.
108
+ */
109
+ export function sourceTableConfigsEqual(left, right) {
110
+ return JSON.stringify(normalizeSourceTableConfig(left)) == JSON.stringify(normalizeSourceTableConfig(right));
111
+ }
112
+ function assertJsonObject(value, message) {
113
+ if (value == null || typeof value != 'object' || Array.isArray(value))
114
+ throw new Error(message);
115
+ assertJsonValue(value, new Set());
116
+ }
117
+ function assertJsonValue(value, parents) {
118
+ if (value === null || typeof value == 'string' || typeof value == 'boolean')
119
+ return;
120
+ if (typeof value == 'number' && Number.isFinite(value))
121
+ return;
122
+ if (typeof value != 'object' || parents.has(value)) {
123
+ throw new Error('Source table configuration must contain finite, acyclic JSON values.');
124
+ }
125
+ if (!Array.isArray(value) &&
126
+ Object.getPrototypeOf(value) !== Object.prototype &&
127
+ Object.getPrototypeOf(value) !== null) {
128
+ throw new Error('Source table configuration must contain plain JSON objects.');
129
+ }
130
+ parents.add(value);
131
+ for (const child of Object.values(value))
132
+ assertJsonValue(child, parents);
133
+ parents.delete(value);
134
+ }
135
+ //# sourceMappingURL=SourceTableConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SourceTableConfig.js","sourceRoot":"","sources":["../src/SourceTableConfig.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,23 @@
1
1
  import { BucketPriority } from './BucketDescription.js';
2
2
  import { SyncConfig, SyncConfigWithErrors } from './SyncConfig.js';
3
+ import type { AdditionalSyncConfigParser } from './SyncConfigParserHooks.js';
3
4
  import { YamlError } from './errors.js';
5
+ import type { SyncRulesSchemaValidator } from './json_schema.js';
4
6
  import { RequestParameters, SourceSchema, SqliteJsonRow } from './types.js';
5
7
  export interface SyncRulesOptions {
8
+ /**
9
+ * Additional parsing hooks. The service supplies its registered hooks; standalone callers and extension tests
10
+ * can supply hooks directly. Defaults to no additional hooks.
11
+ */
12
+ parsers?: readonly AdditionalSyncConfigParser[];
13
+ /**
14
+ * Compiled schema validator supplied by the service parser. Must match the supplied parsers.
15
+ * Standalone callers, including tests, normally omit this to compose the schema from parsers.
16
+ */
17
+ schemaValidator?: SyncRulesSchemaValidator;
18
+ /**
19
+ * Source database schema.
20
+ */
6
21
  schema?: SourceSchema;
7
22
  /**
8
23
  * The default schema to use when only a table name is specified.
@@ -23,7 +23,9 @@ 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
+ parsers: options.parsers ?? [],
28
+ schemaValidator: options.schemaValidator
27
29
  }, yaml);
28
30
  return parser.read();
29
31
  }
@@ -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;AAEnE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAwEpD,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,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,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"}
@@ -3,6 +3,7 @@ import { CompatibilityContext } from './compatibility.js';
3
3
  import { YamlError } from './errors.js';
4
4
  import { EventDefinition } from './events/EventDescriptor.js';
5
5
  import { HydratedSyncConfig } from './HydratedSyncConfig.js';
6
+ import { SourceTableConfigMap } from './SourceTableConfig.js';
6
7
  import { SourceTableRef } from './SourceTableRef.js';
7
8
  import { TablePattern } from './TablePattern.js';
8
9
  import { SqliteInputValue, SqliteRow, SqliteValue } from './types.js';
@@ -11,10 +12,16 @@ import { SqliteInputValue, SqliteRow, SqliteValue } from './types.js';
11
12
  * resolve buckets for connections).
12
13
  */
13
14
  export declare abstract class SyncConfig {
15
+ /**
16
+ * Module-specific source options keyed by authored table pattern.
17
+ */
18
+ sourceTableConfig: SourceTableConfigMap;
14
19
  bucketDataSources: BucketDataSource[];
15
20
  bucketParameterLookupSources: ParameterIndexLookupCreator[];
16
21
  bucketSources: BucketSource[];
17
- /** Prepared event definitions. Executable event descriptors only exist on {@link HydratedSyncConfig}. */
22
+ /**
23
+ * Prepared event definitions. Executable event descriptors only exist on {@link HydratedSyncConfig}.
24
+ */
18
25
  eventDefinitions: EventDefinition[];
19
26
  compatibility: CompatibilityContext;
20
27
  /**
@@ -6,10 +6,16 @@ import { applyRowContext } from './utils.js';
6
6
  * resolve buckets for connections).
7
7
  */
8
8
  export class SyncConfig {
9
+ /**
10
+ * Module-specific source options keyed by authored table pattern.
11
+ */
12
+ sourceTableConfig = {};
9
13
  bucketDataSources = [];
10
14
  bucketParameterLookupSources = [];
11
15
  bucketSources = [];
12
- /** Prepared event definitions. Executable event descriptors only exist on {@link HydratedSyncConfig}. */
16
+ /**
17
+ * Prepared event definitions. Executable event descriptors only exist on {@link HydratedSyncConfig}.
18
+ */
13
19
  eventDefinitions = [];
14
20
  compatibility = CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY;
15
21
  /**
@@ -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,103 @@
1
+ import type { JsonObject } from './json.js';
2
+ import type { SyncConfig } from './SyncConfig.js';
3
+ import type { TablePattern } from './TablePattern.js';
4
+ /**
5
+ * A decoded config path, for example `['config', 'source_table_options', 'orders', 'option']`.
6
+ */
7
+ export type SyncConfigSourcePath = readonly (string | number)[];
8
+ export type SyncConfigSourceLocationTarget = 'key' | 'value';
9
+ /**
10
+ * Offsets into the authored config, compatible with locations returned by service diagnostics.
11
+ */
12
+ export interface SyncConfigSourceSpan {
13
+ start_offset: number;
14
+ end_offset: number;
15
+ }
16
+ /**
17
+ * A parser warning or failure, optionally pointing to the relevant config key or value.
18
+ */
19
+ export interface SyncConfigDiagnostic {
20
+ level: 'warning' | 'fatal';
21
+ message: string;
22
+ location?: SyncConfigSourceSpan;
23
+ }
24
+ export interface SyncConfigSourceLocationResolver {
25
+ /**
26
+ * Resolve a field to its source span, falling back to its nearest existing ancestor.
27
+ */
28
+ getLocation(path: SyncConfigSourcePath, target?: SyncConfigSourceLocationTarget): SyncConfigSourceSpan | undefined;
29
+ }
30
+ /**
31
+ * Context for parsing input sync config.
32
+ */
33
+ export interface SyncConfigParserContext {
34
+ readonly defaultSchema: string;
35
+ /**
36
+ * Candidate being assembled. With throwOnError: false, a partial config may be returned with fatal diagnostics.
37
+ * Store options on the appropriate config fields.
38
+ */
39
+ parsedConfig: SyncConfig;
40
+ /**
41
+ * Sources selected by SQL. Additional parsers may inspect these, but cannot add replication sources.
42
+ */
43
+ sourceTables: readonly TablePattern[];
44
+ /**
45
+ * Utility helpers for determining source locations.
46
+ */
47
+ sourceLocations: SyncConfigSourceLocationResolver;
48
+ /**
49
+ * Report a diagnostic found while parsing.
50
+ */
51
+ reportDiagnostic(diagnostic: SyncConfigDiagnostic): void;
52
+ }
53
+ /**
54
+ * Context for validating persisted sync config.
55
+ */
56
+ export interface PersistedSyncConfigParserContext {
57
+ /**
58
+ * Default schema used to resolve unqualified table names during validation.
59
+ * Some callers supply a placeholder; do not persist names qualified using this value.
60
+ */
61
+ readonly defaultSchema: string;
62
+ /**
63
+ * Report a warning or fatal error found while validating the persisted config.
64
+ * Include a config source location when available. Fatal errors prevent the config from loading.
65
+ */
66
+ reportDiagnostic(diagnostic: SyncConfigDiagnostic): void;
67
+ }
68
+ /**
69
+ * Additional deterministic parsing/validation, registered per service rather than globally or by source type.
70
+ * A hook identifies its own fields and leaves unrelated input alone. Source I/O belongs in source validation.
71
+ */
72
+ export interface AdditionalSyncConfigParser {
73
+ /**
74
+ * A unique ID for the parser. Persisted sync configs store these IDs to validate
75
+ * if modules which created the persisted config are present.
76
+ */
77
+ readonly id: string;
78
+ /**
79
+ * Mutates an isolated schema before parsing.
80
+ */
81
+ extendJsonSchema?(options: {
82
+ schema: JsonObject;
83
+ }): void;
84
+ /**
85
+ * `config` is decoded sync config. Everything else needed to parse it is supplied through `context`.
86
+ * Parse module-owned input into context.parsedConfig, including sourceTableConfig entries for this module.
87
+ * Core does not copy source-table options from the input or normalize the parser's output here.
88
+ * For a PrecompiledSyncConfig, add this parser's ID to parsedConfig.plan.moduleData with a null value
89
+ * when the config requires this module. The plan's keys determine which parsers must be present on reload.
90
+ */
91
+ parse(options: {
92
+ config: unknown;
93
+ context: SyncConfigParserContext;
94
+ }): void;
95
+ /**
96
+ * Validate saved config fields without reparsing their original config or requiring config source locations.
97
+ */
98
+ validatePersisted?(options: {
99
+ config: SyncConfig;
100
+ context: PersistedSyncConfigParserContext;
101
+ }): void;
102
+ }
103
+ export declare function validateAdditionalSyncConfigParsers(parsers: readonly AdditionalSyncConfigParser[]): void;