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

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 (136) hide show
  1. package/dist/common/src/collections/CollectionRegistry.d.ts +8 -0
  2. package/dist/common/src/util/entities.d.ts +22 -0
  3. package/dist/common/src/util/relations.d.ts +14 -4
  4. package/dist/common/src/util/resolutions.d.ts +1 -1
  5. package/dist/index.es.js +1254 -591
  6. package/dist/index.es.js.map +1 -1
  7. package/dist/index.umd.js +1254 -591
  8. package/dist/index.umd.js.map +1 -1
  9. package/dist/server-postgresql/src/PostgresBackendDriver.d.ts +17 -29
  10. package/dist/server-postgresql/src/auth/services.d.ts +7 -3
  11. package/dist/server-postgresql/src/collections/PostgresCollectionRegistry.d.ts +1 -1
  12. package/dist/server-postgresql/src/connection.d.ts +34 -1
  13. package/dist/server-postgresql/src/data-transformer.d.ts +26 -4
  14. package/dist/server-postgresql/src/databasePoolManager.d.ts +2 -2
  15. package/dist/server-postgresql/src/schema/auth-schema.d.ts +139 -38
  16. package/dist/server-postgresql/src/schema/doctor-cli.d.ts +2 -0
  17. package/dist/server-postgresql/src/schema/doctor.d.ts +43 -0
  18. package/dist/server-postgresql/src/schema/generate-drizzle-schema-logic.d.ts +1 -1
  19. package/dist/server-postgresql/src/schema/test-schema.d.ts +24 -0
  20. package/dist/server-postgresql/src/services/EntityFetchService.d.ts +22 -8
  21. package/dist/server-postgresql/src/services/EntityPersistService.d.ts +1 -1
  22. package/dist/server-postgresql/src/services/RelationService.d.ts +11 -5
  23. package/dist/server-postgresql/src/services/entity-helpers.d.ts +16 -2
  24. package/dist/server-postgresql/src/services/entityService.d.ts +8 -6
  25. package/dist/server-postgresql/src/services/realtimeService.d.ts +2 -0
  26. package/dist/server-postgresql/src/utils/drizzle-conditions.d.ts +2 -2
  27. package/dist/types/src/controllers/auth.d.ts +2 -0
  28. package/dist/types/src/controllers/client.d.ts +119 -7
  29. package/dist/types/src/controllers/collection_registry.d.ts +4 -3
  30. package/dist/types/src/controllers/customization_controller.d.ts +7 -1
  31. package/dist/types/src/controllers/data.d.ts +34 -7
  32. package/dist/types/src/controllers/data_driver.d.ts +20 -28
  33. package/dist/types/src/controllers/database_admin.d.ts +2 -2
  34. package/dist/types/src/controllers/email.d.ts +34 -0
  35. package/dist/types/src/controllers/index.d.ts +1 -0
  36. package/dist/types/src/controllers/local_config_persistence.d.ts +4 -4
  37. package/dist/types/src/controllers/navigation.d.ts +5 -5
  38. package/dist/types/src/controllers/registry.d.ts +6 -3
  39. package/dist/types/src/controllers/side_entity_controller.d.ts +7 -6
  40. package/dist/types/src/controllers/storage.d.ts +24 -26
  41. package/dist/types/src/rebase_context.d.ts +8 -4
  42. package/dist/types/src/types/backend.d.ts +4 -1
  43. package/dist/types/src/types/builders.d.ts +5 -4
  44. package/dist/types/src/types/chips.d.ts +1 -1
  45. package/dist/types/src/types/collections.d.ts +169 -125
  46. package/dist/types/src/types/cron.d.ts +102 -0
  47. package/dist/types/src/types/data_source.d.ts +1 -1
  48. package/dist/types/src/types/entity_actions.d.ts +8 -8
  49. package/dist/types/src/types/entity_callbacks.d.ts +15 -15
  50. package/dist/types/src/types/entity_link_builder.d.ts +1 -1
  51. package/dist/types/src/types/entity_overrides.d.ts +2 -1
  52. package/dist/types/src/types/entity_views.d.ts +8 -8
  53. package/dist/types/src/types/export_import.d.ts +3 -3
  54. package/dist/types/src/types/index.d.ts +1 -0
  55. package/dist/types/src/types/plugins.d.ts +72 -18
  56. package/dist/types/src/types/properties.d.ts +118 -33
  57. package/dist/types/src/types/relations.d.ts +1 -1
  58. package/dist/types/src/types/slots.d.ts +30 -6
  59. package/dist/types/src/types/translations.d.ts +44 -0
  60. package/dist/types/src/types/user_management_delegate.d.ts +1 -0
  61. package/drizzle-test/0000_woozy_junta.sql +6 -0
  62. package/drizzle-test/0001_youthful_arachne.sql +1 -0
  63. package/drizzle-test/0002_lively_dragon_lord.sql +2 -0
  64. package/drizzle-test/0003_mean_king_cobra.sql +2 -0
  65. package/drizzle-test/meta/0000_snapshot.json +47 -0
  66. package/drizzle-test/meta/0001_snapshot.json +48 -0
  67. package/drizzle-test/meta/0002_snapshot.json +38 -0
  68. package/drizzle-test/meta/0003_snapshot.json +48 -0
  69. package/drizzle-test/meta/_journal.json +34 -0
  70. package/drizzle-test-out/0000_tan_trauma.sql +6 -0
  71. package/drizzle-test-out/0001_rapid_drax.sql +1 -0
  72. package/drizzle-test-out/meta/0000_snapshot.json +44 -0
  73. package/drizzle-test-out/meta/0001_snapshot.json +54 -0
  74. package/drizzle-test-out/meta/_journal.json +20 -0
  75. package/drizzle.test.config.ts +10 -0
  76. package/package.json +88 -89
  77. package/scratch.ts +41 -0
  78. package/src/PostgresBackendDriver.ts +63 -79
  79. package/src/PostgresBootstrapper.ts +7 -8
  80. package/src/auth/ensure-tables.ts +158 -86
  81. package/src/auth/services.ts +109 -50
  82. package/src/cli.ts +259 -16
  83. package/src/collections/PostgresCollectionRegistry.ts +6 -6
  84. package/src/connection.ts +70 -48
  85. package/src/data-transformer.ts +155 -116
  86. package/src/databasePoolManager.ts +6 -5
  87. package/src/history/HistoryService.ts +3 -12
  88. package/src/interfaces.ts +3 -3
  89. package/src/schema/auth-schema.ts +26 -3
  90. package/src/schema/doctor-cli.ts +47 -0
  91. package/src/schema/doctor.ts +595 -0
  92. package/src/schema/generate-drizzle-schema-logic.ts +204 -57
  93. package/src/schema/generate-drizzle-schema.ts +6 -6
  94. package/src/schema/test-schema.ts +11 -0
  95. package/src/services/BranchService.ts +5 -5
  96. package/src/services/EntityFetchService.ts +317 -188
  97. package/src/services/EntityPersistService.ts +15 -17
  98. package/src/services/RelationService.ts +299 -37
  99. package/src/services/entity-helpers.ts +39 -13
  100. package/src/services/entityService.ts +11 -9
  101. package/src/services/realtimeService.ts +58 -29
  102. package/src/utils/drizzle-conditions.ts +25 -24
  103. package/src/websocket.ts +52 -21
  104. package/test/auth-services.test.ts +131 -39
  105. package/test/batch-many-to-many-regression.test.ts +573 -0
  106. package/test/branchService.test.ts +22 -12
  107. package/test/data-transformer-hardening.test.ts +417 -0
  108. package/test/data-transformer.test.ts +175 -0
  109. package/test/doctor.test.ts +182 -0
  110. package/test/entityService.errors.test.ts +31 -16
  111. package/test/entityService.relations.test.ts +155 -59
  112. package/test/entityService.subcollection-search.test.ts +107 -57
  113. package/test/entityService.test.ts +105 -47
  114. package/test/generate-drizzle-schema.test.ts +262 -69
  115. package/test/historyService.test.ts +31 -16
  116. package/test/n-plus-one-regression.test.ts +314 -0
  117. package/test/postgresDataDriver.test.ts +260 -168
  118. package/test/realtimeService.test.ts +70 -39
  119. package/test/relation-pipeline-gaps.test.ts +637 -0
  120. package/test/relations.test.ts +492 -39
  121. package/test-drizzle-bug.ts +18 -0
  122. package/test-drizzle-out/0000_cultured_freak.sql +7 -0
  123. package/test-drizzle-out/0001_tiresome_professor_monster.sql +1 -0
  124. package/test-drizzle-out/meta/0000_snapshot.json +55 -0
  125. package/test-drizzle-out/meta/0001_snapshot.json +63 -0
  126. package/test-drizzle-out/meta/_journal.json +20 -0
  127. package/test-drizzle-prompt.sh +2 -0
  128. package/test-policy-prompt.sh +3 -0
  129. package/test-programmatic.ts +30 -0
  130. package/test-programmatic2.ts +59 -0
  131. package/test-schema-no-policies.ts +12 -0
  132. package/test_drizzle_mock.js +2 -2
  133. package/test_find_changed.mjs +3 -1
  134. package/test_hash.js +14 -0
  135. package/tsconfig.json +1 -1
  136. package/vite.config.ts +5 -5
