@powersync/service-sync-rules 0.29.5 → 0.29.7
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.
- package/dist/SqlParameterQuery.js +12 -8
- package/dist/SqlParameterQuery.js.map +1 -1
- package/dist/StaticSqlParameterQuery.js +9 -7
- package/dist/StaticSqlParameterQuery.js.map +1 -1
- package/dist/TableValuedFunctionSqlParameterQuery.d.ts +1 -0
- package/dist/TableValuedFunctionSqlParameterQuery.js +19 -8
- package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -1
- package/dist/request_functions.d.ts +19 -7
- package/dist/request_functions.js +8 -10
- package/dist/request_functions.js.map +1 -1
- package/dist/schema-generators/RoomSchemaGenerator.d.ts +13 -0
- package/dist/schema-generators/RoomSchemaGenerator.js +53 -0
- package/dist/schema-generators/RoomSchemaGenerator.js.map +1 -0
- package/dist/schema-generators/SchemaGenerator.d.ts +1 -1
- package/dist/schema-generators/SqlSchemaGenerator.d.ts +15 -0
- package/dist/schema-generators/SqlSchemaGenerator.js +31 -0
- package/dist/schema-generators/SqlSchemaGenerator.js.map +1 -0
- package/dist/schema-generators/schema-generators.d.ts +4 -0
- package/dist/schema-generators/schema-generators.js +4 -0
- package/dist/schema-generators/schema-generators.js.map +1 -1
- package/dist/sql_filters.d.ts +1 -2
- package/dist/sql_filters.js +11 -24
- package/dist/sql_filters.js.map +1 -1
- package/dist/sql_support.js +13 -14
- package/dist/sql_support.js.map +1 -1
- package/dist/streams/from_sql.js +33 -19
- package/dist/streams/from_sql.js.map +1 -1
- package/dist/streams/functions.js +2 -4
- package/dist/streams/functions.js.map +1 -1
- package/dist/types.d.ts +20 -13
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/dist/validators.d.ts +14 -0
- package/dist/validators.js +63 -0
- package/dist/validators.js.map +1 -0
- package/package.json +2 -2
package/dist/types.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { BucketPriority } from './BucketDescription.js';
|
|
|
7
7
|
import { ParameterLookup } from './BucketParameterQuerier.js';
|
|
8
8
|
import { CustomSqliteValue } from './types/custom_sqlite_value.js';
|
|
9
9
|
import { CompatibilityContext } from './compatibility.js';
|
|
10
|
+
import { RequestFunctionCall } from './request_functions.js';
|
|
10
11
|
export interface SyncRules {
|
|
11
12
|
evaluateRow(options: EvaluateRowOptions): EvaluationResult[];
|
|
12
13
|
evaluateParameterRow(table: SourceTableInterface, row: SqliteRow): EvaluatedParametersResult[];
|
|
@@ -212,6 +213,12 @@ export interface TableRow<R = SqliteRow> {
|
|
|
212
213
|
sourceTable: SourceTableInterface;
|
|
213
214
|
record: R;
|
|
214
215
|
}
|
|
216
|
+
export interface BaseClause {
|
|
217
|
+
/**
|
|
218
|
+
* If this clause is composed from semantic child-clauses, calls the given callback function for each child.
|
|
219
|
+
*/
|
|
220
|
+
visitChildren?: (visitor: (clause: CompiledClause) => void) => void;
|
|
221
|
+
}
|
|
215
222
|
/**
|
|
216
223
|
* This is a clause that matches row and parameter values for equality.
|
|
217
224
|
*
|
|
@@ -220,8 +227,9 @@ export interface TableRow<R = SqliteRow> {
|
|
|
220
227
|
*
|
|
221
228
|
* For a given a row, this produces a set of parameters that would make the clause evaluate to true.
|
|
222
229
|
*/
|
|
223
|
-
export interface ParameterMatchClause {
|
|
230
|
+
export interface ParameterMatchClause extends BaseClause {
|
|
224
231
|
error: boolean;
|
|
232
|
+
specialType?: 'or';
|
|
225
233
|
/**
|
|
226
234
|
* The parameter fields that are used for this filter, for example:
|
|
227
235
|
* * ['bucket.region_id'] for a data query
|
|
@@ -251,19 +259,11 @@ export interface ParameterMatchClause {
|
|
|
251
259
|
* @return The filter parameters
|
|
252
260
|
*/
|
|
253
261
|
filterRow(tables: QueryParameters): TrueIfParametersMatch;
|
|
254
|
-
/** request.user_id(), request.jwt(), token_parameters.* */
|
|
255
|
-
usesAuthenticatedRequestParameters: boolean;
|
|
256
|
-
/** request.parameters(), user_parameters.* */
|
|
257
|
-
usesUnauthenticatedRequestParameters: boolean;
|
|
258
262
|
}
|
|
259
263
|
/**
|
|
260
264
|
* This is a clause that operates on request or bucket parameters.
|
|
261
265
|
*/
|
|
262
|
-
export interface ParameterValueClause {
|
|
263
|
-
/** request.user_id(), request.jwt(), token_parameters.* */
|
|
264
|
-
usesAuthenticatedRequestParameters: boolean;
|
|
265
|
-
/** request.parameters(), user_parameters.* */
|
|
266
|
-
usesUnauthenticatedRequestParameters: boolean;
|
|
266
|
+
export interface ParameterValueClause extends BaseClause {
|
|
267
267
|
/**
|
|
268
268
|
* An unique key for the clause.
|
|
269
269
|
*
|
|
@@ -278,6 +278,13 @@ export interface ParameterValueClause {
|
|
|
278
278
|
*/
|
|
279
279
|
lookupParameterValue(parameters: ParameterValueSet): SqliteValue;
|
|
280
280
|
}
|
|
281
|
+
/**
|
|
282
|
+
* A {@link ParameterValueClause} created by selecting from the legacy `token_parameters` or `user_parameters` tables.
|
|
283
|
+
*/
|
|
284
|
+
export interface LegacyParameterFromTableClause extends ParameterValueClause {
|
|
285
|
+
table: string;
|
|
286
|
+
}
|
|
287
|
+
export declare function isLegacyParameterFromTableClause(clause: CompiledClause): clause is LegacyParameterFromTableClause;
|
|
281
288
|
export interface QuerySchema {
|
|
282
289
|
/**
|
|
283
290
|
* @param table The unaliased table, as it appears in the source schema.
|
|
@@ -296,7 +303,7 @@ export interface QuerySchema {
|
|
|
296
303
|
* For parameter queries, that is the parameter table being queried.
|
|
297
304
|
* For data queries, that is the data table being queried.
|
|
298
305
|
*/
|
|
299
|
-
export interface RowValueClause {
|
|
306
|
+
export interface RowValueClause extends BaseClause {
|
|
300
307
|
evaluate(tables: QueryParameters): SqliteValue;
|
|
301
308
|
getColumnDefinition(schema: QuerySchema): ColumnDefinition | undefined;
|
|
302
309
|
}
|
|
@@ -308,10 +315,10 @@ export interface RowValueClause {
|
|
|
308
315
|
export interface StaticValueClause extends RowValueClause, ParameterValueClause {
|
|
309
316
|
readonly value: SqliteValue;
|
|
310
317
|
}
|
|
311
|
-
export interface ClauseError {
|
|
318
|
+
export interface ClauseError extends BaseClause {
|
|
312
319
|
error: true;
|
|
313
320
|
}
|
|
314
|
-
export type CompiledClause = RowValueClause | ParameterMatchClause | ParameterValueClause | ClauseError;
|
|
321
|
+
export type CompiledClause = RowValueClause | ParameterMatchClause | ParameterValueClause | RequestFunctionCall | LegacyParameterFromTableClause | ClauseError;
|
|
315
322
|
/**
|
|
316
323
|
* true if any of the filter parameter sets match
|
|
317
324
|
*/
|
package/dist/types.js
CHANGED
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,4BAA4B,CAAC;AAKpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAInD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Replacer } from '@powersync/service-jsonbig';
|
|
2
2
|
import { SelectFromStatement, Statement } from 'pgsql-ast-parser';
|
|
3
|
-
import { DatabaseInputRow, DatabaseInputValue, SqliteInputValue, SqliteInputRow, SqliteJsonRow, SqliteJsonValue, SqliteRow, SqliteValue, BucketIdTransformer } from './types.js';
|
|
4
3
|
import { CompatibilityContext } from './compatibility.js';
|
|
4
|
+
import { BucketIdTransformer, DatabaseInputRow, DatabaseInputValue, SqliteInputRow, SqliteInputValue, SqliteJsonRow, SqliteJsonValue, SqliteRow, SqliteValue } from './types.js';
|
|
5
5
|
export declare function isSelectStatement(q: Statement): q is SelectFromStatement;
|
|
6
6
|
export declare function getBucketId(descriptor_id: string, bucket_parameters: string[], params: Record<string, SqliteJsonValue>, transformer: BucketIdTransformer): string;
|
|
7
7
|
/**
|
package/dist/utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { JSONBig, JsonContainer, stringifyRaw } from '@powersync/service-jsonbig';
|
|
2
|
-
import { SQLITE_FALSE, SQLITE_TRUE } from './sql_support.js';
|
|
3
2
|
import { SyncRuleProcessingError as SyncRulesProcessingError } from './errors.js';
|
|
3
|
+
import { SQLITE_FALSE, SQLITE_TRUE } from './sql_support.js';
|
|
4
4
|
import { CustomArray, CustomObject, CustomSqliteValue } from './types/custom_sqlite_value.js';
|
|
5
5
|
export function isSelectStatement(q) {
|
|
6
6
|
return q.type == 'select';
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAY,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CompiledClause } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Detects the use of request parameters in a compiled clause.
|
|
4
|
+
*/
|
|
5
|
+
export declare class DetectRequestParameters {
|
|
6
|
+
/** request.user_id(), request.jwt(), token_parameters.* */
|
|
7
|
+
usesAuthenticatedRequestParameters: boolean;
|
|
8
|
+
/** request.parameters(), user_parameters.* */
|
|
9
|
+
usesUnauthenticatedRequestParameters: boolean;
|
|
10
|
+
/** subscription.parameters(), subscription.parameters('a') */
|
|
11
|
+
usesStreamParameters: boolean;
|
|
12
|
+
accept(clause?: CompiledClause): null | undefined;
|
|
13
|
+
acceptAll(clauses: Iterable<CompiledClause>): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { isRequestFunctionCall } from './request_functions.js';
|
|
2
|
+
import { isParameterMatchClause } from './sql_support.js';
|
|
3
|
+
import { isLegacyParameterFromTableClause } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Detects the use of request parameters in a compiled clause.
|
|
6
|
+
*/
|
|
7
|
+
export class DetectRequestParameters {
|
|
8
|
+
/** request.user_id(), request.jwt(), token_parameters.* */
|
|
9
|
+
usesAuthenticatedRequestParameters = false;
|
|
10
|
+
/** request.parameters(), user_parameters.* */
|
|
11
|
+
usesUnauthenticatedRequestParameters = false;
|
|
12
|
+
/** subscription.parameters(), subscription.parameters('a') */
|
|
13
|
+
usesStreamParameters = false;
|
|
14
|
+
accept(clause) {
|
|
15
|
+
if (clause == null) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
if (isRequestFunctionCall(clause)) {
|
|
19
|
+
const f = clause.function;
|
|
20
|
+
this.usesAuthenticatedRequestParameters ||= f.parameterUsage == 'authenticated';
|
|
21
|
+
this.usesUnauthenticatedRequestParameters ||=
|
|
22
|
+
f.parameterUsage == 'unauthenticated' || f.parameterUsage == 'subscription';
|
|
23
|
+
this.usesStreamParameters ||= f.parameterUsage == 'subscription';
|
|
24
|
+
}
|
|
25
|
+
else if (isLegacyParameterFromTableClause(clause)) {
|
|
26
|
+
const table = clause.table;
|
|
27
|
+
if (table == 'token_parameters') {
|
|
28
|
+
this.usesAuthenticatedRequestParameters = true;
|
|
29
|
+
}
|
|
30
|
+
else if (table == 'user_parameters') {
|
|
31
|
+
this.usesUnauthenticatedRequestParameters = true;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else if (isParameterMatchClause(clause) && clause.specialType == 'or') {
|
|
35
|
+
// We only treat this clause as using authenticated request parameters if all subclauses use authenticated request
|
|
36
|
+
// parameters.
|
|
37
|
+
const leftVisitor = new DetectRequestParameters();
|
|
38
|
+
const rightVisitor = new DetectRequestParameters();
|
|
39
|
+
let isFirstChild = true;
|
|
40
|
+
clause.visitChildren((v) => {
|
|
41
|
+
if (isFirstChild) {
|
|
42
|
+
leftVisitor.accept(v);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
rightVisitor.accept(v);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
this.usesAuthenticatedRequestParameters =
|
|
49
|
+
leftVisitor.usesAuthenticatedRequestParameters && rightVisitor.usesAuthenticatedRequestParameters;
|
|
50
|
+
// For unauthenticated parameters, it's enough if either side reads unauthenticated data.
|
|
51
|
+
this.usesUnauthenticatedRequestParameters ||= leftVisitor.usesUnauthenticatedRequestParameters;
|
|
52
|
+
this.usesUnauthenticatedRequestParameters ||= rightVisitor.usesUnauthenticatedRequestParameters;
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
clause.visitChildren?.((c) => this.accept(c));
|
|
56
|
+
}
|
|
57
|
+
acceptAll(clauses) {
|
|
58
|
+
for (const clause of clauses) {
|
|
59
|
+
this.accept(clause);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAkB,gCAAgC,EAAwB,MAAM,YAAY,CAAC;AAEpG;;GAEG;AACH,MAAM,OAAO,uBAAuB;IAClC,2DAA2D;IAC3D,kCAAkC,GAAY,KAAK,CAAC;IACpD,8CAA8C;IAC9C,oCAAoC,GAAY,KAAK,CAAC;IACtD,+DAA+D;IAC/D,oBAAoB,GAAY,KAAK,CAAC;IAEtC,MAAM,CAAC,MAAuB;QAC5B,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;YAE1B,IAAI,CAAC,kCAAkC,KAAK,CAAC,CAAC,cAAc,IAAI,eAAe,CAAC;YAChF,IAAI,CAAC,oCAAoC;gBACvC,CAAC,CAAC,cAAc,IAAI,iBAAiB,IAAI,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC;YAC9E,IAAI,CAAC,oBAAoB,KAAK,CAAC,CAAC,cAAc,IAAI,cAAc,CAAC;QACnE,CAAC;aAAM,IAAI,gCAAgC,CAAC,MAAM,CAAC,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,IAAI,KAAK,IAAI,kBAAkB,EAAE,CAAC;gBAChC,IAAI,CAAC,kCAAkC,GAAG,IAAI,CAAC;YACjD,CAAC;iBAAM,IAAI,KAAK,IAAI,iBAAiB,EAAE,CAAC;gBACtC,IAAI,CAAC,oCAAoC,GAAG,IAAI,CAAC;YACnD,CAAC;QACH,CAAC;aAAM,IAAI,sBAAsB,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI,EAAE,CAAC;YACxE,kHAAkH;YAClH,cAAc;YACd,MAAM,WAAW,GAAG,IAAI,uBAAuB,EAAE,CAAC;YAClD,MAAM,YAAY,GAAG,IAAI,uBAAuB,EAAE,CAAC;YAEnD,IAAI,YAAY,GAAG,IAAI,CAAC;YACxB,MAAM,CAAC,aAAc,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC1B,IAAI,YAAY,EAAE,CAAC;oBACjB,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,CAAC;qBAAM,CAAC;oBACN,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,kCAAkC;gBACrC,WAAW,CAAC,kCAAkC,IAAI,YAAY,CAAC,kCAAkC,CAAC;YAEpG,yFAAyF;YACzF,IAAI,CAAC,oCAAoC,KAAK,WAAW,CAAC,oCAAoC,CAAC;YAC/F,IAAI,CAAC,oCAAoC,KAAK,YAAY,CAAC,oCAAoC,CAAC;YAChG,OAAO;QACT,CAAC;QAED,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,SAAS,CAAC,OAAiC;QACzC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powersync/service-sync-rules",
|
|
3
3
|
"repository": "https://github.com/powersync-ja/powersync-service",
|
|
4
|
-
"version": "0.29.
|
|
4
|
+
"version": "0.29.7",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"license": "FSL-1.1-ALv2",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"pgsql-ast-parser": "^11.1.0",
|
|
20
20
|
"uuid": "^11.1.0",
|
|
21
21
|
"yaml": "^2.3.1",
|
|
22
|
-
"@powersync/service-jsonbig": "^0.17.
|
|
22
|
+
"@powersync/service-jsonbig": "^0.17.12"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/node": "^22.16.2",
|