@solidstarters/solid-core 1.2.6 → 1.2.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 (82) hide show
  1. package/dist/commands/refresh-model.command.d.ts +4 -4
  2. package/dist/commands/refresh-model.command.d.ts.map +1 -1
  3. package/dist/commands/refresh-model.command.js +8 -8
  4. package/dist/commands/refresh-model.command.js.map +1 -1
  5. package/dist/commands/refresh-module.command.d.ts +4 -4
  6. package/dist/commands/refresh-module.command.d.ts.map +1 -1
  7. package/dist/commands/refresh-module.command.js +8 -8
  8. package/dist/commands/refresh-module.command.js.map +1 -1
  9. package/dist/controllers/setting.controller.d.ts +34 -0
  10. package/dist/controllers/setting.controller.d.ts.map +1 -0
  11. package/dist/controllers/setting.controller.js +161 -0
  12. package/dist/controllers/setting.controller.js.map +1 -0
  13. package/dist/dtos/create-field-metadata.dto.d.ts +1 -0
  14. package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
  15. package/dist/dtos/create-field-metadata.dto.js +7 -1
  16. package/dist/dtos/create-field-metadata.dto.js.map +1 -1
  17. package/dist/dtos/create-model-metadata.dto.d.ts +0 -1
  18. package/dist/dtos/create-model-metadata.dto.d.ts.map +1 -1
  19. package/dist/dtos/create-model-metadata.dto.js +1 -6
  20. package/dist/dtos/create-model-metadata.dto.js.map +1 -1
  21. package/dist/dtos/create-setting.dto.d.ts +18 -0
  22. package/dist/dtos/create-setting.dto.d.ts.map +1 -0
  23. package/dist/dtos/create-setting.dto.js +106 -0
  24. package/dist/dtos/create-setting.dto.js.map +1 -0
  25. package/dist/dtos/update-setting.dto.d.ts +19 -0
  26. package/dist/dtos/update-setting.dto.d.ts.map +1 -0
  27. package/dist/dtos/update-setting.dto.js +110 -0
  28. package/dist/dtos/update-setting.dto.js.map +1 -0
  29. package/dist/entities/field-metadata.entity.d.ts +1 -0
  30. package/dist/entities/field-metadata.entity.d.ts.map +1 -1
  31. package/dist/entities/field-metadata.entity.js +5 -1
  32. package/dist/entities/field-metadata.entity.js.map +1 -1
  33. package/dist/entities/model-metadata.entity.d.ts +0 -1
  34. package/dist/entities/model-metadata.entity.d.ts.map +1 -1
  35. package/dist/entities/model-metadata.entity.js +1 -5
  36. package/dist/entities/model-metadata.entity.js.map +1 -1
  37. package/dist/entities/setting.entity.d.ts +19 -0
  38. package/dist/entities/setting.entity.d.ts.map +1 -0
  39. package/dist/entities/setting.entity.js +95 -0
  40. package/dist/entities/setting.entity.js.map +1 -0
  41. package/dist/index.d.ts +4 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +4 -0
  44. package/dist/index.js.map +1 -1
  45. package/dist/seeders/seed-data/solid-core-metadata.json +410 -94
  46. package/dist/services/field-metadata.service.d.ts.map +1 -1
  47. package/dist/services/field-metadata.service.js +2 -1
  48. package/dist/services/field-metadata.service.js.map +1 -1
  49. package/dist/services/file.service.d.ts +1 -0
  50. package/dist/services/file.service.d.ts.map +1 -1
  51. package/dist/services/file.service.js +8 -0
  52. package/dist/services/file.service.js.map +1 -1
  53. package/dist/services/model-metadata.service.d.ts.map +1 -1
  54. package/dist/services/model-metadata.service.js +28 -10
  55. package/dist/services/model-metadata.service.js.map +1 -1
  56. package/dist/services/setting.service.d.ts +31 -0
  57. package/dist/services/setting.service.d.ts.map +1 -0
  58. package/dist/services/setting.service.js +94 -0
  59. package/dist/services/setting.service.js.map +1 -0
  60. package/dist/solid-core.module.d.ts.map +1 -1
  61. package/dist/solid-core.module.js +6 -0
  62. package/dist/solid-core.module.js.map +1 -1
  63. package/dist/tsconfig.tsbuildinfo +1 -1
  64. package/package.json +1 -1
  65. package/src/commands/refresh-model.command.ts +31 -31
  66. package/src/commands/refresh-module.command.ts +32 -32
  67. package/src/controllers/setting.controller.ts +80 -0
  68. package/src/dtos/create-field-metadata.dto.ts +5 -0
  69. package/src/dtos/create-model-metadata.dto.ts +0 -4
  70. package/src/dtos/create-setting.dto.ts +63 -0
  71. package/src/dtos/update-setting.dto.ts +66 -0
  72. package/src/entities/field-metadata.entity.ts +2 -0
  73. package/src/entities/model-metadata.entity.ts +0 -3
  74. package/src/entities/setting.entity.ts +49 -0
  75. package/src/index.ts +5 -0
  76. package/src/seeders/seed-data/solid-core-metadata.json +410 -94
  77. package/src/services/1.js +6 -0
  78. package/src/services/field-metadata.service.ts +2 -1
  79. package/src/services/file.service.ts +9 -0
  80. package/src/services/model-metadata.service.ts +36 -11
  81. package/src/services/setting.service.ts +71 -0
  82. package/src/solid-core.module.ts +6 -0
