@powersync/service-sync-rules 0.20.0 → 0.21.0

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/dist/BaseSqlDataQuery.d.ts +35 -0
  2. package/dist/BaseSqlDataQuery.js +96 -0
  3. package/dist/BaseSqlDataQuery.js.map +1 -0
  4. package/dist/DartSchemaGenerator.d.ts +2 -2
  5. package/dist/DartSchemaGenerator.js +21 -4
  6. package/dist/DartSchemaGenerator.js.map +1 -1
  7. package/dist/ExpressionType.d.ts +7 -2
  8. package/dist/ExpressionType.js +24 -0
  9. package/dist/ExpressionType.js.map +1 -1
  10. package/dist/JsLegacySchemaGenerator.js.map +1 -1
  11. package/dist/SchemaGenerator.d.ts +4 -1
  12. package/dist/SchemaGenerator.js.map +1 -1
  13. package/dist/SqlBucketDescriptor.d.ts +4 -3
  14. package/dist/SqlBucketDescriptor.js +4 -4
  15. package/dist/SqlBucketDescriptor.js.map +1 -1
  16. package/dist/SqlDataQuery.d.ts +5 -35
  17. package/dist/SqlDataQuery.js +9 -98
  18. package/dist/SqlDataQuery.js.map +1 -1
  19. package/dist/SqlParameterQuery.d.ts +2 -2
  20. package/dist/SqlParameterQuery.js +14 -5
  21. package/dist/SqlParameterQuery.js.map +1 -1
  22. package/dist/SqlSyncRules.d.ts +16 -7
  23. package/dist/SqlSyncRules.js +58 -12
  24. package/dist/SqlSyncRules.js.map +1 -1
  25. package/dist/StaticSchema.d.ts +17 -2
  26. package/dist/StaticSchema.js +18 -23
  27. package/dist/StaticSchema.js.map +1 -1
  28. package/dist/StaticSqlParameterQuery.js.map +1 -1
  29. package/dist/TablePattern.d.ts +1 -2
  30. package/dist/TablePattern.js +0 -2
  31. package/dist/TablePattern.js.map +1 -1
  32. package/dist/TableQuerySchema.d.ts +2 -2
  33. package/dist/TableQuerySchema.js +4 -5
  34. package/dist/TableQuerySchema.js.map +1 -1
  35. package/dist/TableValuedFunctionSqlParameterQuery.d.ts +35 -0
  36. package/dist/TableValuedFunctionSqlParameterQuery.js +139 -0
  37. package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -0
  38. package/dist/TableValuedFunctions.d.ts +9 -0
  39. package/dist/TableValuedFunctions.js +37 -0
  40. package/dist/TableValuedFunctions.js.map +1 -0
  41. package/dist/TsSchemaGenerator.d.ts +2 -2
  42. package/dist/TsSchemaGenerator.js +21 -4
  43. package/dist/TsSchemaGenerator.js.map +1 -1
  44. package/dist/errors.js.map +1 -1
  45. package/dist/events/SqlEventDescriptor.d.ts +20 -0
  46. package/dist/events/SqlEventDescriptor.js +50 -0
  47. package/dist/events/SqlEventDescriptor.js.map +1 -0
  48. package/dist/events/SqlEventSourceQuery.d.ts +19 -0
  49. package/dist/events/SqlEventSourceQuery.js +118 -0
  50. package/dist/events/SqlEventSourceQuery.js.map +1 -0
  51. package/dist/index.d.ts +13 -11
  52. package/dist/index.js +13 -11
  53. package/dist/index.js.map +1 -1
  54. package/dist/json_schema.js +29 -0
  55. package/dist/json_schema.js.map +1 -1
  56. package/dist/request_functions.d.ts +2 -2
  57. package/dist/sql_filters.js +28 -24
  58. package/dist/sql_filters.js.map +1 -1
  59. package/dist/sql_functions.d.ts +5 -2
  60. package/dist/sql_functions.js +12 -5
  61. package/dist/sql_functions.js.map +1 -1
  62. package/dist/sql_support.d.ts +1 -3
  63. package/dist/sql_support.js +16 -23
  64. package/dist/sql_support.js.map +1 -1
  65. package/dist/types.d.ts +22 -8
  66. package/dist/types.js +9 -0
  67. package/dist/types.js.map +1 -1
  68. package/dist/utils.d.ts +1 -1
  69. package/dist/utils.js +4 -0
  70. package/dist/utils.js.map +1 -1
  71. package/package.json +7 -5
  72. package/schema/sync_rules.json +106 -0
