@powersync/service-sync-rules 0.20.0 → 0.22.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.
- package/dist/BaseSqlDataQuery.d.ts +35 -0
- package/dist/BaseSqlDataQuery.js +96 -0
- package/dist/BaseSqlDataQuery.js.map +1 -0
- package/dist/DartSchemaGenerator.d.ts +2 -2
- package/dist/DartSchemaGenerator.js +21 -4
- package/dist/DartSchemaGenerator.js.map +1 -1
- package/dist/ExpressionType.d.ts +7 -2
- package/dist/ExpressionType.js +24 -0
- package/dist/ExpressionType.js.map +1 -1
- package/dist/JsLegacySchemaGenerator.js.map +1 -1
- package/dist/SchemaGenerator.d.ts +4 -1
- package/dist/SchemaGenerator.js.map +1 -1
- package/dist/SqlBucketDescriptor.d.ts +4 -3
- package/dist/SqlBucketDescriptor.js +4 -4
- package/dist/SqlBucketDescriptor.js.map +1 -1
- package/dist/SqlDataQuery.d.ts +5 -35
- package/dist/SqlDataQuery.js +9 -98
- package/dist/SqlDataQuery.js.map +1 -1
- package/dist/SqlParameterQuery.d.ts +2 -2
- package/dist/SqlParameterQuery.js +14 -5
- package/dist/SqlParameterQuery.js.map +1 -1
- package/dist/SqlSyncRules.d.ts +16 -7
- package/dist/SqlSyncRules.js +58 -12
- package/dist/SqlSyncRules.js.map +1 -1
- package/dist/StaticSchema.d.ts +17 -2
- package/dist/StaticSchema.js +18 -23
- package/dist/StaticSchema.js.map +1 -1
- package/dist/StaticSqlParameterQuery.js.map +1 -1
- package/dist/TablePattern.d.ts +1 -2
- package/dist/TablePattern.js +0 -2
- package/dist/TablePattern.js.map +1 -1
- package/dist/TableQuerySchema.d.ts +2 -2
- package/dist/TableQuerySchema.js +4 -5
- package/dist/TableQuerySchema.js.map +1 -1
- package/dist/TableValuedFunctionSqlParameterQuery.d.ts +35 -0
- package/dist/TableValuedFunctionSqlParameterQuery.js +139 -0
- package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -0
- package/dist/TableValuedFunctions.d.ts +9 -0
- package/dist/TableValuedFunctions.js +37 -0
- package/dist/TableValuedFunctions.js.map +1 -0
- package/dist/TsSchemaGenerator.d.ts +2 -2
- package/dist/TsSchemaGenerator.js +21 -4
- package/dist/TsSchemaGenerator.js.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/events/SqlEventDescriptor.d.ts +20 -0
- package/dist/events/SqlEventDescriptor.js +50 -0
- package/dist/events/SqlEventDescriptor.js.map +1 -0
- package/dist/events/SqlEventSourceQuery.d.ts +19 -0
- package/dist/events/SqlEventSourceQuery.js +118 -0
- package/dist/events/SqlEventSourceQuery.js.map +1 -0
- package/dist/index.d.ts +13 -11
- package/dist/index.js +13 -11
- package/dist/index.js.map +1 -1
- package/dist/json_schema.js +29 -0
- package/dist/json_schema.js.map +1 -1
- package/dist/request_functions.d.ts +2 -2
- package/dist/sql_filters.js +28 -24
- package/dist/sql_filters.js.map +1 -1
- package/dist/sql_functions.d.ts +6 -2
- package/dist/sql_functions.js +33 -5
- package/dist/sql_functions.js.map +1 -1
- package/dist/sql_support.d.ts +1 -3
- package/dist/sql_support.js +16 -23
- package/dist/sql_support.js.map +1 -1
- package/dist/types.d.ts +22 -8
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +4 -0
- package/dist/utils.js.map +1 -1
- package/package.json +9 -5
- 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
|
-
|
|
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,
|
|
1
|
+
{"version":3,"file":"TsSchemaGenerator.js","sourceRoot":"","sources":["../src/TsSchemaGenerator.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.js.map
CHANGED
|
@@ -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;
|
|
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,
|
|
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"}
|
package/dist/json_schema.js
CHANGED
|
@@ -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'],
|
package/dist/json_schema.js.map
CHANGED
|
@@ -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"}
|