@powersync/service-core 0.0.0-dev-20260909133214 → 0.0.0-dev-20260929095716

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 (92) hide show
  1. package/CHANGELOG.md +45 -5
  2. package/dist/api/diagnostics.js +5 -2
  3. package/dist/api/diagnostics.js.map +1 -1
  4. package/dist/entry/commands/compact-action.js +1 -1
  5. package/dist/entry/commands/compact-action.js.map +1 -1
  6. package/dist/entry/commands/config-command.js +1 -1
  7. package/dist/entry/commands/config-command.js.map +1 -1
  8. package/dist/migrations/PowerSyncMigrationManager.js +2 -1
  9. package/dist/migrations/PowerSyncMigrationManager.js.map +1 -1
  10. package/dist/replication/AbstractReplicator.js +8 -4
  11. package/dist/replication/AbstractReplicator.js.map +1 -1
  12. package/dist/replication/ReplicationModule.d.ts +0 -7
  13. package/dist/replication/ReplicationModule.js +0 -1
  14. package/dist/replication/ReplicationModule.js.map +1 -1
  15. package/dist/routes/configure-fastify.d.ts +3 -3
  16. package/dist/routes/endpoints/admin.d.ts +6 -6
  17. package/dist/routes/endpoints/admin.js +15 -11
  18. package/dist/routes/endpoints/admin.js.map +1 -1
  19. package/dist/routes/endpoints/socket-route.js +7 -5
  20. package/dist/routes/endpoints/socket-route.js.map +1 -1
  21. package/dist/routes/endpoints/sync-rules.js +16 -10
  22. package/dist/routes/endpoints/sync-rules.js.map +1 -1
  23. package/dist/storage/BucketStorageFactory.d.ts +21 -2
  24. package/dist/storage/BucketStorageFactory.js +17 -4
  25. package/dist/storage/BucketStorageFactory.js.map +1 -1
  26. package/dist/storage/PersistedReplicationStream.d.ts +2 -1
  27. package/dist/storage/PersistedReplicationStream.js.map +1 -1
  28. package/dist/storage/PersistedSyncConfigContent.d.ts +4 -4
  29. package/dist/storage/PersistedSyncConfigContent.js +12 -5
  30. package/dist/storage/PersistedSyncConfigContent.js.map +1 -1
  31. package/dist/storage/StorageEngine.d.ts +4 -0
  32. package/dist/storage/StorageEngine.js +7 -1
  33. package/dist/storage/StorageEngine.js.map +1 -1
  34. package/dist/storage/StorageProvider.d.ts +8 -0
  35. package/dist/storage/SyncConfigParser.d.ts +44 -0
  36. package/dist/storage/SyncConfigParser.js +70 -0
  37. package/dist/storage/SyncConfigParser.js.map +1 -0
  38. package/dist/storage/SyncRulesBucketStorage.d.ts +3 -1
  39. package/dist/storage/SyncRulesBucketStorage.js.map +1 -1
  40. package/dist/storage/implementation/IncrementalReprocessingCompatibility.js +9 -5
  41. package/dist/storage/implementation/IncrementalReprocessingCompatibility.js.map +1 -1
  42. package/dist/storage/storage-index.d.ts +1 -0
  43. package/dist/storage/storage-index.js +1 -0
  44. package/dist/storage/storage-index.js.map +1 -1
  45. package/dist/sync/BucketChecksumState.d.ts +1 -1
  46. package/dist/sync/BucketChecksumState.js +5 -4
  47. package/dist/sync/BucketChecksumState.js.map +1 -1
  48. package/dist/sync/util.d.ts +1 -1
  49. package/dist/sync/util.js +3 -0
  50. package/dist/sync/util.js.map +1 -1
  51. package/dist/system/ServiceContext.d.ts +20 -0
  52. package/dist/system/ServiceContext.js +29 -1
  53. package/dist/system/ServiceContext.js.map +1 -1
  54. package/dist/util/param-logging.d.ts +5 -2
  55. package/dist/util/param-logging.js +17 -9
  56. package/dist/util/param-logging.js.map +1 -1
  57. package/dist/util/protocol-types.d.ts +7 -7
  58. package/dist/util/protocol-types.js +3 -3
  59. package/package.json +4 -4
  60. package/src/api/diagnostics.ts +6 -2
  61. package/src/entry/commands/compact-action.ts +1 -1
  62. package/src/entry/commands/config-command.ts +1 -1
  63. package/src/migrations/PowerSyncMigrationManager.ts +2 -1
  64. package/src/replication/AbstractReplicator.ts +8 -4
  65. package/src/replication/ReplicationModule.ts +0 -10
  66. package/src/routes/endpoints/admin.ts +15 -17
  67. package/src/routes/endpoints/socket-route.ts +9 -6
  68. package/src/routes/endpoints/sync-rules.ts +19 -12
  69. package/src/storage/BucketStorageFactory.ts +33 -6
  70. package/src/storage/PersistedReplicationStream.ts +2 -1
  71. package/src/storage/PersistedSyncConfigContent.ts +16 -8
  72. package/src/storage/StorageEngine.ts +10 -1
  73. package/src/storage/StorageProvider.ts +8 -0
  74. package/src/storage/SyncConfigParser.ts +121 -0
  75. package/src/storage/SyncRulesBucketStorage.ts +3 -1
  76. package/src/storage/implementation/IncrementalReprocessingCompatibility.ts +14 -5
  77. package/src/storage/storage-index.ts +1 -0
  78. package/src/sync/BucketChecksumState.ts +5 -4
  79. package/src/sync/util.ts +4 -1
  80. package/src/system/ServiceContext.ts +47 -1
  81. package/src/util/param-logging.ts +21 -14
  82. package/src/util/protocol-types.ts +5 -5
  83. package/test/src/PersistedSyncConfigContent.test.ts +3 -1
  84. package/test/src/SyncConfigParser.test.ts +330 -0
  85. package/test/src/broadcast_iterable.test.ts +26 -8
  86. package/test/src/diagnostics.test.ts +23 -0
  87. package/test/src/routes/admin.test.ts +22 -0
  88. package/test/src/routes/mocks.ts +2 -0
  89. package/test/src/sync/BucketChecksumState.test.ts +195 -6
  90. package/test/src/sync/util.test.ts +19 -0
  91. package/test/src/util/param-logging.test.ts +59 -0
  92. package/tsconfig.tsbuildinfo +1 -1