@@ -279,20 +279,6 @@
279
279
  "relationModelModuleName": "solid-core",
280
280
  "isSystem": true
281
281
  },
282
- {
283
- "name": "isExportable",
284
- "displayName": "Is Exportable",
285
- "type": "boolean",
286
- "ormType": "boolean",
287
- "defaultValue": "false",
288
- "required": false,
289
- "unique": false,
290
- "index": false,
291
- "private": false,
292
- "encrypt": false,
293
- "columnName": "is_exportable",
294
- "isSystem": true
295
- },
296
282
  {
297
283
  "name": "userKeyField",
298
284
  "displayName": "User Key Field",
@@ -843,6 +829,20 @@
843
829
  "encrypt": false,
844
830
  "columnName": "column_name",
845
831
  "isSystem": true
832
+ },
833
+ {
834
+ "name": "isUserKey",
835
+ "displayName": "Is User Key",
836
+ "type": "boolean",
837
+ "ormType": "boolean",
838
+ "defaultValue": "false",
839
+ "required": false,
840
+ "unique": false,
841
+ "index": false,
842
+ "private": false,
843
+ "encrypt": false,
844
+ "columnName": "required",
845
+ "isSystem": true
846
846
  }
847
847
  ]
848
848
  },
@@ -1295,7 +1295,7 @@
1295
1295
  "name": "parentMenuItem",
1296
1296
  "displayName": "Parent Menu Item",
1297
1297
  "type": "relation",
1298
- "required": true,
1298
+ "required": false,
1299
1299
  "unique": false,
1300
1300
  "index": true,
1301
1301
  "private": false,
@@ -2156,6 +2156,212 @@
2156
2156
  "relationModelModuleName": "solid-core"
2157
2157
  }
2158
2158
  ]