@@ -0,0 +1,139 @@
1
+ import { SqlRuleError } from './errors.js';
2
+ import { SqlTools } from './sql_filters.js';
3
+ import { checkUnsupportedFeatures, isClauseError, isParameterValueClause, sqliteBool } from './sql_support.js';
4
+ import { TABLE_VALUED_FUNCTIONS } from './TableValuedFunctions.js';
5
+ import { getBucketId, isJsonValue } from './utils.js';
6
+ /**
7
+ * Represents a parameter query using a table-valued function.
8
+ *
9
+ * Right now this only supports json_each:
10
+ *
11
+ * SELECT json_each.value as v FROM json_each(request.parameters() -> 'array')
12
+ *
13
+ * This can currently not be combined with parameter table queries or multiple table-valued functions.
14
+ */
15
+ export class TableValuedFunctionSqlParameterQuery {
16
+ constructor() {
17
+ this.parameter_extractors = {};
18
+ this.errors = [];
19
+ }
20
+ static fromSql(descriptor_name, sql, call, q, options) {
21
+ const query = new TableValuedFunctionSqlParameterQuery();
22
+ query.errors.push(...checkUnsupportedFeatures(sql, q));
23
+ if (!(call.function.name in TABLE_VALUED_FUNCTIONS)) {
24
+ query.errors.push(new SqlRuleError(`Table-valued function ${call.function.name} is not defined.`, sql, call));
25
+ return query;
26
+ }
27
+ const callTable = call.alias?.name ?? call.function.name;
28
+ const callExpression = call.args[0];
29
+ const tools = new SqlTools({
30
+ table: callTable,
31
+ parameter_tables: ['token_parameters', 'user_parameters', callTable],
32
+ supports_parameter_expressions: true,
33
+ sql
34
+ });
35
+ const where = q.where;
36
+ const filter = tools.compileParameterValueExtractor(where);
37
+ const callClause = tools.compileParameterValueExtractor(callExpression);
38
+ const columns = q.columns ?? [];
39
+ const bucket_parameters = columns.map((column) => tools.getOutputName(column));
40
+ query.sql = sql;
41
+ query.descriptor_name = descriptor_name;
42
+ query.bucket_parameters = bucket_parameters;
43
+ query.columns = columns;
44
+ query.tools = tools;
45
+ query.function = TABLE_VALUED_FUNCTIONS[call.function.name];
46
+ query.callTableName = callTable;
47
+ if (!isClauseError(callClause)) {
48
+ query.callClause = callClause;
49
+ }
50
+ if (!isClauseError(filter)) {
51
+ query.filter = filter;
52
+ }
53
+ for (let column of columns) {
54
+ if (column.alias != null) {
55
+ tools.checkSpecificNameCase(column.alias);
56
+ }
57
+ const name = tools.getSpecificOutputName(column);
58
+ const extractor = tools.compileParameterValueExtractor(column.expr);
59
+ if (isClauseError(extractor)) {
60
+ // Error logged already
61
+ continue;
62
+ }
63
+ query.parameter_extractors[name] = extractor;
64
+ }
65
+ query.errors.push(...tools.errors);
66
+ if (query.usesDangerousRequestParameters && !options?.accept_potentially_dangerous_queries) {
67
+ let err = new SqlRuleError("Potentially dangerous query based on parameters set by the client. The client can send any value for these parameters so it's not a good place to do authorization.", sql);
68
+ err.type = 'warning';
69
+ query.errors.push(err);
70
+ }
71
+ return query;
72
+ }
73
+ getStaticBucketIds(parameters) {
74
+ if (this.filter == null || this.callClause == null) {
75
+ // Error in filter clause
76
+ return [];
77
+ }
78
+ const valueString = this.callClause.lookupParameterValue(parameters);
79
+ const rows = this.function.call([valueString]);
80
+ let total = [];
81
+ for (let row of rows) {
82
+ total.push(...this.getIndividualBucketIds(row, parameters));
83
+ }
84
+ return total;
85
+ }
86
+ getIndividualBucketIds(row, parameters) {
87
+ const mergedParams = {
88
+ raw_token_payload: parameters.raw_token_payload,
89
+ raw_user_parameters: parameters.raw_user_parameters,
90
+ user_id: parameters.user_id,
91
+ lookup: (table, column) => {
92
+ if (table == this.callTableName) {
93
+ return row[column];
94
+ }
95
+ else {
96
+ return parameters.lookup(table, column);
97
+ }
98
+ }
99
+ };
100
+ const filterValue = this.filter.lookupParameterValue(mergedParams);
101
+ if (sqliteBool(filterValue) === 0n) {
102
+ return [];
103
+ }
104
+ let result = {};
105
+ for (let name of this.bucket_parameters) {
106
+ const value = this.parameter_extractors[name].lookupParameterValue(mergedParams);
107
+ if (isJsonValue(value)) {
108
+ result[`bucket.${name}`] = value;
109
+ }
110
+ else {
111
+ throw new Error(`Invalid parameter value: ${value}`);
112
+ }
113
+ }
114
+ return [getBucketId(this.descriptor_name, this.bucket_parameters, result)];
115
+ }
116
+ get hasAuthenticatedBucketParameters() {
117
+ // select where request.jwt() ->> 'role' == 'authorized'
118
+ // we do not count this as a sufficient check
119
+ // const authenticatedFilter = this.filter!.usesAuthenticatedRequestParameters;
120
+ // select request.user_id() as user_id
121
+ const authenticatedExtractor = Object.values(this.parameter_extractors).find((clause) => isParameterValueClause(clause) && clause.usesAuthenticatedRequestParameters) != null;
122
+ // select value from json_each(request.jwt() ->> 'project_ids')
123
+ const authenticatedArgument = this.callClause?.usesAuthenticatedRequestParameters ?? false;
124
+ return authenticatedExtractor || authenticatedArgument;
125
+ }
126
+ get usesUnauthenticatedRequestParameters() {
127
+ // select where request.parameters() ->> 'include_comments'
128
+ const unauthenticatedFilter = this.filter?.usesUnauthenticatedRequestParameters;
129
+ // select request.parameters() ->> 'project_id'
130
+ const unauthenticatedExtractor = Object.values(this.parameter_extractors).find((clause) => isParameterValueClause(clause) && clause.usesUnauthenticatedRequestParameters) != null;
131
+ // select value from json_each(request.parameters() ->> 'project_ids')
132
+ const unauthenticatedArgument = this.callClause?.usesUnauthenticatedRequestParameters ?? false;
133
+ return unauthenticatedFilter || unauthenticatedExtractor || unauthenticatedArgument;
134
+ }
135
+ get usesDangerousRequestParameters() {
136
+ return this.usesUnauthenticatedRequestParameters && !this.hasAuthenticatedBucketParameters;
137
+ }
138
+ }
139
+ //# sourceMappingURL=TableValuedFunctionSqlParameterQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableValuedFunctionSqlParameterQuery.js","sourceRoot":"","sources":["../src/TableValuedFunctionSqlParameterQuery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { SqliteRow, SqliteValue } from './types.js';
2
+ export interface TableValuedFunction {
3
+ readonly name: string;
4
+ call: (args: SqliteValue[]) => SqliteRow[];
5
+ detail: string;
6
+ documentation: string;
7
+ }
8
+ export declare const JSON_EACH: TableValuedFunction;
9
+ export declare const TABLE_VALUED_FUNCTIONS: Record<string, TableValuedFunction>;
@@ -0,0 +1,37 @@
1
+ import { jsonValueToSqlite } from './utils.js';
2
+ export const JSON_EACH = {
3
+ name: 'json_each',
4
+ call(args) {
5
+ if (args.length != 1) {
6
+ throw new Error(`json_each expects 1 argument, got ${args.length}`);
7
+ }
8
+ const valueString = args[0];
9
+ if (valueString === null) {
10
+ return [];
11
+ }
12
+ else if (typeof valueString !== 'string') {
13
+ throw new Error(`Expected json_each to be called with a string, got ${valueString}`);
14
+ }
15
+ let values = [];
16
+ try {
17
+ values = JSON.parse(valueString);
18
+ }
19
+ catch (e) {
20
+ throw new Error('Expected JSON string');
21
+ }
22
+ if (!Array.isArray(values)) {
23
+ throw new Error('Expected an array');
24
+ }
25
+ return values.map((v) => {
26
+ return {
27
+ value: jsonValueToSqlite(v)
28
+ };
29
+ });
30
+ },
31
+ detail: 'Each element of a JSON array',
32
+ documentation: 'Returns each element of a JSON array as a separate row.'
33
+ };
34
+ export const TABLE_VALUED_FUNCTIONS = {
35
+ json_each: JSON_EACH
36
+ };
37
+ //# sourceMappingURL=TableValuedFunctions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableValuedFunctions.js","sourceRoot":"","sources":["../src/TableValuedFunctions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAS/C,MAAM,CAAC,MAAM,SAAS,GAAwB;IAC5C,IAAI,EAAE,WAAW;IACjB,IAAI,CAAC,IAAmB;QACtB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC;aAAM,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,sDAAsD,WAAW,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,MAAM,GAAsB,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,OAAO;gBACL,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;aAC5B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,EAAE,8BAA8B;IACtC,aAAa,EAAE,yDAAyD;CACzE,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAwC;IACzE,SAAS,EAAE,SAAS;CACrB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { SchemaGenerator } from './SchemaGenerator.js';
1
+ import { GenerateSchemaOptions, SchemaGenerator } from './SchemaGenerator.js';
2
2
  import { SqlSyncRules } from './SqlSyncRules.js';
