@powersync/service-sync-rules 0.0.0-dev-20260203154303 → 0.0.0-dev-20260223080959

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.
Files changed (105) hide show
  1. package/dist/ExpressionType.d.ts +4 -2
  2. package/dist/ExpressionType.js.map +1 -1
  3. package/dist/HydratedSyncRules.d.ts +3 -3
  4. package/dist/HydratedSyncRules.js.map +1 -1
  5. package/dist/SqlSyncRules.d.ts +11 -37
  6. package/dist/SqlSyncRules.js +11 -340
  7. package/dist/SqlSyncRules.js.map +1 -1
  8. package/dist/SyncConfig.d.ts +46 -0
  9. package/dist/SyncConfig.js +99 -0
  10. package/dist/SyncConfig.js.map +1 -0
  11. package/dist/TablePattern.d.ts +21 -6
  12. package/dist/TablePattern.js +57 -30
  13. package/dist/TablePattern.js.map +1 -1
  14. package/dist/compatibility.d.ts +7 -0
  15. package/dist/compatibility.js +34 -0
  16. package/dist/compatibility.js.map +1 -1
  17. package/dist/compiler/bucket_resolver.d.ts +3 -3
  18. package/dist/compiler/bucket_resolver.js.map +1 -1
  19. package/dist/compiler/compiler.d.ts +22 -3
  20. package/dist/compiler/compiler.js +22 -5
  21. package/dist/compiler/compiler.js.map +1 -1
  22. package/dist/compiler/filter.js +1 -1
  23. package/dist/compiler/filter.js.map +1 -1
  24. package/dist/compiler/ir_to_sync_plan.d.ts +6 -0
  25. package/dist/compiler/ir_to_sync_plan.js +57 -12
  26. package/dist/compiler/ir_to_sync_plan.js.map +1 -1
  27. package/dist/compiler/parser.js +53 -13
  28. package/dist/compiler/parser.js.map +1 -1
  29. package/dist/compiler/querier_graph.js +72 -24
  30. package/dist/compiler/querier_graph.js.map +1 -1
  31. package/dist/compiler/rows.d.ts +35 -5
  32. package/dist/compiler/rows.js +64 -2
  33. package/dist/compiler/rows.js.map +1 -1
  34. package/dist/compiler/scope.d.ts +4 -1
  35. package/dist/compiler/scope.js +13 -2
  36. package/dist/compiler/scope.js.map +1 -1
  37. package/dist/compiler/sqlite.d.ts +2 -11
  38. package/dist/compiler/sqlite.js +104 -79
  39. package/dist/compiler/sqlite.js.map +1 -1
  40. package/dist/compiler/table.d.ts +28 -10
  41. package/dist/compiler/table.js +28 -3
  42. package/dist/compiler/table.js.map +1 -1
  43. package/dist/from_yaml.d.ts +28 -0
  44. package/dist/from_yaml.js +411 -0
  45. package/dist/from_yaml.js.map +1 -0
  46. package/dist/index.d.ts +4 -3
  47. package/dist/index.js +4 -3
  48. package/dist/index.js.map +1 -1
  49. package/dist/json_schema.js +17 -1
  50. package/dist/json_schema.js.map +1 -1
  51. package/dist/schema-generators/DartSchemaGenerator.d.ts +3 -3
  52. package/dist/schema-generators/DartSchemaGenerator.js.map +1 -1
  53. package/dist/schema-generators/DotNetSchemaGenerator.d.ts +2 -2
  54. package/dist/schema-generators/DotNetSchemaGenerator.js.map +1 -1
  55. package/dist/schema-generators/JsLegacySchemaGenerator.d.ts +2 -2
  56. package/dist/schema-generators/JsLegacySchemaGenerator.js.map +1 -1
  57. package/dist/schema-generators/KotlinSchemaGenerator.d.ts +2 -2
  58. package/dist/schema-generators/KotlinSchemaGenerator.js.map +1 -1
  59. package/dist/schema-generators/RoomSchemaGenerator.d.ts +2 -2
  60. package/dist/schema-generators/RoomSchemaGenerator.js.map +1 -1
  61. package/dist/schema-generators/SchemaGenerator.d.ts +8 -3
  62. package/dist/schema-generators/SchemaGenerator.js +20 -13
  63. package/dist/schema-generators/SchemaGenerator.js.map +1 -1
  64. package/dist/schema-generators/SqlSchemaGenerator.d.ts +2 -2
  65. package/dist/schema-generators/SqlSchemaGenerator.js.map +1 -1
  66. package/dist/schema-generators/SwiftSchemaGenerator.d.ts +2 -2
  67. package/dist/schema-generators/SwiftSchemaGenerator.js.map +1 -1
  68. package/dist/schema-generators/TsSchemaGenerator.d.ts +2 -2
  69. package/dist/schema-generators/TsSchemaGenerator.js.map +1 -1
  70. package/dist/sql_functions.d.ts +2 -2
  71. package/dist/sync_plan/engine/scalar_expression_engine.d.ts +4 -2
  72. package/dist/sync_plan/engine/scalar_expression_engine.js +18 -0
  73. package/dist/sync_plan/engine/scalar_expression_engine.js.map +1 -1
  74. package/dist/sync_plan/evaluator/bucket_data_source.d.ts +1 -0
  75. package/dist/sync_plan/evaluator/bucket_data_source.js +29 -12
  76. package/dist/sync_plan/evaluator/bucket_data_source.js.map +1 -1
  77. package/dist/sync_plan/evaluator/bucket_source.js +1 -1
  78. package/dist/sync_plan/evaluator/bucket_source.js.map +1 -1
  79. package/dist/sync_plan/evaluator/index.d.ts +12 -2
  80. package/dist/sync_plan/evaluator/index.js +26 -20
  81. package/dist/sync_plan/evaluator/index.js.map +1 -1
  82. package/dist/sync_plan/evaluator/parameter_evaluator.js +22 -2
  83. package/dist/sync_plan/evaluator/parameter_evaluator.js.map +1 -1
  84. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.d.ts +2 -1
  85. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js +13 -10
  86. package/dist/sync_plan/evaluator/parameter_index_lookup_creator.js.map +1 -1
  87. package/dist/sync_plan/evaluator/table_processor_to_sql.d.ts +20 -0
  88. package/dist/sync_plan/evaluator/table_processor_to_sql.js +37 -0
  89. package/dist/sync_plan/evaluator/table_processor_to_sql.js.map +1 -0
  90. package/dist/sync_plan/expression_visitor.d.ts +1 -1
  91. package/dist/sync_plan/expression_visitor.js +11 -1
  92. package/dist/sync_plan/expression_visitor.js.map +1 -1
  93. package/dist/sync_plan/plan.d.ts +40 -8
  94. package/dist/sync_plan/schema_inference.d.ts +16 -0
  95. package/dist/sync_plan/schema_inference.js +123 -0
  96. package/dist/sync_plan/schema_inference.js.map +1 -0
  97. package/dist/sync_plan/serialize.d.ts +30 -7
  98. package/dist/sync_plan/serialize.js +148 -3
  99. package/dist/sync_plan/serialize.js.map +1 -1
  100. package/dist/types.d.ts +20 -5
  101. package/dist/types.js +27 -5
  102. package/dist/types.js.map +1 -1
  103. package/dist/utils.d.ts +1 -1
  104. package/package.json +1 -1
  105. package/schema/sync_rules.json +19 -3
