simpledi-app-generator 0.0.8 → 0.0.9

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 (29) hide show
  1. package/dist/generate_crud_use_cases.js +71 -32
  2. package/dist/generate_crud_use_cases.js.map +1 -1
  3. package/dist/generate_skeleton.d.ts.map +1 -1
  4. package/dist/generate_skeleton.js +57 -2
  5. package/dist/generate_skeleton.js.map +1 -1
  6. package/dist/templates/schema.ts +2 -0
  7. package/dist/templates/src/core/user/IUserRepository.ts +8 -0
  8. package/dist/templates/src/core/user/IUserService.ts +8 -0
  9. package/dist/templates/src/core/user/User.ts +71 -0
  10. package/dist/templates/src/core/user/UserModule.ts +7 -0
  11. package/dist/templates/src/core/user/UserRepository.spec.ts +63 -0
  12. package/dist/templates/src/core/user/UserRepository.ts +31 -0
  13. package/dist/templates/src/core/user/UserRepositoryModule.ts +15 -0
  14. package/dist/templates/src/core/user/UserService.ts +34 -0
  15. package/dist/templates/src/core/user/UserServiceModule.ts +14 -0
  16. package/dist/templates/src/core/user/baseZodUserSchema.ts +31 -0
  17. package/dist/templates/src/lib/functions/getContextUser.ts +5 -0
  18. package/dist/templates/src/lib/functions/test-related/createSignedUpUser.ts +44 -0
  19. package/dist/templates/src/lib/functions/test-related/getOneUserSignupData.ts +28 -0
  20. package/dist/templates/src/lib/functions/test-related/getTestServer.ts +28 -0
  21. package/dist/templates/src/lib/types/AdminRoleEnum.ts +6 -0
  22. package/dist/templates/src/lib/types/AnyRoleEnum.ts +5 -0
  23. package/dist/templates/src/lib/types/PhoneNumberTypeEnum.ts +7 -0
  24. package/dist/templates/src/lib/types/UserRoleEnum.ts +4 -0
  25. package/dist/templates/src/lib/types/UserTypeEnum.ts +4 -0
  26. package/dist/templates/src/middlewares/authGuard.ts +46 -0
  27. package/dist/templates/src/middlewares/index.ts +2 -0
  28. package/dist/templates/src/middlewares/roleGuard.ts +16 -0
  29. package/package.json +1 -1
@@ -117,7 +117,9 @@ import { inject } from '@kanian77/simple-di';
117
117
  import { ${useCaseName}, ${toUpperSnakeCase(useCaseName)}_USE_CASE_TOKEN } from './${useCaseName}';
118
118
  import { ${useCaseName}Failure } from './outputs/${useCaseName}Failure';
119
119
  import { ${EntityName}InsertSchema } from '@root/core/${kebabName}/${EntityName}';
120
- import { authGuard, roleGuard, getContextUser } from '@root/middlewares';
120
+ import { getContextUser } from '@root/lib/functions/getContextUser';
121
+ import { authGuard } from '@root/middlewares/authGuard';
122
+ import { roleGuard } from '@root/middlewares/roleGuard';
121
123
  import { AdminRoleEnum } from '@root/lib';
122
124
 
123
125
  const ${toCamelCase(useCaseName)}Routes = new Hono();
@@ -245,7 +247,9 @@ import { ${useCaseName}, ${toUpperSnakeCase(useCaseName)}_USE_CASE_TOKEN } from
245
247
  import { ${useCaseName}Failure } from './outputs/${useCaseName}Failure';
246
248
  import type { ${useCaseName}Input } from './inputs/${useCaseName}Input';
247
249
  import { ${EntityName}UpdateSchema } from '@root/core/${kebabName}/${EntityName}';
248
- import { authGuard, roleGuard, getContextUser } from '@root/middlewares';
250
+ import { getContextUser } from '@root/lib/functions/getContextUser';
251
+ import { authGuard } from '@root/middlewares/authGuard';
252
+ import { roleGuard } from '@root/middlewares/roleGuard';
249
253
  import { AdminRoleEnum } from '@root/lib';
250
254
 
251
255
  const ${toCamelCase(useCaseName)}Routes = new Hono();
@@ -564,7 +568,8 @@ import { StatusCodes } from 'http-status-codes';
564
568
  import { inject } from '@kanian77/simple-di';
565
569
  import { ${useCaseName}, ${toUpperSnakeCase(useCaseName)}_USE_CASE_TOKEN } from './${useCaseName}';
566
570
  import { ${useCaseName}Failure } from './outputs/${useCaseName}Failure';
567
- import { authGuard, roleGuard } from '@root/middlewares';
571
+ import { authGuard } from '@root/middlewares/authGuard';
572
+ import { roleGuard } from '@root/middlewares/roleGuard';
568
573
  import { AdminRoleEnum } from '@root/lib';
569
574
 
570
575
  const ${toCamelCase(useCaseName)}Routes = new Hono();
@@ -692,7 +697,7 @@ async function registerInUseCaseModule(srcDir, config) {
692
697
  }
693
698
  // ============ E2E TESTS GENERATION ============
