@powersync/service-sync-rules 0.17.10 → 0.18.1

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 (42) hide show
  1. package/README.md +126 -0
  2. package/dist/ExpressionType.d.ts +1 -0
  3. package/dist/ExpressionType.js +3 -0
  4. package/dist/ExpressionType.js.map +1 -1
  5. package/dist/SqlBucketDescriptor.d.ts +3 -3
  6. package/dist/SqlBucketDescriptor.js +2 -2
  7. package/dist/SqlBucketDescriptor.js.map +1 -1
  8. package/dist/SqlDataQuery.js +28 -7
  9. package/dist/SqlDataQuery.js.map +1 -1
  10. package/dist/SqlParameterQuery.d.ts +54 -12
  11. package/dist/SqlParameterQuery.js +106 -33
  12. package/dist/SqlParameterQuery.js.map +1 -1
  13. package/dist/SqlSyncRules.d.ts +2 -2
  14. package/dist/SqlSyncRules.js +21 -4
  15. package/dist/SqlSyncRules.js.map +1 -1
  16. package/dist/StaticSqlParameterQuery.d.ts +9 -6
  17. package/dist/StaticSqlParameterQuery.js +42 -12
  18. package/dist/StaticSqlParameterQuery.js.map +1 -1
  19. package/dist/index.d.ts +1 -0
  20. package/dist/index.js +1 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/json_schema.js +4 -0
  23. package/dist/json_schema.js.map +1 -1
  24. package/dist/request_functions.d.ts +19 -0
  25. package/dist/request_functions.js +47 -0
  26. package/dist/request_functions.js.map +1 -0
  27. package/dist/sql_filters.d.ts +38 -4
  28. package/dist/sql_filters.js +270 -177
  29. package/dist/sql_filters.js.map +1 -1
  30. package/dist/sql_functions.d.ts +30 -19
  31. package/dist/sql_functions.js +113 -17
  32. package/dist/sql_functions.js.map +1 -1
  33. package/dist/sql_support.d.ts +6 -3
  34. package/dist/sql_support.js +72 -35
  35. package/dist/sql_support.js.map +1 -1
  36. package/dist/types.d.ts +100 -12
  37. package/dist/types.js +18 -0
  38. package/dist/types.js.map +1 -1
  39. package/dist/utils.d.ts +1 -2
  40. package/dist/utils.js +0 -6
  41. package/dist/utils.js.map +1 -1
  42. package/package.json +6 -3