@@ -1,7 +1,7 @@
1
1
  import { ErrorCode, errors, router, schema } from '@powersync/lib-services-framework';
2
- import { SqlSyncRules, SyncRulesErrors } from '@powersync/service-sync-rules';
2
+ import { SyncRulesErrors } from '@powersync/service-sync-rules';
3
3
  import * as t from 'ts-codec';
4
- import { updateSyncRulesFromConfig, updateSyncRulesFromYaml } from '../../storage/BucketStorageFactory.js';
4
+ import { updateSyncRulesFromConfig } from '../../storage/BucketStorageFactory.js';
5
5
  import { authApi } from '../auth.js';
6
6
  import { routeDefinition } from '../router.js';
7
7
  const DeploySyncRulesRequest = t.object({
@@ -46,7 +46,7 @@ export const deploySyncRules = routeDefinition({
46
46
  let syncConfig;
47
47
  try {
48
48
  const apiHandler = service_context.routerEngine.getAPI();
49
- syncConfig = SqlSyncRules.fromYaml(content, {
49
+ syncConfig = service_context.syncConfigParser.parseContent(content, {
50
50
  ...apiHandler.getParseSyncRulesOptions(),
51
51
  // We don't do any schema-level validation at this point
52
52
  schema: undefined
@@ -80,7 +80,7 @@ export const validateSyncRules = routeDefinition({
80
80
  const content = payload.params.content;
81
81
  const { service_context } = payload.context;
82
82
  const apiHandler = service_context.routerEngine.getAPI();
83
- const info = await debugSyncRules(apiHandler, content);
83
+ const info = await debugSyncRules(apiHandler, content, service_context.syncConfigParser);
84
84
  return replyPrettyJson(info);
85
85
  }
86
86
  });
@@ -101,9 +101,11 @@ export const currentSyncRules = routeDefinition({
101
101
  }
102
102
  const sync_rules = active.content;
103
103
  const apiHandler = service_context.routerEngine.getAPI();
104
- const info = await debugSyncRules(apiHandler, sync_rules.sync_rules_content);
104
+ const info = await debugSyncRules(apiHandler, sync_rules.sync_rules_content, service_context.syncConfigParser);
105
105
  const next = await activeBucketStorage.getDeployingSyncConfig();
106
- const next_info = next ? await debugSyncRules(apiHandler, next.content.sync_rules_content) : null;
106
+ const next_info = next
107
+ ? await debugSyncRules(apiHandler, next.content.sync_rules_content, service_context.syncConfigParser)
108
+ : null;
107
109
  const response = {
108
110
  current: {
109
111
  slot_name: sync_rules.replicationStreamName,
@@ -146,10 +148,14 @@ export const reprocessSyncRules = routeDefinition({
146
148
  });
147
149
  }
148
150
  const sync_rules = active.content;
149
- const new_rules = await activeBucketStorage.updateSyncRules(updateSyncRulesFromYaml(sync_rules.sync_rules_content, {
151
+ const parsed = payload.context.service_context.syncConfigParser.parseContent(sync_rules.sync_rules_content, {
152
+ ...payload.context.service_context.routerEngine.getAPI().getParseSyncRulesOptions(),
153
+ schema: undefined,
150
154
  // This sync config already passed validation. But if the rules are not valid anymore due
151
155
  // to a service change, we do want to report the error here.
152
- validate: true,
156
+ throwOnError: true
157
+ });
158
+ const new_rules = await activeBucketStorage.updateSyncRules(updateSyncRulesFromConfig(parsed, {
153
159
  version_label: sync_rules.version_label,
154
160
  forceNewReplicationStream: true
155
161
  }));
@@ -166,9 +172,9 @@ function replyPrettyJson(payload) {
166
172
  headers: { 'Content-Type': 'application/json' }
167
173
  });
168
174
  }
169
- async function debugSyncRules(apiHandler, sync_rules) {
175
+ async function debugSyncRules(apiHandler, sync_rules, syncConfigParser) {
170
176
  try {
171
- const rules = SqlSyncRules.fromYaml(sync_rules, {
177
+ const rules = syncConfigParser.parseContent(sync_rules, {
172
178
  ...apiHandler.getParseSyncRulesOptions(),
173
179
  // No schema-based validation at this point
174
180
  schema: undefined
@@ -1 +1 @@
1
- {"version":3,"file":"sync-rules.js","sourceRoot":"","sources":["../../../src/routes/endpoints/sync-rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-rules.js","sourceRoot":"","sources":["../../../src/routes/endpoints/sync-rules.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,14 @@ import { PersistedSyncConfigContent } from './PersistedSyncConfigContent.js';
6
6
  import { ReplicationEventPayload } from './ReplicationEventPayload.js';
7
7
  import { ReplicationLock } from './ReplicationLock.js';
8
8
  import { ReportStorage } from './ReportStorage.js';
9
+ import { SyncConfigParser } from './SyncConfigParser.js';
9
10
  import { SyncRulesBucketStorage } from './SyncRulesBucketStorage.js';
11
+ export interface BucketStorageFactoryOptions {
12
+ /**
13
+ * Service-wide parser assembled before storage startup.
14
+ */
15
+ syncConfigParser: SyncConfigParser;
16
+ }
10
17
  /**
11
18
  * Represents a configured storage provider.
12
19
  *
@@ -16,6 +23,11 @@ import { SyncRulesBucketStorage } from './SyncRulesBucketStorage.js';
16
23
  * Storage APIs for a specific replication stream are provided by the `SyncRulesBucketStorage` instances.
17
24
  */
18
25
  export declare abstract class BucketStorageFactory extends BaseObserver<BucketStorageFactoryListener> implements AsyncDisposable {
26
+ readonly syncConfigParser: SyncConfigParser;
27
+ /**
28
+ * Creates a storage factory using the service-wide parser assembled before storage startup.
29
+ */
30
+ constructor(options: BucketStorageFactoryOptions);
19
31
  /**
20
32
  * Update sync config from configuration, if changed.
21
33
  */
@@ -71,9 +83,11 @@ export declare abstract class BucketStorageFactory extends BaseObserver<BucketSt
71
83
  * Get a unique identifier for the system used for storage.
72
84
  */
73
85
  abstract getSystemIdentifier(): Promise<BucketStorageSystemIdentifier>;
74
- abstract [Symbol.asyncDispose](): PromiseLike<void>;
86
+ [Symbol.asyncDispose](): Promise<void>;
75
87
  }
76
88
  export interface BucketStorageFactoryListener {
89
+ /** Release owned resources before the factory closes its database connections. */
90
+ beforeDispose: () => Promise<void>;
77
91
  syncStorageCreated: (storage: SyncRulesBucketStorage) => void;
78
92
  replicationEvent: (event: ReplicationEventPayload) => void;
79
93
  }
@@ -122,7 +136,7 @@ export interface UpdateSyncRulesOptions {
122
136
  config: {
123
137
  yaml: string;
124
138
  /**
125
- * The serialized sync plan for the sync configuration, or `null` for configurations not using the sync stream
139
+ * The serialized sync plan for the sync configuration, or `null` for configurations not using the Sync Streams
126
140
  * compiler.
127
141
  */
128
142
  plan: SerializedSyncPlan | null;
@@ -164,6 +178,11 @@ export declare function updateSyncRulesFromYaml(content: string, options?: Omit<
164
178
  }): UpdateSyncRulesOptions;
165
179
  export declare function updateSyncRulesFromConfig(parsed: SyncConfigWithErrors, options?: Omit<UpdateSyncRulesOptions, 'config'>): UpdateSyncRulesOptions;
166
180
  export interface GetIntanceOptions {
181
+ /**
182
+ * The job lease, including a lease acquired during initial configuration.
183
+ * Required for writing; optional for reading.
184
+ */
185
+ replicationLock?: ReplicationLock;
167
186
  /**
168
187
  * Set to true to skip trigger any events for creating the instance.
169
188
  *
@@ -1,6 +1,7 @@
1
1
  import { BaseObserver, logger } from '@powersync/lib-services-framework';
2
- import { PrecompiledSyncConfig, serializeSyncPlan, SqlSyncRules } from '@powersync/service-sync-rules';
2
+ import { PrecompiledSyncConfig, serializeSyncPlan } from '@powersync/service-sync-rules';
3
3
  import { syncConfigYamlErrorToReplicationError } from '../util/errors.js';
4
+ import { SqlSyncConfigParser } from './SyncConfigParser.js';
4
5
  /**
5
6
  * Represents a configured storage provider.
6
7
  *
@@ -10,6 +11,14 @@ import { syncConfigYamlErrorToReplicationError } from '../util/errors.js';
10
11
  * Storage APIs for a specific replication stream are provided by the `SyncRulesBucketStorage` instances.
11
12
  */
12
13
  export class BucketStorageFactory extends BaseObserver {
14
+ syncConfigParser;
15
+ /**
16
+ * Creates a storage factory using the service-wide parser assembled before storage startup.
17
+ */
18
+ constructor(options) {
19
+ super();
20
+ this.syncConfigParser = options.syncConfigParser;
21
+ }
13
22
  /**
14
23
  * Update sync config from configuration, if changed.
15
24
  */
@@ -33,15 +42,19 @@ export class BucketStorageFactory extends BaseObserver {
33
42
  return { updated: true, persisted_sync_rules, lock: persisted_sync_rules.current_lock ?? undefined };
34
43
  }
35
44
  }
45
+ async [Symbol.asyncDispose]() {
46
+ await this.iterateAsyncListeners(async (listener) => listener.beforeDispose?.());
47
+ }
36
48
  }
37
49
  export function updateSyncRulesFromYaml(content, options) {
38
- const config = SqlSyncRules.fromYaml(content, {
50
+ const { validate, ...updateOptions } = options ?? {};
51
+ const config = new SqlSyncConfigParser().parseContent(content, {
39
52
  // No schema-based validation at this point
40
53
  schema: undefined,
41
54
  defaultSchema: options?.defaultSchema ?? 'not_applicable', // Not needed for validation
42
- throwOnError: options?.validate ?? false
55
+ throwOnError: validate ?? false
43
56
  });
44
- return updateSyncRulesFromConfig(config, options);
57
+ return updateSyncRulesFromConfig(config, updateOptions);
45
58
  }
46
59
  export function updateSyncRulesFromConfig(parsed, options) {
47
60
  let plan = null;
@@ -1 +1 @@
1
- {"version":3,"file":"BucketStorageFactory.js","sourceRoot":"","sources":["../../src/storage/BucketStorageFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BucketStorageFactory.js","sourceRoot":"","sources":["../../src/storage/BucketStorageFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EACL,qBAAqB,EAGrB,iBAAiB,EAElB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,qCAAqC,EAAE,MAAM,mBAAmB,CAAC;AAM1E,OAAO,EAAE,mBAAmB,EAAoB,MAAM,uBAAuB,CAAC;AAU9E;;;;;;;GAOG;AACH,MAAM,OAAgB,oBACpB,SAAQ,YAA0C;IAGzC,gBAAgB,CAAmB;IAE5C;;OAEG;IACH,YAAY,OAAoC;QAC9C,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,OAA+B;QAE/B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEhD,IACE,SAAS,EAAE,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI;YAC5D,SAAS,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,EACxD,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;aAAM,IACL,SAAS,IAAI,IAAI;YACjB,MAAM,EAAE,OAAO,CAAC,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI;YACzD,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,EACrD,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACnC,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,CAAC,YAAY,IAAI,SAAS,EAAE,CAAC;QACvG,CAAC;IACH,CAAC;IA8DD,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QACzB,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACnF,CAAC;CACF;AAuGD,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,OAAyE;IAEzE,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE;QAC7D,2CAA2C;QAC3C,MAAM,EAAE,SAAS;QACjB,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,gBAAgB,EAAE,4BAA4B;QACvF,YAAY,EAAE,QAAQ,IAAI,KAAK;KAChC,CAAC,CAAC;IAEH,OAAO,yBAAyB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,MAA4B,EAC5B,OAAgD;IAEhD,IAAI,IAAI,GAA8B,IAAI,CAAC;IAC3C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAClC,IAAI,MAAM,YAAY,qBAAqB,EAAE,CAAC;QAC5C,MAAM,gBAAgB,GAA6B,EAAE,CAAC;QACtD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/E,CAAC;QAED,IAAI,GAAG;YACL,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE;YAC/C,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;YACpC,+GAA+G;YAC/G,gBAAgB;YAChB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,qCAAqC,CAAC,CAAC,CAAC,CAAC;SACpE,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC;AACxE,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import { Logger } from 'winston';
2
2
  import { SyncRuleState } from './BucketStorage.js';
3
3
  import type { ParsedSyncConfigSet } from './ParsedSyncConfigSet.js';
4
- import type { ParseSyncConfigOptions, PersistedSyncConfigContent } from './PersistedSyncConfigContent.js';
4
+ import type { PersistedSyncConfigContent } from './PersistedSyncConfigContent.js';
5
5
  import { ReplicationLock } from './ReplicationLock.js';
6
6
  import { StorageVersionConfig } from './StorageVersionConfig.js';
7
+ import type { ParseSyncConfigOptions } from './SyncConfigParser.js';
7
8
  export declare abstract class PersistedReplicationStream implements PersistedReplicationStreamData {
8
9
  readonly replicationStreamId: number;
9
10
  readonly replicationJobId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"PersistedReplicationStream.js","sourceRoot":"","sources":["../../src/storage/PersistedReplicationStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAMrG,OAAO,EAAE,sBAAsB,EAAwB,MAAM,2BAA2B,CAAC;AAEzF,MAAM,OAAgB,0BAA0B;IACrC,mBAAmB,CAAS;IAC5B,gBAAgB,CAAS;IACzB,qBAAqB,CAAS;IAC9B,KAAK,CAAgB;IACrB,cAAc,CAAS;IACvB,MAAM,CAAS;IAKxB,YAAY,IAAoC;QAC9C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACpD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAClF,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,gBAAgB;QACd,MAAM,aAAa,GAAG,sBAAsB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClE,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,YAAY,CACpB,SAAS,CAAC,WAAW,EACrB,+BAA+B,IAAI,CAAC,cAAc,2BAA2B,IAAI,CAAC,mBAAmB,EAAE,CACxG,CAAC;QACJ,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;CAKF"}
1
+ {"version":3,"file":"PersistedReplicationStream.js","sourceRoot":"","sources":["../../src/storage/PersistedReplicationStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAMrG,OAAO,EAAE,sBAAsB,EAAwB,MAAM,2BAA2B,CAAC;AAGzF,MAAM,OAAgB,0BAA0B;IACrC,mBAAmB,CAAS;IAC5B,gBAAgB,CAAS;IACzB,qBAAqB,CAAS;IAC9B,KAAK,CAAgB;IACrB,cAAc,CAAS;IACvB,MAAM,CAAS;IAKxB,YAAY,IAAoC;QAC9C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACpD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAClF,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,gBAAgB;QACd,MAAM,aAAa,GAAG,sBAAsB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClE,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,YAAY,CACpB,SAAS,CAAC,WAAW,EACrB,+BAA+B,IAAI,CAAC,cAAc,2BAA2B,IAAI,CAAC,mBAAmB,EAAE,CACxG,CAAC;QACJ,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;CAKF"}
@@ -5,11 +5,13 @@ import { SerializedSyncPlan, UpdateSyncRulesOptions } from './BucketStorageFacto
5
5
  import { ParsedSyncConfigSet } from './ParsedSyncConfigSet.js';
6
6
  import { PersistedSyncConfigStatus } from './PersistedSyncConfigStatus.js';
7
7
  import { StorageVersionConfig } from './StorageVersionConfig.js';
8
+ import { ParseSyncConfigOptions, SyncConfigParser } from './SyncConfigParser.js';
8
9
  export interface ParsePersistedSyncConfigContentOptions {
9
10
  content: string;
10
11
  compiledPlan: SerializedSyncPlan | null;
11
12
  storageVersion: number;
12
13
  parseOptions: ParseSyncConfigOptions;
14
+ syncConfigParser: SyncConfigParser;
13
15
  }
14
16
  export declare function parsePersistedSyncConfigContent(options: ParsePersistedSyncConfigContentOptions): SyncConfigWithErrors;
15
17
  /**
@@ -20,6 +22,7 @@ export declare function parsePersistedSyncConfigContent(options: ParsePersistedS
20
22
  * lifecycle concerns such as locking and termination.
21
23
  */
22
24
  export declare abstract class PersistedSyncConfigContent implements PersistedSyncConfigContentData {
25
+ private readonly syncConfigParser;
23
26
  readonly replicationStreamId: number;
24
27
  readonly sync_rules_content: string;
25
28
  readonly compiled_plan: SerializedSyncPlan | null;
@@ -29,7 +32,7 @@ export declare abstract class PersistedSyncConfigContent implements PersistedSyn
29
32
  readonly syncConfigId: PersistedSyncConfigId | null;
30
33
  readonly syncConfigState: SyncRuleState;
31
34
  readonly version_label: string | undefined;
32
- constructor(data: PersistedSyncConfigContentData);
35
+ constructor(data: PersistedSyncConfigContentData, syncConfigParser: SyncConfigParser);
33
36
  /**
34
37
  * Load the storage config.
35
38
  *
@@ -60,6 +63,3 @@ export interface PersistedSyncConfigContentData {
60
63
  readonly version_label?: string;
61
64
  }
62
65
  export type PersistedSyncConfigId = string;
63
- export interface ParseSyncConfigOptions {
64
- defaultSchema: string;
65
- }
@@ -1,12 +1,12 @@
1
1
  import { logger as defaultLogger, ErrorCode, ServiceError } from '@powersync/lib-services-framework';
2
- import { CompatibilityContext, CompatibilityOption, compileEventDefinitions, DEFAULT_HYDRATION_STATE, deserializeSyncPlan, nodeSqlite, PrecompiledSyncConfig, SqlSyncRules, versionedHydrationState, YamlError } from '@powersync/service-sync-rules';
2
+ import { CompatibilityContext, CompatibilityOption, compileEventDefinitions, DEFAULT_HYDRATION_STATE, deserializeSyncPlan, nodeSqlite, PrecompiledSyncConfig, versionedHydrationState, YamlError } from '@powersync/service-sync-rules';
3
3
  import * as sqlite from 'node:sqlite';
4
4
  import { STORAGE_VERSION_CONFIG } from './StorageVersionConfig.js';
5
5
  export function parsePersistedSyncConfigContent(options) {
6
- const { content, compiledPlan, storageVersion, parseOptions } = options;
6
+ const { content, compiledPlan, storageVersion, parseOptions, syncConfigParser } = options;
7
7
  if (compiledPlan == null) {
8
8
  // Fallback: Only parse from YAML if no compiled plan is available.
9
- return SqlSyncRules.fromYaml(content, parseOptions);
9
+ return syncConfigParser.parseContent(content, parseOptions);
10
10
  }
11
11
  const plan = deserializeSyncPlan(compiledPlan.plan);
12
12
  const compatibility = CompatibilityContext.deserialize(compiledPlan.compatibility);
@@ -35,6 +35,10 @@ export function parsePersistedSyncConfigContent(options) {
35
35
  // Note: If the original content did not define a storage version, this will still set the storage version.
36
36
  // This means asUpdateOptions will not change the storage version, even if the default changes.
37
37
  precompiled.storageVersion = storageVersion;
38
+ errors.push(...syncConfigParser.validatePersisted({
39
+ config: precompiled,
40
+ context: { defaultSchema: parseOptions.defaultSchema }
41
+ }));
38
42
  if (compiledPlan.errors) {
39
43
  for (const error of compiledPlan.errors) {
40
44
  const location = error.location && {
@@ -56,6 +60,7 @@ export function parsePersistedSyncConfigContent(options) {
56
60
  * lifecycle concerns such as locking and termination.
57
61
  */
58
62
  export class PersistedSyncConfigContent {
63
+ syncConfigParser;
59
64
  replicationStreamId;
60
65
  sync_rules_content;
61
66
  compiled_plan;
@@ -65,7 +70,8 @@ export class PersistedSyncConfigContent {
65
70
  syncConfigId;
66
71
  syncConfigState;
67
72
  version_label;
68
- constructor(data) {
73
+ constructor(data, syncConfigParser) {
74
+ this.syncConfigParser = syncConfigParser;
69
75
  this.replicationStreamId = data.replicationStreamId;
70
76
  this.sync_rules_content = data.sync_rules_content;
71
77
  this.compiled_plan = data.compiled_plan;
@@ -99,7 +105,8 @@ export class PersistedSyncConfigContent {
99
105
  content: this.sync_rules_content,
100
106
  compiledPlan: this.compiled_plan,
101
107
  storageVersion: this.storageVersion,
102
- parseOptions: options
108
+ parseOptions: options,
109
+ syncConfigParser: this.syncConfigParser
103
110
  });
104
111
  }
105
112
  parsed(options) {
@@ -1 +1 @@
1
- {"version":3,"file":"PersistedSyncConfigContent.js","sourceRoot":"","sources":["../../src/storage/PersistedSyncConfigContent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PersistedSyncConfigContent.js","sourceRoot":"","sources":["../../src/storage/PersistedSyncConfigContent.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,10 @@ import { BaseObserver, ServiceError } from '@powersync/lib-services-framework';
2
2
  import { ResolvedPowerSyncConfig } from '../util/util-index.js';
3
3
  import { BucketStorageFactory } from './BucketStorageFactory.js';
4
4
  import { ActiveStorage, StorageProvider } from './StorageProvider.js';
5
+ import { SyncConfigParser } from './SyncConfigParser.js';
5
6
  export type StorageEngineOptions = {
6
7
  configuration: ResolvedPowerSyncConfig;
8
+ syncConfigParser: SyncConfigParser;
7
9
  };
8
10
  export interface StorageEngineListener {
9
11
  storageActivated: (storage: BucketStorageFactory) => void;
@@ -12,10 +14,12 @@ export interface StorageEngineListener {
12
14
  export declare class StorageEngine extends BaseObserver<StorageEngineListener> {
13
15
  private options;
14
16
  private storageProviders;
17
+ private startupStarted;
15
18
  private currentActiveStorage;
16
19
  constructor(options: StorageEngineOptions);
17
20
  get activeBucketStorage(): BucketStorageFactory;
18
21
  get activeStorage(): ActiveStorage;
22
+ get started(): boolean;
19
23
  /**
20
24
  * Register a provider which generates a {@link BucketStorageFactory}
21
25
  * given the matching config specified in the loaded {@link ResolvedPowerSyncConfig}
@@ -3,6 +3,7 @@ export class StorageEngine extends BaseObserver {
3
3
  options;
4
4
  // TODO: This will need to revisited when we actually support multiple storage providers.
5
5
  storageProviders = new Map();
6
+ startupStarted = false;
6
7
  currentActiveStorage = null;
7
8
  constructor(options) {
8
9
  super();
@@ -17,6 +18,9 @@ export class StorageEngine extends BaseObserver {
17
18
  }
18
19
  return this.currentActiveStorage;
19
20
  }
21
+ get started() {
22
+ return this.startupStarted;
23
+ }
20
24
  /**
21
25
  * Register a provider which generates a {@link BucketStorageFactory}
22
26
  * given the matching config specified in the loaded {@link ResolvedPowerSyncConfig}
@@ -25,10 +29,12 @@ export class StorageEngine extends BaseObserver {
25
29
  this.storageProviders.set(provider.type, provider);
26
30
  }
27
31
  async start() {
32
+ this.startupStarted = true;
28
33
  logger.info('Starting Storage Engine...');
29
34
  const { configuration } = this.options;
30
35
  this.currentActiveStorage = await this.storageProviders.get(configuration.storage.type).getStorage({
31
- resolvedConfig: configuration
36
+ resolvedConfig: configuration,
37
+ syncConfigParser: this.options.syncConfigParser
32
38
  });
33
39
  this.iterateListeners((cb) => cb.storageActivated?.(this.activeBucketStorage));
34
40
  this.currentActiveStorage.onFatalError?.((error) => {
@@ -1 +1 @@
1
- {"version":3,"file":"StorageEngine.js","sourceRoot":"","sources":["../../src/storage/StorageEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAgB,MAAM,mCAAmC,CAAC;AAcvF,MAAM,OAAO,aAAc,SAAQ,YAAmC;IAKhD;IAJpB,yFAAyF;IACjF,gBAAgB,GAAiC,IAAI,GAAG,EAAE,CAAC;IAC3D,oBAAoB,GAAyB,IAAI,CAAC;IAE1D,YAAoB,OAA6B;QAC/C,KAAK,EAAE,CAAC;QADU,YAAO,GAAP,OAAO,CAAsB;IAEjD,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IACpC,CAAC;IAED,IAAI,aAAa;QACf,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,QAAyB;QACxC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1C,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,oBAAoB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAE,CAAC,UAAU,CAAC;YAClG,cAAc,EAAE,aAAa;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE;YACjD,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,mCAAmC,aAAa,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9E,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ;QACnB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,MAAM,IAAI,CAAC,oBAAoB,EAAE,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACxD,CAAC;CACF"}
1
+ {"version":3,"file":"StorageEngine.js","sourceRoot":"","sources":["../../src/storage/StorageEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAgB,MAAM,mCAAmC,CAAC;AAgBvF,MAAM,OAAO,aAAc,SAAQ,YAAmC;IAMhD;IALpB,yFAAyF;IACjF,gBAAgB,GAAiC,IAAI,GAAG,EAAE,CAAC;IAC3D,cAAc,GAAG,KAAK,CAAC;IACvB,oBAAoB,GAAyB,IAAI,CAAC;IAE1D,YAAoB,OAA6B;QAC/C,KAAK,EAAE,CAAC;QADU,YAAO,GAAP,OAAO,CAAsB;IAEjD,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;IACpC,CAAC;IAED,IAAI,aAAa;QACf,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,QAAyB;QACxC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAEM,KAAK,CAAC,KAAK;QAChB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1C,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACvC,IAAI,CAAC,oBAAoB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAE,CAAC,UAAU,CAAC;YAClG,cAAc,EAAE,aAAa;YAC7B,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;SAChD,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE;YACjD,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,mCAAmC,aAAa,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9E,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ;QACnB,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,MAAM,IAAI,CAAC,oBAAoB,EAAE,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACxD,CAAC;CACF"}
@@ -2,6 +2,7 @@ import { ServiceError } from '@powersync/lib-services-framework';
2
2
  import * as util from '../util/util-index.js';
3
3
  import { BucketStorageFactory } from './BucketStorageFactory.js';
4
4
  import { ReportStorage } from './ReportStorage.js';
5
+ import { SyncConfigParser } from './SyncConfigParser.js';
5
6
  export interface ActiveStorage {
6
7
  storage: BucketStorageFactory;
7
8
  reportStorage: ReportStorage;
@@ -14,6 +15,10 @@ export interface ActiveStorage {
14
15
  }
15
16
  export interface GetStorageOptions {
16
17
  resolvedConfig: util.ResolvedPowerSyncConfig;
18
+ /**
19
+ * Service-wide parser containing every extension registered during module initialization.
20
+ */
21
+ syncConfigParser: SyncConfigParser;
17
22
  }
18
23
  /**
19
24
  * Represents a provider that can create a storage instance for a specific storage type from configuration.
@@ -24,5 +29,8 @@ export interface StorageProvider {
24
29
  * The type should match the `type` field in the config.
25
30
  */
26
31
  type: string;
32
+ /**
33
+ * Creates active storage during storage-engine startup using the fully assembled service parser.
34
+ */
27
35
  getStorage(options: GetStorageOptions): Promise<ActiveStorage>;
28
36
  }
@@ -0,0 +1,44 @@
1
+ import { AdditionalSyncConfigParser, JsonObject, SyncConfig, SyncConfigWithErrors, SyncRulesOptions, YamlError } from '@powersync/service-sync-rules';
2
+ export type ParseSyncConfigOptions = Omit<SyncRulesOptions, 'parsers' | 'schemaValidator'>;
3
+ /**
4
+ * Shared by service routes, deployment, replication and persisted storage; only initialization can register hooks.
5
+ */
6
+ export interface SyncConfigParser {
7
+ /**
8
+ * A JSON schema which can be used to validate the format of a supplied sync config.
9
+ */
10
+ readonly jsonSchema: JsonObject;
11
+ /**
12
+ * Parses string content.
13
+ *
14
+ * @returns The parsed {@link SyncConfigWithErrors}
15
+ */
16
+ parseContent(content: string, options: ParseSyncConfigOptions): SyncConfigWithErrors;
17
+ /**
18
+ * Validates a persisted/parsed sync config.
19
+ *
20
+ * @returns Any errors detected.
21
+ */
22
+ validatePersisted(options: {
23
+ config: SyncConfig;
24
+ context: {
25
+ defaultSchema: string;
26
+ };
27
+ }): YamlError[];
28
+ }
29
+ export declare class SqlSyncConfigParser implements SyncConfigParser {
30
+ #private;
31
+ constructor(parsers?: readonly AdditionalSyncConfigParser[]);
32
+ get jsonSchema(): JsonObject;
33
+ /**
34
+ * Validate the candidate composition before mutating the registry.
35
+ */
36
+ registerParser(parser: AdditionalSyncConfigParser): void;
37
+ parseContent(content: string, options: ParseSyncConfigOptions): SyncConfigWithErrors;
38
+ validatePersisted({ config, context }: {
39
+ config: SyncConfig;
40
+ context: {
41
+ defaultSchema: string;
42
+ };
43
+ }): YamlError[];
44
+ }
@@ -0,0 +1,70 @@
1
+ import { compileSyncRulesSchemaValidator, createSyncRulesSchema, PrecompiledSyncConfig, SqlSyncRules, SyncRulesErrors, validateAdditionalSyncConfigParsers, YamlError } from '@powersync/service-sync-rules';
2
+ export class SqlSyncConfigParser {
3
+ #parsers;
4
+ #jsonSchema;
5
+ #schemaValidator;
6
+ constructor(parsers = []) {
7
+ validateAdditionalSyncConfigParsers(parsers);
8
+ this.#parsers = [...parsers];
9
+ this.#jsonSchema = createSyncRulesSchema(parsers);
10
+ this.#schemaValidator = compileSyncRulesSchemaValidator(this.#jsonSchema);
11
+ }
12
+ get jsonSchema() {
13
+ // Tooling can customize its copy without changing validation for the running service.
14
+ return structuredClone(this.#jsonSchema);
15
+ }
16
+ /**
17
+ * Validate the candidate composition before mutating the registry.
18
+ */
19
+ registerParser(parser) {
20
+ const parsers = [...this.#parsers, parser];
21
+ validateAdditionalSyncConfigParsers(parsers);
22
+ const schema = createSyncRulesSchema(parsers);
23
+ const validator = compileSyncRulesSchemaValidator(schema);
24
+ this.#parsers.push(parser);
25
+ this.#jsonSchema = schema;
26
+ this.#schemaValidator = validator;
27
+ }
28
+ parseContent(content, options) {
29
+ return SqlSyncRules.fromYaml(content, {
30
+ ...options,
31
+ parsers: this.#parsers,
32
+ schemaValidator: this.#schemaValidator
33
+ });
34
+ }
35
+ validatePersisted({ config, context }) {
36
+ /**
37
+ * Ensure that all modules which created a persisted SyncConfig
38
+ * are currently loaded.
39
+ * This prevents a case for a SyncConfig with missing external modules to be loaded.
40
+ */
41
+ const requiredIds = new Set(config instanceof PrecompiledSyncConfig ? Object.keys(config.plan.moduleData ?? {}) : []);
42
+ const registeredIds = new Set(this.#parsers.map((parser) => parser.id));
43
+ const missingIds = [...requiredIds].filter((id) => !registeredIds.has(id));
44
+ if (missingIds.length != 0) {
45
+ throw new Error(`Missing required sync config parsers: ${missingIds.join(', ')}`);
46
+ }
47
+ const errors = [];
48
+ const reportDiagnostic = (diagnostic) => {
49
+ const location = diagnostic.location;
50
+ const error = new YamlError(new Error(diagnostic.message), location && {
51
+ start: location.start_offset,
52
+ end: location.end_offset
53
+ });
54
+ error.type = diagnostic.level;
55
+ errors.push(error);
56
+ };
57
+ for (const parser of this.#parsers) {
58
+ if (!requiredIds.has(parser.id))
59
+ continue;
60
+ /**
61
+ * This allows additional validation of module specific semantics
62
+ */
63
+ parser.validatePersisted?.({ config, context: { ...context, reportDiagnostic } });
64
+ }
65
+ if (errors.some((error) => error.type == 'fatal'))
66
+ throw new SyncRulesErrors(errors);
67
+ return errors;
68
+ }
69
+ }
70
+ //# sourceMappingURL=SyncConfigParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncConfigParser.js","sourceRoot":"","sources":["../../src/storage/SyncConfigParser.ts"],"names":[],"mappings":"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"}
@@ -6,11 +6,11 @@ import * as util from '../util/util-index.js';
6
6
  import { BucketStorageBatch, FlushedResult, SaveUpdate } from './BucketStorageBatch.js';
7
7
  import { BucketStorageFactory } from './BucketStorageFactory.js';
8
8
  import { ParsedSyncConfigSet } from './ParsedSyncConfigSet.js';
9
- import { ParseSyncConfigOptions } from './PersistedSyncConfigContent.js';
10
9
  import { SourceEntityDescriptor } from './SourceEntity.js';
11
10
  import { SourceTable } from './SourceTable.js';
12
11
  import { SourceTableCandidateReconciler } from './SourceTableReconciler.js';
13
12
  import { StorageVersionConfig } from './StorageVersionConfig.js';
13
+ import { ParseSyncConfigOptions } from './SyncConfigParser.js';
14
14
  import { SyncStorageWriteCheckpointAPI } from './WriteCheckpointAPI.js';
15
15
  /**
16
16
  * Storage for a specific replication stream.
@@ -328,6 +328,8 @@ export interface CompactOptions {
328
328
  logger?: Logger;
329
329
  }
330
330
  export interface CompactInitialReplicationOptions {
331
+ /** Internal/testing use: bypass the new-chunk threshold in MongoDB V3/V4 storage. */
332
+ forceChunkCompaction?: boolean;
331
333
  /**
332
334
  * Compact data up to this op id.
333
335
  *
@@ -1 +1 @@
1
- {"version":3,"file":"SyncRulesBucketStorage.js","sourceRoot":"","sources":["../../src/storage/SyncRulesBucketStorage.ts"],"names":[],"mappings":"AA2eA,MAAM,UAAU,UAAU,CAAC,KAAmD;IAC5E,OAAQ,KAAgC,CAAC,OAAO,KAAK,SAAS,CAAC;AACjE,CAAC;AAiBD;;;;GAIG;AACH,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IAE5C;IACA;IAFX,YACW,KAAa,EACb,SAAyC;QAElD,KAAK,CAAC,yCAAyC,KAAK,GAAG,CAAC,CAAC;QAHhD,UAAK,GAAL,KAAK,CAAQ;QACb,cAAS,GAAT,SAAS,CAAgC;IAGpD,CAAC;CACF;AAqDD,MAAM,CAAC,MAAM,yBAAyB,GAAsB;IAC1D,kBAAkB,EAAE,IAAI,GAAG,EAAU;IACrC,qBAAqB,EAAE,IAAI;IAC3B,uBAAuB,EAAE,IAAI,GAAG,EAAU;IAC1C,0BAA0B,EAAE,IAAI;CACjC,CAAC"}
1
+ {"version":3,"file":"SyncRulesBucketStorage.js","sourceRoot":"","sources":["../../src/storage/SyncRulesBucketStorage.ts"],"names":[],"mappings":"AA6eA,MAAM,UAAU,UAAU,CAAC,KAAmD;IAC5E,OAAQ,KAAgC,CAAC,OAAO,KAAK,SAAS,CAAC;AACjE,CAAC;AAiBD;;;;GAIG;AACH,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IAE5C;IACA;IAFX,YACW,KAAa,EACb,SAAyC;QAElD,KAAK,CAAC,yCAAyC,KAAK,GAAG,CAAC,CAAC;QAHhD,UAAK,GAAL,KAAK,CAAQ;QACb,cAAS,GAAT,SAAS,CAAgC;IAGpD,CAAC;CACF;AAqDD,MAAM,CAAC,MAAM,yBAAyB,GAAsB;IAC1D,kBAAkB,EAAE,IAAI,GAAG,EAAU;IACrC,qBAAqB,EAAE,IAAI;IAC3B,uBAAuB,EAAE,IAAI,GAAG,EAAU;IAC1C,0BAA0B,EAAE,IAAI;CACjC,CAAC"}