@comet/cms-api 9.0.0-canary-20251209132220 → 9.0.0-canary-20251211112608

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 (128) hide show
  1. package/lib/auth/guards/comet.guard.d.ts +2 -1
  2. package/lib/auth/guards/comet.guard.d.ts.map +1 -1
  3. package/lib/auth/guards/comet.guard.js +7 -3
  4. package/lib/auth/guards/comet.guard.js.map +1 -1
  5. package/lib/builds/build-templates.resolver.js +2 -2
  6. package/lib/builds/build-templates.resolver.js.map +1 -1
  7. package/lib/builds/builds.resolver.js +2 -2
  8. package/lib/builds/builds.resolver.js.map +1 -1
  9. package/lib/common/guards/cdn.guard.d.ts +2 -1
  10. package/lib/common/guards/cdn.guard.d.ts.map +1 -1
  11. package/lib/common/guards/cdn.guard.js +9 -3
  12. package/lib/common/guards/cdn.guard.js.map +1 -1
  13. package/lib/cron-jobs/cron-jobs.resolver.js +2 -2
  14. package/lib/cron-jobs/cron-jobs.resolver.js.map +1 -1
  15. package/lib/cron-jobs/cron-jobs.service.d.ts.map +1 -1
  16. package/lib/cron-jobs/cron-jobs.service.js +3 -2
  17. package/lib/cron-jobs/cron-jobs.service.js.map +1 -1
  18. package/lib/cron-jobs/dto/cron-job.object.d.ts +1 -0
  19. package/lib/cron-jobs/dto/cron-job.object.d.ts.map +1 -1
  20. package/lib/cron-jobs/dto/cron-job.object.js +4 -0
  21. package/lib/cron-jobs/dto/cron-job.object.js.map +1 -1
  22. package/lib/cron-jobs/jobs.resolver.js +2 -2
  23. package/lib/cron-jobs/jobs.resolver.js.map +1 -1
  24. package/lib/file-uploads/dto/file-upload.body.d.ts +4 -0
  25. package/lib/file-uploads/dto/file-upload.body.d.ts.map +1 -0
  26. package/lib/file-uploads/dto/file-upload.body.js +25 -0
  27. package/lib/file-uploads/dto/file-upload.body.js.map +1 -0
  28. package/lib/file-uploads/entities/file-upload.entity.d.ts +1 -0
  29. package/lib/file-uploads/entities/file-upload.entity.d.ts.map +1 -1
  30. package/lib/file-uploads/entities/file-upload.entity.js +9 -1
  31. package/lib/file-uploads/entities/file-upload.entity.js.map +1 -1
  32. package/lib/file-uploads/file-upload-expiration.subscriber.d.ts +12 -0
  33. package/lib/file-uploads/file-upload-expiration.subscriber.d.ts.map +1 -0
  34. package/lib/file-uploads/file-upload-expiration.subscriber.js +50 -0
  35. package/lib/file-uploads/file-upload-expiration.subscriber.js.map +1 -0
  36. package/lib/file-uploads/file-uploads-upload.controller.d.ts.map +1 -1
  37. package/lib/file-uploads/file-uploads-upload.controller.js +5 -3
  38. package/lib/file-uploads/file-uploads-upload.controller.js.map +1 -1
  39. package/lib/file-uploads/file-uploads.config.d.ts +8 -0
  40. package/lib/file-uploads/file-uploads.config.d.ts.map +1 -1
  41. package/lib/file-uploads/file-uploads.module.d.ts.map +1 -1
  42. package/lib/file-uploads/file-uploads.module.js +7 -1
  43. package/lib/file-uploads/file-uploads.module.js.map +1 -1
  44. package/lib/file-uploads/file-uploads.service.d.ts +8 -3
  45. package/lib/file-uploads/file-uploads.service.d.ts.map +1 -1
  46. package/lib/file-uploads/file-uploads.service.js +49 -6
  47. package/lib/file-uploads/file-uploads.service.js.map +1 -1
  48. package/lib/importer/data-streams/data-stream.d.ts +10 -0
  49. package/lib/importer/data-streams/data-stream.d.ts.map +1 -0
  50. package/lib/importer/data-streams/data-stream.js +7 -0
  51. package/lib/importer/data-streams/data-stream.js.map +1 -0
  52. package/lib/importer/data-streams/file-data-stream.d.ts +22 -0
  53. package/lib/importer/data-streams/file-data-stream.d.ts.map +1 -0
  54. package/lib/importer/data-streams/file-data-stream.js +16 -0
  55. package/lib/importer/data-streams/file-data-stream.js.map +1 -0
  56. package/lib/importer/data-streams/local-file-data-stream.d.ts +18 -0
  57. package/lib/importer/data-streams/local-file-data-stream.d.ts.map +1 -0
  58. package/lib/importer/data-streams/local-file-data-stream.js +99 -0
  59. package/lib/importer/data-streams/local-file-data-stream.js.map +1 -0
  60. package/lib/importer/decorators/csv-column.decorator.d.ts +35 -0
  61. package/lib/importer/decorators/csv-column.decorator.d.ts.map +1 -0
  62. package/lib/importer/decorators/csv-column.decorator.js +63 -0
  63. package/lib/importer/decorators/csv-column.decorator.js.map +1 -0
  64. package/lib/importer/import-target.interface.d.ts +6 -0
  65. package/lib/importer/import-target.interface.d.ts.map +1 -0
  66. package/lib/importer/import-target.interface.js +3 -0
  67. package/lib/importer/import-target.interface.js.map +1 -0
  68. package/lib/importer/importer-input.type.d.ts +4 -0
  69. package/lib/importer/importer-input.type.d.ts.map +1 -0
  70. package/lib/importer/importer-input.type.js +3 -0
  71. package/lib/importer/importer-input.type.js.map +1 -0
  72. package/lib/importer/pipes/end.pipe.d.ts +14 -0
  73. package/lib/importer/pipes/end.pipe.d.ts.map +1 -0
  74. package/lib/importer/pipes/end.pipe.js +19 -0
  75. package/lib/importer/pipes/end.pipe.js.map +1 -0
  76. package/lib/importer/pipes/importer-pipe.type.d.ts +19 -0
  77. package/lib/importer/pipes/importer-pipe.type.d.ts.map +1 -0
  78. package/lib/importer/pipes/importer-pipe.type.js +3 -0
  79. package/lib/importer/pipes/importer-pipe.type.js.map +1 -0
  80. package/lib/importer/pipes/parsers/csv-parser-and-transform.composite-pipe.d.ts +13 -0
  81. package/lib/importer/pipes/parsers/csv-parser-and-transform.composite-pipe.d.ts.map +1 -0
  82. package/lib/importer/pipes/parsers/csv-parser-and-transform.composite-pipe.js +22 -0
  83. package/lib/importer/pipes/parsers/csv-parser-and-transform.composite-pipe.js.map +1 -0
  84. package/lib/importer/pipes/parsers/csv-parser.pipe.d.ts +24 -0
  85. package/lib/importer/pipes/parsers/csv-parser.pipe.d.ts.map +1 -0
  86. package/lib/importer/pipes/parsers/csv-parser.pipe.js +98 -0
  87. package/lib/importer/pipes/parsers/csv-parser.pipe.js.map +1 -0
  88. package/lib/importer/pipes/parsers/data-transformer.pipe.d.ts +19 -0
  89. package/lib/importer/pipes/parsers/data-transformer.pipe.d.ts.map +1 -0
  90. package/lib/importer/pipes/parsers/data-transformer.pipe.js +51 -0
  91. package/lib/importer/pipes/parsers/data-transformer.pipe.js.map +1 -0
  92. package/lib/importer/pipes/parsers/data-validator.pipe.d.ts +15 -0
  93. package/lib/importer/pipes/parsers/data-validator.pipe.d.ts.map +1 -0
  94. package/lib/importer/pipes/parsers/data-validator.pipe.js +61 -0
  95. package/lib/importer/pipes/parsers/data-validator.pipe.js.map +1 -0
  96. package/lib/index.d.ts +9 -0
  97. package/lib/index.d.ts.map +1 -1
  98. package/lib/index.js +16 -2
  99. package/lib/index.js.map +1 -1
  100. package/lib/kubernetes/{prevent-local-invocation.guard.d.ts → kubernetes-authentication.guard.d.ts} +2 -2
  101. package/lib/kubernetes/kubernetes-authentication.guard.d.ts.map +1 -0
  102. package/lib/kubernetes/{prevent-local-invocation.guard.js → kubernetes-authentication.guard.js} +10 -10
  103. package/lib/kubernetes/kubernetes-authentication.guard.js.map +1 -0
  104. package/lib/kubernetes/kubernetes.module.d.ts +8 -2
  105. package/lib/kubernetes/kubernetes.module.d.ts.map +1 -1
  106. package/lib/kubernetes/kubernetes.module.js.map +1 -1
  107. package/lib/kubernetes/kubernetes.service.d.ts +2 -1
  108. package/lib/kubernetes/kubernetes.service.d.ts.map +1 -1
  109. package/lib/kubernetes/kubernetes.service.js +25 -17
  110. package/lib/kubernetes/kubernetes.service.js.map +1 -1
  111. package/lib/mikro-orm/migrations/Migration20251013081751.d.ts +5 -0
  112. package/lib/mikro-orm/migrations/Migration20251013081751.d.ts.map +1 -0
  113. package/lib/mikro-orm/migrations/Migration20251013081751.js +22 -0
  114. package/lib/mikro-orm/migrations/Migration20251013081751.js.map +1 -0
  115. package/lib/mikro-orm/mikro-orm.module.d.ts.map +1 -1
  116. package/lib/mikro-orm/mikro-orm.module.js +2 -0
  117. package/lib/mikro-orm/mikro-orm.module.js.map +1 -1
  118. package/lib/tsconfig.build.tsbuildinfo +1 -1
  119. package/lib/user-permissions/auth/user-permissions.guard.d.ts +2 -1
  120. package/lib/user-permissions/auth/user-permissions.guard.d.ts.map +1 -1
  121. package/lib/user-permissions/auth/user-permissions.guard.js +18 -8
  122. package/lib/user-permissions/auth/user-permissions.guard.js.map +1 -1
  123. package/lib/warnings/warning-checker.command.d.ts.map +1 -1
  124. package/lib/warnings/warning-checker.command.js +9 -11
  125. package/lib/warnings/warning-checker.command.js.map +1 -1
  126. package/package.json +16 -14
  127. package/lib/kubernetes/prevent-local-invocation.guard.d.ts.map +0 -1
  128. package/lib/kubernetes/prevent-local-invocation.guard.js.map +0 -1
