@manojkmfsi/monodog 1.0.23 → 1.0.25

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 (74) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +12 -0
  3. package/dist/controllers/{commitController.js → commit-controller.js} +5 -4
  4. package/dist/controllers/{configController.js → config-controller.js} +3 -3
  5. package/dist/controllers/{healthController.js → health-controller.js} +3 -3
  6. package/dist/controllers/{packageController.js → package-controller.js} +6 -6
  7. package/dist/index.js +11 -236
  8. package/dist/middleware/dashboard-startup.js +124 -0
  9. package/dist/middleware/error-handler.js +36 -0
  10. package/dist/middleware/index.js +23 -0
  11. package/dist/middleware/logger.js +63 -0
  12. package/dist/middleware/security.js +78 -0
  13. package/dist/middleware/server-startup.js +117 -0
  14. package/dist/repositories/commit-repository.js +97 -0
  15. package/dist/repositories/dependency-repository.js +97 -0
  16. package/dist/repositories/index.js +18 -0
  17. package/dist/repositories/package-health-repository.js +65 -0
  18. package/dist/repositories/package-repository.js +126 -0
  19. package/dist/repositories/prisma-client.js +57 -0
  20. package/dist/routes/{commitRoutes.js → commit-routes.js} +2 -2
  21. package/dist/routes/{configRoutes.js → config-routes.js} +3 -3
  22. package/dist/routes/{healthRoutes.js → health-routes.js} +3 -3
  23. package/dist/routes/{packageRoutes.js → package-routes.js} +5 -5
  24. package/dist/serve.js +15 -2
  25. package/dist/services/{commitService.js → commit-service.js} +2 -2
  26. package/dist/services/{configService.js → config-service.js} +2 -40
  27. package/dist/services/{healthService.js → health-service.js} +11 -63
  28. package/dist/services/{packageService.js → package-service.js} +80 -54
  29. package/dist/types/git.js +11 -0
  30. package/dist/types/index.js +1 -0
  31. package/package.json +10 -3
  32. package/prisma/schema/commit.prisma +11 -0
  33. package/prisma/schema/dependency-info.prisma +12 -0
  34. package/prisma/schema/health-status.prisma +14 -0
  35. package/prisma/schema/package-health.prisma +15 -0
  36. package/prisma/schema/package.prisma +21 -0
  37. package/prisma/schema/schema.prisma +15 -0
  38. package/src/controllers/{commitController.ts → commit-controller.ts} +7 -5
  39. package/src/controllers/{configController.ts → config-controller.ts} +4 -3
  40. package/src/controllers/{healthController.ts → health-controller.ts} +4 -3
  41. package/src/controllers/{packageController.ts → package-controller.ts} +7 -6
  42. package/src/index.ts +9 -281
  43. package/src/middleware/dashboard-startup.ts +149 -0
  44. package/src/middleware/error-handler.ts +50 -0
  45. package/src/middleware/index.ts +20 -0
  46. package/src/middleware/logger.ts +58 -0
  47. package/src/middleware/security.ts +81 -0
  48. package/src/middleware/server-startup.ts +142 -0
  49. package/src/repositories/commit-repository.ts +107 -0
  50. package/src/repositories/dependency-repository.ts +109 -0
  51. package/src/repositories/index.ts +10 -0
  52. package/src/repositories/package-health-repository.ts +75 -0
  53. package/src/repositories/package-repository.ts +142 -0
  54. package/src/repositories/prisma-client.ts +25 -0
  55. package/src/routes/{commitRoutes.ts → commit-routes.ts} +1 -1
  56. package/src/routes/{configRoutes.ts → config-routes.ts} +1 -1
  57. package/src/routes/{healthRoutes.ts → health-routes.ts} +1 -1
  58. package/src/routes/{packageRoutes.ts → package-routes.ts} +1 -1
  59. package/src/serve.ts +19 -3
  60. package/src/services/{commitService.ts → commit-service.ts} +1 -1
  61. package/src/services/{configService.ts → config-service.ts} +22 -9
  62. package/src/services/{gitService.ts → git-service.ts} +4 -4
  63. package/src/services/{healthService.ts → health-service.ts} +17 -35
  64. package/src/services/package-service.ts +201 -0
  65. package/src/types/database.ts +57 -1
  66. package/src/types/git.ts +8 -8
  67. package/src/types/index.ts +1 -1
  68. package/dist/utils/db-utils.js +0 -227
  69. package/prisma/schema.prisma +0 -116
  70. package/src/services/packageService.ts +0 -115
  71. package/src/types/monorepo-scanner.d.ts +0 -32
  72. package/src/utils/db-utils.ts +0 -220
  73. /package/dist/services/{gitService.js → git-service.js} +0 -0
  74. /package/prisma/migrations/{20251219074511_create_unique_composite_key_for_commits → 20251219090102_composite_key_for_table_commits}/migration.sql +0 -0
