@powersync/service-sync-rules 0.17.10

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 (72) hide show
  1. package/LICENSE +67 -0
  2. package/README.md +3 -0
  3. package/dist/DartSchemaGenerator.d.ts +12 -0
  4. package/dist/DartSchemaGenerator.js +39 -0
  5. package/dist/DartSchemaGenerator.js.map +1 -0
  6. package/dist/ExpressionType.d.ts +33 -0
  7. package/dist/ExpressionType.js +61 -0
  8. package/dist/ExpressionType.js.map +1 -0
  9. package/dist/IdSequence.d.ts +4 -0
  10. package/dist/IdSequence.js +9 -0
  11. package/dist/IdSequence.js.map +1 -0
  12. package/dist/JsSchemaGenerator.d.ts +12 -0
  13. package/dist/JsSchemaGenerator.js +42 -0
  14. package/dist/JsSchemaGenerator.js.map +1 -0
  15. package/dist/SchemaGenerator.d.ts +14 -0
  16. package/dist/SchemaGenerator.js +26 -0
  17. package/dist/SchemaGenerator.js.map +1 -0
  18. package/dist/SourceTableInterface.d.ts +5 -0
  19. package/dist/SourceTableInterface.js +2 -0
  20. package/dist/SourceTableInterface.js.map +1 -0
  21. package/dist/SqlBucketDescriptor.d.ts +37 -0
  22. package/dist/SqlBucketDescriptor.js +111 -0
  23. package/dist/SqlBucketDescriptor.js.map +1 -0
  24. package/dist/SqlDataQuery.d.ts +39 -0
  25. package/dist/SqlDataQuery.js +237 -0
  26. package/dist/SqlDataQuery.js.map +1 -0
  27. package/dist/SqlParameterQuery.d.ts +43 -0
  28. package/dist/SqlParameterQuery.js +238 -0
  29. package/dist/SqlParameterQuery.js.map +1 -0
  30. package/dist/SqlSyncRules.d.ts +52 -0
  31. package/dist/SqlSyncRules.js +247 -0
  32. package/dist/SqlSyncRules.js.map +1 -0
  33. package/dist/StaticSchema.d.ts +26 -0
  34. package/dist/StaticSchema.js +61 -0
  35. package/dist/StaticSchema.js.map +1 -0
  36. package/dist/StaticSqlParameterQuery.d.ts +24 -0
  37. package/dist/StaticSqlParameterQuery.js +66 -0
  38. package/dist/StaticSqlParameterQuery.js.map +1 -0
  39. package/dist/TablePattern.d.ts +17 -0
  40. package/dist/TablePattern.js +56 -0
  41. package/dist/TablePattern.js.map +1 -0
  42. package/dist/TableQuerySchema.d.ts +9 -0
  43. package/dist/TableQuerySchema.js +34 -0
  44. package/dist/TableQuerySchema.js.map +1 -0
  45. package/dist/errors.d.ts +22 -0
  46. package/dist/errors.js +58 -0
  47. package/dist/errors.js.map +1 -0
  48. package/dist/generators.d.ts +6 -0
  49. package/dist/generators.js +7 -0
  50. package/dist/generators.js.map +1 -0
  51. package/dist/index.d.ts +18 -0
  52. package/dist/index.js +19 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/json_schema.d.ts +3 -0
  55. package/dist/json_schema.js +48 -0
  56. package/dist/json_schema.js.map +1 -0
  57. package/dist/sql_filters.d.ts +91 -0
  58. package/dist/sql_filters.js +506 -0
  59. package/dist/sql_filters.js.map +1 -0
  60. package/dist/sql_functions.d.ts +54 -0
  61. package/dist/sql_functions.js +773 -0
  62. package/dist/sql_functions.js.map +1 -0
  63. package/dist/sql_support.d.ts +22 -0
  64. package/dist/sql_support.js +213 -0
  65. package/dist/sql_support.js.map +1 -0
  66. package/dist/types.d.ts +174 -0
  67. package/dist/types.js +10 -0
  68. package/dist/types.js.map +1 -0
  69. package/dist/utils.d.ts +45 -0
  70. package/dist/utils.js +173 -0
  71. package/dist/utils.js.map +1 -0
  72. package/package.json +29 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAO7B,SAAS,WAAW,CAAC,QAA8B;IACjD,IAAI,QAAQ,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC7C,OAAO,QAAQ,CAAC,SAAS,CAAC;KAC3B;SAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE;QAC/B,OAAO,QAAQ,CAAC;KACjB;SAAM;QACL,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAED,SAAS,UAAU,CAAC,QAA8B;IAChD,OAAO,CACL,QAAQ,IAAI,IAAI;QAChB,OAAQ,QAAyB,CAAC,KAAK,IAAI,QAAQ;QACnD,OAAQ,QAAyB,CAAC,GAAG,IAAI,QAAQ,CAClD,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,YAAa,SAAQ,KAAK;IAIrC,YAAY,OAAe,EAAS,GAAW,EAAE,QAA8B;QAC7E,KAAK,CAAC,OAAO,CAAC,CAAC;QADmB,QAAG,GAAH,GAAG,CAAQ;QAF/C,SAAI,GAAwB,OAAO,CAAC;QAKlC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IACzE,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,KAAK;IAIlC,YAAmB,MAAa,EAAE,QAAwB;QACxD,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QADL,WAAM,GAAN,MAAM,CAAO;QAFhC,SAAI,GAAwB,OAAO,CAAC;QAKlC,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,YAAY,IAAI,CAAC,SAAS,EAAE;YACxD,QAAQ,GAAG;gBACT,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aACnB,CAAC;SACH;aAAM,IAAI,QAAQ,IAAI,IAAI,EAAE;YAC3B,QAAQ,GAAG;gBACT,KAAK,EAAE,CAAC;gBACR,GAAG,EAAE,EAAE;aACR,CAAC;SACH;QAED,IAAI,MAAM,YAAY,SAAS,IAAI,MAAM,YAAY,YAAY,EAAE;YACjE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;SACzB;QACD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,MAAM,CAAC,gBAAgB,CAAC,MAAmB;QACzC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,YAAmB,MAAmB;QACpC,KAAK,CAAC,eAAe,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAD/B,WAAM,GAAN,MAAM,CAAa;IAEtC,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import { DartSchemaGenerator } from './DartSchemaGenerator.js';
