@rebasepro/server-postgresql 0.0.1-canary.4d4fb3e

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 (147) hide show
  1. package/LICENSE +6 -0
  2. package/README.md +106 -0
  3. package/build-errors.txt +37 -0
  4. package/dist/common/src/collections/CollectionRegistry.d.ts +48 -0
  5. package/dist/common/src/collections/index.d.ts +1 -0
  6. package/dist/common/src/data/buildRebaseData.d.ts +14 -0
  7. package/dist/common/src/index.d.ts +3 -0
  8. package/dist/common/src/util/builders.d.ts +57 -0
  9. package/dist/common/src/util/callbacks.d.ts +6 -0
  10. package/dist/common/src/util/collections.d.ts +11 -0
  11. package/dist/common/src/util/common.d.ts +2 -0
  12. package/dist/common/src/util/conditions.d.ts +26 -0
  13. package/dist/common/src/util/entities.d.ts +36 -0
  14. package/dist/common/src/util/enums.d.ts +3 -0
  15. package/dist/common/src/util/index.d.ts +16 -0
  16. package/dist/common/src/util/navigation_from_path.d.ts +34 -0
  17. package/dist/common/src/util/navigation_utils.d.ts +20 -0
  18. package/dist/common/src/util/parent_references_from_path.d.ts +6 -0
  19. package/dist/common/src/util/paths.d.ts +14 -0
  20. package/dist/common/src/util/permissions.d.ts +5 -0
  21. package/dist/common/src/util/references.d.ts +2 -0
  22. package/dist/common/src/util/relations.d.ts +12 -0
  23. package/dist/common/src/util/resolutions.d.ts +72 -0
  24. package/dist/common/src/util/storage.d.ts +24 -0
  25. package/dist/index.es.js +10635 -0
  26. package/dist/index.es.js.map +1 -0
  27. package/dist/index.umd.js +10643 -0
  28. package/dist/index.umd.js.map +1 -0
  29. package/dist/server-postgresql/src/PostgresBackendDriver.d.ts +112 -0
  30. package/dist/server-postgresql/src/PostgresBootstrapper.d.ts +40 -0
  31. package/dist/server-postgresql/src/auth/ensure-tables.d.ts +6 -0
  32. package/dist/server-postgresql/src/auth/services.d.ts +188 -0
  33. package/dist/server-postgresql/src/cli.d.ts +1 -0
  34. package/dist/server-postgresql/src/collections/PostgresCollectionRegistry.d.ts +43 -0
  35. package/dist/server-postgresql/src/connection.d.ts +7 -0
  36. package/dist/server-postgresql/src/data-transformer.d.ts +36 -0
  37. package/dist/server-postgresql/src/databasePoolManager.d.ts +20 -0
  38. package/dist/server-postgresql/src/history/HistoryService.d.ts +71 -0
  39. package/dist/server-postgresql/src/history/ensure-history-table.d.ts +7 -0
  40. package/dist/server-postgresql/src/index.d.ts +13 -0
  41. package/dist/server-postgresql/src/interfaces.d.ts +18 -0
  42. package/dist/server-postgresql/src/schema/auth-schema.d.ts +767 -0
  43. package/dist/server-postgresql/src/schema/generate-drizzle-schema-logic.d.ts +2 -0
  44. package/dist/server-postgresql/src/schema/generate-drizzle-schema.d.ts +1 -0
  45. package/dist/server-postgresql/src/services/BranchService.d.ts +47 -0
  46. package/dist/server-postgresql/src/services/EntityFetchService.d.ts +195 -0
  47. package/dist/server-postgresql/src/services/EntityPersistService.d.ts +41 -0
  48. package/dist/server-postgresql/src/services/RelationService.d.ts +92 -0
  49. package/dist/server-postgresql/src/services/entity-helpers.d.ts +24 -0
  50. package/dist/server-postgresql/src/services/entityService.d.ts +102 -0
  51. package/dist/server-postgresql/src/services/index.d.ts +4 -0
  52. package/dist/server-postgresql/src/services/realtimeService.d.ts +186 -0
  53. package/dist/server-postgresql/src/utils/drizzle-conditions.d.ts +116 -0
  54. package/dist/server-postgresql/src/websocket.d.ts +5 -0
  55. package/dist/types/src/controllers/analytics_controller.d.ts +7 -0
  56. package/dist/types/src/controllers/auth.d.ts +117 -0
  57. package/dist/types/src/controllers/client.d.ts +58 -0
  58. package/dist/types/src/controllers/collection_registry.d.ts +44 -0
  59. package/dist/types/src/controllers/customization_controller.d.ts +54 -0
  60. package/dist/types/src/controllers/data.d.ts +141 -0
  61. package/dist/types/src/controllers/data_driver.d.ts +168 -0
  62. package/dist/types/src/controllers/database_admin.d.ts +11 -0
  63. package/dist/types/src/controllers/dialogs_controller.d.ts +36 -0
  64. package/dist/types/src/controllers/effective_role.d.ts +4 -0
  65. package/dist/types/src/controllers/index.d.ts +17 -0
  66. package/dist/types/src/controllers/local_config_persistence.d.ts +20 -0
  67. package/dist/types/src/controllers/navigation.d.ts +213 -0
  68. package/dist/types/src/controllers/registry.d.ts +51 -0
  69. package/dist/types/src/controllers/side_dialogs_controller.d.ts +67 -0
  70. package/dist/types/src/controllers/side_entity_controller.d.ts +89 -0
  71. package/dist/types/src/controllers/snackbar.d.ts +24 -0
  72. package/dist/types/src/controllers/storage.d.ts +173 -0
  73. package/dist/types/src/index.d.ts +4 -0
  74. package/dist/types/src/rebase_context.d.ts +101 -0
  75. package/dist/types/src/types/backend.d.ts +533 -0
  76. package/dist/types/src/types/builders.d.ts +14 -0
  77. package/dist/types/src/types/chips.d.ts +5 -0
  78. package/dist/types/src/types/collections.d.ts +812 -0
  79. package/dist/types/src/types/data_source.d.ts +64 -0
  80. package/dist/types/src/types/entities.d.ts +145 -0
  81. package/dist/types/src/types/entity_actions.d.ts +98 -0
  82. package/dist/types/src/types/entity_callbacks.d.ts +173 -0
  83. package/dist/types/src/types/entity_link_builder.d.ts +7 -0
  84. package/dist/types/src/types/entity_overrides.d.ts +9 -0
  85. package/dist/types/src/types/entity_views.d.ts +61 -0
  86. package/dist/types/src/types/export_import.d.ts +21 -0
  87. package/dist/types/src/types/index.d.ts +22 -0
  88. package/dist/types/src/types/locales.d.ts +4 -0
  89. package/dist/types/src/types/modify_collections.d.ts +5 -0
  90. package/dist/types/src/types/plugins.d.ts +225 -0
  91. package/dist/types/src/types/properties.d.ts +1091 -0
  92. package/dist/types/src/types/property_config.d.ts +70 -0
  93. package/dist/types/src/types/relations.d.ts +336 -0
  94. package/dist/types/src/types/slots.d.ts +228 -0
  95. package/dist/types/src/types/translations.d.ts +826 -0
  96. package/dist/types/src/types/user_management_delegate.d.ts +120 -0
  97. package/dist/types/src/types/websockets.d.ts +78 -0
  98. package/dist/types/src/users/index.d.ts +2 -0
  99. package/dist/types/src/users/roles.d.ts +22 -0
  100. package/dist/types/src/users/user.d.ts +46 -0
  101. package/jest-all.log +3128 -0
  102. package/jest.log +49 -0
  103. package/package.json +93 -0
  104. package/src/PostgresBackendDriver.ts +1024 -0
  105. package/src/PostgresBootstrapper.ts +232 -0
  106. package/src/auth/ensure-tables.ts +309 -0
  107. package/src/auth/services.ts +740 -0
  108. package/src/cli.ts +347 -0
  109. package/src/collections/PostgresCollectionRegistry.ts +96 -0
  110. package/src/connection.ts +62 -0
  111. package/src/data-transformer.ts +569 -0
  112. package/src/databasePoolManager.ts +84 -0
  113. package/src/history/HistoryService.ts +257 -0
  114. package/src/history/ensure-history-table.ts +45 -0
  115. package/src/index.ts +13 -0
  116. package/src/interfaces.ts +60 -0
  117. package/src/schema/auth-schema.ts +146 -0
  118. package/src/schema/generate-drizzle-schema-logic.ts +618 -0
  119. package/src/schema/generate-drizzle-schema.ts +151 -0
  120. package/src/services/BranchService.ts +237 -0
  121. package/src/services/EntityFetchService.ts +1447 -0
  122. package/src/services/EntityPersistService.ts +351 -0
  123. package/src/services/RelationService.ts +1012 -0
  124. package/src/services/entity-helpers.ts +121 -0
  125. package/src/services/entityService.ts +209 -0
  126. package/src/services/index.ts +13 -0
  127. package/src/services/realtimeService.ts +1005 -0
  128. package/src/utils/drizzle-conditions.ts +999 -0
  129. package/src/websocket.ts +487 -0
  130. package/test/auth-services.test.ts +569 -0
  131. package/test/branchService.test.ts +357 -0
  132. package/test/drizzle-conditions.test.ts +895 -0
  133. package/test/entityService.errors.test.ts +352 -0
  134. package/test/entityService.relations.test.ts +912 -0
  135. package/test/entityService.subcollection-search.test.ts +516 -0
  136. package/test/entityService.test.ts +977 -0
  137. package/test/generate-drizzle-schema.test.ts +795 -0
  138. package/test/historyService.test.ts +126 -0
  139. package/test/postgresDataDriver.test.ts +556 -0
  140. package/test/realtimeService.test.ts +276 -0
  141. package/test/relations.test.ts +662 -0
  142. package/test_drizzle_mock.js +3 -0
  143. package/test_find_changed.mjs +30 -0
  144. package/test_output.txt +3145 -0
  145. package/tsconfig.json +49 -0
  146. package/tsconfig.prod.json +20 -0
  147. package/vite.config.ts +82 -0