@@ -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 healthController_1 = require("../controllers/healthController");
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(healthController_1.refreshHealth);
11
+ .get(health_controller_1.refreshHealth);
12
12
  healthRouter
13
13
  .route('/packages')
14
- .get(healthController_1.getPackagesHealth);
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 packageController_1 = require("../controllers/packageController");
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(packageController_1.refreshPackages);
11
+ .get(package_controller_1.refreshPackages);
12
12
  packageRouter
13
13
  .route('/update-config')
14
- .put(packageController_1.updatePackageConfig);
14
+ .put(package_controller_1.updatePackageConfig);
15
15
  packageRouter
16
16
  .route('/:name')
17
- .get(packageController_1.getPackageDetail);
17
+ .get(package_controller_1.getPackageDetail);
18
18
  packageRouter
19
19
  .route('/')
20
- .get(packageController_1.getPackages);
20
+ .get(package_controller_1.getPackages);
21
21
  exports.default = packageRouter;
package/dist/serve.js CHANGED
@@ -11,9 +11,22 @@
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  const index_1 = require("./index");
13
13
  const utilities_1 = require("./utils/utilities");
14
+ let logLevel = '';
15
+ let nodeEnv = 'production';
16
+ const args = process.argv;
17
+ if (args.includes('--dev')) {
18
+ nodeEnv = 'development';
19
+ }
20
+ // Priority: Check for debug first, then fall back to info
21
+ if (args.includes('--debug')) {
22
+ logLevel = 'debug';
23
+ }
24
+ else if (args.includes('--info')) {
25
+ logLevel = 'info';
26
+ }
27
+ process.env.LOG_LEVEL = logLevel;
28
+ process.env.NODE_ENV = nodeEnv;
14
29
  const rootPath = (0, utilities_1.findMonorepoRoot)();
15
- console.log(`Starting Monodog API server...`);
16
- console.log(`Analyzing monorepo at root: ${rootPath}`);
17
30
  // Start the Express server and dashboard
18
31
  (0, index_1.startServer)(rootPath);
19
32
  (0, index_1.serveDashboard)(rootPath);
@@ -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 gitService_1 = require("./gitService");
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 gitService_1.GitService();
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();
@@ -1,37 +1,4 @@
1
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
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
4
  };
@@ -39,9 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
6
  exports.updatePackageConfigurationService = exports.updateConfigFileService = exports.getConfigurationFilesService = void 0;
40
7
  const fs_1 = __importDefault(require("fs"));
41
8
  const path_1 = __importDefault(require("path"));
42
- const PrismaPkg = __importStar(require("@prisma/client"));
43
- const PrismaClient = PrismaPkg.PrismaClient || PrismaPkg.default || PrismaPkg;
44
- const prisma = new PrismaClient();
9
+ const repositories_1 = require("../repositories");
45
10
  // Helper function to scan for configuration files
