@elchinabilov/nestjs-media-library 1.2.2 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/media-library.module.js +3 -1
- package/dist/media-library.module.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/media-loader.util.d.ts +15 -0
- package/dist/utils/media-loader.util.js +80 -0
- package/dist/utils/media-loader.util.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Media } from "src/entities/media.entity";
|
|
2
|
+
import { Repository } from "typeorm";
|
|
3
|
+
interface MediaMapping {
|
|
4
|
+
field: string;
|
|
5
|
+
alias: string;
|
|
6
|
+
isMultiple?: boolean;
|
|
7
|
+
selectFields?: Array<keyof Media>;
|
|
8
|
+
}
|
|
9
|
+
export declare class MediaLoader {
|
|
10
|
+
private readonly mediaRepository;
|
|
11
|
+
constructor(mediaRepository: Repository<Media>);
|
|
12
|
+
load<T extends Record<string, any>>(items: T[], mappings: MediaMapping[]): Promise<T[]>;
|
|
13
|
+
private selectFields;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.MediaLoader = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
18
|
+
const media_entity_1 = require("src/entities/media.entity");
|
|
19
|
+
const typeorm_2 = require("typeorm");
|
|
20
|
+
let MediaLoader = class MediaLoader {
|
|
21
|
+
constructor(mediaRepository) {
|
|
22
|
+
this.mediaRepository = mediaRepository;
|
|
23
|
+
}
|
|
24
|
+
async load(items, mappings) {
|
|
25
|
+
if (!items.length)
|
|
26
|
+
return items;
|
|
27
|
+
const mediaIds = new Set();
|
|
28
|
+
mappings.forEach(({ field, isMultiple = false }) => {
|
|
29
|
+
items.forEach((item) => {
|
|
30
|
+
if (isMultiple && Array.isArray(item[field])) {
|
|
31
|
+
item[field].forEach((id) => mediaIds.add(id));
|
|
32
|
+
}
|
|
33
|
+
else if (!isMultiple && item[field]) {
|
|
34
|
+
mediaIds.add(item[field]);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
if (!mediaIds.size)
|
|
39
|
+
return items;
|
|
40
|
+
const mediaList = await this.mediaRepository.find({
|
|
41
|
+
where: { id: (0, typeorm_2.In)([...mediaIds]) },
|
|
42
|
+
});
|
|
43
|
+
const mediaMap = new Map(mediaList.map((m) => [m.id, m]));
|
|
44
|
+
items.forEach((item) => {
|
|
45
|
+
mappings.forEach(({ field, alias, isMultiple = false, selectFields }) => {
|
|
46
|
+
if (isMultiple && Array.isArray(item[field])) {
|
|
47
|
+
item[alias] = item[field]
|
|
48
|
+
.map((id) => {
|
|
49
|
+
const media = mediaMap.get(id);
|
|
50
|
+
return media ? this.selectFields(media, selectFields) : null;
|
|
51
|
+
})
|
|
52
|
+
.filter(Boolean);
|
|
53
|
+
}
|
|
54
|
+
else if (!isMultiple && item[field]) {
|
|
55
|
+
const media = mediaMap.get(item[field]);
|
|
56
|
+
item[alias] = media
|
|
57
|
+
? this.selectFields(media, selectFields)
|
|
58
|
+
: null;
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
return items;
|
|
63
|
+
}
|
|
64
|
+
selectFields(media, fields) {
|
|
65
|
+
if (!fields || !fields.length)
|
|
66
|
+
return media;
|
|
67
|
+
const result = {};
|
|
68
|
+
fields.forEach((field) => {
|
|
69
|
+
result[field] = media[field];
|
|
70
|
+
});
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
exports.MediaLoader = MediaLoader;
|
|
75
|
+
exports.MediaLoader = MediaLoader = __decorate([
|
|
76
|
+
(0, common_1.Injectable)(),
|
|
77
|
+
__param(0, (0, typeorm_1.InjectRepository)(media_entity_1.Media)),
|
|
78
|
+
__metadata("design:paramtypes", [typeorm_2.Repository])
|
|
79
|
+
], MediaLoader);
|
|
80
|
+
//# sourceMappingURL=media-loader.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-loader.util.js","sourceRoot":"","sources":["../../src/utils/media-loader.util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED