@rebasepro/server-postgresql 0.5.0 → 0.6.0

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 (165) hide show
  1. package/dist/{server-postgresql/src/PostgresAdapter.d.ts → PostgresAdapter.d.ts} +1 -1
  2. package/dist/{server-postgresql/src/PostgresBackendDriver.d.ts → PostgresBackendDriver.d.ts} +2 -2
  3. package/dist/{server-postgresql/src/PostgresBootstrapper.d.ts → PostgresBootstrapper.d.ts} +11 -1
  4. package/dist/{server-postgresql/src/collections → collections}/PostgresCollectionRegistry.d.ts +4 -0
  5. package/dist/index.es.js +10168 -11145
  6. package/dist/index.es.js.map +1 -1
  7. package/dist/index.umd.js +10735 -11429
  8. package/dist/index.umd.js.map +1 -1
  9. package/dist/{server-postgresql/src/services → services}/EntityPersistService.d.ts +0 -14
  10. package/dist/utils/pg-error-utils.d.ts +55 -0
  11. package/package.json +24 -21
  12. package/src/PostgresAdapter.ts +9 -10
  13. package/src/PostgresBackendDriver.ts +134 -121
  14. package/src/PostgresBootstrapper.ts +86 -13
  15. package/src/auth/ensure-tables.ts +28 -5
  16. package/src/auth/services.ts +28 -18
  17. package/src/cli.ts +99 -96
  18. package/src/collections/PostgresCollectionRegistry.ts +7 -0
  19. package/src/connection.ts +11 -6
  20. package/src/data-transformer.ts +16 -14
  21. package/src/databasePoolManager.ts +3 -2
  22. package/src/history/HistoryService.ts +3 -2
  23. package/src/history/ensure-history-table.ts +5 -4
  24. package/src/schema/auth-schema.ts +1 -2
  25. package/src/schema/doctor-cli.ts +2 -1
  26. package/src/schema/doctor.ts +40 -37
  27. package/src/schema/generate-drizzle-schema-logic.ts +56 -18
  28. package/src/schema/generate-drizzle-schema.ts +11 -11
  29. package/src/schema/introspect-db-inference.ts +25 -25
  30. package/src/schema/introspect-db-logic.ts +38 -38
  31. package/src/schema/introspect-db.ts +28 -27
  32. package/src/services/BranchService.ts +14 -0
  33. package/src/services/EntityFetchService.ts +28 -25
  34. package/src/services/EntityPersistService.ts +11 -141
  35. package/src/services/RelationService.ts +57 -37
  36. package/src/services/entity-helpers.ts +6 -2
  37. package/src/services/realtimeService.ts +45 -32
  38. package/src/utils/drizzle-conditions.ts +31 -15
  39. package/src/utils/pg-error-utils.ts +211 -0
  40. package/src/websocket.ts +15 -12
  41. package/test/auth-services.test.ts +36 -19
  42. package/test/batch-many-to-many-regression.test.ts +119 -39
  43. package/test/data-transformer-hardening.test.ts +67 -33
  44. package/test/data-transformer.test.ts +4 -2
  45. package/test/doctor.test.ts +10 -5
  46. package/test/drizzle-conditions.test.ts +59 -6
  47. package/test/generate-drizzle-schema.test.ts +65 -40
  48. package/test/introspect-db-generation.test.ts +179 -81
  49. package/test/introspect-db-utils.test.ts +92 -37
  50. package/test/mocks/chalk.cjs +7 -0
  51. package/test/pg-error-utils.test.ts +221 -0
  52. package/test/postgresDataDriver.test.ts +14 -5
  53. package/test/property-ordering.test.ts +126 -79
  54. package/test/realtimeService.test.ts +6 -2
  55. package/test/relation-pipeline-gaps.test.ts +84 -36
  56. package/test/relations.test.ts +247 -0
  57. package/test/unmapped-tables-safety.test.ts +14 -6
  58. package/test/websocket.test.ts +1 -1
  59. package/tsconfig.json +5 -0
  60. package/tsconfig.prod.json +3 -0
  61. package/vite.config.ts +5 -5
  62. package/dist/common/src/collections/CollectionRegistry.d.ts +0 -56
  63. package/dist/common/src/collections/default-collections.d.ts +0 -9
  64. package/dist/common/src/collections/index.d.ts +0 -2
  65. package/dist/common/src/data/buildRebaseData.d.ts +0 -14
  66. package/dist/common/src/data/query_builder.d.ts +0 -55
  67. package/dist/common/src/index.d.ts +0 -4
  68. package/dist/common/src/util/builders.d.ts +0 -57
  69. package/dist/common/src/util/callbacks.d.ts +0 -6
  70. package/dist/common/src/util/collections.d.ts +0 -11
  71. package/dist/common/src/util/common.d.ts +0 -2
  72. package/dist/common/src/util/conditions.d.ts +0 -26
  73. package/dist/common/src/util/entities.d.ts +0 -58
  74. package/dist/common/src/util/enums.d.ts +0 -3
  75. package/dist/common/src/util/index.d.ts +0 -16
  76. package/dist/common/src/util/navigation_from_path.d.ts +0 -34
  77. package/dist/common/src/util/navigation_utils.d.ts +0 -20
  78. package/dist/common/src/util/parent_references_from_path.d.ts +0 -6
  79. package/dist/common/src/util/paths.d.ts +0 -14
  80. package/dist/common/src/util/permissions.d.ts +0 -14
  81. package/dist/common/src/util/references.d.ts +0 -2
  82. package/dist/common/src/util/relations.d.ts +0 -22
  83. package/dist/common/src/util/resolutions.d.ts +0 -72
  84. package/dist/common/src/util/storage.d.ts +0 -24
  85. package/dist/types/src/controllers/analytics_controller.d.ts +0 -7
  86. package/dist/types/src/controllers/auth.d.ts +0 -104
  87. package/dist/types/src/controllers/client.d.ts +0 -168
  88. package/dist/types/src/controllers/collection_registry.d.ts +0 -46
  89. package/dist/types/src/controllers/customization_controller.d.ts +0 -60
  90. package/dist/types/src/controllers/data.d.ts +0 -207
  91. package/dist/types/src/controllers/data_driver.d.ts +0 -218
  92. package/dist/types/src/controllers/database_admin.d.ts +0 -11
  93. package/dist/types/src/controllers/dialogs_controller.d.ts +0 -36
  94. package/dist/types/src/controllers/effective_role.d.ts +0 -4
  95. package/dist/types/src/controllers/email.d.ts +0 -36
  96. package/dist/types/src/controllers/index.d.ts +0 -18
  97. package/dist/types/src/controllers/local_config_persistence.d.ts +0 -20
  98. package/dist/types/src/controllers/navigation.d.ts +0 -225
  99. package/dist/types/src/controllers/registry.d.ts +0 -63
  100. package/dist/types/src/controllers/side_dialogs_controller.d.ts +0 -67
  101. package/dist/types/src/controllers/side_entity_controller.d.ts +0 -97
  102. package/dist/types/src/controllers/snackbar.d.ts +0 -24
  103. package/dist/types/src/controllers/storage.d.ts +0 -171
  104. package/dist/types/src/index.d.ts +0 -4
  105. package/dist/types/src/rebase_context.d.ts +0 -122
  106. package/dist/types/src/types/auth_adapter.d.ts +0 -301
  107. package/dist/types/src/types/backend.d.ts +0 -571
  108. package/dist/types/src/types/backend_hooks.d.ts +0 -172
  109. package/dist/types/src/types/builders.d.ts +0 -15
  110. package/dist/types/src/types/chips.d.ts +0 -5
  111. package/dist/types/src/types/collections.d.ts +0 -961
  112. package/dist/types/src/types/component_ref.d.ts +0 -47
  113. package/dist/types/src/types/cron.d.ts +0 -102
  114. package/dist/types/src/types/data_source.d.ts +0 -64
  115. package/dist/types/src/types/database_adapter.d.ts +0 -94
  116. package/dist/types/src/types/entities.d.ts +0 -145
  117. package/dist/types/src/types/entity_actions.d.ts +0 -104
  118. package/dist/types/src/types/entity_callbacks.d.ts +0 -173
  119. package/dist/types/src/types/entity_link_builder.d.ts +0 -7
  120. package/dist/types/src/types/entity_overrides.d.ts +0 -10
  121. package/dist/types/src/types/entity_views.d.ts +0 -87
  122. package/dist/types/src/types/export_import.d.ts +0 -21
  123. package/dist/types/src/types/formex.d.ts +0 -40
  124. package/dist/types/src/types/index.d.ts +0 -28
  125. package/dist/types/src/types/locales.d.ts +0 -4
  126. package/dist/types/src/types/modify_collections.d.ts +0 -5
  127. package/dist/types/src/types/plugins.d.ts +0 -282
  128. package/dist/types/src/types/properties.d.ts +0 -1173
  129. package/dist/types/src/types/property_config.d.ts +0 -74
  130. package/dist/types/src/types/relations.d.ts +0 -336
  131. package/dist/types/src/types/slots.d.ts +0 -262
  132. package/dist/types/src/types/translations.d.ts +0 -900
  133. package/dist/types/src/types/user_management_delegate.d.ts +0 -86
  134. package/dist/types/src/types/websockets.d.ts +0 -78
  135. package/dist/types/src/users/index.d.ts +0 -1
  136. package/dist/types/src/users/user.d.ts +0 -50
  137. /package/dist/{server-postgresql/src/auth → auth}/ensure-tables.d.ts +0 -0
  138. /package/dist/{server-postgresql/src/auth → auth}/services.d.ts +0 -0
  139. /package/dist/{server-postgresql/src/cli.d.ts → cli.d.ts} +0 -0
  140. /package/dist/{server-postgresql/src/connection.d.ts → connection.d.ts} +0 -0
  141. /package/dist/{server-postgresql/src/data-transformer.d.ts → data-transformer.d.ts} +0 -0
  142. /package/dist/{server-postgresql/src/databasePoolManager.d.ts → databasePoolManager.d.ts} +0 -0
  143. /package/dist/{server-postgresql/src/history → history}/HistoryService.d.ts +0 -0
  144. /package/dist/{server-postgresql/src/history → history}/ensure-history-table.d.ts +0 -0
  145. /package/dist/{server-postgresql/src/index.d.ts → index.d.ts} +0 -0
  146. /package/dist/{server-postgresql/src/interfaces.d.ts → interfaces.d.ts} +0 -0
  147. /package/dist/{server-postgresql/src/schema → schema}/auth-schema.d.ts +0 -0
  148. /package/dist/{server-postgresql/src/schema → schema}/doctor-cli.d.ts +0 -0
  149. /package/dist/{server-postgresql/src/schema → schema}/doctor.d.ts +0 -0
  150. /package/dist/{server-postgresql/src/schema → schema}/generate-drizzle-schema-logic.d.ts +0 -0
  151. /package/dist/{server-postgresql/src/schema → schema}/generate-drizzle-schema.d.ts +0 -0
  152. /package/dist/{server-postgresql/src/schema → schema}/introspect-db-inference.d.ts +0 -0
  153. /package/dist/{server-postgresql/src/schema → schema}/introspect-db-logic.d.ts +0 -0
  154. /package/dist/{server-postgresql/src/schema → schema}/introspect-db.d.ts +0 -0
  155. /package/dist/{server-postgresql/src/schema → schema}/test-schema.d.ts +0 -0
  156. /package/dist/{server-postgresql/src/services → services}/BranchService.d.ts +0 -0
  157. /package/dist/{server-postgresql/src/services → services}/EntityFetchService.d.ts +0 -0
  158. /package/dist/{server-postgresql/src/services → services}/RelationService.d.ts +0 -0
  159. /package/dist/{server-postgresql/src/services → services}/entity-helpers.d.ts +0 -0
  160. /package/dist/{server-postgresql/src/services → services}/entityService.d.ts +0 -0
  161. /package/dist/{server-postgresql/src/services → services}/index.d.ts +0 -0
  162. /package/dist/{server-postgresql/src/services → services}/realtimeService.d.ts +0 -0
  163. /package/dist/{server-postgresql/src/types.d.ts → types.d.ts} +0 -0
  164. /package/dist/{server-postgresql/src/utils → utils}/drizzle-conditions.d.ts +0 -0
  165. /package/dist/{server-postgresql/src/websocket.d.ts → websocket.d.ts} +0 -0