@@ -1,7 +1,7 @@
1
1
  import { PGNode } from 'pgsql-ast-parser';
2
- import { RequestExpression } from './filter.js';
2
+ import { SingleDependencyExpression } from './filter.js';
3
3
  import { StableHasher } from './equality.js';
4
- import { TablePattern } from '../TablePattern.js';
4
+ import { ImplicitSchemaTablePattern, SourceSchemaTable } from '../index.js';
5
5
  /**
6
6
  * A result set that a query stream selects from.
7
7
  *
@@ -13,7 +13,7 @@ import { TablePattern } from '../TablePattern.js';
13
13
  * {@link PhysicalSourceResultSet} sources with the same {@link PhysicalSourceResultSet.tablePattern} that are still
14
14
  * distinct.
15
15
  */
16
- export type SourceResultSet = PhysicalSourceResultSet | RequestTableValuedResultSet;
16
+ export type SourceResultSet = PhysicalSourceResultSet | TableValuedResultSet;
17
17
  /**
18
18
  * The syntactic sources of a {@link SourceResultSet} being added to a table.
19
19
  */
@@ -33,18 +33,36 @@ export declare abstract class BaseSourceResultSet {
33
33
  * The primary result set of streams must be of this type. Also, indexed lookups can only operate on this type.
34
34
  */
35
35
  export declare class PhysicalSourceResultSet extends BaseSourceResultSet {
36
- readonly tablePattern: TablePattern;
37
- constructor(tablePattern: TablePattern, source: SyntacticResultSetSource);
36
+ readonly tablePattern: ImplicitSchemaTablePattern;
37
+ /**
38
+ * Source tables that the {@link tablePattern} resolves to in the static schema context used when compiling sync
39
+ * streams.
40
+ *
41
+ * This information must only be used to generate analysis warnings, e.g. for column references that don't exist in
42
+ * resolved tables. It must not affect how sync streams are compiled, as that is always schema-independent.
43
+ */
44
+ readonly schemaTablesForWarnings: SourceSchemaTable[];
45
+ constructor(tablePattern: ImplicitSchemaTablePattern, source: SyntacticResultSetSource,
46
+ /**
47
+ * Source tables that the {@link tablePattern} resolves to in the static schema context used when compiling sync
48
+ * streams.
49
+ *
50
+ * This information must only be used to generate analysis warnings, e.g. for column references that don't exist in
51
+ * resolved tables. It must not affect how sync streams are compiled, as that is always schema-independent.
52
+ */
53
+ schemaTablesForWarnings: SourceSchemaTable[]);
38
54
  get description(): string;
39
55
  }
40
56
  /**
41
- * A {@link SourceResultSet} applying a table-valued function with inputs that exclusively depend on request data.
57
+ * A {@link SourceResultSet} applying a table-valued function with inputs that all depend on either a single result set
58
+ * or request data.
42
59
  */
43
- export declare class RequestTableValuedResultSet extends BaseSourceResultSet {
60
+ export declare class TableValuedResultSet extends BaseSourceResultSet {
44
61
  readonly tableValuedFunctionName: string;
45
- readonly parameters: RequestExpression[];
46
- constructor(tableValuedFunctionName: string, parameters: RequestExpression[], source: SyntacticResultSetSource);
62
+ readonly parameters: SingleDependencyExpression[];
63
+ constructor(tableValuedFunctionName: string, parameters: SingleDependencyExpression[], source: SyntacticResultSetSource);
64
+ get inputResultSet(): SourceResultSet | null;
47
65
  get description(): string;
48
66
  buildBehaviorHashCode(hasher: StableHasher): void;
49
- behavesIdenticalTo(other: RequestTableValuedResultSet): boolean;
67
+ behavesIdenticalTo(other: TableValuedResultSet): boolean;
50
68
  }
@@ -23,24 +23,49 @@ export class BaseSourceResultSet {
23
23
  */
24
24
  export class PhysicalSourceResultSet extends BaseSourceResultSet {
25
25
  tablePattern;
26
- constructor(tablePattern, source) {
26
+ schemaTablesForWarnings;
27
+ constructor(tablePattern, source,
28
+ /**
29
+ * Source tables that the {@link tablePattern} resolves to in the static schema context used when compiling sync
30
+ * streams.
31
+ *
32
+ * This information must only be used to generate analysis warnings, e.g. for column references that don't exist in
33
+ * resolved tables. It must not affect how sync streams are compiled, as that is always schema-independent.
34
+ */
35
+ schemaTablesForWarnings) {
27
36
  super(source);
28
37
  this.tablePattern = tablePattern;
38
+ this.schemaTablesForWarnings = schemaTablesForWarnings;
29
39
  }
30
40
  get description() {
31
41
  return this.tablePattern.name;
32
42
  }
33
43
  }
34
44
  /**
35
- * A {@link SourceResultSet} applying a table-valued function with inputs that exclusively depend on request data.
45
+ * A {@link SourceResultSet} applying a table-valued function with inputs that all depend on either a single result set
46
+ * or request data.
36
47
  */
37
- export class RequestTableValuedResultSet extends BaseSourceResultSet {
48
+ export class TableValuedResultSet extends BaseSourceResultSet {
38
49
  tableValuedFunctionName;
39
50
  parameters;
40
51
  constructor(tableValuedFunctionName, parameters, source) {
41
52
  super(source);
42
53
  this.tableValuedFunctionName = tableValuedFunctionName;
43
54
  this.parameters = parameters;
55
+ // All parameters must depend on the same result set.
56
+ const resultSet = this.inputResultSet;
57
+ for (const parameter of parameters) {
58
+ if (parameter.resultSet !== resultSet) {
59
+ throw new Error('Illegal table-valued result set: All inputs must depend on a single result set or request data.');
60
+ }
61
+ }
62
+ }
63
+ get inputResultSet() {
64
+ // It's the same for all inputs, validated in the constructor
65
+ if (this.parameters.length) {
66
+ return this.parameters[0].resultSet;
67
+ }
68
+ return null;
44
69
  }
45
70
  get description() {
46
71
  return this.tableValuedFunctionName;
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/compiler/table.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAgBjE;;GAEG;AACH,MAAM,OAAO,wBAAwB;IAExB;IACA;IAFX,YACW,MAAc,EACd,YAA2B;QAD3B,WAAM,GAAN,MAAM,CAAQ;QACd,iBAAY,GAAZ,YAAY,CAAe;IACnC,CAAC;CACL;AAED,MAAM,OAAgB,mBAAmB;IAClB;IAArB,YAAqB,MAAgC;QAAhC,WAAM,GAAN,MAAM,CAA0B;IAAG,CAAC;CAG1D;AAED;;;;GAIG;AACH,MAAM,OAAO,uBAAwB,SAAQ,mBAAmB;IAEnD;IADX,YACW,YAA0B,EACnC,MAAgC;QAEhC,KAAK,CAAC,MAAM,CAAC,CAAC;QAHL,iBAAY,GAAZ,YAAY,CAAc;IAIrC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IAChC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,mBAAmB;IAEvD;IACA;IAFX,YACW,uBAA+B,EAC/B,UAA+B,EACxC,MAAgC;QAEhC,KAAK,CAAC,MAAM,CAAC,CAAC;QAJL,4BAAuB,GAAvB,uBAAuB,CAAQ;QAC/B,eAAU,GAAV,UAAU,CAAqB;IAI1C,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACtC,CAAC;IAED,qBAAqB,CAAC,MAAoB;QACxC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC/C,2BAA2B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED,kBAAkB,CAAC,KAAkC;QACnD,OAAO,CACL,KAAK,CAAC,uBAAuB,IAAI,IAAI,CAAC,uBAAuB;YAC7D,2BAA2B,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CACtE,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/compiler/table.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAgBjE;;GAEG;AACH,MAAM,OAAO,wBAAwB;IAExB;IACA;IAFX,YACW,MAAc,EACd,YAA2B;QAD3B,WAAM,GAAN,MAAM,CAAQ;QACd,iBAAY,GAAZ,YAAY,CAAe;IACnC,CAAC;CACL;AAED,MAAM,OAAgB,mBAAmB;IAClB;IAArB,YAAqB,MAAgC;QAAhC,WAAM,GAAN,MAAM,CAA0B;IAAG,CAAC;CAG1D;AAED;;;;GAIG;AACH,MAAM,OAAO,uBAAwB,SAAQ,mBAAmB;IAEnD;IASA;IAVX,YACW,YAAwC,EACjD,MAAgC;IAChC;;;;;;OAMG;IACM,uBAA4C;QAErD,KAAK,CAAC,MAAM,CAAC,CAAC;QAXL,iBAAY,GAAZ,YAAY,CAA4B;QASxC,4BAAuB,GAAvB,uBAAuB,CAAqB;IAGvD,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IAChC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,mBAAmB;IAEhD;IACA;IAFX,YACW,uBAA+B,EAC/B,UAAwC,EACjD,MAAgC;QAEhC,KAAK,CAAC,MAAM,CAAC,CAAC;QAJL,4BAAuB,GAAvB,uBAAuB,CAAQ;QAC/B,eAAU,GAAV,UAAU,CAA8B;QAKjD,qDAAqD;QACrD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC;QACtC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,cAAc;QAChB,6DAA6D;QAC7D,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACtC,CAAC;IAED,qBAAqB,CAAC,MAAoB;QACxC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC/C,2BAA2B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5D,CAAC;IAED,kBAAkB,CAAC,KAA2B;QAC5C,OAAO,CACL,KAAK,CAAC,uBAAuB,IAAI,IAAI,CAAC,uBAAuB;YAC7D,2BAA2B,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CACtE,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ import { SourceSchema } from './types.js';
2
+ import { SyncConfigWithErrors } from './SyncConfig.js';
3
+ /**
4
+ * Reads `sync_rules.yaml` files containing a sync configuration.
5
+ *
6
+ * @internal Only exposed through `SqlSyncRules.fromYaml`.
7
+ */
8
+ export declare class SyncConfigFromYaml {
9
+ #private;
10
+ private readonly options;
11
+ private readonly yaml;
12
+ constructor(options: SyncConfigFromYamlOptions, yaml: string);
13
+ read(): SyncConfigWithErrors;
14
+ }
15
+ export interface SyncConfigFromYamlOptions {
16
+ readonly throwOnError: boolean;
17
+ readonly schema?: SourceSchema;
18
+ /**
19
+ * The default schema to use when only a table name is specified.
20
+ *
21
+ * 'public' for Postgres, default database for MongoDB/MySQL.
22
+ */
23
+ readonly defaultSchema: string;
24
+ /**
25
+ * Whether to allow the option of using the new sync compiler.
26
+ */
27
+ readonly allowNewSyncCompiler: boolean;
28
+ }
@@ -0,0 +1,411 @@
1
+ import { isScalar, LineCounter, parseDocument, Scalar, YAMLMap, YAMLSeq } from 'yaml';
2
+ import { SqlRuleError, SyncRulesErrors, YamlError } from './errors.js';
3
+ import { DEFAULT_BUCKET_PRIORITY, isValidPriority } from './BucketDescription.js';
4
+ import { CompatibilityContext, CompatibilityEdition, CompatibilityOption, TimeValuePrecision } from './compatibility.js';
5
+ import { SqlSyncRules } from './SqlSyncRules.js';
6
+ import { validateSyncRulesSchema } from './json_schema.js';
7
+ import { SqlEventDescriptor } from './events/SqlEventDescriptor.js';
8
+ import { SqlBucketDescriptor } from './SqlBucketDescriptor.js';
9
+ import { SyncStreamsCompiler } from './compiler/compiler.js';
10
+ import { syncStreamFromSql } from './streams/from_sql.js';
11
+ import { PrecompiledSyncConfig } from './sync_plan/evaluator/index.js';
12
+ import { javaScriptExpressionEngine } from './sync_plan/engine/javascript.js';
13
+ const ACCEPT_POTENTIALLY_DANGEROUS_QUERIES = Symbol('ACCEPT_POTENTIALLY_DANGEROUS_QUERIES');
14
+ /**
15
+ * Reads `sync_rules.yaml` files containing a sync configuration.
16
+ *
17
+ * @internal Only exposed through `SqlSyncRules.fromYaml`.
18
+ */
19
+ export class SyncConfigFromYaml {
20
+ options;
21
+ yaml;
22
+ #errors = [];
23
+ #lineCounter = new LineCounter();
24
+ // Names of bucket definitions and sync streams, to prevent duplicates.
25
+ #definitionNames = new Set();
26
+ constructor(options, yaml) {
27
+ this.options = options;
28
+ this.yaml = yaml;
29
+ }
30
+ read() {
31
+ return { config: this.#read(), errors: this.#errors };
32
+ }
33
+ #read() {
34
+ const parsed = parseDocument(this.yaml, {
35
+ schema: 'core',
36
+ keepSourceTokens: true,
37
+ lineCounter: this.#lineCounter,
38
+ customTags: [
39
+ {
40
+ tag: '!accept_potentially_dangerous_queries',
41
+ resolve(_text, _onError) {
42
+ return ACCEPT_POTENTIALLY_DANGEROUS_QUERIES;
43
+ }
44
+ }
45
+ ]
46
+ });
47
+ if (parsed.errors.length > 0) {
48
+ this.#errors.push(...parsed.errors.map((e) => new YamlError(e)));
49
+ this.#throwOnErrorIfRequested();
50
+ // Return an empty sync rules instance if we couldn't parse YAML, it doesn't make sense to try parsing the broken
51
+ // structure further.
52
+ return new SqlSyncRules(this.yaml);
53
+ }
54
+ let compatibility;
55
+ let useNewCompiler;
56
+ if (parsed.has('config')) {
57
+ const declaredOptions = parsed.get('config');
58
+ const compatibilityOptions = this.#parseCompatibilityOptions(declaredOptions);
59
+ compatibility = compatibilityOptions.compatibility;
60
+ useNewCompiler = compatibilityOptions.useNewCompiler;
61
+ }
62
+ else {
63
+ compatibility = CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY;
64
+ useNewCompiler = false;
65
+ }
66
+ // Bucket definitions using explicit parameter and data queries.
67
+ const bucketMap = parsed.get('bucket_definitions');
68
+ const streamMap = parsed.get('streams');
69
+ let result;
70
+ if (useNewCompiler && this.options.allowNewSyncCompiler) {
71
+ result = this.#compileSyncPlan(bucketMap, streamMap, compatibility);
72
+ }
73
+ else {
74
+ result = this.#legacyParseBucketDefinitionsAndStreams(bucketMap, streamMap, compatibility);
75
+ }
76
+ const eventDefinitions = this.#parseEventDefinitions(parsed, compatibility);
77
+ result.eventDescriptors.push(...eventDefinitions);
78
+ // Validate that there are no additional properties.
79
+ // Since these errors don't contain line numbers, do this last.
80
+ const valid = validateSyncRulesSchema(parsed.toJSON());
81
+ if (!valid) {
82
+ this.#errors.push(...validateSyncRulesSchema.errors.map((e) => {
83
+ return new YamlError(e);
84
+ }));
85
+ }
86
+ this.#throwOnErrorIfRequested();
87
+ return result;
88
+ }
89
+ #throwOnErrorIfRequested() {
90
+ if (this.options.throwOnError && this.#errors.find((e) => e.type != 'warning') != null) {
91
+ throw new SyncRulesErrors(this.#errors);
92
+ }
93
+ }
94
+ /**
95
+ * Parses the `config` block of a sync configuration.
96
+ *
97
+ * @see https://docs.powersync.com/sync/advanced/compatibility
98
+ */
99
+ #parseCompatibilityOptions(declaredOptions) {
100
+ const edition = (declaredOptions.get('edition') ?? CompatibilityEdition.LEGACY);
101
+ const options = new Map();
102
+ let maxTimeValuePrecision = undefined;
103
+ let useNewCompiler = false;
104
+ for (const entry of declaredOptions.items) {
105
+ const { key: { value: key }, value: { value } } = entry;
106
+ if (key == 'timestamp_max_precision') {
107
+ maxTimeValuePrecision = TimeValuePrecision.byName[value];
108
+ }
109
+ if (key == 'sync_config_compiler') {
110
+ useNewCompiler = Boolean(value);
111
+ continue;
112
+ }
113
+ const option = CompatibilityOption.byName[key];
114
+ if (option) {
115
+ options.set(option, Boolean(value));
116
+ }
117
+ }
118
+ const compatibility = new CompatibilityContext({ edition, overrides: options, maxTimeValuePrecision });
119
+ if (maxTimeValuePrecision && !compatibility.isEnabled(CompatibilityOption.timestampsIso8601)) {
120
+ this.#errors.push(new YamlError(new Error(`'timestamp_max_precision' requires 'timestamps_iso8601' to be enabled.`)));
121
+ }
122
+ return { compatibility, useNewCompiler };
123
+ }
124
+ #compileSyncPlan(bucketMap, streamMap, compatibility) {
125
+ if (bucketMap != null) {
126
+ this.#errors.push(this.#yamlError(bucketMap, `'bucket_definitions' are not supported by the new compiler. Consider using https://powersync-community.github.io/bucket-definitions-to-sync-streams/ to translate them to streams.`));
127
+ }
128
+ if (streamMap == null) {
129
+ this.#errors.push(new YamlError(new Error(`'streams' are required.`)));
130
+ }
131
+ const compiler = new SyncStreamsCompiler(this.options);
132
+ for (const entry of streamMap?.items ?? []) {
133
+ const { key: keyScalar, value } = entry;
134
+ if (!(value instanceof YAMLMap)) {
135
+ // The json schema validator will flag this later.
136
+ continue;
137
+ }
138
+ const key = keyScalar.toString();
139
+ if (!this.#checkUniqueName(key, keyScalar)) {
140
+ continue;
141
+ }
142
+ const $with = value.get('with');
143
+ const streamCompiler = compiler.stream({
144
+ name: key,
145
+ isSubscribedByDefault: value.get('auto_subscribe', true)?.value == true,
146
+ priority: this.#parsePriority(value) ?? DEFAULT_BUCKET_PRIORITY
147
+ });
148
+ if ($with != null) {
149
+ for (const entry of $with.items ?? []) {
150
+ const { key: cteName, value: cteQuery } = entry;
151
+ const [sql, errorListener] = this.#scalarErrorListener(cteQuery);
152
+ const parsed = compiler.commonTableExpression(sql, errorListener);
153
+ if (parsed) {
154
+ streamCompiler.registerCommonTableExpression(cteName.value, parsed);
155
+ }
156
+ }
157
+ }
158
+ const addQuery = (query) => {
159
+ const [sql, errorListener] = this.#scalarErrorListener(query);
160
+ streamCompiler.addQuery(sql, errorListener);
161
+ };
162
+ const queries = value.get('queries');
163
+ const query = value.get('query', true);
164
+ if ((queries == null) == (query == null)) {
165
+ this.#errors.push(this.#yamlError(value, 'One of `queries` or `query` must be given.'));
166
+ }
167
+ if (query) {
168
+ addQuery(query);
169
+ }
170
+ if (queries) {
171
+ for (const queryEntry of queries.items) {
172
+ if (queryEntry instanceof Scalar) {
173
+ addQuery(queryEntry);
174
+ }
175
+ }
176
+ }
177
+ streamCompiler.finish();
178
+ }
179
+ return new PrecompiledSyncConfig(compiler.output.toSyncPlan(), {
180
+ defaultSchema: this.options.defaultSchema,
181
+ engine: javaScriptExpressionEngine(compatibility),
182
+ sourceText: this.yaml
183
+ });
184
+ }
185
+ #legacyParseBucketDefinitionsAndStreams(bucketMap, streamMap, compatibility) {
186
+ const rules = new SqlSyncRules(this.yaml);
187
+ rules.compatibility = compatibility;
188
+ if (bucketMap == null && streamMap == null) {
189
+ this.#errors.push(new YamlError(new Error(`'bucket_definitions' or 'streams' is required`)));
190
+ this.#throwOnErrorIfRequested();
191
+ }
192
+ for (let entry of bucketMap?.items ?? []) {
193
+ const { key: keyScalar, value } = entry;
194
+ const key = keyScalar.toString();
195
+ if (!this.#checkUniqueName(key, keyScalar)) {
196
+ continue;
197
+ }
198
+ if (value == null || !(value instanceof YAMLMap)) {
199
+ this.#errors.push(this.#tokenError(keyScalar, `'${key}' bucket definition must be an object`));
200
+ continue;
201
+ }
202
+ const accept_potentially_dangerous_queries = value.get('accept_potentially_dangerous_queries', true)?.value == true;
203
+ const parseOptionPriority = this.#parsePriority(value);
204
+ const queryOptions = {
205
+ ...this.options,
206
+ accept_potentially_dangerous_queries,
207
+ priority: parseOptionPriority,
208
+ compatibility
209
+ };
210
+ const parameters = value.get('parameters', true);
211
+ const dataQueries = value.get('data', true);
212
+ const descriptor = new SqlBucketDescriptor(key);
213
+ if (parameters instanceof Scalar) {
214
+ this.#withScalar(parameters, (q) => {
215
+ return descriptor.addParameterQuery(q, queryOptions);
216
+ });
217
+ }
218
+ else if (parameters instanceof YAMLSeq) {
219
+ for (let item of parameters.items) {
220
+ this.#withScalar(item, (q) => {
221
+ return descriptor.addParameterQuery(q, queryOptions);
222
+ });
223
+ }
224
+ }
225
+ else {
226
+ descriptor.addParameterQuery('SELECT', queryOptions);
227
+ }
228
+ if (!(dataQueries instanceof YAMLSeq)) {
229
+ this.#errors.push(this.#tokenError((dataQueries ?? value), `'data' must be an array`));
230
+ continue;
231
+ }
232
+ for (let query of dataQueries.items) {
233
+ this.#withScalar(query, (q) => {
234
+ return descriptor.addDataQuery(q, queryOptions, compatibility);
235
+ });
236
+ }
237
+ rules.bucketSources.push(descriptor);
238
+ rules.bucketDataSources.push(...descriptor.dataSources);
239
+ rules.bucketParameterLookupSources.push(...descriptor.parameterIndexLookupCreators);
240
+ }
241
+ for (const entry of streamMap?.items ?? []) {
242
+ const { key: keyScalar, value } = entry;
243
+ const key = keyScalar.toString();
244
+ if (!this.#checkUniqueName(key, keyScalar)) {
245
+ continue;
246
+ }
247
+ // We don't support with or multiple queries in streams, those are only supported by the new compiler.
248
+ const $with = value.get('with');
249
+ if ($with != null) {
250
+ this.#errors.push(this.#yamlError($with, 'Common table expressions are not supported without the `sync_config_compiler` option.'));
251
+ }
252
+ const queries = value.get('queries');
253
+ if (queries != null) {
254
+ this.#errors.push(this.#yamlError(queries, 'Multiple queries not supported without the `sync_config_compiler` option.'));
255
+ }
256
+ const accept_potentially_dangerous_queries = value.get('accept_potentially_dangerous_queries', true)?.value == true;
257
+ const queryOptions = {
258
+ ...this.options,
259
+ accept_potentially_dangerous_queries,
260
+ priority: this.#parsePriority(value),
261
+ auto_subscribe: value.get('auto_subscribe', true)?.value == true,
262
+ compatibility
263
+ };
264
+ const data = value.get('query', true);
265
+ if (data instanceof Scalar) {
266
+ this.#withScalar(data, (q) => {
267
+ const [parsed, errors] = syncStreamFromSql(key, q, queryOptions);
268
+ rules.bucketSources.push(parsed);
269
+ rules.bucketDataSources.push(...parsed.dataSources);
270
+ rules.bucketParameterLookupSources.push(...parsed.parameterIndexLookupCreators);
271
+ return {
272
+ parsed: true,
273
+ errors
274
+ };
275
+ });
276
+ }
277
+ else {
278
+ this.#errors.push(this.#tokenError(data, 'Must be a string.'));
279
+ continue;
280
+ }
281
+ }
282
+ return rules;
283
+ }
284
+ #parseEventDefinitions(parsed, compatibility) {
285
+ const eventMap = parsed.get('event_definitions');
286
+ const eventDescriptors = [];
287
+ for (const event of eventMap?.items ?? []) {
288
+ const { key, value } = event;
289
+ if (false == value instanceof YAMLMap) {
290
+ this.#errors.push(new YamlError(new Error(`Event definitions must be objects.`)));
291
+ continue;
292
+ }
293
+ const payloads = value.get('payloads');
294
+ if (false == payloads instanceof YAMLSeq) {
295
+ this.#errors.push(new YamlError(new Error(`Event definition payloads must be an array.`)));
296
+ continue;
297
+ }
298
+ const eventDescriptor = new SqlEventDescriptor(key.toString(), compatibility);
299
+ for (let item of payloads.items) {
300
+ if (!isScalar(item)) {
301
+ this.#errors.push(new YamlError(new Error(`Payload queries for events must be scalar.`)));
302
+ continue;
303
+ }
304
+ this.#withScalar(item, (q) => {
305
+ return eventDescriptor.addSourceQuery(q, this.options);
306
+ });
307
+ }
308
+ eventDescriptors.push(eventDescriptor);
309
+ }
310
+ return eventDescriptors;
311
+ }
312
+ #checkUniqueName(name, literal) {
313
+ if (this.#definitionNames.has(name)) {
314
+ this.#errors.push(this.#tokenError(literal, 'Duplicate stream or bucket definition.'));
315
+ return false;
316
+ }
317
+ this.#definitionNames.add(name);
318
+ return true;
319
+ }
320
+ #parsePriority(value) {
321
+ if (value.has('priority')) {
322
+ const priorityValue = value.get('priority', true);
323
+ if (typeof priorityValue.value != 'number' || !isValidPriority(priorityValue.value)) {
324
+ this.#errors.push(this.#tokenError(priorityValue, 'Invalid priority, expected a number between 0 and 3 (inclusive).'));
325
+ }
326
+ else {
327
+ return priorityValue.value;
328
+ }
329
+ }
330
+ }
331
+ #yamlError(node, message) {
332
+ if (node.range != null) {
333
+ const [start, _, end] = node.range;
334
+ return new YamlError(new Error(message), { start, end });
335
+ }
336
+ else {
337
+ return new YamlError(new Error(message));
338
+ }
339
+ }
340
+ #tokenError(token, message) {
341
+ const start = token?.srcToken?.offset ?? 0;
342
+ const end = start + 1;
343
+ return new YamlError(new Error(message), { start, end });
344
+ }
345
+ #withScalar(scalar, cb) {
346
+ const value = scalar.toString();
347
+ const wrapped = (value) => {
348
+ try {
349
+ return cb(value);
350
+ }
351
+ catch (e) {
352
+ return {
353
+ parsed: false,
354
+ errors: [e]
355
+ };
356
+ }
357
+ };
358
+ const result = wrapped(value);
359
+ for (let err of result.errors) {
360
+ this.#addErrorFromScalar(scalar, value, err);
361
+ }
362
+ return result;
363
+ }
364
+ /**
365
+ * Reads string contents from a YAML scalar and returns an error listener for the sync stream compiler.
366
+ */
367
+ #scalarErrorListener(scalar) {
368
+ const value = scalar.toString();
369
+ const listener = {
370
+ report: (message, location, options) => {
371
+ const error = new SqlRuleError(message, value, location);
372
+ if (options?.isWarning) {
373
+ error.type = 'warning';
374
+ }
375
+ this.#addErrorFromScalar(scalar, value, error);
376
+ }
377
+ };
378
+ return [value, listener];
379
+ }
380
+ /**
381
+ * Adds an error originally added while parsing a YAML scalar string.
382
+ *
383
+ * @param scalar The scalar being parsed.
384
+ * @param value String contents of the scalar.
385
+ * @param error An error in the scalar content. Offsets will be translated to point at the full YAML source.
386
+ */
387
+ #addErrorFromScalar(scalar, value, err) {
388
+ let sourceOffset = scalar.srcToken.offset;
389
+ if (scalar.type == Scalar.QUOTE_DOUBLE || scalar.type == Scalar.QUOTE_SINGLE) {
390
+ // TODO: Is there a better way to do this?
391
+ sourceOffset += 1;
392
+ }
393
+ let offset;
394
+ let end;
395
+ if (err instanceof SqlRuleError && err.location) {
396
+ offset = err.location.start + sourceOffset;
397
+ end = err.location.end + sourceOffset;
398
+ }
399
+ else if (typeof err.token?._location?.start == 'number') {
400
+ offset = sourceOffset + err.token?._location?.start;
401
+ end = sourceOffset + err.token?._location?.end;
402
+ }
403
+ else {
404
+ offset = sourceOffset;
405
+ end = sourceOffset + Math.max(value.length, 1);
406
+ }
407
+ const pos = { start: offset, end };
408
+ this.#errors.push(new YamlError(err, pos));
409
+ }
410
+ }
411
+ //# sourceMappingURL=from_yaml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from_yaml.js","sourceRoot":"","sources":["../src/from_yaml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,QAAQ,EAAE,WAAW,EAAQ,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAoB,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGjF,OAAO,EAAwB,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAE9E,MAAM,oCAAoC,GAAG,MAAM,CAAC,sCAAsC,CAAC,CAAC;AAE5F;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IAQV;IACA;IARV,OAAO,GAAgB,EAAE,CAAC;IAC1B,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC;IAE1C,uEAAuE;IAC9D,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;IAE9C,YACmB,OAAkC,EAClC,IAAY;QADZ,YAAO,GAAP,OAAO,CAA2B;QAClC,SAAI,GAAJ,IAAI,CAAQ;IAC5B,CAAC;IAEJ,IAAI;QACF,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IACxD,CAAC;IAED,KAAK;QACH,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE;YACtC,MAAM,EAAE,MAAM;YACd,gBAAgB,EAAE,IAAI;YACtB,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,UAAU,EAAE;gBACV;oBACE,GAAG,EAAE,uCAAuC;oBAC5C,OAAO,CAAC,KAAa,EAAE,QAAiC;wBACtD,OAAO,oCAAoC,CAAC;oBAC9C,CAAC;iBACF;aACF;SACF,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAEhC,iHAAiH;YACjH,qBAAqB;YACrB,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,aAAmC,CAAC;QACxC,IAAI,cAAuB,CAAC;QAC5B,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAY,CAAC;YACxD,MAAM,oBAAoB,GAAG,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,CAAC;YAC9E,aAAa,GAAG,oBAAoB,CAAC,aAAa,CAAC;YACnD,cAAc,GAAG,oBAAoB,CAAC,cAAc,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,oBAAoB,CAAC,4BAA4B,CAAC;YAClE,cAAc,GAAG,KAAK,CAAC;QACzB,CAAC;QAED,gEAAgE;QAChE,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAmB,CAAC;QACrE,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAmB,CAAC;QAE1D,IAAI,MAAkB,CAAC;QACvB,IAAI,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;YACxD,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,IAAI,CAAC,uCAAuC,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAC7F,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAC5E,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC;QAElD,oDAAoD;QACpD,+DAA+D;QAC/D,MAAM,KAAK,GAAG,uBAAuB,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,GAAG,uBAAuB,CAAC,MAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;gBAChD,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wBAAwB;QACtB,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;YACvF,MAAM,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,0BAA0B,CAAC,eAAwB;QACjD,MAAM,OAAO,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,oBAAoB,CAAC,MAAM,CAAyB,CAAC;QACxG,MAAM,OAAO,GAAG,IAAI,GAAG,EAAgC,CAAC;QACxD,IAAI,qBAAqB,GAAmC,SAAS,CAAC;QACtE,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,KAAK,MAAM,KAAK,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;YAC1C,MAAM,EACJ,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EACnB,KAAK,EAAE,EAAE,KAAK,EAAE,EACjB,GAAG,KAAoD,CAAC;YAEzD,IAAI,GAAG,IAAI,yBAAyB,EAAE,CAAC;gBACrC,qBAAqB,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3D,CAAC;YAED,IAAI,GAAG,IAAI,sBAAsB,EAAE,CAAC;gBAClC,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gBAChC,SAAS;YACX,CAAC;YAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,oBAAoB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACvG,IAAI,qBAAqB,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC7F,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC,CACnG,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;IAC3C,CAAC;IAED,gBAAgB,CAAC,SAAyB,EAAE,SAAyB,EAAE,aAAmC;QACxG,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,IAAI,CAAC,UAAU,CACb,SAAS,EACT,oLAAoL,CACrL,CACF,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAwC,CAAC;YAC3E,IAAI,CAAC,CAAC,KAAK,YAAY,OAAO,CAAC,EAAE,CAAC;gBAChC,kDAAkD;gBAClD,SAAS;YACX,CAAC;YAED,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC3C,SAAS;YACX,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAmB,CAAC;YAClD,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC;gBACrC,IAAI,EAAE,GAAG;gBACT,qBAAqB,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI;gBACvE,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,uBAAuB;aAChE,CAAC,CAAC;YAEH,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;oBACtC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAA+C,CAAC;oBAC1F,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;oBACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;oBAClE,IAAI,MAAM,EAAE,CAAC;wBACX,cAAc,CAAC,6BAA6B,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBACtE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,KAAqB,EAAE,EAAE;gBACzC,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBAC9D,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;YAC9C,CAAC,CAAC;YAEF,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAmB,CAAC;YACvD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAA0B,CAAC;YAEhE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,4CAA4C,CAAC,CAAC,CAAC;YAC1F,CAAC;YACD,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBACvC,IAAI,UAAU,YAAY,MAAM,EAAE,CAAC;wBACjC,QAAQ,CAAC,UAA4B,CAAC,CAAC;oBACzC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,cAAc,CAAC,MAAM,EAAE,CAAC;QAC1B,CAAC;QAED,OAAO,IAAI,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE;YAC7D,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;YACzC,MAAM,EAAE,0BAA0B,CAAC,aAAa,CAAC;YACjD,UAAU,EAAE,IAAI,CAAC,IAAI;SACtB,CAAC,CAAC;IACL,CAAC;IAED,uCAAuC,CACrC,SAAyB,EACzB,SAAyB,EACzB,aAAmC;QAEnC,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,KAAK,CAAC,aAAa,GAAG,aAAa,CAAC;QAEpC,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC,CAAC;YAC7F,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAClC,CAAC;QAED,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YACzC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAwC,CAAC;YAC3E,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC3C,SAAS;YACX,CAAC;YAED,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,YAAY,OAAO,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,GAAG,uCAAuC,CAAC,CAAC,CAAC;gBAC/F,SAAS;YACX,CAAC;YAED,MAAM,oCAAoC,GACxC,KAAK,CAAC,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;YACzE,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAEvD,MAAM,YAAY,GAAsB;gBACtC,GAAG,IAAI,CAAC,OAAO;gBACf,oCAAoC;gBACpC,QAAQ,EAAE,mBAAmB;gBAC7B,aAAa;aACd,CAAC;YACF,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAY,CAAC;YAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAY,CAAC;YAEvD,MAAM,UAAU,GAAG,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAEhD,IAAI,UAAU,YAAY,MAAM,EAAE,CAAC;gBACjC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;oBACjC,OAAO,UAAU,CAAC,iBAAiB,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACvD,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,UAAU,YAAY,OAAO,EAAE,CAAC;gBACzC,KAAK,IAAI,IAAI,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;oBAClC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;wBAC3B,OAAO,UAAU,CAAC,iBAAiB,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;oBACvD,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,iBAAiB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,CAAC,CAAC,WAAW,YAAY,OAAO,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,IAAI,KAAK,CAAQ,EAAE,yBAAyB,CAAC,CAAC,CAAC;gBAC9F,SAAS;YACX,CAAC;YACD,KAAK,IAAI,KAAK,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;gBACpC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC5B,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;gBACjE,CAAC,CAAC,CAAC;YACL,CAAC;YAED,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACrC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;YACxD,KAAK,CAAC,4BAA4B,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,4BAA4B,CAAC,CAAC;QACtF,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAwC,CAAC;YAC3E,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC3C,SAAS;YACX,CAAC;YAED,sGAAsG;YACtG,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,IAAI,CAAC,UAAU,CACb,KAAa,EACb,uFAAuF,CACxF,CACF,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,IAAI,CAAC,UAAU,CAAC,OAAe,EAAE,2EAA2E,CAAC,CAC9G,CAAC;YACJ,CAAC;YAED,MAAM,oCAAoC,GACxC,KAAK,CAAC,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;YAEzE,MAAM,YAAY,GAAuB;gBACvC,GAAG,IAAI,CAAC,OAAO;gBACf,oCAAoC;gBACpC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gBACpC,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI;gBAChE,aAAa;aACd,CAAC;YAEF,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAY,CAAC;YACjD,IAAI,IAAI,YAAY,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC3B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;oBACjE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACjC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;oBACpD,KAAK,CAAC,4BAA4B,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;oBAChF,OAAO;wBACL,MAAM,EAAE,IAAI;wBACZ,MAAM;qBACP,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAW,EAAE,mBAAmB,CAAC,CAAC,CAAC;gBACtE,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sBAAsB,CAAC,MAAgB,EAAE,aAAmC;QAC1E,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAY,CAAC;QAC5D,MAAM,gBAAgB,GAAyB,EAAE,CAAC;QAElD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;YAC1C,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAwC,CAAC;YAEhE,IAAI,KAAK,IAAI,KAAK,YAAY,OAAO,EAAE,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC,CAAC;gBAClF,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAY,CAAC;YAClD,IAAI,KAAK,IAAI,QAAQ,YAAY,OAAO,EAAE,CAAC;gBACzC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC,CAAC;gBAC3F,SAAS;YACX,CAAC;YAED,MAAM,eAAe,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAC;YAC9E,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC,CAAC;oBAC1F,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;oBAC3B,OAAO,eAAe,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzD,CAAC,CAAC,CAAC;YACL,CAAC;YAED,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,gBAAgB,CAAC,IAAY,EAAE,OAAe;QAC5C,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,wCAAwC,CAAC,CAAC,CAAC;YACvF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,KAAc;QAC3B,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAE,CAAC;YACnD,IAAI,OAAO,aAAa,CAAC,KAAK,IAAI,QAAQ,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpF,IAAI,CAAC,OAAO,CAAC,IAAI,CACf,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,kEAAkE,CAAC,CACpG,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,aAAa,CAAC,KAAK,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,UAAU,CAAC,IAAU,EAAE,OAAe;QACpC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACnC,OAAO,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,OAAe;QACxC,MAAM,KAAK,GAAG,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC;QACtB,OAAO,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,EAAuC;QACjE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAEhC,MAAM,OAAO,GAAG,CAAC,KAAa,EAAoB,EAAE;YAClD,IAAI,CAAC;gBACH,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO;oBACL,MAAM,EAAE,KAAK;oBACb,MAAM,EAAE,CAAC,CAAC,CAAC;iBACZ,CAAC;YACJ,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,MAAc;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAyB;YACrC,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAQ,EAAE;gBAC3C,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBACzD,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;gBACzB,CAAC;gBAED,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YACjD,CAAC;SACF,CAAC;QAEF,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,mBAAmB,CAAC,MAAc,EAAE,KAAa,EAAE,GAAiB;QAClE,IAAI,YAAY,GAAG,MAAM,CAAC,QAAS,CAAC,MAAM,CAAC;QAC3C,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7E,0CAA0C;YAC1C,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,MAAc,CAAC;QACnB,IAAI,GAAW,CAAC;QAChB,IAAI,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YAChD,MAAM,GAAG,GAAG,CAAC,QAAS,CAAC,KAAK,GAAG,YAAY,CAAC;YAC5C,GAAG,GAAG,GAAG,CAAC,QAAS,CAAC,GAAG,GAAG,YAAY,CAAC;QACzC,CAAC;aAAM,IAAI,OAAQ,GAAW,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,QAAQ,EAAE,CAAC;YACnE,MAAM,GAAG,YAAY,GAAI,GAAW,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;YAC7D,GAAG,GAAG,YAAY,GAAI,GAAW,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,YAAY,CAAC;YACtB,GAAG,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;CACF"}
package/dist/index.d.ts CHANGED
@@ -22,16 +22,17 @@ export * from './StaticSchema.js';
22
22
  export { SyncStream } from './streams/stream.js';