2
+ import { JsSchemaGenerator } from './JsSchemaGenerator.js';
3
+ export declare const schemaGenerators: {
4
+ js: JsSchemaGenerator;
5
+ dart: DartSchemaGenerator;
6
+ };
@@ -0,0 +1,7 @@
1
+ import { DartSchemaGenerator } from './DartSchemaGenerator.js';
2
+ import { JsSchemaGenerator } from './JsSchemaGenerator.js';
3
+ export const schemaGenerators = {
4
+ js: new JsSchemaGenerator(),
5
+ dart: new DartSchemaGenerator()
6
+ };
7
+ //# sourceMappingURL=generators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generators.js","sourceRoot":"","sources":["../src/generators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,EAAE,EAAE,IAAI,iBAAiB,EAAE;IAC3B,IAAI,EAAE,IAAI,mBAAmB,EAAE;CAChC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export * from './errors.js';
2
+ export * from './IdSequence.js';
3
+ export * from './SourceTableInterface.js';
4
+ export * from './sql_filters.js';
5
+ export * from './sql_functions.js';
6
+ export * from './SqlSyncRules.js';
7
+ export * from './TablePattern.js';
8
+ export * from './types.js';
9
+ export * from './utils.js';
10
+ export * from './SqlParameterQuery.js';
11
+ export * from './json_schema.js';
12
+ export * from './StaticSchema.js';
13
+ export * from './ExpressionType.js';
14
+ export * from './SchemaGenerator.js';
15
+ export * from './DartSchemaGenerator.js';
16
+ export * from './JsSchemaGenerator.js';
17
+ export * from './generators.js';
18
+ export * from './SqlDataQuery.js';
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ export * from './errors.js';
2
+ export * from './IdSequence.js';
3
+ export * from './SourceTableInterface.js';
4
+ export * from './sql_filters.js';
5
+ export * from './sql_functions.js';
6
+ export * from './SqlSyncRules.js';
7
+ export * from './TablePattern.js';
8
+ export * from './types.js';
9
+ export * from './utils.js';
10
+ export * from './SqlParameterQuery.js';
11
+ export * from './json_schema.js';
12
+ export * from './StaticSchema.js';
13
+ export * from './ExpressionType.js';
14
+ export * from './SchemaGenerator.js';
15
+ export * from './DartSchemaGenerator.js';
16
+ export * from './JsSchemaGenerator.js';
17
+ export * from './generators.js';
18
+ export * from './SqlDataQuery.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import ajvModule from 'ajv';
2
+ export declare const syncRulesSchema: ajvModule.Schema;
3
+ export declare const validateSyncRulesSchema: any;
@@ -0,0 +1,48 @@
1
+ import ajvModule from 'ajv';
2
+ // Hack to make this work both in NodeJS and a browser
3
+ const Ajv = ajvModule.default ?? ajvModule;
4
+ const ajv = new Ajv({ allErrors: true, verbose: true });
5
+ export const syncRulesSchema = {
6
+ type: 'object',
7
+ properties: {
8
+ bucket_definitions: {
9
+ type: 'object',
10
+ description: 'List of bucket definitions',
11
+ examples: [{ global: { data: 'select * from mytable' } }],
12
+ patternProperties: {
13
+ '.*': {
14
+ type: 'object',
15
+ required: ['data'],
16
+ examples: [{ data: ['select * from mytable'] }],
17
+ properties: {
18
+ parameters: {
19
+ description: 'Parameter query(ies)',
20
+ anyOf: [
21
+ { type: 'string', description: 'Parameter query' },
22
+ {
23
+ type: 'array',
24
+ description: 'Parameter queries',
25
+ items: {
26
+ type: 'string'
27
+ }
28
+ }
29
+ ]
30
+ },
31
+ data: {
32
+ type: 'array',
33
+ description: 'Data queries',
34
+ items: {
35
+ type: 'string'
36
+ }
37
+ }
38
+ },
39
+ additionalProperties: false
40
+ }
41
+ }
42
+ }
43
+ },
44
+ required: ['bucket_definitions'],
45
+ additionalProperties: false
46
+ };
47
+ export const validateSyncRulesSchema = ajv.compile(syncRulesSchema);
48
+ //# sourceMappingURL=json_schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json_schema.js","sourceRoot":"","sources":["../src/json_schema.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,KAAK,CAAC;AAC5B,sDAAsD;AACtD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC;AAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAExD,MAAM,CAAC,MAAM,eAAe,GAAqB;IAC/C,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,kBAAkB,EAAE;YAClB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,4BAA4B;YACzC,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,CAAC;YACzD,iBAAiB,EAAE;gBACjB,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,CAAC,MAAM,CAAC;oBAClB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,uBAAuB,CAAC,EAAE,CAAC;oBAC/C,UAAU,EAAE;wBACV,UAAU,EAAE;4BACV,WAAW,EAAE,sBAAsB;4BACnC,KAAK,EAAE;gCACL,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;gCAClD;oCACE,IAAI,EAAE,OAAO;oCACb,WAAW,EAAE,mBAAmB;oCAChC,KAAK,EAAE;wCACL,IAAI,EAAE,QAAQ;qCACf;iCACF;6BACF;yBACF;wBACD,IAAI,EAAE;4BACJ,IAAI,EAAE,OAAO;4BACb,WAAW,EAAE,cAAc;4BAC3B,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;6BACf;yBACF;qBACF;oBACD,oBAAoB,EAAE,KAAK;iBAC5B;aACF;SACF;KACF;IACD,QAAQ,EAAE,CAAC,oBAAoB,CAAC;IAChC,oBAAoB,EAAE,KAAK;CACnB,CAAC;AAEX,MAAM,CAAC,MAAM,uBAAuB,GAAQ,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC"}
@@ -0,0 +1,91 @@
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
+ import { nil } from 'pgsql-ast-parser/src/utils.js';
5
+ export declare const MATCH_CONST_FALSE: TrueIfParametersMatch;
6
+ export declare const MATCH_CONST_TRUE: TrueIfParametersMatch;
7
+ export interface SqlToolsOptions {
8
+ /**
9
+ * Default table name, if any. I.e. SELECT FROM <table>.
10
+ *
11
+ * Used for to determine the table when using bare column names.
12
+ */
13
+ table?: string;
14
+ /**
15
+ * Set of tables used for FilterParameters.
16
+ *
17
+ * This is tables that can be used to filter the data on, e.g.:
18
+ * "bucket" (bucket parameters for data query)
19
+ * "token_parameters" (token parameters for parameter query)
20
+ */
21
+ parameter_tables?: string[];
22
+ /**
23
+ * Set of tables used in QueryParameters.
24
+ *
25
+ * If not specified, defaults to [table].
26
+ */
27
+ value_tables?: string[];
28
+ /**
29
+ * For debugging / error messages.
30
+ */
31
+ sql: string;
32
+ /**
33
+ * true if values in parameter tables can be expanded, i.e. `WHERE value IN parameters.something`.
34
+ *
35
+ * Only one parameter may be expanded.
36
+ */
37
+ supports_expanding_parameters?: boolean;
38
+ schema?: QuerySchema;
39
+ }
40
+ export declare class SqlTools {
41
+ default_table?: string;
42
+ value_tables: string[];
43
+ parameter_tables: string[];
44
+ sql: string;
45
+ errors: SqlRuleError[];
46
+ supports_expanding_parameters: boolean;
47
+ schema?: QuerySchema;
48
+ constructor(options: SqlToolsOptions);
49
+ error(message: string, expr: NodeLocation | Expr | undefined): ClauseError;
50
+ warn(message: string, expr: NodeLocation | Expr | undefined): void;
51
+ /**
52
+ * Compile the where clause into a ParameterMatchClause.
53
+ *
54
+ * A ParameterMatchClause takes a data row, and returns filter values that
55
+ * would make the expression true for the row.
56
+ */
57
+ compileWhereClause(where: Expr | nil): ParameterMatchClause;
58
+ compileStaticExtractor(expr: Expr | nil): StaticRowValueClause | ClauseError;
59
+ /**
60
+ * Given an expression, return a compiled clause.
61
+ */
62
+ compileClause(expr: Expr | nil): CompiledClause;
63
+ /**
64
+ * "some_column" => "some_column"
65
+ * "table.some_column" => "some_column".
66
+ * "some_function() AS some_column" => "some_column"
67
+ * "some_function() some_column" => "some_column"
68
+ * "some_function()" => error
69
+ */
70
+ getOutputName(column: SelectedColumn): string;
71
+ getSpecificOutputName(column: SelectedColumn): string;
72
+ /**
73
+ * Check if an expression is a parameter_table reference.
74
+ */
75
+ isParameterRef(expr: Expr): expr is ExprRef;
76
+ /**
77
+ * Check if an expression is a value_tables reference.
78
+ *
79
+ * This means the expression can be evaluated directly on a value row.
80
+ */
81
+ isTableRef(expr: Expr): expr is ExprRef;
82
+ private checkRef;
83
+ getParameterRef(expr: Expr): string | undefined;
84
+ refHasSchema(ref: ExprRef): boolean;
85
+ /**
86
+ * Get the table name from an expression.
87
+ *
88
+ * Only "value" tables are supported here, not parameter values.
89
+ */
90
+ getTableName(ref: ExprRef): string;
91
+ }