ts-openapi-codegen 2.1.0-beta.6 → 2.1.0-beta.8

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 (353) hide show
  1. package/README.md +3 -0
  2. package/README.rus.md +3 -0
  3. package/dist/cli/analyzeDiff/__tests__/analyzeDiff.cli.test.js +9 -0
  4. package/dist/cli/analyzeDiff/__tests__/analyzeDiffRenameAndInvalidRegex.test.js +9 -0
  5. package/dist/cli/analyzeDiff/__tests__/analyzeDiffTypeCoercion.test.js +9 -0
  6. package/dist/cli/analyzeDiff/ignoreRules.d.ts +0 -6
  7. package/dist/cli/analyzeDiff/ignoreRules.d.ts.map +1 -1
  8. package/dist/cli/analyzeDiff/ignoreRules.js +2 -3
  9. package/dist/cli/analyzeUsage/analyzeUsage.d.ts +4 -0
  10. package/dist/cli/analyzeUsage/analyzeUsage.d.ts.map +1 -0
  11. package/dist/cli/analyzeUsage/analyzeUsage.js +60 -0
  12. package/dist/cli/analyzeUsage/core/Analyzer.d.ts +9 -0
  13. package/dist/cli/analyzeUsage/core/Analyzer.d.ts.map +1 -0
  14. package/dist/cli/analyzeUsage/core/Analyzer.js +29 -0
  15. package/dist/cli/analyzeUsage/core/ProjectContext.d.ts +10 -0
  16. package/dist/cli/analyzeUsage/core/ProjectContext.d.ts.map +1 -0
  17. package/dist/cli/analyzeUsage/core/ProjectContext.js +58 -0
  18. package/dist/cli/analyzeUsage/core/Scanner.d.ts +15 -0
  19. package/dist/cli/analyzeUsage/core/Scanner.d.ts.map +1 -0
  20. package/dist/cli/analyzeUsage/core/Scanner.js +115 -0
  21. package/dist/cli/analyzeUsage/rules/ClientRule.d.ts +6 -0
  22. package/dist/cli/analyzeUsage/rules/ClientRule.d.ts.map +1 -0
  23. package/dist/cli/analyzeUsage/rules/ClientRule.js +76 -0
  24. package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts +7 -0
  25. package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts.map +1 -0
  26. package/dist/cli/analyzeUsage/rules/CoverageRule.js +55 -0
  27. package/dist/cli/analyzeUsage/rules/DiagnosticsRule.d.ts +6 -0
  28. package/dist/cli/analyzeUsage/rules/DiagnosticsRule.d.ts.map +1 -0
  29. package/dist/cli/analyzeUsage/rules/DiagnosticsRule.js +63 -0
  30. package/dist/cli/analyzeUsage/rules/ImportRule.d.ts +6 -0
  31. package/dist/cli/analyzeUsage/rules/ImportRule.d.ts.map +1 -0
  32. package/dist/cli/analyzeUsage/rules/ImportRule.js +50 -0
  33. package/dist/cli/analyzeUsage/rules/ModelRule.d.ts +6 -0
  34. package/dist/cli/analyzeUsage/rules/ModelRule.d.ts.map +1 -0
  35. package/dist/cli/analyzeUsage/rules/ModelRule.js +34 -0
  36. package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts +6 -0
  37. package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts.map +1 -0
  38. package/dist/cli/analyzeUsage/rules/SchemaRule.js +46 -0
  39. package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts +7 -0
  40. package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts.map +1 -0
  41. package/dist/cli/analyzeUsage/rules/ServiceRule.js +86 -0
  42. package/dist/cli/analyzeUsage/types.d.ts +52 -0
  43. package/dist/cli/analyzeUsage/types.d.ts.map +1 -0
  44. package/dist/cli/analyzeUsage/types.js +2 -0
  45. package/dist/cli/analyzeUsage/utils/fuzzy.d.ts +5 -0
  46. package/dist/cli/analyzeUsage/utils/fuzzy.d.ts.map +1 -0
  47. package/dist/cli/analyzeUsage/utils/fuzzy.js +38 -0
  48. package/dist/cli/analyzeUsage/utils/report.d.ts +16 -0
  49. package/dist/cli/analyzeUsage/utils/report.d.ts.map +1 -0
  50. package/dist/cli/analyzeUsage/utils/report.js +85 -0
  51. package/dist/cli/checkAndUpdateConfig/__tests__/checkConfig.test.js +10 -20
  52. package/dist/cli/checkAndUpdateConfig/__tests__/updateConfig.test.js +10 -20
  53. package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts +2 -1
  54. package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts.map +1 -1
  55. package/dist/cli/checkAndUpdateConfig/checkConfig.js +8 -4
  56. package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts +2 -1
  57. package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts.map +1 -1
  58. package/dist/cli/checkAndUpdateConfig/updateConfig.js +6 -3
  59. package/dist/cli/checkAndUpdateConfig/utils/removeDefaultConfigValues.d.ts.map +1 -1
  60. package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.d.ts.map +1 -1
  61. package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.js +19 -1
  62. package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.d.ts +1 -1
  63. package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.d.ts.map +1 -1
  64. package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.js +1 -1
  65. package/dist/cli/generateOpenApiClient/__tests__/generateOpenApiClient.strict.test.js +18 -9
  66. package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts +2 -5
  67. package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts.map +1 -1
  68. package/dist/cli/generateOpenApiClient/generateOpenApiClient.js +21 -17
  69. package/dist/cli/index.js +44 -11
  70. package/dist/cli/initOpenApiConfig/__tests__/init.test.js +4 -14
  71. package/dist/cli/initOpenApiConfig/__tests__/initConfig.test.js +3 -1
  72. package/dist/cli/initOpenApiConfig/init.d.ts +2 -1
  73. package/dist/cli/initOpenApiConfig/init.d.ts.map +1 -1
  74. package/dist/cli/initOpenApiConfig/init.js +3 -3
  75. package/dist/cli/initOpenApiConfig/initCustomRequest.d.ts +0 -1
  76. package/dist/cli/initOpenApiConfig/initCustomRequest.d.ts.map +1 -1
  77. package/dist/cli/initOpenApiConfig/initCustomRequest.js +1 -2
  78. package/dist/cli/initOpenApiConfig/utils/__tests__/buildConfig.test.js +2 -8
  79. package/dist/cli/initOpenApiConfig/utils/__tests__/validateSpecFiles.test.js +9 -0
  80. package/dist/cli/initOpenApiConfig/utils/buildConfig.d.ts.map +1 -1
  81. package/dist/cli/initOpenApiConfig/utils/buildConfig.js +0 -4
  82. package/dist/cli/initOpenApiConfig/utils/registerHandlebarTemplates.d.ts.map +1 -1
  83. package/dist/cli/interactive/constants.d.ts +0 -4
  84. package/dist/cli/interactive/constants.d.ts.map +1 -1
  85. package/dist/cli/interactive/constants.js +1 -5
  86. package/dist/cli/previewChanges/previewChanges.d.ts +2 -1
  87. package/dist/cli/previewChanges/previewChanges.d.ts.map +1 -1
  88. package/dist/cli/previewChanges/previewChanges.js +6 -6
  89. package/dist/cli/previewChanges/utils/formatDiff.d.ts.map +1 -1
  90. package/dist/cli/previewChanges/utils/updateOutputPaths.d.ts.map +1 -1
  91. package/dist/cli/previewChanges/utils/updateOutputPaths.js +5 -12
  92. package/dist/cli/schemas/analyzeUsage.d.ts +13 -0
  93. package/dist/cli/schemas/analyzeUsage.d.ts.map +1 -0
  94. package/dist/cli/schemas/analyzeUsage.js +41 -0
  95. package/dist/cli/schemas/generate.d.ts +10 -2
  96. package/dist/cli/schemas/generate.d.ts.map +1 -1
  97. package/dist/cli/schemas/generate.js +7 -2
  98. package/dist/cli/schemas/index.d.ts +2 -2
  99. package/dist/cli/schemas/index.d.ts.map +1 -1
  100. package/dist/cli/schemas/index.js +1 -1
  101. package/dist/cli/schemas/init.d.ts +0 -1
  102. package/dist/cli/schemas/init.d.ts.map +1 -1
  103. package/dist/cli/schemas/init.js +0 -1
  104. package/dist/cli/types.d.ts +6 -0
  105. package/dist/cli/types.d.ts.map +1 -0
  106. package/dist/cli/types.js +2 -0
  107. package/dist/common/Consts.d.ts +1 -0
  108. package/dist/common/Consts.d.ts.map +1 -1
  109. package/dist/common/Consts.js +7 -4
  110. package/dist/common/Logger.d.ts.map +1 -1
  111. package/dist/common/Logger.js +3 -3
  112. package/dist/common/LoggerMessages.d.ts +66 -12
  113. package/dist/common/LoggerMessages.d.ts.map +1 -1
  114. package/dist/common/LoggerMessages.js +72 -18
  115. package/dist/common/TEslintFixOptions.d.ts +20 -0
  116. package/dist/common/TEslintFixOptions.d.ts.map +1 -0
  117. package/dist/common/TEslintFixOptions.js +15 -0
  118. package/dist/common/TRawOptions.d.ts.map +1 -1
  119. package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.d.ts.map +1 -1
  120. package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.js +2 -4
  121. package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.d.ts.map +1 -1
  122. package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.js +1 -1
  123. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.d.ts +0 -1
  124. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.d.ts.map +1 -1
  125. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.js +1 -2
  126. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.d.ts +0 -2
  127. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.d.ts.map +1 -1
  128. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.js +1 -1
  129. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts +0 -2
  130. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts.map +1 -1
  131. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.js +1 -1
  132. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV3.d.ts +0 -2
  133. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV3.d.ts.map +1 -1
  134. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.d.ts +0 -2
  135. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.d.ts.map +1 -1
  136. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts +10 -4
  137. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts.map +1 -1
  138. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.js +15 -5
  139. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts +18 -15
  140. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts.map +1 -1
  141. package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.js +7 -1
  142. package/dist/common/VersionedSchema/CommonSchemas.d.ts +0 -2
  143. package/dist/common/VersionedSchema/CommonSchemas.d.ts.map +1 -1
  144. package/dist/common/VersionedSchema/CommonSchemas.js +4 -3
  145. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsMigrationPlan.d.ts.map +1 -1
  146. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsMigrationPlan.js +0 -1
  147. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV2.js +1 -1
  148. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.d.ts +0 -1
  149. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.d.ts.map +1 -1
  150. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.js +1 -1
  151. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.d.ts +0 -1
  152. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.d.ts.map +1 -1
  153. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.js +1 -1
  154. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV5.d.ts +0 -1
  155. package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV5.d.ts.map +1 -1
  156. package/dist/common/VersionedSchema/OptionsVersioned/OptionsMigrationPlans.d.ts.map +1 -1
  157. package/dist/common/VersionedSchema/OptionsVersioned/OptionsMigrationPlans.js +0 -1
  158. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV1.d.ts +2 -2
  159. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV1.d.ts.map +1 -1
  160. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV2.d.ts +2 -2
  161. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.d.ts +0 -1
  162. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.d.ts.map +1 -1
  163. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.js +1 -1
  164. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV4.d.ts +1 -2
  165. package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV4.d.ts.map +1 -1
  166. package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.js +9 -9
  167. package/dist/common/VersionedSchema/Utils/__tests__/allUtils.test.js +4 -16
  168. package/dist/common/VersionedSchema/Utils/buildVersionedSchema.d.ts.map +1 -1
  169. package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.d.ts +1 -1
  170. package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.d.ts.map +1 -1
  171. package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.js +1 -1
  172. package/dist/common/VersionedSchema/Utils/createTrivialMigration.d.ts.map +1 -1
  173. package/dist/common/VersionedSchema/Utils/createTrivialMigration.js +1 -1
  174. package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.d.ts.map +1 -1
  175. package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.js +1 -3
  176. package/dist/common/VersionedSchema/Utils/getLatestVersionFromMigrationPlans.d.ts.map +1 -1
  177. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.d.ts.map +1 -1
  178. package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.js +2 -4
  179. package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.d.ts.map +1 -1
  180. package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.js +1 -1
  181. package/dist/common/VersionedSchema/Utils/validateAndSuggestKeyCorrections.d.ts.map +1 -1
  182. package/dist/common/VersionedSchema/refinements/dependentOptionsRefinement.d.ts +1 -1
  183. package/dist/common/VersionedSchema/refinements/dependentOptionsRefinement.d.ts.map +1 -1
  184. package/dist/common/utils/__tests__/convertArrayToObject.test.js +0 -3
  185. package/dist/common/utils/__tests__/eslintFix.test.js +25 -67
  186. package/dist/common/utils/__tests__/extractEslintFixOptions.test.d.ts +2 -0
  187. package/dist/common/utils/__tests__/extractEslintFixOptions.test.d.ts.map +1 -0
  188. package/dist/common/utils/__tests__/extractEslintFixOptions.test.js +28 -0
  189. package/dist/common/utils/__tests__/format.test.js +26 -17
  190. package/dist/common/utils/__tests__/prepareTempTsConfig.test.d.ts +2 -0
  191. package/dist/common/utils/__tests__/prepareTempTsConfig.test.d.ts.map +1 -0
  192. package/dist/common/utils/__tests__/prepareTempTsConfig.test.js +78 -0
  193. package/dist/common/utils/codegenTempDir.d.ts +20 -0
  194. package/dist/common/utils/codegenTempDir.d.ts.map +1 -0
  195. package/dist/common/utils/codegenTempDir.js +42 -0
  196. package/dist/common/utils/convertArrayToObject.d.ts.map +1 -1
  197. package/dist/common/utils/convertArrayToObject.js +3 -10
  198. package/dist/common/utils/eslintFix.d.ts +48 -4
  199. package/dist/common/utils/eslintFix.d.ts.map +1 -1
  200. package/dist/common/utils/eslintFix.js +121 -15
  201. package/dist/common/utils/format.d.ts +1 -1
  202. package/dist/common/utils/format.d.ts.map +1 -1
  203. package/dist/common/utils/format.js +23 -11
  204. package/dist/common/utils/jsonPath.d.ts.map +1 -1
  205. package/dist/common/utils/prepareTempEslintConfig.d.ts +18 -0
  206. package/dist/common/utils/prepareTempEslintConfig.d.ts.map +1 -0
  207. package/dist/common/utils/prepareTempEslintConfig.js +55 -0
  208. package/dist/common/utils/prepareTempTsConfig.d.ts +23 -0
  209. package/dist/common/utils/prepareTempTsConfig.d.ts.map +1 -0
  210. package/dist/common/utils/prepareTempTsConfig.js +105 -0
  211. package/dist/core/Context.d.ts.map +1 -1
  212. package/dist/core/Context.js +2 -6
  213. package/dist/core/OpenApiClient.d.ts +19 -1
  214. package/dist/core/OpenApiClient.d.ts.map +1 -1
  215. package/dist/core/OpenApiClient.js +243 -22
  216. package/dist/core/WriteClient.d.ts +33 -5
  217. package/dist/core/WriteClient.d.ts.map +1 -1
  218. package/dist/core/WriteClient.js +60 -18
  219. package/dist/core/__tests__/WriteClient.test.js +1 -1
  220. package/dist/core/api/v2/parser/getOperationResponses.d.ts.map +1 -1
  221. package/dist/core/api/v2/parser/getOperationResponses.js +1 -3
  222. package/dist/core/api/v2/parser/getServiceName.d.ts +1 -1
  223. package/dist/core/api/v3/parser/getOperation.d.ts.map +1 -1
  224. package/dist/core/api/v3/parser/getOperationParameters.d.ts.map +1 -1
  225. package/dist/core/api/v3/parser/getOperationResponses.d.ts.map +1 -1
  226. package/dist/core/api/v3/parser/getOperationResponses.js +1 -3
  227. package/dist/core/api/v3/parser/getServiceName.d.ts +1 -1
  228. package/dist/core/governance/evaluateGovernanceRules.d.ts.map +1 -1
  229. package/dist/core/governance/evaluateGovernanceRules.js +1 -3
  230. package/dist/core/governance/loadGovernanceConfig.d.ts.map +1 -1
  231. package/dist/core/governance/loadGovernanceConfig.js +2 -4
  232. package/dist/core/plugins/GeneratorPlugin.model.d.ts.map +1 -1
  233. package/dist/core/plugins/applySemanticDiffPluginHooks.d.ts.map +1 -1
  234. package/dist/core/plugins/getBuiltinPlugins.d.ts.map +1 -1
  235. package/dist/core/plugins/loadGeneratorPlugins.d.ts.map +1 -1
  236. package/dist/core/plugins/loadGeneratorPlugins.js +1 -1
  237. package/dist/core/semanticDiff/__tests__/analyzeOpenApiDiff.test.js +7 -21
  238. package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts.map +1 -1
  239. package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts +0 -2
  240. package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts.map +1 -1
  241. package/dist/core/semanticDiff/semanticDiffReportSchema.js +3 -9
  242. package/dist/core/strict/validateOpenApiStrict.d.ts.map +1 -1
  243. package/dist/core/types/Consts.js +1 -1
  244. package/dist/core/types/base/ClientArtifacts.model.d.ts +3 -3
  245. package/dist/core/types/base/ClientArtifacts.model.d.ts.map +1 -1
  246. package/dist/core/types/base/ExportedModel.model.d.ts +1 -1
  247. package/dist/core/types/base/ExportedModel.model.d.ts.map +1 -1
  248. package/dist/core/types/base/ExportedService.model.d.ts.map +1 -1
  249. package/dist/core/types/base/OutputPaths.model.d.ts.map +1 -1
  250. package/dist/core/types/base/PrefixArtifacts.model.d.ts.map +1 -1
  251. package/dist/core/types/base/PropertyGroup.model.d.ts +1 -1
  252. package/dist/core/types/base/SimpleClientArtifacts.model.d.ts +1 -1
  253. package/dist/core/types/base/SimpleClientArtifacts.model.d.ts.map +1 -1
  254. package/dist/core/types/shared/Client.model.d.ts +1 -1
  255. package/dist/core/types/shared/Client.model.d.ts.map +1 -1
  256. package/dist/core/types/shared/Model.model.d.ts +1 -1
  257. package/dist/core/types/shared/Model.model.d.ts.map +1 -1
  258. package/dist/core/utils/__tests__/postProcessModelImports.test.js +1 -4
  259. package/dist/core/utils/__tests__/postProcessServiceImports.test.js +1 -4
  260. package/dist/core/utils/__tests__/prepareDtoModels.test.js +95 -0
  261. package/dist/core/utils/__tests__/registerHandlebarHelpers.test.js +27 -0
  262. package/dist/core/utils/__tests__/sortByRequiredExtended.test.js +10 -27
  263. package/dist/core/utils/__tests__/writeClientServices.test.js +0 -1
  264. package/dist/core/utils/appendUniqueLinesToFile.js +1 -1
  265. package/dist/core/utils/applyDiffReportToClient.d.ts.map +1 -1
  266. package/dist/core/utils/applyDiffReportToClient.js +2 -2
  267. package/dist/core/utils/areEqual.d.ts +1 -1
  268. package/dist/core/utils/getOperationErrors.d.ts +2 -2
  269. package/dist/core/utils/getOperationErrors.d.ts.map +1 -1
  270. package/dist/core/utils/getOperationResults.d.ts +1 -1
  271. package/dist/core/utils/getPropertyGroupSimple.d.ts.map +1 -1
  272. package/dist/core/utils/getPropertyGroupSimple.js +1 -3
  273. package/dist/core/utils/isSubdirectory.d.ts.map +1 -1
  274. package/dist/core/utils/loadDiffReport.d.ts.map +1 -1
  275. package/dist/core/utils/loadDiffReport.js +5 -4
  276. package/dist/core/utils/modelHelpers.d.ts.map +1 -1
  277. package/dist/core/utils/normalizeString.d.ts.map +1 -1
  278. package/dist/core/utils/normalizeString.js +1 -5
  279. package/dist/core/utils/postProcessServiceImports.d.ts.map +1 -1
  280. package/dist/core/utils/postProcessServiceImports.js +1 -3
  281. package/dist/core/utils/precompileTemplates.js +4 -2
  282. package/dist/core/utils/prepareAlias.d.ts +1 -1
  283. package/dist/core/utils/prepareDtoModels.d.ts.map +1 -1
  284. package/dist/core/utils/prepareDtoModels.js +2 -8
  285. package/dist/core/utils/registerHandlebarHelpers.d.ts +1 -0
  286. package/dist/core/utils/registerHandlebarHelpers.d.ts.map +1 -1
  287. package/dist/core/utils/registerHandlebarHelpers.js +3 -0
  288. package/dist/core/utils/registerHandlebarTemplates.d.ts +1 -0
  289. package/dist/core/utils/registerHandlebarTemplates.d.ts.map +1 -1
  290. package/dist/core/utils/sortModelByName.d.ts +1 -1
  291. package/dist/core/utils/writeClientCore.d.ts +0 -2
  292. package/dist/core/utils/writeClientCore.d.ts.map +1 -1
  293. package/dist/core/utils/writeClientCore.js +19 -18
  294. package/dist/core/utils/writeClientCoreIndex.d.ts.map +1 -1
  295. package/dist/core/utils/writeClientCoreIndex.js +14 -4
  296. package/dist/core/utils/writeClientExecutor.d.ts +1 -2
  297. package/dist/core/utils/writeClientExecutor.d.ts.map +1 -1
  298. package/dist/core/utils/writeClientExecutor.js +6 -10
  299. package/dist/core/utils/writeClientFullIndex.js +4 -4
  300. package/dist/core/utils/writeClientModels.d.ts +1 -2
  301. package/dist/core/utils/writeClientModels.d.ts.map +1 -1
  302. package/dist/core/utils/writeClientModels.js +14 -16
  303. package/dist/core/utils/writeClientModelsIndex.d.ts +1 -1
  304. package/dist/core/utils/writeClientModelsIndex.d.ts.map +1 -1
  305. package/dist/core/utils/writeClientModelsIndex.js +14 -4
  306. package/dist/core/utils/writeClientSchemas.d.ts +1 -3
  307. package/dist/core/utils/writeClientSchemas.d.ts.map +1 -1
  308. package/dist/core/utils/writeClientSchemas.js +9 -14
  309. package/dist/core/utils/writeClientSchemasIndex.d.ts.map +1 -1
  310. package/dist/core/utils/writeClientSchemasIndex.js +14 -4
  311. package/dist/core/utils/writeClientServices.d.ts +1 -4
  312. package/dist/core/utils/writeClientServices.d.ts.map +1 -1
  313. package/dist/core/utils/writeClientServices.js +9 -13
  314. package/dist/core/utils/writeClientServicesIndex.d.ts.map +1 -1
  315. package/dist/core/utils/writeClientServicesIndex.js +14 -4
  316. package/dist/core/utils/writeClientSimpleIndex.js +4 -4
  317. package/dist/templatesCompiled/cli/customRequest.d.ts +2 -6
  318. package/dist/templatesCompiled/cli/customRequest.d.ts.map +1 -1
  319. package/dist/templatesCompiled/cli/customRequest.js +8 -28
  320. package/dist/templatesCompiled/cli/customRequestExecutor.d.ts +0 -3
  321. package/dist/templatesCompiled/cli/customRequestExecutor.d.ts.map +1 -1
  322. package/dist/templatesCompiled/cli/customRequestExecutor.js +5 -28
  323. package/dist/templatesCompiled/client/core/axios/request.d.ts +2 -6
  324. package/dist/templatesCompiled/client/core/axios/request.d.ts.map +1 -1
  325. package/dist/templatesCompiled/client/core/axios/request.js +2 -22
  326. package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.d.ts +2 -5
  327. package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.d.ts.map +1 -1
  328. package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.js +12 -42
  329. package/dist/templatesCompiled/client/core/executor/requestExecutor.d.ts +0 -2
  330. package/dist/templatesCompiled/client/core/executor/requestExecutor.d.ts.map +1 -1
  331. package/dist/templatesCompiled/client/core/executor/requestExecutor.js +3 -11
  332. package/dist/templatesCompiled/client/core/fetch/request.d.ts +2 -6
  333. package/dist/templatesCompiled/client/core/fetch/request.d.ts.map +1 -1
  334. package/dist/templatesCompiled/client/core/fetch/request.js +2 -22
  335. package/dist/templatesCompiled/client/core/interceptors/withInterceptors.d.ts +0 -2
  336. package/dist/templatesCompiled/client/core/interceptors/withInterceptors.d.ts.map +1 -1
  337. package/dist/templatesCompiled/client/core/interceptors/withInterceptors.js +3 -11
  338. package/dist/templatesCompiled/client/core/node/request.d.ts +2 -6
  339. package/dist/templatesCompiled/client/core/node/request.d.ts.map +1 -1
  340. package/dist/templatesCompiled/client/core/node/request.js +2 -22
  341. package/dist/templatesCompiled/client/core/xhr/request.d.ts +2 -6
  342. package/dist/templatesCompiled/client/core/xhr/request.d.ts.map +1 -1
  343. package/dist/templatesCompiled/client/core/xhr/request.js +2 -22
  344. package/dist/templatesCompiled/client/exportService.d.ts +9 -11
  345. package/dist/templatesCompiled/client/exportService.d.ts.map +1 -1
  346. package/dist/templatesCompiled/client/exportService.js +64 -82
  347. package/dist/templatesCompiled/client/partials/header.d.ts +1 -0
  348. package/dist/templatesCompiled/client/partials/header.d.ts.map +1 -1
  349. package/dist/templatesCompiled/client/partials/header.js +11 -2
  350. package/dist/test/helpers/silenceLoggers.d.ts +11 -0
  351. package/dist/test/helpers/silenceLoggers.d.ts.map +1 -0
  352. package/dist/test/helpers/silenceLoggers.js +88 -0
  353. package/package.json +132 -135
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OpenApiClient = void 0;
4
+ const fs_1 = require("fs");
4
5
  const Consts_1 = require("../common/Consts");