2159
+ },
2160
+ {
2161
+ "singularName": "setting",
2162
+ "tableName": "ss_setting",
2163
+ "pluralName": "settings",
2164
+ "displayName": "Settings",
2165
+ "description": "Model to capture all settings",
2166
+ "dataSource": "default",
2167
+ "dataSourceType": "postgres",
2168
+ "isSystem": true,
2169
+ "userKeyFieldUserKey": "username",
2170
+ "fields": [
2171
+ {
2172
+ "name": "authPagesLayout",
2173
+ "displayName": "Auth Pages Layout",
2174
+ "type": "selectionStatic",
2175
+ "ormType": "varchar",
2176
+ "length": 128,
2177
+ "required": false,
2178
+ "unique": false,
2179
+ "index": false,
2180
+ "private": false,
2181
+ "encrypt": false,
2182
+ "isSystem": true,
2183
+ "selectionStaticValues": [
2184
+ "left:Left",
2185
+ "center:Center",
2186
+ "right:Right"
2187
+ ]
2188
+ },
2189
+ {
2190
+ "name": "authPagesTheme",
2191
+ "displayName": "Auth Pages Theme",
2192
+ "type": "selectionStatic",
2193
+ "ormType": "varchar",
2194
+ "length": 128,
2195
+ "required": false,
2196
+ "unique": false,
2197
+ "index": false,
2198
+ "private": false,
2199
+ "encrypt": false,
2200
+ "isSystem": true,
2201
+ "selectionStaticValues": [
2202
+ "dark:Dark",
2203
+ "light:Light"
2204
+ ]
2205
+ },
2206
+ {
2207
+ "name": "appTitle",
2208
+ "displayName": "App Title",
2209
+ "type": "shortText",
2210
+ "ormType": "varchar",
2211
+ "length": 512,
2212
+ "required": false,
2213
+ "unique": false,
2214
+ "index": false,
2215
+ "private": false,
2216
+ "encrypt": false,
2217
+ "isSystem": true
2218
+ },
2219
+ {
2220
+ "name": "appLogo",
2221
+ "displayName": "App Logo",
2222
+ "type": "mediaSingle",
2223
+ "mediaStorageProviderUserKey": "default-filesystem",
2224
+ "required": false,
2225
+ "unique": false,
2226
+ "index": false,
2227
+ "private": false,
2228
+ "encrypt": false,
2229
+ "isSystem": true
2230
+ },
2231
+ {
2232
+ "name": "appDescription",
2233
+ "displayName": "App Description",
2234
+ "type": "longText",
2235
+ "ormType": "varchar",
2236
+ "required": false,
2237
+ "unique": false,
2238
+ "index": false,
2239
+ "private": false,
2240
+ "encrypt": false,
2241
+ "isSystem": true
2242
+ },
2243
+ {
2244
+ "name": "appTnc",
2245
+ "displayName": "App TNC",
2246
+ "type": "richText",
2247
+ "ormType": "varchar",
2248
+ "required": false,
2249
+ "unique": false,
2250
+ "index": false,
2251
+ "private": false,
2252
+ "encrypt": false,
2253
+ "isSystem": true
2254
+ },
2255
+ {
2256
+ "name": "appPrivacyPolicy",
2257
+ "displayName": "App Privacy Policy",
2258
+ "type": "richText",
2259
+ "ormType": "varchar",
2260
+ "required": false,
2261
+ "unique": false,
2262
+ "index": false,
2263
+ "private": false,
2264
+ "encrypt": false,
2265
+ "isSystem": true
2266
+ },
2267
+ {
2268
+ "name": "iamAllowPublicRegistration",
2269
+ "displayName": "Iam Allow Public Registration",
2270
+ "type": "boolean",
2271
+ "ormType": "boolean",
2272
+ "required": false,
2273
+ "unique": false,
2274
+ "index": false,
2275
+ "private": false,
2276
+ "encrypt": false,
2277
+ "isSystem": true
2278
+ },
2279
+ {
2280
+ "name": "iamPasswordRegistrationEnabled",
2281
+ "displayName": "Iam Password Registration Enabled",
2282
+ "type": "boolean",
2283
+ "ormType": "boolean",
2284
+ "required": false,
2285
+ "unique": false,
2286
+ "index": false,
2287
+ "private": false,
2288
+ "encrypt": false,
2289
+ "isSystem": true
2290
+ },
2291
+ {
2292
+ "name": "iamPasswordLessRegistrationEnabled",
2293
+ "displayName": "Iam Password Less Registration enabled",
2294
+ "type": "boolean",
2295
+ "ormType": "boolean",
2296
+ "required": false,
2297
+ "unique": false,
2298
+ "index": false,
2299
+ "private": false,
2300
+ "encrypt": false,
2301
+ "isSystem": true
2302
+ },
2303
+ {
2304
+ "name": "iamActivateUserOnRegistration",
2305
+ "displayName": "Iam Activate User On Registration",
2306
+ "type": "boolean",
2307
+ "ormType": "boolean",
2308
+ "required": false,
2309
+ "unique": false,
2310
+ "index": false,
2311
+ "private": false,
2312
+ "encrypt": false,
2313
+ "isSystem": true
2314
+ },
2315
+ {
2316
+ "name": "iamDefaultRole",
2317
+ "displayName": "Iam Default Role",
2318
+ "type": "shortText",
2319
+ "ormType": "varchar",
2320
+ "length": 512,
2321
+ "required": false,
2322
+ "unique": false,
2323
+ "index": false,
2324
+ "private": false,
2325
+ "encrypt": false,
2326
+ "isSystem": true
2327
+ },
2328
+ {
2329
+ "name": "iamGoogleOAuthEnabled",
2330
+ "displayName": "Iam Google OAuth Enabled",
2331
+ "type": "boolean",
2332
+ "ormType": "boolean",
2333
+ "required": false,
2334
+ "unique": false,
2335
+ "index": false,
2336
+ "private": false,
2337
+ "encrypt": false,
2338
+ "isSystem": true
2339
+ },
2340
+ {
2341
+ "name": "shouldQueueEmails",
2342
+ "displayName": "Should Queue Emails",
2343
+ "type": "boolean",
2344
+ "ormType": "boolean",
2345
+ "required": false,
2346
+ "unique": false,
2347
+ "index": false,
2348
+ "private": false,
2349
+ "encrypt": false,
2350
+ "isSystem": true
2351
+ },
2352
+ {
2353
+ "name": "shouldQueueSms",
2354
+ "displayName": "Should Queue SMS",
2355
+ "type": "boolean",
2356
+ "ormType": "boolean",
2357
+ "required": false,
2358
+ "unique": false,
2359
+ "index": false,
2360
+ "private": false,
2361
+ "encrypt": false,
2362
+ "isSystem": true
2363
+ }
2364
+ ]
2159
2365
  }