23
23
  export { STREAM_FUNCTIONS } from './streams/functions.js';
24
24
  export { syncStreamFromSql } from './streams/from_sql.js';
25
+ export { SyncConfig, SyncConfigWithErrors } from './SyncConfig.js';
25
26
  export * from './TablePattern.js';
26
27
  export * from './types.js';
27
28
  export * from './types/custom_sqlite_value.js';
28
29
  export * from './types/time.js';
29
30
  export * from './utils.js';
30
- export { versionedHydrationState } from './HydrationState.js';
31
+ export * from './HydrationState.js';
31
32
  export * from './HydratedSyncRules.js';
32
33
  export * from './compiler/compiler.js';
33
34
  export * from './sync_plan/plan.js';
34
- export { serializeSyncPlan } from './sync_plan/serialize.js';
35
- export { addPrecompiledSyncPlanToRules } from './sync_plan/evaluator/index.js';
35
+ export { serializeSyncPlan, deserializeSyncPlan } from './sync_plan/serialize.js';
36
+ export { PrecompiledSyncConfig } from './sync_plan/evaluator/index.js';
36
37
  export { javaScriptExpressionEngine } from './sync_plan/engine/javascript.js';
37
38
  export { nodeSqliteExpressionEngine } from './sync_plan/engine/sqlite.js';
