@jterrats/smart-deployment 1.0.3

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 (395) hide show
  1. package/README.md +193 -0
  2. package/lib/ai/agentforce-error-handler.d.ts +81 -0
  3. package/lib/ai/agentforce-error-handler.js +196 -0
  4. package/lib/ai/agentforce-error-handler.js.map +1 -0
  5. package/lib/ai/agentforce-priority-service.d.ts +82 -0
  6. package/lib/ai/agentforce-priority-service.js +257 -0
  7. package/lib/ai/agentforce-priority-service.js.map +1 -0
  8. package/lib/ai/agentforce-service.d.ts +99 -0
  9. package/lib/ai/agentforce-service.js +300 -0
  10. package/lib/ai/agentforce-service.js.map +1 -0
  11. package/lib/ai/circuit-breaker.d.ts +115 -0
  12. package/lib/ai/circuit-breaker.js +277 -0
  13. package/lib/ai/circuit-breaker.js.map +1 -0
  14. package/lib/ai/dependency-inference-service.d.ts +76 -0
  15. package/lib/ai/dependency-inference-service.js +220 -0
  16. package/lib/ai/dependency-inference-service.js.map +1 -0
  17. package/lib/ai/llm-provider-factory.d.ts +15 -0
  18. package/lib/ai/llm-provider-factory.js +36 -0
  19. package/lib/ai/llm-provider-factory.js.map +1 -0
  20. package/lib/ai/llm-provider.d.ts +27 -0
  21. package/lib/ai/llm-provider.js +2 -0
  22. package/lib/ai/llm-provider.js.map +1 -0
  23. package/lib/ai/openai-service.d.ts +20 -0
  24. package/lib/ai/openai-service.js +89 -0
  25. package/lib/ai/openai-service.js.map +1 -0
  26. package/lib/ai/prompt-builder.d.ts +79 -0
  27. package/lib/ai/prompt-builder.js +180 -0
  28. package/lib/ai/prompt-builder.js.map +1 -0
  29. package/lib/ai/response-parser.d.ts +67 -0
  30. package/lib/ai/response-parser.js +234 -0
  31. package/lib/ai/response-parser.js.map +1 -0
  32. package/lib/ai/wave-validation-service.d.ts +111 -0
  33. package/lib/ai/wave-validation-service.js +381 -0
  34. package/lib/ai/wave-validation-service.js.map +1 -0
  35. package/lib/analysis/analysis-reporter.d.ts +56 -0
  36. package/lib/analysis/analysis-reporter.js +170 -0
  37. package/lib/analysis/analysis-reporter.js.map +1 -0
  38. package/lib/analytics/error-analytics.d.ts +80 -0
  39. package/lib/analytics/error-analytics.js +162 -0
  40. package/lib/analytics/error-analytics.js.map +1 -0
  41. package/lib/commands/analyze.d.ts +49 -0
  42. package/lib/commands/analyze.js +232 -0
  43. package/lib/commands/analyze.js.map +1 -0
  44. package/lib/commands/config.d.ts +42 -0
  45. package/lib/commands/config.js +219 -0
  46. package/lib/commands/config.js.map +1 -0
  47. package/lib/commands/resume.d.ts +26 -0
  48. package/lib/commands/resume.js +69 -0
  49. package/lib/commands/resume.js.map +1 -0
  50. package/lib/commands/start.d.ts +70 -0
  51. package/lib/commands/start.js +659 -0
  52. package/lib/commands/start.js.map +1 -0
  53. package/lib/commands/status.d.ts +37 -0
  54. package/lib/commands/status.js +69 -0
  55. package/lib/commands/status.js.map +1 -0
  56. package/lib/commands/validate.d.ts +33 -0
  57. package/lib/commands/validate.js +66 -0
  58. package/lib/commands/validate.js.map +1 -0
  59. package/lib/config/repo-config.d.ts +22 -0
  60. package/lib/config/repo-config.js +31 -0
  61. package/lib/config/repo-config.js.map +1 -0
  62. package/lib/constants/agentforce-limits.d.ts +174 -0
  63. package/lib/constants/agentforce-limits.js +262 -0
  64. package/lib/constants/agentforce-limits.js.map +1 -0
  65. package/lib/constants/api-version.d.ts +70 -0
  66. package/lib/constants/api-version.js +122 -0
  67. package/lib/constants/api-version.js.map +1 -0
  68. package/lib/constants/deployment-order.d.ts +68 -0
  69. package/lib/constants/deployment-order.js +162 -0
  70. package/lib/constants/deployment-order.js.map +1 -0
  71. package/lib/constants/salesforce-limits.d.ts +107 -0
  72. package/lib/constants/salesforce-limits.js +104 -0
  73. package/lib/constants/salesforce-limits.js.map +1 -0
  74. package/lib/dependencies/circular-dependency-detector.d.ts +137 -0
  75. package/lib/dependencies/circular-dependency-detector.js +329 -0
  76. package/lib/dependencies/circular-dependency-detector.js.map +1 -0
  77. package/lib/dependencies/cycle-remediation-planner.d.ts +50 -0
  78. package/lib/dependencies/cycle-remediation-planner.js +192 -0
  79. package/lib/dependencies/cycle-remediation-planner.js.map +1 -0
  80. package/lib/dependencies/dependency-cache.d.ts +134 -0
  81. package/lib/dependencies/dependency-cache.js +303 -0
  82. package/lib/dependencies/dependency-cache.js.map +1 -0
  83. package/lib/dependencies/dependency-depth-calculator.d.ts +145 -0
  84. package/lib/dependencies/dependency-depth-calculator.js +368 -0
  85. package/lib/dependencies/dependency-depth-calculator.js.map +1 -0
  86. package/lib/dependencies/dependency-graph-builder.d.ts +151 -0
  87. package/lib/dependencies/dependency-graph-builder.js +411 -0
  88. package/lib/dependencies/dependency-graph-builder.js.map +1 -0
  89. package/lib/dependencies/dependency-impact-analyzer.d.ts +145 -0
  90. package/lib/dependencies/dependency-impact-analyzer.js +330 -0
  91. package/lib/dependencies/dependency-impact-analyzer.js.map +1 -0
  92. package/lib/dependencies/dependency-merger.d.ts +122 -0
  93. package/lib/dependencies/dependency-merger.js +245 -0
  94. package/lib/dependencies/dependency-merger.js.map +1 -0
  95. package/lib/dependencies/dependency-resolver.d.ts +157 -0
  96. package/lib/dependencies/dependency-resolver.js +298 -0
  97. package/lib/dependencies/dependency-resolver.js.map +1 -0
  98. package/lib/dependencies/dependency-validator.d.ts +123 -0
  99. package/lib/dependencies/dependency-validator.js +291 -0
  100. package/lib/dependencies/dependency-validator.js.map +1 -0
  101. package/lib/dependencies/graph-visualizer.d.ts +110 -0
  102. package/lib/dependencies/graph-visualizer.js +262 -0
  103. package/lib/dependencies/graph-visualizer.js.map +1 -0
  104. package/lib/dependencies/heuristic-inference.d.ts +136 -0
  105. package/lib/dependencies/heuristic-inference.js +430 -0
  106. package/lib/dependencies/heuristic-inference.js.map +1 -0
  107. package/lib/deployment/cycle-source-editor.d.ts +34 -0
  108. package/lib/deployment/cycle-source-editor.js +121 -0
  109. package/lib/deployment/cycle-source-editor.js.map +1 -0
  110. package/lib/deployment/deployment-error-handler.d.ts +38 -0
  111. package/lib/deployment/deployment-error-handler.js +79 -0
  112. package/lib/deployment/deployment-error-handler.js.map +1 -0
  113. package/lib/deployment/deployment-reporter.d.ts +63 -0
  114. package/lib/deployment/deployment-reporter.js +150 -0
  115. package/lib/deployment/deployment-reporter.js.map +1 -0
  116. package/lib/deployment/deployment-state-summary.d.ts +38 -0
  117. package/lib/deployment/deployment-state-summary.js +209 -0
  118. package/lib/deployment/deployment-state-summary.js.map +1 -0
  119. package/lib/deployment/deployment-status-service.d.ts +36 -0
  120. package/lib/deployment/deployment-status-service.js +128 -0
  121. package/lib/deployment/deployment-status-service.js.map +1 -0
  122. package/lib/deployment/deployment-tracker.d.ts +42 -0
  123. package/lib/deployment/deployment-tracker.js +79 -0
  124. package/lib/deployment/deployment-tracker.js.map +1 -0
  125. package/lib/deployment/deployment-validation-service.d.ts +28 -0
  126. package/lib/deployment/deployment-validation-service.js +161 -0
  127. package/lib/deployment/deployment-validation-service.js.map +1 -0
  128. package/lib/deployment/retry-handler.d.ts +37 -0
  129. package/lib/deployment/retry-handler.js +86 -0
  130. package/lib/deployment/retry-handler.js.map +1 -0
  131. package/lib/deployment/sf-cli-integration.d.ts +42 -0
  132. package/lib/deployment/sf-cli-integration.js +105 -0
  133. package/lib/deployment/sf-cli-integration.js.map +1 -0
  134. package/lib/deployment/state-manager.d.ts +61 -0
  135. package/lib/deployment/state-manager.js +83 -0
  136. package/lib/deployment/state-manager.js.map +1 -0
  137. package/lib/deployment/test-executor.d.ts +41 -0
  138. package/lib/deployment/test-executor.js +87 -0
  139. package/lib/deployment/test-executor.js.map +1 -0
  140. package/lib/errors/base-error.d.ts +24 -0
  141. package/lib/errors/base-error.js +66 -0
  142. package/lib/errors/base-error.js.map +1 -0
  143. package/lib/errors/dependency-error.d.ts +37 -0
  144. package/lib/errors/dependency-error.js +76 -0
  145. package/lib/errors/dependency-error.js.map +1 -0
  146. package/lib/errors/deployment-error.d.ts +55 -0
  147. package/lib/errors/deployment-error.js +132 -0
  148. package/lib/errors/deployment-error.js.map +1 -0
  149. package/lib/errors/index.d.ts +45 -0
  150. package/lib/errors/index.js +71 -0
  151. package/lib/errors/index.js.map +1 -0
  152. package/lib/errors/network-error.d.ts +53 -0
  153. package/lib/errors/network-error.js +111 -0
  154. package/lib/errors/network-error.js.map +1 -0
  155. package/lib/errors/parsing-error.d.ts +41 -0
  156. package/lib/errors/parsing-error.js +69 -0
  157. package/lib/errors/parsing-error.js.map +1 -0
  158. package/lib/errors/validation-error-reporter.d.ts +34 -0
  159. package/lib/errors/validation-error-reporter.js +99 -0
  160. package/lib/errors/validation-error-reporter.js.map +1 -0
  161. package/lib/errors/validation-error.d.ts +58 -0
  162. package/lib/errors/validation-error.js +131 -0
  163. package/lib/errors/validation-error.js.map +1 -0
  164. package/lib/index.d.ts +2 -0
  165. package/lib/index.js +2 -0
  166. package/lib/index.js.map +1 -0
  167. package/lib/monitoring/performance-monitor.d.ts +98 -0
  168. package/lib/monitoring/performance-monitor.js +260 -0
  169. package/lib/monitoring/performance-monitor.js.map +1 -0
  170. package/lib/parsers/apex-class-parser.d.ts +47 -0
  171. package/lib/parsers/apex-class-parser.js +368 -0
  172. package/lib/parsers/apex-class-parser.js.map +1 -0
  173. package/lib/parsers/apex-trigger-parser.d.ts +48 -0
  174. package/lib/parsers/apex-trigger-parser.js +229 -0
  175. package/lib/parsers/apex-trigger-parser.js.map +1 -0
  176. package/lib/parsers/aura-parser.d.ts +55 -0
  177. package/lib/parsers/aura-parser.js +229 -0
  178. package/lib/parsers/aura-parser.js.map +1 -0
  179. package/lib/parsers/bot-parser.d.ts +65 -0
  180. package/lib/parsers/bot-parser.js +225 -0
  181. package/lib/parsers/bot-parser.js.map +1 -0
  182. package/lib/parsers/custom-metadata-parser.d.ts +94 -0
  183. package/lib/parsers/custom-metadata-parser.js +199 -0
  184. package/lib/parsers/custom-metadata-parser.js.map +1 -0
  185. package/lib/parsers/custom-object-parser.d.ts +62 -0
  186. package/lib/parsers/custom-object-parser.js +297 -0
  187. package/lib/parsers/custom-object-parser.js.map +1 -0
  188. package/lib/parsers/email-template-parser.d.ts +64 -0
  189. package/lib/parsers/email-template-parser.js +238 -0
  190. package/lib/parsers/email-template-parser.js.map +1 -0
  191. package/lib/parsers/error-resilient-parser.d.ts +110 -0
  192. package/lib/parsers/error-resilient-parser.js +277 -0
  193. package/lib/parsers/error-resilient-parser.js.map +1 -0
  194. package/lib/parsers/flexipage-parser.d.ts +64 -0
  195. package/lib/parsers/flexipage-parser.js +196 -0
  196. package/lib/parsers/flexipage-parser.js.map +1 -0
  197. package/lib/parsers/flow-parser.d.ts +54 -0
  198. package/lib/parsers/flow-parser.js +287 -0
  199. package/lib/parsers/flow-parser.js.map +1 -0
  200. package/lib/parsers/genai-prompt-parser.d.ts +67 -0
  201. package/lib/parsers/genai-prompt-parser.js +160 -0
  202. package/lib/parsers/genai-prompt-parser.js.map +1 -0
  203. package/lib/parsers/layout-parser.d.ts +64 -0
  204. package/lib/parsers/layout-parser.js +267 -0
  205. package/lib/parsers/layout-parser.js.map +1 -0
  206. package/lib/parsers/lwc-parser.d.ts +60 -0
  207. package/lib/parsers/lwc-parser.js +264 -0
  208. package/lib/parsers/lwc-parser.js.map +1 -0
  209. package/lib/parsers/permission-set-parser.d.ts +86 -0
  210. package/lib/parsers/permission-set-parser.js +152 -0
  211. package/lib/parsers/permission-set-parser.js.map +1 -0
  212. package/lib/parsers/profile-parser.d.ts +81 -0
  213. package/lib/parsers/profile-parser.js +141 -0
  214. package/lib/parsers/profile-parser.js.map +1 -0
  215. package/lib/parsers/visualforce-parser.d.ts +47 -0
  216. package/lib/parsers/visualforce-parser.js +180 -0
  217. package/lib/parsers/visualforce-parser.js.map +1 -0
  218. package/lib/provisioning/data-provisioner.d.ts +88 -0
  219. package/lib/provisioning/data-provisioner.js +257 -0
  220. package/lib/provisioning/data-provisioner.js.map +1 -0
  221. package/lib/scanner/custom-structure-scanner.d.ts +66 -0
  222. package/lib/scanner/custom-structure-scanner.js +229 -0
  223. package/lib/scanner/custom-structure-scanner.js.map +1 -0
  224. package/lib/scanner/forceignore-parser.d.ts +69 -0
  225. package/lib/scanner/forceignore-parser.js +195 -0
  226. package/lib/scanner/forceignore-parser.js.map +1 -0
  227. package/lib/scanner/metadata-format-scanner.d.ts +77 -0
  228. package/lib/scanner/metadata-format-scanner.js +282 -0
  229. package/lib/scanner/metadata-format-scanner.js.map +1 -0
  230. package/lib/scanner/monorepo-scanner.d.ts +71 -0
  231. package/lib/scanner/monorepo-scanner.js +225 -0
  232. package/lib/scanner/monorepo-scanner.js.map +1 -0
  233. package/lib/scanner/project-validator.d.ts +55 -0
  234. package/lib/scanner/project-validator.js +235 -0
  235. package/lib/scanner/project-validator.js.map +1 -0
  236. package/lib/scanner/sfdx-project-detector.d.ts +86 -0
  237. package/lib/scanner/sfdx-project-detector.js +240 -0
  238. package/lib/scanner/sfdx-project-detector.js.map +1 -0
  239. package/lib/scanner/structure-validator.d.ts +64 -0
  240. package/lib/scanner/structure-validator.js +296 -0
  241. package/lib/scanner/structure-validator.js.map +1 -0
  242. package/lib/services/metadata-scanner-service.d.ts +64 -0
  243. package/lib/services/metadata-scanner-service.js +651 -0
  244. package/lib/services/metadata-scanner-service.js.map +1 -0
  245. package/lib/types/agentforce.d.ts +157 -0
  246. package/lib/types/agentforce.js +2 -0
  247. package/lib/types/agentforce.js.map +1 -0
  248. package/lib/types/dependency.d.ts +98 -0
  249. package/lib/types/dependency.js +5 -0
  250. package/lib/types/dependency.js.map +1 -0
  251. package/lib/types/deployment-plan.d.ts +81 -0
  252. package/lib/types/deployment-plan.js +6 -0
  253. package/lib/types/deployment-plan.js.map +1 -0
  254. package/lib/types/deployment.d.ts +88 -0
  255. package/lib/types/deployment.js +5 -0
  256. package/lib/types/deployment.js.map +1 -0
  257. package/lib/types/graph.d.ts +35 -0
  258. package/lib/types/graph.js +5 -0
  259. package/lib/types/graph.js.map +1 -0
  260. package/lib/types/index.d.ts +12 -0
  261. package/lib/types/index.js +17 -0
  262. package/lib/types/index.js.map +1 -0
  263. package/lib/types/metadata.d.ts +101 -0
  264. package/lib/types/metadata.js +13 -0
  265. package/lib/types/metadata.js.map +1 -0
  266. package/lib/types/project.d.ts +156 -0
  267. package/lib/types/project.js +56 -0
  268. package/lib/types/project.js.map +1 -0
  269. package/lib/types/salesforce/apex.d.ts +94 -0
  270. package/lib/types/salesforce/apex.js +6 -0
  271. package/lib/types/salesforce/apex.js.map +1 -0
  272. package/lib/types/salesforce/aura.d.ts +150 -0
  273. package/lib/types/salesforce/aura.js +6 -0
  274. package/lib/types/salesforce/aura.js.map +1 -0
  275. package/lib/types/salesforce/bot.d.ts +293 -0
  276. package/lib/types/salesforce/bot.js +6 -0
  277. package/lib/types/salesforce/bot.js.map +1 -0
  278. package/lib/types/salesforce/common.d.ts +15 -0
  279. package/lib/types/salesforce/common.js +5 -0
  280. package/lib/types/salesforce/common.js.map +1 -0
  281. package/lib/types/salesforce/custom-metadata.d.ts +92 -0
  282. package/lib/types/salesforce/custom-metadata.js +6 -0
  283. package/lib/types/salesforce/custom-metadata.js.map +1 -0
  284. package/lib/types/salesforce/email.d.ts +56 -0
  285. package/lib/types/salesforce/email.js +6 -0
  286. package/lib/types/salesforce/email.js.map +1 -0
  287. package/lib/types/salesforce/flexipage.d.ts +149 -0
  288. package/lib/types/salesforce/flexipage.js +6 -0
  289. package/lib/types/salesforce/flexipage.js.map +1 -0
  290. package/lib/types/salesforce/flow.d.ts +516 -0
  291. package/lib/types/salesforce/flow.js +6 -0
  292. package/lib/types/salesforce/flow.js.map +1 -0
  293. package/lib/types/salesforce/genai.d.ts +67 -0
  294. package/lib/types/salesforce/genai.js +6 -0
  295. package/lib/types/salesforce/genai.js.map +1 -0
  296. package/lib/types/salesforce/index.d.ts +27 -0
  297. package/lib/types/salesforce/index.js +43 -0
  298. package/lib/types/salesforce/index.js.map +1 -0
  299. package/lib/types/salesforce/layout.d.ts +236 -0
  300. package/lib/types/salesforce/layout.js +6 -0
  301. package/lib/types/salesforce/layout.js.map +1 -0
  302. package/lib/types/salesforce/lwc.d.ts +123 -0
  303. package/lib/types/salesforce/lwc.js +6 -0
  304. package/lib/types/salesforce/lwc.js.map +1 -0
  305. package/lib/types/salesforce/object.d.ts +427 -0
  306. package/lib/types/salesforce/object.js +6 -0
  307. package/lib/types/salesforce/object.js.map +1 -0
  308. package/lib/types/salesforce/parser-types.d.ts +79 -0
  309. package/lib/types/salesforce/parser-types.js +80 -0
  310. package/lib/types/salesforce/parser-types.js.map +1 -0
  311. package/lib/types/salesforce/permission.d.ts +289 -0
  312. package/lib/types/salesforce/permission.js +6 -0
  313. package/lib/types/salesforce/permission.js.map +1 -0
  314. package/lib/types/salesforce/resource.d.ts +93 -0
  315. package/lib/types/salesforce/resource.js +6 -0
  316. package/lib/types/salesforce/resource.js.map +1 -0
  317. package/lib/types/salesforce/visualforce.d.ts +70 -0
  318. package/lib/types/salesforce/visualforce.js +6 -0
  319. package/lib/types/salesforce/visualforce.js.map +1 -0
  320. package/lib/utils/cache-manager.d.ts +158 -0
  321. package/lib/utils/cache-manager.js +429 -0
  322. package/lib/utils/cache-manager.js.map +1 -0
  323. package/lib/utils/deployment-plan-manager.d.ts +40 -0
  324. package/lib/utils/deployment-plan-manager.js +183 -0
  325. package/lib/utils/deployment-plan-manager.js.map +1 -0
  326. package/lib/utils/error-aggregator.d.ts +117 -0
  327. package/lib/utils/error-aggregator.js +268 -0
  328. package/lib/utils/error-aggregator.js.map +1 -0
  329. package/lib/utils/file-system.d.ts +62 -0
  330. package/lib/utils/file-system.js +167 -0
  331. package/lib/utils/file-system.js.map +1 -0
  332. package/lib/utils/functional.d.ts +52 -0
  333. package/lib/utils/functional.js +61 -0
  334. package/lib/utils/functional.js.map +1 -0
  335. package/lib/utils/graph-algorithms.d.ts +53 -0
  336. package/lib/utils/graph-algorithms.js +177 -0
  337. package/lib/utils/graph-algorithms.js.map +1 -0
  338. package/lib/utils/logger.d.ts +154 -0
  339. package/lib/utils/logger.js +327 -0
  340. package/lib/utils/logger.js.map +1 -0
  341. package/lib/utils/network-handler.d.ts +64 -0
  342. package/lib/utils/network-handler.js +147 -0
  343. package/lib/utils/network-handler.js.map +1 -0
  344. package/lib/utils/performance.d.ts +148 -0
  345. package/lib/utils/performance.js +294 -0
  346. package/lib/utils/performance.js.map +1 -0
  347. package/lib/utils/string.d.ts +197 -0
  348. package/lib/utils/string.js +331 -0
  349. package/lib/utils/string.js.map +1 -0
  350. package/lib/utils/xml.d.ts +97 -0
  351. package/lib/utils/xml.js +227 -0
  352. package/lib/utils/xml.js.map +1 -0
  353. package/lib/validators/xml-metadata-validator.d.ts +106 -0
  354. package/lib/validators/xml-metadata-validator.js +509 -0
  355. package/lib/validators/xml-metadata-validator.js.map +1 -0
  356. package/lib/waves/priority-wave-generator-ai.d.ts +85 -0
  357. package/lib/waves/priority-wave-generator-ai.js +191 -0
  358. package/lib/waves/priority-wave-generator-ai.js.map +1 -0
  359. package/lib/waves/priority-wave-generator.d.ts +47 -0
  360. package/lib/waves/priority-wave-generator.js +88 -0
  361. package/lib/waves/priority-wave-generator.js.map +1 -0
  362. package/lib/waves/test-optimizer.d.ts +155 -0
  363. package/lib/waves/test-optimizer.js +290 -0
  364. package/lib/waves/test-optimizer.js.map +1 -0
  365. package/lib/waves/wave-builder.d.ts +147 -0
  366. package/lib/waves/wave-builder.js +286 -0
  367. package/lib/waves/wave-builder.js.map +1 -0
  368. package/lib/waves/wave-diff-generator.d.ts +17 -0
  369. package/lib/waves/wave-diff-generator.js +6 -0
  370. package/lib/waves/wave-diff-generator.js.map +1 -0
  371. package/lib/waves/wave-executor.d.ts +33 -0
  372. package/lib/waves/wave-executor.js +50 -0
  373. package/lib/waves/wave-executor.js.map +1 -0
  374. package/lib/waves/wave-merger.d.ts +96 -0
  375. package/lib/waves/wave-merger.js +181 -0
  376. package/lib/waves/wave-merger.js.map +1 -0
  377. package/lib/waves/wave-metadata-generator.d.ts +13 -0
  378. package/lib/waves/wave-metadata-generator.js +12 -0
  379. package/lib/waves/wave-metadata-generator.js.map +1 -0
  380. package/lib/waves/wave-splitter.d.ts +154 -0
  381. package/lib/waves/wave-splitter.js +307 -0
  382. package/lib/waves/wave-splitter.js.map +1 -0
  383. package/lib/waves/wave-validator.d.ts +17 -0
  384. package/lib/waves/wave-validator.js +15 -0
  385. package/lib/waves/wave-validator.js.map +1 -0
  386. package/messages/analyze.json +18 -0
  387. package/messages/config.json +29 -0
  388. package/messages/resume.json +9 -0
  389. package/messages/start.json +24 -0
  390. package/messages/status.json +8 -0
  391. package/messages/validate.json +9 -0
  392. package/npm-shrinkwrap.json +25676 -0
  393. package/oclif.lock +11988 -0
  394. package/oclif.manifest.json +589 -0
  395. package/package.json +224 -0
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Project Structure Validator - US-084
3
+ * Validates SFDX project structure
4
+ *
5
+ * @ac US-084-AC-1: Validate sfdx-project.json schema
6
+ * @ac US-084-AC-2: Validate package directories exist
7
+ * @ac US-084-AC-3: Validate metadata structure
8
+ * @ac US-084-AC-4: Check for required files
9
+ * @ac US-084-AC-5: Generate validation report
10
+ * @ac US-084-AC-6: Suggest fixes for issues
11
+ * @issue #84
12
+ */
13
+ import * as fs from 'node:fs';
14
+ import * as path from 'node:path';
15
+ import { getLogger } from '../utils/logger.js';
16
+ import { SfdxProjectDetector } from './sfdx-project-detector.js';
17
+ const logger = getLogger('ProjectValidator');
18
+ /**
19
+ * @ac US-084-AC-1: Validate sfdx-project.json schema
20
+ */
21
+ export class ProjectValidator {
22
+ /**
23
+ * Validate project structure
24
+ */
25
+ async validate(projectRoot) {
26
+ const startTime = Date.now();
27
+ const report = {
28
+ isValid: true,
29
+ issues: [],
30
+ checkedItems: [],
31
+ executionTime: 0,
32
+ };
33
+ try {
34
+ // Check 1: sfdx-project.json exists
35
+ this.validateSfdxProjectJson(projectRoot, report);
36
+ // Check 2: Package directories exist
37
+ await this.validatePackageDirectories(projectRoot, report);
38
+ // Check 3: Metadata structure
39
+ await this.validateMetadataStructure(projectRoot, report);
40
+ // Check 4: Required files
41
+ this.validateRequiredFiles(projectRoot, report);
42
+ // Determine overall validity
43
+ report.isValid = !report.issues.some((i) => i.severity === 'error');
44
+ report.executionTime = Date.now() - startTime;
45
+ logger.info('Project validation complete', {
46
+ isValid: report.isValid,
47
+ issues: report.issues.length,
48
+ executionTime: report.executionTime,
49
+ });
50
+ return report;
51
+ }
52
+ catch (error) {
53
+ report.isValid = false;
54
+ report.issues.push({
55
+ severity: 'error',
56
+ message: 'Validation failed: ' + (error instanceof Error ? error.message : String(error)),
57
+ });
58
+ report.executionTime = Date.now() - startTime;
59
+ return report;
60
+ }
61
+ }
62
+ /**
63
+ * @ac US-084-AC-1: Validate sfdx-project.json schema
64
+ */
65
+ validateSfdxProjectJson(projectRoot, report) {
66
+ report.checkedItems.push('sfdx-project.json existence');
67
+ const sfdxProjectPath = path.join(projectRoot, 'sfdx-project.json');
68
+ if (!fs.existsSync(sfdxProjectPath)) {
69
+ report.issues.push({
70
+ severity: 'error',
71
+ message: 'sfdx-project.json not found',
72
+ path: sfdxProjectPath,
73
+ suggestion: 'Run: sfdx force:project:create to initialize a new project',
74
+ });
75
+ return;
76
+ }
77
+ // Validate JSON structure
78
+ try {
79
+ const content = fs.readFileSync(sfdxProjectPath, 'utf-8');
80
+ const config = JSON.parse(content);
81
+ report.checkedItems.push('sfdx-project.json valid JSON');
82
+ // Check required fields
83
+ if (!config.packageDirectories) {
84
+ report.issues.push({
85
+ severity: 'error',
86
+ message: 'packageDirectories field missing in sfdx-project.json',
87
+ path: sfdxProjectPath,
88
+ suggestion: 'Add packageDirectories array to sfdx-project.json',
89
+ });
90
+ }
91
+ if (!config.namespace && !config.sfdcLoginUrl) {
92
+ report.issues.push({
93
+ severity: 'warning',
94
+ message: 'Neither namespace nor sfdcLoginUrl defined',
95
+ path: sfdxProjectPath,
96
+ suggestion: 'Consider adding sfdcLoginUrl for proper authentication',
97
+ });
98
+ }
99
+ report.checkedItems.push('sfdx-project.json schema');
100
+ }
101
+ catch {
102
+ report.issues.push({
103
+ severity: 'error',
104
+ message: 'Invalid JSON in sfdx-project.json',
105
+ path: sfdxProjectPath,
106
+ suggestion: 'Fix JSON syntax errors',
107
+ });
108
+ }
109
+ }
110
+ /**
111
+ * @ac US-084-AC-2: Validate package directories exist
112
+ */
113
+ async validatePackageDirectories(projectRoot, report) {
114
+ report.checkedItems.push('package directories');
115
+ const projectInfo = await SfdxProjectDetector.detect(projectRoot);
116
+ for (const packageDir of projectInfo.packageDirectories) {
117
+ const fullPath = path.join(projectRoot, packageDir);
118
+ if (!fs.existsSync(fullPath)) {
119
+ report.issues.push({
120
+ severity: 'error',
121
+ message: `Package directory does not exist: ${packageDir}`,
122
+ path: fullPath,
123
+ suggestion: `Create directory: mkdir -p ${packageDir}`,
124
+ });
125
+ }
126
+ }
127
+ }
128
+ /**
129
+ * @ac US-084-AC-3: Validate metadata structure
130
+ */
131
+ async validateMetadataStructure(projectRoot, report) {
132
+ report.checkedItems.push('metadata structure');
133
+ const projectInfo = await SfdxProjectDetector.detect(projectRoot);
134
+ for (const packageDir of projectInfo.packageDirectories) {
135
+ const packagePath = path.join(projectRoot, packageDir);
136
+ if (!fs.existsSync(packagePath))
137
+ continue;
138
+ // Check for common metadata folders
139
+ const commonFolders = ['classes', 'triggers', 'objects', 'lwc', 'aura'];
140
+ let hasMetadata = false;
141
+ for (const folder of commonFolders) {
142
+ const folderPath = path.join(packagePath, 'main', 'default', folder);
143
+ if (fs.existsSync(folderPath)) {
144
+ hasMetadata = true;
145
+ break;
146
+ }
147
+ }
148
+ if (!hasMetadata) {
149
+ report.issues.push({
150
+ severity: 'info',
151
+ message: `No metadata found in package: ${packageDir}`,
152
+ path: packagePath,
153
+ suggestion: 'This might be intentional for a new project',
154
+ });
155
+ }
156
+ }
157
+ }
158
+ /**
159
+ * @ac US-084-AC-4: Check for required files
160
+ */
161
+ validateRequiredFiles(projectRoot, report) {
162
+ report.checkedItems.push('required files');
163
+ const recommendedFiles = [
164
+ { file: '.gitignore', severity: 'warning', suggestion: 'Add .gitignore to exclude build artifacts' },
165
+ {
166
+ file: '.forceignore',
167
+ severity: 'warning',
168
+ suggestion: 'Add .forceignore to exclude files from deployment',
169
+ },
170
+ { file: 'README.md', severity: 'info', suggestion: 'Add README.md to document your project' },
171
+ ];
172
+ for (const { file, severity, suggestion } of recommendedFiles) {
173
+ const filePath = path.join(projectRoot, file);
174
+ if (!fs.existsSync(filePath)) {
175
+ report.issues.push({
176
+ severity,
177
+ message: `${file} not found`,
178
+ path: filePath,
179
+ suggestion,
180
+ });
181
+ }
182
+ }
183
+ }
184
+ /**
185
+ * @ac US-084-AC-5: Generate validation report
186
+ * @ac US-084-AC-6: Suggest fixes for issues
187
+ * Format validation report
188
+ */
189
+ formatReport(report) {
190
+ const lines = [];
191
+ lines.push('✓ Project Validation Report');
192
+ lines.push('═══════════════════════════════════════');
193
+ lines.push(`Status: ${report.isValid ? '✅ VALID' : '❌ INVALID'}`);
194
+ lines.push(`Checks Performed: ${report.checkedItems.length}`);
195
+ lines.push(`Issues Found: ${report.issues.length}`);
196
+ lines.push(`Execution Time: ${report.executionTime}ms`);
197
+ lines.push('');
198
+ if (report.issues.length > 0) {
199
+ const errors = report.issues.filter((i) => i.severity === 'error');
200
+ const warnings = report.issues.filter((i) => i.severity === 'warning');
201
+ const info = report.issues.filter((i) => i.severity === 'info');
202
+ if (errors.length > 0) {
203
+ lines.push(`❌ Errors (${errors.length}):`);
204
+ for (const issue of errors) {
205
+ lines.push(` ${issue.message}`);
206
+ if (issue.suggestion) {
207
+ lines.push(` 💡 ${issue.suggestion}`);
208
+ }
209
+ }
210
+ lines.push('');
211
+ }
212
+ if (warnings.length > 0) {
213
+ lines.push(`⚠️ Warnings (${warnings.length}):`);
214
+ for (const issue of warnings) {
215
+ lines.push(` ${issue.message}`);
216
+ if (issue.suggestion) {
217
+ lines.push(` 💡 ${issue.suggestion}`);
218
+ }
219
+ }
220
+ lines.push('');
221
+ }
222
+ if (info.length > 0) {
223
+ lines.push(`ℹ️ Info (${info.length}):`);
224
+ for (const issue of info) {
225
+ lines.push(` ${issue.message}`);
226
+ }
227
+ }
228
+ }
229
+ else {
230
+ lines.push('✅ No issues found - project structure is valid!');
231
+ }
232
+ return lines.join('\n');
233
+ }
234
+ }
235
+ //# sourceMappingURL=project-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-validator.js","sourceRoot":"","sources":["../../src/scanner/project-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * SFDX Project Detector - US-079
3
+ * Detects and validates Salesforce DX project structure
4
+ *
5
+ * @ac US-079-AC-1: Detect sfdx-project.json
6
+ * @ac US-079-AC-2: Parse project configuration
7
+ * @ac US-079-AC-3: Validate project structure
8
+ * @ac US-079-AC-4: Detect package directories
9
+ * @ac US-079-AC-5: Support multi-package projects
10
+ * @ac US-079-AC-6: Report project metadata
11
+ * @issue #79
12
+ */
13
+ export type SfdxProjectJson = {
14
+ packageDirectories: PackageDirectory[];
15
+ namespace?: string;
16
+ sourceApiVersion: string;
17
+ sfdcLoginUrl?: string;
18
+ plugins?: Record<string, unknown>;
19
+ [key: string]: unknown;
20
+ };
21
+ export type PackageDirectory = {
22
+ path: string;
23
+ default?: boolean;
24
+ package?: string;
25
+ versionName?: string;
26
+ versionNumber?: string;
27
+ dependencies?: PackageDependency[];
28
+ };
29
+ export type PackageDependency = {
30
+ package: string;
31
+ versionNumber: string;
32
+ };
33
+ export type ProjectDetectionResult = {
34
+ detected: boolean;
35
+ projectRoot: string;
36
+ projectFile: string;
37
+ projectConfig?: SfdxProjectJson;
38
+ packageDirectories: string[];
39
+ defaultPackageDirectory?: string;
40
+ isMultiPackage: boolean;
41
+ apiVersion: string;
42
+ namespace?: string;
43
+ errors: string[];
44
+ warnings: string[];
45
+ };
46
+ /**
47
+ * @ac US-079-AC-1: Detect sfdx-project.json
48
+ * @ac US-079-AC-2: Parse project configuration
49
+ */
50
+ export declare class SfdxProjectDetector {
51
+ private static readonly PROJECT_FILE_NAME;
52
+ private static readonly MAX_SEARCH_DEPTH;
53
+ /**
54
+ * Detect SFDX project starting from a given directory
55
+ * Searches up the directory tree until finding sfdx-project.json
56
+ */
57
+ static detect(startPath: string): Promise<ProjectDetectionResult>;
58
+ /**
59
+ * @ac US-079-AC-1: Detect sfdx-project.json
60
+ * Search up the directory tree for sfdx-project.json
61
+ */
62
+ private static findProjectFile;
63
+ private static findProjectFileRecursive;
64
+ /**
65
+ * @ac US-079-AC-2: Parse project configuration
66
+ */
67
+ private static parseProjectFile;
68
+ /**
69
+ * @ac US-079-AC-3: Validate project structure
70
+ * @ac US-079-AC-4: Detect package directories
71
+ * @ac US-079-AC-5: Support multi-package projects
72
+ */
73
+ private static validateProjectStructure;
74
+ /**
75
+ * @ac US-079-AC-6: Report project metadata
76
+ */
77
+ static formatDetectionReport(result: ProjectDetectionResult): string;
78
+ /**
79
+ * Check if a path is within an SFDX project
80
+ */
81
+ static isInProject(path: string): Promise<boolean>;
82
+ /**
83
+ * Get project root for a given path
84
+ */
85
+ static getProjectRoot(path: string): Promise<string | null>;
86
+ }
@@ -0,0 +1,240 @@
1
+ /**
2
+ * SFDX Project Detector - US-079
3
+ * Detects and validates Salesforce DX project structure
4
+ *
5
+ * @ac US-079-AC-1: Detect sfdx-project.json
6
+ * @ac US-079-AC-2: Parse project configuration
7
+ * @ac US-079-AC-3: Validate project structure
8
+ * @ac US-079-AC-4: Detect package directories
9
+ * @ac US-079-AC-5: Support multi-package projects
10
+ * @ac US-079-AC-6: Report project metadata
11
+ * @issue #79
12
+ */
13
+ import { readFile, access } from 'node:fs/promises';
14
+ import { resolve, dirname, join } from 'node:path';
15
+ import { getLogger } from '../utils/logger.js';
16
+ const logger = getLogger('SfdxProjectDetector');
17
+ /**
18
+ * @ac US-079-AC-1: Detect sfdx-project.json
19
+ * @ac US-079-AC-2: Parse project configuration
20
+ */
21
+ export class SfdxProjectDetector {
22
+ static PROJECT_FILE_NAME = 'sfdx-project.json';
23
+ static MAX_SEARCH_DEPTH = 5;
24
+ /**
25
+ * Detect SFDX project starting from a given directory
26
+ * Searches up the directory tree until finding sfdx-project.json
27
+ */
28
+ static async detect(startPath) {
29
+ logger.info('Detecting SFDX project', { startPath });
30
+ const result = {
31
+ detected: false,
32
+ projectRoot: '',
33
+ projectFile: '',
34
+ packageDirectories: [],
35
+ isMultiPackage: false,
36
+ apiVersion: '',
37
+ errors: [],
38
+ warnings: [],
39
+ };
40
+ try {
41
+ // Search for sfdx-project.json
42
+ const projectFile = await this.findProjectFile(startPath);
43
+ if (!projectFile) {
44
+ result.errors.push('sfdx-project.json not found');
45
+ logger.warn('SFDX project not detected', { startPath });
46
+ return result;
47
+ }
48
+ result.detected = true;
49
+ result.projectFile = projectFile;
50
+ result.projectRoot = dirname(projectFile);
51
+ // Parse and validate project configuration
52
+ const projectConfig = await this.parseProjectFile(projectFile);
53
+ result.projectConfig = projectConfig;
54
+ result.apiVersion = projectConfig.sourceApiVersion;
55
+ result.namespace = projectConfig.namespace;
56
+ // Extract package directories
57
+ const validation = this.validateProjectStructure(projectConfig, result.projectRoot);
58
+ result.packageDirectories = validation.packagePaths;
59
+ result.defaultPackageDirectory = validation.defaultPath;
60
+ result.isMultiPackage = validation.isMultiPackage;
61
+ result.errors.push(...validation.errors);
62
+ result.warnings.push(...validation.warnings);
63
+ logger.info('SFDX project detected', {
64
+ projectRoot: result.projectRoot,
65
+ packages: result.packageDirectories.length,
66
+ apiVersion: result.apiVersion,
67
+ });
68
+ return result;
69
+ }
70
+ catch (error) {
71
+ result.errors.push(`Detection failed: ${error instanceof Error ? error.message : String(error)}`);
72
+ logger.error('Project detection failed', { error, startPath });
73
+ return result;
74
+ }
75
+ }
76
+ /**
77
+ * @ac US-079-AC-1: Detect sfdx-project.json
78
+ * Search up the directory tree for sfdx-project.json
79
+ */
80
+ static async findProjectFile(startPath) {
81
+ return this.findProjectFileRecursive(resolve(startPath), 0);
82
+ }
83
+ static async findProjectFileRecursive(currentPath, depth) {
84
+ if (depth >= this.MAX_SEARCH_DEPTH) {
85
+ return null;
86
+ }
87
+ const projectFilePath = join(currentPath, this.PROJECT_FILE_NAME);
88
+ try {
89
+ await access(projectFilePath);
90
+ logger.debug('Found sfdx-project.json', { path: projectFilePath });
91
+ return projectFilePath;
92
+ }
93
+ catch {
94
+ const parentPath = dirname(currentPath);
95
+ if (parentPath === currentPath) {
96
+ return null;
97
+ }
98
+ return this.findProjectFileRecursive(parentPath, depth + 1);
99
+ }
100
+ }
101
+ /**
102
+ * @ac US-079-AC-2: Parse project configuration
103
+ */
104
+ static async parseProjectFile(filePath) {
105
+ logger.debug('Parsing sfdx-project.json', { filePath });
106
+ try {
107
+ const content = await readFile(filePath, 'utf-8');
108
+ const config = JSON.parse(content);
109
+ // Validate required fields
110
+ if (!config.packageDirectories || !Array.isArray(config.packageDirectories)) {
111
+ throw new Error('Missing or invalid packageDirectories');
112
+ }
113
+ if (!config.sourceApiVersion) {
114
+ throw new Error('Missing sourceApiVersion');
115
+ }
116
+ return config;
117
+ }
118
+ catch (error) {
119
+ throw new Error(`Failed to parse sfdx-project.json: ${error instanceof Error ? error.message : String(error)}`);
120
+ }
121
+ }
122
+ /**
123
+ * @ac US-079-AC-3: Validate project structure
124
+ * @ac US-079-AC-4: Detect package directories
125
+ * @ac US-079-AC-5: Support multi-package projects
126
+ */
127
+ static validateProjectStructure(config, projectRoot) {
128
+ const errors = [];
129
+ const warnings = [];
130
+ const packagePaths = [];
131
+ let defaultPath;
132
+ // Validate package directories
133
+ if (config.packageDirectories.length === 0) {
134
+ errors.push('No package directories defined');
135
+ }
136
+ let defaultCount = 0;
137
+ for (const pkgDir of config.packageDirectories) {
138
+ if (!pkgDir.path) {
139
+ errors.push('Package directory missing path');
140
+ continue;
141
+ }
142
+ const fullPath = resolve(projectRoot, pkgDir.path);
143
+ packagePaths.push(fullPath);
144
+ if (pkgDir.default) {
145
+ defaultCount++;
146
+ defaultPath = fullPath;
147
+ }
148
+ }
149
+ // Validate default package
150
+ if (defaultCount === 0) {
151
+ warnings.push('No default package directory specified');
152
+ // Use first package as default
153
+ if (packagePaths.length > 0) {
154
+ defaultPath = packagePaths[0];
155
+ }
156
+ }
157
+ else if (defaultCount > 1) {
158
+ errors.push('Multiple default package directories found');
159
+ }
160
+ // Check if multi-package
161
+ const isMultiPackage = config.packageDirectories.length > 1;
162
+ if (isMultiPackage) {
163
+ logger.info('Multi-package project detected', {
164
+ packages: config.packageDirectories.length,
165
+ });
166
+ }
167
+ return {
168
+ packagePaths,
169
+ defaultPath,
170
+ isMultiPackage,
171
+ errors,
172
+ warnings,
173
+ };
174
+ }
175
+ /**
176
+ * @ac US-079-AC-6: Report project metadata
177
+ */
178
+ static formatDetectionReport(result) {
179
+ const lines = [];
180
+ lines.push('📦 SFDX Project Detection Report');
181
+ lines.push('═══════════════════════════════════════');
182
+ if (!result.detected) {
183
+ lines.push('❌ No SFDX project detected');
184
+ if (result.errors.length > 0) {
185
+ lines.push('\nErrors:');
186
+ for (const error of result.errors) {
187
+ lines.push(` • ${error}`);
188
+ }
189
+ }
190
+ return lines.join('\n');
191
+ }
192
+ lines.push('✅ Project detected');
193
+ lines.push(` Root: ${result.projectRoot}`);
194
+ lines.push(` Config: ${result.projectFile}`);
195
+ lines.push('');
196
+ lines.push('📋 Configuration:');
197
+ lines.push(` API Version: ${result.apiVersion}`);
198
+ if (result.namespace) {
199
+ lines.push(` Namespace: ${result.namespace}`);
200
+ }
201
+ lines.push(` Multi-Package: ${result.isMultiPackage ? 'Yes' : 'No'}`);
202
+ lines.push('');
203
+ lines.push(`📂 Package Directories (${result.packageDirectories.length}):`);
204
+ for (let i = 0; i < result.packageDirectories.length; i++) {
205
+ const pkgPath = result.packageDirectories[i];
206
+ const isDefault = pkgPath === result.defaultPackageDirectory;
207
+ lines.push(` ${i + 1}. ${pkgPath}${isDefault ? ' (default)' : ''}`);
208
+ }
209
+ if (result.warnings.length > 0) {
210
+ lines.push('');
211
+ lines.push('⚠️ Warnings:');
212
+ for (const warning of result.warnings) {
213
+ lines.push(` • ${warning}`);
214
+ }
215
+ }
216
+ if (result.errors.length > 0) {
217
+ lines.push('');
218
+ lines.push('❌ Errors:');
219
+ for (const error of result.errors) {
220
+ lines.push(` • ${error}`);
221
+ }
222
+ }
223
+ return lines.join('\n');
224
+ }
225
+ /**
226
+ * Check if a path is within an SFDX project
227
+ */
228
+ static async isInProject(path) {
229
+ const result = await this.detect(path);
230
+ return result.detected;
231
+ }
232
+ /**
233
+ * Get project root for a given path
234
+ */
235
+ static async getProjectRoot(path) {
236
+ const result = await this.detect(path);
237
+ return result.detected ? result.projectRoot : null;
238
+ }
239
+ }
240
+ //# sourceMappingURL=sfdx-project-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sfdx-project-detector.js","sourceRoot":"","sources":["../../src/scanner/sfdx-project-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Project Structure Validator - US-084
3
+ * Validates project structure and configuration
4
+ *
5
+ * @ac US-084-AC-1: Validate sfdx-project.json
6
+ * @ac US-084-AC-2: Check package directories exist
7
+ * @ac US-084-AC-3: Validate .forceignore
8
+ * @ac US-084-AC-4: Check for required files
9
+ * @ac US-084-AC-5: Detect structure issues
10
+ * @ac US-084-AC-6: Generate validation report
11
+ * @issue #84
12
+ */
13
+ export type ValidationIssue = {
14
+ severity: 'error' | 'warning' | 'info';
15
+ code: string;
16
+ message: string;
17
+ path?: string;
18
+ suggestion?: string;
19
+ };
20
+ export type ValidationReport = {
21
+ isValid: boolean;
22
+ issues: ValidationIssue[];
23
+ checkedPaths: string[];
24
+ executionTime: number;
25
+ };
26
+ /**
27
+ * @ac US-084-AC-1: Validate sfdx-project.json
28
+ */
29
+ export declare class StructureValidator {
30
+ /**
31
+ * @ac US-084-AC-1: Validate sfdx-project.json
32
+ * Check sfdx-project.json structure and content
33
+ */
34
+ validateSfdxProject(projectRoot: string): Promise<ValidationIssue[]>;
35
+ /**
36
+ * @ac US-084-AC-2: Check package directories exist
37
+ * Validate package directories exist on filesystem
38
+ */
39
+ validatePackageDirectories(projectRoot: string): Promise<ValidationIssue[]>;
40
+ /**
41
+ * @ac US-084-AC-3: Validate .forceignore
42
+ * Check .forceignore file
43
+ */
44
+ validateForceIgnore(projectRoot: string): Promise<ValidationIssue[]>;
45
+ /**
46
+ * @ac US-084-AC-4: Check for required files
47
+ * Check for other important files
48
+ */
49
+ validateRequiredFiles(projectRoot: string): Promise<ValidationIssue[]>;
50
+ /**
51
+ * @ac US-084-AC-5: Detect structure issues
52
+ * Check for common structure problems
53
+ */
54
+ detectStructureIssues(projectRoot: string): Promise<ValidationIssue[]>;
55
+ /**
56
+ * @ac US-084-AC-6: Generate validation report
57
+ * Validate entire project structure
58
+ */
59
+ validate(projectRoot: string): Promise<ValidationReport>;
60
+ /**
61
+ * Format validation report
62
+ */
63
+ formatReport(report: ValidationReport): string;
64
+ }