@powersync/service-sync-rules 0.0.0-dev-20251208145829 → 0.0.0-dev-20260114113449

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
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/streams/stream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/streams/stream.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import { BucketInclusionReason } from '../BucketDescription.js';
2
2
  import { BucketParameterQuerier } from '../BucketParameterQuerier.js';
3
- import { SourceTableInterface } from '../SourceTableInterface.js';
4
- import { BucketIdTransformer, EvaluatedParametersResult, RequestParameters, SqliteJsonValue, SqliteRow, TableRow } from '../types.js';
3
+ import { BucketDataSource, BucketParameterQuerierSource, ParameterIndexLookupCreator } from '../BucketSource.js';
4
+ import { BucketDataScope } from '../HydrationState.js';
5
+ import { CreateSourceParams, ScopedParameterLookup } from '../index.js';
6
+ import { RequestParameters, SqliteJsonValue, TableRow } from '../types.js';
5
7
  import { BucketParameter, SubqueryEvaluator } from './parameter.js';
6
8
  import { SyncStream } from './stream.js';
7
9
  /**
@@ -44,10 +46,12 @@ export declare class StreamVariant {
44
46
  */
45
47
  requestFilters: RequestFilter[];
46
48
  constructor(id: number);
49
+ defaultBucketPrefix(streamName: string): string;
50
+ indexLookupCreators(): ParameterIndexLookupCreator[];
47
51
  /**
48
52
  * Given a row in the table this stream selects from, returns all ids of buckets to which that row belongs to.
49
53
  */
50
- bucketIdsForRow(streamName: string, options: TableRow, transformer: BucketIdTransformer): string[];
54
+ bucketParametersForRow(options: TableRow): string[];
51
55
  /**
52
56
  * Given a row to evaluate, returns all instantiations of parameters that satisfy conditions.
53
57
  *
@@ -62,23 +66,8 @@ export declare class StreamVariant {
62
66
  * @returns Each instantiation, with each sub-array having a value for a parameter.
63
67
  */
64
68
  private cartesianProductOfParameterInstantiations;
65
- get hasDynamicBucketQueries(): boolean;
66
- querier(stream: SyncStream, reason: BucketInclusionReason, params: RequestParameters, bucketIdTransformer: BucketIdTransformer): BucketParameterQuerier | null;
69
+ querier(stream: SyncStream, reason: BucketInclusionReason, params: RequestParameters, bucketScope: BucketDataScope, hydratedSubqueries: HydratedSubqueries): BucketParameterQuerier | null;
67
70
  findStaticInstantiations(params: RequestParameters): SqliteJsonValue[][];
68
- /**
69
- * Creates lookup indices for dynamically-resolved parameters.
70
- *
71
- * Resolving dynamic parameters is a two-step process: First, for tables referenced in subqueries, we create an index
72
- * to resolve which request parameters would match rows in subqueries. Then, when resolving bucket ids for a request,
73
- * we compute subquery results by looking up results in that index.
74
- *
75
- * This implements the first step of that process.
76
- *
77
- * @param result The array into which evaluation results should be written to.
78
- * @param sourceTable A table we depend on in a subquery.
79
- * @param row Row data to index.
80
- */
81
- pushParameterRowEvaluation(result: EvaluatedParametersResult[], sourceTable: SourceTableInterface, row: SqliteRow): void;
82
71
  debugRepresentation(): any;
83
72
  /**
84
73
  * Replaces {@link StreamVariant.parameters} with static values looked up in request parameters.
@@ -90,13 +79,15 @@ export declare class StreamVariant {
90
79
  /**
91
80
  * Builds a bucket id for an instantiation, like `stream|0[1,2,"foo"]`.
92
81
  *
93
- * @param streamName The name of the stream, included in the bucket id
82
+ * @param bucketPrefix The name of the the bucket, excluding parameters
94
83
  * @param instantiation An instantiation for all parameters in this variant.
95
84
  * @param transformer A transformer adding version information to the inner id.
96
85
  * @returns The generated bucket id
97
86
  */