2160
2366
  ]
2161
2367
  },
@@ -2371,6 +2577,19 @@
2371
2577
  "viewUserKey": "mqMessageQueue-list-view",
2372
2578
  "moduleUserKey": "solid-core",
2373
2579
  "modelUserKey": "mqMessageQueue"
2580
+ },
2581
+ {
2582
+ "displayName": "Settings action",
2583
+ "name": "settings-list-action",
2584
+ "type": "solid",
2585
+ "domain": "",
2586
+ "context": "",
2587
+ "customComponent": "",
2588
+ "customIsModal": true,
2589
+ "serverEndpoint": "",
2590
+ "viewUserKey": "settings-list-view",
2591
+ "moduleUserKey": "solid-core",
2592
+ "modelUserKey": "setting"
2374
2593
  }
2375
2594
  ],
2376
2595
  "menus": [
@@ -2815,14 +3034,6 @@
2815
3034
  "filterable": true
2816
3035
  }
2817
3036
  },
2818
- {
2819
- "type": "field",
2820
- "attrs": {
2821
- "name": "dataSourceType",
2822
- "sortable": true,
2823
- "filterable": true
2824
- }
2825
- },
2826
3037
  {
2827
3038
  "type": "field",
2828
3039
  "attrs": {
@@ -2831,22 +3042,6 @@
2831
3042
  "filterable": true
2832
3043
  }
2833
3044
  },
2834
- {
2835
- "type": "field",
2836
- "attrs": {
2837
- "name": "enableAuditTracking",
2838
- "sortable": true,
2839
- "filterable": true
2840
- }
2841
- },
2842
- {
2843
- "type": "field",
2844
- "attrs": {
2845
- "name": "internationalisation",
2846
- "sortable": true,
2847
- "filterable": true
2848
- }
2849
- },
2850
3045
  {
2851
3046
  "type": "field",
2852
3047
  "attrs": {
@@ -2854,30 +3049,6 @@
2854
3049
  "sortable": true,
2855
3050
  "filterable": true
2856
3051
  }
2857
- },
2858
- {
2859
- "type": "field",
2860
- "attrs": {
2861
- "name": "isExportable",
2862
- "sortable": true,
2863
- "filterable": true
2864
- }
2865
- },
2866
- {
2867
- "type": "field",
2868
- "attrs": {
2869
- "name": "userKeyField",
2870
- "sortable": true,
2871
- "filterable": true
2872
- }
2873
- },
2874
- {
2875
- "type": "field",
2876
- "attrs": {
2877
- "name": "isSystem",
2878
- "sortable": true,
2879
- "filterable": true
2880
- }
2881
3052
  }
2882
3053
  ]
2883
3054
  }
@@ -2947,30 +3118,12 @@
2947
3118
  "name": "dataSource"
2948
3119
  }
2949
3120
  },
2950
- {
2951
- "type": "field",
2952
- "attrs": {
2953
- "name": "dataSourceType"
2954
- }
2955
- },
2956
3121
  {
2957
3122
  "type": "field",
2958
3123
  "attrs": {
2959
3124
  "name": "enableSoftDelete"
2960
3125
  }
2961
3126
  },
