@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.
- package/dist/{server-postgresql/src/PostgresAdapter.d.ts → PostgresAdapter.d.ts} +1 -1
- package/dist/{server-postgresql/src/PostgresBackendDriver.d.ts → PostgresBackendDriver.d.ts} +2 -2
- package/dist/{server-postgresql/src/PostgresBootstrapper.d.ts → PostgresBootstrapper.d.ts} +11 -1
- package/dist/{server-postgresql/src/collections → collections}/PostgresCollectionRegistry.d.ts +4 -0
- package/dist/index.es.js +10168 -11145
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +10735 -11429
- package/dist/index.umd.js.map +1 -1
- package/dist/{server-postgresql/src/services → services}/EntityPersistService.d.ts +0 -14
- package/dist/utils/pg-error-utils.d.ts +55 -0
- package/package.json +24 -21
- package/src/PostgresAdapter.ts +9 -10
- package/src/PostgresBackendDriver.ts +134 -121
- package/src/PostgresBootstrapper.ts +86 -13
- package/src/auth/ensure-tables.ts +28 -5
- package/src/auth/services.ts +28 -18
- package/src/cli.ts +99 -96
- package/src/collections/PostgresCollectionRegistry.ts +7 -0
- package/src/connection.ts +11 -6
- package/src/data-transformer.ts +16 -14
- package/src/databasePoolManager.ts +3 -2
- package/src/history/HistoryService.ts +3 -2
- package/src/history/ensure-history-table.ts +5 -4
- package/src/schema/auth-schema.ts +1 -2
- package/src/schema/doctor-cli.ts +2 -1
- package/src/schema/doctor.ts +40 -37
- package/src/schema/generate-drizzle-schema-logic.ts +56 -18
- package/src/schema/generate-drizzle-schema.ts +11 -11
- package/src/schema/introspect-db-inference.ts +25 -25
- package/src/schema/introspect-db-logic.ts +38 -38
- package/src/schema/introspect-db.ts +28 -27
- package/src/services/BranchService.ts +14 -0
- package/src/services/EntityFetchService.ts +28 -25
- package/src/services/EntityPersistService.ts +11 -141
- package/src/services/RelationService.ts +57 -37
- package/src/services/entity-helpers.ts +6 -2
- package/src/services/realtimeService.ts +45 -32
- package/src/utils/drizzle-conditions.ts +31 -15
- package/src/utils/pg-error-utils.ts +211 -0
- package/src/websocket.ts +15 -12
- package/test/auth-services.test.ts +36 -19
- package/test/batch-many-to-many-regression.test.ts +119 -39
- package/test/data-transformer-hardening.test.ts +67 -33
- package/test/data-transformer.test.ts +4 -2
- package/test/doctor.test.ts +10 -5
- package/test/drizzle-conditions.test.ts +59 -6
- package/test/generate-drizzle-schema.test.ts +65 -40
- package/test/introspect-db-generation.test.ts +179 -81
- package/test/introspect-db-utils.test.ts +92 -37
- package/test/mocks/chalk.cjs +7 -0
- package/test/pg-error-utils.test.ts +221 -0
- package/test/postgresDataDriver.test.ts +14 -5
- package/test/property-ordering.test.ts +126 -79
- package/test/realtimeService.test.ts +6 -2
- package/test/relation-pipeline-gaps.test.ts +84 -36
- package/test/relations.test.ts +247 -0
- package/test/unmapped-tables-safety.test.ts +14 -6
- package/test/websocket.test.ts +1 -1
- package/tsconfig.json +5 -0
- package/tsconfig.prod.json +3 -0
- package/vite.config.ts +5 -5
- package/dist/common/src/collections/CollectionRegistry.d.ts +0 -56
- package/dist/common/src/collections/default-collections.d.ts +0 -9
- package/dist/common/src/collections/index.d.ts +0 -2
- package/dist/common/src/data/buildRebaseData.d.ts +0 -14
- package/dist/common/src/data/query_builder.d.ts +0 -55
- package/dist/common/src/index.d.ts +0 -4
- package/dist/common/src/util/builders.d.ts +0 -57
- package/dist/common/src/util/callbacks.d.ts +0 -6
- package/dist/common/src/util/collections.d.ts +0 -11
- package/dist/common/src/util/common.d.ts +0 -2
- package/dist/common/src/util/conditions.d.ts +0 -26
- package/dist/common/src/util/entities.d.ts +0 -58
- package/dist/common/src/util/enums.d.ts +0 -3
- package/dist/common/src/util/index.d.ts +0 -16
- package/dist/common/src/util/navigation_from_path.d.ts +0 -34
- package/dist/common/src/util/navigation_utils.d.ts +0 -20
- package/dist/common/src/util/parent_references_from_path.d.ts +0 -6
- package/dist/common/src/util/paths.d.ts +0 -14
- package/dist/common/src/util/permissions.d.ts +0 -14
- package/dist/common/src/util/references.d.ts +0 -2
- package/dist/common/src/util/relations.d.ts +0 -22
- package/dist/common/src/util/resolutions.d.ts +0 -72
- package/dist/common/src/util/storage.d.ts +0 -24
- package/dist/types/src/controllers/analytics_controller.d.ts +0 -7
- package/dist/types/src/controllers/auth.d.ts +0 -104
- package/dist/types/src/controllers/client.d.ts +0 -168
- package/dist/types/src/controllers/collection_registry.d.ts +0 -46
- package/dist/types/src/controllers/customization_controller.d.ts +0 -60
- package/dist/types/src/controllers/data.d.ts +0 -207
- package/dist/types/src/controllers/data_driver.d.ts +0 -218
- package/dist/types/src/controllers/database_admin.d.ts +0 -11
- package/dist/types/src/controllers/dialogs_controller.d.ts +0 -36
- package/dist/types/src/controllers/effective_role.d.ts +0 -4
- package/dist/types/src/controllers/email.d.ts +0 -36
- package/dist/types/src/controllers/index.d.ts +0 -18
- package/dist/types/src/controllers/local_config_persistence.d.ts +0 -20
- package/dist/types/src/controllers/navigation.d.ts +0 -225
- package/dist/types/src/controllers/registry.d.ts +0 -63
- package/dist/types/src/controllers/side_dialogs_controller.d.ts +0 -67
- package/dist/types/src/controllers/side_entity_controller.d.ts +0 -97
- package/dist/types/src/controllers/snackbar.d.ts +0 -24
- package/dist/types/src/controllers/storage.d.ts +0 -171
- package/dist/types/src/index.d.ts +0 -4
- package/dist/types/src/rebase_context.d.ts +0 -122
- package/dist/types/src/types/auth_adapter.d.ts +0 -301
- package/dist/types/src/types/backend.d.ts +0 -571
- package/dist/types/src/types/backend_hooks.d.ts +0 -172
- package/dist/types/src/types/builders.d.ts +0 -15
- package/dist/types/src/types/chips.d.ts +0 -5
- package/dist/types/src/types/collections.d.ts +0 -961
- package/dist/types/src/types/component_ref.d.ts +0 -47
- package/dist/types/src/types/cron.d.ts +0 -102
- package/dist/types/src/types/data_source.d.ts +0 -64
- package/dist/types/src/types/database_adapter.d.ts +0 -94
- package/dist/types/src/types/entities.d.ts +0 -145
- package/dist/types/src/types/entity_actions.d.ts +0 -104
- package/dist/types/src/types/entity_callbacks.d.ts +0 -173
- package/dist/types/src/types/entity_link_builder.d.ts +0 -7
- package/dist/types/src/types/entity_overrides.d.ts +0 -10
- package/dist/types/src/types/entity_views.d.ts +0 -87
- package/dist/types/src/types/export_import.d.ts +0 -21
- package/dist/types/src/types/formex.d.ts +0 -40
- package/dist/types/src/types/index.d.ts +0 -28
- package/dist/types/src/types/locales.d.ts +0 -4
- package/dist/types/src/types/modify_collections.d.ts +0 -5
- package/dist/types/src/types/plugins.d.ts +0 -282
- package/dist/types/src/types/properties.d.ts +0 -1173
- package/dist/types/src/types/property_config.d.ts +0 -74
- package/dist/types/src/types/relations.d.ts +0 -336
- package/dist/types/src/types/slots.d.ts +0 -262
- package/dist/types/src/types/translations.d.ts +0 -900
- package/dist/types/src/types/user_management_delegate.d.ts +0 -86
- package/dist/types/src/types/websockets.d.ts +0 -78
- package/dist/types/src/users/index.d.ts +0 -1
- package/dist/types/src/users/user.d.ts +0 -50
- /package/dist/{server-postgresql/src/auth → auth}/ensure-tables.d.ts +0 -0
- /package/dist/{server-postgresql/src/auth → auth}/services.d.ts +0 -0
- /package/dist/{server-postgresql/src/cli.d.ts → cli.d.ts} +0 -0
- /package/dist/{server-postgresql/src/connection.d.ts → connection.d.ts} +0 -0
- /package/dist/{server-postgresql/src/data-transformer.d.ts → data-transformer.d.ts} +0 -0
- /package/dist/{server-postgresql/src/databasePoolManager.d.ts → databasePoolManager.d.ts} +0 -0
- /package/dist/{server-postgresql/src/history → history}/HistoryService.d.ts +0 -0
- /package/dist/{server-postgresql/src/history → history}/ensure-history-table.d.ts +0 -0
- /package/dist/{server-postgresql/src/index.d.ts → index.d.ts} +0 -0
- /package/dist/{server-postgresql/src/interfaces.d.ts → interfaces.d.ts} +0 -0
- /package/dist/{server-postgresql/src/schema → schema}/auth-schema.d.ts +0 -0
- /package/dist/{server-postgresql/src/schema → schema}/doctor-cli.d.ts +0 -0
- /package/dist/{server-postgresql/src/schema → schema}/doctor.d.ts +0 -0
- /package/dist/{server-postgresql/src/schema → schema}/generate-drizzle-schema-logic.d.ts +0 -0
- /package/dist/{server-postgresql/src/schema → schema}/generate-drizzle-schema.d.ts +0 -0
- /package/dist/{server-postgresql/src/schema → schema}/introspect-db-inference.d.ts +0 -0
- /package/dist/{server-postgresql/src/schema → schema}/introspect-db-logic.d.ts +0 -0
- /package/dist/{server-postgresql/src/schema → schema}/introspect-db.d.ts +0 -0
- /package/dist/{server-postgresql/src/schema → schema}/test-schema.d.ts +0 -0
- /package/dist/{server-postgresql/src/services → services}/BranchService.d.ts +0 -0
- /package/dist/{server-postgresql/src/services → services}/EntityFetchService.d.ts +0 -0
- /package/dist/{server-postgresql/src/services → services}/RelationService.d.ts +0 -0
- /package/dist/{server-postgresql/src/services → services}/entity-helpers.d.ts +0 -0
- /package/dist/{server-postgresql/src/services → services}/entityService.d.ts +0 -0
- /package/dist/{server-postgresql/src/services → services}/index.d.ts +0 -0
- /package/dist/{server-postgresql/src/services → services}/realtimeService.d.ts +0 -0
- /package/dist/{server-postgresql/src/types.d.ts → types.d.ts} +0 -0
- /package/dist/{server-postgresql/src/utils → utils}/drizzle-conditions.d.ts +0 -0
- /package/dist/{server-postgresql/src/websocket.d.ts → websocket.d.ts} +0 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { beforeEach, describe, expect, it, jest } from "@jest/globals";
|
|
2
2
|
import { eq } from "drizzle-orm";
|
|
3
|
-
import { integer, pgTable, primaryKey, serial, varchar } from "drizzle-orm/pg-core";
|
|
3
|
+
import { integer, pgTable, primaryKey, serial, varchar, text } from "drizzle-orm/pg-core";
|
|
4
4
|
import { EntityCollection, Relation } from "@rebasepro/types";
|
|
5
5
|
import { PostgresCollectionRegistry } from "../src/collections/PostgresCollectionRegistry";
|
|
6
6
|
import { DrizzleConditionBuilder } from "../src/utils/drizzle-conditions";
|
|
7
|
+
import { getColumnMeta } from "../src/services/entity-helpers";
|
|
7
8
|
|
|
8
9
|
// Mock tables for testing
|
|
9
10
|
const mockAuthorsTable = pgTable("authors", {
|
|
@@ -900,37 +901,89 @@ describe("DrizzleConditionBuilder - Filter Operators", () => {
|
|
|
900
901
|
id: serial("id").primaryKey(),
|
|
901
902
|
name: varchar("name").notNull(),
|
|
902
903
|
email: varchar("email").notNull(),
|
|
903
|
-
age: integer("age")
|
|
904
|
+
age: integer("age"),
|
|
905
|
+
tags: text("tags").array()
|
|
904
906
|
});
|
|
905
907
|
|
|
906
908
|
describe("buildSingleFilterCondition - array-contains", () => {
|
|
907
|
-
|
|
909
|
+
const { PgDialect } = require("drizzle-orm/pg-core");
|
|
910
|
+
const pgDialect = new PgDialect();
|
|
911
|
+
|
|
912
|
+
it("should generate a native array condition for native array columns", () => {
|
|
913
|
+
const condition = DrizzleConditionBuilder.buildSingleFilterCondition(
|
|
914
|
+
mockUsersTable.tags,
|
|
915
|
+
"array-contains",
|
|
916
|
+
"featured"
|
|
917
|
+
);
|
|
918
|
+
expect(condition).not.toBeNull();
|
|
919
|
+
const query = pgDialect.sqlToQuery(condition!);
|
|
920
|
+
expect(query.sql).toBe('"users"."tags" @> ARRAY[$1]');
|
|
921
|
+
expect(query.params).toEqual(["featured"]);
|
|
922
|
+
});
|
|
923
|
+
|
|
924
|
+
it("should generate a JSONB condition for non-native array columns", () => {
|
|
908
925
|
const condition = DrizzleConditionBuilder.buildSingleFilterCondition(
|
|
909
926
|
mockUsersTable.name,
|
|
910
927
|
"array-contains",
|
|
911
928
|
"featured"
|
|
912
929
|
);
|
|
913
930
|
expect(condition).not.toBeNull();
|
|
931
|
+
const query = pgDialect.sqlToQuery(condition!);
|
|
932
|
+
expect(query.sql).toBe('"users"."name" @> $1');
|
|
933
|
+
expect(query.params).toEqual(['["featured"]']);
|
|
914
934
|
});
|
|
915
935
|
});
|
|
916
936
|
|
|
917
937
|
describe("buildSingleFilterCondition - array-contains-any", () => {
|
|
918
|
-
|
|
938
|
+
const { PgDialect } = require("drizzle-orm/pg-core");
|
|
939
|
+
const pgDialect = new PgDialect();
|
|
940
|
+
|
|
941
|
+
it("should generate a native array overlap condition for native array columns", () => {
|
|
942
|
+
const condition = DrizzleConditionBuilder.buildSingleFilterCondition(
|
|
943
|
+
mockUsersTable.tags,
|
|
944
|
+
"array-contains-any",
|
|
945
|
+
["featured", "popular", "trending"]
|
|
946
|
+
);
|
|
947
|
+
expect(condition).not.toBeNull();
|
|
948
|
+
const query = pgDialect.sqlToQuery(condition!);
|
|
949
|
+
expect(query.sql).toBe('"users"."tags" && ARRAY[$1, $2, $3]');
|
|
950
|
+
expect(query.params).toEqual(["featured", "popular", "trending"]);
|
|
951
|
+
});
|
|
952
|
+
|
|
953
|
+
it("should generate a JSONB overlap (?|) condition for non-native array columns", () => {
|
|
919
954
|
const condition = DrizzleConditionBuilder.buildSingleFilterCondition(
|
|
920
955
|
mockUsersTable.name,
|
|
921
956
|
"array-contains-any",
|
|
922
957
|
["featured", "popular", "trending"]
|
|
923
958
|
);
|
|
924
959
|
expect(condition).not.toBeNull();
|
|
960
|
+
const query = pgDialect.sqlToQuery(condition!);
|
|
961
|
+
expect(query.sql).toBe('"users"."name" ?| array[$1, $2, $3]');
|
|
962
|
+
expect(query.params).toEqual(["featured", "popular", "trending"]);
|
|
963
|
+
});
|
|
964
|
+
|
|
965
|
+
it("should fallback to native array-contains for native array columns with single value", () => {
|
|
966
|
+
const condition = DrizzleConditionBuilder.buildSingleFilterCondition(
|
|
967
|
+
mockUsersTable.tags,
|
|
968
|
+
"array-contains-any",
|
|
969
|
+
"featured"
|
|
970
|
+
);
|
|
971
|
+
expect(condition).not.toBeNull();
|
|
972
|
+
const query = pgDialect.sqlToQuery(condition!);
|
|
973
|
+
expect(query.sql).toBe('"users"."tags" @> ARRAY[$1]');
|
|
974
|
+
expect(query.params).toEqual(["featured"]);
|
|
925
975
|
});
|
|
926
976
|
|
|
927
|
-
it("should fallback to array-contains for
|
|
977
|
+
it("should fallback to JSONB array-contains for non-native array columns with single value", () => {
|
|
928
978
|
const condition = DrizzleConditionBuilder.buildSingleFilterCondition(
|
|
929
979
|
mockUsersTable.name,
|
|
930
980
|
"array-contains-any",
|
|
931
981
|
"featured"
|
|
932
982
|
);
|
|
933
983
|
expect(condition).not.toBeNull();
|
|
984
|
+
const query = pgDialect.sqlToQuery(condition!);
|
|
985
|
+
expect(query.sql).toBe('"users"."name" @> $1');
|
|
986
|
+
expect(query.params).toEqual(['["featured"]']);
|
|
934
987
|
});
|
|
935
988
|
});
|
|
936
989
|
|
|
@@ -1017,7 +1070,7 @@ describe("DrizzleConditionBuilder - Filter Operators", () => {
|
|
|
1017
1070
|
42
|
|
1018
1071
|
);
|
|
1019
1072
|
expect(condition).toBeNull();
|
|
1020
|
-
expect(warnSpy).toHaveBeenCalledWith("Unsupported filter operation: unknown-op");
|
|
1073
|
+
expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining("Unsupported filter operation: unknown-op"));
|
|
1021
1074
|
warnSpy.mockRestore();
|
|
1022
1075
|
});
|
|
1023
1076
|
});
|
|
@@ -471,7 +471,7 @@ roles: ["admin"] }
|
|
|
471
471
|
}];
|
|
472
472
|
|
|
473
473
|
const result = await generateSchema(collections);
|
|
474
|
-
expect(result).toContain("string_to_array(auth.roles(), ',')
|
|
474
|
+
expect(result).toContain("string_to_array(auth.roles(), ',') && ARRAY['admin']");
|
|
475
475
|
});
|
|
476
476
|
|
|
477
477
|
it("should safely handle complex sub-string roles overlapping like 'view' and 'viewer'", async () => {
|
|
@@ -489,7 +489,7 @@ roles: ["view"] } // Should not match 'viewer'
|
|
|
489
489
|
const result = await generateSchema(collections);
|
|
490
490
|
// Before array change: auth.roles() ~ 'view' would match 'viewer'
|
|
491
491
|
// Now: array intersection prevents this
|
|
492
|
-
expect(result).toContain("string_to_array(auth.roles(), ',')
|
|
492
|
+
expect(result).toContain("string_to_array(auth.roles(), ',') && ARRAY['view']");
|
|
493
493
|
});
|
|
494
494
|
|
|
495
495
|
it("should securely handle multiple allowed roles", async () => {
|
|
@@ -505,7 +505,7 @@ roles: ["admin", "editor", "super-admin"] }
|
|
|
505
505
|
}];
|
|
506
506
|
|
|
507
507
|
const result = await generateSchema(collections);
|
|
508
|
-
expect(result).toContain("string_to_array(auth.roles(), ',')
|
|
508
|
+
expect(result).toContain("string_to_array(auth.roles(), ',') && ARRAY['admin','editor','super-admin']");
|
|
509
509
|
});
|
|
510
510
|
|
|
511
511
|
it("should combine roles with access: public", async () => {
|
|
@@ -523,7 +523,7 @@ access: "public" }
|
|
|
523
523
|
|
|
524
524
|
const result = await generateSchema(collections);
|
|
525
525
|
// Should be (true) AND (role check)
|
|
526
|
-
expect(result).toContain("(true) AND (string_to_array(auth.roles(), ',')
|
|
526
|
+
expect(result).toContain("(true) AND (string_to_array(auth.roles(), ',') && ARRAY['admin','manager'])");
|
|
527
527
|
});
|
|
528
528
|
|
|
529
529
|
it("should combine roles with ownerField", async () => {
|
|
@@ -545,7 +545,7 @@ ownerField: "user_id" }
|
|
|
545
545
|
const result = await generateSchema(collections);
|
|
546
546
|
// Should combine owner check AND role check
|
|
547
547
|
expect(result).toContain("auth.uid()");
|
|
548
|
-
expect(result).toContain("string_to_array(auth.roles(), ',')
|
|
548
|
+
expect(result).toContain("string_to_array(auth.roles(), ',') && ARRAY['editor']");
|
|
549
549
|
expect(result).toContain("AND");
|
|
550
550
|
});
|
|
551
551
|
|
|
@@ -690,7 +690,8 @@ using: "{is_locked} = false" }
|
|
|
690
690
|
name: "Secure Data",
|
|
691
691
|
properties: { title: { type: "string" } },
|
|
692
692
|
securityRules: [
|
|
693
|
-
{ operation: "select",
|
|
693
|
+
{ operation: "select",
|
|
694
|
+
access: "public" }
|
|
694
695
|
]
|
|
695
696
|
}];
|
|
696
697
|
|
|
@@ -731,7 +732,7 @@ roles: ["admin"] }
|
|
|
731
732
|
]
|
|
732
733
|
}];
|
|
733
734
|
const result = await generateSchema(collections);
|
|
734
|
-
expect(result).toContain("string_to_array(auth.roles(), ',')
|
|
735
|
+
expect(result).toContain("string_to_array(auth.roles(), ',') && ARRAY['admin']");
|
|
735
736
|
});
|
|
736
737
|
it("should generate multiple policies from operations array", async () => {
|
|
737
738
|
const collections: EntityCollection[] = [{
|
|
@@ -845,7 +846,7 @@ using: "true" }
|
|
|
845
846
|
}];
|
|
846
847
|
const result = await generateSchema(collections);
|
|
847
848
|
// Should be (true) AND (role check) — same effect as access: "public" + roles
|
|
848
|
-
expect(result).toContain("(true) AND (string_to_array(auth.roles(), ',')
|
|
849
|
+
expect(result).toContain("(true) AND (string_to_array(auth.roles(), ',') && ARRAY['admin'])");
|
|
849
850
|
});
|
|
850
851
|
it("should use pgRoles instead of default 'public' when specified", async () => {
|
|
851
852
|
const collections: EntityCollection[] = [{
|
|
@@ -956,7 +957,7 @@ roles: ["admin", "user"] }
|
|
|
956
957
|
expect(matchUnsorted![1]).toEqual(matchSorted![1]);
|
|
957
958
|
|
|
958
959
|
// The actual generated sql bodies should also be identical due to sorting
|
|
959
|
-
expect(resultUnsorted).toContain("string_to_array(auth.roles(), ',')
|
|
960
|
+
expect(resultUnsorted).toContain("string_to_array(auth.roles(), ',') && ARRAY['admin','manager','user']");
|
|
960
961
|
expect(resultUnsorted).toContain('to: ["app_role", "service_role"]');
|
|
961
962
|
});
|
|
962
963
|
});
|
|
@@ -1056,14 +1057,14 @@ describe("generateDrizzleSchema columnName support", () => {
|
|
|
1056
1057
|
employee_number_140a: {
|
|
1057
1058
|
type: "string",
|
|
1058
1059
|
name: "Employee Number 140a",
|
|
1059
|
-
columnName: "employee_number_140a"
|
|
1060
|
+
columnName: "employee_number_140a"
|
|
1060
1061
|
},
|
|
1061
1062
|
contract_number_140a: {
|
|
1062
1063
|
type: "string",
|
|
1063
1064
|
name: "Contract Number 140a",
|
|
1064
|
-
columnName: "contract_number_140a"
|
|
1065
|
-
}
|
|
1066
|
-
}
|
|
1065
|
+
columnName: "contract_number_140a"
|
|
1066
|
+
}
|
|
1067
|
+
}
|
|
1067
1068
|
}];
|
|
1068
1069
|
|
|
1069
1070
|
const result = await generateSchema(collections);
|
|
@@ -1086,10 +1087,10 @@ describe("generateDrizzleSchema columnName support", () => {
|
|
|
1086
1087
|
properties: {
|
|
1087
1088
|
productName: {
|
|
1088
1089
|
type: "string",
|
|
1089
|
-
name: "Product Name"
|
|
1090
|
+
name: "Product Name"
|
|
1090
1091
|
// No columnName — should derive from key
|
|
1091
|
-
}
|
|
1092
|
-
}
|
|
1092
|
+
}
|
|
1093
|
+
}
|
|
1093
1094
|
}];
|
|
1094
1095
|
|
|
1095
1096
|
const result = await generateSchema(collections);
|
|
@@ -1109,14 +1110,14 @@ describe("generateDrizzleSchema columnName support", () => {
|
|
|
1109
1110
|
fee_number_140a: {
|
|
1110
1111
|
type: "string",
|
|
1111
1112
|
name: "Fee Number",
|
|
1112
|
-
columnName: "fee_number_140a"
|
|
1113
|
+
columnName: "fee_number_140a"
|
|
1113
1114
|
},
|
|
1114
1115
|
// Manually added: no columnName
|
|
1115
1116
|
displayName: {
|
|
1116
1117
|
type: "string",
|
|
1117
|
-
name: "Display Name"
|
|
1118
|
-
}
|
|
1119
|
-
}
|
|
1118
|
+
name: "Display Name"
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1120
1121
|
}];
|
|
1121
1122
|
|
|
1122
1123
|
const result = await generateSchema(collections);
|
|
@@ -1137,24 +1138,24 @@ describe("generateDrizzleSchema columnName support", () => {
|
|
|
1137
1138
|
count_v2: {
|
|
1138
1139
|
type: "number",
|
|
1139
1140
|
name: "Count V2",
|
|
1140
|
-
columnName: "count_v2"
|
|
1141
|
+
columnName: "count_v2"
|
|
1141
1142
|
},
|
|
1142
1143
|
is_active_v2: {
|
|
1143
1144
|
type: "boolean",
|
|
1144
1145
|
name: "Is Active V2",
|
|
1145
|
-
columnName: "is_active_v2"
|
|
1146
|
+
columnName: "is_active_v2"
|
|
1146
1147
|
},
|
|
1147
1148
|
created_at_v2: {
|
|
1148
1149
|
type: "date",
|
|
1149
1150
|
name: "Created At V2",
|
|
1150
|
-
columnName: "created_at_v2"
|
|
1151
|
+
columnName: "created_at_v2"
|
|
1151
1152
|
},
|
|
1152
1153
|
metadata_v2: {
|
|
1153
1154
|
type: "map",
|
|
1154
1155
|
name: "Metadata V2",
|
|
1155
|
-
columnName: "metadata_v2"
|
|
1156
|
-
}
|
|
1157
|
-
}
|
|
1156
|
+
columnName: "metadata_v2"
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1158
1159
|
}];
|
|
1159
1160
|
|
|
1160
1161
|
const result = await generateSchema(collections);
|
|
@@ -1173,20 +1174,44 @@ describe("generateDrizzleSchema columnName support", () => {
|
|
|
1173
1174
|
table: "company_billing_config",
|
|
1174
1175
|
name: "Company Billing Config",
|
|
1175
1176
|
properties: {
|
|
1176
|
-
employee_number_140a: { type: "string",
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1177
|
+
employee_number_140a: { type: "string",
|
|
1178
|
+
name: "Employee Number",
|
|
1179
|
+
columnName: "employee_number_140a" },
|
|
1180
|
+
contract_number_140a: { type: "string",
|
|
1181
|
+
name: "Contract Number",
|
|
1182
|
+
columnName: "contract_number_140a" },
|
|
1183
|
+
amount: { type: "number",
|
|
1184
|
+
name: "Amount" },
|
|
1185
|
+
id: { type: "number",
|
|
1186
|
+
name: "ID",
|
|
1187
|
+
isId: "increment" },
|
|
1188
|
+
service_provider_140a: { type: "string",
|
|
1189
|
+
name: "Service Provider",
|
|
1190
|
+
columnName: "service_provider_140a" },
|
|
1191
|
+
internal_area_code_140a: { type: "string",
|
|
1192
|
+
name: "Internal Area Code",
|
|
1193
|
+
columnName: "internal_area_code_140a" },
|
|
1194
|
+
fee_number_140a: { type: "string",
|
|
1195
|
+
name: "Fee Number",
|
|
1196
|
+
columnName: "fee_number_140a" },
|
|
1197
|
+
receiver_market_participant_140a: { type: "string",
|
|
1198
|
+
name: "Receiver Market Participant",
|
|
1199
|
+
columnName: "receiver_market_participant_140a" },
|
|
1200
|
+
employee_value_number_140a: { type: "string",
|
|
1201
|
+
name: "Employee Value Number",
|
|
1202
|
+
columnName: "employee_value_number_140a" },
|
|
1203
|
+
sender_market_participant_140a: { type: "string",
|
|
1204
|
+
name: "Sender Market Participant",
|
|
1205
|
+
columnName: "sender_market_participant_140a" },
|
|
1206
|
+
processing_indicator_140a: { type: "string",
|
|
1207
|
+
name: "Processing Indicator",
|
|
1208
|
+
columnName: "processing_indicator_140a" },
|
|
1209
|
+
insurance_id_140a: { type: "string",
|
|
1210
|
+
name: "Insurance ID",
|
|
1211
|
+
columnName: "insurance_id_140a" },
|
|
1212
|
+
company_id: { type: "number",
|
|
1213
|
+
name: "Company ID" }
|
|
1214
|
+
}
|
|
1190
1215
|
}];
|
|
1191
1216
|
|
|
1192
1217
|
const result = await generateSchema(collections);
|