@@ -0,0 +1,19 @@
1
+ import { ExpressionType } from './ExpressionType.js';
2
+ import { RequestParameters, SqliteValue } from './types.js';
3
+ export interface SqlParameterFunction {
4
+ readonly debugName: string;
5
+ call: (parameters: RequestParameters) => SqliteValue;
6
+ getReturnType(): ExpressionType;
7
+ /** request.user_id(), request.jwt(), token_parameters.* */
8
+ usesAuthenticatedRequestParameters: boolean;
9
+ /** request.parameters(), user_parameters.* */
10
+ usesUnauthenticatedRequestParameters: boolean;
11
+ detail: string;
12
+ documentation: string;
13
+ }
14
+ export declare const REQUEST_FUNCTIONS_NAMED: {
15
+ parameters: SqlParameterFunction;
16
+ jwt: SqlParameterFunction;
17
+ user_id: SqlParameterFunction;
18
+ };
19
+ export declare const REQUEST_FUNCTIONS: Record<string, SqlParameterFunction>;
@@ -0,0 +1,47 @@
1
+ import { ExpressionType } from './ExpressionType.js';
2
+ const request_parameters = {
3
+ debugName: 'request.parameters',
4
+ call(parameters) {
5
+ return parameters.raw_user_parameters;
6
+ },
7
+ getReturnType() {
8
+ return ExpressionType.TEXT;
9
+ },
10
+ detail: 'Unauthenticated request parameters as JSON',
11
+ documentation: 'Returns parameters passed by the client as a JSON string. These parameters are not authenticated - any value can be passed in by the client.',
12
+ usesAuthenticatedRequestParameters: false,
13
+ usesUnauthenticatedRequestParameters: true
14
+ };
15
+ const request_jwt = {
16
+ debugName: 'request.jwt',
17
+ call(parameters) {
18
+ return parameters.raw_token_payload;
19
+ },
20
+ getReturnType() {
21
+ return ExpressionType.TEXT;
22
+ },
23
+ detail: 'JWT payload as JSON',
24
+ documentation: 'The JWT payload as a JSON string. This is always validated against trusted keys.',
25
+ usesAuthenticatedRequestParameters: true,
26
+ usesUnauthenticatedRequestParameters: false
27
+ };
28
+ const request_user_id = {
29
+ debugName: 'request.user_id',
30
+ call(parameters) {
31
+ return parameters.user_id;
32
+ },
33
+ getReturnType() {
34
+ return ExpressionType.TEXT;
35
+ },
36
+ detail: 'Authenticated user id',
37
+ documentation: "The id of the authenticated user.\nSame as `request.jwt() ->> 'sub'`.",
38
+ usesAuthenticatedRequestParameters: true,
39
+ usesUnauthenticatedRequestParameters: false
40
+ };
41
+ export const REQUEST_FUNCTIONS_NAMED = {
42
+ parameters: request_parameters,
43
+ jwt: request_jwt,
44
+ user_id: request_user_id
45
+ };
46
+ export const REQUEST_FUNCTIONS = REQUEST_FUNCTIONS_NAMED;
47
+ //# sourceMappingURL=request_functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request_functions.js","sourceRoot":"","sources":["../src/request_functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAerD,MAAM,kBAAkB,GAAyB;IAC/C,SAAS,EAAE,oBAAoB;IAC/B,IAAI,CAAC,UAA6B;QAChC,OAAO,UAAU,CAAC,mBAAmB,CAAC;IACxC,CAAC;IACD,aAAa;QACX,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B,CAAC;IACD,MAAM,EAAE,4CAA4C;IACpD,aAAa,EACX,8IAA8I;IAChJ,kCAAkC,EAAE,KAAK;IACzC,oCAAoC,EAAE,IAAI;CAC3C,CAAC;AAEF,MAAM,WAAW,GAAyB;IACxC,SAAS,EAAE,aAAa;IACxB,IAAI,CAAC,UAA6B;QAChC,OAAO,UAAU,CAAC,iBAAiB,CAAC;IACtC,CAAC;IACD,aAAa;QACX,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B,CAAC;IACD,MAAM,EAAE,qBAAqB;IAC7B,aAAa,EAAE,kFAAkF;IACjG,kCAAkC,EAAE,IAAI;IACxC,oCAAoC,EAAE,KAAK;CAC5C,CAAC;AAEF,MAAM,eAAe,GAAyB;IAC5C,SAAS,EAAE,iBAAiB;IAC5B,IAAI,CAAC,UAA6B;QAChC,OAAO,UAAU,CAAC,OAAO,CAAC;IAC5B,CAAC;IACD,aAAa;QACX,OAAO,cAAc,CAAC,IAAI,CAAC;IAC7B,CAAC;IACD,MAAM,EAAE,uBAAuB;IAC/B,aAAa,EAAE,uEAAuE;IACtF,kCAAkC,EAAE,IAAI;IACxC,oCAAoC,EAAE,KAAK;CAC5C,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,UAAU,EAAE,kBAAkB;IAC9B,GAAG,EAAE,WAAW;IAChB,OAAO,EAAE,eAAe;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAyC,uBAAuB,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import { Expr, ExprRef, NodeLocation, SelectedColumn } from 'pgsql-ast-parser';
2
- import { SqlRuleError } from './errors.js';
3
- import { ClauseError, CompiledClause, ParameterMatchClause, QuerySchema, StaticRowValueClause, TrueIfParametersMatch } from './types.js';
4
2
  import { nil } from 'pgsql-ast-parser/src/utils.js';
