mirror of
https://github.com/n8n-io/n8n.git
synced 2025-01-27 04:12:38 -08:00
51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import { Service } from 'typedi';
|
|
import { DataSource, Repository } from 'typeorm';
|
|
import { InstalledPackages } from '../entities/InstalledPackages';
|
|
import { InstalledNodesRepository } from './installedNodes.repository';
|
|
import type { PackageDirectoryLoader } from 'n8n-core';
|
|
|
|
@Service()
|
|
export class InstalledPackagesRepository extends Repository<InstalledPackages> {
|
|
constructor(
|
|
dataSource: DataSource,
|
|
private installedNodesRepository: InstalledNodesRepository,
|
|
) {
|
|
super(InstalledPackages, dataSource.manager);
|
|
}
|
|
|
|
async saveInstalledPackageWithNodes(packageLoader: PackageDirectoryLoader) {
|
|
const { packageJson, nodeTypes, loadedNodes } = packageLoader;
|
|
const { name: packageName, version: installedVersion, author } = packageJson;
|
|
|
|
let installedPackage: InstalledPackages;
|
|
|
|
await this.manager.transaction(async (manager) => {
|
|
installedPackage = await manager.save(
|
|
this.create({
|
|
packageName,
|
|
installedVersion,
|
|
authorName: author?.name,
|
|
authorEmail: author?.email,
|
|
}),
|
|
);
|
|
|
|
installedPackage.installedNodes = [];
|
|
|
|
return loadedNodes.map(async (loadedNode) => {
|
|
const installedNode = this.installedNodesRepository.create({
|
|
name: nodeTypes[loadedNode.name].type.description.displayName,
|
|
type: loadedNode.name,
|
|
latestVersion: loadedNode.version.toString(),
|
|
package: { packageName },
|
|
});
|
|
|
|
installedPackage.installedNodes.push(installedNode);
|
|
|
|
return manager.save(installedNode);
|
|
});
|
|
});
|
|
|
|
return installedPackage!;
|
|
}
|
|
}
|