98
- private buildBucketId;
87
+ private serializeBucketParameters;
99
88
  private resolveBucket;
89
+ createParameterQuerierSource(params: CreateSourceParams, stream: SyncStream, querierDataSource: BucketDataSource): BucketParameterQuerierSource;
90
+ private queriersForSubscription;
100
91
  }
101
92
  /**
102
93
  * A stateless filter condition that only depends on the request itself, e.g. `WHERE token_parameters.is_admin`.
@@ -120,3 +111,5 @@ export interface SubqueryRequestFilter {
120
111
  matches(params: RequestParameters, results: SqliteJsonValue[]): boolean;
121
112
  }
122
113
  export type RequestFilter = StaticRequestFilter | SubqueryRequestFilter;
114
+ type HydratedSubqueries = Map<SubqueryEvaluator, (params: RequestParameters) => ScopedParameterLookup[]>;
115
+ export {};
@@ -1,4 +1,4 @@
1
- import { isJsonValue, JSONBucketNameSerialize } from '../utils.js';
1
+ import { buildBucketName, isJsonValue, JSONBucketNameSerialize } from '../utils.js';
2
2
  import { cartesianProduct } from './utils.js';
3
3
  /**
4
4
  * A variant of a stream.
@@ -46,11 +46,17 @@ export class StreamVariant {
46
46
  this.additionalRowFilters = [];
47
47
  this.requestFilters = [];
48
48
  }
49
+ defaultBucketPrefix(streamName) {
50
+ return `${streamName}|${this.id}`;
51
+ }
52
+ indexLookupCreators() {
53
+ return this.subqueries.flatMap((subquery) => subquery.indexLookupCreators());
54
+ }
49
55
  /**
50
56
  * Given a row in the table this stream selects from, returns all ids of buckets to which that row belongs to.
51
57
  */