2962
- {
2963
- "type": "field",
2964
- "attrs": {
2965
- "name": "enableAuditTracking"
2966
- }
2967
- },
2968
- {
2969
- "type": "field",
2970
- "attrs": {
2971
- "name": "internationalisation"
2972
- }
2973
- },
2974
3127
  {
2975
3128
  "type": "field",
2976
3129
  "attrs": {
@@ -2980,19 +3133,7 @@
2980
3133
  {
2981
3134
  "type": "field",
2982
3135
  "attrs": {
2983
- "name": "isExportable"
2984
- }
2985
- },
2986
- {
2987
- "type": "field",
2988
- "attrs": {
2989
- "name": "userKeyField"
2990
- }
2991
- },
2992
- {
2993
- "type": "field",
2994
- "attrs": {
2995
- "name": "isSystem"
3136
+ "name": "isUserKey"
2996
3137
  }
2997
3138
  }
2998
3139
  ]
@@ -5524,6 +5665,181 @@
5524
5665
  }
5525
5666
  ]
5526
5667
  }
5668
+ },
5669
+ {
5670
+ "name": "settings-list-view",
5671
+ "displayName": "Settings",
5672
+ "type": "list",
5673
+ "context": "{}",
5674
+ "moduleUserKey": "solid-core",
5675
+ "modelUserKey": "setting",
5676
+ "layout": {
5677
+ "type": "list",
5678
+ "attrs": {
5679
+ "pagination": true,
5680
+ "pageSizeOptions": [
5681
+ 10,
5682
+ 25,
5683
+ 50
5684
+ ],
5685
+ "enableGlobalSearch": true,
5686
+ "create": true,
5687
+ "edit": true,
5688
+ "delete": false
5689
+ },
5690
+ "children": [
5691
+ {
5692
+ "type": "field",
5693
+ "attrs": {
5694
+ "name": "appTitle",
5695
+ "label": "App Name",
5696
+ "sortable": true,
5697
+ "filterable": true
5698
+ }
5699
+ }
5700
+ ]
5701
+ }
5702
+ },
5703
+ {
5704
+ "name": "settings-form-view",
5705
+ "displayName": "Settings",
5706
+ "type": "form",
5707
+ "context": "{}",
5708
+ "moduleUserKey": "solid-core",
5709
+ "modelUserKey": "setting",
5710
+ "layout": {
5711
+ "type": "form",
5712
+ "attrs": {
5713
+ "name": "form-1",
5714
+ "label": "Settings",
5715
+ "className": "grid"
5716
+ },
5717
+ "children": [
5718
+ {
5719
+ "type": "sheet",
5720
+ "attrs": {
5721
+ "name": "sheet-1"
5722
+ },
5723
+ "children": [
5724
+ {
5725
+ "type": "group",
5726
+ "attrs": {
5727
+ "name": "group-1",
5728
+ "label": "",
5729
+ "className": "col-6"
5730
+ },
5731
+ "children": [
5732
+ {
5733
+ "type": "field",
5734
+ "attrs": {
5735
+ "name": "authPagesLayout",
5736
+ "label": "Auth Pages Layout"
5737
+ }
5738
+ },
5739
+ {
5740
+ "type": "field",
5741
+ "attrs": {
5742
+ "name": "authPagesTheme",
5743
+ "label": "Auth Pages Theme"
5744
+ }
5745
+ },
5746
+ {
5747
+ "type": "field",
5748
+ "attrs": {
5749
+ "name": "appTitle",
5750
+ "label": "App Title"
5751
+ }
5752
+ },
5753
+ {
5754
+ "type": "field",
5755
+ "attrs": {
5756
+ "name": "appLogo",
5757
+ "label": "App Logo"
5758
+ }
5759
+ },
5760
+ {
5761
+ "type": "field",
5762
+ "attrs": {
5763
+ "name": "appDescription",
5764
+ "label": "App Description"
5765
+ }
5766
+ },
5767
+ {
5768
+ "type": "field",
5769
+ "attrs": {
5770
+ "name": "appTnc",
5771
+ "label": "App TNC"
5772
+ }
5773
+ },
5774
+ {
5775
+ "type": "field",
5776
+ "attrs": {
5777
+ "name": "appPrivacyPolicy",
5778
+ "label": "App Privacy Policy"
5779
+ }
5780
+ },
5781
+ {
5782
+ "type": "field",
5783
+ "attrs": {
5784
+ "name": "iamAllowPublicRegistration",
5785
+ "label": "Iam Allow Public Registration"
5786
+ }
5787
+ },
5788
+ {
5789
+ "type": "field",
5790
+ "attrs": {
5791
+ "name": "iamPasswordRegistrationEnabled",
5792
+ "label": "Iam Password Registration Enabled"
5793
+ }
5794
+ },
5795
+ {
5796
+ "type": "field",
5797
+ "attrs": {
5798
+ "name": "iamPasswordLessRegistrationEnabled",
5799
+ "label": "Iam Password Less Registration enabled"
5800
+ }
5801
+ },
5802
+ {
5803
+ "type": "field",
5804
+ "attrs": {
5805
+ "name": "iamActivateUserOnRegistration",
5806
+ "label": "Iam Activate User On Registration"
5807
+ }
5808
+ },
5809
+ {
5810
+ "type": "field",
5811
+ "attrs": {
5812
+ "name": "iamDefaultRole",
5813
+ "label": "Iam Default Role"
5814
+ }
5815
+ },
5816
+ {
5817
+ "type": "field",
5818
+ "attrs": {
5819
+ "name": "iamGoogleOAuthEnabled",
5820
+ "label": "Iam Google OAuth Enabled"
5821
+ }
5822
+ },
5823
+ {
5824
+ "type": "field",
5825
+ "attrs": {
5826
+ "name": "shouldQueueEmails",
5827
+ "label": "Should Queue Emails"
5828
+ }
5829
+ },
5830
+ {
5831
+ "type": "field",
5832
+ "attrs": {
5833
+ "name": "shouldQueueSms",
5834
+ "label": "Should Queue SMS"
5835
+ }
5836
+ }
5837
+ ]
5838
+ }
5839
+ ]
5840
+ }
5841
+ ]
5842
+ }
5527
5843
  }