@@ -14,6 +14,7 @@ const blob_storage_module_1 = require("../blob-storage/blob-storage.module");
14
14
  const file_validation_service_1 = require("../file-utils/file-validation.service");
15
15
  const imgproxy_module_1 = require("../imgproxy/imgproxy.module");
16
16
  const file_upload_entity_1 = require("./entities/file-upload.entity");
17
+ const file_upload_expiration_subscriber_1 = require("./file-upload-expiration.subscriber");
17
18
  const file_uploads_constants_1 = require("./file-uploads.constants");
18
19
  const file_uploads_resolver_1 = require("./file-uploads.resolver");
19
20
  const file_uploads_service_1 = require("./file-uploads.service");
@@ -34,7 +35,12 @@ let FileUploadsModule = FileUploadsModule_1 = class FileUploadsModule {
34
35
  }),
35
36
  };
36
37
  const controllers = [(0, file_uploads_upload_controller_1.createFileUploadsUploadController)((_a = options.upload) !== null && _a !== void 0 ? _a : { public: false })];
37
- const providers = [fileUploadsConfigProvider, file_uploads_service_1.FileUploadsService, fileUploadsFileValidatorProvider];
38
+ const providers = [
39
+ fileUploadsConfigProvider,
40
+ file_uploads_service_1.FileUploadsService,
41
+ fileUploadsFileValidatorProvider,
42
+ file_upload_expiration_subscriber_1.FileUploadExpirationSubscriber,
43
+ ];
38
44
  if (options.download) {
39
45
  if (options.download.secret.length < 16) {
40
46
  throw new Error("The download secret must be at least 16 characters long.");
@@ -1 +1 @@
1
- {"version":3,"file":"file-uploads.module.js","sourceRoot":"","sources":["../../src/file-uploads/file-uploads.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,8CAAmD;AACnD,2CAAyE;AAEzE,6EAAwE;AACxE,mFAA8E;AAC9E,iEAA6D;AAC7D,sEAA2D;AAE3D,qEAAqG;AACrG,mEAA8D;AAC9D,iEAA4D;AAC5D,yFAAyF;AACzF,qFAAqF;AAI9E,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAC1B,MAAM,CAAC,QAAQ,CAAC,OAA0B;;QACtC,MAAM,yBAAyB,GAAG;YAC9B,OAAO,EAAE,4CAAmB;YAC5B,QAAQ,EAAE,OAAO;SACpB,CAAC;QAEF,MAAM,gCAAgC,GAAG;YACrC,OAAO,EAAE,6DAAoC;YAC7C,QAAQ,EAAE,IAAI,+CAAqB,CAAC;gBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;aAC/C,CAAC;SACL,CAAC;QAEF,MAAM,WAAW,GAAG,CAAC,IAAA,kEAAiC,EAAC,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7F,MAAM,SAAS,GAAe,CAAC,yBAAyB,EAAE,yCAAkB,EAAE,gCAAgC,CAAC,CAAC;QAEhH,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAChF,CAAC;YAED,MAAM,6BAA6B,GAAG,IAAA,sEAAmC,EAAC,EAAE,MAAM,EAAE,MAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,mCAAI,KAAK,EAAE,CAAC,CAAC;YACxH,WAAW,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAEhD,MAAM,iBAAiB,GAAG,MAAA,OAAO,CAAC,QAAQ,CAAC,oBAAoB,mCAAI,IAAI,CAAC;YAExE,IAAI,iBAAiB,EAAE,CAAC;gBACpB,SAAS,CAAC,IAAI,CAAC,2CAAmB,CAAC,CAAC;YACxC,CAAC;QACL,CAAC;QAED,OAAO;YACH,MAAM,EAAE,mBAAiB;YACzB,OAAO,EAAE,CAAC,uBAAc,CAAC,UAAU,CAAC,CAAC,+BAAU,CAAC,CAAC,EAAE,uCAAiB,EAAE,gCAAc,CAAC;YACrF,SAAS;YACT,WAAW;YACX,OAAO,EAAE,CAAC,yCAAkB,CAAC;SAChC,CAAC;IACN,CAAC;CACJ,CAAA;AAzCY,8CAAiB;4BAAjB,iBAAiB;IAF7B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,iBAAiB,CAyC7B"}
1
+ {"version":3,"file":"file-uploads.module.js","sourceRoot":"","sources":["../../src/file-uploads/file-uploads.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,8CAAmD;AACnD,2CAAyE;AAEzE,6EAAwE;AACxE,mFAA8E;AAC9E,iEAA6D;AAC7D,sEAA2D;AAC3D,2FAAqF;AAErF,qEAAqG;AACrG,mEAA8D;AAC9D,iEAA4D;AAC5D,yFAAyF;AACzF,qFAAqF;AAI9E,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAC1B,MAAM,CAAC,QAAQ,CAAC,OAA0B;;QACtC,MAAM,yBAAyB,GAAG;YAC9B,OAAO,EAAE,4CAAmB;YAC5B,QAAQ,EAAE,OAAO;SACpB,CAAC;QAEF,MAAM,gCAAgC,GAAG;YACrC,OAAO,EAAE,6DAAoC;YAC7C,QAAQ,EAAE,IAAI,+CAAqB,CAAC;gBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;aAC/C,CAAC;SACL,CAAC;QAEF,MAAM,WAAW,GAAG,CAAC,IAAA,kEAAiC,EAAC,MAAA,OAAO,CAAC,MAAM,mCAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7F,MAAM,SAAS,GAAe;YAC1B,yBAAyB;YACzB,yCAAkB;YAClB,gCAAgC;YAChC,kEAA8B;SACjC,CAAC;QAEF,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAChF,CAAC;YAED,MAAM,6BAA6B,GAAG,IAAA,sEAAmC,EAAC,EAAE,MAAM,EAAE,MAAA,OAAO,CAAC,QAAQ,CAAC,MAAM,mCAAI,KAAK,EAAE,CAAC,CAAC;YACxH,WAAW,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAEhD,MAAM,iBAAiB,GAAG,MAAA,OAAO,CAAC,QAAQ,CAAC,oBAAoB,mCAAI,IAAI,CAAC;YAExE,IAAI,iBAAiB,EAAE,CAAC;gBACpB,SAAS,CAAC,IAAI,CAAC,2CAAmB,CAAC,CAAC;YACxC,CAAC;QACL,CAAC;QAED,OAAO;YACH,MAAM,EAAE,mBAAiB;YACzB,OAAO,EAAE,CAAC,uBAAc,CAAC,UAAU,CAAC,CAAC,+BAAU,CAAC,CAAC,EAAE,uCAAiB,EAAE,gCAAc,CAAC;YACrF,SAAS;YACT,WAAW;YACX,OAAO,EAAE,CAAC,yCAAkB,CAAC;SAChC,CAAC;IACN,CAAC;CACJ,CAAA;AA9CY,8CAAiB;4BAAjB,iBAAiB;IAF7B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,iBAAiB,CA8C7B"}
@@ -1,21 +1,26 @@
1
- import { EntityManager, EntityRepository } from "@mikro-orm/postgresql";
1
+ import { EntityManager, EntityRepository, MikroORM } from "@mikro-orm/postgresql";
2
2
  import { BlobStorageBackendService } from "../blob-storage/backends/blob-storage-backend.service";
3
3
  import { FileUploadInput } from "../file-utils/file-upload.input";
4
4
  import { DownloadParams, ImageParams } from "./dto/file-uploads-download.params";
5
5
  import { FileUpload } from "./entities/file-upload.entity";
6
6
  import { FileUploadsConfig } from "./file-uploads.config";
7
7
  export declare class FileUploadsService {
8
+ private readonly orm;
8
9
  private readonly repository;
9
10
  private readonly blobStorageBackendService;
10
11
  private readonly config;
11
12
  private readonly entityManager;
12
- constructor(repository: EntityRepository<FileUpload>, blobStorageBackendService: BlobStorageBackendService, config: FileUploadsConfig, entityManager: EntityManager);
13
- upload(file: FileUploadInput): Promise<FileUpload>;
13
+ private deleteExpiredFilesInterval;
14
+ constructor(orm: MikroORM, repository: EntityRepository<FileUpload>, blobStorageBackendService: BlobStorageBackendService, config: FileUploadsConfig, entityManager: EntityManager);
15
+ onApplicationBootstrap(): void;
16
+ beforeApplicationShutdown(): void;
17
+ upload(file: FileUploadInput, expiresIn?: number): Promise<FileUpload>;
14
18
  createHash(params: DownloadParams | ImageParams): string;
15
19
  createDownloadUrl(file: FileUpload): string;
16
20
  createImageUrl(file: FileUpload, resizeWidth: number): string | undefined;
17
21
  createPreviewUrl(file: FileUpload): string;
18
22
  getFileContent(file: FileUpload): Promise<Buffer>;
19
23
  delete(fileUpload: FileUpload): Promise<void>;
24
+ deleteExpiredFiles(): Promise<void>;
20
25
  }
21
26
  //# sourceMappingURL=file-uploads.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-uploads.service.d.ts","sourceRoot":"","sources":["../../src/file-uploads/file-uploads.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAQxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAElG,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,qBACa,kBAAkB;IAEO,OAAO,CAAC,QAAQ,CAAC,UAAU;IACJ,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAClE,OAAO,CAAC,QAAQ,CAAC,MAAM;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAHiB,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,EACjB,yBAAyB,EAAE,yBAAyB,EAC5E,MAAM,EAAE,iBAAiB,EACtD,aAAa,EAAE,aAAa;IAG3C,MAAM,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAoBxD,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,MAAM;IAcxD,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAe3C,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAkBzE,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAWpC,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBjD,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAQtD"}
1
+ {"version":3,"file":"file-uploads.service.d.ts","sourceRoot":"","sources":["../../src/file-uploads/file-uploads.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAQxG,OAAO,EAAE,yBAAyB,EAAE,MAAM,uDAAuD,CAAC;AAElG,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,qBACa,kBAAkB;IAIvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACU,OAAO,CAAC,QAAQ,CAAC,UAAU;IACJ,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAClE,OAAO,CAAC,QAAQ,CAAC,MAAM;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAPlC,OAAO,CAAC,0BAA0B,CAAiB;gBAG9B,GAAG,EAAE,QAAQ,EACiB,UAAU,EAAE,gBAAgB,CAAC,UAAU,CAAC,EACjB,yBAAyB,EAAE,yBAAyB,EAC5E,MAAM,EAAE,iBAAiB,EACtD,aAAa,EAAE,aAAa;IAGjD,sBAAsB;IAWtB,yBAAyB;IAInB,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAsB5E,UAAU,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,GAAG,MAAM;IAcxD,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAe3C,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAkBzE,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAWpC,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBjD,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;CAqB5C"}
@@ -47,24 +47,41 @@ const file_uploads_download_params_1 = require("./dto/file-uploads-download.para
47
47
  const file_upload_entity_1 = require("./entities/file-upload.entity");
48
48
  const file_uploads_constants_1 = require("./file-uploads.constants");
49
49
  let FileUploadsService = class FileUploadsService {
50
- constructor(repository, blobStorageBackendService, config, entityManager) {
50
+ constructor(orm, repository, blobStorageBackendService, config, entityManager) {
51
+ this.orm = orm;
51
52
  this.repository = repository;
52
53
  this.blobStorageBackendService = blobStorageBackendService;
53
54
  this.config = config;
54
55
  this.entityManager = entityManager;
55
56
  }
56
- upload(file) {
57
+ onApplicationBootstrap() {
58
+ // Delete expired files every minute
59
+ this.deleteExpiredFilesInterval = setInterval(() => __awaiter(this, void 0, void 0, function* () {
60
+ try {
61
+ yield this.deleteExpiredFiles();
62
+ }
63
+ catch (error) {
64
+ console.error("Error while deleting expired files", error);
65
+ }
66
+ }), 60000);
67
+ }
68
+ beforeApplicationShutdown() {
69
+ clearInterval(this.deleteExpiredFilesInterval);
70
+ }
71
+ upload(file, expiresIn) {
57
72
  return __awaiter(this, void 0, void 0, function* () {
58
73
  const contentHash = yield hasha_1.default.fromFile(file.path, { algorithm: "md5" });
59
74
  yield this.blobStorageBackendService.upload(file, contentHash, this.config.directory);
60
75
  const extension = (0, path_1.extname)(file.originalname);
61
76
  const filename = (0, path_1.basename)(file.originalname, extension);
62
77
  const name = (0, files_utils_1.slugifyFilename)(filename, extension);
78
+ const expires = expiresIn || this.config.expiresIn;
63
79
  const fileUpload = this.repository.create({
64
80
  name,
65
81
  size: file.size,
66
82
  mimetype: file.mimetype,
67
83
  contentHash,
84
+ expiresAt: expires ? (0, date_fns_1.addSeconds)(new Date(), expires) : undefined,
68
85
  });
69
86
  this.entityManager.persist(fileUpload);
70
87
  return fileUpload;
@@ -150,14 +167,40 @@ let FileUploadsService = class FileUploadsService {
150
167
  this.entityManager.remove(fileUpload);
151
168
  });
152
169
  }
170
+ deleteExpiredFiles() {
171
+ return __awaiter(this, void 0, void 0, function* () {
172
+ let hasMore = false;
173
+ const limit = 100;
174
+ do {
175
+ const files = yield this.repository.find({
176
+ expiresAt: { $lt: new Date() },
177
+ }, {
178
+ limit,
179
+ offset: 0,
180
+ });
181
+ for (const file of files) {
182
+ yield this.delete(file);
183
+ }
184
+ hasMore = files.length === limit;
185
+ } while (hasMore);
186
+ yield this.entityManager.flush();
187
+ });
188
+ }
153
189
  };
154
190
  exports.FileUploadsService = FileUploadsService;
191
+ __decorate([
192
+ (0, postgresql_1.CreateRequestContext)(),
193
+ __metadata("design:type", Function),
194
+ __metadata("design:paramtypes", []),
195
+ __metadata("design:returntype", Promise)
196
+ ], FileUploadsService.prototype, "deleteExpiredFiles", null);
155
197
  exports.FileUploadsService = FileUploadsService = __decorate([
156
198
  (0, common_1.Injectable)(),
157
- __param(0, (0, nestjs_1.InjectRepository)(file_upload_entity_1.FileUpload)),
158
- __param(1, (0, common_1.Inject)((0, common_1.forwardRef)(() => blob_storage_backend_service_1.BlobStorageBackendService))),
159
- __param(2, (0, common_1.Inject)(file_uploads_constants_1.FILE_UPLOADS_CONFIG)),
160
- __metadata("design:paramtypes", [postgresql_1.EntityRepository,
199
+ __param(1, (0, nestjs_1.InjectRepository)(file_upload_entity_1.FileUpload)),
200
+ __param(2, (0, common_1.Inject)((0, common_1.forwardRef)(() => blob_storage_backend_service_1.BlobStorageBackendService))),
201
+ __param(3, (0, common_1.Inject)(file_uploads_constants_1.FILE_UPLOADS_CONFIG)),
202
+ __metadata("design:paramtypes", [postgresql_1.MikroORM,
203
+ postgresql_1.EntityRepository,
161
204
  blob_storage_backend_service_1.BlobStorageBackendService, Object, postgresql_1.EntityManager])
162
205
  ], FileUploadsService);
163
206
  //# sourceMappingURL=file-uploads.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-uploads.service.js","sourceRoot":"","sources":["../../src/file-uploads/file-uploads.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-uploads.service.js","sourceRoot":"","sources":["../../src/file-uploads/file-uploads.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Readable } from "stream";
2
+ import type { PipeMetadata } from "../pipes/importer-pipe.type";
3
+ export type StreamChunkAndMetadata = {
4
+ chunk: Buffer | string;
5
+ metadata: PipeMetadata;
6
+ };
7
+ export declare abstract class ImporterDataStream {
8
+ abstract getDataStreamAndMetadata(): Promise<Readable | null>;
9
+ }
10
+ //# sourceMappingURL=data-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-stream.d.ts","sourceRoot":"","sources":["../../../src/importer/data-streams/data-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,MAAM,sBAAsB,GAAG;IACjC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;CAC1B,CAAC;AACF,8BAAsB,kBAAkB;IACpC,QAAQ,CAAC,wBAAwB,IAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAChE"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ImporterDataStream = void 0;
4
+ class ImporterDataStream {
5
+ }
6
+ exports.ImporterDataStream = ImporterDataStream;
7
+ //# sourceMappingURL=data-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-stream.js","sourceRoot":"","sources":["../../../src/importer/data-streams/data-stream.ts"],"names":[],"mappings":";;;AAQA,MAAsB,kBAAkB;CAEvC;AAFD,gDAEC"}
@@ -0,0 +1,22 @@
1
+ import { type ReadStream } from "node:fs";
2
+ import { type SdkStream } from "@smithy/types";
3
+ import { type IncomingMessage } from "http";
4
+ import { ImporterDataStream } from "./data-stream";
5
+ type FileStream = SdkStream<IncomingMessage> | ReadStream;
6
+ interface FileStreamAndSize {
7
+ fileStream: FileStream;
8
+ fileName?: string;
9
+ fileSize?: number;
10
+ }
11
+ export type FileStreamAndMetadata = {
12
+ dataStream: FileStream;
13
+ metadata: {
14
+ fileName?: string;
15
+ fileSize?: number;
16
+ };
17
+ };
18
+ export declare abstract class FileDataStream extends ImporterDataStream {
19
+ getFileStreamResult(fileStreamAndSize: FileStreamAndSize): FileStreamAndMetadata;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=file-data-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-data-stream.d.ts","sourceRoot":"","sources":["../../../src/importer/data-streams/file-data-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,MAAM,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,KAAK,UAAU,GAAG,SAAS,CAAC,eAAe,CAAC,GAAG,UAAU,CAAC;AAE1D,UAAU,iBAAiB;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,qBAAqB,GAAG;IAChC,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACL,CAAC;AAEF,8BAAsB,cAAe,SAAQ,kBAAkB;IAC3D,mBAAmB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,qBAAqB;CAQnF"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileDataStream = void 0;
4
+ const data_stream_1 = require("./data-stream");
5
+ class FileDataStream extends data_stream_1.ImporterDataStream {
6
+ getFileStreamResult(fileStreamAndSize) {
7
+ return {
8
+ dataStream: fileStreamAndSize.fileStream,
9
+ metadata: {
10
+ fileName: fileStreamAndSize.fileName,
11
+ },
12
+ };
13
+ }
14
+ }
15
+ exports.FileDataStream = FileDataStream;
16
+ //# sourceMappingURL=file-data-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-data-stream.js","sourceRoot":"","sources":["../../../src/importer/data-streams/file-data-stream.ts"],"names":[],"mappings":";;;AAKA,+CAAmD;AAkBnD,MAAsB,cAAe,SAAQ,gCAAkB;IAC3D,mBAAmB,CAAC,iBAAoC;QACpD,OAAO;YACH,UAAU,EAAE,iBAAiB,CAAC,UAAU;YACxC,QAAQ,EAAE;gBACN,QAAQ,EAAE,iBAAiB,CAAC,QAAQ;aACvC;SACJ,CAAC;IACN,CAAC;CACJ;AATD,wCASC"}
@@ -0,0 +1,18 @@
1
+ import { Readable } from "node:stream";
2
+ import { FileDataStream } from "./file-data-stream";
3
+ export declare class ImporterLocalFileDataStream extends FileDataStream {
4
+ private readonly logger;
5
+ fileKey: string;
6
+ constructor(fileKey: string);
7
+ getDataStreamAndMetadata(): Promise<Readable | null>;
8
+ private generateFileIterator;
9
+ protected getFileStreamAndSizeOfLocalFile({ filePath, encoding }: {
10
+ filePath?: string;
11
+ encoding?: BufferEncoding;
12
+ }): Promise<{
13
+ fileSize: number;
14
+ fileStream: import("fs").ReadStream;
15
+ fileName: string;
16
+ } | null>;
17
+ }
18
+ //# sourceMappingURL=local-file-data-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-file-data-stream.d.ts","sourceRoot":"","sources":["../../../src/importer/data-streams/local-file-data-stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMvC,OAAO,EAAE,cAAc,EAA8B,MAAM,oBAAoB,CAAC;AAEhF,qBAAa,2BAA4B,SAAQ,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,EAAE,MAAM,CAAC;gBAEJ,OAAO,EAAE,MAAM;IAKrB,wBAAwB;YAUf,oBAAoB;cASnB,+BAA+B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAE;;;;;CAiB3H"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __asyncValues = (this && this.__asyncValues) || function (o) {
12
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
13
+ var m = o[Symbol.asyncIterator], i;
14
+ return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
15
+ function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
16
+ function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
17
+ };
18
+ var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
19
+ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
20
+ if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
21
+ var g = generator.apply(thisArg, _arguments || []), i, q = [];
22
+ return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
23
+ function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
24
+ function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
25
+ function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
26
+ function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
27
+ function fulfill(value) { resume("next", value); }
28
+ function reject(value) { resume("throw", value); }
29
+ function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
30
+ };
31
+ var __importDefault = (this && this.__importDefault) || function (mod) {
32
+ return (mod && mod.__esModule) ? mod : { "default": mod };
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.ImporterLocalFileDataStream = void 0;
36
+ const node_fs_1 = require("node:fs");
37
+ const node_stream_1 = require("node:stream");
38
+ const common_1 = require("@nestjs/common");
39
+ const path_1 = __importDefault(require("path"));
40
+ const file_data_stream_1 = require("./file-data-stream");
41
+ class ImporterLocalFileDataStream extends file_data_stream_1.FileDataStream {
42
+ constructor(fileKey) {
43
+ super();
44
+ this.logger = new common_1.Logger();
45
+ this.fileKey = fileKey;
46
+ }
47
+ getDataStreamAndMetadata() {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ const dataStreamAndSize = yield this.getFileStreamAndSizeOfLocalFile({ filePath: this.fileKey });
50
+ if (!dataStreamAndSize) {
51
+ return null;
52
+ }
53
+ const fileStreamAndMetadata = yield this.getFileStreamResult(dataStreamAndSize);
54
+ return node_stream_1.Readable.from(this.generateFileIterator(fileStreamAndMetadata));
55
+ });
56
+ }
57
+ generateFileIterator(fileStreamAndMetadata) {
58
+ return __asyncGenerator(this, arguments, function* generateFileIterator_1() {
59
+ var _a, e_1, _b, _c;
60
+ const { dataStream, metadata } = fileStreamAndMetadata;
61
+ try {
62
+ for (var _d = true, dataStream_1 = __asyncValues(dataStream), dataStream_1_1; dataStream_1_1 = yield __await(dataStream_1.next()), _a = dataStream_1_1.done, !_a; _d = true) {
63
+ _c = dataStream_1_1.value;
64
+ _d = false;
65
+ const chunk = _c;
66
+ const chunkAndMetadata = { chunk, metadata };
67
+ yield yield __await(chunkAndMetadata);
68
+ }
69
+ }
70
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
71
+ finally {
72
+ try {
73
+ if (!_d && !_a && (_b = dataStream_1.return)) yield __await(_b.call(dataStream_1));
74
+ }
75
+ finally { if (e_1) throw e_1.error; }
76
+ }
77
+ });
78
+ }
79
+ getFileStreamAndSizeOfLocalFile(_a) {
80
+ return __awaiter(this, arguments, void 0, function* ({ filePath, encoding }) {
81
+ if (!filePath) {
82
+ this.logger.error(`File ${filePath} does not exist`);
83
+ return null;
84
+ }
85
+ // check if file exists
86
+ if (!(0, node_fs_1.existsSync)(filePath)) {
87
+ this.logger.error(`File ${filePath} does not exist`);
88
+ return null;
89
+ }
90
+ const fileSize = (0, node_fs_1.statSync)(filePath).size;
91
+ // gzip file must be read as binary, without encoding
92
+ const fileStream = (0, node_fs_1.createReadStream)(filePath, filePath.endsWith(".gz") && !encoding ? {} : { encoding: encoding || "utf-8" });
93
+ this.logger.log(`Providing fileStreams for local file (${filePath} fileSize: ${fileSize}).`);
94
+ return { fileSize, fileStream, fileName: path_1.default.basename(filePath) };
95
+ });
96
+ }
97
+ }
98
+ exports.ImporterLocalFileDataStream = ImporterLocalFileDataStream;
99
+ //# sourceMappingURL=local-file-data-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-file-data-stream.js","sourceRoot":"","sources":["../../../src/importer/data-streams/local-file-data-stream.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAAiE;AACjE,6CAAuC;AAEvC,2CAAwC;AACxC,gDAAwB;AAGxB,yDAAgF;AAEhF,MAAa,2BAA4B,SAAQ,iCAAc;IAI3D,YAAY,OAAe;QACvB,KAAK,EAAE,CAAC;QAJK,WAAM,GAAG,IAAI,eAAM,EAAE,CAAC;QAKnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IAEK,wBAAwB;;YAC1B,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,+BAA+B,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACjG,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;YAEhF,OAAO,sBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC3E,CAAC;KAAA;IAEc,oBAAoB,CAAC,qBAA4C;;;YAC5E,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAAC;;gBAEvD,KAA0B,eAAA,eAAA,cAAA,UAAU,CAAA,gBAAA,iGAAE,CAAC;oBAAb,0BAAU;oBAAV,WAAU;oBAAzB,MAAM,KAAK,KAAA,CAAA;oBAClB,MAAM,gBAAgB,GAA2B,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;oBACrE,oBAAM,gBAAgB,CAAA,CAAC;gBAC3B,CAAC;;;;;;;;;QACL,CAAC;KAAA;IAEe,+BAA+B;6DAAC,EAAE,QAAQ,EAAE,QAAQ,EAAoD;YACpH,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACZ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,QAAQ,iBAAiB,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,uBAAuB;YACvB,IAAI,CAAC,IAAA,oBAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,QAAQ,iBAAiB,CAAC,CAAC;gBACrD,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,MAAM,QAAQ,GAAG,IAAA,kBAAQ,EAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;YACzC,qDAAqD;YACrD,MAAM,UAAU,GAAG,IAAA,0BAAgB,EAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,IAAI,OAAO,EAAE,CAAC,CAAC;YAC9H,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yCAAyC,QAAQ,cAAc,QAAQ,IAAI,CAAC,CAAC;YAC7F,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvE,CAAC;KAAA;CACJ;AA7CD,kEA6CC"}
@@ -0,0 +1,35 @@
1
+ import { type ImporterInputClass } from "../importer-input.type";
2
+ export declare enum CsvColumnType {
3
+ String = "String",
4
+ Integer = "Integer",
5
+ Float = "Float",
6
+ Boolean = "Boolean",
7
+ DateTime = "DateTime"
8
+ }
9
+ interface ParsingOptions {
10
+ valueMapping?: ValueMapping;
11
+ dateFormatString?: string;
12
+ type?: CsvColumnType;
13
+ transform?: (value: string) => unknown;
14
+ }
15
+ export interface ImportFieldMetadata extends ParsingOptions {
16
+ key: string;
17
+ fieldPath: string;
18
+ fieldName: string | number;
19
+ }
20
+ interface ValueMapping {
21
+ [key: string]: boolean;
22
+ }
23
+ /**
24
+ * Decorator to define a CSV column for an entity property. It defines the mapping between csv column and entity property.
25
+ * @param {string} fieldName The name/header of the column in the csv file.
26
+ * @param {ParsingOptions} parsingOptions - {@link ParsingOptions} Parsing options for the CSV column.
27
+ * -------------------
28
+ * *ParsingOptions:*
29
+ * @property {{@link valueMapping}} valueMapping - A map defining boolean value representations
30
+ * @property {string} dateFormatString - date-fns format string for parsing this column
31
+ */
32
+ export declare const CsvColumn: (fieldName: string | number, parsingOptions?: Partial<ParsingOptions>) => (target: any, key: string) => void;
33
+ export declare const getFieldMetadata: (entity: ImporterInputClass) => ImportFieldMetadata[];
34
+ export {};
35
+ //# sourceMappingURL=csv-column.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv-column.decorator.d.ts","sourceRoot":"","sources":["../../../src/importer/decorators/csv-column.decorator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,oBAAY,aAAa;IACrB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,QAAQ,aAAa;CACxB;AAED,UAAU,cAAc;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CAC1C;AACD,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AACD,UAAU,YAAY;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAID;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,GAAI,WAAW,MAAM,GAAG,MAAM,EAAE,iBAAgB,OAAO,CAAC,cAAc,CAAM,MAG7E,QAAQ,GAAG,EAAE,KAAK,MAAM,SA8B5C,CAAC;AACF,eAAO,MAAM,gBAAgB,GAAI,QAAQ,kBAAkB,KACD,mBAAmB,EAC5E,CAAC"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFieldMetadata = exports.CsvColumn = exports.CsvColumnType = void 0;
4
+ const class_transformer_1 = require("class-transformer");
5
+ const date_fns_1 = require("date-fns");
6
+ var CsvColumnType;
7
+ (function (CsvColumnType) {
8
+ CsvColumnType["String"] = "String";
9
+ CsvColumnType["Integer"] = "Integer";
10
+ CsvColumnType["Float"] = "Float";
11
+ CsvColumnType["Boolean"] = "Boolean";
12
+ CsvColumnType["DateTime"] = "DateTime";
13
+ })(CsvColumnType || (exports.CsvColumnType = CsvColumnType = {}));
14
+ const defaultValueMapping = { true: true, false: false };
15
+ const metadataKey = "fields";
16
+ /**
17
+ * Decorator to define a CSV column for an entity property. It defines the mapping between csv column and entity property.
18
+ * @param {string} fieldName The name/header of the column in the csv file.
19
+ * @param {ParsingOptions} parsingOptions - {@link ParsingOptions} Parsing options for the CSV column.
20
+ * -------------------
21
+ * *ParsingOptions:*
22
+ * @property {{@link valueMapping}} valueMapping - A map defining boolean value representations
23
+ * @property {string} dateFormatString - date-fns format string for parsing this column
24
+ */
25
+ const CsvColumn = (fieldName, parsingOptions = {}) => {
26
+ const { valueMapping, dateFormatString, type, transform } = parsingOptions;
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ return function (target, key) {
29
+ const fields = Reflect.getOwnMetadata(metadataKey, target.constructor) || (Reflect.getMetadata(metadataKey, target.constructor) || []).slice(0);
30
+ fields.push({ key, fieldPath: key, fieldName, valueMapping, dateFormatString, type });
31
+ Reflect.defineMetadata(metadataKey, fields, target.constructor);
32
+ (0, class_transformer_1.Transform)(({ value }) => {
33
+ if (transform) {
34
+ return transform(value);
35
+ }
36
+ if (type === CsvColumnType.Boolean) {
37
+ const valueMapping = parsingOptions.valueMapping || defaultValueMapping;
38
+ return valueMapping[value];
39
+ }
40
+ if (type === CsvColumnType.Integer) {
41
+ return parseInt(value);
42
+ }
43
+ if (type === CsvColumnType.Float) {
44
+ return parseFloat(value);
45
+ }
46
+ if (type === CsvColumnType.DateTime) {
47
+ if (dateFormatString) {
48
+ return (0, date_fns_1.parse)(value, dateFormatString, new Date());
49
+ }
50
+ else {
51
+ return (0, date_fns_1.parseISO)(value);
52
+ }
53
+ }
54
+ return value;
55
+ })(target, key);
56
+ };
57
+ };
58
+ exports.CsvColumn = CsvColumn;
59
+ const getFieldMetadata = (entity) => {
60
+ return Reflect.getOwnMetadata(metadataKey, entity);
61
+ };
62
+ exports.getFieldMetadata = getFieldMetadata;
63
+ //# sourceMappingURL=csv-column.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv-column.decorator.js","sourceRoot":"","sources":["../../../src/importer/decorators/csv-column.decorator.ts"],"names":[],"mappings":";;;AAAA,yDAA8C;AAC9C,uCAA2C;AAI3C,IAAY,aAMX;AAND,WAAY,aAAa;IACrB,kCAAiB,CAAA;IACjB,oCAAmB,CAAA;IACnB,gCAAe,CAAA;IACf,oCAAmB,CAAA;IACnB,sCAAqB,CAAA;AACzB,CAAC,EANW,aAAa,6BAAb,aAAa,QAMxB;AAiBD,MAAM,mBAAmB,GAA4B,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAClF,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B;;;;;;;;GAQG;AACI,MAAM,SAAS,GAAG,CAAC,SAA0B,EAAE,iBAA0C,EAAE,EAAE,EAAE;IAClG,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,cAAc,CAAC;IAC3E,+DAA+D;IAC/D,OAAO,UAAU,MAAW,EAAE,GAAW;QACrC,MAAM,MAAM,GACR,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrI,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAEhE,IAAA,6BAAS,EAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;YACpB,IAAI,SAAS,EAAE,CAAC;gBACZ,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,IAAI,IAAI,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;gBACjC,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,IAAI,mBAAmB,CAAC;gBACxE,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;YACD,IAAI,IAAI,KAAK,aAAa,CAAC,OAAO,EAAE,CAAC;gBACjC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YACD,IAAI,IAAI,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;gBAC/B,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,IAAI,KAAK,aAAa,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,gBAAgB,EAAE,CAAC;oBACnB,OAAO,IAAA,gBAAK,EAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACJ,OAAO,IAAA,mBAAQ,EAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC;AACN,CAAC,CAAC;AAjCW,QAAA,SAAS,aAiCpB;AACK,MAAM,gBAAgB,GAAG,CAAC,MAA0B,EAAE,EAAE;IAC3D,OAAO,OAAO,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,CAA0B,CAAC;AAChF,CAAC,CAAC;AAFW,QAAA,gBAAgB,oBAE3B"}
@@ -0,0 +1,6 @@
1
+ export type ImportTargetInterface = {
2
+ id: string;
3
+ createdAt?: Date;
4
+ updatedAt?: Date;
5
+ };
6
+ //# sourceMappingURL=import-target.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-target.interface.d.ts","sourceRoot":"","sources":["../../src/importer/import-target.interface.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CACpB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=import-target.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-target.interface.js","sourceRoot":"","sources":["../../src/importer/import-target.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export type ImporterInputClass = {
2
+ new (): object;
3
+ };
4
+ //# sourceMappingURL=importer-input.type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer-input.type.d.ts","sourceRoot":"","sources":["../../src/importer/importer-input.type.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,kBAAkB,GAAG;IAAE,QAAQ,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=importer-input.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer-input.type.js","sourceRoot":"","sources":["../../src/importer/importer-input.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { Transform, type TransformCallback } from "stream";
2
+ import { type ImporterPipe } from "./importer-pipe.type";
3
+ export declare class ImporterEndPipe implements ImporterPipe {
4
+ getPipe(): EndHandler;
5
+ }
6
+ declare class EndHandler extends Transform {
7
+ constructor();
8
+ _transform(inputData: {
9
+ chunk: Buffer | string;
10
+ metadata: Record<string, unknown>;
11
+ }, encoding: BufferEncoding, callback: TransformCallback): void;
12
+ }
13
+ export {};
14
+ //# sourceMappingURL=end.pipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"end.pipe.d.ts","sourceRoot":"","sources":["../../../src/importer/pipes/end.pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAE3D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,qBAAa,eAAgB,YAAW,YAAY;IAChD,OAAO;CAGV;AAED,cAAM,UAAW,SAAQ,SAAS;;IAK9B,UAAU,CAAC,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,iBAAiB;CAG7I"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ImporterEndPipe = void 0;
4
+ const stream_1 = require("stream");
5
+ class ImporterEndPipe {
6
+ getPipe() {
7
+ return new EndHandler();
8
+ }
9
+ }
10
+ exports.ImporterEndPipe = ImporterEndPipe;
11
+ class EndHandler extends stream_1.Transform {
12
+ constructor() {
13
+ super({ writableObjectMode: true, objectMode: true });
14
+ }
15
+ _transform(inputData, encoding, callback) {
16
+ callback();
17
+ }
18
+ }
19
+ //# sourceMappingURL=end.pipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"end.pipe.js","sourceRoot":"","sources":["../../../src/importer/pipes/end.pipe.ts"],"names":[],"mappings":";;;AAAA,mCAA2D;AAI3D,MAAa,eAAe;IACxB,OAAO;QACH,OAAO,IAAI,UAAU,EAAE,CAAC;IAC5B,CAAC;CACJ;AAJD,0CAIC;AAED,MAAM,UAAW,SAAQ,kBAAS;IAC9B;QACI,KAAK,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,UAAU,CAAC,SAAwE,EAAE,QAAwB,EAAE,QAA2B;QACtI,QAAQ,EAAE,CAAC;IACf,CAAC;CACJ"}
@@ -0,0 +1,19 @@
1
+ import { type LoggerService } from "@nestjs/common";
2
+ import { type ValidationError as ClassValidationError } from "class-validator";
3
+ import { type Transform } from "stream";
4
+ export type PipeData = Record<string, unknown>;
5
+ export type PipeMetadata = Record<string, unknown>;
6
+ type ParserOptions = Record<string, unknown>;
7
+ export interface ValidationError extends ClassValidationError {
8
+ name?: string | number;
9
+ errorMessage: string;
10
+ value?: string;
11
+ }
12
+ export type ImporterPipe = {
13
+ getPipe(logger: LoggerService, options?: ParserOptions): Transform;
14
+ };
15
+ export type CompositeImporterPipe = {
16
+ getPipes(logger: LoggerService, options: ParserOptions): Transform[];
17
+ };
18
+ export {};
19
+ //# sourceMappingURL=importer-pipe.type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer-pipe.type.d.ts","sourceRoot":"","sources":["../../../src/importer/pipes/importer-pipe.type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,KAAK,eAAe,IAAI,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC/C,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnD,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC7C,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IACzD,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,YAAY,GAAG;IACvB,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;CACtE,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAChC,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,EAAE,CAAC;CACxE,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=importer-pipe.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer-pipe.type.js","sourceRoot":"","sources":["../../../src/importer/pipes/importer-pipe.type.ts"],"names":[],"mappings":""}