@@ -0,0 +1,18 @@
1
+ import { pgTable, varchar, pgPolicy } from "drizzle-orm/pg-core";
2
+
3
+ export const jobs = pgTable("jobs", {
4
+ id: varchar("id").primaryKey()
5
+ }, (table) => ({
6
+ authenticated_access: pgPolicy("authenticated_access", { as: "permissive",
7
+ for: "all",
8
+ to: ["public"],
9
+ using: undefined }),
10
+ company_insert_pending: pgPolicy("company_insert_pending3", { as: "permissive",
11
+ for: "insert",
12
+ to: ["public"],
13
+ withCheck: undefined }),
14
+ new_policy: pgPolicy("new_policy", { as: "permissive",
15
+ for: "select",
16
+ to: ["public"],
17
+ using: undefined })
18
+ }));
@@ -0,0 +1,7 @@
1
+ CREATE TABLE "jobs" (
2
+ "id" varchar PRIMARY KEY NOT NULL
3
+ );
4
+ --> statement-breakpoint
5
+ ALTER TABLE "jobs" ENABLE ROW LEVEL SECURITY;--> statement-breakpoint
6
+ CREATE POLICY "authenticated_access" ON "jobs" AS PERMISSIVE FOR ALL TO public;--> statement-breakpoint
7
+ CREATE POLICY "company_insert_pending" ON "jobs" AS PERMISSIVE FOR INSERT TO public;
@@ -0,0 +1 @@
1
+ CREATE POLICY "new_policy" ON "jobs" AS PERMISSIVE FOR SELECT TO public;
@@ -0,0 +1,55 @@
1
+ {
2
+ "id": "b70a1cb0-4483-4a50-a177-894a0a408be2",
3
+ "prevId": "00000000-0000-0000-0000-000000000000",
4
+ "version": "7",
5
+ "dialect": "postgresql",
6
+ "tables": {
7
+ "public.jobs": {
8
+ "name": "jobs",
9
+ "schema": "",
10
+ "columns": {
11
+ "id": {
12
+ "name": "id",
13
+ "type": "varchar",
14
+ "primaryKey": true,
15
+ "notNull": true
16
+ }
17
+ },
18
+ "indexes": {},
19
+ "foreignKeys": {},
20
+ "compositePrimaryKeys": {},
21
+ "uniqueConstraints": {},
22
+ "policies": {
23
+ "authenticated_access": {
24
+ "name": "authenticated_access",
25
+ "as": "PERMISSIVE",
26
+ "for": "ALL",
27
+ "to": [
28
+ "public"
29
+ ]
30
+ },
31
+ "company_insert_pending": {
32
+ "name": "company_insert_pending",
33
+ "as": "PERMISSIVE",
34
+ "for": "INSERT",
35
+ "to": [
36
+ "public"
37
+ ]
38
+ }
39
+ },
40
+ "checkConstraints": {},
41
+ "isRLSEnabled": false
42
+ }
43
+ },
44
+ "enums": {},
45
+ "schemas": {},
46
+ "sequences": {},
47
+ "roles": {},
48
+ "policies": {},
49
+ "views": {},
50
+ "_meta": {
51
+ "columns": {},
52
+ "schemas": {},
53
+ "tables": {}
54
+ }
55
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "id": "78f11b92-632c-41bd-b98a-a5429ffb2fe1",
3
+ "prevId": "b70a1cb0-4483-4a50-a177-894a0a408be2",
4
+ "version": "7",
5
+ "dialect": "postgresql",
6
+ "tables": {
7
+ "public.jobs": {
8
+ "name": "jobs",
9
+ "schema": "",
10
+ "columns": {
11
+ "id": {
12
+ "name": "id",
13
+ "type": "varchar",
14
+ "primaryKey": true,
15
+ "notNull": true
16
+ }
17
+ },
18
+ "indexes": {},
19
+ "foreignKeys": {},
20
+ "compositePrimaryKeys": {},
21
+ "uniqueConstraints": {},
22
+ "policies": {
23
+ "authenticated_access": {
24
+ "name": "authenticated_access",
25
+ "as": "PERMISSIVE",
26
+ "for": "ALL",
27
+ "to": [
28
+ "public"
29
+ ]
30
+ },
31
+ "company_insert_pending": {
32
+ "name": "company_insert_pending",
33
+ "as": "PERMISSIVE",
34
+ "for": "INSERT",
35
+ "to": [
36
+ "public"
37
+ ]
38
+ },
39
+ "new_policy": {
40
+ "name": "new_policy",
41
+ "as": "PERMISSIVE",
42
+ "for": "SELECT",
43
+ "to": [
44
+ "public"
45
+ ]
46
+ }
47
+ },
48
+ "checkConstraints": {},
49
+ "isRLSEnabled": false
50
+ }
51
+ },
52
+ "enums": {},
53
+ "schemas": {},
54
+ "sequences": {},
55
+ "roles": {},
56
+ "policies": {},
57
+ "views": {},
58
+ "_meta": {
59
+ "columns": {},
60
+ "schemas": {},
61
+ "tables": {}
62
+ }
63
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "version": "7",
3
+ "dialect": "postgresql",
4
+ "entries": [
5
+ {
6
+ "idx": 0,
7
+ "version": "7",
8
+ "when": 1777412039268,
9
+ "tag": "0000_cultured_freak",
10
+ "breakpoints": true
11
+ },
12
+ {
13
+ "idx": 1,
14
+ "version": "7",
15
+ "when": 1777412067030,
16
+ "tag": "0001_tiresome_professor_monster",
17
+ "breakpoints": true
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,2 @@
1
+ cd /Users/francesco/rebase/packages/server-postgresql
2
+ pnpm drizzle-kit generate
@@ -0,0 +1,3 @@
1
+ cd /Users/francesco/rebase/packages/server-postgresql
2
+ # Try to run db generate
3
+ npx tsx src/cli.ts db generate
@@ -0,0 +1,30 @@
1
+ import { generateDrizzleJson, generateMigration } from "drizzle-kit/api";
2
+ import { pgTable, text } from "drizzle-orm/pg-core";
3
+
4
+ const users = pgTable("users", {
5
+ id: text("id").primaryKey()
6
+ });
7
+
8
+ async function run() {
9
+ const curJson = generateDrizzleJson({ users });
10
+ console.log("curJson version:", curJson.version);
11
+
12
+ const prevJson = {
13
+ "version": "7",
14
+ "dialect": "postgresql",
15
+ "tables": {},
16
+ "enums": {},
17
+ "schemas": {},
18
+ "sequences": {},
19
+ "_meta": {
20
+ "schemas": {},
21
+ "tables": {},
22
+ "columns": {}
23
+ }
24
+ };
25
+
26
+ const sql = await generateMigration(prevJson as any, curJson as any);
27
+ console.log("SQL statements:", sql);
28
+ }
29
+
30
+ run().catch(console.error);
@@ -0,0 +1,59 @@
1
+ import { generateDrizzleJson, generateMigration } from "drizzle-kit/api";
2
+ import { pgTable, text } from "drizzle-orm/pg-core";
3
+
4
+ const users = pgTable("users", {
5
+ id: text("id").primaryKey()
6
+ });
7
+ const users2 = pgTable("users2", {
8
+ id: text("id").primaryKey()
9
+ });
10
+
11
+ async function run() {
12
+ const curJson = generateDrizzleJson({ users,
13
+ users2 });
14
+
15
+ const prevJson = {
16
+ "id": "mock-prev",
17
+ "prevId": "mock-prev-prev",
18
+ "version": "7",
19
+ "dialect": "postgresql",
20
+ "tables": {
21
+ "users": {
22
+ "name": "users",
23
+ "schema": "",
24
+ "columns": {
25
+ "id": {
26
+ "name": "id",
27
+ "type": "text",
28
+ "primaryKey": true,
29
+ "notNull": true
30
+ }
31
+ },
32
+ "indexes": {},
33
+ "foreignKeys": {},
34
+ "compositePrimaryKeys": {},
35
+ "uniqueConstraints": {}
36
+ }
37
+ },
38
+ "enums": {},
39
+ "schemas": {},
40
+ "sequences": {},
41
+ "roles": {},
42
+ "policies": {},
43
+ "views": {},
44
+ "_meta": {
45
+ "schemas": {},
46
+ "tables": {},
47
+ "columns": {}
48
+ }
49
+ };
50
+
51
+ try {
52
+ const sql = await generateMigration(prevJson as any, curJson as any);
53
+ console.log("SQL statements:", sql);
54
+ } catch (e) {
55
+ console.error("Error:", e);
56
+ }
57
+ }
58
+
59
+ run().catch(console.error);
@@ -0,0 +1,12 @@
1
+ import { pgTable, varchar, integer, pgPolicy } from "drizzle-orm/pg-core";
2
+ import { sql } from "drizzle-orm";
3
+
4
+ export const users = pgTable("users", {
5
+ id: integer("id").primaryKey(),
6
+ name: varchar("name")
7
+ }, (table) => ([
8
+ pgPolicy("test_policy_renamed", { as: "permissive",
9
+ for: "all",
10
+ to: ["public"],
11
+ using: sql`true` })
12
+ ])).enableRLS();
@@ -1,3 +1,3 @@
1
- const { sql } = require('drizzle-orm');
2
- const q = sql`ARRAY[${sql.join(['a', 'b'].map(f => sql`${f}`), sql`, `)}]::text[]`;
1
+ const { sql } = require("drizzle-orm");
2
+ const q = sql`ARRAY[${sql.join(["a", "b"].map(f => sql`${f}`), sql`, `)}]::text[]`;
3
3
  console.log(JSON.stringify(q, null, 2));
@@ -27,4 +27,6 @@ function findChangedFields(oldValues, newValues) {
27
27
  return changed;
28
28
  }
29
29
 
30
- console.log(findChangedFields({ title: "old", tags: [{ id: 1 }] }, { title: "new", tags: [{ id: 2 }] }));
30
+ console.log(findChangedFields({ title: "old",
31
+ tags: [{ id: 1 }] }, { title: "new",
32
+ tags: [{ id: 2 }] }));
package/test_hash.js ADDED
@@ -0,0 +1,14 @@
1
+ const { generateSchema } = require("./dist/schema/generate-drizzle-schema-logic");
2
+
3
+ const collections1 = [{
4
+ slug: "test1",
5
+ table: "test_hash",
6
+ name: "Test",
7
+ properties: { data: { type: "string" } },
8
+ securityRules: [
9
+ { operation: "select",
10
+ roles: ["admin", "user"] }
11
+ ]
12
+ }];
13
+
14
+ generateSchema(collections1).then(console.log).catch(console.error);
package/tsconfig.json CHANGED
@@ -30,7 +30,7 @@
30
30
  "@rebasepro/types": [
31
31
  "../types/src"
32
32
  ],
33
- "@rebasepro/cms": [
33
+ "@rebasepro/admin": [
34
34
  "../types/src/cms"
35
35
  ],
36
36
  "@rebasepro/common": [
package/vite.config.ts CHANGED
@@ -22,14 +22,14 @@ const CONSUMER_EXTERNALS = [
22
22
  "chokidar",
23
23
  "fsevents",
24
24
  "ws",
25
- "ts-morph",
25
+ "ts-morph"
26
26
  ];
27
27
  const isExternal = (id: string) => {
28
28
  if (id.startsWith(".") || path.isAbsolute(id)) return false;
29
29
  // Externalize server-core to prevent singleton duplication (e.g. JWT config, etc)
30
30
  if (id === "@rebasepro/server-core" || id.startsWith("@rebasepro/server-core/")) return true;
31
31
  // Inline other @rebasepro/* packages (like common, types)
32
-
32
+
33
33
  // Externalize only deps the consumer app explicitly installs
34
34
  if (CONSUMER_EXTERNALS.some(ext => id === ext || id.startsWith(ext + "/"))) return true;
35
35
  // Externalize Node built-ins
@@ -67,15 +67,15 @@ export default defineConfig(() => ({
67
67
  "@rebasepro/common": path.resolve(__dirname, "../common/src"),
68
68
  "@rebasepro/server-core": path.resolve(__dirname, "../server-core/src"),
69
69
  "@rebasepro/types": path.resolve(__dirname, "../types/src"),
70
- "@rebasepro/utils": path.resolve(__dirname, "../utils/src"),
70
+ "@rebasepro/utils": path.resolve(__dirname, "../utils/src")
71
71
  }
72
72
  },
73
73
  plugins: [
74
74
  react({
75
75
  babel: {
76
76
  plugins: [
77
- ["babel-plugin-react-compiler", ReactCompilerConfig],
78
- ],
77
+ ["babel-plugin-react-compiler", ReactCompilerConfig]
78
+ ]
79
79
  }
80
80
  })
81
81
  ]