@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
@@ -1,9 +1,366 @@
1
1
  {
2
2
  "type": "object",
3
+ "definitions": {
4
+ "mongodb_filter_expression": {
5
+ "allOf": [
6
+ {
7
+ "$ref": "#/definitions/__schema0"
8
+ }
9
+ ]
10
+ },
11
+ "__schema0": {
12
+ "anyOf": [
13
+ {
14
+ "type": "object",
15
+ "properties": {
16
+ "$eq": {
17
+ "type": "array",
18
+ "items": [
19
+ {
20
+ "$ref": "#/definitions/__schema1"
21
+ },
22
+ {
23
+ "$ref": "#/definitions/__schema2"
24
+ }
25
+ ],
26
+ "additionalItems": false,
27
+ "minItems": 2,
28
+ "maxItems": 2,
29
+ "description": "Compare a source field with a scalar constant.",
30
+ "examples": [
31
+ [
32
+ "$$doc.status",
33
+ "active"
34
+ ]
35
+ ]
36
+ }
37
+ },
38
+ "required": [
39
+ "$eq"
40
+ ],
41
+ "additionalProperties": false
42
+ },
43
+ {
44
+ "type": "object",
45
+ "properties": {
46
+ "$in": {
47
+ "type": "array",
48
+ "items": [
49
+ {
50
+ "$ref": "#/definitions/__schema1"
51
+ },
52
+ {
53
+ "$ref": "#/definitions/__schema6"
54
+ }
55
+ ],
56
+ "additionalItems": false,
57
+ "minItems": 2,
58
+ "maxItems": 2,
59
+ "examples": [
60
+ [
61
+ "$$doc.status",
62
+ [
63
+ "pending",
64
+ "shipped"
65
+ ]
66
+ ]
67
+ ]
68
+ }
69
+ },
70
+ "required": [
71
+ "$in"
72
+ ],
73
+ "additionalProperties": false
74
+ },
75
+ {
76
+ "type": "object",
77
+ "properties": {
78
+ "$and": {
79
+ "minItems": 1,
80
+ "type": "array",
81
+ "items": {
82
+ "$ref": "#/definitions/mongodb_filter_expression"
83
+ },
84
+ "examples": [
85
+ [
86
+ {
87
+ "$eq": [
88
+ "$$doc.active",
89
+ true
90
+ ]
91
+ }
92
+ ]
93
+ ]
94
+ }
95
+ },
96
+ "required": [
97
+ "$and"
98
+ ],
99
+ "additionalProperties": false
100
+ },
101
+ {
102
+ "type": "object",
103
+ "properties": {
104
+ "$or": {
105
+ "minItems": 1,
106
+ "type": "array",
107
+ "items": {
108
+ "$ref": "#/definitions/mongodb_filter_expression"
109
+ },
110
+ "examples": [
111
+ [
112
+ {
113
+ "$eq": [
114
+ "$$doc.status",
115
+ "pending"
116
+ ]
117
+ },
118
+ {
119
+ "$eq": [
120
+ "$$doc.priority",
121
+ true
122
+ ]
123
+ }
124
+ ]
125
+ ]
126
+ }
127
+ },
128
+ "required": [
129
+ "$or"
130
+ ],
131
+ "additionalProperties": false
132
+ }
133
+ ]
134
+ },
135
+ "__schema1": {
136
+ "type": "string",
137
+ "pattern": "^\\$\\$doc(?:\\.(?![0-9]+(?:\\.|$))[^.$][^.]*)+$"
138
+ },
139
+ "__schema2": {
140
+ "anyOf": [
141
+ {
142
+ "type": "boolean"
143
+ },
144
+ {
145
+ "type": "number"
146
+ },
147
+ {
148
+ "type": "string",
149
+ "pattern": "^(?!\\$)"
150
+ },
151
+ {
152
+ "anyOf": [
153
+ {
154
+ "type": "object",
155
+ "properties": {
156
+ "$literal": {
157
+ "type": "string"
158
+ }
159
+ },
160
+ "required": [
161
+ "$literal"
162
+ ],
163
+ "additionalProperties": false
164
+ },
165
+ {
166
+ "type": "object",
167
+ "properties": {
168
+ "$oid": {
169
+ "type": "string",
170
+ "pattern": "^[0-9a-fA-F]{24}$"
171
+ }
172
+ },
173
+ "required": [
174
+ "$oid"
175
+ ],
176
+ "additionalProperties": false
177
+ },
178
+ {
179
+ "type": "object",
180
+ "properties": {
181
+ "$numberInt": {
182
+ "allOf": [
183
+ {
184
+ "$ref": "#/definitions/__schema3"
185
+ }
186
+ ]
187
+ }
188
+ },
189
+ "required": [
190
+ "$numberInt"
191
+ ],
192
+ "additionalProperties": false
193
+ },
194
+ {
195
+ "type": "object",
196
+ "properties": {
197
+ "$numberLong": {
198
+ "allOf": [
199
+ {
200
+ "$ref": "#/definitions/__schema3"
201
+ }
202
+ ]
203
+ }
204
+ },
205
+ "required": [
206
+ "$numberLong"
207
+ ],
208
+ "additionalProperties": false
209
+ },
210
+ {
211
+ "type": "object",
212
+ "properties": {
213
+ "$numberDouble": {
214
+ "type": "string",
215
+ "pattern": "^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$"
216
+ }
217
+ },
218
+ "required": [
219
+ "$numberDouble"
220
+ ],
221
+ "additionalProperties": false
222
+ },
223
+ {
224
+ "type": "object",
225
+ "properties": {
226
+ "$numberDecimal": {
227
+ "type": "string"
228
+ }
229
+ },
230
+ "required": [
231
+ "$numberDecimal"
232
+ ],
233
+ "additionalProperties": false
234
+ },
235
+ {
236
+ "type": "object",
237
+ "properties": {
238
+ "$uuid": {
239
+ "type": "string",
240
+ "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
241
+ }
242
+ },
243
+ "required": [
244
+ "$uuid"
245
+ ],
246
+ "additionalProperties": false
247
+ },
248
+ {
249
+ "type": "object",
250
+ "properties": {
251
+ "$date": {
252
+ "anyOf": [
253
+ {
254
+ "type": "string",
255
+ "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?(?:Z|[+-]\\d{2}:\\d{2})$"
256
+ },
257
+ {
258
+ "type": "object",
259
+ "properties": {
260
+ "$numberLong": {
261
+ "allOf": [
262
+ {
263
+ "$ref": "#/definitions/__schema3"
264
+ }
265
+ ]
266
+ }
267
+ },
268
+ "required": [
269
+ "$numberLong"
270
+ ],
271
+ "additionalProperties": false
272
+ }
273
+ ]
274
+ }
275
+ },
276
+ "required": [
277
+ "$date"
278
+ ],
279
+ "additionalProperties": false
280
+ },
281
+ {
282
+ "type": "object",
283
+ "properties": {
284
+ "$timestamp": {
285
+ "type": "object",
286
+ "properties": {
287
+ "t": {
288
+ "type": "integer",
289
+ "minimum": 0,
290
+ "maximum": 4294967295
291
+ },
292
+ "i": {
293
+ "type": "integer",
294
+ "minimum": 0,
295
+ "maximum": 4294967295
296
+ }
297
+ },
298
+ "required": [
299
+ "t",
300
+ "i"
301
+ ],
302
+ "additionalProperties": false
303
+ }
304
+ },
305
+ "required": [
306
+ "$timestamp"
307
+ ],
308
+ "additionalProperties": false
309
+ },
310
+ {
311
+ "type": "object",
312
+ "properties": {
313
+ "$binary": {
314
+ "type": "object",
315
+ "properties": {
316
+ "base64": {
317
+ "$ref": "#/definitions/__schema4"
318
+ },
319
+ "subType": {
320
+ "$ref": "#/definitions/__schema5"
321
+ }
322
+ },
323
+ "required": [
324
+ "base64",
325
+ "subType"
326
+ ],
327
+ "additionalProperties": false
328
+ }
329
+ },
330
+ "required": [
331
+ "$binary"
332
+ ],
333
+ "additionalProperties": false
334
+ }
335
+ ]
336
+ }
337
+ ]
338
+ },
339
+ "__schema3": {
340
+ "type": "string",
341
+ "pattern": "^-?(?:0|[1-9][0-9]*)$"
342
+ },
343
+ "__schema4": {
344
+ "type": "string",
345
+ "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/][AQgw]==|[A-Za-z0-9+/]{2}[AEIMQUYcgkosw048]=)?$"
346
+ },
347
+ "__schema5": {
348
+ "type": "string",
349
+ "pattern": "^[0-9a-fA-F]{2}$"
350
+ },
351
+ "__schema6": {
352
+ "minItems": 1,
353
+ "type": "array",
354
+ "items": {
355
+ "$ref": "#/definitions/__schema2"
356
+ }
357
+ }
358
+ },
3
359
  "properties": {
4
360
  "bucket_definitions": {
5
361
  "type": "object",
6
- "description": "List of bucket definitions",
362
+ "deprecated": true,
363
+ "description": "Deprecated: legacy Sync Rules bucket definitions. They will be removed in the next major version of the PowerSync Service. Use `streams:` (Sync Streams) instead: https://docs.powersync.com/sync/rules/migrate-to-sync-streams",
7
364
  "examples": [
8
365
  {
9
366
  "global": {
@@ -170,8 +527,31 @@
170
527
  },
171
528
  "config": {
172
529
  "type": "object",
173
- "description": "Config declaring the compatibility level used to parse these definitions.",
530
+ "description": "Compatibility, storage, and source-table settings for these definitions.",
174
531
  "properties": {
532
+ "source_table_options": {
533
+ "type": "object",
534
+ "propertyNames": {
535
+ "minLength": 1,
536
+ "pattern": "^(?:[^.\"]+|\"(?:[^\"]|\"\")+\")(?:\\.(?:[^.\"]+|\"(?:[^\"]|\"\")+\")){0,2}$"
537
+ },
538
+ "additionalProperties": {
539
+ "type": "object",
540
+ "properties": {
541
+ "mongodb_filter_expression": {
542
+ "anyOf": [
543
+ {
544
+ "$ref": "#/definitions/mongodb_filter_expression"
545
+ },
546
+ {
547
+ "const": "disabled"
548
+ }
549
+ ]
550
+ }
551
+ },
552
+ "additionalProperties": false
553
+ }
554
+ },
175
555
  "edition": {
176
556
  "type": "integer",
177
557
  "default": 1,
@@ -180,8 +560,7 @@
180
560
  },
181
561
  "storage_version": {
182
562
  "type": "integer",
183
- "description": "Storage version used by the storage database. By default, version 2 is used.",
184
- "default": 2,
563
+ "description": "Storage version used by the storage database.",
185
564
  "enum": [
186
565
  2,
187
566
  3,
@@ -216,6 +595,10 @@
216
595
  "unstable_sqlite_expression_engine": {
217
596
  "type": "boolean",
218
597
  "description": "Enabled by default starting from edition null: Experimental option to evaluate functions and operators in Sync Streams with SQLite instead of a JavaScript implementation."
598
+ },
599
+ "fixed_booleans_in_json": {
600
+ "type": "boolean",
601
+ "description": "Enabled by default starting from edition null: Consistently sync boolean values of a JSON object or array in source data as booleans (instead of integers 0/1)."
219
602
  }
220
603
  },
221
604
  "additionalProperties": false