@powersync/service-sync-rules 0.30.0 → 0.31.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/dist/HydratedSyncRules.d.ts +3 -3
- package/dist/HydratedSyncRules.js.map +1 -1
- package/dist/SqlSyncRules.d.ts +11 -37
- package/dist/SqlSyncRules.js +11 -340
- package/dist/SqlSyncRules.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 +21 -6
- package/dist/TablePattern.js +57 -30
- package/dist/TablePattern.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 +3 -3
- package/dist/compiler/bucket_resolver.js.map +1 -1
- package/dist/compiler/compiler.d.ts +7 -1
- package/dist/compiler/compiler.js +19 -2
- package/dist/compiler/compiler.js.map +1 -1
- package/dist/compiler/ir_to_sync_plan.d.ts +6 -0
- package/dist/compiler/ir_to_sync_plan.js +57 -12
- package/dist/compiler/ir_to_sync_plan.js.map +1 -1
- package/dist/compiler/parser.js +45 -14
- package/dist/compiler/parser.js.map +1 -1
- package/dist/compiler/querier_graph.js +72 -24
- package/dist/compiler/querier_graph.js.map +1 -1
- package/dist/compiler/rows.d.ts +35 -5
- package/dist/compiler/rows.js +64 -2
- package/dist/compiler/rows.js.map +1 -1
- package/dist/compiler/scope.d.ts +4 -1
- package/dist/compiler/scope.js +13 -2
- package/dist/compiler/scope.js.map +1 -1
- package/dist/compiler/sqlite.d.ts +1 -11
- package/dist/compiler/sqlite.js +81 -66
- package/dist/compiler/sqlite.js.map +1 -1
- package/dist/compiler/table.d.ts +12 -11
- package/dist/compiler/table.js +17 -2
- package/dist/compiler/table.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 +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/json_schema.js +17 -1
- package/dist/json_schema.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 +3 -3
- 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 +2 -2
- package/dist/sync_plan/engine/scalar_expression_engine.d.ts +4 -2
- package/dist/sync_plan/engine/scalar_expression_engine.js +18 -0
- package/dist/sync_plan/engine/scalar_expression_engine.js.map +1 -1
- package/dist/sync_plan/evaluator/bucket_data_source.d.ts +1 -0
- package/dist/sync_plan/evaluator/bucket_data_source.js +13 -9
- package/dist/sync_plan/evaluator/bucket_data_source.js.map +1 -1
- package/dist/sync_plan/evaluator/bucket_source.js +1 -1
- package/dist/sync_plan/evaluator/bucket_source.js.map +1 -1
- package/dist/sync_plan/evaluator/index.d.ts +12 -2
- package/dist/sync_plan/evaluator/index.js +26 -20
- package/dist/sync_plan/evaluator/index.js.map +1 -1
- package/dist/sync_plan/evaluator/parameter_evaluator.js +22 -2
- package/dist/sync_plan/evaluator/parameter_evaluator.js.map +1 -1
- package/dist/sync_plan/evaluator/parameter_index_lookup_creator.d.ts +2 -1
- package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js +13 -10
- package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js.map +1 -1
- package/dist/sync_plan/evaluator/table_processor_to_sql.d.ts +20 -0
- package/dist/sync_plan/evaluator/table_processor_to_sql.js +37 -0
- package/dist/sync_plan/evaluator/table_processor_to_sql.js.map +1 -0
- package/dist/sync_plan/plan.d.ts +40 -8
- package/dist/sync_plan/schema_inference.d.ts +2 -1
- package/dist/sync_plan/schema_inference.js +4 -2
- package/dist/sync_plan/schema_inference.js.map +1 -1
- package/dist/sync_plan/serialize.d.ts +15 -6
- package/dist/sync_plan/serialize.js +54 -8
- package/dist/sync_plan/serialize.js.map +1 -1
- package/dist/types.d.ts +20 -5
- package/dist/types.js +27 -5
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/package.json +1 -1
- package/schema/sync_rules.json +19 -3
|
@@ -1,37 +1,40 @@
|
|
|
1
|
-
import { mapExternalDataToInstantiation } from '../engine/scalar_expression_engine.js';
|
|
2
1
|
import { isValidParameterValueRow } from './parameter_evaluator.js';
|
|
3
2
|
import { UnscopedParameterLookup } from '../../BucketParameterQuerier.js';
|
|
3
|
+
import { TableProcessorToSqlHelper } from './table_processor_to_sql.js';
|
|
4
4
|
export class PreparedParameterIndexLookupCreator {
|
|
5
5
|
source;
|
|
6
6
|
defaultLookupScope;
|
|
7
7
|
evaluator;
|
|
8
|
+
sourceTable;
|
|
8
9
|
evaluatorInputs;
|
|
9
10
|
numberOfOutputs;
|
|
10
11
|
numberOfParameters;
|
|
11
|
-
constructor(source, { engine }) {
|
|
12
|
+
constructor(source, { engine, defaultSchema }) {
|
|
12
13
|
this.source = source;
|
|
13
14
|
this.defaultLookupScope = source.defaultLookupScope;
|
|
14
|
-
const
|
|
15
|
-
const expressions = source.outputs.map((o) =>
|
|
15
|
+
const translationHelper = new TableProcessorToSqlHelper(source);
|
|
16
|
+
const expressions = source.outputs.map((o) => translationHelper.mapper.transform(o));
|
|
16
17
|
this.numberOfOutputs = expressions.length;
|
|
17
18
|
for (const parameter of source.parameters) {
|
|
18
|
-
expressions.push(
|
|
19
|
+
expressions.push(translationHelper.mapper.transform(parameter.expr));
|
|
19
20
|
}
|
|
20
21
|
this.numberOfParameters = source.parameters.length;
|
|
21
22
|
this.evaluator = engine.prepareEvaluator({
|
|
22
23
|
outputs: expressions,
|
|
23
|
-
filters:
|
|
24
|
+
filters: translationHelper.filterExpressions,
|
|
25
|
+
tableValuedFunctions: translationHelper.tableValuedFunctions
|
|
24
26
|
});
|
|
25
|
-
this.
|
|
27
|
+
this.sourceTable = source.sourceTable.toTablePattern(defaultSchema);
|
|
28
|
+
this.evaluatorInputs = translationHelper.mapper.instantiation;
|
|
26
29
|
}
|
|
27
30
|
getSourceTables() {
|
|
28
31
|
const set = new Set();
|
|
29
|
-
set.add(this.
|
|
32
|
+
set.add(this.sourceTable);
|
|
30
33
|
return set;
|
|
31
34
|
}
|
|
32
35
|
evaluateParameterRow(sourceTable, row) {
|
|
33
36
|
const results = [];
|
|
34
|
-
if (!this.
|
|
37
|
+
if (!this.sourceTable.matches(sourceTable)) {
|
|
35
38
|
return results;
|
|
36
39
|
}
|
|
37
40
|
try {
|
|
@@ -56,7 +59,7 @@ export class PreparedParameterIndexLookupCreator {
|
|
|
56
59
|
return results;
|
|
57
60
|
}
|
|
58
61
|
tableSyncsParameters(table) {
|
|
59
|
-
return this.
|
|
62
|
+
return this.sourceTable.matches(table);
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
65
|
//# sourceMappingURL=parameter_index_lookup_creator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parameter_index_lookup_creator.js","sourceRoot":"","sources":["../../../src/sync_plan/evaluator/parameter_index_lookup_creator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parameter_index_lookup_creator.js","sourceRoot":"","sources":["../../../src/sync_plan/evaluator/parameter_index_lookup_creator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TableValuedFunction, TableValuedFunctionOutput } from '../engine/scalar_expression_engine.js';
|
|
2
|
+
import { SqlExpression } from '../expression.js';
|
|
3
|
+
import * as plan from '../plan.js';
|
|
4
|
+
/**
|
|
5
|
+
* Utility to translate a {@link plan.TableProcessor} to a scalar SQL statement.
|
|
6
|
+
*
|
|
7
|
+
* This translates table-valued functions and filters. Output columns and partition keys have to be translated
|
|
8
|
+
* separately, because their order depends on the type of table processor (data source vs. parameter lookup creator).
|
|
9
|
+
*/
|
|
10
|
+
export declare class TableProcessorToSqlHelper {
|
|
11
|
+
mapper: {
|
|
12
|
+
instantiation: plan.ColumnSqlParameterValue[];
|
|
13
|
+
tableValuedFunctions: Map<plan.TableProcessorTableValuedFunction, TableValuedFunction>;
|
|
14
|
+
transform(expr: SqlExpression<plan.SqlParameterValue>): SqlExpression<number | TableValuedFunctionOutput>;
|
|
15
|
+
transformWithoutTableValued(expr: SqlExpression<plan.ColumnSqlParameterValue>): SqlExpression<number>;
|
|
16
|
+
};
|
|
17
|
+
readonly filterExpressions: SqlExpression<number | TableValuedFunctionOutput>[];
|
|
18
|
+
get tableValuedFunctions(): TableValuedFunction[];
|
|
19
|
+
constructor(source: plan.TableProcessor);
|
|
20
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { mapExternalDataToInstantiation } from '../engine/scalar_expression_engine.js';
|
|
2
|
+
import { MapSourceVisitor, visitExpr } from '../expression_visitor.js';
|
|
3
|
+
/**
|
|
4
|
+
* Utility to translate a {@link plan.TableProcessor} to a scalar SQL statement.
|
|
5
|
+
*
|
|
6
|
+
* This translates table-valued functions and filters. Output columns and partition keys have to be translated
|
|
7
|
+
* separately, because their order depends on the type of table processor (data source vs. parameter lookup creator).
|
|
8
|
+
*/
|
|
9
|
+
export class TableProcessorToSqlHelper {
|
|
10
|
+
mapper = mapExternalDataToInstantiation();
|
|
11
|
+
filterExpressions = [];
|
|
12
|
+
get tableValuedFunctions() {
|
|
13
|
+
return [...this.mapper.tableValuedFunctions.values()];
|
|
14
|
+
}
|
|
15
|
+
constructor(source) {
|
|
16
|
+
// Add table-valued functions and filters
|
|
17
|
+
for (const fn of source.tableValuedFunctions) {
|
|
18
|
+
const mapped = {
|
|
19
|
+
name: fn.functionName,
|
|
20
|
+
inputs: fn.functionInputs.map((i) => this.mapper.transformWithoutTableValued(i))
|
|
21
|
+
};
|
|
22
|
+
this.mapper.tableValuedFunctions.set(fn, mapped);
|
|
23
|
+
// Columns on function filters reference outputs of the table-valued function. We hoist them into filter
|
|
24
|
+
// expressions on the statement, but that requires rewriting column references to function outputs. This turns
|
|
25
|
+
// `SELECT ... FROM ..., (SELECT value FROM json_each(?) WHERE value LIKE x)` into
|
|
26
|
+
// `SELECT ... FROM ..., json_each(?) fn0 WHERE fn0.value LIKE x`.
|
|
27
|
+
const mapFnFilter = new MapSourceVisitor(({ column }) => ({ function: mapped, column }));
|
|
28
|
+
for (const filter of fn.filters) {
|
|
29
|
+
this.filterExpressions.push(visitExpr(mapFnFilter, filter, null));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
for (const filter of source.filters) {
|
|
33
|
+
this.filterExpressions.push(this.mapper.transform(filter));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=table_processor_to_sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table_processor_to_sql.js","sourceRoot":"","sources":["../../../src/sync_plan/evaluator/table_processor_to_sql.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,8BAA8B,EAG/B,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGvE;;;;;GAKG;AACH,MAAM,OAAO,yBAAyB;IACpC,MAAM,GAAG,8BAA8B,EAAgC,CAAC;IAC/D,iBAAiB,GAAwD,EAAE,CAAC;IAErF,IAAI,oBAAoB;QACtB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,YAAY,MAA2B;QACrC,yCAAyC;QACzC,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAwB;gBAClC,IAAI,EAAE,EAAE,CAAC,YAAY;gBACrB,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC;aACjF,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAEjD,wGAAwG;YACxG,8GAA8G;YAC9G,kFAAkF;YAClF,kEAAkE;YAClE,MAAM,WAAW,GAAG,IAAI,gBAAgB,CACtC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAC/C,CAAC;YAEF,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;gBAChC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF"}
|
package/dist/sync_plan/plan.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BucketPriority } from '../BucketDescription.js';
|
|
2
2
|
import { ParameterLookupScope } from '../HydrationState.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ImplicitSchemaTablePattern } from '../TablePattern.js';
|
|
4
4
|
import { SqlExpression } from './expression.js';
|
|
5
5
|
/**
|
|
6
6
|
* A compiled "sync plan", a description for
|
|
@@ -40,7 +40,7 @@ export interface TableProcessor {
|
|
|
40
40
|
/**
|
|
41
41
|
* The source table to process into buckets or parameter lookups.
|
|
42
42
|
*/
|
|
43
|
-
sourceTable:
|
|
43
|
+
sourceTable: ImplicitSchemaTablePattern;
|
|
44
44
|
/**
|
|
45
45
|
* All of these expressions exclusively depend on the {@link sourceTable}.
|
|
46
46
|
*
|
|
@@ -54,9 +54,41 @@ export interface TableProcessor {
|
|
|
54
54
|
* input values for the lookup.
|
|
55
55
|
*/
|
|
56
56
|
parameters: PartitionKey[];
|
|
57
|
+
tableValuedFunctions: TableProcessorTableValuedFunction[];
|
|
57
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* A table-valued partition key evaluates a table-valued function on the source or parameter row to potentially generate
|
|
61
|
+
* multiple buckets for one input row.
|
|
62
|
+
*
|
|
63
|
+
* For instance, `SELECT p.* FROM posts p WHERE subscription.parameter('tag') IN (SELECT value FROM json_each(p.tags))`
|
|
64
|
+
* would put a row with `tags == '["foo", "bar"]'` into two buckets representing the expanded parameters.
|
|
65
|
+
*
|
|
66
|
+
* Note that the buckets a row is put into are derived from the cartesian product of all partition keys. In particular,
|
|
67
|
+
* this means that:
|
|
68
|
+
*
|
|
69
|
+
* - If a table-valued key evaluates to zero rows, the source row is not put into any buckets regardless of what other
|
|
70
|
+
* partition keys might exist.
|
|
71
|
+
* - Two table-valued partition keys evaluating two multiple rows leads to a quadratic amount of buckets being
|
|
72
|
+
* generated.
|
|
73
|
+
*/
|
|
74
|
+
export type TableProcessorTableValuedFunction = Omit<EvaluateTableValuedFunction<ColumnSqlParameterValue>, 'type' | 'outputs'>;
|
|
75
|
+
export interface TableProcessorTableValuedFunctionOutput {
|
|
76
|
+
/**
|
|
77
|
+
* A reference to the added table-valued function.
|
|
78
|
+
*/
|
|
79
|
+
function: TableProcessorTableValuedFunction;
|
|
80
|
+
/**
|
|
81
|
+
* The column of the table-valued function being referenced.
|
|
82
|
+
*/
|
|
83
|
+
outputName: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* A scalar partition key evaluates to a single value in the source or parameter row. For instance, a stream definition
|
|
87
|
+
* like `SELECT * FROM users WHERE id = auth.user_id()` would generate a scalar key to partition users by the `id`
|
|
88
|
+
* column.
|
|
89
|
+
*/
|
|
58
90
|
export interface PartitionKey {
|
|
59
|
-
expr: SqlExpression<ColumnSqlParameterValue>;
|
|
91
|
+
expr: SqlExpression<ColumnSqlParameterValue | TableProcessorTableValuedFunctionOutput>;
|
|
60
92
|
}
|
|
61
93
|
/**
|
|
62
94
|
* A description for a data source processing rows to replicate.
|
|
@@ -116,7 +148,7 @@ export interface StreamParameterIndexLookupCreator extends TableProcessor {
|
|
|
116
148
|
* streams because the output of parameters might be passed through additional stages or transformed by the querier
|
|
117
149
|
* before becoming a parameter value.
|
|
118
150
|
*/
|
|
119
|
-
outputs: SqlExpression<ColumnSqlParameterValue>[];
|
|
151
|
+
outputs: SqlExpression<ColumnSqlParameterValue | TableProcessorTableValuedFunctionOutput>[];
|
|
120
152
|
}
|
|
121
153
|
export interface StreamOptions {
|
|
122
154
|
name: string;
|
|
@@ -149,7 +181,6 @@ export interface StreamQuerier {
|
|
|
149
181
|
bucket: StreamBucketDataSource;
|
|
150
182
|
sourceInstantiation: ParameterValue[];
|
|
151
183
|
}
|
|
152
|
-
export type SqlParameterValue = ColumnSqlParameterValue | RequestSqlParameterValue;
|
|
153
184
|
/**
|
|
154
185
|
* A value that resolves to a given column in a row being processed.
|
|
155
186
|
*/
|
|
@@ -164,10 +195,11 @@ export type ConnectionParameterSource = 'auth' | 'subscription' | 'connection';
|
|
|
164
195
|
export interface RequestSqlParameterValue {
|
|
165
196
|
request: ConnectionParameterSource;
|
|
166
197
|
}
|
|
198
|
+
export type SqlParameterValue = ColumnSqlParameterValue | RequestSqlParameterValue | TableProcessorTableValuedFunctionOutput;
|
|
167
199
|
/**
|
|
168
200
|
* A lookup returning multiple rows when instantiated.
|
|
169
201
|
*/
|
|
170
|
-
export type ExpandingLookup = ParameterLookup | EvaluateTableValuedFunction
|
|
202
|
+
export type ExpandingLookup = ParameterLookup | EvaluateTableValuedFunction<RequestSqlParameterValue>;
|
|
171
203
|
export interface ParameterLookup {
|
|
172
204
|
type: 'parameter';
|
|
173
205
|
lookup: StreamParameterIndexLookupCreator;
|
|
@@ -176,10 +208,10 @@ export interface ParameterLookup {
|
|
|
176
208
|
*/
|
|
177
209
|
instantiation: ParameterValue[];
|
|
178
210
|
}
|
|
179
|
-
export interface EvaluateTableValuedFunction {
|
|
211
|
+
export interface EvaluateTableValuedFunction<Input> {
|
|
180
212
|
type: 'table_valued';
|
|
181
213
|
functionName: string;
|
|
182
|
-
functionInputs: SqlExpression<
|
|
214
|
+
functionInputs: SqlExpression<Input>[];
|
|
183
215
|
outputs: SqlExpression<ColumnSqlParameterValue>[];
|
|
184
216
|
filters: SqlExpression<ColumnSqlParameterValue>[];
|
|
185
217
|
}
|
|
@@ -5,8 +5,9 @@ import { StreamDataSource } from './plan.js';
|
|
|
5
5
|
* Infers the output schema of sync streams by resolving references against a statically-known source schema.
|
|
6
6
|
*/
|
|
7
7
|
export declare class SyncPlanSchemaAnalyzer {
|
|
8
|
+
private readonly defaultSchema;
|
|
8
9
|
private readonly schema;
|
|
9
|
-
constructor(schema: SourceSchema);
|
|
10
|
+
constructor(defaultSchema: string, schema: SourceSchema);
|
|
10
11
|
/**
|
|
11
12
|
* Populates an output record of tables with the inferred result sets for a stream data source against a source
|
|
12
13
|
* schema.
|
|
@@ -6,8 +6,10 @@ import { visitExpr } from './expression_visitor.js';
|
|
|
6
6
|
* Infers the output schema of sync streams by resolving references against a statically-known source schema.
|
|
7
7
|
*/
|
|
8
8
|
export class SyncPlanSchemaAnalyzer {
|
|
9
|
+
defaultSchema;
|
|
9
10
|
schema;
|
|
10
|
-
constructor(schema) {
|
|
11
|
+
constructor(defaultSchema, schema) {
|
|
12
|
+
this.defaultSchema = defaultSchema;
|
|
11
13
|
this.schema = schema;
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
@@ -15,7 +17,7 @@ export class SyncPlanSchemaAnalyzer {
|
|
|
15
17
|
* schema.
|
|
16
18
|
*/
|
|
17
19
|
resolveResultSets(source, tables) {
|
|
18
|
-
for (const table of this.schema.getTables(source.sourceTable)) {
|
|
20
|
+
for (const table of this.schema.getTables(source.sourceTable.toTablePattern(this.defaultSchema))) {
|
|
19
21
|
const typeResolver = new ExpressionTypeInference(table);
|
|
20
22
|
const outputName = source.outputTableName ?? table.name;
|
|
21
23
|
const outputTable = (tables[outputName] ??= {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema_inference.js","sourceRoot":"","sources":["../../src/sync_plan/schema_inference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAgC,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAWlF,OAAO,EAAqB,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGvE;;GAEG;AACH,MAAM,OAAO,sBAAsB;
|
|
1
|
+
{"version":3,"file":"schema_inference.js","sourceRoot":"","sources":["../../src/sync_plan/schema_inference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAgC,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAWlF,OAAO,EAAqB,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGvE;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAEd;IACA;IAFnB,YACmB,aAAqB,EACrB,MAAoB;QADpB,kBAAa,GAAb,aAAa,CAAQ;QACrB,WAAM,GAAN,MAAM,CAAc;IACpC,CAAC;IAEJ;;;OAGG;IACH,iBAAiB,CAAC,MAAwB,EAAE,MAAwD;QAClG,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;YACjG,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACxD,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,IAAI,KAAK,CAAC,IAAI,CAAC;YACxD,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;YAEhD,SAAS,eAAe,CAAC,UAA4B;gBACnD,IAAI,UAAU,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;oBAC5B,OAAO,CAAC,cAAc;gBACxB,CAAC;gBAED,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;oBACrB,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG;wBAC7B,IAAI,EAAE,UAAU,CAAC,IAAI;wBACrB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;wBACvC,YAAY,EAAE,UAAU,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;qBACnG,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;gBAC5C,CAAC;YACH,CAAC;YAED,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;oBACtB,KAAK,MAAM,YAAY,IAAI,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC;wBAC9C,eAAe,CAAC,YAAY,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACxD,eAAe,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,uBAAuB;IACE;IAA7B,YAA6B,WAA8B;QAA9B,gBAAW,GAAX,WAAW,CAAmB;IAAG,CAAC;IAE/D,iBAAiB,CAAC,IAA2C;QAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;QAClE,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,oBAAoB,CAAC,IAA8C;QACjE,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtB,KAAK,KAAK;gBACR,OAAO,uBAAuB,CAAC,OAAO,CAAC;YACzC,KAAK,GAAG;gBACN,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,qBAAqB,CAAC,IAA+C;QACnE,OAAO;YACL,IAAI,EAAE,qBAAqB,CACzB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAC3B,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,EACrC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CACvC;SACF,CAAC;IACJ,CAAC;IAED,sBAAsB;QACpB,OAAO,uBAAuB,CAAC,OAAO,CAAC;IACzC,CAAC;IAED,uBAAuB;QACrB,OAAO,uBAAuB,CAAC,OAAO,CAAC;IACzC,CAAC;IAED,uBAAuB,CAAC,IAAiD;QACvE,IAAI,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;QAC/B,iEAAiE;QACjE,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAClC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;IAED,mBAAmB,CAAC,IAA6C;QAC/D,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7D,CAAC;IAED,iCAAiC,CAAC,IAA2D;QAC3F,MAAM,QAAQ,GAAG,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAEvE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;IAChD,CAAC;IAED,sBAAsB,CAAC,IAAuB;QAC5C,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,UAAU;gBACb,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC;YACvC,KAAK,YAAY;gBACf,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC;YACvC,KAAK,SAAS;gBACZ,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC;YAC1C,KAAK,YAAY;gBACf,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;IAED,qFAAqF;IAC7E,MAAM,CAAU,SAAS,GAAG,oBAAoB,CAAC,oBAAoB,CAAC,4BAA4B,CAAC,CAAC;IACpG,MAAM,CAAU,OAAO,GAAe,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ParameterLookupScope } from '../HydrationState.js';
|
|
2
2
|
import { SqlExpression } from './expression.js';
|
|
3
|
-
import { ColumnSource, ColumnSqlParameterValue,
|
|
3
|
+
import { ColumnSource, ColumnSqlParameterValue, RequestSqlParameterValue, StreamOptions, SyncPlan, TableProcessorTableValuedFunction } from './plan.js';
|
|
4
4
|
/**
|
|
5
5
|
* Serializes a sync plan into a simple JSON object.
|
|
6
6
|
*
|
|
@@ -23,25 +23,34 @@ interface SerializedBucketDataSource {
|
|
|
23
23
|
sources: number[];
|
|
24
24
|
}
|
|
25
25
|
interface SerializedTablePattern {
|
|
26
|
-
connection: string;
|
|
27
|
-
schema: string;
|
|
26
|
+
connection: string | null;
|
|
27
|
+
schema: string | null;
|
|
28
28
|
table: string;
|
|
29
29
|
}
|
|
30
|
+
interface SerializedTableProcessorTableValuedFunctionOutput {
|
|
31
|
+
function: number;
|
|
32
|
+
outputName: string;
|
|
33
|
+
}
|
|
34
|
+
interface SerializedPartitionKey {
|
|
35
|
+
expr: SqlExpression<ColumnSqlParameterValue | SerializedTableProcessorTableValuedFunctionOutput>;
|
|
36
|
+
}
|
|
30
37
|
interface SerializedDataSource {
|
|
31
38
|
table: SerializedTablePattern;
|
|
32
39
|
outputTableName?: string;
|
|
33
40
|
hash: number;
|
|
34
41
|
columns: ColumnSource[];
|
|
35
42
|
filters: SqlExpression<ColumnSqlParameterValue>[];
|
|
36
|
-
|
|
43
|
+
tableValuedFunctions: TableProcessorTableValuedFunction[];
|
|
44
|
+
partitionBy: SerializedPartitionKey[];
|
|
37
45
|
}
|
|
38
46
|
interface SerializedParameterIndexLookupCreator {
|
|
39
47
|
table: SerializedTablePattern;
|
|
40
48
|
hash: number;
|
|
41
49
|
lookupScope: ParameterLookupScope;
|
|
42
|
-
output: SqlExpression<ColumnSqlParameterValue>[];
|
|
50
|
+
output: SqlExpression<ColumnSqlParameterValue | SerializedTableProcessorTableValuedFunctionOutput>[];
|
|
43
51
|
filters: SqlExpression<ColumnSqlParameterValue>[];
|
|
44
|
-
|
|
52
|
+
tableValuedFunctions: TableProcessorTableValuedFunction[];
|
|
53
|
+
partitionBy: SerializedPartitionKey[];
|
|
45
54
|
}
|
|
46
55
|
interface SerializedStream {
|
|
47
56
|
stream: StreamOptions;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { TablePattern } from '../TablePattern.js';
|
|
1
|
+
import { ImplicitSchemaTablePattern, TablePattern } from '../TablePattern.js';
|
|
2
|
+
import { MapSourceVisitor, visitExpr } from './expression_visitor.js';
|
|
2
3
|
/**
|
|
3
4
|
* Serializes a sync plan into a simple JSON object.
|
|
4
5
|
*
|
|
@@ -11,6 +12,15 @@ export function serializeSyncPlan(plan) {
|
|
|
11
12
|
const bucketIndex = new Map();
|
|
12
13
|
const parameterIndex = new Map();
|
|
13
14
|
const expandingLookups = new Map();
|
|
15
|
+
const addedTableValuedFunctions = new Map();
|
|
16
|
+
const replaceFunctionReferenceWithIndex = new MapSourceVisitor((value) => {
|
|
17
|
+
if ('function' in value) {
|
|
18
|
+
return { function: addedTableValuedFunctions.get(value.function), outputName: value.outputName };
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
14
24
|
function serializeTablePattern(pattern) {
|
|
15
25
|
return {
|
|
16
26
|
connection: pattern.connectionTag,
|
|
@@ -18,6 +28,17 @@ export function serializeSyncPlan(plan) {
|
|
|
18
28
|
table: pattern.tablePattern
|
|
19
29
|
};
|
|
20
30
|
}
|
|
31
|
+
function serializeTableValued(source) {
|
|
32
|
+
return source.tableValuedFunctions.map((fn, i) => {
|
|
33
|
+
addedTableValuedFunctions.set(fn, i);
|
|
34
|
+
return fn;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function translateParameters(source) {
|
|
38
|
+
return source.parameters.map((key) => {
|
|
39
|
+
return { expr: visitExpr(replaceFunctionReferenceWithIndex, key.expr, null) };
|
|
40
|
+
});
|
|
41
|
+
}
|
|
21
42
|
function serializeDataSources() {
|
|
22
43
|
return plan.dataSources.map((source, i) => {
|
|
23
44
|
dataSourceIndex.set(source, i);
|
|
@@ -26,7 +47,8 @@ export function serializeSyncPlan(plan) {
|
|
|
26
47
|
table: serializeTablePattern(source.sourceTable),
|
|
27
48
|
outputTableName: source.outputTableName,
|
|
28
49
|
filters: source.filters,
|
|
29
|
-
|
|
50
|
+
tableValuedFunctions: serializeTableValued(source),
|
|
51
|
+
partitionBy: translateParameters(source),
|
|
30
52
|
columns: source.columns
|
|
31
53
|
};
|
|
32
54
|
});
|
|
@@ -38,8 +60,9 @@ export function serializeSyncPlan(plan) {
|
|
|
38
60
|
hash: source.hashCode,
|
|
39
61
|
table: serializeTablePattern(source.sourceTable),
|
|
40
62
|
filters: source.filters,
|
|
41
|
-
|
|
42
|
-
|
|
63
|
+
tableValuedFunctions: serializeTableValued(source),
|
|
64
|
+
partitionBy: translateParameters(source),
|
|
65
|
+
output: source.outputs.map((out) => visitExpr(replaceFunctionReferenceWithIndex, out, null)),
|
|
43
66
|
lookupScope: source.defaultLookupScope
|
|
44
67
|
};
|
|
45
68
|
});
|
|
@@ -115,16 +138,37 @@ export function deserializeSyncPlan(serialized) {
|
|
|
115
138
|
throw new Error('Unknown sync plan version passed to deserializeSyncPlan()');
|
|
116
139
|
}
|
|
117
140
|
function deserializeTablePattern(pattern) {
|
|
118
|
-
|
|
141
|
+
if (pattern.schema) {
|
|
142
|
+
return new TablePattern(`${pattern.connection}.${pattern.schema}`, pattern.table);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
return new ImplicitSchemaTablePattern(null, pattern.table);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
let tableValuedFunctionsInScope = [];
|
|
149
|
+
const replaceFunctionIndexWithReference = new MapSourceVisitor((value) => {
|
|
150
|
+
if ('function' in value) {
|
|
151
|
+
return { function: tableValuedFunctionsInScope[value.function], outputName: value.outputName };
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
return value;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
function deserializeParameters(source) {
|
|
158
|
+
return source.map((serializedKey) => {
|
|
159
|
+
return { expr: visitExpr(replaceFunctionIndexWithReference, serializedKey.expr, null) };
|
|
160
|
+
});
|
|
119
161
|
}
|
|
120
162
|
const plan = serialized;
|
|
121
163
|
const dataSources = plan.dataSources.map((source) => {
|
|
164
|
+
const functions = (tableValuedFunctionsInScope = source.tableValuedFunctions);
|
|
122
165
|
return {
|
|
123
166
|
hashCode: source.hash,
|
|
124
167
|
sourceTable: deserializeTablePattern(source.table),
|
|
168
|
+
tableValuedFunctions: functions,
|
|
125
169
|
outputTableName: source.outputTableName,
|
|
126
170
|
filters: source.filters,
|
|
127
|
-
parameters: source.partitionBy,
|
|
171
|
+
parameters: deserializeParameters(source.partitionBy),
|
|
128
172
|
columns: source.columns
|
|
129
173
|
};
|
|
130
174
|
});
|
|
@@ -136,12 +180,14 @@ export function deserializeSyncPlan(serialized) {
|
|
|
136
180
|
};
|
|
137
181
|
});
|
|
138
182
|
const parameterIndexes = plan.parameterIndexes.map((source) => {
|
|
183
|
+
const functions = (tableValuedFunctionsInScope = source.tableValuedFunctions);
|
|
139
184
|
return {
|
|
140
185
|
hashCode: source.hash,
|
|
141
186
|
sourceTable: deserializeTablePattern(source.table),
|
|
187
|
+
tableValuedFunctions: functions,
|
|
142
188
|
filters: source.filters,
|
|
143
|
-
parameters: source.partitionBy,
|
|
144
|
-
outputs: source.output,
|
|
189
|
+
parameters: deserializeParameters(source.partitionBy),
|
|
190
|
+
outputs: source.output.map((out) => visitExpr(replaceFunctionIndexWithReference, out, null)),
|
|
145
191
|
defaultLookupScope: source.lookupScope
|
|
146
192
|
};
|
|
147
193
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/sync_plan/serialize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/sync_plan/serialize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAsBtE;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,MAAM,eAAe,GAAG,IAAI,GAAG,EAA4B,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC9D,MAAM,cAAc,GAAG,IAAI,GAAG,EAA6C,CAAC;IAC5E,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAoC,CAAC;IACrE,MAAM,yBAAyB,GAAG,IAAI,GAAG,EAA6C,CAAC;IAEvF,MAAM,iCAAiC,GAAG,IAAI,gBAAgB,CAG5D,CAAC,KAAK,EAAE,EAAE;QACV,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACxB,OAAO,EAAE,QAAQ,EAAE,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;QACpG,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,qBAAqB,CAAC,OAAmC;QAChE,OAAO;YACL,UAAU,EAAE,OAAO,CAAC,aAAa;YACjC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE,OAAO,CAAC,YAAY;SAC5B,CAAC;IACJ,CAAC;IAED,SAAS,oBAAoB,CAAC,MAAsB;QAClD,OAAO,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YAC/C,yBAAyB,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACrC,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,mBAAmB,CAAC,MAAsB;QACjD,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACnC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,iCAAiC,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QAChF,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,oBAAoB;QAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAE/B,OAAO;gBACL,IAAI,EAAE,MAAM,CAAC,QAAQ;gBACrB,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC;gBAChD,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,oBAAoB,EAAE,oBAAoB,CAAC,MAAM,CAAC;gBAClD,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC;gBACxC,OAAO,EAAE,MAAM,CAAC,OAAO;aACO,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,yBAAyB;QAChC,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7C,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAE9B,OAAO;gBACL,IAAI,EAAE,MAAM,CAAC,QAAQ;gBACrB,KAAK,EAAE,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC;gBAChD,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,oBAAoB,EAAE,oBAAoB,CAAC,MAAM,CAAC;gBAClD,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC;gBACxC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,iCAAiC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC5F,WAAW,EAAE,MAAM,CAAC,kBAAkB;aACS,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,uBAAuB,CAAC,KAAqB;QACpD,IAAI,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;YAC5B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAC/C,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;YAClC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;QACzG,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACrF,CAAC;IACH,CAAC;IAED,SAAS,sBAAsB,CAAC,MAAqB;QACnD,MAAM,MAAM,GAAkC,EAAE,CAAC;QAEjD,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YAC5C,MAAM,CAAC,IAAI,CACT,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE;gBAC5B,MAAM,GAAG,GAAoB;oBAC3B,OAAO,EAAE,UAAU;oBACnB,SAAS,EAAE,YAAY;iBACxB,CAAC;gBACF,IAAI,MAAiC,CAAC;gBAEtC,IAAI,CAAC,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;oBAC1B,MAAM,GAAG;wBACP,IAAI,EAAE,WAAW;wBACjB,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAE;wBACrC,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,uBAAuB,CAAC;qBAC5D,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG;wBACP,IAAI,EAAE,cAAc;wBACpB,YAAY,EAAE,CAAC,CAAC,YAAY;wBAC5B,cAAc,EAAE,CAAC,CAAC,cAAc;wBAChC,OAAO,EAAE,CAAC,CAAC,OAAO;wBAClB,OAAO,EAAE,CAAC,CAAC,OAAO;qBACnB,CAAC;gBACJ,CAAC;gBAED,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC7B,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,YAAY,EAAE,MAAM;YACpB,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAE;YACvC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,uBAAuB,CAAC;SAC7E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,UAAU,EAAE,qDAAqD;QAC1E,WAAW,EAAE,oBAAoB,EAAE;QACnC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACvC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5B,OAAO;gBACL,IAAI,EAAE,GAAG,CAAC,QAAQ;gBAClB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;aACzD,CAAC;QACJ,CAAC,CAAC;QACF,gBAAgB,EAAE,yBAAyB,EAAE;QAC7C,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChC,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC;SACjD,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,UAAmB;IACrD,4BAA4B;IAC5B,IAAK,UAAyC,CAAC,OAAO,IAAI,UAAU,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IAED,SAAS,uBAAuB,CAAC,OAA+B;QAC9D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,IAAI,YAAY,CAAC,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,IAAI,2BAA2B,GAAwC,EAAE,CAAC;IAE1E,MAAM,iCAAiC,GAAG,IAAI,gBAAgB,CAG5D,CAAC,KAAK,EAAE,EAAE;QACV,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACxB,OAAO,EAAE,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;QACjG,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,qBAAqB,CAAC,MAAgC;QAC7D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;YAClC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,iCAAiC,EAAE,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QAC1F,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,UAAwC,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAoB,EAAE;QACpE,MAAM,SAAS,GAAG,CAAC,2BAA2B,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAE9E,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,IAAI;YACrB,WAAW,EAAE,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC;YAClD,oBAAoB,EAAE,SAAS;YAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC;YACrD,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAA0B,EAAE;QAC/D,OAAO;YACL,QAAQ,EAAE,GAAG,CAAC,IAAI;YAClB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;SACpD,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAqC,EAAE;QAC/F,MAAM,SAAS,GAAG,CAAC,2BAA2B,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAE9E,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,IAAI;YACrB,WAAW,EAAE,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC;YAClD,oBAAoB,EAAE,SAAS;YAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC;YACrD,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,iCAAiC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YAC5F,kBAAkB,EAAE,MAAM,CAAC,WAAW;SACvC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,SAAS,yBAAyB,CAAC,MAA2B,EAAE,KAA+B;QAC7F,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC;YACf,KAAK,QAAQ;gBACX,OAAO;oBACL,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;oBAC5D,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B,CAAC;YACJ,KAAK,cAAc;gBACjB,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3G,CAAC;IACH,CAAC;IAED,SAAS,0BAA0B,CAAC,MAA2B,EAAE,MAAiC;QAChG,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,WAAW;gBACd,OAAO;oBACL,IAAI,EAAE,WAAW;oBACjB,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC;oBACvC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;iBAC3D,CAAC;YAC9B,KAAK,cAAc;gBACjB,OAAO;oBACL,IAAI,EAAE,cAAc;oBACpB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,cAAc,EAAE,MAAM,CAAC,cAAc;oBACrC,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;iBACwC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,SAAS,wBAAwB,CAAC,MAA+B;QAC/D,MAAM,YAAY,GAAwB,EAAE,CAAC;QAC7C,KAAK,MAAM,eAAe,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAClD,MAAM,KAAK,GAAsB,EAAE,CAAC;YACpC,KAAK,MAAM,iBAAiB,IAAI,eAAe,EAAE,CAAC;gBAChD,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC;YAC1E,CAAC;YAED,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO;YACL,cAAc,EAAE,MAAM,CAAC,cAAc;YACrC,YAAY;YACZ,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YAC9B,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,yBAAyB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;SACvG,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAC1C,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,wBAAwB,CAAC;SAC3B,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,OAAO;QACP,gBAAgB;QAChB,OAAO;KACR,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -83,11 +83,26 @@ export declare function isEvaluatedParameters(e: EvaluatedParametersResult): e i
|
|
|
83
83
|
export type EvaluationResult = EvaluatedRow | EvaluationError;
|
|
84
84
|
export type UnscopedEvaluationResult = UnscopedEvaluatedRow | EvaluationError;
|
|
85
85
|
export interface RequestJwtPayload {
|
|
86
|
+
userIdJson: SqliteJsonValue;
|
|
87
|
+
parsedPayload: Record<string, any>;
|
|
88
|
+
/** Legacy token_parameters */
|
|
89
|
+
parameters?: Record<string, any> | undefined;
|
|
90
|
+
}
|
|
91
|
+
export declare class BaseJwtPayload implements RequestJwtPayload {
|
|
86
92
|
/**
|
|
87
|
-
*
|
|
93
|
+
* Raw payload from JSON.parse.
|
|
94
|
+
*
|
|
95
|
+
* May contain arbitrary nested values.
|
|
96
|
+
*/
|
|
97
|
+
readonly parsedPayload: Record<string, any>;
|
|
98
|
+
/**
|
|
99
|
+
* sub, converted to a SQLite-compatible value (number | string | bigint | null).
|
|
100
|
+
*
|
|
101
|
+
* This is the value used for sync rules and in logs.
|
|
88
102
|
*/
|
|
89
|
-
|
|
90
|
-
|
|
103
|
+
readonly userIdJson: SqliteJsonValue;
|
|
104
|
+
constructor(parsedPayload: Record<string, any>);
|
|
105
|
+
get parameters(): Record<string, any> | undefined;
|
|
91
106
|
}
|
|
92
107
|
export interface ParameterValueSet {
|
|
93
108
|
lookup(table: string, column: string): SqliteValue;
|
|
@@ -107,7 +122,7 @@ export interface ParameterValueSet {
|
|
|
107
122
|
rawTokenPayload: string;
|
|
108
123
|
parsedTokenPayload: SqliteJsonRow;
|
|
109
124
|
legacyTokenParameters: SqliteJsonRow;
|
|
110
|
-
userId:
|
|
125
|
+
userId: SqliteJsonValue;
|
|
111
126
|
}
|
|
112
127
|
export declare class RequestParameters implements ParameterValueSet {
|
|
113
128
|
parsedTokenPayload: SqliteJsonRow;
|
|
@@ -123,7 +138,7 @@ export declare class RequestParameters implements ParameterValueSet {
|
|
|
123
138
|
* JSON string of raw request parameters.
|
|
124
139
|
*/
|
|
125
140
|
rawTokenPayload: string;
|
|
126
|
-
userId:
|
|
141
|
+
userId: SqliteJsonValue;
|
|
127
142
|
constructor(tokenPayload: RequestJwtPayload, clientParameters: Record<string, any>);
|
|
128
143
|
constructor(params: RequestParameters);
|
|
129
144
|
lookup(table: string, column: string): SqliteJsonValue;
|
package/dist/types.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { JSONBig } from '@powersync/service-jsonbig';
|
|
2
2
|
import { CompatibilityContext } from './compatibility.js';
|
|
3
|
-
import { toSyncRulesParameters } from './utils.js';
|
|
3
|
+
import { jsonValueToSqlite, toSyncRulesParameters } from './utils.js';
|
|
4
4
|
export function isEvaluationError(e) {
|
|
5
5
|
return typeof e.error == 'string';
|
|
6
6
|
}
|
|
@@ -13,6 +13,28 @@ export function isSourceEvaluatedRow(e) {
|
|
|
13
13
|
export function isEvaluatedParameters(e) {
|
|
14
14
|
return 'lookup' in e;
|
|
15
15
|
}
|
|
16
|
+
export class BaseJwtPayload {
|
|
17
|
+
/**
|
|
18
|
+
* Raw payload from JSON.parse.
|
|
19
|
+
*
|
|
20
|
+
* May contain arbitrary nested values.
|
|
21
|
+
*/
|
|
22
|
+
parsedPayload;
|
|
23
|
+
/**
|
|
24
|
+
* sub, converted to a SQLite-compatible value (number | string | bigint | null).
|
|
25
|
+
*
|
|
26
|
+
* This is the value used for sync rules and in logs.
|
|
27
|
+
*/
|
|
28
|
+
userIdJson;
|
|
29
|
+
constructor(parsedPayload) {
|
|
30
|
+
this.parsedPayload = parsedPayload;
|
|
31
|
+
this.userIdJson = jsonValueToSqlite(true, parsedPayload.sub);
|
|
32
|
+
}
|
|
33
|
+
get parameters() {
|
|
34
|
+
// Verified to be either undefined or an object when parsing the token.
|
|
35
|
+
return this.parsedPayload.parameters;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
16
38
|
export class RequestParameters {
|
|
17
39
|
parsedTokenPayload;
|
|
18
40
|
legacyTokenParameters;
|
|
@@ -45,14 +67,14 @@ export class RequestParameters {
|
|
|
45
67
|
const tokenParameters = {
|
|
46
68
|
...legacyParameters,
|
|
47
69
|
// sub takes presedence over any embedded parameters
|
|
48
|
-
user_id: tokenPayload.
|
|
70
|
+
user_id: tokenPayload.userIdJson
|
|
49
71
|
};
|
|
50
72
|
// Client and token parameters don't contain DateTime values or other custom types, so we don't need to consider
|
|
51
73
|
// compatibility.
|
|
52
|
-
this.parsedTokenPayload = tokenPayload;
|
|
74
|
+
this.parsedTokenPayload = tokenPayload.parsedPayload;
|
|
53
75
|
this.legacyTokenParameters = toSyncRulesParameters(tokenParameters, CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY);
|
|
54
|
-
this.userId = tokenPayload.
|
|
55
|
-
this.rawTokenPayload = JSONBig.stringify(tokenPayload);
|
|
76
|
+
this.userId = tokenPayload.userIdJson;
|
|
77
|
+
this.rawTokenPayload = JSONBig.stringify(tokenPayload.parsedPayload);
|
|
56
78
|
this.rawUserParameters = JSONBig.stringify(clientParameters);
|
|
57
79
|
this.userParameters = toSyncRulesParameters(clientParameters, CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY);
|
|
58
80
|
this.streamParameters = null;
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,4BAA4B,CAAC;AAGpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAO1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export declare function filterJsonRow(data: SqliteRow): SqliteJsonRow;
|
|
|
19
19
|
*
|
|
20
20
|
* Types specifically not supported in output are `boolean` and `undefined`.
|
|
21
21
|
*/
|
|
22
|
-
export declare function jsonValueToSqlite(fixedJsonBehavior: boolean, value: null | undefined | string | number | bigint | boolean | any):
|
|
22
|
+
export declare function jsonValueToSqlite(fixedJsonBehavior: boolean, value: null | undefined | string | number | bigint | boolean | any): SqliteJsonValue;
|
|
23
23
|
export declare function isJsonValue(value: SqliteValue): value is SqliteJsonValue;
|
|
24
24
|
export declare function isValidParameterValue(value: SqliteValue): value is SqliteParameterValue;
|
|
25
25
|
/**
|
package/package.json
CHANGED