3
3
  import { SourceSchema } from './types.js';
4
4
  export interface TsSchemaGeneratorOptions {
@@ -26,7 +26,7 @@ export declare class TsSchemaGenerator extends SchemaGenerator {
26
26
  readonly label: string;
27
27
  readonly language: TsSchemaLanguage;
28
28
  constructor(options?: TsSchemaGeneratorOptions);
29
- generate(source: SqlSyncRules, schema: SourceSchema): string;
29
+ generate(source: SqlSyncRules, schema: SourceSchema, options?: GenerateSchemaOptions): string;
30
30
  private generateTypeExports;
31
31
  private generateImports;
32
32
  private generateTable;
@@ -32,11 +32,11 @@ export class TsSchemaGenerator extends SchemaGenerator {
32
32
  this.label = 'JavaScript';
33
33
  }
34
34
  }
35
- generate(source, schema) {
35
+ generate(source, schema, options) {
36
36
  const tables = super.getAllTables(source, schema);
37
37
  return `${this.generateImports()}
38
38
 
39
- ${tables.map((table) => this.generateTable(table.name, table.columns)).join('\n\n')}
39
+ ${tables.map((table) => this.generateTable(table.name, table.columns, options)).join('\n\n')}
40
40
 
41
41
  export const AppSchema = new Schema({
42
42
  ${tables.map((table) => table.name).join(',\n ')}
@@ -65,11 +65,28 @@ ${this.generateTypeExports()}`;
65
65
  // OR: import { column, Schema, Table } from '@powersync/react-native';`;
66
66
  }
67
67
  }
68
- generateTable(name, columns) {
68
+ generateTable(name, columns, options) {
69
+ const generated = columns.map((c, i) => {
70
+ const last = i == columns.length - 1;
71
+ const base = this.generateColumn(c);
72
+ let withFormatting;
73
+ if (last) {
74
+ withFormatting = ` ${base}`;
75
+ }
76
+ else {
77
+ withFormatting = ` ${base},`;
78
+ }
79
+ if (options?.includeTypeComments && c.originalType != null) {
80
+ return `${withFormatting} // ${c.originalType}`;
81
+ }
82
+ else {
83
+ return withFormatting;
84
+ }
85
+ });
69
86
  return `const ${name} = new Table(
70
87
  {
71
88
  // id column (text) is automatically included
72
- ${columns.map((c) => this.generateColumn(c)).join(',\n ')}
89
+ ${generated.join('\n')}
73
90
  },
74
91
  { indexes: {} }
75
92
  );`;
@@ -1 +1 @@
1
- {"version":3,"file":"TsSchemaGenerator.js","sourceRoot":"","sources":["../src/TsSchemaGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AASvD,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,6BAAS,CAAA;IACT,gDAAgD;IAChD,6BAAS,CAAA;AACX,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAED,MAAM,CAAN,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,8BAAW,CAAA;IACX,8CAA2B,CAAA;IAC3B;;OAEG;IACH,gCAAa,CAAA;AACf,CAAC,EAPW,eAAe,KAAf,eAAe,QAO1B;AAED,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IAQpD,YAA4B,UAAoC,EAAE;QAChE,KAAK,EAAE,CAAC;QADkB,YAAO,GAAP,OAAO,CAA+B;QAGhE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,gBAAgB,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ,IAAI,gBAAgB,CAAC,EAAE,EAAE;YACxC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC;YACnC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;SAC3B;aAAM;YACL,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC;YACnC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;SAC3B;IACH,CAAC;IAED,QAAQ,CAAC,MAAoB,EAAE,MAAoB;QACjD,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAElD,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;;EAElC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;;;IAG/E,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;;;EAGjD,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;IAC7B,CAAC;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,QAAQ,IAAI,gBAAgB,CAAC,EAAE,EAAE;YACxC,OAAO,uDAAuD,CAAC;SAChE;aAAM;YACL,OAAO,EAAE,CAAC;SACX;IACH,CAAC;IAEO,eAAe;QACrB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;QACnD,IAAI,WAAW,IAAI,eAAe,CAAC,GAAG,EAAE;YACtC,OAAO,yDAAyD,CAAC;SAClE;aAAM,IAAI,WAAW,IAAI,eAAe,CAAC,WAAW,EAAE;YACrD,OAAO,kEAAkE,CAAC;SAC3E;aAAM;YACL,OAAO;wEAC2D,CAAC;SACpE;IACH,CAAC;IAEO,aAAa,CAAC,IAAY,EAAE,OAA2B;QAC7D,OAAO,SAAS,IAAI;;;MAGlB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;;;GAG7D,CAAC;IACF,CAAC;IAEO,cAAc,CAAC,MAAwB;QAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,EAAE;YAC3B,OAAO,GAAG,MAAM,CAAC,IAAI,eAAe,CAAC;SACtC;aAAM,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,EAAE;YAClC,OAAO,GAAG,MAAM,CAAC,IAAI,eAAe,CAAC;SACtC;aAAM,IAAI,CAAC,CAAC,SAAS,GAAG,YAAY,EAAE;YACrC,OAAO,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC;SACzC;aAAM;YACL,OAAO,GAAG,MAAM,CAAC,IAAI,eAAe,CAAC;SACtC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"TsSchemaGenerator.js","sourceRoot":"","sources":["../src/TsSchemaGenerator.ts"],"names":[],"mappings":"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"}
@@ -1 +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"}
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,CAAC;QAC9C,OAAO,QAAQ,CAAC,SAAS,CAAC;IAC5B,CAAC;SAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC;IAClB,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC;IACnB,CAAC;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,YACE,OAAe,EACR,GAAW,EAClB,QAA8B;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,QAAG,GAAH,GAAG,CAAQ;QAJpB,SAAI,GAAwB,OAAO,CAAC;QASlC,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,YACS,MAAa,EACpB,QAAwB;QAExB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAHf,WAAM,GAAN,MAAM,CAAO;QAHtB,SAAI,GAAwB,OAAO,CAAC;QAQlC,IAAI,QAAQ,IAAI,IAAI,IAAI,MAAM,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC;YACzD,QAAQ,GAAG;gBACT,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aACnB,CAAC;QACJ,CAAC;aAAM,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YAC5B,QAAQ,GAAG;gBACT,KAAK,EAAE,CAAC;gBACR,GAAG,EAAE,EAAE;aACR,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,YAAY,SAAS,IAAI,MAAM,YAAY,YAAY,EAAE,CAAC;YAClE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC;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,20 @@
1
+ import { IdSequence } from '../IdSequence.js';
2
+ import { SourceTableInterface } from '../SourceTableInterface.js';
3
+ import { QueryParseResult } from '../SqlBucketDescriptor.js';
4
+ import { SyncRulesOptions } from '../SqlSyncRules.js';
5
+ import { TablePattern } from '../TablePattern.js';
6
+ import { EvaluateRowOptions } from '../types.js';
7
+ import { EvaluatedEventRowWithErrors, SqlEventSourceQuery } from './SqlEventSourceQuery.js';
8
+ /**
9
+ * A sync rules event which is triggered from a SQL table change.
10
+ */
11
+ export declare class SqlEventDescriptor {
12
+ idSequence: IdSequence;
13
+ name: string;
14
+ source_queries: SqlEventSourceQuery[];
15
+ constructor(name: string, idSequence: IdSequence);
16
+ addSourceQuery(sql: string, options: SyncRulesOptions): QueryParseResult;
17
+ evaluateRowWithErrors(options: EvaluateRowOptions): EvaluatedEventRowWithErrors;
18
+ getSourceTables(): Set<TablePattern>;
19
+ tableTriggersEvent(table: SourceTableInterface): boolean;
20
+ }
@@ -0,0 +1,50 @@
1
+ import { SqlRuleError } from '../errors.js';
2
+ import { SqlEventSourceQuery } from './SqlEventSourceQuery.js';
3
+ /**
4
+ * A sync rules event which is triggered from a SQL table change.
5
+ */
6
+ export class SqlEventDescriptor {
7
+ constructor(name, idSequence) {
8
+ this.idSequence = idSequence;
9
+ this.source_queries = [];
10
+ this.name = name;
11
+ }
12
+ addSourceQuery(sql, options) {
13
+ const source = SqlEventSourceQuery.fromSql(this.name, sql, options);
14
+ // Each source query should be for a unique table
15
+ const existingSourceQuery = this.source_queries.find((q) => q.table == source.table);
16
+ if (existingSourceQuery) {
17
+ return {
18
+ parsed: false,
19
+ errors: [new SqlRuleError('Each payload query should query a unique table', sql)]
20
+ };
21
+ }
22
+ source.ruleId = this.idSequence.nextId();
23
+ this.source_queries.push(source);
24
+ return {
25
+ parsed: true,
26
+ errors: source.errors
27
+ };
28
+ }
29
+ evaluateRowWithErrors(options) {
30
+ // There should only be 1 payload result per source query
31
+ const matchingQuery = this.source_queries.find((q) => q.applies(options.sourceTable));
32
+ if (!matchingQuery) {
33
+ return {
34
+ errors: [{ error: `No marching source query found for table ${options.sourceTable.table}` }]
35
+ };
36
+ }
37
+ return matchingQuery.evaluateRowWithErrors(options.sourceTable, options.record);
38
+ }
39
+ getSourceTables() {
40
+ let result = new Set();
41
+ for (let query of this.source_queries) {
42
+ result.add(query.sourceTable);
43
+ }
44
+ return result;
45
+ }
46
+ tableTriggersEvent(table) {
47
+ return this.source_queries.some((query) => query.applies(table));
48
+ }
49
+ }
50
+ //# sourceMappingURL=SqlEventDescriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqlEventDescriptor.js","sourceRoot":"","sources":["../../src/events/SqlEventDescriptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAO5C,OAAO,EAA+B,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE5F;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAI7B,YACE,IAAY,EACL,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;QAJ/B,mBAAc,GAA0B,EAAE,CAAC;QAMzC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,cAAc,CAAC,GAAW,EAAE,OAAyB;QACnD,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAEpE,iDAAiD;QACjD,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QACrF,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,CAAC,IAAI,YAAY,CAAC,gDAAgD,EAAE,GAAG,CAAC,CAAC;aAClF,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjC,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC;IACJ,CAAC;IAED,qBAAqB,CAAC,OAA2B;QAC/C,yDAAyD;QACzD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;QACtF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO;gBACL,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,4CAA4C,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;aAC7F,CAAC;QACJ,CAAC;QAED,OAAO,aAAa,CAAC,qBAAqB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAClF,CAAC;IAED,eAAe;QACb,IAAI,MAAM,GAAG,IAAI,GAAG,EAAgB,CAAC;QACrC,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,WAAY,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kBAAkB,CAAC,KAA2B;QAC5C,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACnE,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import { BaseSqlDataQuery } from '../BaseSqlDataQuery.js';
2
+ import { SourceTableInterface } from '../SourceTableInterface.js';
3
+ import { SyncRulesOptions } from '../SqlSyncRules.js';
4
+ import { EvaluationError, SqliteJsonRow, SqliteRow } from '../types.js';
5
+ export type EvaluatedEventSourceRow = {
6
+ data: SqliteJsonRow;
7
+ ruleId?: string;
8
+ };
9
+ export type EvaluatedEventRowWithErrors = {
10
+ result?: EvaluatedEventSourceRow;
11
+ errors: EvaluationError[];
12
+ };
13
+ /**
14
+ * Defines how a Replicated Row is mapped to source parameters for events.
15
+ */
16
+ export declare class SqlEventSourceQuery extends BaseSqlDataQuery {
17
+ static fromSql(descriptor_name: string, sql: string, options: SyncRulesOptions): SqlEventSourceQuery;
18
+ evaluateRowWithErrors(table: SourceTableInterface, row: SqliteRow): EvaluatedEventRowWithErrors;
19
+ }
@@ -0,0 +1,118 @@
1
+ import { parse } from 'pgsql-ast-parser';
2
+ import { BaseSqlDataQuery } from '../BaseSqlDataQuery.js';
3
+ import { SqlRuleError } from '../errors.js';
4
+ import { ExpressionType } from '../ExpressionType.js';
5
+ import { SqlTools } from '../sql_filters.js';
6
+ import { checkUnsupportedFeatures, isClauseError } from '../sql_support.js';
7
+ import { TablePattern } from '../TablePattern.js';
8
+ import { TableQuerySchema } from '../TableQuerySchema.js';
9
+ import { isSelectStatement } from '../utils.js';
10
+ /**
11
+ * Defines how a Replicated Row is mapped to source parameters for events.
12
+ */
13
+ export class SqlEventSourceQuery extends BaseSqlDataQuery {
14
+ static fromSql(descriptor_name, sql, options) {
15
+ const parsed = parse(sql, { locationTracking: true });
16
+ const rows = new SqlEventSourceQuery();
17
+ const schema = options.schema;
18
+ if (parsed.length > 1) {
19
+ throw new SqlRuleError('Only a single SELECT statement is supported', sql, parsed[1]?._location);
20
+ }
21
+ const q = parsed[0];
22
+ if (!isSelectStatement(q)) {
23
+ throw new SqlRuleError('Only SELECT statements are supported', sql, q._location);
24
+ }
25
+ rows.errors.push(...checkUnsupportedFeatures(sql, q));
26
+ if (q.from == null || q.from.length != 1 || q.from[0].type != 'table') {
27
+ throw new SqlRuleError('Must SELECT from a single table', sql, q.from?.[0]._location);
28
+ }
29
+ const tableRef = q.from?.[0].name;
30
+ if (tableRef?.name == null) {
31
+ throw new SqlRuleError('Must SELECT from a single table', sql, q.from?.[0]._location);
32
+ }
33
+ const alias = tableRef.alias ?? tableRef.name;
34
+ const sourceTable = new TablePattern(tableRef.schema ?? options.defaultSchema, tableRef.name);
35
+ let querySchema = undefined;
36
+ if (schema) {
37
+ const tables = schema.getTables(sourceTable);
38
+ if (tables.length == 0) {
39
+ const e = new SqlRuleError(`Table ${sourceTable.schema}.${sourceTable.tablePattern} not found`, sql, q.from?.[0]?._location);
40
+ e.type = 'warning';
41
+ rows.errors.push(e);
42
+ }
43
+ else {
44
+ querySchema = new TableQuerySchema(tables, alias);
45
+ }
46
+ }
47
+ const tools = new SqlTools({
48
+ table: alias,
49
+ parameter_tables: [],
50
+ value_tables: [alias],
51
+ sql,
52
+ schema: querySchema
53
+ });
54
+ rows.sourceTable = sourceTable;
55
+ rows.table = alias;
56
+ rows.sql = sql;
57
+ rows.descriptor_name = descriptor_name;
58
+ rows.columns = q.columns ?? [];
59
+ rows.tools = tools;
60
+ for (let column of q.columns ?? []) {
61
+ const name = tools.getOutputName(column);
62
+ if (name != '*') {
63
+ const clause = tools.compileRowValueExtractor(column.expr);
64
+ if (isClauseError(clause)) {
65
+ // Error logged already
66
+ continue;
67
+ }
68
+ rows.extractors.push({
69
+ extract: (tables, output) => {
70
+ output[name] = clause.evaluate(tables);
71
+ },
72
+ getTypes(schema, into) {
73
+ const def = clause.getColumnDefinition(schema);
74
+ into[name] = { name, type: def?.type ?? ExpressionType.NONE, originalType: def?.originalType };
75
+ }
76
+ });
77
+ }
78
+ else {
79
+ rows.extractors.push({
80
+ extract: (tables, output) => {
81
+ const row = tables[alias];
82
+ for (let key in row) {
83
+ if (key.startsWith('_')) {
84
+ continue;
85
+ }
86
+ output[key] ?? (output[key] = row[key]);
87
+ }
88
+ },
89
+ getTypes(schema, into) {
90
+ var _a;
91
+ for (let column of schema.getColumns(alias)) {
92
+ into[_a = column.name] ?? (into[_a] = column);
93
+ }
94
+ }
95
+ });
96
+ }
97
+ }
98
+ rows.errors.push(...tools.errors);
99
+ return rows;
100
+ }
101
+ evaluateRowWithErrors(table, row) {
102
+ try {
103
+ const tables = { [this.table]: this.addSpecialParameters(table, row) };
104
+ const data = this.transformRow(tables);
105
+ return {
106
+ result: {
107
+ data,
108
+ ruleId: this.ruleId
109
+ },
110
+ errors: []
111
+ };
112
+ }
113
+ catch (e) {
114
+ return { errors: [e.message ?? `Evaluating data query failed`] };
115
+ }
116
+ }
117
+ }
118
+ //# sourceMappingURL=SqlEventSourceQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqlEventSourceQuery.js","sourceRoot":"","sources":["../../src/events/SqlEventSourceQuery.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,20 +1,22 @@
1
+ export * from './DartSchemaGenerator.js';
1
2
  export * from './errors.js';
3
+ export * from './events/SqlEventDescriptor.js';
4
+ export * from './events/SqlEventSourceQuery.js';
5
+ export * from './ExpressionType.js';
6
+ export * from './generators.js';
2
7
  export * from './IdSequence.js';
8
+ export * from './JsLegacySchemaGenerator.js';
9
+ export * from './json_schema.js';
10
+ export * from './request_functions.js';
11
+ export * from './SchemaGenerator.js';
3
12
  export * from './SourceTableInterface.js';
4
13
  export * from './sql_filters.js';
5
14
  export * from './sql_functions.js';
15
+ export * from './SqlDataQuery.js';
16
+ export * from './SqlParameterQuery.js';
6
17
  export * from './SqlSyncRules.js';
18
+ export * from './StaticSchema.js';
7
19
  export * from './TablePattern.js';
20
+ export * from './TsSchemaGenerator.js';
8
21
  export * from './types.js';
9
22
  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 './JsLegacySchemaGenerator.js';
17
- export * from './TsSchemaGenerator.js';
18
- export * from './generators.js';
19
- export * from './SqlDataQuery.js';
20
- export * from './request_functions.js';
package/dist/index.js CHANGED
@@ -1,21 +1,23 @@
1
+ export * from './DartSchemaGenerator.js';
1
2
  export * from './errors.js';
3
+ export * from './events/SqlEventDescriptor.js';
4
+ export * from './events/SqlEventSourceQuery.js';
5
+ export * from './ExpressionType.js';
6
+ export * from './generators.js';
2
7
  export * from './IdSequence.js';
8
+ export * from './JsLegacySchemaGenerator.js';
9
+ export * from './json_schema.js';
10
+ export * from './request_functions.js';
11
+ export * from './SchemaGenerator.js';
3
12
  export * from './SourceTableInterface.js';
4
13
  export * from './sql_filters.js';
5
14
  export * from './sql_functions.js';
15
+ export * from './SqlDataQuery.js';
16
+ export * from './SqlParameterQuery.js';
6
17
  export * from './SqlSyncRules.js';
18
+ export * from './StaticSchema.js';
7
19
  export * from './TablePattern.js';
20
+ export * from './TsSchemaGenerator.js';
8
21
  export * from './types.js';
9
22
  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 './JsLegacySchemaGenerator.js';
17
- export * from './TsSchemaGenerator.js';
18
- export * from './generators.js';
19
- export * from './SqlDataQuery.js';
20
- export * from './request_functions.js';
21
23
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +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,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -43,6 +43,35 @@ export const syncRulesSchema = {
43
43
  additionalProperties: false
44
44
  }
45
45
  }
46
+ },
47
+ event_definitions: {
48
+ type: 'object',
49
+ description: 'Record of sync replication event definitions',
50
+ examples: [
51
+ {
52
+ write_checkpoints: {
53
+ payloads: ['select user_id, client_id, checkpoint from checkpoints']
54
+ }
55
+ }
56
+ ],
57
+ patternProperties: {
58
+ '.*': {
59
+ type: ['object'],
60
+ required: ['payloads'],
61
+ examples: [{ payloads: ['select user_id, client_id, checkpoint from checkpoints'] }],
62
+ properties: {
63
+ payloads: {
64
+ description: 'Queries which extract event payload fields from replicated table rows.',
65
+ type: 'array',
66
+ items: {
67
+ type: 'string'
68
+ }
69
+ },
70
+ additionalProperties: false,
71
+ uniqueItems: true
72
+ }
73
+ }
74
+ }
46
75
  }
47
76
  },
48
77
  required: ['bucket_definitions'],
@@ -1 +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,oCAAoC,EAAE;4BACpC,WAAW,EAAE,6DAA6D;4BAC1E,IAAI,EAAE,SAAS;yBAChB;wBACD,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"}
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,oCAAoC,EAAE;4BACpC,WAAW,EAAE,6DAA6D;4BAC1E,IAAI,EAAE,SAAS;yBAChB;wBACD,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;QACD,iBAAiB,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,8CAA8C;YAC3D,QAAQ,EAAE;gBACR;oBACE,iBAAiB,EAAE;wBACjB,QAAQ,EAAE,CAAC,wDAAwD,CAAC;qBACrE;iBACF;aACF;YACD,iBAAiB,EAAE;gBACjB,IAAI,EAAE;oBACJ,IAAI,EAAE,CAAC,QAAQ,CAAC;oBAChB,QAAQ,EAAE,CAAC,UAAU,CAAC;oBACtB,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,wDAAwD,CAAC,EAAE,CAAC;oBACpF,UAAU,EAAE;wBACV,QAAQ,EAAE;4BACR,WAAW,EAAE,wEAAwE;4BACrF,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;6BACf;yBACF;wBACD,oBAAoB,EAAE,KAAK;wBAC3B,WAAW,EAAE,IAAI;qBAClB;iBACF;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"}