@powersync/service-sync-rules 0.40.0 → 0.42.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/HydratedSyncConfig.d.ts +9 -2
- package/dist/HydratedSyncConfig.js +12 -1
- package/dist/HydratedSyncConfig.js.map +1 -1
- package/dist/HydrationState.d.ts +2 -0
- package/dist/HydrationState.js.map +1 -1
- package/dist/StorageVersion.js +2 -1
- package/dist/StorageVersion.js.map +1 -1
- package/dist/SyncConfig.d.ts +4 -3
- package/dist/SyncConfig.js +10 -11
- package/dist/SyncConfig.js.map +1 -1
- package/dist/compiler/bucket_resolver.d.ts +1 -0
- package/dist/compiler/bucket_resolver.js +22 -12
- package/dist/compiler/bucket_resolver.js.map +1 -1
- package/dist/compiler/compatibility.d.ts +38 -9
- package/dist/compiler/compatibility.js +81 -11
- package/dist/compiler/compatibility.js.map +1 -1
- package/dist/compiler/compiler.d.ts +81 -13
- package/dist/compiler/compiler.js +111 -15
- package/dist/compiler/compiler.js.map +1 -1
- package/dist/compiler/expression.d.ts +17 -15
- package/dist/compiler/expression.js +21 -12
- package/dist/compiler/expression.js.map +1 -1
- package/dist/compiler/filter.d.ts +4 -4
- package/dist/compiler/filter.js +5 -4
- package/dist/compiler/filter.js.map +1 -1
- package/dist/compiler/ir_to_sync_plan.d.ts +4 -2
- package/dist/compiler/ir_to_sync_plan.js +40 -36
- package/dist/compiler/ir_to_sync_plan.js.map +1 -1
- package/dist/compiler/querier_graph.js +43 -24
- package/dist/compiler/querier_graph.js.map +1 -1
- package/dist/compiler/rows.d.ts +23 -29
- package/dist/compiler/rows.js +83 -59
- package/dist/compiler/rows.js.map +1 -1
- package/dist/compiler/table.d.ts +3 -2
- package/dist/compiler/table.js +5 -6
- package/dist/compiler/table.js.map +1 -1
- package/dist/events/CompiledEventSourceQuery.d.ts +51 -0
- package/dist/events/CompiledEventSourceQuery.js +119 -0
- package/dist/events/CompiledEventSourceQuery.js.map +1 -0
- package/dist/events/EventDescriptor.d.ts +26 -0
- package/dist/events/EventDescriptor.js +2 -0
- package/dist/events/EventDescriptor.js.map +1 -0
- package/dist/from_yaml.js +24 -20
- package/dist/from_yaml.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/json_schema.js +1 -1
- package/dist/json_schema.js.map +1 -1
- package/dist/schema-generators/RustSchemaGenerator.d.ts +22 -0
- package/dist/schema-generators/RustSchemaGenerator.js +120 -0
- package/dist/schema-generators/RustSchemaGenerator.js.map +1 -0
- package/dist/schema-generators/generators.d.ts +2 -0
- package/dist/schema-generators/generators.js +2 -0
- package/dist/schema-generators/generators.js.map +1 -1
- package/dist/schema-generators/schema-generators.d.ts +1 -0
- package/dist/schema-generators/schema-generators.js +1 -0
- package/dist/schema-generators/schema-generators.js.map +1 -1
- package/dist/sync_plan/evaluator/bucket_data_source.js +11 -53
- package/dist/sync_plan/evaluator/bucket_data_source.js.map +1 -1
- package/dist/sync_plan/evaluator/index.d.ts +2 -7
- package/dist/sync_plan/evaluator/index.js +6 -7
- package/dist/sync_plan/evaluator/index.js.map +1 -1
- package/dist/sync_plan/evaluator/parameter_evaluator.js +11 -7
- package/dist/sync_plan/evaluator/parameter_evaluator.js.map +1 -1
- package/dist/sync_plan/evaluator/row_projection.d.ts +22 -0
- package/dist/sync_plan/evaluator/row_projection.js +71 -0
- package/dist/sync_plan/evaluator/row_projection.js.map +1 -0
- package/dist/sync_plan/plan.d.ts +36 -5
- package/dist/sync_plan/plan_equality_serialized.d.ts +12 -2
- package/dist/sync_plan/plan_equality_serialized.js +56 -0
- package/dist/sync_plan/plan_equality_serialized.js.map +1 -1
- package/dist/sync_plan/serialize.d.ts +35 -4
- package/dist/sync_plan/serialize.js +93 -16
- package/dist/sync_plan/serialize.js.map +1 -1
- package/package.json +1 -1
- package/schema/sync_rules.json +3 -2
- package/dist/events/SqlEventDescriptor.d.ts +0 -20
- package/dist/events/SqlEventDescriptor.js +0 -51
- package/dist/events/SqlEventDescriptor.js.map +0 -1
- package/dist/events/SqlEventSourceQuery.d.ts +0 -20
- package/dist/events/SqlEventSourceQuery.js +0 -125
- package/dist/events/SqlEventSourceQuery.js.map +0 -1
|
@@ -1,27 +1,32 @@
|
|
|
1
1
|
import { parse } from 'pgsql-ast-parser';
|
|
2
|
+
import { SqlRuleError } from '../errors.js';
|
|
2
3
|
import { DangerousParameterDetector } from './detect_dangerous_parameters.js';
|
|
3
4
|
import { HashSet } from './equality.js';
|
|
4
5
|
import { NodeLocations } from './expression.js';
|
|
6
|
+
import { RowExpression, SingleDependencyExpression } from './filter.js';
|
|
5
7
|
import { CompilerModelToSyncPlan } from './ir_to_sync_plan.js';
|
|
6
8
|
import { StreamQueryParser } from './parser.js';
|
|
7
9
|
import { QuerierGraphBuilder } from './querier_graph.js';
|
|
10
|
+
import { EventRowEvaluator } from './rows.js';
|
|
8
11
|
import { SqlScope } from './scope.js';
|
|
9
12
|
/**
|
|
10
|
-
* State for compiling sync streams.
|
|
13
|
+
* State for compiling sync streams and replication events into a sync plan.
|
|
11
14
|
*
|
|
12
|
-
* The
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* relations. This allows the compiler to efficiently de-duplicate parameters and buckets.
|
|
15
|
+
* The compiler stores a mutable intermediate representation that is essentially a copy of the resulting
|
|
16
|
+
* {@link SyncPlan}. Stream compilation uses JavaScript classes with behavioral equality, while events use plain
|
|
17
|
+
* compiler records. Stream queries and event definitions remain separate within that model.
|
|
16
18
|
*
|
|
17
|
-
*
|
|
19
|
+
* The stream compilation process is as follows: Each data query for a stream is first parsed by
|
|
18
20
|
* {@link StreamQueryParser} into a canonicalized intermediate representation (see that class for details).
|
|
19
21
|
* Then, {@link QuerierGraphBuilder} analyzes a chain of `AND` expressions to identify parameters (as partition keys)
|
|
20
22
|
* and their instantiation, as well as static filters that need to be added to reach row.
|
|
21
23
|
*/
|
|
22
24
|
export class SyncStreamsCompiler {
|
|
23
25
|
options;
|
|
24
|
-
output =
|
|
26
|
+
output = {
|
|
27
|
+
streams: new CompiledStreamQueries(),
|
|
28
|
+
events: []
|
|
29
|
+
};
|
|
25
30
|
locations = new NodeLocations();
|
|
26
31
|
constructor(options) {
|
|
27
32
|
this.options = options;
|
|
@@ -94,10 +99,108 @@ export class SyncStreamsCompiler {
|
|
|
94
99
|
}
|
|
95
100
|
};
|
|
96
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Compiles the payload queries for a named replication event.
|
|
104
|
+
*
|
|
105
|
+
* Event queries intentionally support a smaller surface than stream queries: They must project and filter a single
|
|
106
|
+
* physical source table and cannot depend on request parameters, joins, subqueries or table-valued functions.
|
|
107
|
+
*/
|
|
108
|
+
event(name) {
|
|
109
|
+
const event = { name, sourceQueries: [] };
|
|
110
|
+
this.output.events.push(event);
|
|
111
|
+
return {
|
|
112
|
+
addSourceQuery: (sql, errors) => {
|
|
113
|
+
const stmt = tryParse(sql, errors);
|
|
114
|
+
if (stmt == null) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
let statementToCompile = stmt;
|
|
118
|
+
if (this.options.compileEventPayloadFilters === false && stmt.type == 'select' && stmt.where != null) {
|
|
119
|
+
errors.report('`WHERE` clauses in legacy event payload queries are ignored. Redeploy this sync config with edition 3 to validate and enable them.', stmt.where, { isWarning: true });
|
|
120
|
+
statementToCompile = { ...stmt, where: undefined };
|
|
121
|
+
}
|
|
122
|
+
const parser = new StreamQueryParser({
|
|
123
|
+
compiler: this,
|
|
124
|
+
originalText: sql,
|
|
125
|
+
locations: this.locations,
|
|
126
|
+
parentScope: new SqlScope({}),
|
|
127
|
+
errors
|
|
128
|
+
});
|
|
129
|
+
const query = parser.parse(statementToCompile);
|
|
130
|
+
if (query == null) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (query.joined.length != 0) {
|
|
134
|
+
errors.report('Event payload queries must SELECT from a single physical source table.', query.span.location);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const variants = [];
|
|
138
|
+
let valid = true;
|
|
139
|
+
for (const variant of query.where.terms) {
|
|
140
|
+
const filters = [];
|
|
141
|
+
for (const term of variant.terms) {
|
|
142
|
+
if (!(term instanceof SingleDependencyExpression) ||
|
|
143
|
+
term.dependsOnConnection ||
|
|
144
|
+
(term.resultSet != null && term.resultSet !== query.sourceTable)) {
|
|
145
|
+
errors.report('Event payload queries cannot depend on request parameters or other tables.', term instanceof SingleDependencyExpression ? term.expression.location.location : term.location);
|
|
146
|
+
valid = false;
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
filters.push(new RowExpression(term));
|
|
150
|
+
}
|
|
151
|
+
variants.push(new EventRowEvaluator({
|
|
152
|
+
columns: query.resultColumns,
|
|
153
|
+
syntacticSource: query.sourceTable,
|
|
154
|
+
filters,
|
|
155
|
+
partitionBy: [],
|
|
156
|
+
addedFunctions: []
|
|
157
|
+
}));
|
|
158
|
+
}
|
|
159
|
+
if (valid) {
|
|
160
|
+
event.sourceQueries.push({ sql, sourceTable: query.sourceTable, variants });
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* @returns A sync plan representing an immutable snapshot of the compiler output.
|
|
167
|
+
*/
|
|
168
|
+
toSyncPlan() {
|
|
169
|
+
const translator = new CompilerModelToSyncPlan();
|
|
170
|
+
return translator.translate(this.output);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Compiles raw event definitions from legacy sync plans into the current plan representation.
|
|
175
|
+
*
|
|
176
|
+
* All definitions share one compiler to match normal sync-config compilation. Callers should reject fatal errors
|
|
177
|
+
* rather than carrying invalid legacy event evaluators into a {@link SyncPlan}.
|
|
178
|
+
*/
|
|
179
|
+
export function compileEventDefinitions(definitions, options) {
|
|
180
|
+
const compiler = new SyncStreamsCompiler(options);
|
|
181
|
+
const errors = [];
|
|
182
|
+
for (const [name, queries] of Object.entries(definitions)) {
|
|
183
|
+
const event = compiler.event(name);
|
|
184
|
+
for (const sql of queries) {
|
|
185
|
+
event.addSourceQuery(sql, {
|
|
186
|
+
report(message, location, reportOptions) {
|
|
187
|
+
const error = new SqlRuleError(message, sql, location);
|
|
188
|
+
error.type = reportOptions?.isWarning ? 'warning' : 'fatal';
|
|
189
|
+
errors.push(error);
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return { events: compiler.toSyncPlan().events, errors };
|
|
97
195
|
}
|
|
98
196
|
function tryParse(sql, errors) {
|
|
99
197
|
try {
|
|
100
|
-
const
|
|
198
|
+
const statements = parse(sql, { locationTracking: true });
|
|
199
|
+
if (statements.length != 1) {
|
|
200
|
+
errors.report('Only a single SELECT statement is supported', statements[1]?._location ?? { start: 0, end: sql.length });
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
const [stmt] = statements;
|
|
101
204
|
return stmt;
|
|
102
205
|
}
|
|
103
206
|
catch (e) {
|
|
@@ -132,12 +235,5 @@ export class CompiledStreamQueries {
|
|
|
132
235
|
canonicalizePointLookup(lookup) {
|
|
133
236
|
return this._pointLookups.getOrInsert(lookup)[0];
|
|
134
237
|
}
|
|
135
|
-
/**
|
|
136
|
-
* @returns A sync plan representing an immutable snapshot of this intermediate representation.
|
|
137
|
-
*/
|
|
138
|
-
toSyncPlan() {
|
|
139
|
-
const translator = new CompilerModelToSyncPlan();
|
|
140
|
-
return translator.translate(this);
|
|
141
|
-
}
|
|
142
238
|
}
|
|
143
239
|
//# sourceMappingURL=compiler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/compiler/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,EAAqB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/compiler/compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Expr, NodeLocation, PGNode } from 'pgsql-ast-parser';
|
|
2
2
|
import { SqlExpression } from '../sync_plan/expression.js';
|
|
3
3
|
import { ConnectionParameterSource } from '../sync_plan/plan.js';
|
|
4
|
-
import {
|
|
4
|
+
import { EqualsIgnoringPrimaryResultSet, TableValuedFunctionEquality } from './compatibility.js';
|
|
5
5
|
import { ParsingErrorListener } from './compiler.js';
|
|
6
|
-
import { StableHasher } from './equality.js';
|
|
6
|
+
import { Equatable, StableHasher } from './equality.js';
|
|
7
7
|
import { SourceResultSet } from './table.js';
|
|
8
8
|
/**
|
|
9
9
|
* An analyzed SQL expression tracking dependencies on non-static data (i.e. rows or connection sources).
|
|
@@ -16,7 +16,7 @@ import { SourceResultSet } from './table.js';
|
|
|
16
16
|
* Once in this form, it's easy to reason about dependencies in expressions (used to later generate parameter match
|
|
17
17
|
* clauses) and to evaluate expressions at runtime (by preparing them as a statement and binding external values).
|
|
18
18
|
*/
|
|
19
|
-
export declare class SyncExpression implements
|
|
19
|
+
export declare class SyncExpression implements EqualsIgnoringPrimaryResultSet {
|
|
20
20
|
#private;
|
|
21
21
|
/**
|
|
22
22
|
* The AST node backing {@link sql}.
|
|
@@ -46,26 +46,26 @@ export declare class SyncExpression implements EqualsIgnoringResultSet {
|
|
|
46
46
|
* We use this to be able to compose expressions, e.g. to possibly merge them.
|
|
47
47
|
*/
|
|
48
48
|
node: SqlExpression<ExpressionInput>, locations: NodeLocations);
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
equalsAssumingSamePrimaryResultSet(other: EqualsIgnoringPrimaryResultSet, tableValued: TableValuedFunctionEquality): boolean;
|
|
50
|
+
assumingSamePrimaryResultSetEqualityHashCode(tableValued: TableValuedFunctionEquality, hasher: StableHasher): void;
|
|
51
51
|
}
|
|
52
52
|
export type ExpressionInput = ColumnInRow | RowMetadata | ConnectionParameter;
|
|
53
53
|
/**
|
|
54
54
|
* An expression input resolved against a row of a result set: either a column value or metadata about the row's
|
|
55
55
|
* source table.
|
|
56
56
|
*/
|
|
57
|
-
export declare abstract class RowReference implements
|
|
57
|
+
export declare abstract class RowReference implements EqualsIgnoringPrimaryResultSet {
|
|
58
58
|
readonly syntacticOrigin: Expr;
|
|
59
59
|
readonly resultSet: SourceResultSet;
|
|
60
60
|
constructor(syntacticOrigin: Expr, resultSet: SourceResultSet);
|
|
61
|
-
abstract
|
|
62
|
-
abstract
|
|
61
|
+
abstract equalsAssumingSamePrimaryResultSet(other: EqualsIgnoringPrimaryResultSet, tableValued: TableValuedFunctionEquality): boolean;
|
|
62
|
+
abstract assumingSamePrimaryResultSetEqualityHashCode(tableValued: TableValuedFunctionEquality, hasher: StableHasher): void;
|
|
63
63
|
}
|
|
64
64
|
export declare class ColumnInRow extends RowReference {
|
|
65
65
|
readonly column: string;
|
|
66
66
|
constructor(syntacticOrigin: Expr, resultSet: SourceResultSet, column: string);
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
equalsAssumingSamePrimaryResultSet(other: EqualsIgnoringPrimaryResultSet, tableValued: TableValuedFunctionEquality): boolean;
|
|
68
|
+
assumingSamePrimaryResultSetEqualityHashCode(tableValued: TableValuedFunctionEquality, hasher: StableHasher): void;
|
|
69
69
|
}
|
|
70
70
|
export type RowMetadataKind = 'schema' | 'table_name' | 'table_suffix';
|
|
71
71
|
/**
|
|
@@ -76,15 +76,17 @@ export type RowMetadataKind = 'schema' | 'table_name' | 'table_suffix';
|
|
|
76
76
|
export declare class RowMetadata extends RowReference {
|
|
77
77
|
readonly kind: RowMetadataKind;
|
|
78
78
|
constructor(syntacticOrigin: Expr, resultSet: SourceResultSet, kind: RowMetadataKind);
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
equalsAssumingSamePrimaryResultSet(other: EqualsIgnoringPrimaryResultSet): boolean;
|
|
80
|
+
assumingSamePrimaryResultSetEqualityHashCode(_tableValued: TableValuedFunctionEquality, hasher: StableHasher): void;
|
|
81
81
|
}
|
|
82
|
-
export declare class ConnectionParameter implements
|
|
82
|
+
export declare class ConnectionParameter implements EqualsIgnoringPrimaryResultSet, Equatable {
|
|
83
83
|
readonly syntacticOrigin: Expr;
|
|
84
84
|
readonly source: ConnectionParameterSource;
|
|
85
85
|
constructor(syntacticOrigin: Expr, source: ConnectionParameterSource);
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
equals(other: unknown): boolean;
|
|
87
|
+
buildHash(hasher: StableHasher): void;
|
|
88
|
+
equalsAssumingSamePrimaryResultSet(other: EqualsIgnoringPrimaryResultSet): boolean;
|
|
89
|
+
assumingSamePrimaryResultSetEqualityHashCode(_tableValued: TableValuedFunctionEquality, hasher: StableHasher): void;
|
|
88
90
|
}
|
|
89
91
|
/**
|
|
90
92
|
* Tracks the original source location for translated {@link SqlExpression} nodes.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { getLocation } from '../errors.js';
|
|
2
2
|
import { ExpressionToSqlite } from '../sync_plan/expression_to_sql.js';
|
|
3
3
|
import { RecursiveExpressionVisitor } from '../sync_plan/expression_visitor.js';
|
|
4
|
-
import { equalsIgnoringResultSetList } from './compatibility.js';
|
|
5
4
|
/**
|
|
6
5
|
* An analyzed SQL expression tracking dependencies on non-static data (i.e. rows or connection sources).
|
|
7
6
|
*
|
|
@@ -53,14 +52,14 @@ export class SyncExpression {
|
|
|
53
52
|
this.node = node;
|
|
54
53
|
this.locations = locations;
|
|
55
54
|
}
|
|
56
|
-
|
|
55
|
+
equalsAssumingSamePrimaryResultSet(other, tableValued) {
|
|
57
56
|
return (other instanceof SyncExpression &&
|
|
58
57
|
other.sql == this.sql &&
|
|
59
|
-
|
|
58
|
+
tableValued.listEquality.equals(other.instantiation, this.instantiation));
|
|
60
59
|
}
|
|
61
|
-
|
|
60
|
+
assumingSamePrimaryResultSetEqualityHashCode(tableValued, hasher) {
|
|
62
61
|
hasher.addString(this.sql);
|
|
63
|
-
|
|
62
|
+
tableValued.listEquality.hash(hasher, this.instantiation);
|
|
64
63
|
}
|
|
65
64
|
}
|
|
66
65
|
class FindExternalData extends RecursiveExpressionVisitor {
|
|
@@ -90,11 +89,14 @@ export class ColumnInRow extends RowReference {
|
|
|
90
89
|
super(syntacticOrigin, resultSet);
|
|
91
90
|
this.column = column;
|
|
92
91
|
}
|
|
93
|
-
|
|
94
|
-
return other instanceof ColumnInRow &&
|
|
92
|
+
equalsAssumingSamePrimaryResultSet(other, tableValued) {
|
|
93
|
+
return (other instanceof ColumnInRow &&
|
|
94
|
+
other.column == this.column &&
|
|
95
|
+
tableValued.resultSetEquals(other.resultSet, this.resultSet));
|
|
95
96
|
}
|
|
96
|
-
|
|
97
|
+
assumingSamePrimaryResultSetEqualityHashCode(tableValued, hasher) {
|
|
97
98
|
hasher.addString(this.column);
|
|
99
|
+
tableValued.hashResultSet(hasher, this.resultSet);
|
|
98
100
|
}
|
|
99
101
|
}
|
|
100
102
|
/**
|
|
@@ -108,10 +110,11 @@ export class RowMetadata extends RowReference {
|
|
|
108
110
|
super(syntacticOrigin, resultSet);
|
|
109
111
|
this.kind = kind;
|
|
110
112
|
}
|
|
111
|
-
|
|
113
|
+
equalsAssumingSamePrimaryResultSet(other) {
|
|
114
|
+
// Row metadata is always on the primary result set, so no need to hash the result set here.
|
|
112
115
|
return other instanceof RowMetadata && other.kind == this.kind;
|
|
113
116
|
}
|
|
114
|
-
|
|
117
|
+
assumingSamePrimaryResultSetEqualityHashCode(_tableValued, hasher) {
|
|
115
118
|
hasher.addString(`table.${this.kind}`);
|
|
116
119
|
}
|
|
117
120
|
}
|
|
@@ -122,12 +125,18 @@ export class ConnectionParameter {
|
|
|
122
125
|
this.syntacticOrigin = syntacticOrigin;
|
|
123
126
|
this.source = source;
|
|
124
127
|
}
|
|
125
|
-
|
|
128
|
+
equals(other) {
|
|
126
129
|
return other instanceof ConnectionParameter && other.source == this.source;
|
|
127
130
|
}
|
|
128
|
-
|
|
131
|
+
buildHash(hasher) {
|
|
129
132
|
hasher.addString(this.source);
|
|
130
133
|
}
|
|
134
|
+
equalsAssumingSamePrimaryResultSet(other) {
|
|
135
|
+
return this.equals(other);
|
|
136
|
+
}
|
|
137
|
+
assumingSamePrimaryResultSetEqualityHashCode(_tableValued, hasher) {
|
|
138
|
+
return this.buildHash(hasher);
|
|
139
|
+
}
|
|
131
140
|
}
|
|
132
141
|
/**
|
|
133
142
|
* Tracks the original source location for translated {@link SqlExpression} nodes.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression.js","sourceRoot":"","sources":["../../src/compiler/expression.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"expression.js","sourceRoot":"","sources":["../../src/compiler/expression.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAOhF;;;;;;;;;;GAUG;AACH,MAAM,OAAO,cAAc;IAuCd;IACA;IAvCX,IAAI,CAAU;IACd,cAAc,CAA8B;IAE5C;;;;;;OAMG;IACH,IAAI,GAAG;QACL,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAED;;;OAGG;IACH,IAAI,aAAa;QACf,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,cAAc,CAAC;QAC7B,CAAC;QAED,MAAM,aAAa,GAAsB,EAAE,CAAC;QAC5C,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED;IACE;;;;OAIG;IACM,IAAoC,EACpC,SAAwB;QADxB,SAAI,GAAJ,IAAI,CAAgC;QACpC,cAAS,GAAT,SAAS,CAAe;IAChC,CAAC;IAEJ,kCAAkC,CAChC,KAAqC,EACrC,WAAwC;QAExC,OAAO,CACL,KAAK,YAAY,cAAc;YAC/B,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG;YACrB,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CACzE,CAAC;IACJ,CAAC;IAED,4CAA4C,CAAC,WAAwC,EAAE,MAAoB;QACzG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5D,CAAC;CACF;AAED,MAAM,gBAAiB,SAAQ,0BAAoE;IACjG,iBAAiB,CAAC,IAAoC,EAAE,GAAsB;QAC5E,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,iBAAiB,CAAC,IAAmC,EAAE,GAAsB;QAC3E,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,CAAU,QAAQ,GAAqB,IAAI,gBAAgB,EAAE,CAAC;;AAKtE;;;GAGG;AACH,MAAM,OAAgB,YAAY;IAErB;IACA;IAFX,YACW,eAAqB,EACrB,SAA0B;QAD1B,oBAAe,GAAf,eAAe,CAAM;QACrB,cAAS,GAAT,SAAS,CAAiB;IAClC,CAAC;CAUL;AAED,MAAM,OAAO,WAAY,SAAQ,YAAY;IAIhC;IAHX,YACE,eAAqB,EACrB,SAA0B,EACjB,MAAc;QAEvB,KAAK,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;QAFzB,WAAM,GAAN,MAAM,CAAQ;IAGzB,CAAC;IAEQ,kCAAkC,CACzC,KAAqC,EACrC,WAAwC;QAExC,OAAO,CACL,KAAK,YAAY,WAAW;YAC5B,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;YAC3B,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAC7D,CAAC;IACJ,CAAC;IAEQ,4CAA4C,CACnD,WAAwC,EACxC,MAAoB;QAEpB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAID;;;;GAIG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;IAIhC;IAHX,YACE,eAAqB,EACrB,SAA0B,EACjB,IAAqB;QAE9B,KAAK,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;QAFzB,SAAI,GAAJ,IAAI,CAAiB;IAGhC,CAAC;IAEQ,kCAAkC,CAAC,KAAqC;QAC/E,4FAA4F;QAC5F,OAAO,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;IACjE,CAAC;IAEQ,4CAA4C,CACnD,YAAyC,EACzC,MAAoB;QAEpB,MAAM,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,mBAAmB;IAEnB;IACA;IAFX,YACW,eAAqB,EACrB,MAAiC;QADjC,oBAAe,GAAf,eAAe,CAAM;QACrB,WAAM,GAAN,MAAM,CAA2B;IACzC,CAAC;IAEJ,MAAM,CAAC,KAAc;QACnB,OAAO,KAAK,YAAY,mBAAmB,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;IAC7E,CAAC;IAED,SAAS,CAAC,MAAoB;QAC5B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED,kCAAkC,CAAC,KAAqC;QACtE,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,4CAA4C,CAAC,YAAyC,EAAE,MAAoB;QAC1G,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,OAAO,aAAa;IACf,aAAa,GAAG,IAAI,GAAG,EAA0C,CAAC;IAE3E,WAAW,CAAC,MAA8B;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjD,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAS,CAAC,MAAM,EAAE,CAAC;IAChD,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NodeLocation } from 'pgsql-ast-parser';
|
|
2
|
-
import {
|
|
2
|
+
import { EqualsIgnoringPrimaryResultSet, TableValuedFunctionEquality } from './compatibility.js';
|
|
3
3
|
import { StableHasher } from './equality.js';
|
|
4
4
|
import { ExpressionInput, SyncExpression } from './expression.js';
|
|
5
5
|
import { SourceResultSet } from './table.js';
|
|
@@ -21,7 +21,7 @@ export declare function isBaseTerm(value: unknown): value is BaseTerm;
|
|
|
21
21
|
/**
|
|
22
22
|
* A {@link SyncExpression} that only depends on a single result set or connection data.
|
|
23
23
|
*/
|
|
24
|
-
export declare class SingleDependencyExpression implements
|
|
24
|
+
export declare class SingleDependencyExpression implements EqualsIgnoringPrimaryResultSet {
|
|
25
25
|
readonly expression: SyncExpression;
|
|
26
26
|
/**
|
|
27
27
|
* The single result set on which the expression depends on.
|
|
@@ -34,8 +34,8 @@ export declare class SingleDependencyExpression implements EqualsIgnoringResultS
|
|
|
34
34
|
*/
|
|
35
35
|
readonly dependsOnConnection: boolean;
|
|
36
36
|
constructor(expression: SyncExpression | SingleDependencyExpression);
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
equalsAssumingSamePrimaryResultSet(other: EqualsIgnoringPrimaryResultSet, tableValued: TableValuedFunctionEquality): boolean;
|
|
38
|
+
assumingSamePrimaryResultSetEqualityHashCode(tableValued: TableValuedFunctionEquality, hasher: StableHasher): void;
|
|
39
39
|
/**
|
|
40
40
|
* If all inputs have a single dependency, returns either the result set they all depend on or `null` and whether they
|
|
41
41
|
* depend on connection data.
|
package/dist/compiler/filter.js
CHANGED
|
@@ -35,11 +35,12 @@ export class SingleDependencyExpression {
|
|
|
35
35
|
this.dependsOnConnection = expression.dependsOnConnection;
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
|
|
39
|
-
return other instanceof SingleDependencyExpression &&
|
|
38
|
+
equalsAssumingSamePrimaryResultSet(other, tableValued) {
|
|
39
|
+
return (other instanceof SingleDependencyExpression &&
|
|
40
|
+
other.expression.equalsAssumingSamePrimaryResultSet(this.expression, tableValued));
|
|
40
41
|
}
|
|
41
|
-
|
|
42
|
-
this.expression.
|
|
42
|
+
assumingSamePrimaryResultSetEqualityHashCode(tableValued, hasher) {
|
|
43
|
+
this.expression.assumingSamePrimaryResultSetEqualityHashCode(tableValued, hasher);
|
|
43
44
|
}
|
|
44
45
|
/**
|
|
45
46
|
* If all inputs have a single dependency, returns either the result set they all depend on or `null` and whether they
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/compiler/filter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGnD,OAAO,EAAmB,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAmB,MAAM,YAAY,CAAC;AAmBlE,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,KAAK,YAAY,0BAA0B,IAAI,KAAK,YAAY,YAAY,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,0BAA0B;IAC5B,UAAU,CAAiB;IACpC;;;;OAIG;IACM,SAAS,CAAyB;IAE3C;;OAEG;IACM,mBAAmB,CAAU;IAEtC,YAAY,UAAuD;QACjE,IAAI,UAAU,YAAY,cAAc,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,0BAA0B,CAAC,uBAAuB,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;YAC7F,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBACpB,MAAM,IAAI,sBAAsB,CAAC,4EAA4E,CAAC,CAAC;YACjH,CAAC;YAED,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;YACxC,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;YACtC,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC,mBAAmB,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../src/compiler/filter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as plan from '../sync_plan/plan.js';
|
|
2
|
-
import {
|
|
2
|
+
import type { SyncPlanCompilerModel } from './compiler.js';
|
|
3
3
|
export declare class CompilerModelToSyncPlan {
|
|
4
4
|
private static readonly evaluatorHash;
|
|
5
5
|
private mappedObjects;
|
|
@@ -25,11 +25,12 @@ export declare class CompilerModelToSyncPlan {
|
|
|
25
25
|
*/
|
|
26
26
|
private evaluatorsToBuckets;
|
|
27
27
|
private translateStatefulObject;
|
|
28
|
-
translate(source:
|
|
28
|
+
translate(source: SyncPlanCompilerModel): plan.SyncPlan;
|
|
29
29
|
private createBucketSource;
|
|
30
30
|
private translatePartitionKey;
|
|
31
31
|
private translateAddedTableValuedFunctions;
|
|
32
32
|
private translateRowEvaluator;
|
|
33
|
+
private translateRowProjection;
|
|
33
34
|
private translatePointLookup;
|
|
34
35
|
/**
|
|
35
36
|
* @param expression The expression to translate.
|
|
@@ -42,4 +43,5 @@ export declare class CompilerModelToSyncPlan {
|
|
|
42
43
|
private translateStreamResolver;
|
|
43
44
|
private translateExpandingLookup;
|
|
44
45
|
private translateParameterValue;
|
|
46
|
+
private translateCompiledEvent;
|
|
45
47
|
}
|
|
@@ -36,10 +36,10 @@ export class CompilerModelToSyncPlan {
|
|
|
36
36
|
return mapped;
|
|
37
37
|
}
|
|
38
38
|
translate(source) {
|
|
39
|
-
const queriersByStream = Object.groupBy(source.resolvers, (r) => r.options.name);
|
|
39
|
+
const queriersByStream = Object.groupBy(source.streams.resolvers, (r) => r.options.name);
|
|
40
40
|
return {
|
|
41
|
-
dataSources: source.evaluators.map((e) => this.translateRowEvaluator(e)),
|
|
42
|
-
parameterIndexes: source.pointLookups.map((p, i) => this.translatePointLookup(p, i)),
|
|
41
|
+
dataSources: source.streams.evaluators.map((e) => this.translateRowEvaluator(e)),
|
|
42
|
+
parameterIndexes: source.streams.pointLookups.map((p, i) => this.translatePointLookup(p, i)),
|
|
43
43
|
// Note: data sources and parameter indexes must be translated first because we reference them in stream
|
|
44
44
|
// resolvers.
|
|
45
45
|
streams: Object.values(queriersByStream).map((resolvers) => {
|
|
@@ -48,7 +48,8 @@ export class CompilerModelToSyncPlan {
|
|
|
48
48
|
queriers: resolvers.map((e) => this.translateStreamResolver(e))
|
|
49
49
|
};
|
|
50
50
|
}),
|
|
51
|
-
buckets: this.buckets
|
|
51
|
+
buckets: this.buckets,
|
|
52
|
+
events: source.events.map((e) => this.translateCompiledEvent(e))
|
|
52
53
|
};
|
|
53
54
|
}
|
|
54
55
|
createBucketSource(evaluators, uniqueName) {
|
|
@@ -64,20 +65,8 @@ export class CompilerModelToSyncPlan {
|
|
|
64
65
|
});
|
|
65
66
|
}
|
|
66
67
|
translatePartitionKey(value, context) {
|
|
67
|
-
let sourceExpression;
|
|
68
|
-
// TODO: Unify scalar and table-valued partition keys in compiler IR?
|
|
69
|
-
if (value instanceof rows.ScalarPartitionKey) {
|
|
70
|
-
sourceExpression = value.expression.expression;
|
|
71
|
-
return { expr: this.translateExpression(value.expression.expression, context.syntacticSource) };
|
|
72
|
-
}
|
|
73
|
-
else if (value instanceof rows.TableValuedPartitionKey) {
|
|
74
|
-
sourceExpression = value.output.expression;
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
throw new Error('Unhandled partition key');
|
|
78
|
-
}
|
|
79
68
|
return {
|
|
80
|
-
expr: this.translateExpression(
|
|
69
|
+
expr: this.translateExpression(value.expression.expression, context.syntacticSource, context.addedFunctions)
|
|
81
70
|
};
|
|
82
71
|
}
|
|
83
72
|
translateAddedTableValuedFunctions(input, context) {
|
|
@@ -92,30 +81,35 @@ export class CompilerModelToSyncPlan {
|
|
|
92
81
|
}
|
|
93
82
|
translateRowEvaluator(value) {
|
|
94
83
|
return this.translateStatefulObject(value, () => {
|
|
95
|
-
const hasher = new StableHasher();
|
|
96
|
-
value.buildBehaviorHashCode(hasher);
|
|
97
84
|
const mapped = {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
tableValuedFunctions: this.translateAddedTableValuedFunctions(value.addedFunctions, value),
|
|
101
|
-
columns: value.columns.map((e) => {
|
|
102
|
-
if (e instanceof rows.StarColumnSource) {
|
|
103
|
-
return 'star';
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
return {
|
|
107
|
-
expr: this.translateExpression(e.expression.expression, value.syntacticSource, value.addedFunctions),
|
|
108
|
-
alias: e.alias ?? null
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
}),
|
|
112
|
-
outputTableName: value.outputName,
|
|
113
|
-
filters: value.filters.map((e) => this.translateExpression(e.expression, value.syntacticSource, value.addedFunctions)),
|
|
114
|
-
parameters: value.partitionBy.map((e) => this.translatePartitionKey(e, value))
|
|
85
|
+
...this.translateRowProjection(value),
|
|
86
|
+
outputTableName: value.outputName
|
|
115
87
|
};
|
|
116
88
|
return mapped;
|
|
117
89
|
});
|
|
118
90
|
}
|
|
91
|
+
translateRowProjection(value) {
|
|
92
|
+
const hasher = new StableHasher();
|
|
93
|
+
value.buildBehaviorHashCode(hasher);
|
|
94
|
+
return {
|
|
95
|
+
sourceTable: value.tablePattern,
|
|
96
|
+
hashCode: hasher.buildHashCode(),
|
|
97
|
+
tableValuedFunctions: this.translateAddedTableValuedFunctions(value.addedFunctions, value),
|
|
98
|
+
columns: value.columns.map((e) => {
|
|
99
|
+
if (e instanceof rows.StarColumnSource) {
|
|
100
|
+
return 'star';
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
return {
|
|
104
|
+
expr: this.translateExpression(e.expression.expression, value.syntacticSource, value.addedFunctions),
|
|
105
|
+
alias: e.alias ?? null
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}),
|
|
109
|
+
filters: value.filters.map((e) => this.translateExpression(e.expression, value.syntacticSource, value.addedFunctions)),
|
|
110
|
+
parameters: value.partitionBy.map((e) => this.translatePartitionKey(e, value))
|
|
111
|
+
};
|
|
112
|
+
}
|
|
119
113
|
translatePointLookup(value, index) {
|
|
120
114
|
return this.translateStatefulObject(value, () => {
|
|
121
115
|
const hasher = new StableHasher();
|
|
@@ -217,5 +211,15 @@ export class CompilerModelToSyncPlan {
|
|
|
217
211
|
return { type: 'intersection', values: value.inner.map((e) => this.translateParameterValue(e)) };
|
|
218
212
|
}
|
|
219
213
|
}
|
|
214
|
+
translateCompiledEvent(event) {
|
|
215
|
+
return {
|
|
216
|
+
name: event.name,
|
|
217
|
+
sourceQueries: event.sourceQueries.map((query) => ({
|
|
218
|
+
sql: query.sql,
|
|
219
|
+
sourceTable: query.sourceTable.tablePattern,
|
|
220
|
+
variants: query.variants.map((variant) => this.translateRowProjection(variant))
|
|
221
|
+
}))
|
|
222
|
+
};
|
|
223
|
+
}
|
|
220
224
|
}
|
|
221
225
|
//# sourceMappingURL=ir_to_sync_plan.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ir_to_sync_plan.js","sourceRoot":"","sources":["../../src/compiler/ir_to_sync_plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAEjF,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAY,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,WAAW,EAAmB,WAAW,EAAkB,MAAM,iBAAiB,CAAC;AAC5F,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,MAAM,OAAO,uBAAuB;IAC1B,MAAM,CAAU,aAAa,GAAkC,iBAAiB,CAAC;QACvF,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAC5D,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;KAC1C,CAAC,CAAC;IAEK,aAAa,GAAG,IAAI,GAAG,EAAe,CAAC;IACvC,OAAO,GAAkC,EAAE,CAAC;IAEpD;;;;;;;;;;;;;;;;;;OAkBG;IACK,mBAAmB,GAAG,IAAI,OAAO,CACvC,uBAAuB,CAAC,aAAa,CACtC,CAAC;IAEM,uBAAuB,CAAsB,MAAS,EAAE,GAAY;QAC1E,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,MAA6B;QACrC,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ir_to_sync_plan.js","sourceRoot":"","sources":["../../src/compiler/ir_to_sync_plan.ts"],"names":[],"mappings":"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"}
|