5
6
  const Logger_1 = require("../common/Logger");
6
7
  const LoggerMessages_1 = require("../common/LoggerMessages");
8
+ const TEslintFixOptions_1 = require("../common/TEslintFixOptions");
9
+ const eslintFix_1 = require("../common/utils/eslintFix");
7
10
  const fileSystemHelpers_1 = require("../common/utils/fileSystemHelpers");
8
11
  const pathHelpers_1 = require("../common/utils/pathHelpers");
9
12
  const Parser_1 = require("./api/v2/Parser");
@@ -16,6 +19,7 @@ const EmptySchemaStrategy_enum_1 = require("./types/enums/EmptySchemaStrategy.en
16
19
  const ModelsMode_enum_1 = require("./types/enums/ModelsMode.enum");
17
20
  const ValidationLibrary_enum_1 = require("./types/enums/ValidationLibrary.enum");
18
21
  const applyDiffReportToClient_1 = require("./utils/applyDiffReportToClient");
22
+ const GenerationCache_1 = require("./utils/GenerationCache");
19
23
  const getOpenApiSpec_1 = require("./utils/getOpenApiSpec");
20
24
  const getOpenApiVersion_1 = require("./utils/getOpenApiVersion");
21
25
  const getOutputPaths_1 = require("./utils/getOutputPaths");
@@ -25,7 +29,11 @@ const prepareDtoModels_1 = require("./utils/prepareDtoModels");
25
29
  const registerHandlebarTemplates_1 = require("./utils/registerHandlebarTemplates");
26
30
  const WriteClient_1 = require("./WriteClient");
27
31
  class OpenApiClient {
32
+ static CACHE_FINGERPRINT_VERSION = 1;
33
+ static DEFAULT_CACHE_FILENAME = '.openapi-codegen-cache.json';
28
34
  _writeClient = null;
35
+ /** ESLint paths from top-level rawOptions (not per items[] entry). */
36
+ eslintFixOptions = {};
29
37
  get writeClient() {
30
38
  if (!this._writeClient) {
31
39
  throw new Error('WriteClient must be initialized');
@@ -52,7 +60,6 @@ class OpenApiClient {
52
60
  enumPrefix: rawOptions.enumPrefix,
53
61
  typePrefix: rawOptions.typePrefix,
54
62
  useCancelableRequest: rawOptions.useCancelableRequest,
55
- useRequestRaw: rawOptions.useRequestRaw,
56
63
  logLevel: rawOptions.logLevel,
57
64
  logTarget: rawOptions.logTarget,
58
65
  sortByRequired: rawOptions.sortByRequired,
@@ -65,6 +72,11 @@ class OpenApiClient {
65
72
  strictOpenapi: rawOptions.strictOpenapi,
66
73
  reportFile: rawOptions.reportFile,
67
74
  governanceConfig: rawOptions.governanceConfig,
75
+ cache: rawOptions.cache,
76
+ cachePath: rawOptions.cachePath,
77
+ cacheStrategy: rawOptions.cacheStrategy,
78
+ cacheDebug: rawOptions.cacheDebug,
79
+ prettierConfigPath: rawOptions.prettierConfigPath,
68
80
  }));
69
81
  }
70
82
  else {
@@ -89,7 +101,6 @@ class OpenApiClient {
89
101
  enumPrefix: rawOptions.enumPrefix,
90
102
  typePrefix: rawOptions.typePrefix,
91
103
  useCancelableRequest: rawOptions.useCancelableRequest,
92
- useRequestRaw: rawOptions.useRequestRaw,
93
104
  logLevel: rawOptions.logLevel,
94
105
  logTarget: rawOptions.logTarget,
95
106
  sortByRequired: rawOptions.sortByRequired,
@@ -102,6 +113,11 @@ class OpenApiClient {
102
113
  strictOpenapi: rawOptions.strictOpenapi,
103
114
  reportFile: rawOptions.reportFile,
104
115
  governanceConfig: rawOptions.governanceConfig,
116
+ cache: rawOptions.cache,
117
+ cachePath: rawOptions.cachePath,
118
+ cacheStrategy: rawOptions.cacheStrategy,
119
+ cacheDebug: rawOptions.cacheDebug,
120
+ prettierConfigPath: rawOptions.prettierConfigPath,
105
121
  },
106
122
  ];
107
123
  }
@@ -126,7 +142,6 @@ class OpenApiClient {
126
142
  enumPrefix: item.enumPrefix || Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.enumPrefix,
127
143
  typePrefix: item.typePrefix || Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.typePrefix,
128
144
  useCancelableRequest: item.useCancelableRequest ?? Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useCancelableRequest,
129
- useRequestRaw: item.useRequestRaw ?? Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useRequestRaw,
130
145
  logLevel: item.logLevel || Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.logLevel,
131
146
  logTarget: item.logTarget || Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.logTarget,
132
147
  sortByRequired: item.sortByRequired ?? Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.sortByRequired,
@@ -141,18 +156,57 @@ class OpenApiClient {
141
156
  miracles: item.miracles || Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.miracles,
142
157
  strictOpenapi: item.strictOpenapi ?? Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.strictOpenapi,
143
158
  reportFile: item.reportFile || Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.reportFile,
144
- useProjectPrettier: item.useProjectPrettier ?? Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useProjectPrettier,
145
- useEslintFix: item.useEslintFix ?? Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.useEslintFix,
159
+ prettierConfigPath: item.prettierConfigPath ?? Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.prettierConfigPath,
146
160
  governanceConfig: item.governanceConfig || Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.governanceConfig,
161
+ cache: item.cache ?? Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.cache,
162
+ cachePath: item.cachePath || Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.cachePath,
163
+ cacheStrategy: item.cacheStrategy ?? Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.cacheStrategy,
164
+ cacheDebug: item.cacheDebug ?? Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.cacheDebug,
147
165
  };
148
166
  }
149
- async cleanOutputDirectories(option) {
150
- const outputDirs = [option.output, option.outputCore, option.outputSchemas, option.outputModels, option.outputServices];
151
- for (const dir of outputDirs) {
152
- if (dir) {
153
- await fileSystemHelpers_1.fileSystemHelpers.rmdir(dir);
167
+ getOutputRoots(items) {
168
+ const roots = new Set();
169
+ for (const item of items) {
170
+ const outputDirs = [item.output, item.outputCore, item.outputSchemas, item.outputModels, item.outputServices];
171
+ for (const dir of outputDirs) {
172
+ if (dir) {
173
+ roots.add((0, pathHelpers_1.resolveHelper)(process.cwd(), dir));
174
+ }
154
175
  }
155
176
  }
177
+ return Array.from(roots);
178
+ }
179
+ async cleanupStaleOutputs(items) {
180
+ const outputRoots = this.getOutputRoots(items);
181
+ const expectedFiles = this.writeClient.getExpectedOutputFiles();
182
+ for (const root of outputRoots) {
183
+ await this.removeStaleFilesInDirectory(root, expectedFiles);
184
+ }
185
+ }
186
+ async removeStaleFilesInDirectory(path, expectedFiles) {
187
+ const stats = await fs_1.promises.stat(path).catch(() => null);
188
+ if (!stats) {
189
+ return false;
190
+ }
191
+ if (stats.isFile()) {
192
+ if (!expectedFiles.has(path)) {
193
+ await fileSystemHelpers_1.fileSystemHelpers.rmdir(path);
194
+ return false;
195
+ }
196
+ return true;
197
+ }
198
+ const entries = await fs_1.promises.readdir(path);
199
+ let hasAnyFile = false;
200
+ for (const entry of entries) {
201
+ const childPath = (0, pathHelpers_1.resolveHelper)(path, entry);
202
+ const childHasFiles = await this.removeStaleFilesInDirectory(childPath, expectedFiles);
203
+ hasAnyFile = hasAnyFile || childHasFiles;
204
+ }
205
+ if (!hasAnyFile) {
206
+ await fileSystemHelpers_1.fileSystemHelpers.rmdir(path);
207
+ return false;
208
+ }
209
+ return true;
156
210
  }
157
211
  async generateCodeForItems(items) {
158
212
  if (items.length === 0) {
@@ -161,12 +215,27 @@ class OpenApiClient {
161
215
  this.writeClient.logger.forceInfo(LoggerMessages_1.LOGGER_MESSAGES.GENERATION.STARTED(items.length));
162
216
  try {
163
217
  const start = process.hrtime.bigint();
164
- for (const option of items) {
165
- await this.cleanOutputDirectories(option);
218
+ const cacheEnabled = items[0]?.cache === true;
219
+ const generationCaches = new Map();
220
+ if (!cacheEnabled) {
221
+ this.warnOnSharedOutputsWithoutCache(items);
222
+ }
223
+ else {
224
+ for (const outputRoot of this.getUniqueResolvedOutputs(items)) {
225
+ const sampleItem = items.find(item => this.resolveOutputRoot(item.output) === outputRoot);
226
+ if (!sampleItem) {
227
+ continue;
228
+ }
229
+ const cachePath = this.resolveCachePathForOutput(sampleItem.output, sampleItem.cachePath);
230
+ const generationCache = new GenerationCache_1.GenerationCache(cachePath);
231
+ await generationCache.load();
232
+ generationCaches.set(outputRoot, generationCache);
233
+ }
166
234
  }
167
235
  for (const option of items) {
168
236
  const fileStart = process.hrtime.bigint();
169
- await this.generateSingle(option);
237
+ const generationCache = cacheEnabled ? (generationCaches.get(this.resolveOutputRoot(option.output)) ?? null) : null;
238
+ await this.generateSingle(option, generationCache);
170
239
  const fileEnd = process.hrtime.bigint();
171
240
  const fileDurationInSeconds = Number(fileEnd - fileStart) / 1e9;
172
241
  this.writeClient.logger.forceInfo(LoggerMessages_1.LOGGER_MESSAGES.GENERATION.DURATION_FOR_FILE(option.input, fileDurationInSeconds.toFixed(3)));
@@ -177,6 +246,15 @@ class OpenApiClient {
177
246
  else {
178
247
  await this.writeClient.combineAndWrite();
179
248
  }
249
+ await this.cleanupStaleOutputs(items);
250
+ if (cacheEnabled) {
251
+ for (const generationCache of generationCaches.values()) {
252
+ await generationCache.save();
253
+ }
254
+ }
255
+ const writeStats = this.writeClient.getWriteStats();
256
+ this.writeClient.logger.info(LoggerMessages_1.LOGGER_MESSAGES.GENERATION.WRITE_STATS(writeStats.written, writeStats.unchanged));
257
+ await this.runBatchEslintFixIfEnabled();
180
258
  this.writeClient.logger.forceInfo(LoggerMessages_1.LOGGER_MESSAGES.GENERATION.FINISHED);
181
259
  const end = process.hrtime.bigint();
182
260
  const durationInSeconds = Number(end - start) / 1e9;
@@ -188,8 +266,34 @@ class OpenApiClient {
188
266
  }
189
267
  this.writeClient.logger.shutdownLogger();
190
268
  }
191
- async generateSingle(item) {
192
- const { input, output, outputCore, outputServices, outputModels, outputSchemas, httpClient, useOptions, useUnionTypes, excludeCoreServiceFiles, request, plugins, customExecutorPath, interfacePrefix, enumPrefix, typePrefix, useCancelableRequest, useRequestRaw, sortByRequired, useSeparatedIndexes, validationLibrary = ValidationLibrary_enum_1.ValidationLibrary.NONE, emptySchemaStrategy = EmptySchemaStrategy_enum_1.EmptySchemaStrategy.KEEP, useHistory, diffReport, modelsMode = ModelsMode_enum_1.ModelsMode.INTERFACES, strictOpenapi, reportFile, useProjectPrettier = false, useEslintFix = false, governanceConfig, } = item;
269
+ getUniqueResolvedOutputs(items) {
270
+ return Array.from(new Set(items.map(item => this.resolveOutputRoot(item.output))));
271
+ }
272
+ resolveOutputRoot(output) {
273
+ return (0, pathHelpers_1.resolveHelper)(process.cwd(), output);
274
+ }
275
+ resolveCachePathForOutput(output, cachePath) {
276
+ if (cachePath.startsWith('/') || /^[A-Za-z]:[\\/]/.test(cachePath)) {
277
+ return cachePath;
278
+ }
279
+ return (0, pathHelpers_1.resolveHelper)(this.resolveOutputRoot(output), cachePath || OpenApiClient.DEFAULT_CACHE_FILENAME);
280
+ }
281
+ warnOnSharedOutputsWithoutCache(items) {
282
+ const countByOutput = new Map();
283
+ for (const item of items) {
284
+ const output = this.resolveOutputRoot(item.output);
285
+ countByOutput.set(output, (countByOutput.get(output) ?? 0) + 1);
286
+ }
287
+ const duplicatedOutputs = Array.from(countByOutput.entries())
288
+ .filter(([, count]) => count > 1)
289
+ .map(([output]) => output);
290
+ if (duplicatedOutputs.length === 0) {
291
+ return;
292
+ }
293
+ this.writeClient.logger.warn(LoggerMessages_1.LOGGER_MESSAGES.GENERATION.CACHE_SHARED_OUTPUT_WARNING(duplicatedOutputs.map(output => `- ${output}`).join('\n')));
294
+ }
295
+ async generateSingle(item, generationCache) {
296
+ const { input, output, outputCore, outputServices, outputModels, outputSchemas, httpClient, useOptions, useUnionTypes, excludeCoreServiceFiles, request, plugins, customExecutorPath, interfacePrefix, enumPrefix, typePrefix, useCancelableRequest, sortByRequired, useSeparatedIndexes, validationLibrary = ValidationLibrary_enum_1.ValidationLibrary.NONE, emptySchemaStrategy = EmptySchemaStrategy_enum_1.EmptySchemaStrategy.KEEP, useHistory, diffReport, modelsMode = ModelsMode_enum_1.ModelsMode.INTERFACES, strictOpenapi, reportFile, prettierConfigPath, governanceConfig, } = item;
193
297
  const outputPaths = (0, getOutputPaths_1.getOutputPaths)({
194
298
  output,
195
299
  outputCore,
@@ -198,6 +302,28 @@ class OpenApiClient {
198
302
  outputSchemas,
199
303
  });
200
304
  const absoluteInput = (0, pathHelpers_1.resolveHelper)(process.cwd(), input);
305
+ const cacheKey = this.getCacheKey(item, absoluteInput);
306
+ const cacheFingerprint = await this.getCacheFingerprint(item, absoluteInput);
307
+ const useEntityCache = item.cache && item.cacheStrategy === 'entity' && generationCache !== null;
308
+ if (useEntityCache) {
309
+ const cachedEntry = generationCache.get(cacheKey);
310
+ if (cachedEntry && cachedEntry.fingerprint === cacheFingerprint) {
311
+ const allFilesExist = await this.filesExist(cachedEntry.files);
312
+ if (allFilesExist) {
313
+ for (const filePath of cachedEntry.files) {
314
+ this.writeClient.registerOutputFile(filePath);
315
+ }
316
+ if (item.cacheDebug) {
317
+ this.writeClient.logger.info(LoggerMessages_1.LOGGER_MESSAGES.GENERATION.CACHE_HIT(input));
318
+ }
319
+ return;
320
+ }
321
+ }
322
+ if (item.cacheDebug) {
323
+ this.writeClient.logger.info(LoggerMessages_1.LOGGER_MESSAGES.GENERATION.CACHE_MISS(input));
324
+ }
325
+ }
326
+ const knownFilesBefore = new Set(this.writeClient.getExpectedOutputFilesArray());
201
327
  const generatorPlugins = await (0, loadGeneratorPlugins_1.loadGeneratorPlugins)(plugins);
202
328
  const context = new Context_1.Context({
203
329
  input: absoluteInput,
@@ -217,7 +343,7 @@ class OpenApiClient {
217
343
  governanceConfig: governancePolicy,
218
344
  });
219
345
  const reportPath = await (0, validateOpenApiStrict_1.writeOpenApiStrictReport)(strictReport, reportFile);
220
- this.writeClient.logger.forceInfo(`Strict OpenAPI report created: ${reportPath}`);
346
+ this.writeClient.logger.forceInfo(LoggerMessages_1.LOGGER_MESSAGES.GENERATION.STRICT_REPORT_CREATED(reportPath));
221
347
  if (strictReport.summary.errors > 0) {
222
348
  throw new Error(`Strict OpenAPI validation failed with ${strictReport.summary.errors} error(s). Report: ${reportPath}`);
223
349
  }
@@ -228,6 +354,7 @@ class OpenApiClient {
228
354
  useUnionTypes,
229
355
  useOptions,
230
356
  validationLibrary,
357
+ useBatchEslintFix: Boolean(this.eslintFixOptions.tsconfigPath && this.eslintFixOptions.eslintConfigPath),
231
358
  });
232
359
  const diffReportData = await this.loadDiffReportIfNeeded({
233
360
  useHistory,
@@ -261,13 +388,11 @@ class OpenApiClient {
261
388
  request,
262
389
  customExecutorPath,
263
390
  useCancelableRequest,
264
- useRequestRaw,
265
391
  useSeparatedIndexes,
266
392
  validationLibrary,
267
393
  emptySchemaStrategy,
268
394
  modelsMode,
269
- useProjectPrettier,
270
- useEslintFix,
395
+ prettierConfigPath,
271
396
  });
272
397
  break;
273
398
  }
@@ -296,17 +421,112 @@ class OpenApiClient {
296
421
  request,
297
422
  customExecutorPath,
298
423
  useCancelableRequest,
299
- useRequestRaw,
300
424
  useSeparatedIndexes,
301
425
  validationLibrary,
302
426
  emptySchemaStrategy,
303
427
  modelsMode,
304
- useProjectPrettier,
305
- useEslintFix,
428
+ prettierConfigPath,
306
429
  });
307
430
  break;
308
431
  }
309
432
  }
433
+ const generatedFiles = this.writeClient.getExpectedOutputFilesArray().filter(filePath => !knownFilesBefore.has(filePath));
434
+ if (item.cache && generationCache) {
435
+ generationCache.set({
436
+ key: cacheKey,
437
+ fingerprint: cacheFingerprint,
438
+ files: generatedFiles,
439
+ updatedAt: Date.now(),
440
+ });
441
+ }
442
+ }
443
+ getCacheKey(item, absoluteInput) {
444
+ return GenerationCache_1.GenerationCache.hash(JSON.stringify({
445
+ input: absoluteInput,
446
+ output: item.output,
447
+ outputCore: item.outputCore,
448
+ outputServices: item.outputServices,
449
+ outputModels: item.outputModels,
450
+ outputSchemas: item.outputSchemas,
451
+ }));
452
+ }
453
+ async getCacheFingerprint(item, absoluteInput) {
454
+ const specContent = await fileSystemHelpers_1.fileSystemHelpers.readFile(absoluteInput, 'utf8');
455
+ const fingerprint = {
456
+ cacheFingerprintVersion: OpenApiClient.CACHE_FINGERPRINT_VERSION,
457
+ generatorVersion: process.env.npm_package_version || 'dev',
458
+ specHash: GenerationCache_1.GenerationCache.hash(specContent),
459
+ options: {
460
+ httpClient: item.httpClient,
461
+ useOptions: item.useOptions,
462
+ useUnionTypes: item.useUnionTypes,
463
+ includeSchemasFiles: item.includeSchemasFiles,
464
+ excludeCoreServiceFiles: item.excludeCoreServiceFiles,
465
+ request: item.request,
466
+ plugins: item.plugins,
467
+ customExecutorPath: item.customExecutorPath,
468
+ interfacePrefix: item.interfacePrefix,
469
+ enumPrefix: item.enumPrefix,
470
+ typePrefix: item.typePrefix,
471
+ useCancelableRequest: item.useCancelableRequest,
472
+ sortByRequired: item.sortByRequired,
473
+ useSeparatedIndexes: item.useSeparatedIndexes,
474
+ validationLibrary: item.validationLibrary,
475
+ emptySchemaStrategy: item.emptySchemaStrategy,
476
+ useHistory: item.useHistory,
477
+ diffReport: item.diffReport,
478
+ modelsMode: item.modelsMode,
479
+ strictOpenapi: item.strictOpenapi,
480
+ },
481
+ };
482
+ return GenerationCache_1.GenerationCache.hash(JSON.stringify(fingerprint));
483
+ }
484
+ async filesExist(paths) {
485
+ for (const filePath of paths) {
486
+ const exists = await fileSystemHelpers_1.fileSystemHelpers.exists(filePath);
487
+ if (!exists) {
488
+ return false;
489
+ }
490
+ }
491
+ return true;
492
+ }
493
+ /**
494
+ * Runs batch ESLint fix after combineAndWrite / combineAndWrightSimple when both paths are set.
495
+ * Warns and skips when only one path is provided; always clears the WriteClient lint registry.
496
+ */
497
+ async runBatchEslintFixIfEnabled() {
498
+ const opts = this.eslintFixOptions;
499
+ const hasTsconfig = !!opts.tsconfigPath;
500
+ const hasEslintConfig = !!opts.eslintConfigPath;
501
+ if (!hasTsconfig && !hasEslintConfig) {
502
+ this.writeClient.clearLintTargets();
503
+ return;
504
+ }
505
+ if (!hasTsconfig || !hasEslintConfig) {
506
+ this.writeClient.logger.warn(LoggerMessages_1.LOGGER_MESSAGES.FORMATTING.ESLINT_PATHS_MISSING);
507
+ this.writeClient.clearLintTargets();
508
+ return;
509
+ }
510
+ try {
511
+ const { files, includeGlobs } = this.writeClient.getLintTargets();
512
+ if (files.length === 0) {
513
+ return;
514
+ }
515
+ const fixStart = process.hrtime.bigint();
516
+ this.writeClient.logger.forceInfo(LoggerMessages_1.LOGGER_MESSAGES.FORMATTING.ESLINT_BATCH_STARTED);
517
+ await (0, eslintFix_1.eslintFixBatch)({
518
+ files,
519
+ includeGlobs,
520
+ tsconfigPath: opts.tsconfigPath,
521
+ eslintConfigPath: opts.eslintConfigPath,
522
+ });
523
+ const fixEnd = process.hrtime.bigint();
524
+ const durationInSeconds = Number(fixEnd - fixStart) / 1e9;
525
+ this.writeClient.logger.forceInfo(LoggerMessages_1.LOGGER_MESSAGES.FORMATTING.ESLINT_BATCH_FINISHED(durationInSeconds.toFixed(3)));
526
+ }
527
+ finally {
528
+ this.writeClient.clearLintTargets();
529
+ }
310
530
  }
311
531
  async loadDiffReportIfNeeded(params) {
312
532
  return (0, loadDiffReport_1.loadDiffReport)({
@@ -335,6 +555,7 @@ class OpenApiClient {
335
555
  logOutput: rawOptions.logTarget ?? Consts_1.COMMON_DEFAULT_OPTIONS_VALUES.logTarget,
336
556
  });
337
557
  this._writeClient = new WriteClient_1.WriteClient(logger);
558
+ this.eslintFixOptions = (0, TEslintFixOptions_1.extractEslintFixOptions)(rawOptions);
338
559
  const items = this.normalizeOptions(rawOptions).map(item => this.addDefaultValues(item));
339
560
  await this.generateCodeForItems(items);
340
561
  }
@@ -18,6 +18,7 @@ import { writeClientSchemasIndex } from './utils/writeClientSchemasIndex';
18
18
  import { writeClientServices } from './utils/writeClientServices';
19
19
  import { writeClientServicesIndex } from './utils/writeClientServicesIndex';
20
20
  import { writeClientSimpleIndex } from './utils/writeClientSimpleIndex';
21
+ import { WriteFileIfChangedResult } from './utils/writeFileIfChanged';
21
22
  /**
22
23
  * @param client Client object with all the models, services, etc.
23
24
  * @param templates Templates wrapper with all loaded Handlebars templates
@@ -28,7 +29,6 @@ import { writeClientSimpleIndex } from './utils/writeClientSimpleIndex';
28
29
  * @param excludeCoreServiceFiles The generation of the core and services is excluded
29
30
  * @param request: Path to custom request file
30
31
  * @param useCancelableRequest Use cancelable request type.
31
- * @param useRequestRaw Generate requestRaw methods and ApiResult-based raw stack.
32
32
  * @param useSeparatedIndexes Use separate index files for the core, models, schemas, and services
33
33
  * @param validationLibrary Validation library to use for schema validation
34
34
  */
@@ -43,15 +43,13 @@ type TWriteClientProps = {
43
43
  request?: string;
44
44
  customExecutorPath?: string;
45
45
  useCancelableRequest?: boolean;
46
- useRequestRaw?: boolean;
47
46
  useSeparatedIndexes?: boolean;
48
47
  validationLibrary?: ValidationLibrary;
49
48
  emptySchemaStrategy: EmptySchemaStrategy;
50
49
  modelsMode?: ModelsMode;
51
- useProjectPrettier?: boolean;
52
- useEslintFix?: boolean;
50
+ prettierConfigPath?: string;
53
51
  };
54
- type TAPIClientGeneratorConfig = Omit<TWriteClientProps, 'httpClient' | 'useOptions' | 'request' | 'useCancelableRequest' | 'useRequestRaw' | 'useSeparatedIndexes'> & {
52
+ type TAPIClientGeneratorConfig = Omit<TWriteClientProps, 'httpClient' | 'useOptions' | 'request' | 'useCancelableRequest' | 'useSeparatedIndexes'> & {
55
53
  schemaModels: Model[];
56
54
  };
57
55
  /**
@@ -59,6 +57,12 @@ type TAPIClientGeneratorConfig = Omit<TWriteClientProps, 'httpClient' | 'useOpti
59
57
  */
60
58
  export declare class WriteClient {
61
59
  private config;
60
+ private expectedOutputFiles;
61
+ private writeStats;
62
+ /** Absolute paths of generated model/service files for batch ESLint. */
63
+ private lintTargetFiles;
64
+ /** Output directory globs for the temporary tsconfig include. */
65
+ private lintIncludeGlobs;
62
66
  private _logger;
63
67
  constructor(logger?: Logger);
64
68
  /**
@@ -74,6 +78,30 @@ export declare class WriteClient {
74
78
  combineAndWrite(): Promise<void>;
75
79
  combineAndWrightSimple(): Promise<void>;
76
80
  get logger(): Logger;
81
+ writeOutputFile(filePath: string, content: string): Promise<WriteFileIfChangedResult>;
82
+ registerOutputFile(filePath: string): void;
83
+ getExpectedOutputFiles(): Set<string>;
84
+ getExpectedOutputFilesArray(): string[];
85
+ getWriteStats(): {
86
+ written: number;
87
+ unchanged: number;
88
+ };
89
+ /**
90
+ * Registers a generated file for the post-generation batch ESLint pass.
91
+ *
92
+ * @param filePath - Written file path (absolute or relative to cwd).
93
+ * @param outputRoot - Models or services output directory used to build a narrow tsconfig glob.
94
+ */
95
+ registerLintTarget(filePath: string, outputRoot: string): void;
96
+ /**
97
+ * Returns collected lint targets after all writeClient* calls.
98
+ */
99
+ getLintTargets(): {
100
+ files: string[];
101
+ includeGlobs: string[];
102
+ };
103
+ /** Clears the lint registry after batch ESLint finishes or is skipped. */
104
+ clearLintTargets(): void;
77
105
  private buildSimpleClientIndexMap;
78
106
  private buildClientIndexMap;
79
107
  private finalizeAndWrite;
@@ -1 +1 @@
1
- {"version":3,"file":"WriteClient.d.ts","sourceRoot":"","sources":["../../src/core/WriteClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAM1C,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAIxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE;;;;;;;;;;;;;GAaG;AACH,KAAK,iBAAiB,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,uBAAuB,EAAE,OAAO,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,KAAK,yBAAyB,GAAG,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS,GAAG,sBAAsB,GAAG,eAAe,GAAG,qBAAqB,CAAC,GAAG;IACnK,YAAY,EAAE,KAAK,EAAE,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAuD;IACrE,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,CAAC,EAAE,MAAM;IAU3B;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;YAyI9C,sBAAsB;IA0DpC;;;OAGG;IACH,6BAA6B,CAAC,MAAM,EAAE,yBAAyB;IAUzD,eAAe;IAKf,sBAAsB;IAK5B,IAAW,MAAM,WAEhB;IAED,OAAO,CAAC,yBAAyB;IAyCjC,OAAO,CAAC,mBAAmB;YAkEb,gBAAgB;YAUhB,uBAAuB;IAMrC,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,aAAa;IAId,eAAe,yBAAmB;IAClC,oBAAoB,8BAAwB;IAC5C,oBAAoB,8BAAwB;IAC5C,iBAAiB,2BAAqB;IACtC,sBAAsB,gCAA0B;IAChD,kBAAkB,4BAAsB;IACxC,uBAAuB,iCAA2B;IAClD,mBAAmB,6BAAuB;IAC1C,wBAAwB,kCAA4B;IACpD,sBAAsB,gCAA0B;IAChD,mBAAmB,6BAAuB;CACpD"}
1
+ {"version":3,"file":"WriteClient.d.ts","sourceRoot":"","sources":["../../src/core/WriteClient.ts"],"names":[],"mappings":"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"}
@@ -21,11 +21,18 @@ const writeClientSchemasIndex_1 = require("./utils/writeClientSchemasIndex");
21
21
  const writeClientServices_1 = require("./utils/writeClientServices");
22
22
  const writeClientServicesIndex_1 = require("./utils/writeClientServicesIndex");
23
23
  const writeClientSimpleIndex_1 = require("./utils/writeClientSimpleIndex");
24
+ const writeFileIfChanged_1 = require("./utils/writeFileIfChanged");
24
25
  /**
25
26
  * The client which is writing all items and keep the parameters to write index file
26
27
  */
27
28
  class WriteClient {
28
29
  config = new Map();
30
+ expectedOutputFiles = new Set();
31
+ writeStats = { written: 0, unchanged: 0 };
32
+ /** Absolute paths of generated model/service files for batch ESLint. */
33
+ lintTargetFiles = new Set();
34
+ /** Output directory globs for the temporary tsconfig include. */
35
+ lintIncludeGlobs = new Set();
29
36
  _logger;
30
37
  constructor(logger) {
31
38
  this._logger =
@@ -40,14 +47,14 @@ class WriteClient {
40
47
  * Write our OpenAPI client, using the given templates at the given output
41
48
  */
42
49
  async writeClient(options) {
43
- const { client, templates, outputPaths, httpClient, useOptions, useUnionTypes, excludeCoreServiceFiles = false, request, customExecutorPath, useCancelableRequest = false, useRequestRaw = true, useSeparatedIndexes = false, validationLibrary = ValidationLibrary_enum_1.ValidationLibrary.NONE, emptySchemaStrategy, modelsMode, useProjectPrettier = false, useEslintFix = false, } = options;
50
+ const { client, templates, outputPaths, httpClient, useOptions, useUnionTypes, excludeCoreServiceFiles = false, request, customExecutorPath, useCancelableRequest = false, useSeparatedIndexes = false, validationLibrary = ValidationLibrary_enum_1.ValidationLibrary.NONE, emptySchemaStrategy, modelsMode, prettierConfigPath, } = options;
44
51
  if (!excludeCoreServiceFiles) {
45
52
  const executorPath = (0, pathHelpers_1.resolveHelper)(outputPaths.outputCore, 'executor');
46
53
  const interceptorsPath = (0, pathHelpers_1.resolveHelper)(outputPaths.outputCore, 'interceptors');
47
54
  await fileSystemHelpers_1.fileSystemHelpers.mkdir(outputPaths.outputCore);
48
55
  await fileSystemHelpers_1.fileSystemHelpers.mkdir(executorPath);
49
56
  await fileSystemHelpers_1.fileSystemHelpers.mkdir(interceptorsPath);
50
- await this.writeClientCore({ client, templates, outputCorePath: outputPaths.outputCore, httpClient, request, useCancelableRequest, useRequestRaw, modelsMode });
57
+ await this.writeClientCore({ client, templates, outputCorePath: outputPaths.outputCore, httpClient, request, useCancelableRequest, modelsMode });
51
58
  await this.writeClientCoreIndex({
52
59
  templates,
53
60
  outputCorePath: outputPaths.outputCore,
@@ -69,9 +76,7 @@ class WriteClient {
69
76
  useUnionTypes,
70
77
  useOptions,
71
78
  useCancelableRequest,
72
- useRequestRaw,
73
- useProjectPrettier,
74
- useEslintFix,
79
+ prettierConfigPath,
75
80
  });
76
81
  await this.writeClientServicesIndex({
77
82
  services: client.services,
@@ -86,8 +91,7 @@ class WriteClient {
86
91
  templates,
87
92
  request,
88
93
  customExecutorPath,
89
- useProjectPrettier,
90
- useEslintFix,
94
+ prettierConfigPath,
91
95
  });
92
96
  }
93
97
  /**
@@ -104,8 +108,7 @@ class WriteClient {
104
108
  useUnionTypes,
105
109
  validationLibrary,
106
110
  emptySchemaStrategy,
107
- useProjectPrettier,
108
- useEslintFix,
111
+ prettierConfigPath,
109
112
  });
110
113
  await this.writeClientSchemasIndex({
111
114
  models: schemaModels,
@@ -129,8 +132,7 @@ class WriteClient {
129
132
  emptySchemaStrategy,
130
133
  modelsMode,
131
134
  schemaModels,
132
- useProjectPrettier,
133
- useEslintFix,
135
+ prettierConfigPath,
134
136
  });
135
137
  return;
136
138
  }
@@ -150,17 +152,16 @@ class WriteClient {
150
152
  emptySchemaStrategy,
151
153
  modelsMode,
152
154
  schemaModels: [],
153
- useProjectPrettier,
154
- useEslintFix,
155
+ prettierConfigPath,
155
156
  });
156
157
  }
157
158
  async writeModelsAndFinalize(config) {
158
- const { client, templates, outputPaths, httpClient, useUnionTypes, useOptions, useSeparatedIndexes, excludeCoreServiceFiles, validationLibrary, emptySchemaStrategy, modelsMode, schemaModels, useProjectPrettier, useEslintFix, } = config;
159
+ const { client, templates, outputPaths, httpClient, useUnionTypes, useOptions, useSeparatedIndexes, excludeCoreServiceFiles, validationLibrary, emptySchemaStrategy, modelsMode, schemaModels, prettierConfigPath, } = config;
159
160
  await fileSystemHelpers_1.fileSystemHelpers.mkdir(outputPaths.outputModels);
160
161
  const shouldInlineDtoCore = modelsMode === ModelsMode_enum_1.ModelsMode.CLASSES && excludeCoreServiceFiles;
161
162
  if (shouldInlineDtoCore) {
162
- await fileSystemHelpers_1.fileSystemHelpers.writeFile((0, pathHelpers_1.resolveHelper)(outputPaths.outputModels, 'BaseDto.ts'), templates.core.baseDto({}));
163
- await fileSystemHelpers_1.fileSystemHelpers.writeFile((0, pathHelpers_1.resolveHelper)(outputPaths.outputModels, 'dtoUtils.ts'), templates.core.dtoUtils({}));
163
+ await this.writeOutputFile((0, pathHelpers_1.resolveHelper)(outputPaths.outputModels, 'BaseDto.ts'), templates.core.baseDto({}));
164
+ await this.writeOutputFile((0, pathHelpers_1.resolveHelper)(outputPaths.outputModels, 'dtoUtils.ts'), templates.core.dtoUtils({}));
164
165
  }
165
166
  await this.writeClientModels({
166
167
  models: client.models,
@@ -171,8 +172,7 @@ class WriteClient {
171
172
  useOptions,
172
173
  modelsMode,
173
174
  outputCorePath: shouldInlineDtoCore ? './' : (0, pathHelpers_1.relativeHelper)(outputPaths.outputModels, outputPaths.outputCore),
174
- useProjectPrettier,
175
- useEslintFix,
175
+ prettierConfigPath,
176
176
  });
177
177
  await this.writeClientModelsIndex({
178
178
  models: client.models,
@@ -219,6 +219,48 @@ class WriteClient {
219
219
  get logger() {
220
220
  return this._logger;
221
221
  }
222
+ async writeOutputFile(filePath, content) {
223
+ this.expectedOutputFiles.add((0, pathHelpers_1.resolveHelper)(process.cwd(), filePath));
224
+ const result = await (0, writeFileIfChanged_1.writeFileIfChanged)(filePath, content);
225
+ this.writeStats[result] += 1;
226
+ return result;
227
+ }
228
+ registerOutputFile(filePath) {
229
+ this.expectedOutputFiles.add((0, pathHelpers_1.resolveHelper)(process.cwd(), filePath));
230
+ }
231
+ getExpectedOutputFiles() {
232
+ return this.expectedOutputFiles;
233
+ }
234
+ getExpectedOutputFilesArray() {
235
+ return Array.from(this.expectedOutputFiles);
236
+ }
237
+ getWriteStats() {
238
+ return { ...this.writeStats };
239
+ }
240
+ /**
241
+ * Registers a generated file for the post-generation batch ESLint pass.
242
+ *
243
+ * @param filePath - Written file path (absolute or relative to cwd).
244
+ * @param outputRoot - Models or services output directory used to build a narrow tsconfig glob.
245
+ */
246
+ registerLintTarget(filePath, outputRoot) {
247
+ this.lintTargetFiles.add((0, pathHelpers_1.resolveHelper)(process.cwd(), filePath));
248
+ this.lintIncludeGlobs.add(`${outputRoot.replace(/\\/g, '/')}/**/*.ts`);
249
+ }
250
+ /**
251
+ * Returns collected lint targets after all writeClient* calls.
252
+ */
253
+ getLintTargets() {
254
+ return {
255
+ files: [...this.lintTargetFiles],
256
+ includeGlobs: [...this.lintIncludeGlobs],
257
+ };
258
+ }
259
+ /** Clears the lint registry after batch ESLint finishes or is skipped. */
260
+ clearLintTargets() {
261
+ this.lintTargetFiles.clear();
262
+ this.lintIncludeGlobs.clear();
263
+ }
222
264
  buildSimpleClientIndexMap() {
223
265
  const result = new Map();
224
266
  for (const [key, value] of this.config.entries()) {
@@ -61,7 +61,7 @@ const WriteClient_1 = require("../WriteClient");
61
61
  interceptors: () => 'interceptors',
62
62
  withInterceptors: () => 'withInterceptors',
63
63
  baseDto: () => 'baseDto',
64
- dtoUtils: () => 'dtoUtils'
64
+ dtoUtils: () => 'dtoUtils',
65
65
  },
66
66
  };
67
67
  const outputPaths = (0, getOutputPaths_1.getOutputPaths)({ output: './dist' });