@manojkmfsi/monodog 1.0.23 → 1.0.24
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +6 -0
- package/dist/controllers/{commitController.js → commit-controller.js} +5 -4
- package/dist/controllers/{configController.js → config-controller.js} +3 -3
- package/dist/controllers/{healthController.js → health-controller.js} +3 -3
- package/dist/controllers/{packageController.js → package-controller.js} +6 -6
- package/dist/index.js +11 -236
- package/dist/middleware/dashboard-startup.js +122 -0
- package/dist/middleware/error-handler.js +43 -0
- package/dist/middleware/index.js +21 -0
- package/dist/middleware/security.js +78 -0
- package/dist/middleware/server-startup.js +111 -0
- package/dist/repositories/commit-repository.js +97 -0
- package/dist/repositories/dependency-repository.js +97 -0
- package/dist/repositories/index.js +18 -0
- package/dist/repositories/package-health-repository.js +65 -0
- package/dist/repositories/package-repository.js +126 -0
- package/dist/repositories/prisma-client.js +57 -0
- package/dist/routes/{commitRoutes.js → commit-routes.js} +2 -2
- package/dist/routes/{configRoutes.js → config-routes.js} +3 -3
- package/dist/routes/{healthRoutes.js → health-routes.js} +3 -3
- package/dist/routes/{packageRoutes.js → package-routes.js} +5 -5
- package/dist/services/{commitService.js → commit-service.js} +2 -2
- package/dist/services/{configService.js → config-service.js} +2 -40
- package/dist/services/{healthService.js → health-service.js} +11 -63
- package/dist/services/{packageService.js → package-service.js} +80 -54
- package/dist/types/git.js +11 -0
- package/dist/types/index.js +1 -0
- package/package.json +1 -1
- package/src/controllers/{commitController.ts → commit-controller.ts} +7 -5
- package/src/controllers/{configController.ts → config-controller.ts} +4 -3
- package/src/controllers/{healthController.ts → health-controller.ts} +4 -3
- package/src/controllers/{packageController.ts → package-controller.ts} +7 -6
- package/src/index.ts +9 -281
- package/src/middleware/dashboard-startup.ts +150 -0
- package/src/middleware/error-handler.ts +63 -0
- package/src/middleware/index.ts +18 -0
- package/src/middleware/security.ts +81 -0
- package/src/middleware/server-startup.ts +140 -0
- package/src/repositories/commit-repository.ts +107 -0
- package/src/repositories/dependency-repository.ts +109 -0
- package/src/repositories/index.ts +10 -0
- package/src/repositories/package-health-repository.ts +75 -0
- package/src/repositories/package-repository.ts +142 -0
- package/src/repositories/prisma-client.ts +25 -0
- package/src/routes/{commitRoutes.ts → commit-routes.ts} +1 -1
- package/src/routes/{configRoutes.ts → config-routes.ts} +1 -1
- package/src/routes/{healthRoutes.ts → health-routes.ts} +1 -1
- package/src/routes/{packageRoutes.ts → package-routes.ts} +1 -1
- package/src/services/{commitService.ts → commit-service.ts} +1 -1
- package/src/services/{configService.ts → config-service.ts} +22 -9
- package/src/services/{gitService.ts → git-service.ts} +4 -4
- package/src/services/{healthService.ts → health-service.ts} +17 -35
- package/src/services/package-service.ts +201 -0
- package/src/types/database.ts +57 -1
- package/src/types/git.ts +8 -8
- package/src/types/index.ts +1 -1
- package/dist/utils/db-utils.js +0 -227
- package/src/services/packageService.ts +0 -115
- package/src/types/monorepo-scanner.d.ts +0 -32
- package/src/utils/db-utils.ts +0 -220
- /package/dist/services/{gitService.js → git-service.js} +0 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Server startup logic for the API backend
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.startServer = startServer;
|
|
10
|
+
const express_1 = __importDefault(require("express"));
|
|
11
|
+
const body_parser_1 = require("body-parser");
|
|
12
|
+
const config_loader_1 = require("../config-loader");
|
|
13
|
+
const error_handler_1 = require("./error-handler");
|
|
14
|
+
const security_1 = require("./security");
|
|
15
|
+
const package_routes_1 = __importDefault(require("../routes/package-routes"));
|
|
16
|
+
const commit_routes_1 = __importDefault(require("../routes/commit-routes"));
|
|
17
|
+
const health_routes_1 = __importDefault(require("../routes/health-routes"));
|
|
18
|
+
const config_routes_1 = __importDefault(require("../routes/config-routes"));
|
|
19
|
+
// Security constants
|
|
20
|
+
const PORT_MIN = 1024;
|
|
21
|
+
const PORT_MAX = 65535;
|
|
22
|
+
/**
|
|
23
|
+
* Validate port number
|
|
24
|
+
*/
|
|
25
|
+
function validatePort(port) {
|
|
26
|
+
const portNum = typeof port === 'string' ? parseInt(port, 10) : port;
|
|
27
|
+
if (isNaN(portNum) || portNum < PORT_MIN || portNum > PORT_MAX) {
|
|
28
|
+
throw new Error(`Port must be between ${PORT_MIN} and ${PORT_MAX}`);
|
|
29
|
+
}
|
|
30
|
+
return portNum;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create Express app with middleware configuration
|
|
34
|
+
*/
|
|
35
|
+
function createApp(rootPath) {
|
|
36
|
+
const app = (0, express_1.default)();
|
|
37
|
+
// Timeout middleware
|
|
38
|
+
app.use((0, security_1.createTimeoutMiddleware)());
|
|
39
|
+
// Store root path for routes
|
|
40
|
+
app.locals.rootPath = rootPath;
|
|
41
|
+
// Security and CORS setup
|
|
42
|
+
const dashboardUrl = (0, security_1.buildDashboardUrl)(config_loader_1.appConfig);
|
|
43
|
+
const apiUrl = (0, security_1.buildApiUrl)(config_loader_1.appConfig.server.host, config_loader_1.appConfig.server.port);
|
|
44
|
+
app.use((0, security_1.createHelmetMiddleware)(apiUrl));
|
|
45
|
+
app.use((0, security_1.createApiCorsMiddleware)(dashboardUrl));
|
|
46
|
+
// Body parser
|
|
47
|
+
app.use((0, body_parser_1.json)({ limit: '1mb' }));
|
|
48
|
+
// Request logging
|
|
49
|
+
app.use(error_handler_1.requestLogger);
|
|
50
|
+
// Routes
|
|
51
|
+
app.use('/api/packages', package_routes_1.default);
|
|
52
|
+
app.use('/api/commits/', commit_routes_1.default);
|
|
53
|
+
app.use('/api/health/', health_routes_1.default);
|
|
54
|
+
app.use('/api/config/', config_routes_1.default);
|
|
55
|
+
// 404 handler
|
|
56
|
+
app.use('*', error_handler_1.notFoundHandler);
|
|
57
|
+
// Global error handler (must be last)
|
|
58
|
+
app.use(error_handler_1.errorHandler);
|
|
59
|
+
return app;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Start the API server
|
|
63
|
+
*/
|
|
64
|
+
function startServer(rootPath) {
|
|
65
|
+
try {
|
|
66
|
+
const port = config_loader_1.appConfig.server.port;
|
|
67
|
+
const host = config_loader_1.appConfig.server.host;
|
|
68
|
+
const validatedPort = validatePort(port);
|
|
69
|
+
const app = createApp(rootPath);
|
|
70
|
+
const server = app.listen(validatedPort, host, () => {
|
|
71
|
+
console.log(`Backend server running on http://${host}:${validatedPort}`);
|
|
72
|
+
console.log('API endpoints available:');
|
|
73
|
+
console.log(' - GET /api/health');
|
|
74
|
+
console.log(' - GET /api/packages/refresh');
|
|
75
|
+
console.log(' - GET /api/packages');
|
|
76
|
+
console.log(' - GET /api/packages/:name');
|
|
77
|
+
console.log(' - PUT /api/packages/update-config');
|
|
78
|
+
console.log(' - GET /api/commits/:packagePath');
|
|
79
|
+
console.log(' - GET /api/health/packages');
|
|
80
|
+
console.log(' - PUT /api/config/files/:id');
|
|
81
|
+
console.log(' - GET /api/config/files');
|
|
82
|
+
});
|
|
83
|
+
server.on('error', (err) => {
|
|
84
|
+
if (err.code === 'EADDRINUSE') {
|
|
85
|
+
console.error(`Error: Port ${validatedPort} is already in use. Please specify a different port.`);
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
else if (err.code === 'EACCES') {
|
|
89
|
+
console.error(`Error: Permission denied to listen on port ${validatedPort}. Use a port above 1024.`);
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
console.error('Server failed to start:', err.message);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
// Graceful shutdown
|
|
98
|
+
process.on('SIGTERM', () => {
|
|
99
|
+
console.log('SIGTERM signal received: closing HTTP server');
|
|
100
|
+
server.close(() => {
|
|
101
|
+
console.log('HTTP server closed');
|
|
102
|
+
process.exit(0);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
const err = error;
|
|
108
|
+
console.error('Failed to start server:', err?.message || String(error));
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CommitRepository = void 0;
|
|
4
|
+
const prisma_client_1 = require("./prisma-client");
|
|
5
|
+
const prisma = (0, prisma_client_1.getPrismaClient)();
|
|
6
|
+
const Prisma = (0, prisma_client_1.getPrismaErrors)();
|
|
7
|
+
/**
|
|
8
|
+
* Commit Repository - Handles all Commit-related database operations
|
|
9
|
+
*/
|
|
10
|
+
class CommitRepository {
|
|
11
|
+
/**
|
|
12
|
+
* Find all commits for a package
|
|
13
|
+
*/
|
|
14
|
+
static async findByPackageName(packageName) {
|
|
15
|
+
return await prisma.commit.findMany({
|
|
16
|
+
where: { packageName },
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Find a specific commit
|
|
21
|
+
*/
|
|
22
|
+
static async findByHash(hash, packageName) {
|
|
23
|
+
return await prisma.commit.findUnique({
|
|
24
|
+
where: {
|
|
25
|
+
hash_packageName: {
|
|
26
|
+
hash,
|
|
27
|
+
packageName,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create or update a commit
|
|
34
|
+
*/
|
|
35
|
+
static async upsert(data) {
|
|
36
|
+
try {
|
|
37
|
+
return await prisma.commit.upsert({
|
|
38
|
+
where: {
|
|
39
|
+
hash_packageName: {
|
|
40
|
+
hash: data.hash,
|
|
41
|
+
packageName: data.packageName,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
update: {
|
|
45
|
+
message: data.message || '',
|
|
46
|
+
author: data.author || '',
|
|
47
|
+
date: data.date,
|
|
48
|
+
type: data.type || '',
|
|
49
|
+
},
|
|
50
|
+
create: {
|
|
51
|
+
hash: data.hash,
|
|
52
|
+
message: data.message || '',
|
|
53
|
+
author: data.author || '',
|
|
54
|
+
date: data.date,
|
|
55
|
+
type: data.type || '',
|
|
56
|
+
packageName: data.packageName,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
const err = e;
|
|
62
|
+
if (err instanceof Prisma.PrismaClientKnownRequestError &&
|
|
63
|
+
err.code === 'P2002') {
|
|
64
|
+
console.warn(`Skipping commit: ${data.hash} (Commit already exists)`);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.error(`Failed to store commit: ${data.hash}`, err);
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Store multiple commits
|
|
74
|
+
*/
|
|
75
|
+
static async storeMany(packageName, commits) {
|
|
76
|
+
console.log('Storing commits for: ' + packageName);
|
|
77
|
+
for (const commit of commits) {
|
|
78
|
+
await this.upsert({
|
|
79
|
+
hash: commit.hash,
|
|
80
|
+
message: commit.message,
|
|
81
|
+
author: commit.author,
|
|
82
|
+
date: commit.date,
|
|
83
|
+
type: commit.type,
|
|
84
|
+
packageName,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Delete all commits for a package
|
|
90
|
+
*/
|
|
91
|
+
static async deleteByPackageName(packageName) {
|
|
92
|
+
return await prisma.commit.deleteMany({
|
|
93
|
+
where: { packageName },
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.CommitRepository = CommitRepository;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DependencyRepository = void 0;
|
|
4
|
+
const prisma_client_1 = require("./prisma-client");
|
|
5
|
+
const prisma = (0, prisma_client_1.getPrismaClient)();
|
|
6
|
+
const Prisma = (0, prisma_client_1.getPrismaErrors)();
|
|
7
|
+
/**
|
|
8
|
+
* Dependency Repository - Handles all DependencyInfo-related database operations
|
|
9
|
+
*/
|
|
10
|
+
class DependencyRepository {
|
|
11
|
+
/**
|
|
12
|
+
* Find all dependencies for a package
|
|
13
|
+
*/
|
|
14
|
+
static async findByPackageName(packageName) {
|
|
15
|
+
return await prisma.dependencyInfo.findMany({
|
|
16
|
+
where: { packageName },
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Find a specific dependency
|
|
21
|
+
*/
|
|
22
|
+
static async findByNameAndPackage(name, packageName) {
|
|
23
|
+
return await prisma.dependencyInfo.findUnique({
|
|
24
|
+
where: {
|
|
25
|
+
name_packageName: {
|
|
26
|
+
name,
|
|
27
|
+
packageName,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create or update a dependency
|
|
34
|
+
*/
|
|
35
|
+
static async upsert(data) {
|
|
36
|
+
try {
|
|
37
|
+
return await prisma.dependencyInfo.upsert({
|
|
38
|
+
where: {
|
|
39
|
+
name_packageName: {
|
|
40
|
+
name: data.name,
|
|
41
|
+
packageName: data.packageName,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
update: {
|
|
45
|
+
version: data.version,
|
|
46
|
+
type: data.type,
|
|
47
|
+
latest: data.latest || '',
|
|
48
|
+
outdated: data.outdated ?? false,
|
|
49
|
+
},
|
|
50
|
+
create: {
|
|
51
|
+
name: data.name,
|
|
52
|
+
version: data.version,
|
|
53
|
+
type: data.type,
|
|
54
|
+
latest: data.latest || '',
|
|
55
|
+
outdated: data.outdated ?? false,
|
|
56
|
+
packageName: data.packageName,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
const err = e;
|
|
62
|
+
if (err instanceof Prisma.PrismaClientKnownRequestError &&
|
|
63
|
+
err.code === 'P2002') {
|
|
64
|
+
console.warn(`Skipping dependency: ${data.name} (Dependency already exists)`);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.error(`Failed to store dependency: ${data.name}`, err);
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Store multiple dependencies
|
|
74
|
+
*/
|
|
75
|
+
static async storeMany(packageName, dependencies) {
|
|
76
|
+
console.log('Storing Dependencies for: ' + packageName);
|
|
77
|
+
for (const dep of dependencies) {
|
|
78
|
+
await this.upsert({
|
|
79
|
+
name: dep.name,
|
|
80
|
+
version: dep.version,
|
|
81
|
+
type: dep.type,
|
|
82
|
+
latest: dep.latest,
|
|
83
|
+
outdated: dep.outdated,
|
|
84
|
+
packageName,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Delete all dependencies for a package
|
|
90
|
+
*/
|
|
91
|
+
static async deleteByPackageName(packageName) {
|
|
92
|
+
return await prisma.dependencyInfo.deleteMany({
|
|
93
|
+
where: { packageName },
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.DependencyRepository = DependencyRepository;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Repository Pattern Index
|
|
4
|
+
* Exports all repositories for data access layer
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getPrismaErrors = exports.getPrismaClient = exports.DependencyRepository = exports.CommitRepository = exports.PackageHealthRepository = exports.PackageRepository = void 0;
|
|
8
|
+
var package_repository_1 = require("./package-repository");
|
|
9
|
+
Object.defineProperty(exports, "PackageRepository", { enumerable: true, get: function () { return package_repository_1.PackageRepository; } });
|
|
10
|
+
var package_health_repository_1 = require("./package-health-repository");
|
|
11
|
+
Object.defineProperty(exports, "PackageHealthRepository", { enumerable: true, get: function () { return package_health_repository_1.PackageHealthRepository; } });
|
|
12
|
+
var commit_repository_1 = require("./commit-repository");
|
|
13
|
+
Object.defineProperty(exports, "CommitRepository", { enumerable: true, get: function () { return commit_repository_1.CommitRepository; } });
|
|
14
|
+
var dependency_repository_1 = require("./dependency-repository");
|
|
15
|
+
Object.defineProperty(exports, "DependencyRepository", { enumerable: true, get: function () { return dependency_repository_1.DependencyRepository; } });
|
|
16
|
+
var prisma_client_1 = require("./prisma-client");
|
|
17
|
+
Object.defineProperty(exports, "getPrismaClient", { enumerable: true, get: function () { return prisma_client_1.getPrismaClient; } });
|
|
18
|
+
Object.defineProperty(exports, "getPrismaErrors", { enumerable: true, get: function () { return prisma_client_1.getPrismaErrors; } });
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PackageHealthRepository = void 0;
|
|
4
|
+
const prisma_client_1 = require("./prisma-client");
|
|
5
|
+
const prisma = (0, prisma_client_1.getPrismaClient)();
|
|
6
|
+
/**
|
|
7
|
+
* Package Health Repository - Handles all PackageHealth-related database operations
|
|
8
|
+
*/
|
|
9
|
+
class PackageHealthRepository {
|
|
10
|
+
/**
|
|
11
|
+
* Find all package health records
|
|
12
|
+
*/
|
|
13
|
+
static async findAll() {
|
|
14
|
+
return await prisma.packageHealth.findMany();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Find package health by package name
|
|
18
|
+
*/
|
|
19
|
+
static async findByPackageName(packageName) {
|
|
20
|
+
return await prisma.packageHealth.findUnique({
|
|
21
|
+
where: { packageName },
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create or update package health record
|
|
26
|
+
*/
|
|
27
|
+
static async upsert(data) {
|
|
28
|
+
return await prisma.packageHealth.upsert({
|
|
29
|
+
where: { packageName: data.packageName },
|
|
30
|
+
update: {
|
|
31
|
+
packageOverallScore: data.packageOverallScore,
|
|
32
|
+
packageBuildStatus: data.packageBuildStatus,
|
|
33
|
+
packageTestCoverage: data.packageTestCoverage,
|
|
34
|
+
packageLintStatus: data.packageLintStatus,
|
|
35
|
+
packageSecurity: data.packageSecurity,
|
|
36
|
+
packageDependencies: data.packageDependencies || '',
|
|
37
|
+
updatedAt: new Date(),
|
|
38
|
+
},
|
|
39
|
+
create: {
|
|
40
|
+
packageName: data.packageName,
|
|
41
|
+
packageOverallScore: data.packageOverallScore,
|
|
42
|
+
packageBuildStatus: data.packageBuildStatus,
|
|
43
|
+
packageTestCoverage: data.packageTestCoverage,
|
|
44
|
+
packageLintStatus: data.packageLintStatus,
|
|
45
|
+
packageSecurity: data.packageSecurity,
|
|
46
|
+
packageDependencies: data.packageDependencies || '',
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Delete package health record
|
|
52
|
+
*/
|
|
53
|
+
static async deleteByPackageName(packageName) {
|
|
54
|
+
return await prisma.packageHealth.delete({
|
|
55
|
+
where: { packageName },
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Delete all package health records
|
|
60
|
+
*/
|
|
61
|
+
static async deleteAll() {
|
|
62
|
+
return await prisma.packageHealth.deleteMany();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.PackageHealthRepository = PackageHealthRepository;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PackageRepository = void 0;
|
|
4
|
+
const prisma_client_1 = require("./prisma-client");
|
|
5
|
+
const prisma = (0, prisma_client_1.getPrismaClient)();
|
|
6
|
+
/**
|
|
7
|
+
* Package Repository - Handles all Package-related database operations
|
|
8
|
+
*/
|
|
9
|
+
class PackageRepository {
|
|
10
|
+
/**
|
|
11
|
+
* Find all packages
|
|
12
|
+
*/
|
|
13
|
+
static async findAll() {
|
|
14
|
+
return await prisma.package.findMany();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Find a package by name
|
|
18
|
+
*/
|
|
19
|
+
static async findByName(name) {
|
|
20
|
+
return await prisma.package.findUnique({
|
|
21
|
+
where: { name },
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Find a package with related data
|
|
26
|
+
*/
|
|
27
|
+
static async findByNameWithRelations(name) {
|
|
28
|
+
return await prisma.package.findUnique({
|
|
29
|
+
where: { name },
|
|
30
|
+
include: {
|
|
31
|
+
dependenciesInfo: true,
|
|
32
|
+
commits: true,
|
|
33
|
+
packageHealth: true,
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create or update a package
|
|
39
|
+
*/
|
|
40
|
+
static async upsert(data) {
|
|
41
|
+
const createData = {
|
|
42
|
+
createdAt: new Date(),
|
|
43
|
+
lastUpdated: new Date(),
|
|
44
|
+
dependencies: JSON.stringify(data.dependencies || {}),
|
|
45
|
+
maintainers: typeof data.maintainers === 'string' ? data.maintainers : '',
|
|
46
|
+
scripts: JSON.stringify(data.scripts || {}),
|
|
47
|
+
devDependencies: JSON.stringify(data.devDependencies || {}),
|
|
48
|
+
peerDependencies: JSON.stringify(data.peerDependencies || {}),
|
|
49
|
+
name: data.name,
|
|
50
|
+
version: data.version || '',
|
|
51
|
+
type: data.type || '',
|
|
52
|
+
path: data.path || '',
|
|
53
|
+
description: data.description || '',
|
|
54
|
+
license: data.license || '',
|
|
55
|
+
repository: JSON.stringify(data.repository || {}),
|
|
56
|
+
status: data.status || '',
|
|
57
|
+
};
|
|
58
|
+
const updateData = {
|
|
59
|
+
version: data.version,
|
|
60
|
+
type: data.type,
|
|
61
|
+
path: data.path,
|
|
62
|
+
description: data.description,
|
|
63
|
+
license: data.license,
|
|
64
|
+
repository: JSON.stringify(data.repository || {}),
|
|
65
|
+
scripts: JSON.stringify(data.scripts || {}),
|
|
66
|
+
lastUpdated: new Date(),
|
|
67
|
+
};
|
|
68
|
+
return await prisma.package.upsert({
|
|
69
|
+
where: { name: data.name },
|
|
70
|
+
create: createData,
|
|
71
|
+
update: updateData,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Update package status
|
|
76
|
+
*/
|
|
77
|
+
static async updateStatus(name, status) {
|
|
78
|
+
return await prisma.package.update({
|
|
79
|
+
where: { name },
|
|
80
|
+
data: { status },
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Update package configuration
|
|
85
|
+
*/
|
|
86
|
+
static async updateConfig(name, updateData) {
|
|
87
|
+
const data = {
|
|
88
|
+
lastUpdated: new Date(),
|
|
89
|
+
};
|
|
90
|
+
if (updateData.version)
|
|
91
|
+
data.version = updateData.version;
|
|
92
|
+
if (updateData.description !== undefined)
|
|
93
|
+
data.description = updateData.description || '';
|
|
94
|
+
if (updateData.license !== undefined)
|
|
95
|
+
data.license = updateData.license || '';
|
|
96
|
+
if (updateData.scripts)
|
|
97
|
+
data.scripts = JSON.stringify(updateData.scripts);
|
|
98
|
+
if (updateData.repository)
|
|
99
|
+
data.repository = JSON.stringify(updateData.repository);
|
|
100
|
+
if (updateData.dependencies)
|
|
101
|
+
data.dependencies = JSON.stringify(updateData.dependencies);
|
|
102
|
+
if (updateData.devDependencies)
|
|
103
|
+
data.devDependencies = JSON.stringify(updateData.devDependencies);
|
|
104
|
+
if (updateData.peerDependencies)
|
|
105
|
+
data.peerDependencies = JSON.stringify(updateData.peerDependencies);
|
|
106
|
+
return await prisma.package.update({
|
|
107
|
+
where: { name },
|
|
108
|
+
data,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Delete all packages
|
|
113
|
+
*/
|
|
114
|
+
static async deleteAll() {
|
|
115
|
+
return await prisma.package.deleteMany();
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Delete a package by name
|
|
119
|
+
*/
|
|
120
|
+
static async deleteByName(name) {
|
|
121
|
+
return await prisma.package.delete({
|
|
122
|
+
where: { name },
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.PackageRepository = PackageRepository;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.getPrismaClient = getPrismaClient;
|
|
37
|
+
exports.getPrismaErrors = getPrismaErrors;
|
|
38
|
+
const PrismaPkg = __importStar(require("@prisma/client"));
|
|
39
|
+
const PrismaClient = PrismaPkg.PrismaClient || PrismaPkg.default || PrismaPkg;
|
|
40
|
+
const Prisma = PrismaPkg.Prisma || PrismaPkg.PrismaClient?.Prisma || PrismaPkg.default?.Prisma || PrismaPkg;
|
|
41
|
+
let prismaInstance = null;
|
|
42
|
+
/**
|
|
43
|
+
* Get singleton instance of Prisma Client
|
|
44
|
+
*/
|
|
45
|
+
function getPrismaClient() {
|
|
46
|
+
if (!prismaInstance) {
|
|
47
|
+
prismaInstance = new PrismaClient();
|
|
48
|
+
}
|
|
49
|
+
return prismaInstance;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get Prisma error classes for error handling
|
|
53
|
+
*/
|
|
54
|
+
function getPrismaErrors() {
|
|
55
|
+
return Prisma;
|
|
56
|
+
}
|
|
57
|
+
exports.default = getPrismaClient;
|
|
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const express_1 = __importDefault(require("express"));
|
|
7
|
-
const
|
|
7
|
+
const commit_controller_1 = require("../controllers/commit-controller");
|
|
8
8
|
const commitRouter = express_1.default.Router();
|
|
9
9
|
commitRouter
|
|
10
10
|
.route('/:packagePath')
|
|
11
|
-
.get(
|
|
11
|
+
.get(commit_controller_1.getCommitsByPath);
|
|
12
12
|
exports.default = commitRouter;
|
|
@@ -4,12 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const express_1 = __importDefault(require("express"));
|
|
7
|
-
const
|
|
7
|
+
const config_controller_1 = require("../controllers/config-controller");
|
|
8
8
|
const configRouter = express_1.default.Router();
|
|
9
9
|
configRouter
|
|
10
10
|
.route('/files')
|
|
11
|
-
.get(
|
|
11
|
+
.get(config_controller_1.getConfigurationFiles);
|
|
12
12
|
configRouter
|
|
13
13
|
.route('/files/:id')
|
|
14
|
-
.put(
|
|
14
|
+
.put(config_controller_1.updateConfigFile);
|
|
15
15
|
exports.default = configRouter;
|
|
@@ -4,12 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const express_1 = __importDefault(require("express"));
|
|
7
|
-
const
|
|
7
|
+
const health_controller_1 = require("../controllers/health-controller");
|
|
8
8
|
const healthRouter = express_1.default.Router();
|
|
9
9
|
healthRouter
|
|
10
10
|
.route('/refresh')
|
|
11
|
-
.get(
|
|
11
|
+
.get(health_controller_1.refreshHealth);
|
|
12
12
|
healthRouter
|
|
13
13
|
.route('/packages')
|
|
14
|
-
.get(
|
|
14
|
+
.get(health_controller_1.getPackagesHealth);
|
|
15
15
|
exports.default = healthRouter;
|
|
@@ -4,18 +4,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const express_1 = __importDefault(require("express"));
|
|
7
|
-
const
|
|
7
|
+
const package_controller_1 = require("../controllers/package-controller");
|
|
8
8
|
const packageRouter = express_1.default.Router();
|
|
9
9
|
packageRouter
|
|
10
10
|
.route('/refresh')
|
|
11
|
-
.get(
|
|
11
|
+
.get(package_controller_1.refreshPackages);
|
|
12
12
|
packageRouter
|
|
13
13
|
.route('/update-config')
|
|
14
|
-
.put(
|
|
14
|
+
.put(package_controller_1.updatePackageConfig);
|
|
15
15
|
packageRouter
|
|
16
16
|
.route('/:name')
|
|
17
|
-
.get(
|
|
17
|
+
.get(package_controller_1.getPackageDetail);
|
|
18
18
|
packageRouter
|
|
19
19
|
.route('/')
|
|
20
|
-
.get(
|
|
20
|
+
.get(package_controller_1.getPackages);
|
|
21
21
|
exports.default = packageRouter;
|
|
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getCommitsByPathService = void 0;
|
|
7
|
-
const
|
|
7
|
+
const git_service_1 = require("./git-service");
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
9
|
const fs_1 = __importDefault(require("fs"));
|
|
10
10
|
const getCommitsByPathService = async (packagePath) => {
|
|
@@ -12,7 +12,7 @@ const getCommitsByPathService = async (packagePath) => {
|
|
|
12
12
|
const decodedPath = decodeURIComponent(packagePath);
|
|
13
13
|
console.log('Fetching commits for path:', decodedPath);
|
|
14
14
|
console.log('Current working directory:', process.cwd());
|
|
15
|
-
const gitService = new
|
|
15
|
+
const gitService = new git_service_1.GitService();
|
|
16
16
|
// Check if this is an absolute path and convert to relative if needed
|
|
17
17
|
let relativePath = decodedPath;
|
|
18
18
|
const projectRoot = process.cwd();
|