@@ -0,0 +1,126 @@
1
+ import { HistoryService, findChangedFields } from "../src/history/HistoryService";
2
+ import { NodePgDatabase } from "drizzle-orm/node-postgres";
3
+ import { DrizzleClient } from "../src/interfaces";
4
+
5
+ describe("HistoryService - changedFields and history insertion logic", () => {
6
+ describe("findChangedFields", () => {
7
+ it("should return null when identical flat objects are compared", () => {
8
+ const oldValues = { title: "Hello", description: "World" };
9
+ const newValues = { title: "Hello", description: "World" };
10
+ const result = findChangedFields(oldValues, newValues);
11
+ expect(result).toBeNull();
12
+ });
13
+
14
+ it("should detect changes on simple properties", () => {
15
+ const oldValues = { title: "Hello" };
16
+ const newValues = { title: "Hello World" };
17
+ const result = findChangedFields(oldValues, newValues);
18
+ expect(result).toEqual(["title"]);
19
+ });
20
+
21
+ it("should skip properties starting with double underscore", () => {
22
+ const oldValues = { title: "Hello", __internal: 123 };
23
+ const newValues = { title: "Hello", __internal: 456 };
24
+ const result = findChangedFields(oldValues, newValues);
25
+ expect(result).toBeNull();
26
+ });
27
+
28
+ it("should return null for deeply identical relations", () => {
29
+ const oldValues = {
30
+ author: { id: "1", path: "authors", __type: "relation" },
31
+ tags: [{ id: "1" }, { id: "2" }]
32
+ };
33
+ const newValues = {
34
+ author: { id: "1", path: "authors", __type: "relation" },
35
+ tags: [{ id: "1" }, { id: "2" }]
36
+ };
37
+ const result = findChangedFields(oldValues as Record<string, unknown>, newValues as Record<string, unknown>);
38
+ expect(result).toBeNull();
39
+ });
40
+
41
+ it("should detect changes in relation properties when IDs differ", () => {
42
+ const oldValues = {
43
+ author: { id: "1", path: "authors", __type: "relation" }
44
+ };
45
+ const newValues = {
46
+ author: { id: "2", path: "authors", __type: "relation" }
47
+ };
48
+ const result = findChangedFields(oldValues as Record<string, unknown>, newValues as Record<string, unknown>);
49
+ expect(result).toEqual(["author"]);
50
+ });
51
+
52
+ it("should detect differences in relation arrays", () => {
53
+ const oldValues = {
54
+ tags: [{ id: "1" }]
55
+ };
56
+ const newValues = {
57
+ tags: [{ id: "1" }, { id: "2" }]
58
+ };
59
+ const result = findChangedFields(oldValues as unknown as Record<string, unknown>, newValues as unknown as Record<string, unknown>);
60
+ expect(result).toEqual(["tags"]);
61
+ });
62
+ });
63
+
64
+ describe("recordHistory execution mapping", () => {
65
+ let db: jest.Mocked<NodePgDatabase>;
66
+ let historyService: HistoryService;
67
+
68
+ beforeEach(() => {
69
+ db = {
70
+ execute: jest.fn().mockResolvedValue({})
71
+ } as unknown as jest.Mocked<NodePgDatabase>;
72
+ historyService = new HistoryService(db as unknown as DrizzleClient, {} as any);
73
+ jest.spyOn(console, 'error').mockImplementation(() => {});
74
+ });
75
+
76
+ afterEach(() => {
77
+ jest.restoreAllMocks();
78
+ });
79
+
80
+ it("should skip execution when changed fields evaluate to null on update", async () => {
81
+ await historyService.recordHistory({
82
+ tableName: "posts",
83
+ entityId: "1",
84
+ action: "update",
85
+ previousValues: { title: "same" },
86
+ values: { title: "same" },
87
+ });
88
+
89
+ // db.execute should not be called since there is no data to log
90
+ expect(db.execute).not.toHaveBeenCalled();
91
+ });
92
+
93
+ it("should properly structure database query on actual array changes", async () => {
94
+ await historyService.recordHistory({
95
+ tableName: "posts",
96
+ entityId: "1",
97
+ action: "update",
98
+ previousValues: { title: "old", tags: [{ id: 1 }] },
99
+ values: { title: "new", tags: [{ id: 2 }] }
100
+ });
101
+
102
+ // Since it's a difference, db.execute should be called. (plus 2 prune calls)
103
+ expect(db.execute.mock.calls.length).toBeGreaterThanOrEqual(1);
104
+
105
+ const executedSql = db.execute.mock.calls[0][0] as unknown as { query: string; sql?: string; strings?: string[]; values?: unknown[] };
106
+
107
+ // Drizzle wraps SQL in its own SQL type which contains sql strings and params.
108
+ const serializedSql = JSON.stringify(executedSql);
109
+ // The syntax we added is ARRAY[?]::text[] or similar
110
+ expect(serializedSql).toContain("::text[]");
111
+ expect(serializedSql).toContain("ARRAY[");
112
+ });
113
+
114
+ it("should properly perform query during entity creation (insert)", async () => {
115
+ await historyService.recordHistory({
116
+ tableName: "posts",
117
+ entityId: "1",
118
+ action: "create",
119
+ previousValues: undefined,
120
+ values: { title: "new" }
121
+ });
122
+
123
+ expect(db.execute.mock.calls.length).toBeGreaterThanOrEqual(1);
124
+ });
125
+ });
126
+ });