694
699
  async function generateCreateE2ETest(baseDir, config) {
695
- const { EntityName, kebabName, pluralKebab } = config;
700
+ const { EntityName, entityName, kebabName, pluralKebab } = config;
696
701
  const useCaseDir = join(baseDir, `create-${kebabName}`);
697
702
  const testContent = `import { afterAll, beforeAll, describe, expect, it } from 'bun:test';
698
703
  import { EnvFileNames, UserRoleEnum, UserTypeEnum } from '@root/lib';
@@ -706,12 +711,16 @@ import { APP, AppModule } from '@root/AppModule';
706
711
  import type { Hono } from 'hono';
707
712
  import * as schema from '@root/schema';
708
713
  import { eq } from 'drizzle-orm';
709
- import { getTestServer, type TestServer } from '@root/lib/functions/getTestServer';
714
+ import { getTestServer, type TestServer } from '@root/lib/functions/test-related/getTestServer';
715
+ import { createOneSignedUpUser, deleteCreatedSignedUsers } from '@root/lib/functions/test-related/createSignedUpUser';
716
+ import { USER_REPOSITORY_INTERFACE, type UserRepository } from '@root/core/user/IUserRepository';
717
+ import { UserModule } from '@root/core/user/UserModule';
710
718
 
711
719
  describe('Create${EntityName} e2e', () => {
712
720
  let dbService: DbService;
713
721
  let server: TestServer;
714
722
  let app: Hono;
723
+ let userRepository: UserRepository;
715
724
 
716
725
  beforeAll(async () => {
717
726
  const TestModule = new Module({
@@ -720,17 +729,20 @@ describe('Create${EntityName} e2e', () => {
720
729
  getConfigModule(EnvFileNames.TESTING),
721
730
  getDbModule(),
722
731
  CoreModule,
732
+ UserModule,
723
733
  UseCaseModule,
724
734
  ],
725
735
  });
726
736
  bootstrap(TestModule);
727
737
  dbService = inject<DbService>(DB_SERVICE);
728
738
  app = inject<Hono>(APP);
739
+ userRepository = inject(USER_REPOSITORY_INTERFACE);
729
740
  server = await getTestServer(app);
730
741
  });
731
742
 
732
743
  afterAll(async () => {
733
- await dbService.getDb().delete(schema.${kebabName.replace(/-/g, '')}Schema).execute();
744
+ await dbService.getDb().delete(schema.${entityName}Schema).execute();
745
+ await deleteCreatedSignedUsers(userRepository);
734
746
  });
735
747
 
736
748
  it('fails if unauthenticated', async () => {
@@ -743,7 +755,7 @@ describe('Create${EntityName} e2e', () => {
743
755
  });
744
756
 
745
757
  it('fails with fake generated ID for createdBy', async () => {
746
- const { token } = await server.createSignedUpUser({
758
+ const { token } = await createOneSignedUpUser(userRepository, {
747
759
  userType: UserTypeEnum.ADMIN,
748
760
  role: UserRoleEnum.AUTHENTICATED,
749
761
  });
@@ -770,8 +782,8 @@ describe('Create${EntityName} e2e', () => {
770
782
  expect(body.result.createdBy).not.toBe('fake-malicious-id');
771
783
 
772
784
  // Direct DB check
773
- const row = await dbService.getDb().query.${kebabName.replace(/-/g, '')}Schema.findFirst({
774
- where: eq(schema.${kebabName.replace(/-/g, '')}Schema.id, body.result.id)
785
+ const row = await dbService.getDb().query.${entityName}Schema.findFirst({
786
+ where: eq(schema.${entityName}Schema.id, body.result.id)
775
787
  });
776
788
  expect(row).toBeDefined();
777
789
  expect(row!.createdBy).not.toBe('fake-malicious-id');
@@ -781,7 +793,7 @@ describe('Create${EntityName} e2e', () => {
781
793
  await writeFile(join(useCaseDir, `Create${EntityName}.e2e.spec.ts`), testContent);
782
794
  }
783
795
  async function generateUpdateE2ETest(baseDir, config) {
784
- const { EntityName, kebabName, pluralKebab } = config;
796
+ const { EntityName, entityName, kebabName, pluralKebab } = config;
785
797
  const useCaseDir = join(baseDir, `update-${kebabName}`);
786
798
  const testContent = `import { afterAll, beforeAll, describe, expect, it } from 'bun:test';
787
799
  import { EnvFileNames, UserRoleEnum, UserTypeEnum } from '@root/lib';
@@ -795,13 +807,17 @@ import { APP, AppModule } from '@root/AppModule';
795
807
  import type { Hono } from 'hono';
796
808
  import * as schema from '@root/schema';
797
809
  import { eq } from 'drizzle-orm';
798
- import { getTestServer, type TestServer } from '@root/lib/functions/getTestServer';
810
+ import { getTestServer, type TestServer } from '@root/lib/functions/test-related/getTestServer';
811
+ import { createOneSignedUpUser, deleteCreatedSignedUsers } from '@root/lib/functions/test-related/createSignedUpUser';
812
+ import { USER_REPOSITORY_INTERFACE, type UserRepository } from '@root/core/user/IUserRepository';
813
+ import { UserModule } from '@root/core/user/UserModule';
799
814
 
800
815
  describe('Update${EntityName} e2e', () => {
801
816
  let dbService: DbService;
802
817
  let server: TestServer;
803
818
  let app: Hono;
804
819
  let targetId: string;
820
+ let userRepository: UserRepository;
805
821
 
806
822
  beforeAll(async () => {
807
823
  const TestModule = new Module({
@@ -810,19 +826,22 @@ describe('Update${EntityName} e2e', () => {
810
826
  getConfigModule(EnvFileNames.TESTING),
811
827
  getDbModule(),
812
828
  CoreModule,
829
+ UserModule,
813
830
  UseCaseModule,
814
831
  ],
815
832
  });
816
833
  bootstrap(TestModule);
817
834
  dbService = inject<DbService>(DB_SERVICE);
818
835
  app = inject<Hono>(APP);
836
+ userRepository = inject(USER_REPOSITORY_INTERFACE);
819
837
  server = await getTestServer(app);
820
838
 
821
839
  // TODO: Seed a target entity here and save targetId
822
840
  });
823
841
 
824
842
  afterAll(async () => {
825
- await dbService.getDb().delete(schema.${kebabName.replace(/-/g, '')}Schema).execute();
843
+ await dbService.getDb().delete(schema.${entityName}Schema).execute();
844
+ await deleteCreatedSignedUsers(userRepository);
826
845
  });
827
846
 
828
847
  it('fails if unauthenticated', async () => {
@@ -835,7 +854,7 @@ describe('Update${EntityName} e2e', () => {
835
854
  });
836
855
 
837
856
  it('successfully updates and overrides updatedBy context', async () => {
838
- const { token } = await server.createSignedUpUser({
857
+ const { token } = await createOneSignedUpUser(userRepository, {
839
858
  userType: UserTypeEnum.ADMIN,
840
859
  role: UserRoleEnum.AUTHENTICATED,
841
860
  });
@@ -859,8 +878,8 @@ describe('Update${EntityName} e2e', () => {
859
878
 
860
879
  expect(body.result.updatedBy).not.toBe('hacker-id');
861
880
 
862
- const row = await dbService.getDb().query.${kebabName.replace(/-/g, '')}Schema.findFirst({
863
- where: eq(schema.${kebabName.replace(/-/g, '')}Schema.id, targetId)
881
+ const row = await dbService.getDb().query.${entityName}Schema.findFirst({
882
+ where: eq(schema.${entityName}Schema.id, targetId)
864
883
  });
865
884
  expect(row!.updatedBy).not.toBe('hacker-id');
866
885
  });
@@ -869,7 +888,7 @@ describe('Update${EntityName} e2e', () => {
869
888
  await writeFile(join(useCaseDir, `Update${EntityName}.e2e.spec.ts`), testContent);
870
889
  }
871
890
  async function generateGetE2ETest(baseDir, config) {
872
- const { EntityName, kebabName, pluralKebab } = config;
891
+ const { EntityName, entityName, kebabName, pluralKebab } = config;
873
892
  const useCaseDir = join(baseDir, `get-${kebabName}`);
874
893
  const testContent = `import { afterAll, beforeAll, describe, expect, it } from 'bun:test';
875
894
  import { EnvFileNames, UserRoleEnum, UserTypeEnum } from '@root/lib';
@@ -882,13 +901,17 @@ import { DB_SERVICE, type DbService } from 'db/DbService';
882
901
  import { APP, AppModule } from '@root/AppModule';
883
902
  import type { Hono } from 'hono';
884
903
  import * as schema from '@root/schema';
885
- import { getTestServer, type TestServer } from '@root/lib/functions/getTestServer';
904
+ import { getTestServer, type TestServer } from '@root/lib/functions/test-related/getTestServer';
905
+ import { createOneSignedUpUser, deleteCreatedSignedUsers } from '@root/lib/functions/test-related/createSignedUpUser';
906
+ import { USER_REPOSITORY_INTERFACE, type UserRepository } from '@root/core/user/IUserRepository';
907
+ import { UserModule } from '@root/core/user/UserModule';
886
908
 
887
909
  describe('Get${EntityName} e2e', () => {
888
910
  let dbService: DbService;
889
911
  let server: TestServer;
890
912
  let app: Hono;
891
913
  let targetId: string;
914
+ let userRepository: UserRepository;
892
915
 
893
916
  beforeAll(async () => {
894
917
  const TestModule = new Module({
@@ -897,19 +920,22 @@ describe('Get${EntityName} e2e', () => {
897
920
  getConfigModule(EnvFileNames.TESTING),
898
921
  getDbModule(),
899
922
  CoreModule,
923
+ UserModule,
900
924
  UseCaseModule,
901
925
  ],
902
926
  });
903
927
  bootstrap(TestModule);
904
928
  dbService = inject<DbService>(DB_SERVICE);
905
929
  app = inject<Hono>(APP);
930
+ userRepository = inject(USER_REPOSITORY_INTERFACE);
906
931
  server = await getTestServer(app);
907
932
 
908
933
  // TODO: Seed an entity here and assign targetId
909
934
  });
910
935
 
911
936
  afterAll(async () => {
912
- await dbService.getDb().delete(schema.${kebabName.replace(/-/g, '')}Schema).execute();
937
+ await dbService.getDb().delete(schema.${entityName}Schema).execute();
938
+ await deleteCreatedSignedUsers(userRepository);
913
939
  });
914
940
 
915
941
  it('fails if unauthenticated (assuming route requires auth)', async () => {
@@ -919,7 +945,7 @@ describe('Get${EntityName} e2e', () => {
919
945
  });
920
946
 
921
947
  it('retrieves the entity', async () => {
922
- const { token } = await server.createSignedUpUser({
948
+ const { token } = await createOneSignedUpUser(userRepository, {
923
949
  userType: UserTypeEnum.ADMIN,
924
950
  role: UserRoleEnum.AUTHENTICATED,
925
951
  });
@@ -940,7 +966,7 @@ describe('Get${EntityName} e2e', () => {
940
966
  await writeFile(join(useCaseDir, `Get${EntityName}.e2e.spec.ts`), testContent);
941
967
  }
942
968
  async function generateListE2ETest(baseDir, config) {
943
- const { EntityName, kebabName, pluralKebab, pluralPascal } = config;
969
+ const { EntityName, entityName, kebabName, pluralKebab, pluralPascal } = config;
944
970
  const useCaseDir = join(baseDir, `list-${pluralKebab}`);
945
971
  const testContent = `import { afterAll, beforeAll, describe, expect, it } from 'bun:test';
946
972
  import { EnvFileNames, UserRoleEnum, UserTypeEnum } from '@root/lib';
@@ -953,12 +979,16 @@ import { DB_SERVICE, type DbService } from 'db/DbService';
953
979
  import { APP, AppModule } from '@root/AppModule';
954
980
  import type { Hono } from 'hono';
955
981
  import * as schema from '@root/schema';
956
- import { getTestServer, type TestServer } from '@root/lib/functions/getTestServer';
982
+ import { getTestServer, type TestServer } from '@root/lib/functions/test-related/getTestServer';
983
+ import { createOneSignedUpUser, deleteCreatedSignedUsers } from '@root/lib/functions/test-related/createSignedUpUser';
984
+ import { USER_REPOSITORY_INTERFACE, type UserRepository } from '@root/core/user/IUserRepository';
985
+ import { UserModule } from '@root/core/user/UserModule';
957
986
 
958
987
  describe('List${pluralPascal} e2e', () => {
959
988
  let dbService: DbService;
960
989
  let server: TestServer;
961
990
  let app: Hono;
991
+ let userRepository: UserRepository;
962
992
 
963
993
  beforeAll(async () => {
964
994
  const TestModule = new Module({
@@ -967,23 +997,26 @@ describe('List${pluralPascal} e2e', () => {
967
997
  getConfigModule(EnvFileNames.TESTING),
968
998
  getDbModule(),
969
999
  CoreModule,
1000
+ UserModule,
970
1001
  UseCaseModule,
971
1002
  ],
972
1003
  });
973
1004
  bootstrap(TestModule);
974
1005
  dbService = inject<DbService>(DB_SERVICE);
975
1006
  app = inject<Hono>(APP);
1007
+ userRepository = inject(USER_REPOSITORY_INTERFACE);
976
1008
  server = await getTestServer(app);
977
1009
 
978
1010
  // TODO: Seed multiple entities here
979
1011
  });
980
1012
 
981
1013
  afterAll(async () => {
982
- await dbService.getDb().delete(schema.${kebabName.replace(/-/g, '')}Schema).execute();
1014
+ await dbService.getDb().delete(schema.${entityName}Schema).execute();
1015
+ await deleteCreatedSignedUsers(userRepository);
983
1016
  });
984
1017
 
985
1018
  it('lists entities successfully', async () => {
986
- const { token } = await server.createSignedUpUser({
1019
+ const { token } = await createOneSignedUpUser(userRepository, {
987
1020
  userType: UserTypeEnum.ADMIN,
988
1021
  role: UserRoleEnum.AUTHENTICATED,
989
1022
  });
@@ -1004,7 +1037,7 @@ describe('List${pluralPascal} e2e', () => {
1004
1037
  await writeFile(join(useCaseDir, `List${pluralPascal}.e2e.spec.ts`), testContent);
1005
1038
  }
1006
1039
  async function generateDeleteE2ETest(baseDir, config) {
1007
- const { EntityName, kebabName, pluralKebab } = config;
1040
+ const { EntityName, entityName, kebabName, pluralKebab } = config;
1008
1041
  const useCaseDir = join(baseDir, `delete-${kebabName}`);
1009
1042
  const testContent = `import { afterAll, beforeAll, describe, expect, it } from 'bun:test';
1010
1043
  import { EnvFileNames, UserRoleEnum, UserTypeEnum } from '@root/lib';
@@ -1018,7 +1051,10 @@ import { APP, AppModule } from '@root/AppModule';
1018
1051
  import type { Hono } from 'hono';
1019
1052
  import * as schema from '@root/schema';
1020
1053
  import { eq } from 'drizzle-orm';
1021
- import { getTestServer, type TestServer } from '@root/lib/functions/getTestServer';
1054
+ import { getTestServer, type TestServer } from '@root/lib/functions/test-related/getTestServer';
1055
+ import { createOneSignedUpUser, deleteCreatedSignedUsers } from '@root/lib/functions/test-related/createSignedUpUser';
1056
+ import { USER_REPOSITORY_INTERFACE, type UserRepository } from '@root/core/user/IUserRepository';
1057
+ import { UserModule } from '@root/core/user/UserModule';
1022
1058
 
1023
1059
  describe('Delete${EntityName} e2e', () => {
1024
1060
  let dbService: DbService;
@@ -1026,6 +1062,7 @@ describe('Delete${EntityName} e2e', () => {
1026
1062
  let app: Hono;
1027
1063
  let targetIdSoft: string;
1028
1064
  let targetIdHard: string;
1065
+ let userRepository: UserRepository;
1029
1066
 
1030
1067
  beforeAll(async () => {
1031
1068
  const TestModule = new Module({
@@ -1034,19 +1071,21 @@ describe('Delete${EntityName} e2e', () => {
1034
1071
  getConfigModule(EnvFileNames.TESTING),
1035
1072
  getDbModule(),
1036
1073
  CoreModule,
1074
+ UserModule,
1037
1075
  UseCaseModule,
1038
1076
  ],
1039
1077
  });
1040
1078
  bootstrap(TestModule);
1041
1079
  dbService = inject<DbService>(DB_SERVICE);
1042
1080
  app = inject<Hono>(APP);
1081
+ userRepository = inject(USER_REPOSITORY_INTERFACE);
1043
1082
  server = await getTestServer(app);
1044
1083
 
1045
1084
  // TODO: Seed two entities, assign to targetIdSoft and targetIdHard
1046
1085
  });
1047
1086
 
1048
1087
  afterAll(async () => {
1049
- await dbService.getDb().delete(schema.${kebabName.replace(/-/g, '')}Schema).execute();
1088
+ await dbService.getDb().delete(schema.${entityName}Schema).execute();
1050
1089
  });
1051
1090
 
1052
1091
  it('fails if unauthenticated', async () => {
@@ -1057,7 +1096,7 @@ describe('Delete${EntityName} e2e', () => {
1057
1096
  });
1058
1097
 
1059
1098
  it('soft deletes by default', async () => {
1060
- const { token } = await server.createSignedUpUser({
1099
+ const { token } = await createOneSignedUpUser(userRepository, {
1061
1100
  userType: UserTypeEnum.ADMIN,
1062
1101
  role: UserRoleEnum.AUTHENTICATED,
1063
1102
  });
@@ -1072,8 +1111,8 @@ describe('Delete${EntityName} e2e', () => {
1072
1111
  expect(req.status).toBe(200);
1073
1112
 
1074
1113
  // Direct DB check for soft delete
1075
- const row = await dbService.getDb().query.${kebabName.replace(/-/g, '')}Schema.findFirst({
1076
- where: eq(schema.${kebabName.replace(/-/g, '')}Schema.id, targetIdSoft)
1114
+ const row = await dbService.getDb().query.${entityName}Schema.findFirst({
1115
+ where: eq(schema.${entityName}Schema.id, targetIdSoft)
1077
1116
  });
1078
1117
  expect(row).toBeDefined();
1079
1118
  expect(row!.deleted).toBe(true);
@@ -1081,7 +1120,7 @@ describe('Delete${EntityName} e2e', () => {
1081
1120
  });
1082
1121
 
1083
1122
  it('hard deletes when flag is false', async () => {
1084
- const { token } = await server.createSignedUpUser({
1123
+ const { token } = await createOneSignedUpUser(userRepository, {
1085
1124
  userType: UserTypeEnum.ADMIN,
1086
1125
  role: UserRoleEnum.AUTHENTICATED,
1087
1126
  });
@@ -1098,8 +1137,8 @@ describe('Delete${EntityName} e2e', () => {
1098
1137
  expect(req.status).toBe(200);
1099
1138
 
1100
1139
  // Direct DB check for physical row missing
1101
- const row = await dbService.getDb().query.${kebabName.replace(/-/g, '')}Schema.findFirst({
1102
- where: eq(schema.${kebabName.replace(/-/g, '')}Schema.id, targetIdHard)
1140
+ const row = await dbService.getDb().query.${entityName}Schema.findFirst({
1141
+ where: eq(schema.${entityName}Schema.id, targetIdHard)
1103
1142
  });
1104
1143
  expect(row).toBeUndefined();
1105
1144
  });
@@ -1 +1 @@
1
- {"version":3,"file":"generate_crud_use_cases.js","sourceRoot":"","sources":["../src/generate_crud_use_cases.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,SAAS,GACV,MAAM,sBAAsB,CAAC;AAW9B,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAkB,EAClB,UAAkB,EAClB,SAAiB,EACjB,MAAc;IAEd,MAAM,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAe;QACzB,UAAU;QACV,UAAU;QACV,SAAS;QACT,UAAU;QACV,WAAW;QACX,YAAY;KACb,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC9D,MAAM,KAAK,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD,8BAA8B;IAC9B,MAAM,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,kBAAkB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,mBAAmB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAEpD,6BAA6B;IAC7B,MAAM,+BAA+B,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAE9D,oCAAoC;IACpC,MAAM,uBAAuB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9C,yCAAyC;IACzC,MAAM,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,kBAAkB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,mBAAmB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,qBAAqB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAEpD,OAAO,CAAC,GAAG,CAAC,oCAAoC,UAAU,GAAG,CAAC,CAAC;AACjE,CAAC;AAED,4CAA4C;AAC5C,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAC9E,MAAM,WAAW,GAAG,SAAS,UAAU,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,SAAS,EAAE,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE/C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,QAAQ;IACR,MAAM,YAAY,GAAG,iBAAiB,UAAU,gCAAgC,SAAS,WAAW,UAAU;;cAElG,WAAW,gBAAgB,UAAU;CAClD,CAAC;IAEA,iBAAiB;IACjB,MAAM,cAAc,GAAG;gBACT,UAAU,gCAAgC,SAAS,WAAW,UAAU;;cAE1E,WAAW,aAAa,UAAU;;eAEjC,WAAW;;cAEZ,WAAW;yBACA,UAAU;;;;;;CAMlC,CAAC;IAEA,iBAAiB;IACjB,MAAM,cAAc,GAAG;;eAEV,WAAW;oDAC0B,UAAU;;;;CAI7D,CAAC;IAEA,WAAW;IACX,MAAM,cAAc,GAAG;WACd,WAAW,iBAAiB,WAAW,6BAA6B,WAAW;;gBAE1E,WAAW,0BAA0B,WAAW;WACrD,UAAU,6BAA6B,SAAS,IAAI,UAAU;WAC9D,UAAU,6BAA6B,UAAU,8BAA8B,SAAS,KAAK,UAAU;;eAEnG,gBAAgB,CAAC,WAAW,CAAC,sBAAsB,gBAAgB,CAAC,WAAW,CAAC;;;WAGpF,gBAAgB,CAAC,WAAW,CAAC;;;eAGzB,WAAW;;cAEZ,UAAU;uBACD,UAAU,aAAa,UAAU;;;yBAG/B,WAAW,mBAAmB,WAAW;iCACjC,UAAU;iBAC1B,WAAW,sBAAsB,WAAW;;;;eAI9C,WAAW;cACZ,UAAU;;;iBAGP,gBAAgB,CAAC,WAAW,CAAC;kBAC5B,WAAW;;;;CAI5B,CAAC;IAEA,SAAS;IACT,MAAM,aAAa,GAAG;;;WAGb,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC,6BAA6B,WAAW;WACrF,WAAW,6BAA6B,WAAW;WACnD,UAAU,mCAAmC,SAAS,IAAI,UAAU;;;;QAIvE,WAAW,CAAC,WAAW,CAAC;QACxB,WAAW,CAAC,WAAW,CAAC,kBAAkB,WAAW;;EAE3D,WAAW,CAAC,WAAW,CAAC;IACtB,WAAW,CAAC,WAAW,CAAC;;;;;;;;;;;sBAWN,UAAU;+BACD,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC;;;;gCAI5C,WAAW,CAAC,WAAW,CAAC;;cAE1C,WAAW;;;;;;;WAOd,WAAW,CAAC,WAAW,CAAC,oBAAoB,WAAW,CAAC,WAAW,CAAC;CAC9E,CAAC;IAEA,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,WAAW,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IACzE,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;IACvE,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,EACxD,aAAa,CACd,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,YAAY,CAAC,CAAC;AACxD,CAAC;AAED,4CAA4C;AAC5C,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAC9E,MAAM,WAAW,GAAG,SAAS,UAAU,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,SAAS,EAAE,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE/C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,QAAQ;IACR,MAAM,YAAY,GAAG,iBAAiB,UAAU,gCAAgC,SAAS,WAAW,UAAU;;mBAE7F,WAAW;;uBAEP,UAAU;;CAEhC,CAAC;IAEA,iBAAiB;IACjB,MAAM,cAAc,GAAG;gBACT,UAAU,gCAAgC,SAAS,WAAW,UAAU;;cAE1E,WAAW,aAAa,UAAU;;eAEjC,WAAW;;cAEZ,WAAW;yBACA,UAAU;;;;;;CAMlC,CAAC;IAEA,iBAAiB;IACjB,MAAM,cAAc,GAAG;;eAEV,WAAW;oDAC0B,UAAU;;;;CAI7D,CAAC;IAEA,WAAW;IACX,MAAM,cAAc,GAAG;WACd,WAAW,iBAAiB,WAAW,6BAA6B,WAAW;;gBAE1E,WAAW,0BAA0B,WAAW;WACrD,UAAU,6BAA6B,SAAS,IAAI,UAAU;WAC9D,UAAU,6BAA6B,UAAU,8BAA8B,SAAS,KAAK,UAAU;;eAEnG,gBAAgB,CAAC,WAAW,CAAC,sBAAsB,gBAAgB,CAAC,WAAW,CAAC;;;WAGpF,gBAAgB,CAAC,WAAW,CAAC;;;eAGzB,WAAW;;cAEZ,UAAU;uBACD,UAAU,aAAa,UAAU;;;yBAG/B,WAAW,mBAAmB,WAAW;iCACjC,UAAU;iBAC1B,WAAW,sBAAsB,WAAW;;;;eAI9C,WAAW;cACZ,UAAU;;;iBAGP,gBAAgB,CAAC,WAAW,CAAC;kBAC5B,WAAW;;;;CAI5B,CAAC;IAEA,SAAS;IACT,MAAM,aAAa,GAAG;;;WAGb,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC,6BAA6B,WAAW;WACrF,WAAW,6BAA6B,WAAW;gBAC9C,WAAW,0BAA0B,WAAW;WACrD,UAAU,mCAAmC,SAAS,IAAI,UAAU;;;;QAIvE,WAAW,CAAC,WAAW,CAAC;QACxB,WAAW,CAAC,WAAW,CAAC,kBAAkB,WAAW;;EAE3D,WAAW,CAAC,WAAW,CAAC;IACtB,WAAW,CAAC,WAAW,CAAC;;;;;;;;;;;;;qBAaP,UAAU;qBACV,WAAW;+BACD,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC;;;;gCAI5C,WAAW,CAAC,WAAW,CAAC;;cAE1C,WAAW;;;;;;;WAOd,WAAW,CAAC,WAAW,CAAC,oBAAoB,WAAW,CAAC,WAAW,CAAC;CAC9E,CAAC;IAEA,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,WAAW,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;IACzE,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;IACvE,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,EACxD,aAAa,CACd,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,YAAY,CAAC,CAAC;AACxD,CAAC;AAED,yCAAyC;AACzC,KAAK,UAAU,kBAAkB,CAC/B,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAC9E,MAAM,WAAW,GAAG,MAAM,UAAU,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,SAAS,EAAE,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE/C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,iBAAiB;IACjB,MAAM,cAAc,GAAG;gBACT,UAAU,gCAAgC,SAAS,WAAW,UAAU;;cAE1E,WAAW,aAAa,UAAU;;eAEjC,WAAW;;cAEZ,WAAW;yBACA,UAAU;;;;;;CAMlC,CAAC;IAEA,iBAAiB;IACjB,MAAM,cAAc,GAAG;;eAEV,WAAW;iDACuB,UAAU;;;;CAI1D,CAAC;IAEA,WAAW;IACX,MAAM,cAAc,GAAG;WACd,WAAW,iBAAiB,WAAW,6BAA6B,WAAW;;WAE/E,UAAU,6BAA6B,SAAS,IAAI,UAAU;WAC9D,UAAU,6BAA6B,UAAU,8BAA8B,SAAS,KAAK,UAAU;;eAEnG,gBAAgB,CAAC,WAAW,CAAC,sBAAsB,gBAAgB,CAAC,WAAW,CAAC;;;WAGpF,gBAAgB,CAAC,WAAW,CAAC;;;eAGzB,WAAW;;cAEZ,UAAU;uBACD,UAAU,aAAa,UAAU;;;uCAGjB,WAAW;gCAClB,UAAU;iBACzB,WAAW,qBAAqB,WAAW;;;;eAI7C,WAAW;cACZ,UAAU;;;iBAGP,gBAAgB,CAAC,WAAW,CAAC;kBAC5B,WAAW;;;;CAI5B,CAAC;IAEA,SAAS;IACT,MAAM,aAAa,GAAG;;;WAGb,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC,6BAA6B,WAAW;WACrF,WAAW,6BAA6B,WAAW;;QAEtD,WAAW,CAAC,WAAW,CAAC;QACxB,WAAW,CAAC,WAAW,CAAC,kBAAkB,WAAW;;EAE3D,WAAW,CAAC,WAAW,CAAC,cAAc,WAAW,CAAC,WAAW,CAAC;;;6BAGnC,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC;;;;8BAI5C,WAAW,CAAC,WAAW,CAAC;;YAE1C,WAAW;;;;;;WAMZ,WAAW,CAAC,WAAW,CAAC,oBAAoB,WAAW,CAAC,WAAW,CAAC;CAC9E,CAAC;IAEA,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;IACvE,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,EACxD,aAAa,CACd,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,YAAY,CAAC,CAAC;AACrD,CAAC;AAED,0CAA0C;AAC1C,KAAK,UAAU,mBAAmB,CAChC,OAAe,EACf,MAAkB;IAElB,MAAM,EACJ,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,GAAG,MAAM,CAAC;IACX,MAAM,WAAW,GAAG,OAAO,YAAY,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE/C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,iBAAiB;IACjB,MAAM,cAAc,GAAG;gBACT,UAAU,gCAAgC,SAAS,WAAW,UAAU;;cAE1E,WAAW,aAAa,UAAU;;eAEjC,WAAW;;cAEZ,WAAW;yBACA,YAAY;;;;;;CAMpC,CAAC;IAEA,iBAAiB;IACjB,MAAM,cAAc,GAAG;;eAEV,WAAW;kDACwB,YAAY;;;;CAI7D,CAAC;IAEA,WAAW;IACX,MAAM,cAAc,GAAG;WACd,WAAW,iBAAiB,WAAW,6BAA6B,WAAW;;WAE/E,UAAU,6BAA6B,SAAS,IAAI,UAAU;WAC9D,UAAU,6BAA6B,UAAU,8BAA8B,SAAS,KAAK,UAAU;;eAEnG,gBAAgB,CAAC,WAAW,CAAC,sBAAsB,gBAAgB,CAAC,WAAW,CAAC;;;WAGpF,gBAAgB,CAAC,WAAW,CAAC;;;eAGzB,WAAW;;cAEZ,UAAU;uBACD,UAAU,aAAa,UAAU;;;6BAG3B,WAAW;kCACN,UAAU;iBAC3B,WAAW,uBAAuB,WAAW;;;;eAI/C,WAAW;cACZ,UAAU;;;iBAGP,gBAAgB,CAAC,WAAW,CAAC;kBAC5B,WAAW;;;;CAI5B,CAAC;IAEA,SAAS;IACT,MAAM,aAAa,GAAG;;;WAGb,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC,6BAA6B,WAAW;WACrF,WAAW,6BAA6B,WAAW;;QAEtD,WAAW,CAAC,WAAW,CAAC;QACxB,WAAW,CAAC,WAAW,CAAC,kBAAkB,WAAW;;EAE3D,WAAW,CAAC,WAAW,CAAC,cAAc,WAAW,CAAC,WAAW,CAAC;;6BAEnC,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC;;;;8BAI5C,WAAW,CAAC,WAAW,CAAC;;YAE1C,WAAW;;;;;;WAMZ,WAAW,CAAC,WAAW,CAAC,oBAAoB,WAAW,CAAC,WAAW,CAAC;CAC9E,CAAC;IAEA,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;IACvE,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,EACxD,aAAa,CACd,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,WAAW,YAAY,CAAC,CAAC;AAC/D,CAAC;AAED,4CAA4C;AAC5C,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAC9E,MAAM,WAAW,GAAG,SAAS,UAAU,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,SAAS,EAAE,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAE/C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,iBAAiB;IACjB,MAAM,cAAc,GAAG;;cAEX,WAAW;;eAEV,WAAW;;cAEZ,WAAW;yBACA,UAAU;;;;;;CAMlC,CAAC;IAEA,iBAAiB;IACjB,MAAM,cAAc,GAAG;;eAEV,WAAW;oDAC0B,UAAU;;;;CAI7D,CAAC;IAEA,WAAW;IACX,MAAM,cAAc,GAAG;WACd,WAAW,iBAAiB,WAAW,6BAA6B,WAAW;;WAE/E,UAAU,6BAA6B,SAAS,IAAI,UAAU;WAC9D,UAAU,6BAA6B,UAAU,8BAA8B,SAAS,KAAK,UAAU;;eAEnG,gBAAgB,CAAC,WAAW,CAAC,sBAAsB,gBAAgB,CAAC,WAAW,CAAC;;;WAGpF,gBAAgB,CAAC,WAAW,CAAC;;;eAGzB,WAAW;;cAEZ,UAAU;uBACD,UAAU,aAAa,UAAU;;;mEAGW,WAAW;iBAC7D,UAAU;oBACP,WAAW;iBACd,WAAW;;;;eAIb,WAAW;cACZ,UAAU;;;iBAGP,gBAAgB,CAAC,WAAW,CAAC;kBAC5B,WAAW;;;;CAI5B,CAAC;IAEA,SAAS;IACT,MAAM,aAAa,GAAG;;;WAGb,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC,6BAA6B,WAAW;WACrF,WAAW,6BAA6B,WAAW;;;;QAItD,WAAW,CAAC,WAAW,CAAC;QACxB,WAAW,CAAC,WAAW,CAAC,kBAAkB,WAAW;;EAE3D,WAAW,CAAC,WAAW,CAAC;IACtB,WAAW,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;+BAiBG,WAAW,KAAK,gBAAgB,CAAC,WAAW,CAAC;;;;gCAI5C,WAAW,CAAC,WAAW,CAAC;;cAE1C,WAAW;;;;;;;WAOd,WAAW,CAAC,WAAW,CAAC,oBAAoB,WAAW,CAAC,WAAW,CAAC;CAC9E,CAAC;IAEA,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,KAAK,CAAC,EAAE,cAAc,CAAC,CAAC;IACvE,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,EACxD,aAAa,CACd,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS,YAAY,CAAC,CAAC;AACxD,CAAC;AAED,8CAA8C;AAC9C,KAAK,UAAU,+BAA+B,CAC5C,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAEpE,MAAM,OAAO,GAAG;iBACD,UAAU,2BAA2B,SAAS,UAAU,UAAU;iBAClE,UAAU,2BAA2B,SAAS,UAAU,UAAU;cACrE,UAAU,wBAAwB,SAAS,OAAO,UAAU;eAC3D,YAAY,yBAAyB,WAAW,QAAQ,YAAY;iBAClE,UAAU,2BAA2B,SAAS,UAAU,UAAU;;eAEpE,UAAU;;YAEb,UAAU;YACV,UAAU;SACb,UAAU;UACT,YAAY;YACV,UAAU;;;CAGrB,CAAC;IAEA,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,UAAU,kBAAkB,CAAC,EAAE,OAAO,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,YAAY,SAAS,IAAI,UAAU,kBAAkB,CAAC,CAAC;AACrE,CAAC;AAED,yDAAyD;AACzD,KAAK,UAAU,uBAAuB,CACpC,MAAc,EACd,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IACzC,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAEvE,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,IAAI,OAAO,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,YAAY,UAAU,2BAA2B,SAAS,IAAI,UAAU,iBAAiB,CAAC;IAElH,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,UAAU,eAAe,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,qBAAqB;IAC/B,CAAC;IAED,+BAA+B;IAC/B,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAC7D,OAAO;YACL,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC;gBACnC,eAAe;gBACf,IAAI;gBACJ,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,eAAe,GAAG,IAAI,GAAG,OAAO,CAAC;IAC7C,CAAC;IAED,uBAAuB;IACvB,MAAM,YAAY,GAAG,gBAAgB,CAAC;IACtC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACjD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;YAChC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,KAAK,EAAE,CAAC;YAChC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;YACpB,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,UAAU,eAAe,CAAC,EAAE,CAAC;gBACzD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtE,MAAM,SAAS,GAAG,GAAG,SAAS,GAAG,UAAU,eAAe,CAAC;gBAC3D,OAAO;oBACL,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;AACxD,CAAC;AAED,iDAAiD;AAEjD,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,SAAS,EAAE,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG;;;;;;;;;;;;;;kBAcJ,UAAU;;;;;;;;;;;;;;;;;;;;;;4CAsBgB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;gDAIvB,WAAW;;;;;;;;;;;;;;;;;;;;gDAoBX,WAAW;;;;;;;;;;;;;;;;gDAgBX,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;yBAClD,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;;CAMnD,CAAC;IACA,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,SAAS,UAAU,cAAc,CAAC,EACnD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,SAAS,EAAE,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG;;;;;;;;;;;;;;kBAcJ,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;4CAyBgB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAqCvB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;yBAClD,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;CAKnD,CAAC;IACA,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,SAAS,UAAU,cAAc,CAAC,EACnD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,SAAS,EAAE,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG;;;;;;;;;;;;;eAaP,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;4CAyBmB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BtE,CAAC;IACA,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,MAAM,UAAU,cAAc,CAAC,EAChD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,WAAW,EAAE,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG;;;;;;;;;;;;;gBAaN,YAAY;;;;;;;;;;;;;;;;;;;;;;;;4CAwBgB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;;;;;gDASvB,WAAW;;;;;;;;;;;;CAY1D,CAAC;IACA,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,OAAO,YAAY,cAAc,CAAC,EACnD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,MAAkB;IAElB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,SAAS,EAAE,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG;;;;;;;;;;;;;;kBAcJ,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;4CA0BgB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;gDA0BvB,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;yBAClD,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;gDAyBJ,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;yBAClD,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;;;CAKnD,CAAC;IACA,MAAM,SAAS,CACb,IAAI,CAAC,UAAU,EAAE,SAAS,UAAU,cAAc,CAAC,EACnD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,aAAa"}
1
+ {"version":3,"file":"generate_crud_use_cases.js","sourceRoot":"","sources":["../src/generate_crud_use_cases.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate_skeleton.d.ts","sourceRoot":"","sources":["../src/generate_skeleton.ts"],"names":[],"mappings":"AAUA,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2QzE"}
1
+ {"version":3,"file":"generate_skeleton.d.ts","sourceRoot":"","sources":["../src/generate_skeleton.ts"],"names":[],"mappings":"AAUA,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqUzE"}
@@ -106,6 +106,26 @@ export async function generateSkeleton(projectName) {
106
106
  src: 'src/lib/types/getCorsOrigin.ts',
107
107
  dest: 'src/lib/types/getCorsOrigin.ts',
108
108
  },
109
+ {
110
+ src: 'src/lib/types/UserRoleEnum.ts',
111
+ dest: 'src/lib/types/UserRoleEnum.ts',
112
+ },
113
+ {
114
+ src: 'src/lib/types/UserTypeEnum.ts',
115
+ dest: 'src/lib/types/UserTypeEnum.ts',
116
+ },
117
+ {
118
+ src: 'src/lib/types/AdminRoleEnum.ts',
119
+ dest: 'src/lib/types/AdminRoleEnum.ts',
120
+ },
121
+ {
122
+ src: 'src/lib/types/AnyRoleEnum.ts',
123
+ dest: 'src/lib/types/AnyRoleEnum.ts',
124
+ },
125
+ {
126
+ src: 'src/lib/types/PhoneNumberTypeEnum.ts',
127
+ dest: 'src/lib/types/PhoneNumberTypeEnum.ts',
128
+ },
109
129
  // Lib - Functions
110
130
  {
111
131
  src: 'src/lib/functions/getEnvFile.ts',
@@ -127,6 +147,32 @@ export async function generateSkeleton(projectName) {
127
147
  src: 'src/lib/functions/withBaseSchema.ts',
128
148
  dest: 'src/lib/functions/withBaseSchema.ts',
129
149
  },
150
+ // Lib - Functions/test-related
151
+ {
152
+ src: 'src/lib/functions/test-related/getTestServer.ts',
153
+ dest: 'src/lib/functions/test-related/getTestServer.ts',
154
+ },
155
+ {
156
+ src: 'src/lib/functions/test-related/getNewTestServer.ts',
157
+ dest: 'src/lib/functions/test-related/getNewTestServer.ts',
158
+ },
159
+ {
160
+ src: 'src/lib/functions/test-related/createSignedUpUser.ts',
161
+ dest: 'src/lib/functions/test-related/createSignedUpUser.ts',
162
+ },
163
+ {
164
+ src: 'src/lib/functions/test-related/getOneUserSignupData.ts',
165
+ dest: 'src/lib/functions/test-related/getOneUserSignupData.ts',
166
+ },
167
+ // Middlewares
168
+ {
169
+ src: 'src/middlewares/authGuard.ts',
170
+ dest: 'src/middlewares/authGuard.ts',
171
+ },
172
+ {
173
+ src: 'src/middlewares/roleGuard.ts',
174
+ dest: 'src/middlewares/roleGuard.ts',
175
+ },
130
176
  // Lib - Errors
131
177
  {
132
178
  src: 'src/lib/errors/BadRequestException.ts',
@@ -166,6 +212,10 @@ export async function generateSkeleton(projectName) {
166
212
  src: 'src/core/baseSchema.ts',
167
213
  dest: 'src/core/baseSchema.ts',
168
214
  },
215
+ {
216
+ src: 'src/core/user',
217
+ dest: 'src/core/user',
218
+ },
169
219
  ];
170
220
  // Helper function to read template and write to dest
171
221
  const applyTemplate = async (tpl) => {
@@ -177,7 +227,7 @@ export async function generateSkeleton(projectName) {
177
227
  await mkdir(parentDir, { recursive: true });
178
228
  }
179
229
  if (existsSync(srcPath)) {
180
- await cp(srcPath, destPath);
230
+ await cp(srcPath, destPath, { recursive: true });
181
231
  console.log(`Created ${tpl.dest}`);
182
232
  }
183
233
  else {
@@ -187,10 +237,11 @@ export async function generateSkeleton(projectName) {
187
237
  for (const tpl of templates) {
188
238
  await applyTemplate(tpl);
189
239
  }
190
- // Generate Indices
191
240
  const libTypesDest = join(targetDir, 'src/lib/types');
192
241
  const libFunctionsDest = join(targetDir, 'src/lib/functions');
242
+ const libTestFunctionsDest = join(targetDir, 'src/lib/functions/test-related');
193
243
  const libErrorsDest = join(targetDir, 'src/lib/errors');
244
+ const middlewaresDest = join(targetDir, 'src/middlewares');
194
245
  const libDest = join(targetDir, 'src/lib');
195
246
  const coreDir = join(targetDir, 'src/core');
196
247
  await mkdir(coreDir, { recursive: true });
@@ -208,7 +259,9 @@ export async function generateSkeleton(projectName) {
208
259
  };
209
260
  await createIndex(libTypesDest);
210
261
  await createIndex(libFunctionsDest);
262
+ await createIndex(libTestFunctionsDest);
211
263
  await createIndex(libErrorsDest);
264
+ await createIndex(middlewaresDest);
212
265
  // lib/index.ts
213
266
  const libIndexContent = `export * from "./functions";
214
267
  export * from "./types";
@@ -219,11 +272,13 @@ export * from "./errors";`;
219
272
  const coreModuleContent = `import { Module } from '@kanian77/simple-di';
220
273
  import { getConfigModule } from 'config/getConfigModule';
221
274
  import { getDbModule } from 'db/getDbModule';
275
+ import { UserModule } from './user/UserModule';
222
276
 
223
277
  export const CoreModule = new Module({
224
278
  imports: [
225
279
  getConfigModule(),
226
280
  getDbModule(),
281
+ UserModule,
227
282
  ],
228
283
  });
229
284
  `;
@@ -1 +1 @@
1
- {"version":3,"file":"generate_skeleton.js","sourceRoot":"","sources":["../src/generate_skeleton.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate_skeleton.js","sourceRoot":"","sources":["../src/generate_skeleton.ts"],"names":[],"mappings":"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"}
@@ -1 +1,3 @@
1
1
  // Empty schema
2
+
3
+ export * from '@root/core/user/User';
@@ -0,0 +1,8 @@
1
+ import type { IRepository } from '@root/IRepository';
2
+ import type { UserInterface } from './baseZodUserSchema';
3
+
4
+ export const USER_REPOSITORY_INTERFACE = 'IUserRepository';
5
+
6
+ export interface IUserRepository extends IRepository<UserInterface> {
7
+ // Add entity-specific repository methods here
8
+ }
@@ -0,0 +1,8 @@
1
+ import type { IService } from '@root/IService';
2
+ import type { UserInterface } from './baseZodUserSchema';
3
+
4
+ export const USER_SERVICE_INTERFACE = 'IUserService';
5
+
6
+ export interface IUserService extends IService<UserInterface> {
7
+ // Add entity-specific service methods here
8
+ }
@@ -0,0 +1,71 @@
1
+ import { withBaseSchema } from '@root/lib/functions/withBaseSchema';
2
+ import { jsonb, text, varchar } from 'drizzle-orm/pg-core';
3
+ import {
4
+ createInsertSchema,
5
+ createSelectSchema,
6
+ createUpdateSchema,
7
+ } from 'drizzle-zod';
8
+ import { z } from 'zod';
9
+ import { adminZodUserSchema, userZodUserSchema } from './baseZodUserSchema';
10
+ import { UserTypePgEnum } from '@root/lib/types/UserTypePgEnum';
11
+ import { UserRolePgEnum } from '@root/lib/types/UserRolePgEnum';
12
+ import type { PhoneNumberInterface } from '@root/lib';
13
+
14
+ // Table name constant
15
+ export const USER_TABLE_NAME = 'users';
16
+
17
+ // Schema definition
18
+ export const userSchema = withBaseSchema(USER_TABLE_NAME, {
19
+ email: varchar('email', { length: 255 }).unique(),
20
+ password: varchar('password', { length: 255 }),
21
+ firstName: varchar('first_name', { length: 255 }),
22
+ lastName: varchar('last_name', { length: 255 }),
23
+ phoneNumber: jsonb('phone_number').$type<PhoneNumberInterface>(),
24
+ userType: UserTypePgEnum('user_type').notNull(), // Stores 'ADMIN' or 'USER'
25
+ role: UserRolePgEnum('role').notNull(),
26
+ });
27
+
28
+ // Relations definition
29
+ // import { relations } from 'drizzle-orm';
30
+ // export const userRelations = relations(userSchema, ({ one, many }) => ({
31
+ // // TODO: Add relationships here
32
+ // }));
33
+
34
+ // Type exports
35
+ export type UserSchemaType = typeof userSchema;
36
+
37
+ // Zod validation schemas
38
+ export const UserInsertSchema = z.discriminatedUnion('userType', [
39
+ createInsertSchema(userSchema).merge(
40
+ adminZodUserSchema.partial({
41
+ id: true,
42
+ createdAt: true,
43
+ createdBy:true,
44
+ updatedAt: true,
45
+ updatedBy: true,
46
+ deletedAt: true,
47
+ deleted: true,
48
+ }),
49
+ ),
50
+ createInsertSchema(userSchema).merge(
51
+ userZodUserSchema.partial({
52
+ id: true,
53
+ createdAt: true,
54
+ createdBy:true,
55
+ updatedAt: true,
56
+ updatedBy: true,
57
+ deletedAt: true,
58
+ deleted: true,
59
+ }),
60
+ ),
61
+ ]);
62
+
63
+ export const UserSelectSchema = z.discriminatedUnion('userType', [
64
+ createSelectSchema(userSchema).merge(adminZodUserSchema),
65
+ createSelectSchema(userSchema).merge(userZodUserSchema),
66
+ ]);
67
+
68
+ export const UserUpdateSchema = z.union([
69
+ createUpdateSchema(userSchema).merge(adminZodUserSchema.partial()),
70
+ createUpdateSchema(userSchema).merge(userZodUserSchema.partial()),
71
+ ]);
@@ -0,0 +1,7 @@
1
+ import { Module } from '@kanian77/simple-di';
2
+ import { UserRepositoryModule } from './UserRepositoryModule';
3
+ import { UserServiceModule } from './UserServiceModule';
4
+
5
+ export const UserModule = new Module({
6
+ imports: [UserRepositoryModule, UserServiceModule],
7
+ });
@@ -0,0 +1,63 @@
1
+ import { afterAll, afterEach, beforeAll, describe, expect, it } from 'bun:test';
2
+ import { UserRepository } from './UserRepository';
3
+ import { randomUUIDv7 } from 'bun';
4
+ import * as schema from '@root/schema';
5
+ import { NeonHttpDatabase } from 'drizzle-orm/neon-http';
6
+ import {
7
+ EnvFileNames,
8
+ } from '@root/lib';
9
+ import { USER_REPOSITORY_INTERFACE } from './IUserRepository';
10
+ import { bootstrap, inject, Module } from '@kanian77/simple-di';
11
+ import { DB_SERVICE, DbService } from 'db/DbService';
12
+ import { getConfigModule } from 'config/getConfigModule';
13
+
14
+ describe('UserRepository', () => {
15
+ let userRepository: UserRepository;
16
+ let db: NeonHttpDatabase<typeof schema>;
17
+
18
+ const clear = async (db: NeonHttpDatabase<typeof schema>) => {
19
+ // await db.delete(schema.userSchema).execute();
20
+ };
21
+
22
+ beforeAll(async () => {
23
+ const ConfigModule = getConfigModule(EnvFileNames.TESTING);
24
+ const DbModule = getConfigModule(EnvFileNames.TESTING);
25
+
26
+ const UserRepositoryModule = new Module({
27
+ imports: [ConfigModule, DbModule],
28
+ providers: [
29
+ {
30
+ provide: USER_REPOSITORY_INTERFACE,
31
+ useClass: UserRepository,
32
+ },
33
+ ],
34
+ });
35
+
36
+ const TestModule = new Module({
37
+ imports: [
38
+ ConfigModule,
39
+ DbModule,
40
+ UserRepositoryModule,
41
+ ],
42
+ });
43
+
44
+ bootstrap(TestModule);
45
+
46
+ db = inject<DbService>(DB_SERVICE).getDb();
47
+ userRepository = inject<UserRepository>(USER_REPOSITORY_INTERFACE);
48
+
49
+ await clear(db);
50
+ });
51
+
52
+ afterEach(async () => {
53
+ // await db.delete(schema.userSchema).execute();
54
+ });
55
+
56
+ afterAll(async () => {
57
+ await clear(db);
58
+ });
59
+
60
+ it('should be defined', () => {
61
+ expect(userRepository).toBeDefined();
62
+ });
63
+ });
@@ -0,0 +1,31 @@
1
+ import { BaseRepository } from '@root/BaseRepository';
2
+ import {
3
+ USER_REPOSITORY_INTERFACE,
4
+ type IUserRepository,
5
+ } from './IUserRepository';
6
+ import { userSchema, type UserSchemaType } from './User';
7
+ import { type UserInterface } from './baseZodUserSchema';
8
+ import { Inject, Service } from '@kanian77/simple-di';
9
+ import { DB_SERVICE, DbService } from 'db/DbService';
10
+
11
+ @Service({ token: USER_REPOSITORY_INTERFACE })
12
+ export class UserRepository
13
+ extends BaseRepository<UserInterface, UserSchemaType>
14
+ implements IUserRepository
15
+ {
16
+ constructor(@Inject(DB_SERVICE) private dbService: DbService) {
17
+ super(userSchema, dbService);
18
+ }
19
+
20
+ async find(config?: any): Promise<UserInterface[]> {
21
+ return (await this.db.query.userSchema.findMany(
22
+ config
23
+ )) as unknown as UserInterface[];
24
+ }
25
+
26
+ async findOne(config?: any): Promise<UserInterface> {
27
+ return (await this.db.query.userSchema.findFirst(
28
+ config
29
+ )) as unknown as UserInterface;
30
+ }
31
+ }
@@ -0,0 +1,15 @@
1
+ import { Module } from '@kanian77/simple-di';
2
+ import { USER_REPOSITORY_INTERFACE } from './IUserRepository';
3
+ import { UserRepository } from './UserRepository';
4
+ import { getConfigModule } from 'config/getConfigModule';
5
+ import { getDbModule } from 'db/getDbModule';
6
+
7
+ export const UserRepositoryModule = new Module({
8
+ imports: [getConfigModule(), getDbModule()],
9
+ providers: [
10
+ {
11
+ provide: USER_REPOSITORY_INTERFACE,
12
+ useClass: UserRepository,
13
+ },
14
+ ],
15
+ });
@@ -0,0 +1,34 @@
1
+ import { BaseService } from '@root/BaseService';
2
+ import type { UserInterface } from './baseZodUserSchema';
3
+ import {
4
+ USER_SERVICE_INTERFACE,
5
+ type IUserService,
6
+ } from './IUserService';
7
+ import {
8
+ USER_REPOSITORY_INTERFACE,
9
+ type IUserRepository,
10
+ } from './IUserRepository';
11
+ import {
12
+ UserInsertSchema,
13
+ UserSelectSchema,
14
+ UserUpdateSchema,
15
+ } from './User';
16
+ import { Inject, Service } from '@kanian77/simple-di';
17
+
18
+ @Service({ token: USER_SERVICE_INTERFACE })
19
+ export class UserService
20
+ extends BaseService<UserInterface>
21
+ implements IUserService
22
+ {
23
+ constructor(
24
+ @Inject(USER_REPOSITORY_INTERFACE)
25
+ private readonly userRepository: IUserRepository
26
+ ) {
27
+ super(
28
+ userRepository,
29
+ UserInsertSchema,
30
+ UserUpdateSchema,
31
+ UserSelectSchema
32
+ );
33
+ }
34
+ }
@@ -0,0 +1,14 @@
1
+ import { Module } from '@kanian77/simple-di';
2
+ import { UserService } from './UserService';
3
+ import { UserRepositoryModule } from './UserRepositoryModule';
4
+ import { USER_SERVICE_INTERFACE } from './IUserService';
5
+
6
+ export const UserServiceModule = new Module({
7
+ imports: [UserRepositoryModule],
8
+ providers: [
9
+ {
10
+ provide: USER_SERVICE_INTERFACE,
11
+ useClass: UserService,
12
+ },
13
+ ],
14
+ });
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ import { baseZodSchema } from "@root/core/baseZodSchema";
3
+ import { AdminRoleEnum } from "@root/lib/types/AdminRoleEnum";
4
+ import { UserRoleEnum } from "@root/lib/types/UserRoleEnum";
5
+ import { phoneNumberSchema } from "@root/lib/schemas/phoneNumberSchema";
6
+
7
+ export const adminZodUserSchema = baseZodSchema.extend({
8
+ email: z.string().email().optional(),
9
+ password: z.string().optional(),
10
+ firstName: z.string().max(255).optional(),
11
+ lastName: z.string().max(255).optional(),
12
+ phoneNumber: phoneNumberSchema.optional(),
13
+ userType: z.literal('ADMIN'),
14
+ role: z.nativeEnum(AdminRoleEnum),
15
+ });
16
+
17
+ export const userZodUserSchema = baseZodSchema.extend({
18
+ email: z.string().email().optional(),
19
+ password: z.string().optional(),
20
+ firstName: z.string().max(255).optional(),
21
+ lastName: z.string().max(255).optional(),
22
+ phoneNumber: phoneNumberSchema.optional(),
23
+ userType: z.literal('USER'),
24
+ role: z.nativeEnum(UserRoleEnum),
25
+ });
26
+
27
+ export const baseZodUserSchema = z.discriminatedUnion('userType', [
28
+ adminZodUserSchema,
29
+ userZodUserSchema,
30
+ ]);
31
+ export type UserInterface = z.infer<typeof baseZodUserSchema>;
@@ -0,0 +1,5 @@
1
+ import type { Context } from 'hono';
2
+
3
+ export const getContextUser = (c: Context) => {
4
+ return c.get('user');
5
+ };
@@ -0,0 +1,44 @@
1
+ import { getOneUserSignupData } from './getOneUserSignupData';
2
+ import { AuthenticationUtils } from '@root/lib/AuthenticationUtils';
3
+ import type { UserRepository } from '@root/core/user/UserRepository';
4
+ import type { UserInterface } from '@root/core/user/baseZodUserSchema';
5
+ import type { TokenPayload } from '@root/lib/types';
6
+
7
+ const users: Partial<UserInterface>[] = [];
8
+
9
+ export const createOneSignedUpUser = async (
10
+ userRepository: UserRepository,
11
+ overrides: Partial<UserInterface> = {},
12
+ ) => {
13
+ const userData = getOneUserSignupData(overrides);
14
+ userData.password = await AuthenticationUtils.hashPassword(
15
+ userData.password as string,
16
+ );
17
+
18
+ const createdUser = await userRepository.create(userData as any);
19
+
20
+ // We need to cast createdUser to UserInterface because repository might return something slightly different
21
+ // or TypeScript might infer it differently, but for tests this is usually fine.
22
+ const user = createdUser as UserInterface;
23
+
24
+ const token = await AuthenticationUtils.generateToken(user);
25
+ const payload = AuthenticationUtils.verifyToken(token) as TokenPayload;
26
+
27
+ users.push(user);
28
+ return { token, payload, user };
29
+ };
30
+
31
+ export const deleteCreatedSignedUsers = async (
32
+ userRepository: UserRepository,
33
+ ) => {
34
+ // Check if delete method exists and accepts ID, assuming standard repository pattern
35
+ // If delete is not implementing in repository yet, we might need to use DB directly or skip this.
36
+ // Based on User.ts, we have a base repository.
37
+
38
+ await Promise.all(
39
+ users.map((user) =>
40
+ user.id ? userRepository.delete(user.id) : Promise.resolve(),
41
+ ),
42
+ );
43
+ users.length = 0;
44
+ };
@@ -0,0 +1,28 @@
1
+ import { v7 as randomUUIDv7 } from 'uuid';
2
+ import { type UserInterface } from '@root/core/user/baseZodUserSchema';
3
+ import { PhoneNumberTypeEnum } from '@root/lib/types/PhoneNumberTypeEnum';
4
+ import { UserRoleEnum } from '@root/lib/types/UserRoleEnum';
5
+
6
+ // We need to define the enum values manually since we can't import them directly as values easily in all contexts,
7
+ // or fetch from where they are defined if it's a drizzle enum object.
8
+ // Based on file reads:
9
+ // UserTypePgEnum: ['ADMIN', 'USER']
10
+ // UserRolePgEnum: ['ADMIN', 'AUTHOR', 'EDITOR', 'AUTHENTICATED']
11
+
12
+ export const getOneUserSignupData = (
13
+ overrides: Partial<UserInterface> = {},
14
+ ) => ({
15
+ id: randomUUIDv7(),
16
+ firstName: 'Test',
17
+ lastName: 'User',
18
+ email: `${randomUUIDv7()}@example.com`,
19
+ password: 'password123',
20
+ phoneNumber: {
21
+ countryCode: '+1',
22
+ number: '1234567890',
23
+ type: PhoneNumberTypeEnum.MOBILE,
24
+ },
25
+ userType: 'USER' as const,
26
+ role: UserRoleEnum.AUTHENTICATED,
27
+ ...overrides,
28
+ });
@@ -0,0 +1,28 @@
1
+ import { serve } from '@hono/node-server';
2
+ import type { Hono } from 'hono';
3
+ import supertest from 'supertest';
4
+
5
+ export const getTestServer = (app: Hono, port?: number) => {
6
+ const usePort = port || 3001 + Math.floor(Math.random() * 10000);
7
+
8
+ const server = serve({ port: usePort, fetch: app.fetch });
9
+
10
+ return {
11
+ request: () => supertest(server),
12
+ app,
13
+ port: usePort,
14
+ close: () => {
15
+ return new Promise<boolean>((resolve, reject) => {
16
+ server.close((err) => {
17
+ if (err) {
18
+ console.error(`Error closing server on port ${usePort}:`, err);
19
+ reject(err);
20
+ } else {
21
+ console.log(`Server on port ${usePort} successfully closed`);
22
+ resolve(true);
23
+ }
24
+ });
25
+ });
26
+ },
27
+ };
28
+ };
@@ -0,0 +1,6 @@
1
+ // Roles scoped to each type
2
+ export enum AdminRoleEnum {
3
+ ADMIN = 'admin',
4
+ EDITOR = 'editor',
5
+ AUTHOR = 'author',
6
+ }
@@ -0,0 +1,5 @@
1
+ import type { AdminRoleEnum } from './AdminRoleEnum';
2
+ import type { UserRoleEnum } from './UserRoleEnum';
3
+
4
+ // Keep a union type if you ever need "any role"
5
+ export type AnyRoleEnum = AdminRoleEnum | UserRoleEnum;
@@ -0,0 +1,7 @@
1
+ export enum PhoneNumberTypeEnum {
2
+ HOME = 'home',
3
+ MOBILE = 'mobile',
4
+ WORK = 'work',
5
+ PAGER = 'pager',
6
+ OTHER = 'other',
7
+ }
@@ -0,0 +1,4 @@
1
+ export enum UserRoleEnum {
2
+ AUTHENTICATED = 'authenticated',
3
+ GUEST = 'guest',
4
+ }
@@ -0,0 +1,4 @@
1
+ export enum UserTypeEnum {
2
+ ADMIN = 'ADMIN',
3
+ USER = 'USER',
4
+ }
@@ -0,0 +1,46 @@
1
+ import { inject } from '@kanian77/simple-di';
2
+ import type { Context, Next } from 'hono';
3
+ import { StatusCodes } from 'http-status-codes';
4
+ import { USER_SERVICE_INTERFACE } from '@root/core/user/IUserService';
5
+ import type { UserService } from '@root/core/user/UserService';
6
+ import type { TokenPayload } from '@root/lib';
7
+ import { AuthenticationUtils } from '@root/lib/AuthenticationUtils';
8
+
9
+ export const authGuard = () => {
10
+ return async (c: Context, next: Next) => {
11
+ const authHeader = c.req.header('Authorization');
12
+
13
+ if (!authHeader?.startsWith('Bearer ')) {
14
+ return c.json({ error: 'Unauthorized' }, StatusCodes.UNAUTHORIZED);
15
+ }
16
+
17
+ const token = authHeader.split(' ')[1];
18
+
19
+ if (!token) {
20
+ console.log(' no token')
21
+ return c.json({ error: 'Unauthorized' }, StatusCodes.UNAUTHORIZED);
22
+ }
23
+ try {
24
+ const payload = AuthenticationUtils.verifyToken(token) as TokenPayload;
25
+
26
+ if (!payload) {
27
+ console.log(' no payload')
28
+ return c.json({ error: 'Unauthorized' }, StatusCodes.UNAUTHORIZED);
29
+ }
30
+
31
+ const user = await inject<UserService>(USER_SERVICE_INTERFACE).findById(
32
+ payload.userId,
33
+ );
34
+
35
+ if (!user) {
36
+ console.log(' no user')
37
+ return c.json({ error: 'Unauthorized' }, StatusCodes.UNAUTHORIZED);
38
+ }
39
+
40
+ c.set('user', user);
41
+ await next();
42
+ } catch {
43
+ return c.json({ error: 'Unauthorized' }, StatusCodes.UNAUTHORIZED);
44
+ }
45
+ };
46
+ };
@@ -0,0 +1,2 @@
1
+ export * from './authGuard';
2
+ export * from './roleGuard';
@@ -0,0 +1,16 @@
1
+ import type { AnyRoleEnum } from '@root/lib/types/AnyRoleEnum';
2
+ import type { Context, Next } from 'hono';
3
+ import { StatusCodes } from 'http-status-codes';
4
+
5
+ export const roleGuard = (roles: AnyRoleEnum[]) => {
6
+ return async (c: Context, next: Next) => {
7
+ const user = c.get('user');
8
+ if (!user) {
9
+ return c.json({ error: 'Unauthorized' }, StatusCodes.UNAUTHORIZED);
10
+ }
11
+ if (!roles.includes(user.role)) {
12
+ return c.json({ error: 'Unauthorized' }, StatusCodes.UNAUTHORIZED);
13
+ }
14
+ await next();
15
+ };
16
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "simpledi-app-generator",
3
- "version": "0.0.8",
3
+ "version": "0.0.9",
4
4
  "description": "generates a @kanian77/simple-di app",
5
5
  "author": {
6
6
  "name": "Patrick Assoa Adou",