@weverson_na/prisma-generator-nestjs-dto
Version:
Advanced Prisma Generator with Smart Merge v2: Creates DTO and Entity classes with AST-based preservation, intelligent import management, and modular architecture for NestJS
50 lines (49 loc) • 1.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ImportStatementMerger = void 0;
class ImportStatementMerger {
static mergeImportStatements(first, second) {
if (first.from !== second.from) {
throw new Error(`Cannot merge import statements; 'from' differs`);
}
if (first.default && second.default) {
throw new Error(`Cannot merge import statements; both have default`);
}
const firstDestruct = first.destruct || [];
const secondDestruct = second.destruct || [];
const destructStrings = this.getUniqueStrings([
...firstDestruct,
...secondDestruct,
]);
const destructObject = this.mergeDestructObjects([
...firstDestruct,
...secondDestruct,
]);
return {
...first,
...second,
destruct: [...destructStrings, destructObject],
};
}
static zipImportStatementParams(items) {
const map = items.reduce((acc, item) => {
const existing = acc[item.from];
acc[item.from] = existing
? ImportStatementMerger.mergeImportStatements(existing, item)
: item;
return acc;
}, {});
return Object.values(map);
}
static getUniqueStrings(destructItems) {
return Array.from(new Set(destructItems.filter((x) => typeof x === 'string')));
}
static mergeDestructObjects(destructItems) {
return destructItems.reduce((result, destructItem) => {
if (typeof destructItem === 'string')
return result;
return { ...result, ...destructItem };
}, {});
}
}
exports.ImportStatementMerger = ImportStatementMerger;