prostgles-server 4.2.647 → 4.2.648

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 (48) hide show
  1. package/.github/workflows/main.yml +1 -1
  2. package/debug/inspect-ui-sync.cjs +24 -0
  3. package/debug/subscription-cleanup-repro.log +662 -0
  4. package/debug/subscription-cleanup-trace.log +7230 -0
  5. package/debug/sync-bigint-DBGeneratedSchema.backup +489 -0
  6. package/debug/sync-bigint-build.log +4 -0
  7. package/debug/sync-bigint-client-build.log +0 -0
  8. package/debug/sync-bigint-lint.log +4 -0
  9. package/debug/sync-bigint-server-build.log +0 -0
  10. package/debug/sync-comment-DBGeneratedSchema.backup +489 -0
  11. package/debug/sync-delay-gate-DBGeneratedSchema.backup +489 -0
  12. package/debug/sync-delay-gate-build.log +0 -0
  13. package/debug/sync-diff-review-test.log +132 -0
  14. package/debug/sync-followup-build.log +4 -0
  15. package/debug/sync-notification-before.log +121 -0
  16. package/debug/sync-trigger-cleanup-before.log +134 -0
  17. package/debug/sync-trigger-fix-e2e.log +1758 -0
  18. package/debug/sync-trigger-fix-npm-test.log +1815 -0
  19. package/debug/sync-trigger-lint.log +4 -0
  20. package/debug/trace-subscription-cleanup.cjs +19 -0
  21. package/debug/ui-sync-database-snapshot.log +8 -0
  22. package/debug/ui-sync-investigation.md +30 -0
  23. package/debug/ui-sync-server-tests.log +553 -0
  24. package/dist/PubSubManager/PubSubManager.d.ts +8 -25
  25. package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
  26. package/dist/PubSubManager/PubSubManager.js +27 -23
  27. package/dist/PubSubManager/PubSubManager.js.map +1 -1
  28. package/dist/PubSubManager/deleteOrphanedTriggers.d.ts.map +1 -1
  29. package/dist/PubSubManager/deleteOrphanedTriggers.js +5 -3
  30. package/dist/PubSubManager/deleteOrphanedTriggers.js.map +1 -1
  31. package/dist/PubSubManager/init/getDataWatchFunctionQuery.d.ts.map +1 -1
  32. package/dist/PubSubManager/init/getDataWatchFunctionQuery.js +1 -2
  33. package/dist/PubSubManager/init/getDataWatchFunctionQuery.js.map +1 -1
  34. package/dist/PubSubManager/init/getPubSubManagerInitQuery.d.ts.map +1 -1
  35. package/dist/PubSubManager/init/getPubSubManagerInitQuery.js +3 -2
  36. package/dist/PubSubManager/init/getPubSubManagerInitQuery.js.map +1 -1
  37. package/dist/PubSubManager/notifListener.js +2 -2
  38. package/dist/PubSubManager/notifListener.js.map +1 -1
  39. package/dist/PubSubManager/refreshTriggers.d.ts.map +1 -1
  40. package/dist/PubSubManager/refreshTriggers.js +5 -3
  41. package/dist/PubSubManager/refreshTriggers.js.map +1 -1
  42. package/lib/PubSubManager/PubSubManager.ts +31 -28
  43. package/lib/PubSubManager/deleteOrphanedTriggers.ts +5 -3
  44. package/lib/PubSubManager/init/getDataWatchFunctionQuery.ts +1 -2
  45. package/lib/PubSubManager/init/getPubSubManagerInitQuery.ts +3 -2
  46. package/lib/PubSubManager/notifListener.ts +2 -2
  47. package/lib/PubSubManager/refreshTriggers.ts +7 -5
  48. package/package.json +1 -1
