@powersync/service-sync-rules 0.0.0-dev-20250825132649 → 0.0.0-dev-20250827072023
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/BucketSource.d.ts +2 -2
- package/dist/BucketSource.js.map +1 -1
- package/dist/ExpressionType.d.ts +1 -0
- package/dist/ExpressionType.js.map +1 -1
- package/dist/SqlBucketDescriptor.d.ts +3 -1
- package/dist/SqlBucketDescriptor.js +5 -2
- package/dist/SqlBucketDescriptor.js.map +1 -1
- package/dist/SqlSyncRules.d.ts +3 -3
- package/dist/SqlSyncRules.js +21 -4
- package/dist/SqlSyncRules.js.map +1 -1
- package/dist/compatibility.d.ts +37 -0
- package/dist/compatibility.js +50 -0
- package/dist/compatibility.js.map +1 -0
- package/dist/events/SqlEventDescriptor.d.ts +3 -1
- package/dist/events/SqlEventDescriptor.js +5 -2
- package/dist/events/SqlEventDescriptor.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/json_schema.js +23 -0
- package/dist/json_schema.js.map +1 -1
- package/dist/sql_functions.d.ts +3 -3
- package/dist/sql_functions.js +4 -0
- package/dist/sql_functions.js.map +1 -1
- package/dist/streams/from_sql.js +5 -1
- package/dist/streams/from_sql.js.map +1 -1
- package/dist/streams/parameter.d.ts +2 -2
- package/dist/streams/stream.d.ts +3 -1
- package/dist/streams/stream.js +11 -3
- package/dist/streams/stream.js.map +1 -1
- package/dist/streams/variant.d.ts +4 -4
- package/dist/streams/variant.js.map +1 -1
- package/dist/types/custom_sqlite_value.d.ts +38 -0
- package/dist/types/custom_sqlite_value.js +50 -0
- package/dist/types/custom_sqlite_value.js.map +1 -0
- package/dist/types/time.d.ts +33 -0
- package/dist/types/time.js +67 -0
- package/dist/types/time.js.map +1 -0
- package/dist/types.d.ts +20 -8
- package/dist/types.js +5 -2
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +7 -4
- package/dist/utils.js +27 -13
- package/dist/utils.js.map +1 -1
- package/package.json +2 -2
- package/schema/sync_rules.json +17 -0
package/dist/types.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ import { SyncRulesOptions } from './SqlSyncRules.js';
|
|
|
5
5
|
import { TablePattern } from './TablePattern.js';
|
|
6
6
|
import { BucketPriority } from './BucketDescription.js';
|
|
7
7
|
import { ParameterLookup } from './BucketParameterQuerier.js';
|
|
8
|
+
import { CustomSqliteValue } from './types/custom_sqlite_value.js';
|
|
9
|
+
import { CompatibilityContext } from './compatibility.js';
|
|
8
10
|
export interface SyncRules {
|
|
9
11
|
evaluateRow(options: EvaluateRowOptions): EvaluationResult[];
|
|
10
12
|
evaluateParameterRow(table: SourceTableInterface, row: SqliteRow): EvaluatedParametersResult[];
|
|
@@ -12,6 +14,7 @@ export interface SyncRules {
|
|
|
12
14
|
export interface QueryParseOptions extends SyncRulesOptions {
|
|
13
15
|
accept_potentially_dangerous_queries?: boolean;
|
|
14
16
|
priority?: BucketPriority;
|
|
17
|
+
compatibility: CompatibilityContext;
|
|
15
18
|
}
|
|
16
19
|
export interface StreamParseOptions extends QueryParseOptions {
|
|
17
20
|
auto_subscribe?: boolean;
|
|
@@ -99,6 +102,11 @@ export type SqliteJsonValue = number | string | bigint | null;
|
|
|
99
102
|
* A value supported by the SQLite type system.
|
|
100
103
|
*/
|
|
101
104
|
export type SqliteValue = number | string | null | bigint | Uint8Array;
|
|
105
|
+
/**
|
|
106
|
+
* A value that is either supported by SQLite natively, or one that can be lowered into a SQLite-value given additional
|
|
107
|
+
* context.
|
|
108
|
+
*/
|
|
109
|
+
export type SqliteInputValue = SqliteValue | CustomSqliteValue;
|
|
102
110
|
/**
|
|
103
111
|
* A set of values that are both SQLite and JSON-compatible.
|
|
104
112
|
*
|
|
@@ -111,22 +119,21 @@ export type SqliteJsonRow = {
|
|
|
111
119
|
* SQLite-compatible row (NULL, TEXT, INTEGER, REAL, BLOB).
|
|
112
120
|
* JSON is represented as TEXT.
|
|
113
121
|
*/
|
|
114
|
-
export type SqliteRow = {
|
|
115
|
-
[column: string]:
|
|
122
|
+
export type SqliteRow<T = SqliteValue> = {
|
|
123
|
+
[column: string]: T;
|
|
116
124
|
};
|
|
125
|
+
export type SqliteInputRow = SqliteRow<SqliteInputValue>;
|
|
117
126
|
/**
|
|
118
127
|
* SQLite-compatible row (NULL, TEXT, INTEGER, REAL, BLOB).
|
|
119
128
|
* JSON is represented as TEXT.
|
|
120
129
|
*
|
|
121
130
|
* Toasted values are `undefined`.
|
|
122
131
|
*/
|
|
123
|
-
export type ToastableSqliteRow =
|
|
124
|
-
[column: string]: SqliteValue | undefined;
|
|
125
|
-
};
|
|
132
|
+
export type ToastableSqliteRow = SqliteRow<SqliteInputValue | undefined>;
|
|
126
133
|
/**
|
|
127
134
|
* A value as received from the database.
|
|
128
135
|
*/
|
|
129
|
-
export type DatabaseInputValue = SqliteValue | boolean | DatabaseInputValue[] | JsonContainer | {
|
|
136
|
+
export type DatabaseInputValue = SqliteValue | boolean | DatabaseInputValue[] | JsonContainer | CustomSqliteValue | {
|
|
130
137
|
[key: string]: DatabaseInputValue;
|
|
131
138
|
};
|
|
132
139
|
/**
|
|
@@ -180,9 +187,14 @@ export interface InputParameter {
|
|
|
180
187
|
*/
|
|
181
188
|
parametersToLookupValue(parameters: ParameterValueSet): SqliteValue;
|
|
182
189
|
}
|
|
183
|
-
export interface EvaluateRowOptions {
|
|
190
|
+
export interface EvaluateRowOptions extends TableRow<SqliteInputRow> {
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* A row associated with the table it's coming from.
|
|
194
|
+
*/
|
|
195
|
+
export interface TableRow<R = SqliteRow> {
|
|
184
196
|
sourceTable: SourceTableInterface;
|
|
185
|
-
record:
|
|
197
|
+
record: R;
|
|
186
198
|
}
|
|
187
199
|
/**
|
|
188
200
|
* This is a clause that matches row and parameter values for equality.
|
package/dist/types.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { JSONBig } from '@powersync/service-jsonbig';
|
|
2
2
|
import { toSyncRulesParameters } from './utils.js';
|
|
3
|
+
import { CompatibilityContext } from './compatibility.js';
|
|
3
4
|
export function isEvaluationError(e) {
|
|
4
5
|
return typeof e.error == 'string';
|
|
5
6
|
}
|
|
@@ -41,11 +42,13 @@ export class RequestParameters {
|
|
|
41
42
|
// sub takes presedence over any embedded parameters
|
|
42
43
|
user_id: tokenPayload.sub
|
|
43
44
|
};
|
|
44
|
-
|
|
45
|
+
// Client and token parameters don't contain DateTime values or other custom types, so we don't need to consider
|
|
46
|
+
// compatibility.
|
|
47
|
+
this.tokenParameters = toSyncRulesParameters(tokenParameters, CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY);
|
|
45
48
|
this.userId = tokenPayload.sub;
|
|
46
49
|
this.rawTokenPayload = JSONBig.stringify(tokenPayload);
|
|
47
50
|
this.rawUserParameters = JSONBig.stringify(clientParameters);
|
|
48
|
-
this.userParameters = toSyncRulesParameters(clientParameters);
|
|
51
|
+
this.userParameters = toSyncRulesParameters(clientParameters, CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY);
|
|
49
52
|
this.streamParameters = null;
|
|
50
53
|
this.rawStreamParameters = null;
|
|
51
54
|
}
|
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;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Replacer } from '@powersync/service-jsonbig';
|
|
2
2
|
import { SelectFromStatement, Statement } from 'pgsql-ast-parser';
|
|
3
|
-
import { DatabaseInputRow, SqliteJsonRow, SqliteJsonValue, SqliteRow, SqliteValue } from './types.js';
|
|
3
|
+
import { DatabaseInputRow, DatabaseInputValue, SqliteInputValue, SqliteInputRow, SqliteJsonRow, SqliteJsonValue, SqliteRow, SqliteValue } from './types.js';
|
|
4
|
+
import { CompatibilityContext } from './compatibility.js';
|
|
4
5
|
export declare function isSelectStatement(q: Statement): q is SelectFromStatement;
|
|
5
6
|
export declare function getBucketId(descriptor_id: string, bucket_parameters: string[], params: Record<string, SqliteJsonValue>): string;
|
|
6
7
|
/**
|
|
@@ -21,19 +22,21 @@ export declare function isJsonValue(value: SqliteValue): value is SqliteJsonValu
|
|
|
21
22
|
/**
|
|
22
23
|
* Map database row to SqliteRow for use in sync rules.
|
|
23
24
|
*/
|
|
24
|
-
export declare function toSyncRulesRow(row: DatabaseInputRow):
|
|
25
|
+
export declare function toSyncRulesRow(row: DatabaseInputRow): SqliteInputRow;
|
|
25
26
|
/**
|
|
26
27
|
* Convert parameter query input to a SqliteJsonRow.
|
|
27
28
|
*
|
|
28
29
|
* @param parameters Generic JSON input
|
|
29
30
|
*/
|
|
30
|
-
export declare function toSyncRulesParameters(parameters: Record<string, any
|
|
31
|
+
export declare function toSyncRulesParameters(parameters: Record<string, any>, context: CompatibilityContext): SqliteJsonRow;
|
|
31
32
|
/**
|
|
32
33
|
* Convert to a SQLITE-equivalent value: NULL, TEXT, INTEGER, REAL or BLOB.
|
|
33
34
|
*
|
|
34
35
|
* Any object or array is converted to JSON TEXT.
|
|
35
36
|
*/
|
|
36
|
-
export declare function toSyncRulesValue(data:
|
|
37
|
+
export declare function toSyncRulesValue(data: DatabaseInputValue, autoBigNum?: boolean, keepUndefined?: boolean): SqliteInputValue;
|
|
38
|
+
export declare function applyValueContext(value: SqliteInputValue, context: CompatibilityContext): SqliteValue;
|
|
39
|
+
export declare function applyRowContext(value: SqliteInputRow, context: CompatibilityContext): SqliteRow;
|
|
37
40
|
/**
|
|
38
41
|
* Only use this for serializing bucket names. Bucket names should never be parsed except perhaps for debug purposes.
|
|
39
42
|
*
|
package/dist/utils.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { JSONBig, JsonContainer, stringifyRaw } from '@powersync/service-jsonbig';
|
|
2
2
|
import { SQLITE_FALSE, SQLITE_TRUE } from './sql_support.js';
|
|
3
3
|
import { SyncRuleProcessingError as SyncRulesProcessingError } from './errors.js';
|
|
4
|
+
import { CustomArray, CustomObject, CustomSqliteValue } from './types/custom_sqlite_value.js';
|
|
4
5
|
export function isSelectStatement(q) {
|
|
5
6
|
return q.type == 'select';
|
|
6
7
|
}
|
|
@@ -47,7 +48,7 @@ export function jsonValueToSqlite(value) {
|
|
|
47
48
|
export function isJsonValue(value) {
|
|
48
49
|
return value == null || typeof value == 'string' || typeof value == 'number' || typeof value == 'bigint';
|
|
49
50
|
}
|
|
50
|
-
function filterJsonData(data, depth = 0) {
|
|
51
|
+
function filterJsonData(data, context, depth = 0) {
|
|
51
52
|
if (depth > DEPTH_LIMIT) {
|
|
52
53
|
// This is primarily to prevent infinite recursion
|
|
53
54
|
// TODO: Proper error class
|
|
@@ -68,7 +69,7 @@ function filterJsonData(data, depth = 0) {
|
|
|
68
69
|
return data;
|
|
69
70
|
}
|
|
70
71
|
else if (Array.isArray(data)) {
|
|
71
|
-
return data.map((element) => filterJsonData(element, depth + 1));
|
|
72
|
+
return data.map((element) => filterJsonData(element, context, depth + 1));
|
|
72
73
|
}
|
|
73
74
|
else if (ArrayBuffer.isView(data)) {
|
|
74
75
|
return undefined;
|
|
@@ -77,10 +78,13 @@ function filterJsonData(data, depth = 0) {
|
|
|
77
78
|
// Can be stringified directly when using our JSONBig implementation
|
|
78
79
|
return data;
|
|
79
80
|
}
|
|
81
|
+
else if (data instanceof CustomSqliteValue) {
|
|
82
|
+
return data.toSqliteValue(context);
|
|
83
|
+
}
|
|
80
84
|
else if (typeof data == 'object') {
|
|
81
85
|
let record = {};
|
|
82
86
|
for (let key of Object.keys(data)) {
|
|
83
|
-
record[key] = filterJsonData(data[key], depth + 1);
|
|
87
|
+
record[key] = filterJsonData(data[key], context, depth + 1);
|
|
84
88
|
}
|
|
85
89
|
return record;
|
|
86
90
|
}
|
|
@@ -103,10 +107,10 @@ export function toSyncRulesRow(row) {
|
|
|
103
107
|
*
|
|
104
108
|
* @param parameters Generic JSON input
|
|
105
109
|
*/
|
|
106
|
-
export function toSyncRulesParameters(parameters) {
|
|
110
|
+
export function toSyncRulesParameters(parameters, context) {
|
|
107
111
|
let record = {};
|
|
108
112
|
for (let key of Object.keys(parameters)) {
|
|
109
|
-
record[key] = toSyncRulesValue(parameters[key], true, false);
|
|
113
|
+
record[key] = applyValueContext(toSyncRulesValue(parameters[key], true, false), context);
|
|
110
114
|
}
|
|
111
115
|
return record;
|
|
112
116
|
}
|
|
@@ -141,26 +145,36 @@ export function toSyncRulesValue(data, autoBigNum, keepUndefined) {
|
|
|
141
145
|
return data ? SQLITE_TRUE : SQLITE_FALSE;
|
|
142
146
|
}
|
|
143
147
|
else if (Array.isArray(data)) {
|
|
144
|
-
|
|
145
|
-
return JSONBig.stringify(data.map((element) => filterJsonData(element)));
|
|
148
|
+
return new CustomArray(data, filterJsonData);
|
|
146
149
|
}
|
|
147
|
-
else if (data instanceof Uint8Array) {
|
|
150
|
+
else if (data instanceof Uint8Array || data instanceof CustomSqliteValue) {
|
|
148
151
|
return data;
|
|
149
152
|
}
|
|
150
153
|
else if (data instanceof JsonContainer) {
|
|
151
154
|
return data.toString();
|
|
152
155
|
}
|
|
153
156
|
else if (typeof data == 'object') {
|
|
154
|
-
|
|
155
|
-
for (let key of Object.keys(data)) {
|
|
156
|
-
record[key] = filterJsonData(data[key]);
|
|
157
|
-
}
|
|
158
|
-
return JSONBig.stringify(record);
|
|
157
|
+
return new CustomObject(data, filterJsonData);
|
|
159
158
|
}
|
|
160
159
|
else {
|
|
161
160
|
return null;
|
|
162
161
|
}
|
|
163
162
|
}
|
|
163
|
+
export function applyValueContext(value, context) {
|
|
164
|
+
if (value instanceof CustomSqliteValue) {
|
|
165
|
+
return value.toSqliteValue(context);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
return value;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
export function applyRowContext(value, context) {
|
|
172
|
+
let record = {};
|
|
173
|
+
for (let key of Object.keys(value)) {
|
|
174
|
+
record[key] = applyValueContext(value[key], context);
|
|
175
|
+
}
|
|
176
|
+
return record;
|
|
177
|
+
}
|
|
164
178
|
/**
|
|
165
179
|
* Only use this for serializing bucket names. Bucket names should never be parsed except perhaps for debug purposes.
|
|
166
180
|
*
|
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;AAE5F,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
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.0.0-dev-
|
|
4
|
+
"version": "0.0.0-dev-20250827072023",
|
|
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.0.0-dev-
|
|
22
|
+
"@powersync/service-jsonbig": "^0.0.0-dev-20250827072023"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/node": "^22.16.2",
|
package/schema/sync_rules.json
CHANGED
|
@@ -145,6 +145,23 @@
|
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
|
+
},
|
|
149
|
+
"config": {
|
|
150
|
+
"type": "object",
|
|
151
|
+
"description": "Config declaring the compatibility level used to parse these definitions.",
|
|
152
|
+
"properties": {
|
|
153
|
+
"edition": {
|
|
154
|
+
"type": "integer",
|
|
155
|
+
"default": 1,
|
|
156
|
+
"minimum": 1,
|
|
157
|
+
"exclusiveMaximum": 3
|
|
158
|
+
},
|
|
159
|
+
"timestamps_iso8601": {
|
|
160
|
+
"type": "boolean",
|
|
161
|
+
"description": "Enabled by default starting from edition 2: Consistently renders timestamps with an ISO 8601-compatible format (previous versions used a space instead of a T to separate date and time)."
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
"additionalProperties": false
|
|
148
165
|
}
|
|
149
166
|
},
|
|
150
167
|
"anyOf": [
|