@powersync/service-sync-rules 0.29.10 → 0.31.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 +3 -9
- package/dist/BaseSqlDataQuery.js +11 -21
- package/dist/BaseSqlDataQuery.js.map +1 -1
- package/dist/BucketParameterQuerier.d.ts +42 -9
- package/dist/BucketParameterQuerier.js +30 -7
- package/dist/BucketParameterQuerier.js.map +1 -1
- package/dist/BucketSource.d.ts +94 -25
- package/dist/BucketSource.js +67 -0
- package/dist/BucketSource.js.map +1 -1
- package/dist/ExpressionType.d.ts +4 -2
- package/dist/ExpressionType.js.map +1 -1
- package/dist/HydratedSyncRules.d.ts +46 -0
- package/dist/HydratedSyncRules.js +88 -0
- package/dist/HydratedSyncRules.js.map +1 -0
- package/dist/HydrationState.d.ts +45 -0
- package/dist/HydrationState.js +41 -0
- package/dist/HydrationState.js.map +1 -0
- package/dist/SqlBucketDescriptor.d.ts +31 -28
- package/dist/SqlBucketDescriptor.js +89 -112
- package/dist/SqlBucketDescriptor.js.map +1 -1
- package/dist/SqlDataQuery.d.ts +4 -4
- package/dist/SqlDataQuery.js +5 -6
- package/dist/SqlDataQuery.js.map +1 -1
- package/dist/SqlParameterQuery.d.ts +17 -9
- package/dist/SqlParameterQuery.js +49 -23
- package/dist/SqlParameterQuery.js.map +1 -1
- package/dist/SqlSyncRules.d.ts +11 -53
- package/dist/SqlSyncRules.js +11 -376
- package/dist/SqlSyncRules.js.map +1 -1
- package/dist/StaticSqlParameterQuery.d.ts +13 -3
- package/dist/StaticSqlParameterQuery.js +38 -4
- package/dist/StaticSqlParameterQuery.js.map +1 -1
- package/dist/SyncConfig.d.ts +43 -0
- package/dist/SyncConfig.js +102 -0
- package/dist/SyncConfig.js.map +1 -0
- package/dist/TablePattern.d.ts +22 -4
- package/dist/TablePattern.js +57 -19
- package/dist/TablePattern.js.map +1 -1
- package/dist/TableValuedFunctionSqlParameterQuery.d.ts +14 -4
- package/dist/TableValuedFunctionSqlParameterQuery.js +41 -7
- package/dist/TableValuedFunctionSqlParameterQuery.js.map +1 -1
- package/dist/compatibility.d.ts +7 -0
- package/dist/compatibility.js +34 -0
- package/dist/compatibility.js.map +1 -1
- package/dist/compiler/bucket_resolver.d.ts +70 -0
- package/dist/compiler/bucket_resolver.js +131 -0
- package/dist/compiler/bucket_resolver.js.map +1 -0
- package/dist/compiler/compatibility.d.ts +16 -0
- package/dist/compiler/compatibility.js +12 -0
- package/dist/compiler/compatibility.js.map +1 -0
- package/dist/compiler/compiler.d.ts +110 -0
- package/dist/compiler/compiler.js +130 -0
- package/dist/compiler/compiler.js.map +1 -0
- package/dist/compiler/equality.d.ts +99 -0
- package/dist/compiler/equality.js +284 -0
- package/dist/compiler/equality.js.map +1 -0
- package/dist/compiler/expression.d.ts +77 -0
- package/dist/compiler/expression.js +122 -0
- package/dist/compiler/expression.js.map +1 -0
- package/dist/compiler/filter.d.ts +71 -0
- package/dist/compiler/filter.js +110 -0
- package/dist/compiler/filter.js.map +1 -0
- package/dist/compiler/filter_simplifier.d.ts +26 -0
- package/dist/compiler/filter_simplifier.js +119 -0
- package/dist/compiler/filter_simplifier.js.map +1 -0
- package/dist/compiler/ir_to_sync_plan.d.ts +37 -0
- package/dist/compiler/ir_to_sync_plan.js +163 -0
- package/dist/compiler/ir_to_sync_plan.js.map +1 -0
- package/dist/compiler/parser.d.ts +99 -0
- package/dist/compiler/parser.js +556 -0
- package/dist/compiler/parser.js.map +1 -0
- package/dist/compiler/querier_graph.d.ts +42 -0
- package/dist/compiler/querier_graph.js +365 -0
- package/dist/compiler/querier_graph.js.map +1 -0
- package/dist/compiler/rows.d.ts +113 -0
- package/dist/compiler/rows.js +156 -0
- package/dist/compiler/rows.js.map +1 -0
- package/dist/compiler/scope.d.ts +22 -0
- package/dist/compiler/scope.js +47 -0
- package/dist/compiler/scope.js.map +1 -0
- package/dist/compiler/sqlite.d.ts +77 -0
- package/dist/compiler/sqlite.js +412 -0
- package/dist/compiler/sqlite.js.map +1 -0
- package/dist/compiler/table.d.ts +66 -0
- package/dist/compiler/table.js +67 -0
- package/dist/compiler/table.js.map +1 -0
- package/dist/errors.d.ts +4 -2
- package/dist/errors.js +16 -1
- package/dist/errors.js.map +1 -1
- package/dist/events/SqlEventDescriptor.js +1 -1
- package/dist/events/SqlEventDescriptor.js.map +1 -1
- package/dist/events/SqlEventSourceQuery.d.ts +1 -1
- package/dist/events/SqlEventSourceQuery.js +1 -2
- package/dist/events/SqlEventSourceQuery.js.map +1 -1
- package/dist/from_yaml.d.ts +28 -0
- package/dist/from_yaml.js +411 -0
- package/dist/from_yaml.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/json_schema.js +17 -1
- package/dist/json_schema.js.map +1 -1
- package/dist/request_functions.js.map +1 -1
- package/dist/schema-generators/DartSchemaGenerator.d.ts +3 -3
- package/dist/schema-generators/DartSchemaGenerator.js.map +1 -1
- package/dist/schema-generators/DotNetSchemaGenerator.d.ts +2 -2
- package/dist/schema-generators/DotNetSchemaGenerator.js.map +1 -1
- package/dist/schema-generators/JsLegacySchemaGenerator.d.ts +2 -2
- package/dist/schema-generators/JsLegacySchemaGenerator.js.map +1 -1
- package/dist/schema-generators/KotlinSchemaGenerator.d.ts +2 -2
- package/dist/schema-generators/KotlinSchemaGenerator.js.map +1 -1
- package/dist/schema-generators/RoomSchemaGenerator.d.ts +2 -2
- package/dist/schema-generators/RoomSchemaGenerator.js.map +1 -1
- package/dist/schema-generators/SchemaGenerator.d.ts +8 -3
- package/dist/schema-generators/SchemaGenerator.js +21 -14
- package/dist/schema-generators/SchemaGenerator.js.map +1 -1
- package/dist/schema-generators/SqlSchemaGenerator.d.ts +2 -2
- package/dist/schema-generators/SqlSchemaGenerator.js.map +1 -1
- package/dist/schema-generators/SwiftSchemaGenerator.d.ts +2 -2
- package/dist/schema-generators/SwiftSchemaGenerator.js.map +1 -1
- package/dist/schema-generators/TsSchemaGenerator.d.ts +2 -2
- package/dist/schema-generators/TsSchemaGenerator.js.map +1 -1
- package/dist/sql_functions.d.ts +4 -3
- package/dist/sql_functions.js +1 -1
- package/dist/sql_functions.js.map +1 -1
- package/dist/streams/filter.d.ts +34 -4
- package/dist/streams/filter.js +93 -23
- package/dist/streams/filter.js.map +1 -1
- package/dist/streams/from_sql.js +2 -5
- package/dist/streams/from_sql.js.map +1 -1
- package/dist/streams/parameter.d.ts +7 -6
- package/dist/streams/stream.d.ts +25 -15
- package/dist/streams/stream.js +59 -87
- package/dist/streams/stream.js.map +1 -1
- package/dist/streams/variant.d.ts +14 -21
- package/dist/streams/variant.js +68 -46
- package/dist/streams/variant.js.map +1 -1
- package/dist/sync_plan/engine/javascript.d.ts +6 -0
- package/dist/sync_plan/engine/javascript.js +208 -0
- package/dist/sync_plan/engine/javascript.js.map +1 -0
- package/dist/sync_plan/engine/scalar_expression_engine.d.ts +48 -0
- package/dist/sync_plan/engine/scalar_expression_engine.js +99 -0
- package/dist/sync_plan/engine/scalar_expression_engine.js.map +1 -0
- package/dist/sync_plan/engine/sqlite.d.ts +12 -0
- package/dist/sync_plan/engine/sqlite.js +53 -0
- package/dist/sync_plan/engine/sqlite.js.map +1 -0
- package/dist/sync_plan/evaluator/bucket_data_source.d.ts +24 -0
- package/dist/sync_plan/evaluator/bucket_data_source.js +139 -0
- package/dist/sync_plan/evaluator/bucket_data_source.js.map +1 -0
- package/dist/sync_plan/evaluator/bucket_source.d.ts +19 -0
- package/dist/sync_plan/evaluator/bucket_source.js +145 -0
- package/dist/sync_plan/evaluator/bucket_source.js.map +1 -0
- package/dist/sync_plan/evaluator/index.d.ts +17 -0
- package/dist/sync_plan/evaluator/index.js +32 -0
- package/dist/sync_plan/evaluator/index.js.map +1 -0
- package/dist/sync_plan/evaluator/parameter_evaluator.d.ts +138 -0
- package/dist/sync_plan/evaluator/parameter_evaluator.js +359 -0
- package/dist/sync_plan/evaluator/parameter_evaluator.js.map +1 -0
- package/dist/sync_plan/evaluator/parameter_index_lookup_creator.d.ts +20 -0
- package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js +64 -0
- package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js.map +1 -0
- package/dist/sync_plan/expression.d.ts +109 -0
- package/dist/sync_plan/expression.js +85 -0
- package/dist/sync_plan/expression.js.map +1 -0
- package/dist/sync_plan/expression_to_sql.d.ts +43 -0
- package/dist/sync_plan/expression_to_sql.js +190 -0
- package/dist/sync_plan/expression_to_sql.js.map +1 -0
- package/dist/sync_plan/expression_visitor.d.ts +57 -0
- package/dist/sync_plan/expression_visitor.js +181 -0
- package/dist/sync_plan/expression_visitor.js.map +1 -0
- package/dist/sync_plan/plan.d.ts +196 -0
- package/dist/sync_plan/plan.js +2 -0
- package/dist/sync_plan/plan.js.map +1 -0
- package/dist/sync_plan/schema_inference.d.ts +16 -0
- package/dist/sync_plan/schema_inference.js +123 -0
- package/dist/sync_plan/schema_inference.js.map +1 -0
- package/dist/sync_plan/serialize.d.ts +82 -0
- package/dist/sync_plan/serialize.js +214 -0
- package/dist/sync_plan/serialize.js.map +1 -0
- package/dist/types/custom_sqlite_value.d.ts +1 -1
- package/dist/types.d.ts +72 -29
- package/dist/types.js +30 -5
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +10 -3
- package/dist/utils.js +26 -3
- package/dist/utils.js.map +1 -1
- package/package.json +4 -3
- package/schema/sync_rules.json +19 -3
package/dist/streams/stream.js
CHANGED
|
@@ -6,99 +6,80 @@ export class SyncStream {
|
|
|
6
6
|
priority;
|
|
7
7
|
variants;
|
|
8
8
|
data;
|
|
9
|
-
|
|
9
|
+
dataSources;
|
|
10
|
+
parameterIndexLookupCreators;
|
|
11
|
+
constructor(name, data, variants) {
|
|
10
12
|
this.name = name;
|
|
11
13
|
this.subscribedToByDefault = false;
|
|
12
14
|
this.priority = DEFAULT_BUCKET_PRIORITY;
|
|
13
15
|
this.variants = [];
|
|
14
16
|
this.data = data;
|
|
17
|
+
this.dataSources = [];
|
|
18
|
+
this.parameterIndexLookupCreators = [];
|
|
19
|
+
for (let variant of variants) {
|
|
20
|
+
const dataSource = new SyncStreamDataSource(this, data, variant);
|
|
21
|
+
this.dataSources.push(dataSource);
|
|
22
|
+
this.variants.push({ variant, dataSource });
|
|
23
|
+
const lookupCreators = variant.indexLookupCreators();
|
|
24
|
+
this.parameterIndexLookupCreators.push(...lookupCreators);
|
|
25
|
+
}
|
|
15
26
|
}
|
|
16
27
|
get type() {
|
|
17
28
|
return BucketSourceType.SYNC_STREAM;
|
|
18
29
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
let subscriptionParams = options.globalParameters;
|
|
28
|
-
if (subscription.parameters != null) {
|
|
29
|
-
subscriptionParams = subscriptionParams.withAddedStreamParameters(subscription.parameters);
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
hasExplicitDefaultSubscription = true;
|
|
30
|
+
debugRepresentation() {
|
|
31
|
+
return {
|
|
32
|
+
name: this.name,
|
|
33
|
+
type: BucketSourceType[BucketSourceType.SYNC_STREAM],
|
|
34
|
+
variants: this.variants.map(({ variant }) => variant.debugRepresentation()),
|
|
35
|
+
data: {
|
|
36
|
+
table: this.data.sourceTable,
|
|
37
|
+
columns: this.data.columnOutputNames()
|
|
33
38
|
}
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
// If the stream is subscribed to by default and there is no explicit subscription that would match the default
|
|
37
|
-
// subscription, also include the default querier.
|
|
38
|
-
if (this.subscribedToByDefault && !hasExplicitDefaultSubscription) {
|
|
39
|
-
this.queriersForSubscription(result, null, options.globalParameters, options.bucketIdTransformer);
|
|
40
|
-
}
|
|
39
|
+
};
|
|
41
40
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
41
|
+
hydrate(params) {
|
|
42
|
+
let queriers = [];
|
|
43
|
+
for (let { variant, dataSource } of this.variants) {
|
|
44
|
+
const querier = variant.createParameterQuerierSource(params, this, dataSource);
|
|
45
|
+
queriers.push(querier);
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
definition: this,
|
|
49
|
+
pushBucketParameterQueriers(result, options) {
|
|
50
|
+
for (let querier of queriers) {
|
|
51
|
+
querier.pushBucketParameterQueriers(result, options);
|
|
50
52
|
}
|
|
51
53
|
}
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
catch (e) {
|
|
55
|
-
result.errors.push({
|
|
56
|
-
descriptor: this.name,
|
|
57
|
-
message: `Error evaluating bucket ids: ${e.message}`,
|
|
58
|
-
subscription: subscription ?? undefined
|
|
59
|
-
});
|
|
60
|
-
}
|
|
54
|
+
};
|
|
61
55
|
}
|
|
62
|
-
|
|
63
|
-
|
|
56
|
+
}
|
|
57
|
+
export class SyncStreamDataSource {
|
|
58
|
+
stream;
|
|
59
|
+
data;
|
|
60
|
+
variant;
|
|
61
|
+
constructor(stream, data, variant) {
|
|
62
|
+
this.stream = stream;
|
|
63
|
+
this.data = data;
|
|
64
|
+
this.variant = variant;
|
|
64
65
|
}
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
/**
|
|
67
|
+
* Not relevant for sync streams.
|
|
68
|
+
*/
|
|
69
|
+
get bucketParameters() {
|
|
70
|
+
return [];
|
|
67
71
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
for (const subquery of variant.subqueries) {
|
|
71
|
-
if (subquery.parameterTable.matches(table)) {
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return false;
|
|
72
|
+
get uniqueName() {
|
|
73
|
+
return this.variant.defaultBucketPrefix(this.stream.name);
|
|
77
74
|
}
|
|
78
75
|
getSourceTables() {
|
|
79
|
-
|
|
80
|
-
result.add(this.data.sourceTable);
|
|
81
|
-
for (let variant of this.variants) {
|
|
82
|
-
for (const subquery of variant.subqueries) {
|
|
83
|
-
result.add(subquery.parameterTable);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
// Note: No physical tables for global_parameter_queries
|
|
87
|
-
return result;
|
|
76
|
+
return new Set([this.data.sourceTable]);
|
|
88
77
|
}
|
|
89
|
-
|
|
90
|
-
this.data.
|
|
78
|
+
tableSyncsData(table) {
|
|
79
|
+
return this.data.applies(table);
|
|
91
80
|
}
|
|
92
|
-
|
|
93
|
-
return
|
|
94
|
-
name: this.name,
|
|
95
|
-
type: BucketSourceType[this.type],
|
|
96
|
-
variants: this.variants.map((v) => v.debugRepresentation()),
|
|
97
|
-
data: {
|
|
98
|
-
table: this.data.sourceTable,
|
|
99
|
-
columns: this.data.columnOutputNames()
|
|
100
|
-
}
|
|
101
|
-
};
|
|
81
|
+
resolveResultSets(schema, tables) {
|
|
82
|
+
return this.data.resolveResultSets(schema, tables);
|
|
102
83
|
}
|
|
103
84
|
debugWriteOutputTables(result) {
|
|
104
85
|
result[this.data.table.sqlName] ??= [];
|
|
@@ -107,31 +88,22 @@ export class SyncStream {
|
|
|
107
88
|
};
|
|
108
89
|
result[this.data.table.sqlName].push(r);
|
|
109
90
|
}
|
|
110
|
-
evaluateParameterRow(sourceTable, row) {
|
|
111
|
-
const result = [];
|
|
112
|
-
for (const variant of this.variants) {
|
|
113
|
-
variant.pushParameterRowEvaluation(result, sourceTable, row);
|
|
114
|
-
}
|
|
115
|
-
return result;
|
|
116
|
-
}
|
|
117
91
|
evaluateRow(options) {
|
|
118
92
|
if (!this.data.applies(options.sourceTable)) {
|
|
119
93
|
return [];
|
|
120
94
|
}
|
|
121
|
-
const stream = this;
|
|
122
95
|
const row = {
|
|
123
96
|
sourceTable: options.sourceTable,
|
|
124
97
|
record: options.record
|
|
125
98
|
};
|
|
99
|
+
// There is some duplication in work here when there are multiple variants on a stream:
|
|
100
|
+
// Each variant does the same row transformation (only the filters / bucket ids differ).
|
|
101
|
+
// However, architecturally we do need to be able to evaluate each variant separately.
|
|
126
102
|
return this.data.evaluateRowWithOptions({
|
|
127
103
|
table: options.sourceTable,
|
|
128
104
|
row: options.record,
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
for (const variant of stream.variants) {
|
|
132
|
-
bucketIds.push(...variant.bucketIdsForRow(stream.name, row, options.bucketIdTransformer));
|
|
133
|
-
}
|
|
134
|
-
return bucketIds;
|
|
105
|
+
serializedBucketParameters: () => {
|
|
106
|
+
return this.variant.bucketParametersForRow(row);
|
|
135
107
|
}
|
|
136
108
|
});
|
|
137
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/streams/stream.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/streams/stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { BucketInclusionReason } from '../BucketDescription.js';
|
|
2
2
|
import { BucketParameterQuerier } from '../BucketParameterQuerier.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { BucketDataSource, BucketParameterQuerierSource, ParameterIndexLookupCreator } from '../BucketSource.js';
|
|
4
|
+
import { BucketDataScope } from '../HydrationState.js';
|
|
5
|
+
import { CreateSourceParams, ScopedParameterLookup } from '../index.js';
|
|
6
|
+
import { RequestParameters, SqliteJsonValue, TableRow } from '../types.js';
|
|
5
7
|
import { BucketParameter, SubqueryEvaluator } from './parameter.js';
|
|
6
8
|
import { SyncStream } from './stream.js';
|
|
7
9
|
/**
|
|
@@ -44,10 +46,12 @@ export declare class StreamVariant {
|
|
|
44
46
|
*/
|
|
45
47
|
requestFilters: RequestFilter[];
|
|
46
48
|
constructor(id: number);
|
|
49
|
+
defaultBucketPrefix(streamName: string): string;
|
|
50
|
+
indexLookupCreators(): ParameterIndexLookupCreator[];
|
|
47
51
|
/**
|
|
48
52
|
* Given a row in the table this stream selects from, returns all ids of buckets to which that row belongs to.
|
|
49
53
|
*/
|
|
50
|
-
|
|
54
|
+
bucketParametersForRow(options: TableRow): string[];
|
|
51
55
|
/**
|
|
52
56
|
* Given a row to evaluate, returns all instantiations of parameters that satisfy conditions.
|
|
53
57
|
*
|
|
@@ -62,23 +66,8 @@ export declare class StreamVariant {
|
|
|
62
66
|
* @returns Each instantiation, with each sub-array having a value for a parameter.
|
|
63
67
|
*/
|
|
64
68
|
private cartesianProductOfParameterInstantiations;
|
|
65
|
-
|
|
66
|
-
querier(stream: SyncStream, reason: BucketInclusionReason, params: RequestParameters, bucketIdTransformer: BucketIdTransformer): BucketParameterQuerier | null;
|
|
69
|
+
querier(stream: SyncStream, reason: BucketInclusionReason, params: RequestParameters, bucketScope: BucketDataScope, hydratedSubqueries: HydratedSubqueries): BucketParameterQuerier | null;
|
|
67
70
|
findStaticInstantiations(params: RequestParameters): SqliteJsonValue[][];
|
|
68
|
-
/**
|
|
69
|
-
* Creates lookup indices for dynamically-resolved parameters.
|
|
70
|
-
*
|
|
71
|
-
* Resolving dynamic parameters is a two-step process: First, for tables referenced in subqueries, we create an index
|
|
72
|
-
* to resolve which request parameters would match rows in subqueries. Then, when resolving bucket ids for a request,
|
|
73
|
-
* we compute subquery results by looking up results in that index.
|
|
74
|
-
*
|
|
75
|
-
* This implements the first step of that process.
|
|
76
|
-
*
|
|
77
|
-
* @param result The array into which evaluation results should be written to.
|
|
78
|
-
* @param sourceTable A table we depend on in a subquery.
|
|
79
|
-
* @param row Row data to index.
|
|
80
|
-
*/
|
|
81
|
-
pushParameterRowEvaluation(result: EvaluatedParametersResult[], sourceTable: SourceTableInterface, row: SqliteRow): void;
|
|
82
71
|
debugRepresentation(): any;
|
|
83
72
|
/**
|
|
84
73
|
* Replaces {@link StreamVariant.parameters} with static values looked up in request parameters.
|
|
@@ -90,13 +79,15 @@ export declare class StreamVariant {
|
|
|
90
79
|
/**
|
|
91
80
|
* Builds a bucket id for an instantiation, like `stream|0[1,2,"foo"]`.
|
|
92
81
|
*
|
|
93
|
-
* @param
|
|
82
|
+
* @param bucketPrefix The name of the the bucket, excluding parameters
|
|
94
83
|
* @param instantiation An instantiation for all parameters in this variant.
|
|
95
84
|
* @param transformer A transformer adding version information to the inner id.
|
|
96
85
|
* @returns The generated bucket id
|
|
97
86
|
*/
|
|
98
|
-
private
|
|
87
|
+
private serializeBucketParameters;
|
|
99
88
|
private resolveBucket;
|
|
89
|
+
createParameterQuerierSource(params: CreateSourceParams, stream: SyncStream, querierDataSource: BucketDataSource): BucketParameterQuerierSource;
|
|
90
|
+
private queriersForSubscription;
|
|
100
91
|
}
|
|
101
92
|
/**
|
|
102
93
|
* A stateless filter condition that only depends on the request itself, e.g. `WHERE token_parameters.is_admin`.
|
|
@@ -120,3 +111,5 @@ export interface SubqueryRequestFilter {
|
|
|
120
111
|
matches(params: RequestParameters, results: SqliteJsonValue[]): boolean;
|
|
121
112
|
}
|
|
122
113
|
export type RequestFilter = StaticRequestFilter | SubqueryRequestFilter;
|
|
114
|
+
type HydratedSubqueries = Map<SubqueryEvaluator, (params: RequestParameters) => ScopedParameterLookup[]>;
|
|
115
|
+
export {};
|
package/dist/streams/variant.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isJsonValue, JSONBucketNameSerialize } from '../utils.js';
|
|
1
|
+
import { buildBucketName, isJsonValue, JSONBucketNameSerialize } from '../utils.js';
|
|
2
2
|
import { cartesianProduct } from './utils.js';
|
|
3
3
|
/**
|
|
4
4
|
* A variant of a stream.
|
|
@@ -46,11 +46,17 @@ export class StreamVariant {
|
|
|
46
46
|
this.additionalRowFilters = [];
|
|
47
47
|
this.requestFilters = [];
|
|
48
48
|
}
|
|
49
|
+
defaultBucketPrefix(streamName) {
|
|
50
|
+
return `${streamName}|${this.id}`;
|
|
51
|
+
}
|
|
52
|
+
indexLookupCreators() {
|
|
53
|
+
return this.subqueries.flatMap((subquery) => subquery.indexLookupCreators());
|
|
54
|
+
}
|
|
49
55
|
/**
|
|
50
56
|
* Given a row in the table this stream selects from, returns all ids of buckets to which that row belongs to.
|
|
51
57
|
*/
|
|
52
|
-
|
|
53
|
-
return this.instantiationsForRow(options).map((values) => this.
|
|
58
|
+
bucketParametersForRow(options) {
|
|
59
|
+
return this.instantiationsForRow(options).map((values) => this.serializeBucketParameters(values));
|
|
54
60
|
}
|
|
55
61
|
/**
|
|
56
62
|
* Given a row to evaluate, returns all instantiations of parameters that satisfy conditions.
|
|
@@ -89,10 +95,7 @@ export class StreamVariant {
|
|
|
89
95
|
cartesianProductOfParameterInstantiations(instantiations) {
|
|
90
96
|
return [...cartesianProduct(...instantiations)];
|
|
91
97
|
}
|
|
92
|
-
|
|
93
|
-
return this.requestFilters.some((f) => f.type == 'dynamic');
|
|
94
|
-
}
|
|
95
|
-
querier(stream, reason, params, bucketIdTransformer) {
|
|
98
|
+
querier(stream, reason, params, bucketScope, hydratedSubqueries) {
|
|
96
99
|
const instantiation = this.partiallyEvaluateParameters(params);
|
|
97
100
|
if (instantiation == null) {
|
|
98
101
|
return null;
|
|
@@ -111,21 +114,24 @@ export class StreamVariant {
|
|
|
111
114
|
}
|
|
112
115
|
}
|
|
113
116
|
for (const subquery of this.subqueries) {
|
|
114
|
-
|
|
117
|
+
const subqueryLookup = hydratedSubqueries.get(subquery);
|
|
118
|
+
if (subqueryLookup == null) {
|
|
119
|
+
throw new Error('Internal error, missing subquery lookup');
|
|
120
|
+
}
|
|
121
|
+
subqueryToLookups.set(subquery, subqueryLookup(params));
|
|
115
122
|
}
|
|
116
123
|
const staticBuckets = [];
|
|
117
124
|
if (dynamicParameters.length == 0 && dynamicRequestFilters.length == 0) {
|
|
118
125
|
// When we have no dynamic parameters, the partial evaluation is a full instantiation.
|
|
119
126
|
const instantiations = this.cartesianProductOfParameterInstantiations(instantiation);
|
|
120
127
|
for (const instantiation of instantiations) {
|
|
121
|
-
staticBuckets.push(this.resolveBucket(stream, instantiation, reason,
|
|
128
|
+
staticBuckets.push(this.resolveBucket(stream, instantiation, reason, bucketScope));
|
|
122
129
|
}
|
|
123
130
|
}
|
|
124
131
|
const variant = this;
|
|
125
132
|
return {
|
|
126
133
|
staticBuckets: staticBuckets,
|
|
127
134
|
hasDynamicBuckets: this.subqueries.length != 0,
|
|
128
|
-
parameterQueryLookups: [...subqueryToLookups.values()].flatMap((f) => f),
|
|
129
135
|
async queryDynamicBucketDescriptions(source) {
|
|
130
136
|
// Evaluate subqueries
|
|
131
137
|
const subqueryResults = new Map();
|
|
@@ -156,7 +162,7 @@ export class StreamVariant {
|
|
|
156
162
|
perParameterInstantiation[lookup.index] = subqueryResults.get(lookup.subquery);
|
|
157
163
|
}
|
|
158
164
|
const product = variant.cartesianProductOfParameterInstantiations(perParameterInstantiation);
|
|
159
|
-
return Promise.resolve(product.map((e) => variant.resolveBucket(stream, e, reason,
|
|
165
|
+
return Promise.resolve(product.map((e) => variant.resolveBucket(stream, e, reason, bucketScope)));
|
|
160
166
|
}
|
|
161
167
|
};
|
|
162
168
|
}
|
|
@@ -168,36 +174,6 @@ export class StreamVariant {
|
|
|
168
174
|
// This will be an array of values (i.e. a total evaluation) because there are no dynamic parameters.
|
|
169
175
|
this.partiallyEvaluateParameters(params));
|
|
170
176
|
}
|
|
171
|
-
/**
|
|
172
|
-
* Creates lookup indices for dynamically-resolved parameters.
|
|
173
|
-
*
|
|
174
|
-
* Resolving dynamic parameters is a two-step process: First, for tables referenced in subqueries, we create an index
|
|
175
|
-
* to resolve which request parameters would match rows in subqueries. Then, when resolving bucket ids for a request,
|
|
176
|
-
* we compute subquery results by looking up results in that index.
|
|
177
|
-
*
|
|
178
|
-
* This implements the first step of that process.
|
|
179
|
-
*
|
|
180
|
-
* @param result The array into which evaluation results should be written to.
|
|
181
|
-
* @param sourceTable A table we depend on in a subquery.
|
|
182
|
-
* @param row Row data to index.
|
|
183
|
-
*/
|
|
184
|
-
pushParameterRowEvaluation(result, sourceTable, row) {
|
|
185
|
-
for (const subquery of this.subqueries) {
|
|
186
|
-
if (subquery.parameterTable.matches(sourceTable)) {
|
|
187
|
-
const lookups = subquery.lookupsForParameterRow(sourceTable, row);
|
|
188
|
-
if (lookups == null) {
|
|
189
|
-
continue;
|
|
190
|
-
}
|
|
191
|
-
// The row of the subquery. Since we only support subqueries with a single column, we unconditionally name the
|
|
192
|
-
// column `result` for simplicity.
|
|
193
|
-
const resultRow = { result: lookups.value };
|
|
194
|
-
result.push(...lookups.lookups.map((l) => ({
|
|
195
|
-
lookup: l,
|
|
196
|
-
bucketParameters: [resultRow]
|
|
197
|
-
})));
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
177
|
debugRepresentation() {
|
|
202
178
|
return {
|
|
203
179
|
id: this.id,
|
|
@@ -244,24 +220,70 @@ export class StreamVariant {
|
|
|
244
220
|
/**
|
|
245
221
|
* Builds a bucket id for an instantiation, like `stream|0[1,2,"foo"]`.
|
|
246
222
|
*
|
|
247
|
-
* @param
|
|
223
|
+
* @param bucketPrefix The name of the the bucket, excluding parameters
|
|
248
224
|
* @param instantiation An instantiation for all parameters in this variant.
|
|
249
225
|
* @param transformer A transformer adding version information to the inner id.
|
|
250
226
|
* @returns The generated bucket id
|
|
251
227
|
*/
|
|
252
|
-
|
|
228
|
+
serializeBucketParameters(instantiation) {
|
|
253
229
|
if (instantiation.length != this.parameters.length) {
|
|
254
230
|
throw Error('Internal error, instantiation length mismatch');
|
|
255
231
|
}
|
|
256
|
-
return
|
|
232
|
+
return JSONBucketNameSerialize.stringify(instantiation);
|
|
257
233
|
}
|
|
258
|
-
resolveBucket(stream, instantiation, reason,
|
|
234
|
+
resolveBucket(stream, instantiation, reason, bucketScope) {
|
|
259
235
|
return {
|
|
260
236
|
definition: stream.name,
|
|
261
237
|
inclusion_reasons: [reason],
|
|
262
|
-
bucket: this.
|
|
238
|
+
bucket: buildBucketName(bucketScope, this.serializeBucketParameters(instantiation)),
|
|
263
239
|
priority: stream.priority
|
|
264
240
|
};
|
|
265
241
|
}
|
|
242
|
+
createParameterQuerierSource(params, stream, querierDataSource) {
|
|
243
|
+
const hydrationState = params.hydrationState;
|
|
244
|
+
const bucketScope = hydrationState.getBucketSourceScope(querierDataSource);
|
|
245
|
+
const hydratedSubqueries = new Map(this.subqueries.map((s) => [s, s.hydrateLookupsForRequest(hydrationState)]));
|
|
246
|
+
return {
|
|
247
|
+
pushBucketParameterQueriers: (result, options) => {
|
|
248
|
+
const subscriptions = options.streams[stream.name] ?? [];
|
|
249
|
+
if (!stream.subscribedToByDefault && !subscriptions.length) {
|
|
250
|
+
// The client is not subscribing to this stream, so don't query buckets related to it.
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
let hasExplicitDefaultSubscription = false;
|
|
254
|
+
for (const subscription of subscriptions) {
|
|
255
|
+
let subscriptionParams = options.globalParameters;
|
|
256
|
+
if (subscription.parameters != null) {
|
|
257
|
+
subscriptionParams = subscriptionParams.withAddedStreamParameters(subscription.parameters);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
hasExplicitDefaultSubscription = true;
|
|
261
|
+
}
|
|
262
|
+
this.queriersForSubscription(stream, result, subscription, subscriptionParams, bucketScope, hydratedSubqueries);
|
|
263
|
+
}
|
|
264
|
+
// If the stream is subscribed to by default and there is no explicit subscription that would match the default
|
|
265
|
+
// subscription, also include the default querier.
|
|
266
|
+
if (stream.subscribedToByDefault && !hasExplicitDefaultSubscription) {
|
|
267
|
+
this.queriersForSubscription(stream, result, null, options.globalParameters, bucketScope, hydratedSubqueries);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
queriersForSubscription(stream, result, subscription, params, bucketScope, hydratedSubqueries) {
|
|
273
|
+
const reason = subscription != null ? { subscription: subscription.opaque_id } : 'default';
|
|
274
|
+
try {
|
|
275
|
+
const querier = this.querier(stream, reason, params, bucketScope, hydratedSubqueries);
|
|
276
|
+
if (querier) {
|
|
277
|
+
result.queriers.push(querier);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
catch (e) {
|
|
281
|
+
result.errors.push({
|
|
282
|
+
descriptor: stream.name,
|
|
283
|
+
message: `Error evaluating bucket ids: ${e.message}`,
|
|
284
|
+
subscription: subscription ?? undefined
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}
|
|
266
288
|
}
|
|
267
289
|
//# sourceMappingURL=variant.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variant.js","sourceRoot":"","sources":["../../src/streams/variant.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"variant.js","sourceRoot":"","sources":["../../src/streams/variant.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAGpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,aAAa;IACxB,EAAE,CAAS;IACX,UAAU,CAAoB;IAC9B,UAAU,CAAsB;IAEhC;;;;OAIG;IACH,oBAAoB,CAAiC;IAErD;;;;;OAKG;IACH,cAAc,CAAkB;IAEhC,YAAY,EAAU;QACpB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,mBAAmB,CAAC,UAAkB;QACpC,OAAO,GAAG,UAAU,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;IACpC,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,OAAiB;QACtC,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;IACpG,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAAC,OAAiB;QACpC,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACnD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,gHAAgH;QAChH,0DAA0D;QAC1D,MAAM,uBAAuB,GAAwB,EAAE,CAAC;QACxD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACzB,+GAA+G;gBAC/G,+DAA+D;gBAC/D,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QAED,8FAA8F;QAC9F,0BAA0B;QAC1B,OAAO,IAAI,CAAC,yCAAyC,CAAC,uBAAuB,CAAC,CAAC;IACjF,CAAC;IAED;;;;;;OAMG;IACK,yCAAyC,CAAC,cAAmC;QACnF,OAAO,CAAC,GAAG,gBAAgB,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CACL,MAAkB,EAClB,MAA6B,EAC7B,MAAyB,EACzB,WAA4B,EAC5B,kBAAsC;QAEtC,MAAM,aAAa,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QAOD,MAAM,qBAAqB,GAA4B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC;QAC9G,MAAM,iBAAiB,GAA+B,EAAE,CAAC;QACzD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA8C,CAAC;QAEhF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAEhC,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;gBACpD,iBAAiB,CAAC,IAAI,CAAC;oBACrB,KAAK,EAAE,CAAC;oBACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;iBAC1B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxD,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC7D,CAAC;YACD,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,aAAa,GAAqB,EAAE,CAAC;QAC3C,IAAI,iBAAiB,CAAC,MAAM,IAAI,CAAC,IAAI,qBAAqB,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACvE,sFAAsF;YACtF,MAAM,cAAc,GAAG,IAAI,CAAC,yCAAyC,CAAC,aAAoC,CAAC,CAAC;YAC5G,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;gBAC3C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC;QACrB,OAAO;YACL,aAAa,EAAE,aAAa;YAC5B,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC;YAC9C,KAAK,CAAC,8BAA8B,CAAC,MAAM;gBACzC,sBAAsB;gBACtB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAwC,CAAC;gBACxE,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC9D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;oBACpD,kGAAkG;oBAClG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBACzC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACxC,CAAC;gBAED,sEAAsE;gBACtE,KAAK,MAAM,MAAM,IAAI,qBAAqB,EAAE,CAAC;oBAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAE,CAAC,EAAE,CAAC;wBACnE,OAAO,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC;gBAED,MAAM,yBAAyB,GAA4C,EAAE,CAAC;gBAC9E,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE,CAAC;oBACtC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC7B,6BAA6B;wBAC7B,yBAAyB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC5C,CAAC;yBAAM,CAAC;wBACN,yCAAyC;wBACzC,yBAAyB,CAAC,IAAI,CAAC,CAAC,SAA4B,CAAC,CAAC,CAAC;oBACjE,CAAC;gBACH,CAAC;gBAED,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;oBACvC,yBAAyB,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAE,CAAC;gBAClF,CAAC;gBAED,MAAM,OAAO,GAAG,OAAO,CAAC,yCAAyC,CAC/D,yBAAgD,CACjD,CAAC;gBAEF,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;YACpG,CAAC;SACF,CAAC;IACJ,CAAC;IAED,wBAAwB,CAAC,MAAyB;QAChD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,IAAI,CAAC,yCAAyC;QACnD,qGAAqG;QACrG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAwB,CAChE,CAAC;IACJ,CAAC;IAED,mBAAmB;QACjB,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;aACpB,CAAC,CAAC;YACH,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtC,KAAK,EAAE,CAAC,CAAC,cAAc;aACxB,CAAC,CAAC;YACH,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM;YACxD,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACxD,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACK,2BAA2B,CAAC,MAAyB;QAC3D,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzC,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAA4C,EAAE,CAAC;QAClE,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAChC,IAAI,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;gBAC/D,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBACvB,6GAA6G;oBAC7G,oDAAoD;oBACpD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;;;;;;OAOG;IACK,yBAAyB,CAAC,aAAgC;QAChE,IAAI,aAAa,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACnD,MAAM,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,uBAAuB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC;IAEO,aAAa,CACnB,MAAkB,EAClB,aAAgC,EAChC,MAA6B,EAC7B,WAA4B;QAE5B,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,IAAI;YACvB,iBAAiB,EAAE,CAAC,MAAM,CAAC;YAC3B,MAAM,EAAE,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;YACnF,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;IACJ,CAAC;IAED,4BAA4B,CAC1B,MAA0B,EAC1B,MAAkB,EAClB,iBAAmC;QAEnC,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC7C,MAAM,WAAW,GAAG,cAAc,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QAE3E,MAAM,kBAAkB,GAAuB,IAAI,GAAG,CACpD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC,CAAC,CAC5E,CAAC;QAEF,OAAO;YACL,2BAA2B,EAAE,CAAC,MAAuB,EAAE,OAA0B,EAAQ,EAAE;gBACzF,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAEzD,IAAI,CAAC,MAAM,CAAC,qBAAqB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;oBAC3D,sFAAsF;oBACtF,OAAO;gBACT,CAAC;gBAED,IAAI,8BAA8B,GAAG,KAAK,CAAC;gBAC3C,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;oBACzC,IAAI,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC;oBAClD,IAAI,YAAY,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;wBACpC,kBAAkB,GAAG,kBAAkB,CAAC,yBAAyB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;oBAC7F,CAAC;yBAAM,CAAC;wBACN,8BAA8B,GAAG,IAAI,CAAC;oBACxC,CAAC;oBAED,IAAI,CAAC,uBAAuB,CAC1B,MAAM,EACN,MAAM,EACN,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,kBAAkB,CACnB,CAAC;gBACJ,CAAC;gBAED,+GAA+G;gBAC/G,kDAAkD;gBAClD,IAAI,MAAM,CAAC,qBAAqB,IAAI,CAAC,8BAA8B,EAAE,CAAC;oBACpE,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;gBAChH,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,uBAAuB,CAC7B,MAAkB,EAClB,MAAuB,EACvB,YAAoC,EACpC,MAAyB,EACzB,WAA4B,EAC5B,kBAAsC;QAEtC,MAAM,MAAM,GAA0B,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAElH,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;YACtF,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBACjB,UAAU,EAAE,MAAM,CAAC,IAAI;gBACvB,OAAO,EAAE,gCAAgC,CAAC,CAAC,OAAO,EAAE;gBACpD,YAAY,EAAE,YAAY,IAAI,SAAS;aACxC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { CompatibilityContext } from '../../index.js';
|
|
2
|
+
import { ScalarExpressionEngine } from './scalar_expression_engine.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates a {@link ScalarExpressionEngine} implemented by evaluating scalar expressions in JavaScript.
|
|
5
|
+
*/
|
|
6
|
+
export declare function javaScriptExpressionEngine(compatibility: CompatibilityContext): ScalarExpressionEngine;
|