@@ -1,172 +0,0 @@
1
- import type { AdminUser } from "../controllers/client";
2
- /**
3
- * Context passed to every backend hook.
4
- * Provides information about the request that triggered the hook.
5
- * @group Backend Hooks
6
- */
7
- export interface BackendHookContext {
8
- /** The currently authenticated user making the request (if any) */
9
- requestUser?: {
10
- userId: string;
11
- roles: string[];
12
- };
13
- /** The HTTP method of the request */
14
- method: "GET" | "POST" | "PUT" | "DELETE";
15
- }
16
- /**
17
- * Hooks for intercepting Admin User data at the API boundary.
18
- *
19
- * These hooks run on the server after the database operation completes
20
- * but before the response is sent to the client.
21
- *
22
- * @group Backend Hooks
23
- */
24
- export interface UserHooks {
25
- /**
26
- * Transform a user record after it's read from the database,
27
- * before it's returned to the client.
28
- *
29
- * Return the modified user, or `null` to filter it out entirely
30
- * (the user won't appear in listings or individual fetches).
31
- */
32
- afterRead?(user: AdminUser, context: BackendHookContext): AdminUser | null | Promise<AdminUser | null>;
33
- /**
34
- * Transform user data before it's written to the database.
35
- * Runs on POST (create) and PUT (update).
36
- *
37
- * Return the (possibly modified) data to proceed with the save.
38
- * Throw an error to abort the operation.
39
- */
40
- beforeSave?(data: {
41
- email?: string;
42
- displayName?: string;
43
- roles?: string[];
44
- }, context: BackendHookContext): {
45
- email?: string;
46
- displayName?: string;
47
- roles?: string[];
48
- } | Promise<{
49
- email?: string;
50
- displayName?: string;
51
- roles?: string[];
52
- }>;
53
- /**
54
- * Called after a user is successfully created or updated.
55
- * Useful for side-effects like sending notifications.
56
- */
57
- afterSave?(user: AdminUser, context: BackendHookContext): void | Promise<void>;
58
- /**
59
- * Called before a user is deleted. Throw to prevent deletion.
60
- */
61
- beforeDelete?(userId: string, context: BackendHookContext): void | Promise<void>;
62
- /**
63
- * Called after a user is successfully deleted.
64
- */
65
- afterDelete?(userId: string, context: BackendHookContext): void | Promise<void>;
66
- }
67
- /**
68
- * Hooks for intercepting collection entity data at the REST API boundary.
69
- *
70
- * These run **after** per-collection `EntityCallbacks` (which execute inside
71
- * the DataDriver) and provide a single cross-cutting interception point for
72
- * ALL collections flowing through the REST API.
73
- *
74
- * Every callback receives the collection `slug` so you can target specific
75
- * collections or apply logic globally.
76
- *
77
- * @group Backend Hooks
78
- */
79
- export interface DataHooks {
80
- /**
81
- * Transform an entity after it's read from the database,
82
- * before it's returned to the client.
83
- *
84
- * Runs for both list (GET /:slug) and single (GET /:slug/:id) fetches.
85
- * Return the modified entity, or `null` to filter it out.
86
- *
87
- * @param slug - The collection slug (e.g. "orders", "products")
88
- * @param entity - The flattened entity object (id + values merged)
89
- * @param context - Request context (authenticated user, HTTP method)
90
- */
91
- afterRead?(slug: string, entity: Record<string, unknown>, context: BackendHookContext): Record<string, unknown> | null | Promise<Record<string, unknown> | null>;
92
- /**
93
- * Transform entity values before they are written to the database.
94
- * Runs on POST (create) and PUT (update).
95
- *
96
- * Return the (possibly modified) values. Throw to abort the save.
97
- *
98
- * @param slug - The collection slug
99
- * @param values - The raw request body values
100
- * @param entityId - The entity ID (only present on updates)
101
- * @param context - Request context
102
- */
103
- beforeSave?(slug: string, values: Record<string, unknown>, entityId: string | undefined, context: BackendHookContext): Record<string, unknown> | Promise<Record<string, unknown>>;
104
- /**
105
- * Called after an entity is successfully saved (created or updated).
106
- * Useful for side-effects like syncing to external systems.
107
- *
108
- * @param slug - The collection slug
109
- * @param entity - The saved entity (flattened)
110
- * @param context - Request context
111
- */
112
- afterSave?(slug: string, entity: Record<string, unknown>, context: BackendHookContext): void | Promise<void>;
113
- /**
114
- * Called before an entity is deleted. Throw to prevent deletion.
115
- *
116
- * @param slug - The collection slug
117
- * @param entityId - The entity ID being deleted
118
- * @param context - Request context
119
- */
120
- beforeDelete?(slug: string, entityId: string, context: BackendHookContext): void | Promise<void>;
121
- /**
122
- * Called after an entity is successfully deleted.
123
- *
124
- * @param slug - The collection slug
125
- * @param entityId - The deleted entity ID
126
- * @param context - Request context
127
- */
128
- afterDelete?(slug: string, entityId: string, context: BackendHookContext): void | Promise<void>;
129
- }
130
- /**
131
- * Backend-level hooks for intercepting data at the API boundary.
132
- *
133
- * These hooks run server-side after database operations complete and before
134
- * API responses are sent.
135
- *
136
- * - `users` — intercept admin user management endpoints
137
- * - `data` — intercept ALL collection entity data flowing through the REST API
138
- *
139
- * `data` hooks complement per-collection `EntityCallbacks`. Entity callbacks
140
- * run inside the DataDriver (close to the DB); data hooks run at the HTTP
141
- * boundary (close to the client). Use data hooks for cross-cutting concerns
142
- * like audit logging, response enrichment, or field masking.
143
- *
144
- * @example
145
- * ```typescript
146
- * const hooks: BackendHooks = {
147
- * data: {
148
- * afterRead(slug, entity, ctx) {
149
- * // Mask PII for non-admin users across all collections
150
- * if (!ctx.requestUser?.roles.includes("admin") && entity.email) {
151
- * return { ...entity, email: "***" };
152
- * }
153
- * return entity;
154
- * }
155
- * },
156
- * users: {
157
- * afterRead(user, ctx) {
158
- * if (user.email.endsWith("@system.internal")) return null;
159
- * return user;
160
- * }
161
- * }
162
- * };
163
- * ```
164
- *
165
- * @group Backend Hooks
166
- */
167
- export interface BackendHooks {
168
- /** Hooks for intercepting user management data */
169
- users?: UserHooks;
170
- /** Hooks for intercepting ALL collection entity data via the REST API */
171
- data?: DataHooks;
172
- }
@@ -1,15 +0,0 @@
1
- import type { AuthController } from "../controllers/auth";
2
- import type { RebaseData } from "../controllers/data";
3
- import type { User } from "../users";
4
- import type { EntityCollection } from "./collections";
5
- import type { AppView } from "../controllers/navigation";
6
- export type EntityCollectionsBuilder<EC extends EntityCollection = EntityCollection> = (params: {
7
- user: User | null;
8
- authController: AuthController;
9
- data: RebaseData;
10
- }) => EC[] | Promise<EC[]>;
11
- export type AppViewsBuilder = (params: {
12
- user: User | null;
13
- authController: AuthController;
14
- data: RebaseData;
15
- }) => AppView[] | Promise<AppView[]>;
@@ -1,5 +0,0 @@
1
- export type ColorScheme = {
2
- color: string;
3
- text: string;
4
- };
5
- export type ColorKey = "blue" | "cyan" | "teal" | "green" | "yellow" | "orange" | "red" | "pink" | "purple" | "gray" | "indigo" | "violet" | "fuchsia" | "rose" | "emerald";