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.
- package/README.md +3 -0
- package/README.rus.md +3 -0
- package/dist/cli/analyzeDiff/__tests__/analyzeDiff.cli.test.js +9 -0
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffRenameAndInvalidRegex.test.js +9 -0
- package/dist/cli/analyzeDiff/__tests__/analyzeDiffTypeCoercion.test.js +9 -0
- package/dist/cli/analyzeDiff/ignoreRules.d.ts +0 -6
- package/dist/cli/analyzeDiff/ignoreRules.d.ts.map +1 -1
- package/dist/cli/analyzeDiff/ignoreRules.js +2 -3
- package/dist/cli/analyzeUsage/analyzeUsage.d.ts +4 -0
- package/dist/cli/analyzeUsage/analyzeUsage.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/analyzeUsage.js +60 -0
- package/dist/cli/analyzeUsage/core/Analyzer.d.ts +9 -0
- package/dist/cli/analyzeUsage/core/Analyzer.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/core/Analyzer.js +29 -0
- package/dist/cli/analyzeUsage/core/ProjectContext.d.ts +10 -0
- package/dist/cli/analyzeUsage/core/ProjectContext.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/core/ProjectContext.js +58 -0
- package/dist/cli/analyzeUsage/core/Scanner.d.ts +15 -0
- package/dist/cli/analyzeUsage/core/Scanner.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/core/Scanner.js +115 -0
- package/dist/cli/analyzeUsage/rules/ClientRule.d.ts +6 -0
- package/dist/cli/analyzeUsage/rules/ClientRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/ClientRule.js +76 -0
- package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts +7 -0
- package/dist/cli/analyzeUsage/rules/CoverageRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/CoverageRule.js +55 -0
- package/dist/cli/analyzeUsage/rules/DiagnosticsRule.d.ts +6 -0
- package/dist/cli/analyzeUsage/rules/DiagnosticsRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/DiagnosticsRule.js +63 -0
- package/dist/cli/analyzeUsage/rules/ImportRule.d.ts +6 -0
- package/dist/cli/analyzeUsage/rules/ImportRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/ImportRule.js +50 -0
- package/dist/cli/analyzeUsage/rules/ModelRule.d.ts +6 -0
- package/dist/cli/analyzeUsage/rules/ModelRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/ModelRule.js +34 -0
- package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts +6 -0
- package/dist/cli/analyzeUsage/rules/SchemaRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/SchemaRule.js +46 -0
- package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts +7 -0
- package/dist/cli/analyzeUsage/rules/ServiceRule.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/rules/ServiceRule.js +86 -0
- package/dist/cli/analyzeUsage/types.d.ts +52 -0
- package/dist/cli/analyzeUsage/types.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/types.js +2 -0
- package/dist/cli/analyzeUsage/utils/fuzzy.d.ts +5 -0
- package/dist/cli/analyzeUsage/utils/fuzzy.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/utils/fuzzy.js +38 -0
- package/dist/cli/analyzeUsage/utils/report.d.ts +16 -0
- package/dist/cli/analyzeUsage/utils/report.d.ts.map +1 -0
- package/dist/cli/analyzeUsage/utils/report.js +85 -0
- package/dist/cli/checkAndUpdateConfig/__tests__/checkConfig.test.js +10 -20
- package/dist/cli/checkAndUpdateConfig/__tests__/updateConfig.test.js +10 -20
- package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts +2 -1
- package/dist/cli/checkAndUpdateConfig/checkConfig.d.ts.map +1 -1
- package/dist/cli/checkAndUpdateConfig/checkConfig.js +8 -4
- package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts +2 -1
- package/dist/cli/checkAndUpdateConfig/updateConfig.d.ts.map +1 -1
- package/dist/cli/checkAndUpdateConfig/updateConfig.js +6 -3
- package/dist/cli/checkAndUpdateConfig/utils/removeDefaultConfigValues.d.ts.map +1 -1
- package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.d.ts.map +1 -1
- package/dist/cli/checkAndUpdateConfig/utils/validateAndMigrateConfigData.js +19 -1
- package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.d.ts +1 -1
- package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.d.ts.map +1 -1
- package/dist/cli/checkAndUpdateConfig/utils/writeConfigFile.js +1 -1
- package/dist/cli/generateOpenApiClient/__tests__/generateOpenApiClient.strict.test.js +18 -9
- package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts +2 -5
- package/dist/cli/generateOpenApiClient/generateOpenApiClient.d.ts.map +1 -1
- package/dist/cli/generateOpenApiClient/generateOpenApiClient.js +21 -17
- package/dist/cli/index.js +44 -11
- package/dist/cli/initOpenApiConfig/__tests__/init.test.js +4 -14
- package/dist/cli/initOpenApiConfig/__tests__/initConfig.test.js +3 -1
- package/dist/cli/initOpenApiConfig/init.d.ts +2 -1
- package/dist/cli/initOpenApiConfig/init.d.ts.map +1 -1
- package/dist/cli/initOpenApiConfig/init.js +3 -3
- package/dist/cli/initOpenApiConfig/initCustomRequest.d.ts +0 -1
- package/dist/cli/initOpenApiConfig/initCustomRequest.d.ts.map +1 -1
- package/dist/cli/initOpenApiConfig/initCustomRequest.js +1 -2
- package/dist/cli/initOpenApiConfig/utils/__tests__/buildConfig.test.js +2 -8
- package/dist/cli/initOpenApiConfig/utils/__tests__/validateSpecFiles.test.js +9 -0
- package/dist/cli/initOpenApiConfig/utils/buildConfig.d.ts.map +1 -1
- package/dist/cli/initOpenApiConfig/utils/buildConfig.js +0 -4
- package/dist/cli/initOpenApiConfig/utils/registerHandlebarTemplates.d.ts.map +1 -1
- package/dist/cli/interactive/constants.d.ts +0 -4
- package/dist/cli/interactive/constants.d.ts.map +1 -1
- package/dist/cli/interactive/constants.js +1 -5
- package/dist/cli/previewChanges/previewChanges.d.ts +2 -1
- package/dist/cli/previewChanges/previewChanges.d.ts.map +1 -1
- package/dist/cli/previewChanges/previewChanges.js +6 -6
- package/dist/cli/previewChanges/utils/formatDiff.d.ts.map +1 -1
- package/dist/cli/previewChanges/utils/updateOutputPaths.d.ts.map +1 -1
- package/dist/cli/previewChanges/utils/updateOutputPaths.js +5 -12
- package/dist/cli/schemas/analyzeUsage.d.ts +13 -0
- package/dist/cli/schemas/analyzeUsage.d.ts.map +1 -0
- package/dist/cli/schemas/analyzeUsage.js +41 -0
- package/dist/cli/schemas/generate.d.ts +10 -2
- package/dist/cli/schemas/generate.d.ts.map +1 -1
- package/dist/cli/schemas/generate.js +7 -2
- package/dist/cli/schemas/index.d.ts +2 -2
- package/dist/cli/schemas/index.d.ts.map +1 -1
- package/dist/cli/schemas/index.js +1 -1
- package/dist/cli/schemas/init.d.ts +0 -1
- package/dist/cli/schemas/init.d.ts.map +1 -1
- package/dist/cli/schemas/init.js +0 -1
- package/dist/cli/types.d.ts +6 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/common/Consts.d.ts +1 -0
- package/dist/common/Consts.d.ts.map +1 -1
- package/dist/common/Consts.js +7 -4
- package/dist/common/Logger.d.ts.map +1 -1
- package/dist/common/Logger.js +3 -3
- package/dist/common/LoggerMessages.d.ts +66 -12
- package/dist/common/LoggerMessages.d.ts.map +1 -1
- package/dist/common/LoggerMessages.js +72 -18
- package/dist/common/TEslintFixOptions.d.ts +20 -0
- package/dist/common/TEslintFixOptions.d.ts.map +1 -0
- package/dist/common/TEslintFixOptions.js +15 -0
- package/dist/common/TRawOptions.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/AllMigrationPlans.js +2 -4
- package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/AllVersionedSchemas.js +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.d.ts +0 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedBase.js +1 -2
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.d.ts +0 -2
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV1.js +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts +0 -2
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV2.js +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV3.d.ts +0 -2
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV3.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.d.ts +0 -2
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV4.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts +10 -4
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedOptionsSchemaV5.js +15 -5
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts +18 -15
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.d.ts.map +1 -1
- package/dist/common/VersionedSchema/AllVersionedSchemas/UnifiedVersionedSchemas.js +7 -1
- package/dist/common/VersionedSchema/CommonSchemas.d.ts +0 -2
- package/dist/common/VersionedSchema/CommonSchemas.d.ts.map +1 -1
- package/dist/common/VersionedSchema/CommonSchemas.js +4 -3
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsMigrationPlan.d.ts.map +1 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsMigrationPlan.js +0 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV2.js +1 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.d.ts +0 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.d.ts.map +1 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV3.js +1 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.d.ts +0 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.d.ts.map +1 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV4.js +1 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV5.d.ts +0 -1
- package/dist/common/VersionedSchema/MultiOptionsVersioned/MultiOptionsSchemaV5.d.ts.map +1 -1
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsMigrationPlans.d.ts.map +1 -1
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsMigrationPlans.js +0 -1
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV1.d.ts +2 -2
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV1.d.ts.map +1 -1
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV2.d.ts +2 -2
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.d.ts +0 -1
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.d.ts.map +1 -1
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV3.js +1 -1
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV4.d.ts +1 -2
- package/dist/common/VersionedSchema/OptionsVersioned/OptionsSchemaV4.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/__mocks__/compatibilityCases.js +9 -9
- package/dist/common/VersionedSchema/Utils/__tests__/allUtils.test.js +4 -16
- package/dist/common/VersionedSchema/Utils/buildVersionedSchema.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.d.ts +1 -1
- package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/createDefaultFieldsMigration.js +1 -1
- package/dist/common/VersionedSchema/Utils/createTrivialMigration.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/createTrivialMigration.js +1 -1
- package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/determineBestMatchingSchemaVersion.js +1 -3
- package/dist/common/VersionedSchema/Utils/getLatestVersionFromMigrationPlans.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/migrateDataToLatestSchemaVersion.js +2 -4
- package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.d.ts.map +1 -1
- package/dist/common/VersionedSchema/Utils/replaceInvalidKeysWithMappedNames.js +1 -1
- package/dist/common/VersionedSchema/Utils/validateAndSuggestKeyCorrections.d.ts.map +1 -1
- package/dist/common/VersionedSchema/refinements/dependentOptionsRefinement.d.ts +1 -1
- package/dist/common/VersionedSchema/refinements/dependentOptionsRefinement.d.ts.map +1 -1
- package/dist/common/utils/__tests__/convertArrayToObject.test.js +0 -3
- package/dist/common/utils/__tests__/eslintFix.test.js +25 -67
- package/dist/common/utils/__tests__/extractEslintFixOptions.test.d.ts +2 -0
- package/dist/common/utils/__tests__/extractEslintFixOptions.test.d.ts.map +1 -0
- package/dist/common/utils/__tests__/extractEslintFixOptions.test.js +28 -0
- package/dist/common/utils/__tests__/format.test.js +26 -17
- package/dist/common/utils/__tests__/prepareTempTsConfig.test.d.ts +2 -0
- package/dist/common/utils/__tests__/prepareTempTsConfig.test.d.ts.map +1 -0
- package/dist/common/utils/__tests__/prepareTempTsConfig.test.js +78 -0
- package/dist/common/utils/codegenTempDir.d.ts +20 -0
- package/dist/common/utils/codegenTempDir.d.ts.map +1 -0
- package/dist/common/utils/codegenTempDir.js +42 -0
- package/dist/common/utils/convertArrayToObject.d.ts.map +1 -1
- package/dist/common/utils/convertArrayToObject.js +3 -10
- package/dist/common/utils/eslintFix.d.ts +48 -4
- package/dist/common/utils/eslintFix.d.ts.map +1 -1
- package/dist/common/utils/eslintFix.js +121 -15
- package/dist/common/utils/format.d.ts +1 -1
- package/dist/common/utils/format.d.ts.map +1 -1
- package/dist/common/utils/format.js +23 -11
- package/dist/common/utils/jsonPath.d.ts.map +1 -1
- package/dist/common/utils/prepareTempEslintConfig.d.ts +18 -0
- package/dist/common/utils/prepareTempEslintConfig.d.ts.map +1 -0
- package/dist/common/utils/prepareTempEslintConfig.js +55 -0
- package/dist/common/utils/prepareTempTsConfig.d.ts +23 -0
- package/dist/common/utils/prepareTempTsConfig.d.ts.map +1 -0
- package/dist/common/utils/prepareTempTsConfig.js +105 -0
- package/dist/core/Context.d.ts.map +1 -1
- package/dist/core/Context.js +2 -6
- package/dist/core/OpenApiClient.d.ts +19 -1
- package/dist/core/OpenApiClient.d.ts.map +1 -1
- package/dist/core/OpenApiClient.js +243 -22
- package/dist/core/WriteClient.d.ts +33 -5
- package/dist/core/WriteClient.d.ts.map +1 -1
- package/dist/core/WriteClient.js +60 -18
- package/dist/core/__tests__/WriteClient.test.js +1 -1
- package/dist/core/api/v2/parser/getOperationResponses.d.ts.map +1 -1
- package/dist/core/api/v2/parser/getOperationResponses.js +1 -3
- package/dist/core/api/v2/parser/getServiceName.d.ts +1 -1
- package/dist/core/api/v3/parser/getOperation.d.ts.map +1 -1
- package/dist/core/api/v3/parser/getOperationParameters.d.ts.map +1 -1
- package/dist/core/api/v3/parser/getOperationResponses.d.ts.map +1 -1
- package/dist/core/api/v3/parser/getOperationResponses.js +1 -3
- package/dist/core/api/v3/parser/getServiceName.d.ts +1 -1
- package/dist/core/governance/evaluateGovernanceRules.d.ts.map +1 -1
- package/dist/core/governance/evaluateGovernanceRules.js +1 -3
- package/dist/core/governance/loadGovernanceConfig.d.ts.map +1 -1
- package/dist/core/governance/loadGovernanceConfig.js +2 -4
- package/dist/core/plugins/GeneratorPlugin.model.d.ts.map +1 -1
- package/dist/core/plugins/applySemanticDiffPluginHooks.d.ts.map +1 -1
- package/dist/core/plugins/getBuiltinPlugins.d.ts.map +1 -1
- package/dist/core/plugins/loadGeneratorPlugins.d.ts.map +1 -1
- package/dist/core/plugins/loadGeneratorPlugins.js +1 -1
- package/dist/core/semanticDiff/__tests__/analyzeOpenApiDiff.test.js +7 -21
- package/dist/core/semanticDiff/analyzeOpenApiDiff.d.ts.map +1 -1
- package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts +0 -2
- package/dist/core/semanticDiff/semanticDiffReportSchema.d.ts.map +1 -1
- package/dist/core/semanticDiff/semanticDiffReportSchema.js +3 -9
- package/dist/core/strict/validateOpenApiStrict.d.ts.map +1 -1
- package/dist/core/types/Consts.js +1 -1
- package/dist/core/types/base/ClientArtifacts.model.d.ts +3 -3
- package/dist/core/types/base/ClientArtifacts.model.d.ts.map +1 -1
- package/dist/core/types/base/ExportedModel.model.d.ts +1 -1
- package/dist/core/types/base/ExportedModel.model.d.ts.map +1 -1
- package/dist/core/types/base/ExportedService.model.d.ts.map +1 -1
- package/dist/core/types/base/OutputPaths.model.d.ts.map +1 -1
- package/dist/core/types/base/PrefixArtifacts.model.d.ts.map +1 -1
- package/dist/core/types/base/PropertyGroup.model.d.ts +1 -1
- package/dist/core/types/base/SimpleClientArtifacts.model.d.ts +1 -1
- package/dist/core/types/base/SimpleClientArtifacts.model.d.ts.map +1 -1
- package/dist/core/types/shared/Client.model.d.ts +1 -1
- package/dist/core/types/shared/Client.model.d.ts.map +1 -1
- package/dist/core/types/shared/Model.model.d.ts +1 -1
- package/dist/core/types/shared/Model.model.d.ts.map +1 -1
- package/dist/core/utils/__tests__/postProcessModelImports.test.js +1 -4
- package/dist/core/utils/__tests__/postProcessServiceImports.test.js +1 -4
- package/dist/core/utils/__tests__/prepareDtoModels.test.js +95 -0
- package/dist/core/utils/__tests__/registerHandlebarHelpers.test.js +27 -0
- package/dist/core/utils/__tests__/sortByRequiredExtended.test.js +10 -27
- package/dist/core/utils/__tests__/writeClientServices.test.js +0 -1
- package/dist/core/utils/appendUniqueLinesToFile.js +1 -1
- package/dist/core/utils/applyDiffReportToClient.d.ts.map +1 -1
- package/dist/core/utils/applyDiffReportToClient.js +2 -2
- package/dist/core/utils/areEqual.d.ts +1 -1
- package/dist/core/utils/getOperationErrors.d.ts +2 -2
- package/dist/core/utils/getOperationErrors.d.ts.map +1 -1
- package/dist/core/utils/getOperationResults.d.ts +1 -1
- package/dist/core/utils/getPropertyGroupSimple.d.ts.map +1 -1
- package/dist/core/utils/getPropertyGroupSimple.js +1 -3
- package/dist/core/utils/isSubdirectory.d.ts.map +1 -1
- package/dist/core/utils/loadDiffReport.d.ts.map +1 -1
- package/dist/core/utils/loadDiffReport.js +5 -4
- package/dist/core/utils/modelHelpers.d.ts.map +1 -1
- package/dist/core/utils/normalizeString.d.ts.map +1 -1
- package/dist/core/utils/normalizeString.js +1 -5
- package/dist/core/utils/postProcessServiceImports.d.ts.map +1 -1
- package/dist/core/utils/postProcessServiceImports.js +1 -3
- package/dist/core/utils/precompileTemplates.js +4 -2
- package/dist/core/utils/prepareAlias.d.ts +1 -1
- package/dist/core/utils/prepareDtoModels.d.ts.map +1 -1
- package/dist/core/utils/prepareDtoModels.js +2 -8
- package/dist/core/utils/registerHandlebarHelpers.d.ts +1 -0
- package/dist/core/utils/registerHandlebarHelpers.d.ts.map +1 -1
- package/dist/core/utils/registerHandlebarHelpers.js +3 -0
- package/dist/core/utils/registerHandlebarTemplates.d.ts +1 -0
- package/dist/core/utils/registerHandlebarTemplates.d.ts.map +1 -1
- package/dist/core/utils/sortModelByName.d.ts +1 -1
- package/dist/core/utils/writeClientCore.d.ts +0 -2
- package/dist/core/utils/writeClientCore.d.ts.map +1 -1
- package/dist/core/utils/writeClientCore.js +19 -18
- package/dist/core/utils/writeClientCoreIndex.d.ts.map +1 -1
- package/dist/core/utils/writeClientCoreIndex.js +14 -4
- package/dist/core/utils/writeClientExecutor.d.ts +1 -2
- package/dist/core/utils/writeClientExecutor.d.ts.map +1 -1
- package/dist/core/utils/writeClientExecutor.js +6 -10
- package/dist/core/utils/writeClientFullIndex.js +4 -4
- package/dist/core/utils/writeClientModels.d.ts +1 -2
- package/dist/core/utils/writeClientModels.d.ts.map +1 -1
- package/dist/core/utils/writeClientModels.js +14 -16
- package/dist/core/utils/writeClientModelsIndex.d.ts +1 -1
- package/dist/core/utils/writeClientModelsIndex.d.ts.map +1 -1
- package/dist/core/utils/writeClientModelsIndex.js +14 -4
- package/dist/core/utils/writeClientSchemas.d.ts +1 -3
- package/dist/core/utils/writeClientSchemas.d.ts.map +1 -1
- package/dist/core/utils/writeClientSchemas.js +9 -14
- package/dist/core/utils/writeClientSchemasIndex.d.ts.map +1 -1
- package/dist/core/utils/writeClientSchemasIndex.js +14 -4
- package/dist/core/utils/writeClientServices.d.ts +1 -4
- package/dist/core/utils/writeClientServices.d.ts.map +1 -1
- package/dist/core/utils/writeClientServices.js +9 -13
- package/dist/core/utils/writeClientServicesIndex.d.ts.map +1 -1
- package/dist/core/utils/writeClientServicesIndex.js +14 -4
- package/dist/core/utils/writeClientSimpleIndex.js +4 -4
- package/dist/templatesCompiled/cli/customRequest.d.ts +2 -6
- package/dist/templatesCompiled/cli/customRequest.d.ts.map +1 -1
- package/dist/templatesCompiled/cli/customRequest.js +8 -28
- package/dist/templatesCompiled/cli/customRequestExecutor.d.ts +0 -3
- package/dist/templatesCompiled/cli/customRequestExecutor.d.ts.map +1 -1
- package/dist/templatesCompiled/cli/customRequestExecutor.js +5 -28
- package/dist/templatesCompiled/client/core/axios/request.d.ts +2 -6
- package/dist/templatesCompiled/client/core/axios/request.d.ts.map +1 -1
- package/dist/templatesCompiled/client/core/axios/request.js +2 -22
- package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.d.ts +2 -5
- package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.d.ts.map +1 -1
- package/dist/templatesCompiled/client/core/executor/createExecutorAdapter.js +12 -42
- package/dist/templatesCompiled/client/core/executor/requestExecutor.d.ts +0 -2
- package/dist/templatesCompiled/client/core/executor/requestExecutor.d.ts.map +1 -1
- package/dist/templatesCompiled/client/core/executor/requestExecutor.js +3 -11
- package/dist/templatesCompiled/client/core/fetch/request.d.ts +2 -6
- package/dist/templatesCompiled/client/core/fetch/request.d.ts.map +1 -1
- package/dist/templatesCompiled/client/core/fetch/request.js +2 -22
- package/dist/templatesCompiled/client/core/interceptors/withInterceptors.d.ts +0 -2
- package/dist/templatesCompiled/client/core/interceptors/withInterceptors.d.ts.map +1 -1
- package/dist/templatesCompiled/client/core/interceptors/withInterceptors.js +3 -11
- package/dist/templatesCompiled/client/core/node/request.d.ts +2 -6
- package/dist/templatesCompiled/client/core/node/request.d.ts.map +1 -1
- package/dist/templatesCompiled/client/core/node/request.js +2 -22
- package/dist/templatesCompiled/client/core/xhr/request.d.ts +2 -6
- package/dist/templatesCompiled/client/core/xhr/request.d.ts.map +1 -1
- package/dist/templatesCompiled/client/core/xhr/request.js +2 -22
- package/dist/templatesCompiled/client/exportService.d.ts +9 -11
- package/dist/templatesCompiled/client/exportService.d.ts.map +1 -1
- package/dist/templatesCompiled/client/exportService.js +64 -82
- package/dist/templatesCompiled/client/partials/header.d.ts +1 -0
- package/dist/templatesCompiled/client/partials/header.d.ts.map +1 -1
- package/dist/templatesCompiled/client/partials/header.js +11 -2
- package/dist/test/helpers/silenceLoggers.d.ts +11 -0
- package/dist/test/helpers/silenceLoggers.d.ts.map +1 -0
- package/dist/test/helpers/silenceLoggers.js +88 -0
- package/package.json +132 -135
package/README.md
CHANGED
|
@@ -31,6 +31,9 @@
|
|
|
31
31
|
- Supports generator plugins (`plugins`) including built-in `x-typescript-type`
|
|
32
32
|
- Supports binary request/response generation (`format: binary` -> `Blob`)
|
|
33
33
|
- Supports opt-in generation cache and incremental writes (`--cache`, `--cachePath`, `--cacheStrategy`, `--cacheDebug`)
|
|
34
|
+
- Generated services accept a `RequestExecutor` in the constructor (`request` / `requestRaw`, interceptors, `customExecutorPath` / `createExecutorAdapter`)
|
|
35
|
+
- Optional output formatting via `prettierConfigPath` (explicit Prettier config file)
|
|
36
|
+
- Optional batch ESLint `--fix` after generation when both `tsconfigPath` and `eslintConfigPath` are set
|
|
34
37
|
|
|
35
38
|
## Install
|
|
36
39
|
|
package/README.rus.md
CHANGED
|
@@ -31,6 +31,9 @@
|
|
|
31
31
|
- Поддерживает плагины генератора (`plugins`), включая встроенный `x-typescript-type`
|
|
32
32
|
- Поддерживает генерацию бинарных request/response (`format: binary` -> `Blob`)
|
|
33
33
|
- Поддерживает opt-in кэш генерации и инкрементальную запись (`--cache`, `--cachePath`, `--cacheStrategy`, `--cacheDebug`)
|
|
34
|
+
- Сгенерированные сервисы принимают `RequestExecutor` в конструкторе (`request` / `requestRaw`, interceptors, `customExecutorPath` / `createExecutorAdapter`)
|
|
35
|
+
- Опциональное форматирование вывода через `prettierConfigPath` (явный путь к конфигу Prettier)
|
|
36
|
+
- Опциональный пакетный ESLint `--fix` после генерации при указании `tsconfigPath` и `eslintConfigPath`
|
|
34
37
|
|
|
35
38
|
## Установка
|
|
36
39
|
|
|
@@ -9,6 +9,7 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
9
9
|
const node_test_1 = require("node:test");
|
|
10
10
|
const LoggerMessages_1 = require("../../../common/LoggerMessages");
|
|
11
11
|
const semanticDiffReportSchema_1 = require("../../../core/semanticDiff/semanticDiffReportSchema");
|
|
12
|
+
const silenceLoggers_1 = require("../../../test/helpers/silenceLoggers");
|
|
12
13
|
const analyzeDiff_1 = require("../analyzeDiff");
|
|
13
14
|
const ciSummary_1 = require("../ciSummary");
|
|
14
15
|
const repoRoot = node_path_1.default.join(__dirname, '..', '..', '..', '..');
|
|
@@ -29,6 +30,14 @@ async function runAnalyzeDiffCli(options) {
|
|
|
29
30
|
};
|
|
30
31
|
}
|
|
31
32
|
(0, node_test_1.describe)('@unit: analyzeDiff cli', () => {
|
|
33
|
+
let restoreAppLogger;
|
|
34
|
+
(0, node_test_1.beforeEach)(() => {
|
|
35
|
+
restoreAppLogger = (0, silenceLoggers_1.installSilenceAppLogger)();
|
|
36
|
+
});
|
|
37
|
+
(0, node_test_1.afterEach)(() => {
|
|
38
|
+
restoreAppLogger?.();
|
|
39
|
+
restoreAppLogger = undefined;
|
|
40
|
+
});
|
|
32
41
|
(0, node_test_1.test)('returns exit code 0 and skips when --input has no base source', async (t) => {
|
|
33
42
|
const tempDir = createTempDir(t, 'openapi-cli-analyze-skip-');
|
|
34
43
|
const reportPath = node_path_1.default.join(tempDir, 'report.json');
|
|
@@ -7,6 +7,7 @@ const node_assert_1 = __importDefault(require("node:assert"));
|
|
|
7
7
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
9
|
const node_test_1 = require("node:test");
|
|
10
|
+
const silenceLoggers_1 = require("../../../test/helpers/silenceLoggers");
|
|
10
11
|
const analyzeDiff_1 = require("../analyzeDiff");
|
|
11
12
|
const writeSpec = (dir, filename, payload) => {
|
|
12
13
|
const filePath = node_path_1.default.join(dir, filename);
|
|
@@ -23,6 +24,14 @@ const createTempDir = (t, prefix) => {
|
|
|
23
24
|
return tempDir;
|
|
24
25
|
};
|
|
25
26
|
(0, node_test_1.describe)('@unit: analyzeDiff RENAME and invalid-regex handling', () => {
|
|
27
|
+
let restoreAppLogger;
|
|
28
|
+
(0, node_test_1.beforeEach)(() => {
|
|
29
|
+
restoreAppLogger = (0, silenceLoggers_1.installSilenceAppLogger)();
|
|
30
|
+
});
|
|
31
|
+
(0, node_test_1.afterEach)(() => {
|
|
32
|
+
restoreAppLogger?.();
|
|
33
|
+
restoreAppLogger = undefined;
|
|
34
|
+
});
|
|
26
35
|
(0, node_test_1.test)('detects semantic remove/add entries for property rename-like change', async (t) => {
|
|
27
36
|
const tmpDir = createTempDir(t, 'openapi-diff-rename-');
|
|
28
37
|
const reportPath = node_path_1.default.join(tmpDir, 'report.json');
|
|
@@ -7,6 +7,7 @@ const node_assert_1 = __importDefault(require("node:assert"));
|
|
|
7
7
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
9
|
const node_test_1 = require("node:test");
|
|
10
|
+
const silenceLoggers_1 = require("../../../test/helpers/silenceLoggers");
|
|
10
11
|
const analyzeDiff_1 = require("../analyzeDiff");
|
|
11
12
|
const writeSpec = (dir, filename, payload) => {
|
|
12
13
|
const filePath = node_path_1.default.join(dir, filename);
|
|
@@ -23,6 +24,14 @@ const createTempDir = (t, prefix) => {
|
|
|
23
24
|
return tempDir;
|
|
24
25
|
};
|
|
25
26
|
(0, node_test_1.describe)('@unit: analyzeDiff TYPE_COERCION miracles', () => {
|
|
27
|
+
let restoreAppLogger;
|
|
28
|
+
(0, node_test_1.beforeEach)(() => {
|
|
29
|
+
restoreAppLogger = (0, silenceLoggers_1.installSilenceAppLogger)();
|
|
30
|
+
});
|
|
31
|
+
(0, node_test_1.afterEach)(() => {
|
|
32
|
+
restoreAppLogger?.();
|
|
33
|
+
restoreAppLogger = undefined;
|
|
34
|
+
});
|
|
26
35
|
(0, node_test_1.test)('detects semantic type change for scalar property transition', async (t) => {
|
|
27
36
|
const tmpDir = createTempDir(t, 'openapi-diff-test-');
|
|
28
37
|
const reportPath = node_path_1.default.join(tmpDir, 'report.json');
|
|
@@ -1,10 +1,4 @@
|
|
|
1
1
|
import type { DiffEntry, IgnoreRule } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Проверяет, активно ли правило игнорирования по полю `until`.
|
|
4
|
-
* @param rule правило игнорирования
|
|
5
|
-
* @returns true если правило активно или не содержит валидной даты
|
|
6
|
-
*/
|
|
7
|
-
export declare const isRuleActive: (rule: IgnoreRule) => boolean;
|
|
8
2
|
/**
|
|
9
3
|
* Проверяет, соответствует ли запись diff правилу игнорирования.
|
|
10
4
|
* Совмещает полное совпадение пути, префикс и регулярные выражения.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ignoreRules.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/ignoreRules.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ignoreRules.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeDiff/ignoreRules.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAcrD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,SAAS,EAAE,MAAM,UAAU,KAAG,OAkBtE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,SAAS,EAAE,EAAE,OAAO,UAAU,EAAE,KAAG;IAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAapH,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GAAI,YAAY,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,KAAG,UAAU,EAOnH,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,oBAAoB,MAAM,KAAG,UAAU,EAGtE,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.loadIgnoreRules = exports.getIgnoreRulesFromConfig = exports.applyIgnoreRules = exports.matchesIgnoreRule =
|
|
3
|
+
exports.loadIgnoreRules = exports.getIgnoreRulesFromConfig = exports.applyIgnoreRules = exports.matchesIgnoreRule = void 0;
|
|
4
4
|
const Consts_1 = require("../../common/Consts");
|
|
5
5
|
const LoggerMessages_1 = require("../../common/LoggerMessages");
|
|
6
6
|
const loadConfigIfExists_1 = require("../../common/utils/loadConfigIfExists");
|
|
@@ -17,7 +17,6 @@ const isRuleActive = (rule) => {
|
|
|
17
17
|
return true;
|
|
18
18
|
return Date.now() <= timestamp;
|
|
19
19
|
};
|
|
20
|
-
exports.isRuleActive = isRuleActive;
|
|
21
20
|
/**
|
|
22
21
|
* Проверяет, соответствует ли запись diff правилу игнорирования.
|
|
23
22
|
* Совмещает полное совпадение пути, префикс и регулярные выражения.
|
|
@@ -26,7 +25,7 @@ exports.isRuleActive = isRuleActive;
|
|
|
26
25
|
* @returns true если правило применимо к записи
|
|
27
26
|
*/
|
|
28
27
|
const matchesIgnoreRule = (entry, rule) => {
|
|
29
|
-
if (!
|
|
28
|
+
if (!isRuleActive(rule))
|
|
30
29
|
return false;
|
|
31
30
|
if (rule.path) {
|
|
32
31
|
if (entry.path === rule.path)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzeUsage.d.ts","sourceRoot":"","sources":["../../../src/cli/analyzeUsage/analyzeUsage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAO5C,eAAO,MAAM,YAAY,GAAU,SAAS,YAAY,KAAG,OAAO,CAAC,gBAAgB,CAwDlF,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.analyzeUsage = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const Analyzer_1 = require("./core/Analyzer");
|
|
9
|
+
const ProjectContext_1 = require("./core/ProjectContext");
|
|
10
|
+
const Scanner_1 = require("./core/Scanner");
|
|
11
|
+
const report_1 = require("./utils/report");
|
|
12
|
+
const analyzeUsage = async (options) => {
|
|
13
|
+
try {
|
|
14
|
+
// Валидация входных данных
|
|
15
|
+
if (!options.sourcePath || !options.projectPath) {
|
|
16
|
+
console.error('❌ Error: --sourcePath (-s) and --projectPath (-p) are required.');
|
|
17
|
+
return { success: false, error: '--sourcePath (-s) and --projectPath (-p) are required.' };
|
|
18
|
+
}
|
|
19
|
+
const projectPath = path_1.default.resolve(options.projectPath);
|
|
20
|
+
const sourcePath = path_1.default.resolve(options.sourcePath);
|
|
21
|
+
const tsconfigPath = options.tsconfigPath ? path_1.default.resolve(options.tsconfigPath) : undefined;
|
|
22
|
+
console.log('🏗️ Initializing project context...');
|
|
23
|
+
const context = new ProjectContext_1.ProjectContext(projectPath, tsconfigPath);
|
|
24
|
+
// Добавляем файл генерации в проект для работы TypeChecker
|
|
25
|
+
const generatedFile = context.project.addSourceFileAtPath(sourcePath);
|
|
26
|
+
console.log('🔍 Scanning API contract...');
|
|
27
|
+
const scanner = new Scanner_1.Scanner(generatedFile);
|
|
28
|
+
const contract = scanner.scan();
|
|
29
|
+
// Инициализация объекта статистики для подсчета Coverage
|
|
30
|
+
const stats = {
|
|
31
|
+
usedMethods: new Set(),
|
|
32
|
+
usedSchemas: new Set(),
|
|
33
|
+
usedModels: new Set(),
|
|
34
|
+
};
|
|
35
|
+
console.log('🧪 Running semantic analysis...');
|
|
36
|
+
const analyzer = new Analyzer_1.Analyzer(context, contract);
|
|
37
|
+
const findings = await analyzer.run(stats);
|
|
38
|
+
// 1. Расчет покрытия API (через Reporter)
|
|
39
|
+
const coverage = report_1.Reporter.calculateCoverage(stats, contract);
|
|
40
|
+
// 2. Вывод результатов в консоль (таблица и сводка)
|
|
41
|
+
report_1.Reporter.renderConsole(findings, coverage);
|
|
42
|
+
// 3. Сохранение детального JSON-отчета
|
|
43
|
+
report_1.Reporter.saveJsonReport(options.output, findings, coverage);
|
|
44
|
+
// 4. Логика выхода для CI пайплайнов
|
|
45
|
+
if (options.check) {
|
|
46
|
+
const hasErrors = findings.some(f => f.severity === 'ERROR');
|
|
47
|
+
if (hasErrors) {
|
|
48
|
+
console.error('\n🛑 CI check failed: critical API contract mismatches were found.');
|
|
49
|
+
return { success: false, error: 'CI check failed: critical API contract mismatches were found.' };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
console.log('\n✅ Done!');
|
|
53
|
+
return { success: true };
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.error(`\n💥 Fatal error: ${error.message}`);
|
|
57
|
+
return { success: false, error: error?.message ?? String(error) };
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
exports.analyzeUsage = analyzeUsage;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Contract, Finding, Stats } from '../types';
|
|
2
|
+
import type { ProjectContext } from './ProjectContext';
|
|
3
|
+
export declare class Analyzer {
|
|
4
|
+
private _context;
|
|
5
|
+
private _contract;
|
|
6
|
+
constructor(context: ProjectContext, contract: Contract);
|
|
7
|
+
run(stats: Stats): Promise<Finding[]>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=Analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Analyzer.d.ts","sourceRoot":"","sources":["../../../../src/cli/analyzeUsage/core/Analyzer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,qBAAa,QAAQ;IACjB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,SAAS,CAAW;gBAEhB,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ;IAKjD,GAAG,CAAC,KAAK,EAAE,KAAK;CAazB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Analyzer = void 0;
|
|
4
|
+
const ClientRule_1 = require("../rules/ClientRule");
|
|
5
|
+
const CoverageRule_1 = require("../rules/CoverageRule");
|
|
6
|
+
const DiagnosticsRule_1 = require("../rules/DiagnosticsRule");
|
|
7
|
+
const ImportRule_1 = require("../rules/ImportRule");
|
|
8
|
+
const ModelRule_1 = require("../rules/ModelRule");
|
|
9
|
+
const SchemaRule_1 = require("../rules/SchemaRule");
|
|
10
|
+
const ServiceRule_1 = require("../rules/ServiceRule");
|
|
11
|
+
class Analyzer {
|
|
12
|
+
_context;
|
|
13
|
+
_contract;
|
|
14
|
+
constructor(context, contract) {
|
|
15
|
+
this._context = context;
|
|
16
|
+
this._contract = contract;
|
|
17
|
+
}
|
|
18
|
+
async run(stats) {
|
|
19
|
+
const findings = [];
|
|
20
|
+
// Порядок важен: сначала собираем статистику, потом анализируем покрытие
|
|
21
|
+
const rules = [new ImportRule_1.ImportRule(), new ClientRule_1.ClientRule(), new ServiceRule_1.ServiceRule(), new SchemaRule_1.SchemaRule(), new ModelRule_1.ModelRule(), new DiagnosticsRule_1.DiagnosticsRule(), new CoverageRule_1.CoverageRule()];
|
|
22
|
+
for (const rule of rules) {
|
|
23
|
+
const results = await rule.check(this._context, this._contract, stats);
|
|
24
|
+
findings.push(...results);
|
|
25
|
+
}
|
|
26
|
+
return findings;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.Analyzer = Analyzer;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Project } from 'ts-morph';
|
|
2
|
+
export declare class ProjectContext {
|
|
3
|
+
readonly project: Project;
|
|
4
|
+
readonly projectPath: string;
|
|
5
|
+
constructor(projectPath: string, tsConfigPath?: string);
|
|
6
|
+
getTypeChecker(): import("ts-morph").TypeChecker;
|
|
7
|
+
getSourceFiles(): import("ts-morph").SourceFile[];
|
|
8
|
+
getConsumerSourceFiles(): import("ts-morph").SourceFile[];
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=ProjectContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectContext.d.ts","sourceRoot":"","sources":["../../../../src/cli/analyzeUsage/core/ProjectContext.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnC,qBAAa,cAAc;IACvB,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,WAAW,EAAE,MAAM,CAAC;gBAExB,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;IAwC/C,cAAc;IAId,cAAc;IAId,sBAAsB;CAIhC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ProjectContext = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const ts_morph_1 = require("ts-morph");
|
|
9
|
+
class ProjectContext {
|
|
10
|
+
project;
|
|
11
|
+
projectPath;
|
|
12
|
+
constructor(projectPath, tsConfigPath) {
|
|
13
|
+
this.projectPath = projectPath;
|
|
14
|
+
const options = {
|
|
15
|
+
// Очень важно для CLI:
|
|
16
|
+
skipAddingFilesFromTsConfig: false,
|
|
17
|
+
};
|
|
18
|
+
if (tsConfigPath) {
|
|
19
|
+
options.tsConfigFilePath = tsConfigPath;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
options.compilerOptions = {
|
|
23
|
+
allowJs: true,
|
|
24
|
+
jsx: 4, // React 17+ (react-jsx)
|
|
25
|
+
target: 99, // ESNext
|
|
26
|
+
moduleResolution: 2, // Node
|
|
27
|
+
esModuleInterop: true,
|
|
28
|
+
// БЕЗ ЭТОГО НЕ БУДЕТ ВИДЕТЬ ТИПЫ БИБЛИОТЕК:
|
|
29
|
+
skipLibCheck: true,
|
|
30
|
+
typeRoots: [path_1.default.resolve(projectPath, 'node_modules/@types')],
|
|
31
|
+
lib: ['lib.esnext.d.ts', 'lib.dom.d.ts'],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
this.project = new ts_morph_1.Project(options);
|
|
35
|
+
// Если мы не используем tsconfig, нужно принудительно добавить файлы
|
|
36
|
+
if (!tsConfigPath) {
|
|
37
|
+
console.log('📂 Adding project files manually...');
|
|
38
|
+
this.project.addSourceFilesAtPaths([path_1.default.join(projectPath, 'src/**/*.{ts,tsx}'), '!**/node_modules/**']);
|
|
39
|
+
}
|
|
40
|
+
// ПРОВЕРКА: Проверяем, видит ли проект файлы
|
|
41
|
+
const fileCount = this.project.getSourceFiles().length;
|
|
42
|
+
console.log(`count: ${fileCount} files loaded into context.`);
|
|
43
|
+
if (fileCount === 0) {
|
|
44
|
+
throw new Error(`Project at path ${projectPath} is empty or no files were found.`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
getTypeChecker() {
|
|
48
|
+
return this.project.getTypeChecker();
|
|
49
|
+
}
|
|
50
|
+
getSourceFiles() {
|
|
51
|
+
return this.project.getSourceFiles();
|
|
52
|
+
}
|
|
53
|
+
getConsumerSourceFiles() {
|
|
54
|
+
const srcRoot = path_1.default.resolve(this.projectPath, 'src') + path_1.default.sep;
|
|
55
|
+
return this.project.getSourceFiles().filter(file => file.getFilePath().startsWith(srcRoot));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.ProjectContext = ProjectContext;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SourceFile } from 'ts-morph';
|
|
2
|
+
import type { Contract } from '../types';
|
|
3
|
+
export declare class Scanner {
|
|
4
|
+
private generatedFile;
|
|
5
|
+
constructor(generatedFile: SourceFile);
|
|
6
|
+
scan(): Contract;
|
|
7
|
+
private extractMethodsFromDeclaration;
|
|
8
|
+
/**
|
|
9
|
+
* Разбирает метод и возвращает его метаданные.
|
|
10
|
+
* Возвращает null, если узел не является функцией (нет call-сигнатур).
|
|
11
|
+
*/
|
|
12
|
+
private parseMethod;
|
|
13
|
+
private extractSchemas;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=Scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scanner.d.ts","sourceRoot":"","sources":["../../../../src/cli/analyzeUsage/core/Scanner.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,UAAU,EAAc,MAAM,UAAU,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAEzD,qBAAa,OAAO;IACJ,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,UAAU;IAEtC,IAAI,IAAI,QAAQ;IA4CvB,OAAO,CAAC,6BAA6B;IA0CrC;;;OAGG;IACH,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,cAAc;CAGzB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Scanner = void 0;
|
|
4
|
+
const ts_morph_1 = require("ts-morph");
|
|
5
|
+
class Scanner {
|
|
6
|
+
generatedFile;
|
|
7
|
+
constructor(generatedFile) {
|
|
8
|
+
this.generatedFile = generatedFile;
|
|
9
|
+
}
|
|
10
|
+
scan() {
|
|
11
|
+
const exports = this.generatedFile.getExportedDeclarations();
|
|
12
|
+
console.log(`DEBUG SCANNER: File exports:`, Array.from(exports.keys()));
|
|
13
|
+
// 1. Сервисы: экспорты с суффиксом "Service"
|
|
14
|
+
const services = {};
|
|
15
|
+
exports.forEach((declarations, name) => {
|
|
16
|
+
if (name.endsWith('Service')) {
|
|
17
|
+
// Объединяем методы из всех деклараций с одним именем (может быть несколько)
|
|
18
|
+
const methods = [];
|
|
19
|
+
declarations.forEach(decl => {
|
|
20
|
+
methods.push(...this.extractMethodsFromDeclaration(decl));
|
|
21
|
+
});
|
|
22
|
+
// Если уже были методы от предыдущих итераций (для этого имени), объединяем
|
|
23
|
+
services[name] = [...(services[name] || []), ...methods];
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
// 2. Модели: типы и интерфейсы контракта (исключая сервисы и схемы)
|
|
27
|
+
const models = [];
|
|
28
|
+
exports.forEach((declarations, name) => {
|
|
29
|
+
if (name.endsWith('Service') || name.endsWith('Schema'))
|
|
30
|
+
return;
|
|
31
|
+
if (name === 'createClient')
|
|
32
|
+
return;
|
|
33
|
+
if (declarations.some(decl => ts_morph_1.Node.isTypeAliasDeclaration(decl) || ts_morph_1.Node.isInterfaceDeclaration(decl) || ts_morph_1.Node.isClassDeclaration(decl))) {
|
|
34
|
+
models.push(name);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
// 3. Схемы: все экспорты с суффиксом Schema
|
|
38
|
+
const schemas = this.extractSchemas(exports);
|
|
39
|
+
console.log(`DEBUG SCANNER: Services found: ${Object.keys(services).length}`);
|
|
40
|
+
console.log(`DEBUG SCANNER: Models found (types/interfaces/classes): ${models.length}`);
|
|
41
|
+
console.log(`DEBUG SCANNER: Schemas found: ${schemas.length}`);
|
|
42
|
+
return {
|
|
43
|
+
services,
|
|
44
|
+
schemas,
|
|
45
|
+
models,
|
|
46
|
+
sourceFile: this.generatedFile,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
extractMethodsFromDeclaration(decl) {
|
|
50
|
+
const methods = [];
|
|
51
|
+
// Сценарий А: Сервис объявлен как переменная с объектным литералом
|
|
52
|
+
if (ts_morph_1.Node.isVariableDeclaration(decl)) {
|
|
53
|
+
const init = decl.getInitializerIfKind(ts_morph_1.SyntaxKind.ObjectLiteralExpression);
|
|
54
|
+
if (init) {
|
|
55
|
+
init.getProperties().forEach(prop => {
|
|
56
|
+
// Обрабатываем обычные свойства
|
|
57
|
+
if (ts_morph_1.Node.isPropertyAssignment(prop)) {
|
|
58
|
+
const initializer = prop.getInitializer();
|
|
59
|
+
if (initializer) {
|
|
60
|
+
const method = this.parseMethod(prop.getName(), initializer);
|
|
61
|
+
if (method)
|
|
62
|
+
methods.push(method);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Обрабатываем короткую запись свойств (shorthand)
|
|
66
|
+
else if (ts_morph_1.Node.isShorthandPropertyAssignment(prop)) {
|
|
67
|
+
const method = this.parseMethod(prop.getName(), prop // у shorthand-свойства сам узел является функцией? Нужно взять значение
|
|
68
|
+
);
|
|
69
|
+
// Однако у ShorthandPropertyAssignment значение — это ссылка на переменную,
|
|
70
|
+
// поэтому для получения типа нужно использовать nameNode или сам prop.
|
|
71
|
+
// В ts-morph getType() на ShorthandPropertyAssignment даст тип функции, если она там.
|
|
72
|
+
// Передадим весь prop как узел, parseMethod его использует.
|
|
73
|
+
if (method)
|
|
74
|
+
methods.push(method);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Сценарий Б: Сервис объявлен как класс
|
|
80
|
+
else if (ts_morph_1.Node.isClassDeclaration(decl)) {
|
|
81
|
+
decl.getMethods().forEach(method => {
|
|
82
|
+
const parsed = this.parseMethod(method.getName(), method);
|
|
83
|
+
if (parsed)
|
|
84
|
+
methods.push(parsed);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
return methods;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Разбирает метод и возвращает его метаданные.
|
|
91
|
+
* Возвращает null, если узел не является функцией (нет call-сигнатур).
|
|
92
|
+
*/
|
|
93
|
+
parseMethod(name, node) {
|
|
94
|
+
const type = node.getType();
|
|
95
|
+
const signatures = type.getCallSignatures();
|
|
96
|
+
// Если сигнатур нет, это не метод (например, свойство-константа) — пропускаем
|
|
97
|
+
if (signatures.length === 0)
|
|
98
|
+
return null;
|
|
99
|
+
// У сгенерированного API обычно одна сигнатура
|
|
100
|
+
const sig = signatures[0];
|
|
101
|
+
return {
|
|
102
|
+
name,
|
|
103
|
+
params: sig?.getParameters().map(p => ({
|
|
104
|
+
name: p.getName(),
|
|
105
|
+
isOptional: p.isOptional(),
|
|
106
|
+
type: p.getTypeAtLocation(node).getText(),
|
|
107
|
+
})) || [],
|
|
108
|
+
returnType: sig?.getReturnType().getText() || 'void',
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
extractSchemas(exports) {
|
|
112
|
+
return [...exports.keys()].filter(name => name.endsWith('Schema'));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.Scanner = Scanner;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ProjectContext } from '../core/ProjectContext';
|
|
2
|
+
import type { Contract, Finding, Rule, Stats } from '../types';
|
|
3
|
+
export declare class ClientRule implements Rule {
|
|
4
|
+
check(context: ProjectContext, contract: Contract, stats: Stats): Promise<Finding[]>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=ClientRule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClientRule.d.ts","sourceRoot":"","sources":["../../../../src/cli/analyzeUsage/rules/ClientRule.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAE/D,qBAAa,UAAW,YAAW,IAAI;IAC7B,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA0E7F"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ClientRule = void 0;
|
|
4
|
+
const ts_morph_1 = require("ts-morph");
|
|
5
|
+
class ClientRule {
|
|
6
|
+
async check(context, contract, stats) {
|
|
7
|
+
const findings = [];
|
|
8
|
+
const checker = context.getTypeChecker();
|
|
9
|
+
const clientOptionsDecl = contract.sourceFile.getExportedDeclarations().get('ClientOptions')?.[0];
|
|
10
|
+
const expectedType = clientOptionsDecl?.getType();
|
|
11
|
+
if (!expectedType) {
|
|
12
|
+
findings.push({
|
|
13
|
+
id: 'CLIENT_OPTIONS_TYPE_NOT_FOUND',
|
|
14
|
+
category: 'CONFIG',
|
|
15
|
+
severity: 'WARNING',
|
|
16
|
+
message: 'ClientOptions type was not found in the contract. createClient argument validation is limited.',
|
|
17
|
+
file: contract.sourceFile.getFilePath(),
|
|
18
|
+
line: 0,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
for (const file of context.getConsumerSourceFiles()) {
|
|
22
|
+
const imports = file.getImportDeclarations();
|
|
23
|
+
const createClientNames = new Set();
|
|
24
|
+
for (const imp of imports) {
|
|
25
|
+
const moduleName = imp.getModuleSpecifierValue();
|
|
26
|
+
if (moduleName !== '@lom-api' && !moduleName.startsWith('@lom-api/')) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
for (const namedImport of imp.getNamedImports()) {
|
|
30
|
+
if (namedImport.getName() === 'createClient') {
|
|
31
|
+
createClientNames.add(namedImport.getAliasNode()?.getText() || 'createClient');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (createClientNames.size === 0)
|
|
36
|
+
continue;
|
|
37
|
+
const calls = file.getDescendantsOfKind(ts_morph_1.SyntaxKind.CallExpression);
|
|
38
|
+
for (const call of calls) {
|
|
39
|
+
const expression = call.getExpression();
|
|
40
|
+
if (!ts_morph_1.Node.isIdentifier(expression))
|
|
41
|
+
continue;
|
|
42
|
+
if (!createClientNames.has(expression.getText()))
|
|
43
|
+
continue;
|
|
44
|
+
stats.usedMethods.add('createClient');
|
|
45
|
+
const args = call.getArguments();
|
|
46
|
+
if (args.length === 0)
|
|
47
|
+
continue;
|
|
48
|
+
if (expectedType) {
|
|
49
|
+
const providedType = checker.getTypeAtLocation(args[0]);
|
|
50
|
+
if (!providedType.isAssignableTo(expectedType)) {
|
|
51
|
+
findings.push({
|
|
52
|
+
id: 'CLIENT_OPTIONS_MISMATCH',
|
|
53
|
+
category: 'TYPE_MISMATCH',
|
|
54
|
+
severity: 'ERROR',
|
|
55
|
+
message: 'createClient configuration object does not match ClientOptions from the generated API.',
|
|
56
|
+
file: file.getFilePath(),
|
|
57
|
+
line: args[0].getStartLineNumber(),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (!stats.usedMethods.has('createClient')) {
|
|
64
|
+
findings.push({
|
|
65
|
+
id: 'CLIENT_NOT_FOUND',
|
|
66
|
+
category: 'USAGE',
|
|
67
|
+
severity: 'WARNING',
|
|
68
|
+
message: 'No createClient call from @lom-api was found in src.',
|
|
69
|
+
file: 'Global',
|
|
70
|
+
line: 0,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return findings;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.ClientRule = ClientRule;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ProjectContext } from '../core/ProjectContext';
|
|
2
|
+
import type { Contract, Finding, Rule, Stats } from '../types';
|
|
3
|
+
export declare class CoverageRule implements Rule {
|
|
4
|
+
private readonly ignoredUnusedModels;
|
|
5
|
+
check(_context: ProjectContext, contract: Contract, stats: Stats): Promise<Finding[]>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=CoverageRule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CoverageRule.d.ts","sourceRoot":"","sources":["../../../../src/cli/analyzeUsage/rules/CoverageRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAE/D,qBAAa,YAAa,YAAW,IAAI;IACrC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAoI;IAElK,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CAmD9F"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CoverageRule = void 0;
|
|
4
|
+
class CoverageRule {
|
|
5
|
+
ignoredUnusedModels = new Set(['ApiError', 'RequestConfig', 'RequestExecutor', 'TOpenAPIConfig', 'OpenAPI', 'createExecutorAdapter', 'ClientOptions']);
|
|
6
|
+
async check(_context, contract, stats) {
|
|
7
|
+
const findings = [];
|
|
8
|
+
// Проверка неиспользуемых схем
|
|
9
|
+
contract.schemas.forEach(schema => {
|
|
10
|
+
if (!stats.usedSchemas.has(schema)) {
|
|
11
|
+
findings.push({
|
|
12
|
+
id: 'UNUSED_SCHEMA',
|
|
13
|
+
category: 'UNUSED',
|
|
14
|
+
severity: 'WARNING',
|
|
15
|
+
message: `Schema "${schema}" is exported by the API but not used in the project.`,
|
|
16
|
+
file: 'API Contract',
|
|
17
|
+
line: 0,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
// Проверка неиспользуемых моделей
|
|
22
|
+
contract.models.forEach(model => {
|
|
23
|
+
if (this.ignoredUnusedModels.has(model))
|
|
24
|
+
return;
|
|
25
|
+
if (!stats.usedModels.has(model)) {
|
|
26
|
+
findings.push({
|
|
27
|
+
id: 'UNUSED_MODEL',
|
|
28
|
+
category: 'UNUSED',
|
|
29
|
+
severity: 'WARNING',
|
|
30
|
+
message: `Model "${model}" is exported by the API but not used in the project.`,
|
|
31
|
+
file: 'API Contract',
|
|
32
|
+
line: 0,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
// Проверка неиспользуемых методов
|
|
37
|
+
Object.entries(contract.services).forEach(([serviceName, methods]) => {
|
|
38
|
+
methods.forEach(method => {
|
|
39
|
+
const methodKey = `${serviceName}.${method.name}`;
|
|
40
|
+
if (!stats.usedMethods.has(methodKey)) {
|
|
41
|
+
findings.push({
|
|
42
|
+
id: 'UNUSED_METHOD',
|
|
43
|
+
category: 'UNUSED',
|
|
44
|
+
severity: 'WARNING',
|
|
45
|
+
message: `Method "${methodKey}" is exported by the API but not used in the project.`,
|
|
46
|
+
file: 'API Contract',
|
|
47
|
+
line: 0,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
return findings;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.CoverageRule = CoverageRule;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ProjectContext } from '../core/ProjectContext';
|
|
2
|
+
import type { Contract, Finding, Rule, Stats } from '../types';
|
|
3
|
+
export declare class DiagnosticsRule implements Rule {
|
|
4
|
+
check(context: ProjectContext, _contract: Contract, _stats: Stats): Promise<Finding[]>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=DiagnosticsRule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiagnosticsRule.d.ts","sourceRoot":"","sources":["../../../../src/cli/analyzeUsage/rules/DiagnosticsRule.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAE/D,qBAAa,eAAgB,YAAW,IAAI;IAClC,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;CA0D/F"}
|