3
+ import { SqlRuleError } from './errors.js';
4
+ import { SqlFunction } from './sql_functions.js';
5
+ import { ClauseError, CompiledClause, ParameterMatchClause, ParameterValueClause, QuerySchema, RowValueClause, StaticValueClause, TrueIfParametersMatch } from './types.js';
5
6
  export declare const MATCH_CONST_FALSE: TrueIfParametersMatch;
6
7
  export declare const MATCH_CONST_TRUE: TrueIfParametersMatch;
7
8
  export interface SqlToolsOptions {
@@ -35,15 +36,27 @@ export interface SqlToolsOptions {
35
36
  * Only one parameter may be expanded.
36
37
  */
37
38
  supports_expanding_parameters?: boolean;
39
+ /**
40
+ * true if expressions on parameters are supported, e.g. upper(token_parameters.user_id)
41
+ */
42
+ supports_parameter_expressions?: boolean;
43
+ /**
44
+ * Schema for validations.
45
+ */
38
46
  schema?: QuerySchema;
39
47
  }
40
48
  export declare class SqlTools {
41
49
  default_table?: string;
42
50
  value_tables: string[];
51
+ /**
52
+ * ['bucket'] for data queries
53
+ * ['token_parameters', 'user_parameters'] for parameter queries
54
+ */
43
55
  parameter_tables: string[];
44
56
  sql: string;
45
57
  errors: SqlRuleError[];
46
58
  supports_expanding_parameters: boolean;
59
+ supports_parameter_expressions: boolean;
47
60
  schema?: QuerySchema;
48
61
  constructor(options: SqlToolsOptions);
49
62
  error(message: string, expr: NodeLocation | Expr | undefined): ClauseError;
@@ -55,7 +68,8 @@ export declare class SqlTools {
55
68
  * would make the expression true for the row.
56
69
  */
57
70
  compileWhereClause(where: Expr | nil): ParameterMatchClause;
58
- compileStaticExtractor(expr: Expr | nil): StaticRowValueClause | ClauseError;
71
+ compileRowValueExtractor(expr: Expr | nil): RowValueClause | ClauseError;
72
+ compileParameterValueExtractor(expr: Expr | nil): ParameterValueClause | StaticValueClause | ClauseError;
59
73
  /**
60
74
  * Given an expression, return a compiled clause.
61
75
  */
@@ -80,7 +94,7 @@ export declare class SqlTools {
80
94
  */
81
95
  isTableRef(expr: Expr): expr is ExprRef;
82
96
  private checkRef;
83
- getParameterRef(expr: Expr): string | undefined;
97
+ getParameterRefClause(expr: ExprRef): ParameterValueClause;
84
98
  refHasSchema(ref: ExprRef): boolean;
85
99
  /**
86
100
  * Get the table name from an expression.
@@ -88,4 +102,24 @@ export declare class SqlTools {
88
102
  * Only "value" tables are supported here, not parameter values.
89
103
  */
90
104
  getTableName(ref: ExprRef): string;
105
+ /**
106
+ * Given a function, compile a clause with the function over compiled arguments.
107
+ *
108
+ * For functions with multiple arguments, the following combinations are supported:
109
+ * fn(StaticValueClause, StaticValueClause) => StaticValueClause
110
+ * fn(ParameterValueClause, ParameterValueClause) => ParameterValueClause
111
+ * fn(RowValueClause, RowValueClause) => RowValueClause
112
+ * fn(ParameterValueClause, StaticValueClause) => ParameterValueClause
113
+ * fn(RowValueClause, StaticValueClause) => RowValueClause
114
+ *
115
+ * This is not supported, and will likely never be supported:
116
+ * fn(ParameterValueClause, RowValueClause) => error
117
+ *
118
+ * @param fnImpl The function or operator implementation
119
+ * @param argClauses The compiled argument clauses
120
+ * @param debugArgExpressions The original parsed expressions, for debug info only
121
+ * @returns a compiled function clause
122
+ */
123
+ composeFunction(fnImpl: SqlFunction, argClauses: CompiledClause[], debugArgExpressions: Expr[]): CompiledClause;
124
+ parameterFunction(): void;
91
125
  }