@powersync/service-sync-rules 0.28.0 → 0.29.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.
- package/LICENSE +3 -3
- package/dist/BaseSqlDataQuery.d.ts +9 -1
- package/dist/BaseSqlDataQuery.js +42 -0
- package/dist/BaseSqlDataQuery.js.map +1 -1
- package/dist/BucketDescription.d.ts +16 -0
- package/dist/BucketParameterQuerier.d.ts +19 -3
- package/dist/BucketParameterQuerier.js.map +1 -1
- package/dist/BucketSource.d.ts +72 -0
- package/dist/BucketSource.js +6 -0
- package/dist/BucketSource.js.map +1 -0
- package/dist/ExpressionType.d.ts +2 -1
- package/dist/ExpressionType.js +1 -1
- package/dist/ExpressionType.js.map +1 -1
- package/dist/SqlBucketDescriptor.d.ts +40 -8
- package/dist/SqlBucketDescriptor.js +78 -10
- package/dist/SqlBucketDescriptor.js.map +1 -1
- package/dist/SqlDataQuery.d.ts +4 -3
- package/dist/SqlDataQuery.js +10 -30
- package/dist/SqlDataQuery.js.map +1 -1
- package/dist/SqlParameterQuery.d.ts +4 -4
- package/dist/SqlParameterQuery.js +9 -4
- package/dist/SqlParameterQuery.js.map +1 -1
- package/dist/SqlSyncRules.d.ts +55 -7
- package/dist/SqlSyncRules.js +126 -47
- package/dist/SqlSyncRules.js.map +1 -1
- package/dist/StaticSqlParameterQuery.d.ts +2 -2
- package/dist/StaticSqlParameterQuery.js +3 -2
- package/dist/StaticSqlParameterQuery.js.map +1 -1
- package/dist/TableValuedFunctionSqlParameterQuery.d.ts +2 -2
- package/dist/TableValuedFunctionSqlParameterQuery.js +11 -10
- package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -1
- package/dist/TableValuedFunctions.d.ts +2 -2
- package/dist/TableValuedFunctions.js +38 -35
- package/dist/TableValuedFunctions.js.map +1 -1
- package/dist/compatibility.d.ts +40 -0
- package/dist/compatibility.js +56 -0
- package/dist/compatibility.js.map +1 -0
- package/dist/events/SqlEventDescriptor.d.ts +3 -1
- package/dist/events/SqlEventDescriptor.js +4 -2
- package/dist/events/SqlEventDescriptor.js.map +1 -1
- package/dist/events/SqlEventSourceQuery.d.ts +2 -1
- package/dist/events/SqlEventSourceQuery.js +3 -2
- package/dist/events/SqlEventSourceQuery.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/json_schema.js +54 -1
- package/dist/json_schema.js.map +1 -1
- package/dist/request_functions.d.ts +24 -4
- package/dist/request_functions.js +68 -17
- package/dist/request_functions.js.map +1 -1
- package/dist/schema-generators/SchemaGenerator.js +2 -12
- package/dist/schema-generators/SchemaGenerator.js.map +1 -1
- package/dist/sql_filters.d.ts +25 -2
- package/dist/sql_filters.js +223 -119
- package/dist/sql_filters.js.map +1 -1
- package/dist/sql_functions.d.ts +13 -31
- package/dist/sql_functions.js +191 -114
- package/dist/sql_functions.js.map +1 -1
- package/dist/sql_support.d.ts +20 -0
- package/dist/sql_support.js +67 -14
- package/dist/sql_support.js.map +1 -1
- package/dist/streams/filter.d.ts +148 -0
- package/dist/streams/filter.js +426 -0
- package/dist/streams/filter.js.map +1 -0
- package/dist/streams/from_sql.d.ts +4 -0
- package/dist/streams/from_sql.js +375 -0
- package/dist/streams/from_sql.js.map +1 -0
- package/dist/streams/functions.d.ts +2 -0
- package/dist/streams/functions.js +38 -0
- package/dist/streams/functions.js.map +1 -0
- package/dist/streams/parameter.d.ts +67 -0
- package/dist/streams/parameter.js +2 -0
- package/dist/streams/parameter.js.map +1 -0
- package/dist/streams/stream.d.ts +40 -0
- package/dist/streams/stream.js +139 -0
- package/dist/streams/stream.js.map +1 -0
- package/dist/streams/utils.d.ts +1 -0
- package/dist/streams/utils.js +13 -0
- package/dist/streams/utils.js.map +1 -0
- package/dist/streams/variant.d.ts +122 -0
- package/dist/streams/variant.js +266 -0
- package/dist/streams/variant.js.map +1 -0
- package/dist/types/custom_sqlite_value.d.ts +38 -0
- package/dist/types/custom_sqlite_value.js +50 -0
- package/dist/types/custom_sqlite_value.js.map +1 -0
- package/dist/types/time.d.ts +33 -0
- package/dist/types/time.js +67 -0
- package/dist/types/time.js.map +1 -0
- package/dist/types.d.ts +52 -9
- package/dist/types.js +28 -2
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +9 -6
- package/dist/utils.js +42 -17
- package/dist/utils.js.map +1 -1
- package/package.json +3 -3
- package/schema/sync_rules.json +84 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,aAAa,CAAC;AAC5B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0CAA0C,CAAC;AACzD,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,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0CAA0C,CAAC;AACzD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC"}
|
package/dist/json_schema.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import ajvModule from 'ajv';
|
|
2
|
+
import { CompatibilityEdition, CompatibilityOption } from './compatibility.js';
|
|
2
3
|
// Hack to make this work both in NodeJS and a browser
|
|
3
4
|
const Ajv = ajvModule.default ?? ajvModule;
|
|
4
5
|
const ajv = new Ajv({ allErrors: true, verbose: true });
|
|
@@ -48,6 +49,36 @@ export const syncRulesSchema = {
|
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
51
|
},
|
|
52
|
+
streams: {
|
|
53
|
+
type: 'object',
|
|
54
|
+
description: 'List of stream definitions',
|
|
55
|
+
examples: [{ user_details: { query: 'select * from users where id = auth.user_id()' } }],
|
|
56
|
+
patternProperties: {
|
|
57
|
+
'.*': {
|
|
58
|
+
type: 'object',
|
|
59
|
+
required: ['query'],
|
|
60
|
+
examples: [{ query: ['select * from mytable'] }],
|
|
61
|
+
properties: {
|
|
62
|
+
accept_potentially_dangerous_queries: {
|
|
63
|
+
description: 'If true, disables warnings on potentially dangerous queries',
|
|
64
|
+
type: 'boolean'
|
|
65
|
+
},
|
|
66
|
+
auto_subscribe: {
|
|
67
|
+
description: 'Whether clients will subscribe to this stream by default.',
|
|
68
|
+
type: 'boolean'
|
|
69
|
+
},
|
|
70
|
+
priority: {
|
|
71
|
+
description: 'Priority for the bucket (lower values indicate higher priority).',
|
|
72
|
+
type: 'integer'
|
|
73
|
+
},
|
|
74
|
+
query: {
|
|
75
|
+
description: 'The SQL query defining content to sync in this stream.',
|
|
76
|
+
type: 'string'
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
},
|
|
51
82
|
event_definitions: {
|
|
52
83
|
type: 'object',
|
|
53
84
|
description: 'Record of sync replication event definitions',
|
|
@@ -76,9 +107,31 @@ export const syncRulesSchema = {
|
|
|
76
107
|
}
|
|
77
108
|
}
|
|
78
109
|
}
|
|
110
|
+
},
|
|
111
|
+
config: {
|
|
112
|
+
type: 'object',
|
|
113
|
+
description: 'Config declaring the compatibility level used to parse these definitions.',
|
|
114
|
+
properties: {
|
|
115
|
+
edition: {
|
|
116
|
+
type: 'integer',
|
|
117
|
+
default: CompatibilityEdition.LEGACY,
|
|
118
|
+
minimum: CompatibilityEdition.LEGACY,
|
|
119
|
+
exclusiveMaximum: CompatibilityEdition.SYNC_STREAMS + 1
|
|
120
|
+
},
|
|
121
|
+
...Object.fromEntries(Object.entries(CompatibilityOption.byName).map((e) => {
|
|
122
|
+
return [
|
|
123
|
+
e[0],
|
|
124
|
+
{
|
|
125
|
+
type: 'boolean',
|
|
126
|
+
description: `Enabled by default starting from edition ${e[1].fixedIn}: ${e[1].description}`
|
|
127
|
+
}
|
|
128
|
+
];
|
|
129
|
+
}))
|
|
130
|
+
},
|
|
131
|
+
additionalProperties: false
|
|
79
132
|
}
|
|
80
133
|
},
|
|
81
|
-
required: ['bucket_definitions'],
|
|
134
|
+
anyOf: [{ required: ['bucket_definitions'] }, { required: ['streams'] }],
|
|
82
135
|
additionalProperties: false
|
|
83
136
|
};
|
|
84
137
|
export const validateSyncRulesSchema = ajv.compile(syncRulesSchema);
|
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,QAAQ,EAAE;4BACR,WAAW,EAAE,kEAAkE;4BAC/E,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;
|
|
1
|
+
{"version":3,"file":"json_schema.js","sourceRoot":"","sources":["../src/json_schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,9 @@ import { ExpressionType } from './ExpressionType.js';
|
|
|
2
2
|
import { ParameterValueSet, SqliteValue } from './types.js';
|
|
3
3
|
export interface SqlParameterFunction {
|
|
4
4
|
readonly debugName: string;
|
|
5
|
-
call: (parameters: ParameterValueSet) => SqliteValue;
|
|
5
|
+
call: (parameters: ParameterValueSet, ...args: SqliteValue[]) => SqliteValue;
|
|
6
6
|
getReturnType(): ExpressionType;
|
|
7
|
+
parameterCount: number;
|
|
7
8
|
/** request.user_id(), request.jwt(), token_parameters.* */
|
|
8
9
|
usesAuthenticatedRequestParameters: boolean;
|
|
9
10
|
/** request.parameters(), user_parameters.* */
|
|
@@ -11,9 +12,28 @@ export interface SqlParameterFunction {
|
|
|
11
12
|
detail: string;
|
|
12
13
|
documentation: string;
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Defines a `parameters` function and a `parameter` function.
|
|
17
|
+
*
|
|
18
|
+
* The `parameters` function extracts a JSON object from the {@link ParameterValueSet} while the `parameter` function
|
|
19
|
+
* takes a second argument (a JSON path or a single key) to extract.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parameterFunctions(options: {
|
|
22
|
+
schema: string;
|
|
23
|
+
extractJsonString: (v: ParameterValueSet) => string;
|
|
24
|
+
extractJsonParsed: (v: ParameterValueSet) => any;
|
|
25
|
+
sourceDescription: string;
|
|
26
|
+
sourceDocumentation: string;
|
|
27
|
+
usesAuthenticatedRequestParameters: boolean;
|
|
28
|
+
usesUnauthenticatedRequestParameters: boolean;
|
|
29
|
+
}): {
|
|
30
|
+
parameters: SqlParameterFunction;
|
|
31
|
+
parameter: SqlParameterFunction;
|
|
32
|
+
};
|
|
33
|
+
export declare function globalRequestParameterFunctions(schema: string): {
|
|
15
34
|
parameters: SqlParameterFunction;
|
|
16
|
-
|
|
17
|
-
user_id: SqlParameterFunction;
|
|
35
|
+
parameter: SqlParameterFunction;
|
|
18
36
|
};
|
|
37
|
+
export declare const request_jwt: SqlParameterFunction;
|
|
38
|
+
export declare const request_user_id: SqlParameterFunction;
|
|
19
39
|
export declare const REQUEST_FUNCTIONS: Record<string, SqlParameterFunction>;
|
|
@@ -1,19 +1,69 @@
|
|
|
1
1
|
import { ExpressionType } from './ExpressionType.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
2
|
+
import { CompatibilityContext, CompatibilityEdition } from './compatibility.js';
|
|
3
|
+
import { generateSqlFunctions } from './sql_functions.js';
|
|
4
|
+
const jsonExtractFromRecord = generateSqlFunctions(new CompatibilityContext(CompatibilityEdition.SYNC_STREAMS)).jsonExtractFromRecord;
|
|
5
|
+
/**
|
|
6
|
+
* Defines a `parameters` function and a `parameter` function.
|
|
7
|
+
*
|
|
8
|
+
* The `parameters` function extracts a JSON object from the {@link ParameterValueSet} while the `parameter` function
|
|
9
|
+
* takes a second argument (a JSON path or a single key) to extract.
|
|
10
|
+
*/
|
|
11
|
+
export function parameterFunctions(options) {
|
|
12
|
+
const allParameters = {
|
|
13
|
+
debugName: `${options.schema}.parameters`,
|
|
14
|
+
parameterCount: 0,
|
|
15
|
+
call(parameters) {
|
|
16
|
+
return options.extractJsonString(parameters);
|
|
17
|
+
},
|
|
18
|
+
getReturnType() {
|
|
19
|
+
return ExpressionType.TEXT;
|
|
20
|
+
},
|
|
21
|
+
detail: options.sourceDescription,
|
|
22
|
+
documentation: `Returns ${options.sourceDocumentation}`,
|
|
23
|
+
usesAuthenticatedRequestParameters: options.usesAuthenticatedRequestParameters,
|
|
24
|
+
usesUnauthenticatedRequestParameters: options.usesUnauthenticatedRequestParameters
|
|
25
|
+
};
|
|
26
|
+
const extractParameter = {
|
|
27
|
+
debugName: `${options.schema}.parameter`,
|
|
28
|
+
parameterCount: 1,
|
|
29
|
+
call(parameters, path) {
|
|
30
|
+
const parsed = options.extractJsonParsed(parameters);
|
|
31
|
+
// jsonExtractFromRecord uses the correct behavior of only splitting the path if it starts with $.
|
|
32
|
+
// This particular JSON extract function always had that behavior, so we don't need to take backwards
|
|
33
|
+
// compatibility into account.
|
|
34
|
+
if (typeof path == 'string') {
|
|
35
|
+
return jsonExtractFromRecord(parsed, path, '->>');
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
},
|
|
39
|
+
getReturnType() {
|
|
40
|
+
return ExpressionType.ANY;
|
|
41
|
+
},
|
|
42
|
+
detail: `Extract value from ${options.sourceDescription}`,
|
|
43
|
+
documentation: `Returns an extracted value (via the key as the second argument) from ${options.sourceDocumentation}`,
|
|
44
|
+
usesAuthenticatedRequestParameters: options.usesAuthenticatedRequestParameters,
|
|
45
|
+
usesUnauthenticatedRequestParameters: options.usesUnauthenticatedRequestParameters
|
|
46
|
+
};
|
|
47
|
+
return { parameters: allParameters, parameter: extractParameter };
|
|
48
|
+
}
|
|
49
|
+
export function globalRequestParameterFunctions(schema) {
|
|
50
|
+
return parameterFunctions({
|
|
51
|
+
schema,
|
|
52
|
+
extractJsonString: function (v) {
|
|
53
|
+
return v.rawUserParameters;
|
|
54
|
+
},
|
|
55
|
+
extractJsonParsed: function (v) {
|
|
56
|
+
return v.userParameters;
|
|
57
|
+
},
|
|
58
|
+
sourceDescription: 'Unauthenticated request parameters as JSON',
|
|
59
|
+
sourceDocumentation: 'parameters passed by the client as a JSON string. These parameters are not authenticated - any value can be passed in by the client.',
|
|
60
|
+
usesAuthenticatedRequestParameters: false,
|
|
61
|
+
usesUnauthenticatedRequestParameters: true
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
export const request_jwt = {
|
|
16
65
|
debugName: 'request.jwt',
|
|
66
|
+
parameterCount: 0,
|
|
17
67
|
call(parameters) {
|
|
18
68
|
return parameters.rawTokenPayload;
|
|
19
69
|
},
|
|
@@ -25,8 +75,9 @@ const request_jwt = {
|
|
|
25
75
|
usesAuthenticatedRequestParameters: true,
|
|
26
76
|
usesUnauthenticatedRequestParameters: false
|
|
27
77
|
};
|
|
28
|
-
const request_user_id = {
|
|
78
|
+
export const request_user_id = {
|
|
29
79
|
debugName: 'request.user_id',
|
|
80
|
+
parameterCount: 0,
|
|
30
81
|
call(parameters) {
|
|
31
82
|
return parameters.userId;
|
|
32
83
|
},
|
|
@@ -38,8 +89,8 @@ const request_user_id = {
|
|
|
38
89
|
usesAuthenticatedRequestParameters: true,
|
|
39
90
|
usesUnauthenticatedRequestParameters: false
|
|
40
91
|
};
|
|
41
|
-
|
|
42
|
-
|
|
92
|
+
const REQUEST_FUNCTIONS_NAMED = {
|
|
93
|
+
...globalRequestParameterFunctions('request'),
|
|
43
94
|
jwt: request_jwt,
|
|
44
95
|
user_id: request_user_id
|
|
45
96
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request_functions.js","sourceRoot":"","sources":["../src/request_functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"request_functions.js","sourceRoot":"","sources":["../src/request_functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,18 +2,8 @@ import { TYPE_INTEGER, TYPE_REAL, TYPE_TEXT } from '../ExpressionType.js';
|
|
|
2
2
|
export class SchemaGenerator {
|
|
3
3
|
getAllTables(source, schema) {
|
|
4
4
|
let tables = {};
|
|
5
|
-
for (let descriptor of source.
|
|
6
|
-
|
|
7
|
-
const outTables = query.getColumnOutputs(schema);
|
|
8
|
-
for (let table of outTables) {
|
|
9
|
-
tables[table.name] ??= {};
|
|
10
|
-
for (let column of table.columns) {
|
|
11
|
-
if (column.name != 'id') {
|
|
12
|
-
tables[table.name][column.name] ??= column;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
5
|
+
for (let descriptor of source.bucketSources) {
|
|
6
|
+
descriptor.resolveResultSets(schema, tables);
|
|
17
7
|
}
|
|
18
8
|
return Object.entries(tables).map(([name, columns]) => {
|
|
19
9
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/SchemaGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAQ5F,MAAM,OAAgB,eAAe;IACzB,YAAY,CAAC,MAAoB,EAAE,MAAoB;QAC/D,IAAI,MAAM,GAAqD,EAAE,CAAC;QAElE,KAAK,IAAI,UAAU,IAAI,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"SchemaGenerator.js","sourceRoot":"","sources":["../../src/schema-generators/SchemaGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAQ5F,MAAM,OAAgB,eAAe;IACzB,YAAY,CAAC,MAAoB,EAAE,MAAoB;QAC/D,IAAI,MAAM,GAAqD,EAAE,CAAC;QAElE,KAAK,IAAI,UAAU,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YAC5C,UAAU,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;YACpD,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;aAChC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IASD;;;OAGG;IACH,UAAU,CAAC,GAAqB;QAC9B,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;QACrB,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;YACzC,OAAO,SAAS,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;CACF"}
|
package/dist/sql_filters.d.ts
CHANGED
|
@@ -2,8 +2,10 @@ import { Expr, ExprRef, Name, NodeLocation, QName, QNameAliased, SelectedColumn
|
|
|
2
2
|
import { nil } from 'pgsql-ast-parser/src/utils.js';
|
|
3
3
|
import { BucketPriority } from './BucketDescription.js';
|
|
4
4
|
import { SqlRuleError } from './errors.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { SqlParameterFunction } from './request_functions.js';
|
|
6
|
+
import { SqlFunction, generateSqlFunctions } from './sql_functions.js';
|
|
7
|
+
import { ClauseError, CompiledClause, InputParameter, ParameterMatchClause, ParameterValueClause, QueryParameters, QuerySchema, RowValueClause, StaticValueClause, TrueIfParametersMatch } from './types.js';
|
|
8
|
+
import { CompatibilityContext } from './compatibility.js';
|
|
7
9
|
export declare const MATCH_CONST_FALSE: TrueIfParametersMatch;
|
|
8
10
|
export declare const MATCH_CONST_TRUE: TrueIfParametersMatch;
|
|
9
11
|
export interface SqlToolsOptions {
|
|
@@ -41,10 +43,18 @@ export interface SqlToolsOptions {
|
|
|
41
43
|
* true if expressions on parameters are supported, e.g. upper(token_parameters.user_id)
|
|
42
44
|
*/
|
|
43
45
|
supportsParameterExpressions?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* For each schema, all available parameter functions.
|
|
48
|
+
*/
|
|
49
|
+
parameterFunctions?: Record<string, Record<string, SqlParameterFunction>>;
|
|
44
50
|
/**
|
|
45
51
|
* Schema for validations.
|
|
46
52
|
*/
|
|
47
53
|
schema?: QuerySchema;
|
|
54
|
+
/**
|
|
55
|
+
* Context controling how functions should behave if we've made backwards-incompatible change to them.
|
|
56
|
+
*/
|
|
57
|
+
compatibilityContext: CompatibilityContext;
|
|
48
58
|
}
|
|
49
59
|
export declare class SqlTools {
|
|
50
60
|
readonly defaultTable?: string;
|
|
@@ -58,6 +68,9 @@ export declare class SqlTools {
|
|
|
58
68
|
readonly errors: SqlRuleError[];
|
|
59
69
|
readonly supportsExpandingParameters: boolean;
|
|
60
70
|
readonly supportsParameterExpressions: boolean;
|
|
71
|
+
readonly parameterFunctions: Record<string, Record<string, SqlParameterFunction>>;
|
|
72
|
+
readonly compatibilityContext: CompatibilityContext;
|
|
73
|
+
readonly functions: ReturnType<typeof generateSqlFunctions>;
|
|
61
74
|
schema?: QuerySchema;
|
|
62
75
|
constructor(options: SqlToolsOptions);
|
|
63
76
|
error(message: string, expr: NodeLocation | Expr | undefined): ClauseError;
|
|
@@ -75,6 +88,16 @@ export declare class SqlTools {
|
|
|
75
88
|
* Given an expression, return a compiled clause.
|
|
76
89
|
*/
|
|
77
90
|
compileClause(expr: Expr | nil): CompiledClause;
|
|
91
|
+
compileInClause(left: Expr, leftFilter: CompiledClause, right: Expr, rightFilter: CompiledClause): CompiledClause;
|
|
92
|
+
compileOverlapClause(left: Expr, leftFilter: CompiledClause, right: Expr, rightFilter: CompiledClause): CompiledClause;
|
|
93
|
+
parameterMatchClause(staticFilter: RowValueClause, otherFilter: ParameterValueClause): {
|
|
94
|
+
error: false;
|
|
95
|
+
inputParameters: InputParameter[];
|
|
96
|
+
unbounded: false;
|
|
97
|
+
filterRow(tables: QueryParameters): TrueIfParametersMatch;
|
|
98
|
+
usesAuthenticatedRequestParameters: boolean;
|
|
99
|
+
usesUnauthenticatedRequestParameters: boolean;
|
|
100
|
+
};
|
|
78
101
|
/**
|
|
79
102
|
* "some_column" => "some_column"
|
|
80
103
|
* "table.some_column" => "some_column".
|