package/dist/index.js CHANGED
@@ -22,17 +22,18 @@ export * from './StaticSchema.js';
22
22
  export { SyncStream } from './streams/stream.js';
23
23
  export { STREAM_FUNCTIONS } from './streams/functions.js';
24
24
  export { syncStreamFromSql } from './streams/from_sql.js';
25
+ export { SyncConfig } from './SyncConfig.js';
25
26
  export * from './TablePattern.js';
26
27
  export * from './types.js';
27
28
  export * from './types/custom_sqlite_value.js';
28
29
  export * from './types/time.js';
29
30
  export * from './utils.js';
30
- export { versionedHydrationState } from './HydrationState.js';
31
+ export * from './HydrationState.js';
31
32
  export * from './HydratedSyncRules.js';
32
33
  export * from './compiler/compiler.js';
33
34
  export * from './sync_plan/plan.js';
34
- export { serializeSyncPlan } from './sync_plan/serialize.js';
35
- export { addPrecompiledSyncPlanToRules } from './sync_plan/evaluator/index.js';
35
+ export { serializeSyncPlan, deserializeSyncPlan } from './sync_plan/serialize.js';
36
+ export { PrecompiledSyncConfig } from './sync_plan/evaluator/index.js';
36
37
  export { javaScriptExpressionEngine } from './sync_plan/engine/javascript.js';
37
38
  export { nodeSqliteExpressionEngine } from './sync_plan/engine/sqlite.js';
38
39
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0CAA0C,CAAC;AACzD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,cAAc,wBAAwB,CAAC;AAEvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0CAA0C,CAAC;AACzD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAC;AACnE,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC"}