@powersync/service-module-postgres 0.0.0-dev-20240918092408 → 0.0.0-dev-20240930091342

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 (32) hide show
  1. package/CHANGELOG.md +7 -6
  2. package/dist/api/PostgresRouteAPIAdapter.js +2 -0
  3. package/dist/api/PostgresRouteAPIAdapter.js.map +1 -1
  4. package/dist/auth/SupabaseKeyCollector.js.map +1 -1
  5. package/dist/module/PostgresModule.js.map +1 -1
  6. package/dist/replication/ConnectionManagerFactory.js.map +1 -1
  7. package/dist/replication/PgManager.js.map +1 -1
  8. package/dist/replication/PgRelation.js.map +1 -1
  9. package/dist/replication/PostgresErrorRateLimiter.d.ts +0 -1
  10. package/dist/replication/PostgresErrorRateLimiter.js.map +1 -1
  11. package/dist/replication/WalStream.d.ts +0 -1
  12. package/dist/replication/WalStream.js.map +1 -1
  13. package/dist/replication/WalStreamReplicationJob.js.map +1 -1
  14. package/dist/replication/WalStreamReplicator.js.map +1 -1
  15. package/dist/replication/replication-utils.js.map +1 -1
  16. package/dist/types/types.js.map +1 -1
  17. package/dist/utils/migration_lib.js.map +1 -1
  18. package/dist/utils/pgwire_utils.js.map +1 -1
  19. package/dist/utils/populate_test_data.js +2 -41
  20. package/dist/utils/populate_test_data.js.map +1 -1
  21. package/dist/utils/populate_test_data_worker.d.ts +1 -0
  22. package/dist/utils/populate_test_data_worker.js +46 -0
  23. package/dist/utils/populate_test_data_worker.js.map +1 -0
  24. package/package.json +9 -9
  25. package/src/api/PostgresRouteAPIAdapter.ts +4 -2
  26. package/src/replication/PgManager.ts +4 -1
  27. package/src/replication/PgRelation.ts +1 -1
  28. package/src/utils/populate_test_data.ts +2 -42
  29. package/src/utils/populate_test_data_worker.ts +50 -0
  30. package/test/src/wal_stream_utils.ts +4 -1
  31. package/tsconfig.tsbuildinfo +1 -1
  32. package/vitest.config.ts +7 -1
@@ -1,5 +1,4 @@
1
- import * as crypto from 'crypto';
2
- import { Worker, isMainThread, parentPort, workerData } from 'node:worker_threads';
1
+ import { Worker } from 'node:worker_threads';
3
2
 
4
3
  import * as pgwire from '@powersync/service-jpgwire';
5
4
 
@@ -12,49 +11,10 @@ export interface PopulateDataOptions {
12
11
  size: number;
13
12
  }
14
13
 
15
- if (isMainThread || parentPort == null) {
16
- // Not a worker - ignore
17
- } else {
18
- try {
19
- const options = workerData as PopulateDataOptions;
20
-
21
- const result = await populateDataInner(options);
22
- parentPort.postMessage(result);
23
- process.exit(0);
24
- } catch (e) {
25
- // This is a bug, not a connection issue
26
- console.error(e);
27
- // Only closes the Worker thread
28
- process.exit(2);
29
- }
30
- }
31
-
32
- async function populateDataInner(options: PopulateDataOptions) {
33
- // Dedicated connection so we can release the memory easily
34
- const initialDb = await pgwire.connectPgWire(options.connection, { type: 'standard' });
35
- const largeDescription = crypto.randomBytes(options.size / 2).toString('hex');
36
- let operation_count = 0;
37
- for (let i = 0; i < options.num_transactions; i++) {
38
- const prefix = `test${i}K`;
39
-
40
- await initialDb.query({
41
- statement: `INSERT INTO test_data(id, description, other) SELECT $1 || i, $2, 'foo' FROM generate_series(1, $3) i`,
42
- params: [
43
- { type: 'varchar', value: prefix },
44
- { type: 'varchar', value: largeDescription },
45
- { type: 'int4', value: options.per_transaction }
46
- ]
47
- });
48
- operation_count += options.per_transaction;
49
- }
50
- await initialDb.end();
51
- return operation_count;
52
- }
53
-
54
14
  export async function populateData(options: PopulateDataOptions) {
55
15
  const WORKER_TIMEOUT = 30_000;
56
16
 
57
- const worker = new Worker(new URL('./populate_test_data.js', import.meta.url), {
17
+ const worker = new Worker(new URL('./populate_test_data_worker.js', import.meta.url), {
58
18
  workerData: options
59
19
  });
60
20
  const timeout = setTimeout(() => {
@@ -0,0 +1,50 @@
1
+ import * as crypto from 'crypto';
2
+ import { isMainThread, parentPort, workerData } from 'node:worker_threads';
3
+
4
+ import * as pgwire from '@powersync/service-jpgwire';
5
+ import type { PopulateDataOptions } from './populate_test_data.js';
6
+
7
+ // This util is actually for tests only, but we need it compiled to JS for the service to work, so it's placed in the service.
8
+
9
+ if (isMainThread || parentPort == null) {
10
+ // Must not be imported - only expected to run in a worker
11
+ throw new Error('Do not import this file');
12
+ } else {
13
+ try {
14
+ const options = workerData as PopulateDataOptions;
15
+ if (options == null) {
16
+ throw new Error('loaded worker without options');
17
+ }
18
+
19
+ const result = await populateDataInner(options);
20
+ parentPort.postMessage(result);
21
+ process.exit(0);
22
+ } catch (e) {
23
+ // This is a bug, not a connection issue
24
+ console.error(e);
25
+ // Only closes the Worker thread
26
+ process.exit(2);
27
+ }
28
+ }
29
+
30
+ async function populateDataInner(options: PopulateDataOptions) {
31
+ // Dedicated connection so we can release the memory easily
32
+ const initialDb = await pgwire.connectPgWire(options.connection, { type: 'standard' });
33
+ const largeDescription = crypto.randomBytes(options.size / 2).toString('hex');
34
+ let operation_count = 0;
35
+ for (let i = 0; i < options.num_transactions; i++) {
36
+ const prefix = `test${i}K`;
37
+
38
+ await initialDb.query({
39
+ statement: `INSERT INTO test_data(id, description, other) SELECT $1 || i, $2, 'foo' FROM generate_series(1, $3) i`,
40
+ params: [
41
+ { type: 'varchar', value: prefix },
42
+ { type: 'varchar', value: largeDescription },
43
+ { type: 'int4', value: options.per_transaction }
44
+ ]
45
+ });
46
+ operation_count += options.per_transaction;
47
+ }
48
+ await initialDb.end();
49
+ return operation_count;
50
+ }
@@ -36,7 +36,10 @@ export class WalStreamTestContext {
36
36
  public storage?: SyncRulesBucketStorage;
37
37
  private replicationConnection?: pgwire.PgConnection;
38
38
 
39
- constructor(public factory: BucketStorageFactory, public connectionManager: PgManager) {}
39
+ constructor(
40
+ public factory: BucketStorageFactory,
41
+ public connectionManager: PgManager
42
+ ) {}
40
43
 
41
44
  async dispose() {
42
45
  this.abortController.abort();