46
11
  async function scanConfigFiles(rootDir) {
47
12
  const configPatterns = [
@@ -343,10 +308,7 @@ const updatePackageConfigurationService = async (packagePath, packageName, confi
343
308
  if (newConfig.peerDependencies)
344
309
  updateData.peerDependencies = JSON.stringify(newConfig.peerDependencies);
345
310
  console.log('Updating database with:', updateData);
346
- const updatedPackage = await prisma.package.update({
347
- where: { name: packageName },
348
- data: updateData,
349
- });
311
+ const updatedPackage = await repositories_1.PackageRepository.updateConfig(packageName, updateData);
350
312
  // Transform the response
351
313
  const transformedPackage = {
352
314
  ...updatedPackage,
@@ -1,46 +1,11 @@
1
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
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.healthRefreshService = exports.getHealthSummaryService = void 0;
37
4
  const utilities_1 = require("../utils/utilities");
38
5
  const monorepo_scanner_1 = require("../utils/monorepo-scanner");
39
- const PrismaPkg = __importStar(require("@prisma/client"));
40
- const PrismaClient = PrismaPkg.PrismaClient || PrismaPkg.default || PrismaPkg;
41
- const prisma = new PrismaClient();
6
+ const repositories_1 = require("../repositories");
42
7
  const getHealthSummaryService = async () => {
43
- const packageHealthData = await prisma.packageHealth.findMany();
8
+ const packageHealthData = await repositories_1.PackageHealthRepository.findAll();
44
9
  console.log('packageHealthData -->', packageHealthData.length);
45
10
  // Transform the data to match the expected frontend format
46
11
  const packages = packageHealthData.map((pkg) => {
@@ -101,34 +66,17 @@ const healthRefreshService = async (rootDir) => {
101
66
  ? 'warning'
102
67
  : 'error';
103
68
  console.log(pkg.name, '-->', health, packageStatus);
104
- await prisma.packageHealth.upsert({
105
- where: {
106
- packageName: pkg.name,
107
- },
108
- update: {
109
- packageOverallScore: overallScore.overallScore,
110
- packageBuildStatus: buildStatus,
111
- packageTestCoverage: testCoverage,
112
- packageLintStatus: lintStatus,
113
- packageSecurity: securityAudit,
114
- packageDependencies: '',
115
- updatedAt: new Date()
116
- },
117
- create: {
118
- packageName: pkg.name,
119
- packageOverallScore: overallScore.overallScore,
120
- packageBuildStatus: buildStatus,
121
- packageTestCoverage: testCoverage,
122
- packageLintStatus: lintStatus,
123
- packageSecurity: securityAudit,
124
- packageDependencies: '',
125
- },
69
+ await repositories_1.PackageHealthRepository.upsert({
70
+ packageName: pkg.name,
71
+ packageOverallScore: overallScore.overallScore,
72
+ packageBuildStatus: buildStatus,
73
+ packageTestCoverage: testCoverage,
74
+ packageLintStatus: lintStatus,
75
+ packageSecurity: securityAudit,
76
+ packageDependencies: '',
126
77
  });
127
78
  // update related package status as well
128
- await prisma.package.update({
129
- where: { name: pkg.name },
130
- data: { status: packageStatus },
131
- });
79
+ await repositories_1.PackageRepository.updateStatus(pkg.name, packageStatus);
132
80
  return {
133
81
  packageName: pkg.name,
134
82
  health,
@@ -1,48 +1,83 @@
1
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
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
3
  exports.getPackageDetailService = exports.refreshPackagesService = exports.getPackagesService = void 0;
37
4
  const utilities_1 = require("../utils/utilities");
38
5
  const monorepo_scanner_1 = require("../utils/monorepo-scanner");
39
6
  const ci_status_1 = require("../utils/ci-status");
40
- const db_utils_1 = require("../utils/db-utils");
41
- const PrismaPkg = __importStar(require("@prisma/client"));
42
- const PrismaClient = PrismaPkg.PrismaClient || PrismaPkg.default || PrismaPkg;
43
- const prisma = new PrismaClient();
7
+ const repositories_1 = require("../repositories");
8
+ const commit_service_1 = require("./commit-service");
9
+ /**
10
+ * Get package dependencies
11
+ */
12
+ function getPackageDependenciesInfo(pkg) {
13
+ const allDeps = [];
14
+ Object.keys(pkg.dependencies || {}).forEach(depName => {
15
+ allDeps.push({
16
+ name: depName,
17
+ version: pkg.dependencies[depName],
18
+ type: 'dependency',
19
+ latest: '',
20
+ outdated: false,
21
+ });
22
+ });
23
+ Object.keys(pkg.devDependencies || {}).forEach(depName => {
24
+ allDeps.push({
25
+ name: depName,
26
+ version: pkg.devDependencies[depName],
27
+ type: 'devDependency',
28
+ latest: '',
29
+ outdated: false,
30
+ });
31
+ });
32
+ Object.keys(pkg.peerDependencies || {}).forEach(depName => {
33
+ allDeps.push({
34
+ name: depName,
35
+ version: pkg.peerDependencies[depName],
36
+ type: 'peerDependency',
37
+ latest: '',
38
+ outdated: false,
39
+ });
40
+ });
41
+ return allDeps;
42
+ }
43
+ /**
44
+ * Store packages in database using repository pattern
45
+ */
46
+ async function storePackage(pkg) {
47
+ try {
48
+ // Create or update package using repository
49
+ await repositories_1.PackageRepository.upsert({
50
+ name: pkg.name,
51
+ version: pkg.version,
52
+ type: pkg.type,
53
+ path: pkg.path,
54
+ description: pkg.description,
55
+ license: pkg.license,
56
+ repository: pkg.repository,
57
+ scripts: pkg.scripts,
58
+ dependencies: pkg.dependencies,
59
+ devDependencies: pkg.devDependencies,
60
+ peerDependencies: pkg.peerDependencies,
61
+ maintainers: pkg.maintainers.join(','),
62
+ status: '',
63
+ });
64
+ // Store commits using repository
65
+ const commits = await (0, commit_service_1.getCommitsByPathService)(pkg.path ?? '');
66
+ if (commits.length) {
67
+ await repositories_1.CommitRepository.storeMany(pkg.name, commits);
68
+ }
69
+ // Store dependencies using repository
70
+ const dependenciesInfo = getPackageDependenciesInfo(pkg);
71
+ if (dependenciesInfo.length) {
72
+ await repositories_1.DependencyRepository.storeMany(pkg.name, dependenciesInfo);
73
+ }
74
+ }
75
+ catch (error) {
76
+ console.warn(` Failed to store report for ${pkg.name}:`, error);
77
+ }
78
+ }
44
79
  const getPackagesService = async (rootPath) => {
45
- let dbPackages = await prisma.package.findMany();
80
+ let dbPackages = await repositories_1.PackageRepository.findAll();
46
81
  if (!dbPackages.length) {
47
82
  try {
48
83
  const rootDir = rootPath;
@@ -50,13 +85,13 @@ const getPackagesService = async (rootPath) => {
50
85
  const packages = (0, utilities_1.scanMonorepo)(rootDir);
51
86
  console.log('packages --> scan', packages.length);
52
87
  for (const pkg of packages) {
53
- await (0, db_utils_1.storePackage)(pkg);
88
+ await storePackage(pkg);
54
89
  }
55
90
  }
56
91
  catch (error) {
57
92
  throw new Error('Error ' + error);
58
93
  }
59
- dbPackages = await prisma.package.findMany();
94
+ dbPackages = await repositories_1.PackageRepository.findAll();
60
95
  }
61
96
  const transformedPackages = dbPackages.map((pkg) => {
62
97
  // We create a new object 'transformedPkg' based on the database record 'pkg'
@@ -86,27 +121,18 @@ const getPackagesService = async (rootPath) => {
86
121
  };
87
122
  exports.getPackagesService = getPackagesService;
88
123
  const refreshPackagesService = async (rootPath) => {
89
- await prisma.package.deleteMany();
124
+ await repositories_1.PackageRepository.deleteAll();
90
125
  const rootDir = rootPath;
91
126
  const packages = (0, utilities_1.scanMonorepo)(rootDir);
92
127
  console.log('packages -->', packages.length);
93
128
  for (const pkg of packages) {
94
- await (0, db_utils_1.storePackage)(pkg);
129
+ await storePackage(pkg);
95
130
  }
96
131
  return packages;
97
132
  };
98
133
  exports.refreshPackagesService = refreshPackagesService;
99
134
  const getPackageDetailService = async (name) => {
100
- const pkg = await prisma.package.findUnique({
101
- where: {
102
- name: name,
103
- },
104
- include: {
105
- dependenciesInfo: true,
106
- commits: true,
107
- packageHealth: true,
108
- },
109
- });
135
+ const pkg = await repositories_1.PackageRepository.findByNameWithRelations(name);
110
136
  if (!pkg) {
111
137
  return null;
112
138
  }
@@ -125,8 +151,8 @@ const getPackageDetailService = async (name) => {
125
151
  ? JSON.parse(pkg.peerDependencies)
126
152
  : [];
127
153
  // Get additional package information
128
- const reports = await (0, monorepo_scanner_1.generateReports)();
129
- const packageReport = reports.find((r) => r.package.name === name);
154
+ const reports = (await (0, monorepo_scanner_1.generateReports)());
155
+ const packageReport = reports?.find((r) => r.package?.name === name);
130
156
  const result = {
131
157
  ...transformedPkg,
132
158
  report: packageReport,
package/dist/types/git.js CHANGED
@@ -4,6 +4,17 @@
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.VALID_COMMIT_TYPES = void 0;
7
+ /**
8
+ * Interface representing a single commit object with key metadata.
9
+ */
10
+ // export interface GitCommit {
11
+ // hash: string;
12
+ // author: string;
13
+ // packageName: string;
14
+ // date: Date;
15
+ // message: string;
16
+ // type: string;
17
+ // }
7
18
  /**
8
19
  * List of standard Conventional Commit types for validation.
9
20
  * Any extracted type not in this list will be set to 'other'.
@@ -4,5 +4,6 @@
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.VALID_COMMIT_TYPES = void 0;
7
+ // export type { GitCommit } from './git';
7
8
  var git_1 = require("./git");
8
9
  Object.defineProperty(exports, "VALID_COMMIT_TYPES", { enumerable: true, get: function () { return git_1.VALID_COMMIT_TYPES; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manojkmfsi/monodog",
3
- "version": "1.0.23",
3
+ "version": "1.0.25",
4
4
  "description": "App for monodog monorepo",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -22,25 +22,32 @@
22
22
  "@types/express": "^4.17.25",
23
23
  "@types/jest": "^29.5.14",
24
24
  "@types/js-yaml": "^4.0.9",
25
+ "@types/morgan": "^1.9.10",
25
26
  "@types/node": "^20.19.27",
26
27
  "cross-env": "^10.1.0",
27
28
  "jest": "^29.7.0",
28
29
  "jest-environment-jsdom": "^30.2.0",
30
+ "morgan": "^1.10.1",
29
31
  "ts-jest": "^29.4.6",
30
32
  "ts-node": "^10.9.2",
31
33
  "tsx": "^4.21.0",
32
34
  "typescript": "^5.9.3"
33
35
  },
36
+ "prisma": {
37
+ "schema": "./prisma/schema"
38
+ },
34
39
  "scripts": {
35
- "dev": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') tsx watch src/serve.js",
40
+ "dev": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') tsx watch src/serve.ts --dev --debug",
36
41
  "serve": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') tsx dist/serve.js",
37
42
  "build": "rm -rf dist && tsc",
38
- "test:coverage": "jest --coverage",
43
+ "test:coverage": "jest --coverage --silent",
39
44
  "prestart": "npm run build",
40
45
  "clean": "rm -rf dist node_modules/.cache",
41
46
  "lint": "eslint .",
42
47
  "lint:fix": "eslint . --fix",
43
48
  "db:url": "node dist/get-db-url.js",
49
+ "schema:format": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma format",
50
+ "schema:validate": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma validate",
44
51
  "generate": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma generate",
45
52
  "migrate": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma migrate dev",
46
53
  "migrate:reset": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma migrate reset --force"
@@ -0,0 +1,11 @@
1
+ model Commit {
2
+ hash String
3
+ message String
4
+ author String
5
+ date DateTime?
6
+ type String
7
+ packageName String
8
+ package Package @relation(fields: [packageName], references: [name], onDelete: Cascade)
9
+
10
+ @@unique([hash, packageName])
11
+ }
@@ -0,0 +1,12 @@
1
+ model DependencyInfo {
2
+ name String
3
+ packageName String
4
+ version String
5
+ type String @default("")
6
+ status String @default("")
7
+ latest String?
8
+ outdated Boolean @default(false)
9
+ package Package @relation(fields: [packageName], references: [name], onDelete: Cascade)
10
+
11
+ @@unique([name, packageName]) // Composite unique constraint
12
+ }
@@ -0,0 +1,14 @@
1
+ model HealthStatus {
2
+ id Int @id @default(autoincrement())
3
+ packageName String @unique
4
+ overallScore Float // Overall health score (0-100)
5
+ buildStatus String // e.g., "passing", "failing", "unknown"
6
+ testCoverage Float // Test coverage percentage (0-100)
7
+ lintStatus String // e.g., "passing", "warning", "failing"
8
+ security String // e.g., "secure", "vulnerabilities", "unknown"
9
+ dependencies String // e.g., "up-to-date", "outdated", "vulnerable"
10
+ createdAt DateTime @default(now())
11
+ updatedAt DateTime @updatedAt
12
+
13
+ @@map("health_status")
14
+ }
@@ -0,0 +1,15 @@
1
+ model PackageHealth {
2
+ id Int @id @default(autoincrement())
3
+ packageName String @unique
4
+ packageOverallScore Float
5
+ packageBuildStatus String
6
+ packageTestCoverage Float?
7
+ packageLintStatus String
8
+ packageSecurity String // Changed from securityAudit to packageSecurity
9
+ packageDependencies String // Changed from dependencies to packageDependencies
10
+ createdAt DateTime @default(now())
11
+ updatedAt DateTime @updatedAt
12
+ package Package @relation(fields: [packageName], references: [name], onDelete: Cascade)
13
+
14
+ @@map("package_health")
15
+ }
@@ -0,0 +1,21 @@
1
+ model Package {
2
+ // Primary Key and Identity Field (using the package name as the unique ID): Example: '@monodog/dashboard'
3
+ name String @id @unique
4
+ version String
5
+ type String // e.g., 'app', 'package'
6
+ createdAt DateTime @default(now())
7
+ lastUpdated DateTime @default(now())
8
+ dependencies String?
9
+ maintainers String
10
+ path String // The relative path in the file system, e.g., 'packages/monoapp'
11
+ description String
12
+ license String
13
+ repository String?
14
+ scripts String?
15
+ status String @default("")
16
+ devDependencies String?
17
+ peerDependencies String?
18
+ dependenciesInfo DependencyInfo[]
19
+ commits Commit[]
20
+ packageHealth PackageHealth?
21
+ }
@@ -0,0 +1,15 @@
1
+ // This is your Prisma schema file,
2
+ // learn more about it in the docs: https://pris.ly/d/prisma-schema
3
+
4
+ // Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
5
+ // Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
6
+
7
+ generator client {
8
+ provider = "prisma-client-js"
9
+ previewFeatures = ["prismaSchemaFolder"]
10
+ }
11
+
12
+ datasource db {
13
+ provider = "sqlite"
14
+ url = env("DATABASE_URL")
15
+ }
@@ -1,9 +1,10 @@
1
1
 
2
2
 
3
3
 
4
- import { getCommitsByPathService } from '../services/commitService';
4
+ import { Request, Response } from 'express';
5
+ import { getCommitsByPathService } from '../services/commit-service';
5
6
 
6
- export const getCommitsByPath = async (_req: any, res: any) => {
7
+ export const getCommitsByPath = async (_req: Request, res: Response) => {
7
8
 
8
9
  try {
9
10
  const { packagePath } = _req.params;
@@ -17,12 +18,13 @@ export const getCommitsByPath = async (_req: any, res: any) => {
17
18
  `Successfully fetched ${commits.length} commits for ${decodedPath}`
18
19
  );
19
20
  res.json(commits);
20
- } catch (error: any) {
21
+ } catch (error: unknown) {
22
+ const err = error as Error & { message?: string; stack?: string };
21
23
  console.error('Error fetching commit details:', error);
22
24
  res.status(500).json({
23
25
  error: 'Failed to fetch commit details',
24
- message: error.message,
25
- stack: process.env.NODE_ENV === 'development' ? error.stack : undefined,
26
+ message: err?.message,
27
+ stack: process.env.NODE_ENV === 'development' ? err?.stack : undefined,
26
28
  });
27
29
  }
28
30
  }
@@ -1,6 +1,7 @@
1
- import { getConfigurationFilesService, updateConfigFileService, updatePackageConfigurationService } from '../services/configService';
1
+ import { Request, Response } from 'express';
2
+ import { getConfigurationFilesService, updateConfigFileService, updatePackageConfigurationService } from '../services/config-service';
2
3
 
3
- export const getConfigurationFiles = async (_req: any, res: any) => {
4
+ export const getConfigurationFiles = async (_req: Request, res: Response) => {
4
5
  try {
5
6
  const rootDir = _req.app.locals.rootPath;
6
7
  console.log('Monorepo root directory:', rootDir);
@@ -16,7 +17,7 @@ export const getConfigurationFiles = async (_req: any, res: any) => {
16
17
  }
17
18
  }
18
19
 
19
- export const updateConfigFile = async (_req: any, res: any) => {
20
+ export const updateConfigFile = async (_req: Request, res: Response) => {
20
21
  try {
21
22
  const { id } = _req.params;
22
23
  const { content } = _req.body;
@@ -1,6 +1,7 @@
1
- import { getHealthSummaryService, healthRefreshService } from '../services/healthService';
1
+ import { Request, Response } from 'express';
2
+ import { getHealthSummaryService, healthRefreshService } from '../services/health-service';
2
3
 
3
- export const getPackagesHealth = async (_req: any, res: any) => {
4
+ export const getPackagesHealth = async (_req: Request, res: Response) => {
4
5
  try {
5
6
  const health = await getHealthSummaryService();
6
7
  res.json(health);
@@ -12,7 +13,7 @@ export const getPackagesHealth = async (_req: any, res: any) => {
12
13
  }
13
14
  }
14
15
 
15
- export const refreshHealth = async (_req: any, res: any) => {
16
+ export const refreshHealth = async (_req: Request, res: Response) => {
16
17
  try {
17
18
  const health = await healthRefreshService(_req.app.locals.rootPath);
18
19
  res.json(health);