@@ -0,0 +1,121 @@
1
+
2
+ > server_tests@1.0.0 test-client
3
+ > TEST_TYPE=client node --trace-uncaught --test dist/server/index.js
4
+
5
+ Prostgles: SQL file executed successfuly /home/s/prostgles-server-js/tests/server/init.sql
6
+ getPubSubManagerInitQuery: Outdated prostgles schema. Re-creating...
7
+ Running queries: /* prostgles internal query that should be excluded from schema watch */
8
+
9
+ DROP TABLE IF EXISTS "lookup_col1" CASCADE;
10
+ CREATE TABLE IF NOT EXISTS "lookup_col1" (
11
+ id TEXT PRIMARY KEY
12
+ , "description" TEXT
13
+ );
14
+ Running queries: /* prostgles internal query that should be excluded from schema watch */
15
+
16
+ CREATE TABLE "files" (
17
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid() ,
18
+ "storage_key" UUID UNIQUE ,
19
+ "extension" TEXT NOT NULL DEFAULT '' ,
20
+ "content_type" TEXT NOT NULL DEFAULT '' ,
21
+ "content_length" BIGINT NOT NULL DEFAULT 0 ,
22
+ "etag" TEXT NOT NULL DEFAULT '' ,
23
+ "original_name" TEXT NOT NULL ,
24
+ "original_last_modified" TIMESTAMPTZ ,
25
+ "description" TEXT ,
26
+ "url" TEXT NOT NULL DEFAULT '' ,
27
+ "cloud_url" TEXT ,
28
+ "signed_url" TEXT ,
29
+ "signed_url_expires" BIGINT ,
30
+ "added" TIMESTAMP NOT NULL DEFAULT NOW() ,
31
+ "updated" TIMESTAMP NOT NULL DEFAULT NOW() ,
32
+ "deleted" TIMESTAMPTZ ,
33
+ "deleted_from_storage" TIMESTAMPTZ ,
34
+ "data" BYTEA NOT NULL CHECK (data = decode('01', 'hex')) ,
35
+ "version" INTEGER NOT NULL DEFAULT 1 ,
36
+ "metadata" JSONB CHECK(prostgles.validate_jsonb_schema('{"nullable":true,"type":{"description":{"type":"string"}}}'::TEXT, "metadata", '{"table":"files","column":"metadata"}' ))
37
+ );
38
+ CREATE TABLE "files_versions" (
39
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid() ,
40
+ "storage_key" UUID NOT NULL ,
41
+ "extension" TEXT NOT NULL DEFAULT '' ,
42
+ "content_type" TEXT NOT NULL DEFAULT '' ,
43
+ "content_length" BIGINT NOT NULL DEFAULT 0 ,
44
+ "etag" TEXT NOT NULL DEFAULT '' ,
45
+ "original_name" TEXT NOT NULL ,
46
+ "original_last_modified" TIMESTAMPTZ ,
47
+ "description" TEXT ,
48
+ "url" TEXT NOT NULL DEFAULT '' ,
49
+ "cloud_url" TEXT ,
50
+ "signed_url" TEXT ,
51
+ "signed_url_expires" BIGINT ,
52
+ "added" TIMESTAMP NOT NULL DEFAULT NOW() ,
53
+ "updated" TIMESTAMP NOT NULL DEFAULT NOW() ,
54
+ "deleted" TIMESTAMPTZ ,
55
+ "deleted_from_storage" TIMESTAMPTZ ,
56
+ "file_id" UUID NOT NULL ,
57
+ "version" INTEGER NOT NULL ,
58
+ "created" TIMESTAMP NOT NULL DEFAULT NOW() ,
59
+ "metadata" JSONB CHECK(prostgles.validate_jsonb_schema('{"nullable":true,"type":{"description":{"type":"string"}}}'::TEXT, "metadata", '{"table":"files_versions","column":"metadata"}' ))
60
+ );
61
+ ALTER TABLE "files_versions" ADD CONSTRAINT "prostgles_file_version_e24fec525e76b3433749621f589d35d9" FOREIGN KEY (file_id) REFERENCES "files"(id) ON DELETE CASCADE;
62
+ CREATE UNIQUE INDEX "prostgles_file_version_9692aae50022f45f1098646939b287b1_key" ON "files_versions" (file_id, version);
63
+ COMMENT ON INDEX "prostgles_file_version_9692aae50022f45f1098646939b287b1_key" IS 'd4af15d064cae99adac0c1194199a9e3';
64
+ CREATE TABLE "users_public_info" (
65
+ "id" SERIAL PRIMARY KEY ,
66
+ "name" TEXT ,
67
+ "avatar" UUID REFERENCES files ON DELETE CASCADE ,
68
+ "sid" TEXT
69
+ );
70
+ DROP TABLE IF EXISTS "users";
71
+ CREATE TABLE "users" (
72
+ "id" SERIAL PRIMARY KEY ,
73
+ "email" TEXT NOT NULL ,
74
+ "status" TEXT NOT NULL CHECK("status" = 'active' OR "status" = 'disabled' OR "status" = 'pending'),
75
+ "type" TEXT NOT NULL ,
76
+ "preferences" JSONB NOT NULL CHECK(prostgles.validate_jsonb_schema('{"type":{"showIntro":{"type":"boolean","optional":true},"theme":{"enum":["light","dark","auto"],"optional":true},"others":{"type":"any[]"}}}'::TEXT, "preferences", '{"table":"users","column":"preferences"}' ))
77
+ );
78
+ DROP TABLE IF EXISTS "tjson";
79
+ CREATE TABLE "tjson" (
80
+ "json" JSONB NOT NULL CHECK(prostgles.validate_jsonb_schema('{"type":{"a":{"type":"boolean"},"arr":{"enum":["1","2","3"]},"arr1":{"enum":[1,2,3]},"arr2":{"type":"integer[]"},"arrStr":{"type":"string[]","optional":true,"nullable":true},"o":{"optional":true,"nullable":true,"oneOfType":[{"o1":"integer"},{"o2":"boolean"}]}}}'::TEXT, "json", '{"table":"tjson","column":"json"}' )),
81
+ "colOneOf" TEXT NOT NULL CHECK("colOneOf" = 'a' OR "colOneOf" = 'b' OR "colOneOf" = 'c'),
82
+ "status" JSONB CHECK(prostgles.validate_jsonb_schema('{"nullable":true,"oneOfType":[{"ok":{"type":"string"}},{"err":{"type":"string"}},{"loading":{"type":{"loaded":{"type":"number"},"total":{"type":"number"}}}}]}'::TEXT, "status", '{"table":"tjson","column":"status"}' )),
83
+ "jsonOneOf" JSONB CHECK(prostgles.validate_jsonb_schema('{"nullable":true,"oneOfType":[{"command":{"enum":["a"]}},{"command":{"enum":["b"]},"option":{"type":"integer[]"}}]}'::TEXT, "jsonOneOf", '{"table":"tjson","column":"jsonOneOf"}' )),
84
+ "table_config" JSONB CHECK(prostgles.validate_jsonb_schema('{"nullable":true,"type":{"referencedTables":{"optional":true,"arrayOfType":{"name":"string","minFiles":"number"}},"recType":{"nullable":true,"optional":true,"record":{"keysEnum":["a","b"],"values":{"type":{"bools":"boolean[]"}}}}}}'::TEXT, "table_config", '{"table":"tjson","column":"table_config"}' ))
85
+ );
86
+ Running queries: /* prostgles internal query that should be excluded from schema watch */
87
+
88
+ ALTER TABLE "uuid_text" ADD FOREIGN KEY (col1) REFERENCES lookup_col1(id);
89
+ ALTER TABLE "uuid_text" ADD FOREIGN KEY (col2) REFERENCES lookup_col1(id);
90
+ ALTER TABLE "uuid_text" ADD FOREIGN KEY (col3) REFERENCES lookup_col1(id);
91
+ DROP TABLE IF EXISTS "api_table";
92
+ CREATE TABLE "api_table" (
93
+ "id" SERIAL PRIMARY KEY
94
+ );
95
+ Prostgles: Initiated file manager. Max allowed file size: 1MB (maxHttpBufferSize = 1e6). To increase this set maxHttpBufferSize in socket.io server init options
96
+ (server): prostgles onReady
97
+ (server): Waiting for client...
98
+ (client) t+ 0ms Started client...
99
+ onSocketConnect RTPizF7oCo9RIzQxAAAA
100
+ (server): Client connected -> console does not work. use log function. socket.id: RTPizF7oCo9RIzQxAAAA
101
+ (client) t+ 42ms Client connect.
102
+ (client) t+ 188ms TEST_NAME: syncTriggerCleanup Started
103
+ getPubSubManagerInitQuery: Outdated prostgles schema. Re-creating...
104
+ Created PubSubManager
105
+ Pushing 0 rows to socket
106
+ ✔ subscription receives an update immediately after another trigger is deleted (410.018104ms)
107
+ Pushing 1 rows to socket x2
108
+ Pushing 0 rows to socket
109
+ server.syncBatch planes: inserted( 0 ) updated( 0 ) deleted( 0 ) pushed to client( 1 ) total( 1 ) undefined
110
+ Client log (client) t+ 3253ms TEST_NAME: syncTriggerCleanup Finished OK
111
+ ✔ unsubscribe cleanup preserves a sync being registered (2650.19868ms)
112
+ Client test successful
113
+ (server): Stopping server ...
114
+ ℹ tests 2
115
+ ℹ suites 0
116
+ ℹ pass 2
117
+ ℹ fail 0
118
+ ℹ cancelled 0
119
+ ℹ skipped 0
120
+ ℹ todo 0
121
+ ℹ duration_ms 11560.731295
@@ -0,0 +1,134 @@
1
+
2
+ > server_tests@1.0.0 test-client
3
+ > TEST_TYPE=client node --trace-uncaught --test dist/server/index.js
4
+
5
+ Prostgles: SQL file executed successfuly /home/s/prostgles-server-js/tests/server/init.sql
6
+ Running queries: /* prostgles internal query that should be excluded from schema watch */
7
+
8
+ DROP TABLE IF EXISTS "lookup_col1" CASCADE;
9
+ CREATE TABLE IF NOT EXISTS "lookup_col1" (
10
+ id TEXT PRIMARY KEY
11
+ , "description" TEXT
12
+ );
13
+ Running queries: /* prostgles internal query that should be excluded from schema watch */
14
+
15
+ CREATE TABLE "files" (
16
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid() ,
17
+ "storage_key" UUID UNIQUE ,
18
+ "extension" TEXT NOT NULL DEFAULT '' ,
19
+ "content_type" TEXT NOT NULL DEFAULT '' ,
20
+ "content_length" BIGINT NOT NULL DEFAULT 0 ,
21
+ "etag" TEXT NOT NULL DEFAULT '' ,
22
+ "original_name" TEXT NOT NULL ,
23
+ "original_last_modified" TIMESTAMPTZ ,
24
+ "description" TEXT ,
25
+ "url" TEXT NOT NULL DEFAULT '' ,
26
+ "cloud_url" TEXT ,
27
+ "signed_url" TEXT ,
28
+ "signed_url_expires" BIGINT ,
29
+ "added" TIMESTAMP NOT NULL DEFAULT NOW() ,
30
+ "updated" TIMESTAMP NOT NULL DEFAULT NOW() ,
31
+ "deleted" TIMESTAMPTZ ,
32
+ "deleted_from_storage" TIMESTAMPTZ ,
33
+ "data" BYTEA NOT NULL CHECK (data = decode('01', 'hex')) ,
34
+ "version" INTEGER NOT NULL DEFAULT 1 ,
35
+ "metadata" JSONB CHECK(prostgles.validate_jsonb_schema('{"nullable":true,"type":{"description":{"type":"string"}}}'::TEXT, "metadata", '{"table":"files","column":"metadata"}' ))
36
+ );
37
+ CREATE TABLE "files_versions" (
38
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid() ,
39
+ "storage_key" UUID NOT NULL ,
40
+ "extension" TEXT NOT NULL DEFAULT '' ,
41
+ "content_type" TEXT NOT NULL DEFAULT '' ,
42
+ "content_length" BIGINT NOT NULL DEFAULT 0 ,
43
+ "etag" TEXT NOT NULL DEFAULT '' ,
44
+ "original_name" TEXT NOT NULL ,
45
+ "original_last_modified" TIMESTAMPTZ ,
46
+ "description" TEXT ,
47
+ "url" TEXT NOT NULL DEFAULT '' ,
48
+ "cloud_url" TEXT ,
49
+ "signed_url" TEXT ,
50
+ "signed_url_expires" BIGINT ,
51
+ "added" TIMESTAMP NOT NULL DEFAULT NOW() ,
52
+ "updated" TIMESTAMP NOT NULL DEFAULT NOW() ,
53
+ "deleted" TIMESTAMPTZ ,
54
+ "deleted_from_storage" TIMESTAMPTZ ,
55
+ "file_id" UUID NOT NULL ,
56
+ "version" INTEGER NOT NULL ,
57
+ "created" TIMESTAMP NOT NULL DEFAULT NOW() ,
58
+ "metadata" JSONB CHECK(prostgles.validate_jsonb_schema('{"nullable":true,"type":{"description":{"type":"string"}}}'::TEXT, "metadata", '{"table":"files_versions","column":"metadata"}' ))
59
+ );
60
+ ALTER TABLE "files_versions" ADD CONSTRAINT "prostgles_file_version_e24fec525e76b3433749621f589d35d9" FOREIGN KEY (file_id) REFERENCES "files"(id) ON DELETE CASCADE;
61
+ CREATE UNIQUE INDEX "prostgles_file_version_9692aae50022f45f1098646939b287b1_key" ON "files_versions" (file_id, version);
62
+ COMMENT ON INDEX "prostgles_file_version_9692aae50022f45f1098646939b287b1_key" IS 'd4af15d064cae99adac0c1194199a9e3';
63
+ CREATE TABLE "users_public_info" (
64
+ "id" SERIAL PRIMARY KEY ,
65
+ "name" TEXT ,
66
+ "avatar" UUID REFERENCES files ON DELETE CASCADE ,
67
+ "sid" TEXT
68
+ );
69
+ DROP TABLE IF EXISTS "users";
70
+ CREATE TABLE "users" (
71
+ "id" SERIAL PRIMARY KEY ,
72
+ "email" TEXT NOT NULL ,
73
+ "status" TEXT NOT NULL CHECK("status" = 'active' OR "status" = 'disabled' OR "status" = 'pending'),
74
+ "type" TEXT NOT NULL ,
75
+ "preferences" JSONB NOT NULL CHECK(prostgles.validate_jsonb_schema('{"type":{"showIntro":{"type":"boolean","optional":true},"theme":{"enum":["light","dark","auto"],"optional":true},"others":{"type":"any[]"}}}'::TEXT, "preferences", '{"table":"users","column":"preferences"}' ))
76
+ );
77
+ DROP TABLE IF EXISTS "tjson";
78
+ CREATE TABLE "tjson" (
79
+ "json" JSONB NOT NULL CHECK(prostgles.validate_jsonb_schema('{"type":{"a":{"type":"boolean"},"arr":{"enum":["1","2","3"]},"arr1":{"enum":[1,2,3]},"arr2":{"type":"integer[]"},"arrStr":{"type":"string[]","optional":true,"nullable":true},"o":{"optional":true,"nullable":true,"oneOfType":[{"o1":"integer"},{"o2":"boolean"}]}}}'::TEXT, "json", '{"table":"tjson","column":"json"}' )),
80
+ "colOneOf" TEXT NOT NULL CHECK("colOneOf" = 'a' OR "colOneOf" = 'b' OR "colOneOf" = 'c'),
81
+ "status" JSONB CHECK(prostgles.validate_jsonb_schema('{"nullable":true,"oneOfType":[{"ok":{"type":"string"}},{"err":{"type":"string"}},{"loading":{"type":{"loaded":{"type":"number"},"total":{"type":"number"}}}}]}'::TEXT, "status", '{"table":"tjson","column":"status"}' )),
82
+ "jsonOneOf" JSONB CHECK(prostgles.validate_jsonb_schema('{"nullable":true,"oneOfType":[{"command":{"enum":["a"]}},{"command":{"enum":["b"]},"option":{"type":"integer[]"}}]}'::TEXT, "jsonOneOf", '{"table":"tjson","column":"jsonOneOf"}' )),
83
+ "table_config" JSONB CHECK(prostgles.validate_jsonb_schema('{"nullable":true,"type":{"referencedTables":{"optional":true,"arrayOfType":{"name":"string","minFiles":"number"}},"recType":{"nullable":true,"optional":true,"record":{"keysEnum":["a","b"],"values":{"type":{"bools":"boolean[]"}}}}}}'::TEXT, "table_config", '{"table":"tjson","column":"table_config"}' ))
84
+ );
85
+ Running queries: /* prostgles internal query that should be excluded from schema watch */
86
+
87
+ ALTER TABLE "uuid_text" ADD FOREIGN KEY (col1) REFERENCES lookup_col1(id);
88
+ ALTER TABLE "uuid_text" ADD FOREIGN KEY (col2) REFERENCES lookup_col1(id);
89
+ ALTER TABLE "uuid_text" ADD FOREIGN KEY (col3) REFERENCES lookup_col1(id);
90
+ DROP TABLE IF EXISTS "api_table";
91
+ CREATE TABLE "api_table" (
92
+ "id" SERIAL PRIMARY KEY
93
+ );
94
+ Prostgles: Initiated file manager. Max allowed file size: 1MB (maxHttpBufferSize = 1e6). To increase this set maxHttpBufferSize in socket.io server init options
95
+ (server): prostgles onReady
96
+ (server): Waiting for client...
97
+ (client) t+ 0ms Started client...
98
+ onSocketConnect ZIOK2QaRzEcRbEt6AAAA
99
+ (server): Client connected -> console does not work. use log function. socket.id: ZIOK2QaRzEcRbEt6AAAA
100
+ (client) t+ 43ms Client connect.
101
+ (client) t+ 187ms TEST_NAME: syncTriggerCleanup Started
102
+ Created PubSubManager
103
+ Client log (client) t+ 3850ms TEST_NAME: syncTriggerCleanup Finished OK
104
+ ✖ unsubscribe cleanup preserves a sync being registered (3658.639656ms)
105
+ Client test successful
106
+ (server): Stopping server ...
107
+ ℹ tests 1
108
+ ℹ suites 0
109
+ ℹ pass 0
110
+ ℹ fail 1
111
+ ℹ cancelled 0
112
+ ℹ skipped 0
113
+ ℹ todo 0
114
+ ℹ duration_ms 12004.24277
115
+
116
+ ✖ failing tests:
117
+
118
+ test at ../client/dist/syncTriggerCleanup.spec.js:8:32
119
+ ✖ unsubscribe cleanup preserves a sync being registered (3658.639656ms)
120
+ AssertionError [ERR_ASSERTION]: The new sync lost its trigger during unsubscribe cleanup
121
+ at TestContext.<anonymous> (/home/s/prostgles-server-js/tests/client/dist/syncTriggerCleanup.spec.js:25:38)
122
+ at async Test.run (node:internal/test_runner/test:1125:7)
123
+ at async startSubtestAfterBootstrap (node:internal/test_runner/harness:358:3)
124
+ at async testSyncTriggerCleanup (/home/s/prostgles-server-js/tests/client/dist/syncTriggerCleanup.spec.js:8:5)
125
+ at async syncTriggerCleanup (/home/s/prostgles-server-js/tests/client/dist/client/index.js:46:9)
126
+ at async onReady (/home/s/prostgles-server-js/tests/client/dist/client/index.js:131:21)
127
+ at async /home/s/prostgles-server-js/tests/client/node_modules/prostgles-client/dist/prostgles.js:146:21 {
128
+ generatedMessage: false,
129
+ code: 'ERR_ASSERTION',
130
+ actual: false,
131
+ expected: true,
132
+ operator: '==',
133
+ diff: 'simple'
134
+ }