5528
5844
  ],
5529
5845
  "emailTemplates": [
@@ -0,0 +1,6 @@
1
+ 1. Do i need to create a storeStreams method for aws service too?
2
+ - Handle later
3
+ 2. queues handling -> if queues is enabled by default, i.e triggerExport(exportTransactionEntity.id).
4
+ - startExport should either return the data or return the transaction id
5
+ 3. How to handle scenarios wherein, nested related exist.(do i need to only get the userkey)
6
+ - show the userKey
@@ -419,7 +419,8 @@ export class FieldMetadataService {
419
419
  "encrypt",
420
420
  "encryptionType",
421
421
  "decryptWhen",
422
- "columnName"
422
+ "columnName",
423
+ "isUserKey"
423
424
  ];
424
425
 
425
426
  case SolidFieldType.longtext:
@@ -4,6 +4,7 @@ import * as fs from 'fs';
4
4
  import { S3Client, PutObjectCommand, DeleteObjectCommand, ObjectCannedACL } from '@aws-sdk/client-s3';
5
5
  import { ConfigType } from '@nestjs/config';
6
6
  import commonConfig, { AwsS3Config } from '../config/common.config';
7
+ import path from 'path';
7
8
 
8
9
 
9
10
 
@@ -65,12 +66,20 @@ export class FileService {
65
66
  async copyFile(sourcePath: string, destinationPath: string): Promise<void> {
66
67
  try {
67
68
  const data = await this.readFile(sourcePath);
69
+ await this.createDirectoryIfNotExists(destinationPath);
68
70
  await this.writeFile(destinationPath, data);
69
71
  } catch (error) {
70
72
  throw new Error(`Error copying file: ${error.message}`);
71
73
  }
72
74
  }
73
75
 
76
+ async createDirectoryIfNotExists(filePath: string): Promise<void> {
77
+ const dir = path.dirname(filePath);
78
+ if (!fs.existsSync(dir)) {
79
+ fs.mkdirSync(dir, { recursive: true });
80
+ }
81
+ }
82
+
74
83
  deleteFile(filePath: string): Promise<void> {
75
84
  return new Promise((resolve, reject) => {
76
85
  fs.unlink(filePath, (err) => {