52
- bucketIdsForRow(streamName, options, transformer) {
53
- return this.instantiationsForRow(options).map((values) => this.buildBucketId(streamName, values, transformer));
58
+ bucketParametersForRow(options) {
59
+ return this.instantiationsForRow(options).map((values) => this.serializeBucketParameters(values));
54
60
  }
55
61
  /**
56
62
  * Given a row to evaluate, returns all instantiations of parameters that satisfy conditions.
@@ -89,10 +95,7 @@ export class StreamVariant {
89
95
  cartesianProductOfParameterInstantiations(instantiations) {
90
96
  return [...cartesianProduct(...instantiations)];
91
97
  }
92
- get hasDynamicBucketQueries() {
93
- return this.requestFilters.some((f) => f.type == 'dynamic');
94
- }
95
- querier(stream, reason, params, bucketIdTransformer) {
98
+ querier(stream, reason, params, bucketScope, hydratedSubqueries) {
96
99
  const instantiation = this.partiallyEvaluateParameters(params);
97
100
  if (instantiation == null) {
98
101
  return null;
@@ -111,14 +114,18 @@ export class StreamVariant {
111
114
  }
112
115
  }
113
116
  for (const subquery of this.subqueries) {
114
- subqueryToLookups.set(subquery, subquery.lookupsForRequest(params));
117
+ const subqueryLookup = hydratedSubqueries.get(subquery);
118
+ if (subqueryLookup == null) {
119
+ throw new Error('Internal error, missing subquery lookup');
120
+ }
121
+ subqueryToLookups.set(subquery, subqueryLookup(params));
115
122
  }
116
123
  const staticBuckets = [];
117
124
  if (dynamicParameters.length == 0 && dynamicRequestFilters.length == 0) {
118
125
  // When we have no dynamic parameters, the partial evaluation is a full instantiation.
119
126
  const instantiations = this.cartesianProductOfParameterInstantiations(instantiation);
120
127
  for (const instantiation of instantiations) {
121
- staticBuckets.push(this.resolveBucket(stream, instantiation, reason, bucketIdTransformer));
128
+ staticBuckets.push(this.resolveBucket(stream, instantiation, reason, bucketScope));
122
129
  }
123
130
  }
124
131
  const variant = this;
@@ -156,7 +163,7 @@ export class StreamVariant {
156
163
  perParameterInstantiation[lookup.index] = subqueryResults.get(lookup.subquery);
157
164
  }
158
165
  const product = variant.cartesianProductOfParameterInstantiations(perParameterInstantiation);
159
- return Promise.resolve(product.map((e) => variant.resolveBucket(stream, e, reason, bucketIdTransformer)));
166
+ return Promise.resolve(product.map((e) => variant.resolveBucket(stream, e, reason, bucketScope)));
160
167
  }
161
168
  };
162
169
  }
@@ -168,36 +175,6 @@ export class StreamVariant {
168
175
  // This will be an array of values (i.e. a total evaluation) because there are no dynamic parameters.
169
176
  this.partiallyEvaluateParameters(params));
170
177
  }
171
- /**
172
- * Creates lookup indices for dynamically-resolved parameters.
173
- *
174
- * Resolving dynamic parameters is a two-step process: First, for tables referenced in subqueries, we create an index
175
- * to resolve which request parameters would match rows in subqueries. Then, when resolving bucket ids for a request,
176
- * we compute subquery results by looking up results in that index.
177
- *
178
- * This implements the first step of that process.
179
- *
180
- * @param result The array into which evaluation results should be written to.
181
- * @param sourceTable A table we depend on in a subquery.
182
- * @param row Row data to index.
183
- */
184
- pushParameterRowEvaluation(result, sourceTable, row) {
185
- for (const subquery of this.subqueries) {
186
- if (subquery.parameterTable.matches(sourceTable)) {
187
- const lookups = subquery.lookupsForParameterRow(sourceTable, row);
188
- if (lookups == null) {
189
- continue;
190
- }
191
- // The row of the subquery. Since we only support subqueries with a single column, we unconditionally name the
192
- // column `result` for simplicity.
193
- const resultRow = { result: lookups.value };
194
- result.push(...lookups.lookups.map((l) => ({
195
- lookup: l,
196
- bucketParameters: [resultRow]
197
- })));
198
- }
199
- }
200
- }
201
178
  debugRepresentation() {
202
179
  return {
203
180
  id: this.id,
@@ -244,24 +221,70 @@ export class StreamVariant {
244
221
  /**
245
222
  * Builds a bucket id for an instantiation, like `stream|0[1,2,"foo"]`.
246
223
  *
247
- * @param streamName The name of the stream, included in the bucket id
224
+ * @param bucketPrefix The name of the the bucket, excluding parameters
248
225
  * @param instantiation An instantiation for all parameters in this variant.
249
226
  * @param transformer A transformer adding version information to the inner id.
250
227
  * @returns The generated bucket id
251
228
  */
252
- buildBucketId(streamName, instantiation, transformer) {
229
+ serializeBucketParameters(instantiation) {
253
230
  if (instantiation.length != this.parameters.length) {
254
231
  throw Error('Internal error, instantiation length mismatch');
255
232
  }
256
- return transformer(`${streamName}|${this.id}${JSONBucketNameSerialize.stringify(instantiation)}`);
233
+ return JSONBucketNameSerialize.stringify(instantiation);
257
234
  }
258
- resolveBucket(stream, instantiation, reason, bucketIdTransformer) {
235
+ resolveBucket(stream, instantiation, reason, bucketScope) {
259
236
  return {
260
237
  definition: stream.name,
261
238
  inclusion_reasons: [reason],
262
- bucket: this.buildBucketId(stream.name, instantiation, bucketIdTransformer),
239
+ bucket: buildBucketName(bucketScope, this.serializeBucketParameters(instantiation)),
263
240
  priority: stream.priority
264
241
  };
265
242
  }
243
+ createParameterQuerierSource(params, stream, querierDataSource) {
244
+ const hydrationState = params.hydrationState;
245
+ const bucketScope = hydrationState.getBucketSourceScope(querierDataSource);
246
+ const hydratedSubqueries = new Map(this.subqueries.map((s) => [s, s.hydrateLookupsForRequest(hydrationState)]));
247
+ return {
248
+ pushBucketParameterQueriers: (result, options) => {
249
+ const subscriptions = options.streams[stream.name] ?? [];
250
+ if (!stream.subscribedToByDefault && !subscriptions.length) {
251
+ // The client is not subscribing to this stream, so don't query buckets related to it.
252
+ return;
253
+ }
254
+ let hasExplicitDefaultSubscription = false;
255
+ for (const subscription of subscriptions) {
256
+ let subscriptionParams = options.globalParameters;
257
+ if (subscription.parameters != null) {
258
+ subscriptionParams = subscriptionParams.withAddedStreamParameters(subscription.parameters);
259
+ }
260
+ else {
261
+ hasExplicitDefaultSubscription = true;
262
+ }
263
+ this.queriersForSubscription(stream, result, subscription, subscriptionParams, bucketScope, hydratedSubqueries);
264
+ }
265
+ // If the stream is subscribed to by default and there is no explicit subscription that would match the default
266
+ // subscription, also include the default querier.
267
+ if (stream.subscribedToByDefault && !hasExplicitDefaultSubscription) {
268
+ this.queriersForSubscription(stream, result, null, options.globalParameters, bucketScope, hydratedSubqueries);
269
+ }
270
+ }
271
+ };
272
+ }
273
+ queriersForSubscription(stream, result, subscription, params, bucketScope, hydratedSubqueries) {
274
+ const reason = subscription != null ? { subscription: subscription.opaque_id } : 'default';
275
+ try {
276
+ const querier = this.querier(stream, reason, params, bucketScope, hydratedSubqueries);
277
+ if (querier) {
278
+ result.queriers.push(querier);
279
+ }
280
+ }
281
+ catch (e) {
282
+ result.errors.push({
283
+ descriptor: stream.name,
284
+ message: `Error evaluating bucket ids: ${e.message}`,
285
+ subscription: subscription ?? undefined
286
+ });
287
+ }
288
+ }
266
289
  }
267
290
  //# sourceMappingURL=variant.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"variant.js","sourceRoot":"","sources":["../../src/streams/variant.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"variant.js","sourceRoot":"","sources":["../../src/streams/variant.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { CompatibilityContext } from '../compatibility.js';
2
- import { SqliteValue } from '../types.js';
3
2
  import { SqliteValueType } from '../ExpressionType.js';
3
+ import { SqliteValue } from '../types.js';
4
4
  /**
5
5
  * A value that decays into a {@link SqliteValue} in a context-specific way.
6
6
  *
@@ -1,7 +1,24 @@
1
1
  import { SqliteValueType } from '../ExpressionType.js';
2
- import { CompatibilityContext } from '../compatibility.js';
2
+ import { CompatibilityContext, TimeValuePrecision } from '../compatibility.js';
3
3
  import { SqliteValue } from '../types.js';
4
4
  import { CustomSqliteValue } from './custom_sqlite_value.js';
5
+ export interface DateTimeSourceOptions {
6
+ /**
7
+ * The amount of sub-second digits provided by the source database.
8
+ *
9
+ * We can't infer this by parsing the iso representation alone, since trailing zeroes might be omitted from the
10
+ * representation.
11
+ */
12
+ subSecondPrecision: TimeValuePrecision;
13
+ /**
14
+ * The default precision to use when rendering {@link DateTimeValue}s in a compatibility context that doesn't have a
15
+ * {@link CompatibilityContext.maxTimeValuePrecision} set.
16
+ *
17
+ * This is usually the same as {@link subSecondPrecision}, except for MySQL, where we can provide microseconds
18
+ * precision but default to milliseconds.
19
+ */
20
+ defaultSubSecondPrecision: TimeValuePrecision;
21
+ }
5
22
  /**
6
23
  * In old versions of the sync service, timestamp values were formatted with a space between the date and time
7
24
  * components.
@@ -12,7 +29,8 @@ import { CustomSqliteValue } from './custom_sqlite_value.js';
12
29
  export declare class DateTimeValue extends CustomSqliteValue {
13
30
  readonly iso8601Representation: string;
14
31
  private readonly fixedLegacyRepresentation;
15
- constructor(iso8601Representation: string, fixedLegacyRepresentation?: string | undefined);
32
+ private readonly options;
33
+ constructor(iso8601Representation: string, fixedLegacyRepresentation: string | undefined, options: DateTimeSourceOptions);
16
34
  get legacyRepresentation(): string;
17
35
  get sqliteType(): SqliteValueType;
18
36
  toSqliteValue(context: CompatibilityContext): string;
@@ -25,9 +43,10 @@ export declare class DateTimeValue extends CustomSqliteValue {
25
43
  */
26
44
  export declare class TimeValue extends CustomSqliteValue {
27
45
  readonly timeSeconds: string;
28
- readonly fraction: string | undefined;
29
- constructor(timeSeconds: string, fraction?: string | undefined);
30
- static parse(value: string): TimeValue | null;
46
+ readonly fraction: string;
47
+ private readonly options;
48
+ constructor(timeSeconds: string, fraction: string, options: DateTimeSourceOptions);
49
+ static parse(value: string, options: DateTimeSourceOptions): TimeValue | null;
31
50
  toSqliteValue(context: CompatibilityContext): SqliteValue;
32
51
  get sqliteType(): SqliteValueType;
33
52
  }
@@ -1,4 +1,4 @@
1
- import { CompatibilityOption } from '../compatibility.js';
1
+ import { CompatibilityOption, TimeValuePrecision } from '../compatibility.js';
2
2
  import { CustomSqliteValue } from './custom_sqlite_value.js';
3
3
  /**
4
4
  * In old versions of the sync service, timestamp values were formatted with a space between the date and time
@@ -10,11 +10,13 @@ import { CustomSqliteValue } from './custom_sqlite_value.js';
10
10
  export class DateTimeValue extends CustomSqliteValue {
11
11
  iso8601Representation;
12
12
  fixedLegacyRepresentation;
13
+ options;
13
14
  // YYYY-MM-DDThh:mm:ss.sss / YYYY-MM-DDThh:mm:ss.sssZ
14
- constructor(iso8601Representation, fixedLegacyRepresentation = undefined) {
15
+ constructor(iso8601Representation, fixedLegacyRepresentation = undefined, options) {
15
16
  super();
16
17
  this.iso8601Representation = iso8601Representation;
17
18
  this.fixedLegacyRepresentation = fixedLegacyRepresentation;
19
+ this.options = options;
18
20
  }
19
21
  // YYYY-MM-DD hh:mm:ss.sss / YYYY-MM-DD hh:mm:ss.sssZ
20
22
  get legacyRepresentation() {
@@ -24,9 +26,25 @@ export class DateTimeValue extends CustomSqliteValue {
24
26
  return 'text';
25
27
  }
26
28
  toSqliteValue(context) {
27
- return context.isEnabled(CompatibilityOption.timestampsIso8601)
28
- ? this.iso8601Representation
29
- : this.legacyRepresentation;
29
+ if (context.isEnabled(CompatibilityOption.timestampsIso8601)) {
30
+ return renderSubseconds(() => {
31
+ // Match the `.123` subsecond part and/or a `Z` suffix.
32
+ const matchSubSeconds = /(?:\.(\d+))?([zZ]?)$/.exec(this.iso8601Representation);
33
+ if (matchSubSeconds == null || matchSubSeconds[0].length == 0) {
34
+ return [this.iso8601Representation, '', ''];
35
+ }
36
+ else {
37
+ return [
38
+ this.iso8601Representation.slice(0, -matchSubSeconds[0].length),
39
+ matchSubSeconds[1] ?? '',
40
+ matchSubSeconds[2] ?? ''
41
+ ];
42
+ }
43
+ }, this.options, context);
44
+ }
45
+ else {
46
+ return this.legacyRepresentation;
47
+ }
30
48
  }
31
49
  }
32
50
  /**
@@ -38,30 +56,67 @@ export class DateTimeValue extends CustomSqliteValue {
38
56
  export class TimeValue extends CustomSqliteValue {
39
57
  timeSeconds;
40
58
  fraction;
41
- constructor(timeSeconds, fraction = undefined) {
59
+ options;
60
+ constructor(timeSeconds, fraction, options) {
42
61
  super();
43
62
  this.timeSeconds = timeSeconds;
44
63
  this.fraction = fraction;
64
+ this.options = options;
45
65
  }
46
- static parse(value) {
47
- const match = /^([\d:]+)(\.\d+)?$/.exec(value);
66
+ static parse(value, options) {
67
+ const match = /^([\d:]+)(?:\.(\d+))?$/.exec(value);
48
68
  if (match == null) {
49
69
  return null;
50
70
  }
51
71
  const [_, timeSeconds, fraction] = match;
52
- return new TimeValue(timeSeconds, fraction);
72
+ return new TimeValue(timeSeconds, fraction, options);
53
73
  }
54
74
  toSqliteValue(context) {
55
75
  if (context.isEnabled(CompatibilityOption.timestampsIso8601)) {
56
- const fraction = this.fraction?.padEnd(7, '0') ?? '.000000';
57
- return `${this.timeSeconds}${fraction}`;
76
+ return renderSubseconds(() => [this.timeSeconds, this.fraction ?? '', ''], this.options, context);
58
77
  }
59
78
  else {
60
- return `${this.timeSeconds}${this.fraction ?? ''}`;
79
+ if (this.fraction) {
80
+ return `${this.timeSeconds}.${this.fraction}`;
81
+ }
82
+ else {
83
+ return this.timeSeconds;
84
+ }
61
85
  }
62
86
  }
63
87
  get sqliteType() {
64
88
  return 'text';
65
89
  }
66
90
  }
91
+ /**
92
+ * Renders a time value with a designated precision.
93
+ *
94
+ * @param split Returns the original time value, split into the part before the sub-second fraction and the subsecond
95
+ * fraction. The `.` separator should not be part of either string.
96
+ * @param options Information about precision overred by the source database.
97
+ * @param context The {@link CompatibilityContext} to take into consideration.
98
+ * @returns The rendered value.
99
+ */
100
+ function renderSubseconds(split, options, context) {
101
+ const maxPrecision = context.maxTimeValuePrecision ?? options.defaultSubSecondPrecision;
102
+ const maxSubSecondDigits = Math.min(maxPrecision.subSecondDigits, options.subSecondPrecision.subSecondDigits);
103
+ // Note: We are deliberately not rounding here, we always trim precision away. Rounding would require a parsed date
104
+ // with subsecond precision, which is just painful in JS. Maybe with the temporal API in Node 25...
105
+ let [withoutSubseconds, subseconds, suffix] = split();
106
+ if (maxPrecision == TimeValuePrecision.seconds) {
107
+ // Avoid a trailing `.` if we only care about seconds.
108
+ return `${withoutSubseconds}${suffix}`;
109
+ }
110
+ if (subseconds.length > maxSubSecondDigits) {
111
+ // Trim unwanted precision.
112
+ subseconds = subseconds.substring(0, maxSubSecondDigits);
113
+ }
114
+ else if (subseconds.length < maxSubSecondDigits) {
115
+ // Let's say we had a source database stripping trailing zeroes from the subsecond field. Perhaps the
116
+ // subSecondPrecision is generally micros, but one value has .123456 and one has .1234 instead of .123400. For
117
+ // consistency, we pad those value.
118
+ subseconds = subseconds.padEnd(maxSubSecondDigits, '0');
119
+ }
120
+ return `${withoutSubseconds}.${subseconds}${suffix}`;
121
+ }
67
122
  //# sourceMappingURL=time.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/types/time.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,OAAO,aAAc,SAAQ,iBAAiB;IAIvC;IACQ;IAJnB,qDAAqD;IAErD,YACW,qBAA6B,EACrB,4BAAgD,SAAS;QAE1E,KAAK,EAAE,CAAC;QAHC,0BAAqB,GAArB,qBAAqB,CAAQ;QACrB,8BAAyB,GAAzB,yBAAyB,CAAgC;IAG5E,CAAC;IAED,qDAAqD;IACrD,IAAW,oBAAoB;QAC7B,OAAO,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,aAAa,CAAC,OAA6B;QACzC,OAAO,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;YAC7D,CAAC,CAAC,IAAI,CAAC,qBAAqB;YAC5B,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;IAChC,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,SAAU,SAAQ,iBAAiB;IAEnC;IACA;IAFX,YACW,WAAmB,EACnB,WAA+B,SAAS;QAEjD,KAAK,EAAE,CAAC;QAHC,gBAAW,GAAX,WAAW,CAAQ;QACnB,aAAQ,GAAR,QAAQ,CAAgC;IAGnD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAa;QACxB,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,GAAG,KAAY,CAAC;QAChD,OAAO,IAAI,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,aAAa,CAAC,OAA6B;QACzC,IAAI,OAAO,CAAC,SAAS,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC;YAC5D,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,QAAQ,EAAE,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;QACrD,CAAC;IACH,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/types/time.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,17 +1,13 @@
1
1
  import { JsonContainer } from '@powersync/service-jsonbig';
2
+ import { BucketPriority } from './BucketDescription.js';
3
+ import { ScopedParameterLookup, UnscopedParameterLookup } from './BucketParameterQuerier.js';
4
+ import { CompatibilityContext } from './compatibility.js';
2
5
  import { ColumnDefinition } from './ExpressionType.js';
6
+ import { RequestFunctionCall } from './request_functions.js';
3
7
  import { SourceTableInterface } from './SourceTableInterface.js';
4
8
  import { SyncRulesOptions } from './SqlSyncRules.js';
5
9
  import { TablePattern } from './TablePattern.js';
6
- import { BucketPriority } from './BucketDescription.js';
7
- import { ParameterLookup } from './BucketParameterQuerier.js';
8
10
  import { CustomSqliteValue } from './types/custom_sqlite_value.js';
9
- import { CompatibilityContext } from './compatibility.js';
10
- import { RequestFunctionCall } from './request_functions.js';
11
- export interface SyncRules {
12
- evaluateRow(options: EvaluateRowOptions): EvaluationResult[];
13
- evaluateParameterRow(table: SourceTableInterface, row: SqliteRow): EvaluatedParametersResult[];
14
- }
15
11
  export interface QueryParseOptions extends SyncRulesOptions {
16
12
  accept_potentially_dangerous_queries?: boolean;
17
13
  priority?: BucketPriority;
@@ -21,7 +17,16 @@ export interface StreamParseOptions extends QueryParseOptions {
21
17
  auto_subscribe?: boolean;
22
18
  }
23
19
  export interface EvaluatedParameters {
24
- lookup: ParameterLookup;
20
+ lookup: ScopedParameterLookup;
21
+ /**
22
+ * Parameters used to generate bucket id. May be incomplete.
23
+ *
24
+ * JSON-serializable.
25
+ */
26
+ bucketParameters: Record<string, SqliteJsonValue>[];
27
+ }
28
+ export interface UnscopedEvaluatedParameters {
29
+ lookup: UnscopedParameterLookup;
25
30
  /**
26
31
  * Parameters used to generate bucket id. May be incomplete.
27
32
  *
@@ -30,6 +35,7 @@ export interface EvaluatedParameters {
30
35
  bucketParameters: Record<string, SqliteJsonValue>[];
31
36
  }
32
37
  export type EvaluatedParametersResult = EvaluatedParameters | EvaluationError;
38
+ export type UnscopedEvaluatedParametersResult = UnscopedEvaluatedParameters | EvaluationError;
33
39
  export interface EvaluatedRow {
34
40
  bucket: string;
35
41
  /** Output table - may be different from input table. */
@@ -41,13 +47,41 @@ export interface EvaluatedRow {
41
47
  /** Must be JSON-serializable. */
42
48
  data: SqliteJsonRow;
43
49
  }
50
+ /**
51
+ * Bucket data as evaluated by the BucketDataSource.
52
+ *
53
+ * The bucket name must still be resolved, external to this.
54
+ */
55
+ export interface UnscopedEvaluatedRow {
56
+ /**
57
+ * Serialized evaluated parameters used to generate the bucket id. Serialized as a JSON array.
58
+ *
59
+ * Examples:
60
+ * [] // no bucket parameters
61
+ * [1] // single numeric parameter
62
+ * [1,"foo"] // multiple parameters
63
+ *
64
+ * The bucket name is derived by using concetenating these parameters with the generated bucket name.
65
+ */
66
+ serializedBucketParameters: string;
67
+ /** Output table - may be different from input table. */
68
+ table: string;
69
+ /**
70
+ * Convenience attribute. Must match data.id.
71
+ */
72
+ id: string;
73
+ /** Must be JSON-serializable. */
74
+ data: SqliteJsonRow;
75
+ }
44
76
  export interface EvaluationError {
45
77
  error: string;
46
78
  }
47
- export declare function isEvaluationError(e: any): e is EvaluationError;
79
+ export declare function isEvaluationError(e: EvaluationResult | UnscopedEvaluationResult | EvaluatedParametersResult | UnscopedEvaluatedParametersResult): e is EvaluationError;
48
80
  export declare function isEvaluatedRow(e: EvaluationResult): e is EvaluatedRow;
81
+ export declare function isSourceEvaluatedRow(e: UnscopedEvaluationResult): e is UnscopedEvaluatedRow;
49
82
  export declare function isEvaluatedParameters(e: EvaluatedParametersResult): e is EvaluatedParameters;
50
83
  export type EvaluationResult = EvaluatedRow | EvaluationError;
84
+ export type UnscopedEvaluationResult = UnscopedEvaluatedRow | EvaluationError;
51
85
  export interface RequestJwtPayload {
52
86
  /**
53
87
  * user_id
@@ -190,21 +224,7 @@ export interface InputParameter {
190
224
  */
191
225
  parametersToLookupValue(parameters: ParameterValueSet): SqliteValue;
192
226
  }
193
- /**
194
- * Transforms bucket ids generated when evaluating the row by e.g. encoding version information.
195
- *
196
- * Because buckets are recreated on a sync rule redeploy, it makes sense to use different bucket ids (otherwise, clients
197
- * may run into checksum errors causing a sync to take longer than necessary or breaking progress).
198
- *
199
- * So, this transformer receives the original bucket id as generated by defined sync rules, and can prepend a version
200
- * identifier.
201
- *
202
- * Note that this transformation has not been present in older versions of the sync service. To preserve backwards
203
- * compatibility, sync rules will not use this function without an opt-in.
204
- */
205
- export type BucketIdTransformer = (regularId: string) => string;
206
227
  export interface EvaluateRowOptions extends TableRow {
207
- bucketIdTransformer: BucketIdTransformer;
208
228
  }
209
229
  /**
210
230
  * A row associated with the table it's coming from.