@l-v-yonsama/multi-platform-database-drivers 2.0.0 → 2.1.0

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 (454) hide show
  1. package/README.md +1 -0
  2. package/built/schema/log-parse-config.schema.json +4 -4
  3. package/built/src/drivers/AwsDriver.d.ts +25 -1
  4. package/built/src/drivers/AwsDriver.js +189 -0
  5. package/built/src/drivers/AwsDriver.js.map +1 -1
  6. package/built/src/drivers/BaseDriver.js.map +1 -1
  7. package/built/src/drivers/DBDriverResolver.js.map +1 -1
  8. package/built/src/drivers/KeycloakDriver.js.map +1 -1
  9. package/built/src/drivers/MqttDriver.js.map +1 -1
  10. package/built/src/drivers/MySQLDriver.d.ts +10 -1
  11. package/built/src/drivers/MySQLDriver.js +130 -0
  12. package/built/src/drivers/MySQLDriver.js.map +1 -1
  13. package/built/src/drivers/OracleDriver.d.ts +14 -1
  14. package/built/src/drivers/OracleDriver.js +217 -2
  15. package/built/src/drivers/OracleDriver.js.map +1 -1
  16. package/built/src/drivers/PostgresDriver.d.ts +9 -1
  17. package/built/src/drivers/PostgresDriver.js +90 -2
  18. package/built/src/drivers/PostgresDriver.js.map +1 -1
  19. package/built/src/drivers/RDSBaseDriver.d.ts +26 -1
  20. package/built/src/drivers/RDSBaseDriver.js +601 -0
  21. package/built/src/drivers/RDSBaseDriver.js.map +1 -1
  22. package/built/src/drivers/RedisDriver.js.map +1 -1
  23. package/built/src/drivers/SQLServerDriver.d.ts +18 -1
  24. package/built/src/drivers/SQLServerDriver.js +282 -6
  25. package/built/src/drivers/SQLServerDriver.js.map +1 -1
  26. package/built/src/drivers/SQLiteDriver.d.ts +7 -1
  27. package/built/src/drivers/SQLiteDriver.js +33 -1
  28. package/built/src/drivers/SQLiteDriver.js.map +1 -1
  29. package/built/src/drivers/aws/AwsCloudFormationServiceClient.js.map +1 -1
  30. package/built/src/drivers/aws/AwsDynamoServiceClient.d.ts +61 -5
  31. package/built/src/drivers/aws/AwsDynamoServiceClient.js +404 -108
  32. package/built/src/drivers/aws/AwsDynamoServiceClient.js.map +1 -1
  33. package/built/src/drivers/aws/AwsS3ServiceClient.js +18 -6
  34. package/built/src/drivers/aws/AwsS3ServiceClient.js.map +1 -1
  35. package/built/src/drivers/aws/AwsSQSServiceClient.js.map +1 -1
  36. package/built/src/drivers/aws/AwsSecretsManagerServiceClient.js.map +1 -1
  37. package/built/src/drivers/aws/AwsServiceClient.js.map +1 -1
  38. package/built/src/drivers/aws/AwsSsmServiceClient.js.map +1 -1
  39. package/built/src/drivers/aws/dynamoDbRdhSummary.d.ts +16 -0
  40. package/built/src/drivers/aws/dynamoDbRdhSummary.js +81 -0
  41. package/built/src/drivers/aws/dynamoDbRdhSummary.js.map +1 -0
  42. package/built/src/drivers/aws/dynamoDbResultMetadata.d.ts +9 -0
  43. package/built/src/drivers/aws/dynamoDbResultMetadata.js +71 -0
  44. package/built/src/drivers/aws/dynamoDbResultMetadata.js.map +1 -0
  45. package/built/src/drivers/index.d.ts +1 -0
  46. package/built/src/drivers/index.js +1 -0
  47. package/built/src/drivers/index.js.map +1 -1
  48. package/built/src/drivers/keycloak/resourceTreeBuilder.js.map +1 -1
  49. package/built/src/drivers/keycloak/scanResultBuilder.js.map +1 -1
  50. package/built/src/drivers/memcache/helper.js.map +1 -1
  51. package/built/src/drivers/providers/index.d.ts +3 -0
  52. package/built/src/drivers/providers/index.js +7 -0
  53. package/built/src/drivers/providers/index.js.map +1 -0
  54. package/built/src/drivers/providers/metrics/adapters/dynamodb/DynamoDbMetricServiceAdapter.d.ts +8 -0
  55. package/built/src/drivers/providers/metrics/adapters/dynamodb/DynamoDbMetricServiceAdapter.js +421 -0
  56. package/built/src/drivers/providers/metrics/adapters/dynamodb/DynamoDbMetricServiceAdapter.js.map +1 -0
  57. package/built/src/drivers/providers/metrics/adapters/dynamodb/DynamoDbOverviewMetricServiceAdapter.d.ts +7 -0
  58. package/built/src/drivers/providers/metrics/adapters/dynamodb/DynamoDbOverviewMetricServiceAdapter.js +84 -0
  59. package/built/src/drivers/providers/metrics/adapters/dynamodb/DynamoDbOverviewMetricServiceAdapter.js.map +1 -0
  60. package/built/src/drivers/providers/metrics/adapters/dynamodb/index.d.ts +2 -0
  61. package/built/src/drivers/providers/metrics/adapters/dynamodb/index.js +6 -0
  62. package/built/src/drivers/providers/metrics/adapters/dynamodb/index.js.map +1 -0
  63. package/built/src/drivers/providers/metrics/adapters/index.d.ts +6 -0
  64. package/built/src/drivers/providers/metrics/adapters/index.js +10 -0
  65. package/built/src/drivers/providers/metrics/adapters/index.js.map +1 -0
  66. package/built/src/drivers/providers/metrics/adapters/logs/CloudWatchLogsMetricServiceAdapter.d.ts +7 -0
  67. package/built/src/drivers/providers/metrics/adapters/logs/CloudWatchLogsMetricServiceAdapter.js +132 -0
  68. package/built/src/drivers/providers/metrics/adapters/logs/CloudWatchLogsMetricServiceAdapter.js.map +1 -0
  69. package/built/src/drivers/providers/metrics/adapters/logs/index.d.ts +1 -0
  70. package/built/src/drivers/providers/metrics/adapters/logs/index.js +5 -0
  71. package/built/src/drivers/providers/metrics/adapters/logs/index.js.map +1 -0
  72. package/built/src/drivers/providers/metrics/adapters/overview/index.d.ts +1 -0
  73. package/built/src/drivers/providers/metrics/adapters/overview/index.js +5 -0
  74. package/built/src/drivers/providers/metrics/adapters/overview/index.js.map +1 -0
  75. package/built/src/drivers/providers/metrics/adapters/overview/overviewMetricAdapterUtils.d.ts +26 -0
  76. package/built/src/drivers/providers/metrics/adapters/overview/overviewMetricAdapterUtils.js +80 -0
  77. package/built/src/drivers/providers/metrics/adapters/overview/overviewMetricAdapterUtils.js.map +1 -0
  78. package/built/src/drivers/providers/metrics/adapters/s3/S3MetricServiceAdapter.d.ts +21 -0
  79. package/built/src/drivers/providers/metrics/adapters/s3/S3MetricServiceAdapter.js +478 -0
  80. package/built/src/drivers/providers/metrics/adapters/s3/S3MetricServiceAdapter.js.map +1 -0
  81. package/built/src/drivers/providers/metrics/adapters/s3/S3OverviewMetricServiceAdapter.d.ts +13 -0
  82. package/built/src/drivers/providers/metrics/adapters/s3/S3OverviewMetricServiceAdapter.js +172 -0
  83. package/built/src/drivers/providers/metrics/adapters/s3/S3OverviewMetricServiceAdapter.js.map +1 -0
  84. package/built/src/drivers/providers/metrics/adapters/s3/index.d.ts +2 -0
  85. package/built/src/drivers/providers/metrics/adapters/s3/index.js +6 -0
  86. package/built/src/drivers/providers/metrics/adapters/s3/index.js.map +1 -0
  87. package/built/src/drivers/providers/metrics/adapters/ses/SesMetricServiceAdapter.d.ts +13 -0
  88. package/built/src/drivers/providers/metrics/adapters/ses/SesMetricServiceAdapter.js +183 -0
  89. package/built/src/drivers/providers/metrics/adapters/ses/SesMetricServiceAdapter.js.map +1 -0
  90. package/built/src/drivers/providers/metrics/adapters/ses/index.d.ts +1 -0
  91. package/built/src/drivers/providers/metrics/adapters/ses/index.js +5 -0
  92. package/built/src/drivers/providers/metrics/adapters/ses/index.js.map +1 -0
  93. package/built/src/drivers/providers/metrics/adapters/sqs/SqsMetricServiceAdapter.d.ts +7 -0
  94. package/built/src/drivers/providers/metrics/adapters/sqs/SqsMetricServiceAdapter.js +174 -0
  95. package/built/src/drivers/providers/metrics/adapters/sqs/SqsMetricServiceAdapter.js.map +1 -0
  96. package/built/src/drivers/providers/metrics/adapters/sqs/SqsOverviewMetricServiceAdapter.d.ts +7 -0
  97. package/built/src/drivers/providers/metrics/adapters/sqs/SqsOverviewMetricServiceAdapter.js +81 -0
  98. package/built/src/drivers/providers/metrics/adapters/sqs/SqsOverviewMetricServiceAdapter.js.map +1 -0
  99. package/built/src/drivers/providers/metrics/adapters/sqs/index.d.ts +2 -0
  100. package/built/src/drivers/providers/metrics/adapters/sqs/index.js +6 -0
  101. package/built/src/drivers/providers/metrics/adapters/sqs/index.js.map +1 -0
  102. package/built/src/drivers/providers/metrics/cloudwatch/CloudWatchMetricsAvailability.d.ts +23 -0
  103. package/built/src/drivers/providers/metrics/cloudwatch/CloudWatchMetricsAvailability.js +69 -0
  104. package/built/src/drivers/providers/metrics/cloudwatch/CloudWatchMetricsAvailability.js.map +1 -0
  105. package/built/src/drivers/providers/metrics/cloudwatch/CloudWatchMetricsCollector.d.ts +24 -0
  106. package/built/src/drivers/providers/metrics/cloudwatch/CloudWatchMetricsCollector.js +49 -0
  107. package/built/src/drivers/providers/metrics/cloudwatch/CloudWatchMetricsCollector.js.map +1 -0
  108. package/built/src/drivers/providers/metrics/cloudwatch/alignSeriesByTimestamp.d.ts +2 -0
  109. package/built/src/drivers/providers/metrics/cloudwatch/alignSeriesByTimestamp.js +16 -0
  110. package/built/src/drivers/providers/metrics/cloudwatch/alignSeriesByTimestamp.js.map +1 -0
  111. package/built/src/drivers/providers/metrics/cloudwatch/cloudWatchMetricsTransport.d.ts +21 -0
  112. package/built/src/drivers/providers/metrics/cloudwatch/cloudWatchMetricsTransport.js +193 -0
  113. package/built/src/drivers/providers/metrics/cloudwatch/cloudWatchMetricsTransport.js.map +1 -0
  114. package/built/src/drivers/providers/metrics/cloudwatch/collectAcrossMetricEndpoints.d.ts +6 -0
  115. package/built/src/drivers/providers/metrics/cloudwatch/collectAcrossMetricEndpoints.js +99 -0
  116. package/built/src/drivers/providers/metrics/cloudwatch/collectAcrossMetricEndpoints.js.map +1 -0
  117. package/built/src/drivers/providers/metrics/cloudwatch/deriveMetricSeries.d.ts +2 -0
  118. package/built/src/drivers/providers/metrics/cloudwatch/deriveMetricSeries.js +100 -0
  119. package/built/src/drivers/providers/metrics/cloudwatch/deriveMetricSeries.js.map +1 -0
  120. package/built/src/drivers/providers/metrics/cloudwatch/index.d.ts +7 -0
  121. package/built/src/drivers/providers/metrics/cloudwatch/index.js +11 -0
  122. package/built/src/drivers/providers/metrics/cloudwatch/index.js.map +1 -0
  123. package/built/src/drivers/providers/metrics/cloudwatch/metricPeriod.d.ts +2 -0
  124. package/built/src/drivers/providers/metrics/cloudwatch/metricPeriod.js +16 -0
  125. package/built/src/drivers/providers/metrics/cloudwatch/metricPeriod.js.map +1 -0
  126. package/built/src/drivers/providers/metrics/index.d.ts +3 -0
  127. package/built/src/drivers/providers/metrics/index.js +7 -0
  128. package/built/src/drivers/providers/metrics/index.js.map +1 -0
  129. package/built/src/drivers/providers/metrics/metricServiceAdapterRegistry.d.ts +8 -0
  130. package/built/src/drivers/providers/metrics/metricServiceAdapterRegistry.js +27 -0
  131. package/built/src/drivers/providers/metrics/metricServiceAdapterRegistry.js.map +1 -0
  132. package/built/src/drivers/providers/performance/DynamoDbPerformanceTuningProvider.d.ts +60 -0
  133. package/built/src/drivers/providers/performance/DynamoDbPerformanceTuningProvider.js +751 -0
  134. package/built/src/drivers/providers/performance/DynamoDbPerformanceTuningProvider.js.map +1 -0
  135. package/built/src/drivers/providers/performance/MySQLPerformanceTuningProvider.d.ts +29 -0
  136. package/built/src/drivers/providers/performance/MySQLPerformanceTuningProvider.js +350 -0
  137. package/built/src/drivers/providers/performance/MySQLPerformanceTuningProvider.js.map +1 -0
  138. package/built/src/drivers/providers/performance/OraclePerformanceTuningProvider.d.ts +37 -0
  139. package/built/src/drivers/providers/performance/OraclePerformanceTuningProvider.js +393 -0
  140. package/built/src/drivers/providers/performance/OraclePerformanceTuningProvider.js.map +1 -0
  141. package/built/src/drivers/providers/performance/PerformanceTuningContextProvider.d.ts +57 -0
  142. package/built/src/drivers/providers/performance/PerformanceTuningContextProvider.js +3 -0
  143. package/built/src/drivers/providers/performance/PerformanceTuningContextProvider.js.map +1 -0
  144. package/built/src/drivers/providers/performance/PostgresPerformanceTuningProvider.d.ts +24 -0
  145. package/built/src/drivers/providers/performance/PostgresPerformanceTuningProvider.js +328 -0
  146. package/built/src/drivers/providers/performance/PostgresPerformanceTuningProvider.js.map +1 -0
  147. package/built/src/drivers/providers/performance/SQLServerPerformanceTuningProvider.d.ts +29 -0
  148. package/built/src/drivers/providers/performance/SQLServerPerformanceTuningProvider.js +420 -0
  149. package/built/src/drivers/providers/performance/SQLServerPerformanceTuningProvider.js.map +1 -0
  150. package/built/src/drivers/providers/performance/dynamoDbCapacity.d.ts +38 -0
  151. package/built/src/drivers/providers/performance/dynamoDbCapacity.js +111 -0
  152. package/built/src/drivers/providers/performance/dynamoDbCapacity.js.map +1 -0
  153. package/built/src/drivers/providers/performance/dynamoDbCloudWatchMetrics.d.ts +20 -0
  154. package/built/src/drivers/providers/performance/dynamoDbCloudWatchMetrics.js +221 -0
  155. package/built/src/drivers/providers/performance/dynamoDbCloudWatchMetrics.js.map +1 -0
  156. package/built/src/drivers/providers/performance/dynamoPartiqlAccessPattern.d.ts +18 -0
  157. package/built/src/drivers/providers/performance/dynamoPartiqlAccessPattern.js +736 -0
  158. package/built/src/drivers/providers/performance/dynamoPartiqlAccessPattern.js.map +1 -0
  159. package/built/src/drivers/providers/performance/index.d.ts +23 -0
  160. package/built/src/drivers/providers/performance/index.js +27 -0
  161. package/built/src/drivers/providers/performance/index.js.map +1 -0
  162. package/built/src/drivers/providers/performance/mysqlActualPlanTextParser.d.ts +26 -0
  163. package/built/src/drivers/providers/performance/mysqlActualPlanTextParser.js +181 -0
  164. package/built/src/drivers/providers/performance/mysqlActualPlanTextParser.js.map +1 -0
  165. package/built/src/drivers/providers/performance/mysqlCatalogMapper.d.ts +11 -0
  166. package/built/src/drivers/providers/performance/mysqlCatalogMapper.js +218 -0
  167. package/built/src/drivers/providers/performance/mysqlCatalogMapper.js.map +1 -0
  168. package/built/src/drivers/providers/performance/mysqlPlanParser.d.ts +11 -0
  169. package/built/src/drivers/providers/performance/mysqlPlanParser.js +209 -0
  170. package/built/src/drivers/providers/performance/mysqlPlanParser.js.map +1 -0
  171. package/built/src/drivers/providers/performance/oracleActualPlanTextParser.d.ts +10 -0
  172. package/built/src/drivers/providers/performance/oracleActualPlanTextParser.js +245 -0
  173. package/built/src/drivers/providers/performance/oracleActualPlanTextParser.js.map +1 -0
  174. package/built/src/drivers/providers/performance/oracleCatalogMapper.d.ts +11 -0
  175. package/built/src/drivers/providers/performance/oracleCatalogMapper.js +226 -0
  176. package/built/src/drivers/providers/performance/oracleCatalogMapper.js.map +1 -0
  177. package/built/src/drivers/providers/performance/oraclePlanParser.d.ts +18 -0
  178. package/built/src/drivers/providers/performance/oraclePlanParser.js +223 -0
  179. package/built/src/drivers/providers/performance/oraclePlanParser.js.map +1 -0
  180. package/built/src/drivers/providers/performance/performanceTuningDiagnosticHelpers.d.ts +2 -0
  181. package/built/src/drivers/providers/performance/performanceTuningDiagnosticHelpers.js +13 -0
  182. package/built/src/drivers/providers/performance/performanceTuningDiagnosticHelpers.js.map +1 -0
  183. package/built/src/drivers/providers/performance/planNodeMath.d.ts +20 -0
  184. package/built/src/drivers/providers/performance/planNodeMath.js +82 -0
  185. package/built/src/drivers/providers/performance/planNodeMath.js.map +1 -0
  186. package/built/src/drivers/providers/performance/postgresCatalogMapper.d.ts +20 -0
  187. package/built/src/drivers/providers/performance/postgresCatalogMapper.js +287 -0
  188. package/built/src/drivers/providers/performance/postgresCatalogMapper.js.map +1 -0
  189. package/built/src/drivers/providers/performance/postgresPlanParser.d.ts +13 -0
  190. package/built/src/drivers/providers/performance/postgresPlanParser.js +258 -0
  191. package/built/src/drivers/providers/performance/postgresPlanParser.js.map +1 -0
  192. package/built/src/drivers/providers/performance/sqlServerActualPlanXmlParser.d.ts +10 -0
  193. package/built/src/drivers/providers/performance/sqlServerActualPlanXmlParser.js +252 -0
  194. package/built/src/drivers/providers/performance/sqlServerActualPlanXmlParser.js.map +1 -0
  195. package/built/src/drivers/providers/performance/sqlServerCatalogMapper.d.ts +20 -0
  196. package/built/src/drivers/providers/performance/sqlServerCatalogMapper.js +254 -0
  197. package/built/src/drivers/providers/performance/sqlServerCatalogMapper.js.map +1 -0
  198. package/built/src/drivers/providers/performance/sqlServerPlanParser.d.ts +10 -0
  199. package/built/src/drivers/providers/performance/sqlServerPlanParser.js +199 -0
  200. package/built/src/drivers/providers/performance/sqlServerPlanParser.js.map +1 -0
  201. package/built/src/drivers/providers/performance/vendorRowCoercion.d.ts +6 -0
  202. package/built/src/drivers/providers/performance/vendorRowCoercion.js +42 -0
  203. package/built/src/drivers/providers/performance/vendorRowCoercion.js.map +1 -0
  204. package/built/src/drivers/providers/rdbDashboard/RdbDashboardProvider.d.ts +8 -0
  205. package/built/src/drivers/providers/rdbDashboard/RdbDashboardProvider.js +3 -0
  206. package/built/src/drivers/providers/rdbDashboard/RdbDashboardProvider.js.map +1 -0
  207. package/built/src/drivers/providers/rdbDashboard/RdbSampleAccumulator.d.ts +22 -0
  208. package/built/src/drivers/providers/rdbDashboard/RdbSampleAccumulator.js +331 -0
  209. package/built/src/drivers/providers/rdbDashboard/RdbSampleAccumulator.js.map +1 -0
  210. package/built/src/drivers/providers/rdbDashboard/index.d.ts +9 -0
  211. package/built/src/drivers/providers/rdbDashboard/index.js +13 -0
  212. package/built/src/drivers/providers/rdbDashboard/index.js.map +1 -0
  213. package/built/src/drivers/providers/rdbDashboard/rdbDashboardErrors.d.ts +3 -0
  214. package/built/src/drivers/providers/rdbDashboard/rdbDashboardErrors.js +10 -0
  215. package/built/src/drivers/providers/rdbDashboard/rdbDashboardErrors.js.map +1 -0
  216. package/built/src/drivers/providers/rdbDashboard/rdbDashboardValueUtils.d.ts +7 -0
  217. package/built/src/drivers/providers/rdbDashboard/rdbDashboardValueUtils.js +31 -0
  218. package/built/src/drivers/providers/rdbDashboard/rdbDashboardValueUtils.js.map +1 -0
  219. package/built/src/drivers/providers/rdbDashboard/validateRdbDashboard.d.ts +3 -0
  220. package/built/src/drivers/providers/rdbDashboard/validateRdbDashboard.js +73 -0
  221. package/built/src/drivers/providers/rdbDashboard/validateRdbDashboard.js.map +1 -0
  222. package/built/src/drivers/providers/rdbDashboard/vendors/mysql/MySQLRdbDashboardProvider.d.ts +16 -0
  223. package/built/src/drivers/providers/rdbDashboard/vendors/mysql/MySQLRdbDashboardProvider.js +247 -0
  224. package/built/src/drivers/providers/rdbDashboard/vendors/mysql/MySQLRdbDashboardProvider.js.map +1 -0
  225. package/built/src/drivers/providers/rdbDashboard/vendors/mysql/index.d.ts +3 -0
  226. package/built/src/drivers/providers/rdbDashboard/vendors/mysql/index.js +7 -0
  227. package/built/src/drivers/providers/rdbDashboard/vendors/mysql/index.js.map +1 -0
  228. package/built/src/drivers/providers/rdbDashboard/vendors/mysql/mysqlDashboardCatalog.d.ts +4 -0
  229. package/built/src/drivers/providers/rdbDashboard/vendors/mysql/mysqlDashboardCatalog.js +279 -0
  230. package/built/src/drivers/providers/rdbDashboard/vendors/mysql/mysqlDashboardCatalog.js.map +1 -0
  231. package/built/src/drivers/providers/rdbDashboard/vendors/mysql/mysqlDashboardQueries.d.ts +5 -0
  232. package/built/src/drivers/providers/rdbDashboard/vendors/mysql/mysqlDashboardQueries.js +41 -0
  233. package/built/src/drivers/providers/rdbDashboard/vendors/mysql/mysqlDashboardQueries.js.map +1 -0
  234. package/built/src/drivers/providers/rdbDashboard/vendors/oracle/OracleRdbDashboardProvider.d.ts +21 -0
  235. package/built/src/drivers/providers/rdbDashboard/vendors/oracle/OracleRdbDashboardProvider.js +420 -0
  236. package/built/src/drivers/providers/rdbDashboard/vendors/oracle/OracleRdbDashboardProvider.js.map +1 -0
  237. package/built/src/drivers/providers/rdbDashboard/vendors/oracle/index.d.ts +3 -0
  238. package/built/src/drivers/providers/rdbDashboard/vendors/oracle/index.js +7 -0
  239. package/built/src/drivers/providers/rdbDashboard/vendors/oracle/index.js.map +1 -0
  240. package/built/src/drivers/providers/rdbDashboard/vendors/oracle/oracleDashboardCatalog.d.ts +12 -0
  241. package/built/src/drivers/providers/rdbDashboard/vendors/oracle/oracleDashboardCatalog.js +117 -0
  242. package/built/src/drivers/providers/rdbDashboard/vendors/oracle/oracleDashboardCatalog.js.map +1 -0
  243. package/built/src/drivers/providers/rdbDashboard/vendors/oracle/oracleDashboardQueries.d.ts +8 -0
  244. package/built/src/drivers/providers/rdbDashboard/vendors/oracle/oracleDashboardQueries.js +60 -0
  245. package/built/src/drivers/providers/rdbDashboard/vendors/oracle/oracleDashboardQueries.js.map +1 -0
  246. package/built/src/drivers/providers/rdbDashboard/vendors/postgres/PostgresRdbDashboardProvider.d.ts +13 -0
  247. package/built/src/drivers/providers/rdbDashboard/vendors/postgres/PostgresRdbDashboardProvider.js +216 -0
  248. package/built/src/drivers/providers/rdbDashboard/vendors/postgres/PostgresRdbDashboardProvider.js.map +1 -0
  249. package/built/src/drivers/providers/rdbDashboard/vendors/postgres/index.d.ts +3 -0
  250. package/built/src/drivers/providers/rdbDashboard/vendors/postgres/index.js +7 -0
  251. package/built/src/drivers/providers/rdbDashboard/vendors/postgres/index.js.map +1 -0
  252. package/built/src/drivers/providers/rdbDashboard/vendors/postgres/postgresDashboardCatalog.d.ts +4 -0
  253. package/built/src/drivers/providers/rdbDashboard/vendors/postgres/postgresDashboardCatalog.js +218 -0
  254. package/built/src/drivers/providers/rdbDashboard/vendors/postgres/postgresDashboardCatalog.js.map +1 -0
  255. package/built/src/drivers/providers/rdbDashboard/vendors/postgres/postgresDashboardQueries.d.ts +3 -0
  256. package/built/src/drivers/providers/rdbDashboard/vendors/postgres/postgresDashboardQueries.js +70 -0
  257. package/built/src/drivers/providers/rdbDashboard/vendors/postgres/postgresDashboardQueries.js.map +1 -0
  258. package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/SQLiteRdbDashboardProvider.d.ts +20 -0
  259. package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/SQLiteRdbDashboardProvider.js +259 -0
  260. package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/SQLiteRdbDashboardProvider.js.map +1 -0
  261. package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/index.d.ts +3 -0
  262. package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/index.js +7 -0
  263. package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/index.js.map +1 -0
  264. package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/sqliteDashboardCatalog.d.ts +5 -0
  265. package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/sqliteDashboardCatalog.js +135 -0
  266. package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/sqliteDashboardCatalog.js.map +1 -0
  267. package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/sqliteDashboardQueries.d.ts +4 -0
  268. package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/sqliteDashboardQueries.js +14 -0
  269. package/built/src/drivers/providers/rdbDashboard/vendors/sqlite/sqliteDashboardQueries.js.map +1 -0
  270. package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/SQLServerRdbDashboardProvider.d.ts +16 -0
  271. package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/SQLServerRdbDashboardProvider.js +301 -0
  272. package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/SQLServerRdbDashboardProvider.js.map +1 -0
  273. package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/index.d.ts +3 -0
  274. package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/index.js +7 -0
  275. package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/index.js.map +1 -0
  276. package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/sqlServerDashboardCatalog.d.ts +4 -0
  277. package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/sqlServerDashboardCatalog.js +130 -0
  278. package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/sqlServerDashboardCatalog.js.map +1 -0
  279. package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/sqlServerDashboardQueries.d.ts +6 -0
  280. package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/sqlServerDashboardQueries.js +91 -0
  281. package/built/src/drivers/providers/rdbDashboard/vendors/sqlserver/sqlServerDashboardQueries.js.map +1 -0
  282. package/built/src/helpers/ProposalHelper.js.map +1 -1
  283. package/built/src/helpers/SQLHelper.d.ts +1 -1
  284. package/built/src/helpers/SQLHelper.js +3 -1
  285. package/built/src/helpers/SQLHelper.js.map +1 -1
  286. package/built/src/helpers/dynamoDbBillingMode.d.ts +6 -0
  287. package/built/src/helpers/dynamoDbBillingMode.js +16 -0
  288. package/built/src/helpers/dynamoDbBillingMode.js.map +1 -0
  289. package/built/src/helpers/index.d.ts +1 -0
  290. package/built/src/helpers/index.js +1 -0
  291. package/built/src/helpers/index.js.map +1 -1
  292. package/built/src/helpers/prompts/Auth0PromptHelper.js.map +1 -1
  293. package/built/src/helpers/prompts/AwsPromptHelper.js.map +1 -1
  294. package/built/src/helpers/prompts/KeycloakPromptHelper.js.map +1 -1
  295. package/built/src/helpers/prompts/MemcachePromptHelper.js.map +1 -1
  296. package/built/src/helpers/prompts/MqttPromptHelper.js.map +1 -1
  297. package/built/src/helpers/prompts/RdsPromptHelper.js.map +1 -1
  298. package/built/src/helpers/prompts/RedisPromptHelper.js.map +1 -1
  299. package/built/src/helpers/prompts/SchemaPromptHelper.js.map +1 -1
  300. package/built/src/helpers/prompts/promptFormatUtils.js.map +1 -1
  301. package/built/src/helpers/sql/mutationQuery.js.map +1 -1
  302. package/built/src/helpers/sql/parameterNormalizer.js +2 -2
  303. package/built/src/helpers/sql/parameterNormalizer.js.map +1 -1
  304. package/built/src/helpers/sql/queryParser.js +272 -48
  305. package/built/src/helpers/sql/queryParser.js.map +1 -1
  306. package/built/src/helpers/sql/quote.d.ts +2 -0
  307. package/built/src/helpers/sql/quote.js +9 -2
  308. package/built/src/helpers/sql/quote.js.map +1 -1
  309. package/built/src/helpers/sql/selectQuery.js.map +1 -1
  310. package/built/src/resource/aws.d.ts +2 -1
  311. package/built/src/resource/aws.js +76 -2
  312. package/built/src/resource/aws.js.map +1 -1
  313. package/built/src/resource/base.d.ts +2 -1
  314. package/built/src/resource/base.js.map +1 -1
  315. package/built/src/resource/fromJson.js.map +1 -1
  316. package/built/src/resource/iam.js.map +1 -1
  317. package/built/src/resource/index.js.map +1 -1
  318. package/built/src/resource/keyValue.js.map +1 -1
  319. package/built/src/types/drivers/EstimatedBindParameter.d.ts +12 -0
  320. package/built/src/types/drivers/EstimatedBindParameter.js +3 -0
  321. package/built/src/types/drivers/EstimatedBindParameter.js.map +1 -0
  322. package/built/src/types/drivers/StatementStatistics.d.ts +13 -0
  323. package/built/src/types/drivers/StatementStatistics.js +10 -0
  324. package/built/src/types/drivers/StatementStatistics.js.map +1 -0
  325. package/built/src/types/drivers/index.d.ts +5 -0
  326. package/built/src/types/drivers/index.js +5 -0
  327. package/built/src/types/drivers/index.js.map +1 -1
  328. package/built/src/types/drivers/metrics/CloudWatchMetrics.d.ts +168 -0
  329. package/built/src/types/drivers/metrics/CloudWatchMetrics.js +3 -0
  330. package/built/src/types/drivers/metrics/CloudWatchMetrics.js.map +1 -0
  331. package/built/src/types/drivers/metrics/index.d.ts +1 -0
  332. package/built/src/types/drivers/metrics/index.js +5 -0
  333. package/built/src/types/drivers/metrics/index.js.map +1 -0
  334. package/built/src/types/drivers/performance/DynamoDbPerformanceTuningCapabilities.d.ts +12 -0
  335. package/built/src/types/drivers/performance/DynamoDbPerformanceTuningCapabilities.js +3 -0
  336. package/built/src/types/drivers/performance/DynamoDbPerformanceTuningCapabilities.js.map +1 -0
  337. package/built/src/types/drivers/performance/DynamoDbPerformanceTuningContext.d.ts +302 -0
  338. package/built/src/types/drivers/performance/DynamoDbPerformanceTuningContext.js +7 -0
  339. package/built/src/types/drivers/performance/DynamoDbPerformanceTuningContext.js.map +1 -0
  340. package/built/src/types/drivers/performance/DynamoDbPerformanceTuningDiagnostic.d.ts +13 -0
  341. package/built/src/types/drivers/performance/DynamoDbPerformanceTuningDiagnostic.js +3 -0
  342. package/built/src/types/drivers/performance/DynamoDbPerformanceTuningDiagnostic.js.map +1 -0
  343. package/built/src/types/drivers/performance/PerformanceTuningCapabilities.d.ts +17 -0
  344. package/built/src/types/drivers/performance/PerformanceTuningCapabilities.js +3 -0
  345. package/built/src/types/drivers/performance/PerformanceTuningCapabilities.js.map +1 -0
  346. package/built/src/types/drivers/performance/PerformanceTuningContext.d.ts +263 -0
  347. package/built/src/types/drivers/performance/PerformanceTuningContext.js +3 -0
  348. package/built/src/types/drivers/performance/PerformanceTuningContext.js.map +1 -0
  349. package/built/src/types/drivers/performance/PerformanceTuningDiagnostic.d.ts +28 -0
  350. package/built/src/types/drivers/performance/PerformanceTuningDiagnostic.js +3 -0
  351. package/built/src/types/drivers/performance/PerformanceTuningDiagnostic.js.map +1 -0
  352. package/built/src/types/drivers/performance/PlanNode.d.ts +37 -0
  353. package/built/src/types/drivers/performance/PlanNode.js +3 -0
  354. package/built/src/types/drivers/performance/PlanNode.js.map +1 -0
  355. package/built/src/types/drivers/performance/index.d.ts +7 -0
  356. package/built/src/types/drivers/performance/index.js +11 -0
  357. package/built/src/types/drivers/performance/index.js.map +1 -0
  358. package/built/src/types/drivers/rdbDashboard/RdbDashboardCapabilities.d.ts +30 -0
  359. package/built/src/types/drivers/rdbDashboard/RdbDashboardCapabilities.js +3 -0
  360. package/built/src/types/drivers/rdbDashboard/RdbDashboardCapabilities.js.map +1 -0
  361. package/built/src/types/drivers/rdbDashboard/RdbDashboardDefinition.d.ts +134 -0
  362. package/built/src/types/drivers/rdbDashboard/RdbDashboardDefinition.js +14 -0
  363. package/built/src/types/drivers/rdbDashboard/RdbDashboardDefinition.js.map +1 -0
  364. package/built/src/types/drivers/rdbDashboard/RdbDashboardSample.d.ts +69 -0
  365. package/built/src/types/drivers/rdbDashboard/RdbDashboardSample.js +3 -0
  366. package/built/src/types/drivers/rdbDashboard/RdbDashboardSample.js.map +1 -0
  367. package/built/src/types/drivers/rdbDashboard/index.d.ts +3 -0
  368. package/built/src/types/drivers/rdbDashboard/index.js +7 -0
  369. package/built/src/types/drivers/rdbDashboard/index.js.map +1 -0
  370. package/built/src/types/helpers/index.js.map +1 -1
  371. package/built/src/types/index.d.ts +1 -0
  372. package/built/src/types/index.js +1 -0
  373. package/built/src/types/index.js.map +1 -1
  374. package/built/src/types/observability/dashboardLaunchCapability.d.ts +11 -0
  375. package/built/src/types/observability/dashboardLaunchCapability.js +22 -0
  376. package/built/src/types/observability/dashboardLaunchCapability.js.map +1 -0
  377. package/built/src/types/observability/index.d.ts +1 -0
  378. package/built/src/types/observability/index.js +5 -0
  379. package/built/src/types/observability/index.js.map +1 -0
  380. package/built/src/types/resource/AwsCfnStackAttributes.js.map +1 -1
  381. package/built/src/types/resource/AwsDynamoTableAttributes.d.ts +13 -0
  382. package/built/src/types/resource/AwsServiceType.d.ts +1 -1
  383. package/built/src/types/resource/AwsSupplyCredentialType.js.map +1 -1
  384. package/built/src/types/resource/ConnectionSetting.js.map +1 -1
  385. package/built/src/types/resource/OracleColumnType.js.map +1 -1
  386. package/built/src/types/resource/RedisKeyType.d.ts +1 -1
  387. package/built/src/types/resource/ResourceType.js.map +1 -1
  388. package/built/src/types/resource/SQLServerColumnType.js.map +1 -1
  389. package/built/src/utils/bindParameterEstimator.d.ts +22 -0
  390. package/built/src/utils/bindParameterEstimator.js +400 -0
  391. package/built/src/utils/bindParameterEstimator.js.map +1 -0
  392. package/built/src/utils/cfn/applicationDiagram.js.map +1 -1
  393. package/built/src/utils/cfn/applicationRelations.js.map +1 -1
  394. package/built/src/utils/cfn/cfnDependencyGraphDiagram.js.map +1 -1
  395. package/built/src/utils/cfn/deploymentTopology.js.map +1 -1
  396. package/built/src/utils/cfn/diagramFileModel.js.map +1 -1
  397. package/built/src/utils/cfn/drawio/cfnDependencyGraphDiagram.js.map +1 -1
  398. package/built/src/utils/cfn/drawio/commonCells.js.map +1 -1
  399. package/built/src/utils/cfn/drawio/multiAzInfrastructureDiagram.js.map +1 -1
  400. package/built/src/utils/cfn/drawioApplicationDiagram.js.map +1 -1
  401. package/built/src/utils/cfn/drawioInfrastructureDiagrams.js.map +1 -1
  402. package/built/src/utils/cfn/drawioXml.js.map +1 -1
  403. package/built/src/utils/cfn/generateDiagram.js.map +1 -1
  404. package/built/src/utils/cfn/icons.js.map +1 -1
  405. package/built/src/utils/cfn/index.js.map +1 -1
  406. package/built/src/utils/cfn/intrinsics.js.map +1 -1
  407. package/built/src/utils/cfn/multiAzDeploymentTrafficPathsAndProtection.js.map +1 -1
  408. package/built/src/utils/cfn/multiAzDeploymentTrafficPathsAndProtectionDiagram.js.map +1 -1
  409. package/built/src/utils/cfn/naming.js.map +1 -1
  410. package/built/src/utils/cfn/resourceDependencies.js.map +1 -1
  411. package/built/src/utils/cfn/templateParsing.js.map +1 -1
  412. package/built/src/utils/cfn/viewpoints.js.map +1 -1
  413. package/built/src/utils/csv.js.map +1 -1
  414. package/built/src/utils/dbType.js.map +1 -1
  415. package/built/src/utils/diagramLayout/elkLayoutEngine.js.map +1 -1
  416. package/built/src/utils/diagramLayout/index.js.map +1 -1
  417. package/built/src/utils/diagramLayout/normalizeLayout.js.map +1 -1
  418. package/built/src/utils/drawio/drawioXml.js.map +1 -1
  419. package/built/src/utils/drawio/index.js.map +1 -1
  420. package/built/src/utils/dynamoDbPerformanceTuningContextValidator.d.ts +3 -0
  421. package/built/src/utils/dynamoDbPerformanceTuningContextValidator.js +440 -0
  422. package/built/src/utils/dynamoDbPerformanceTuningContextValidator.js.map +1 -0
  423. package/built/src/utils/er/erDiagramDrawioGenerator.js.map +1 -1
  424. package/built/src/utils/er/erDiagramDrawioGeneratorAuto.js.map +1 -1
  425. package/built/src/utils/er/erDiagramGenerator.js.map +1 -1
  426. package/built/src/utils/er/index.d.ts +1 -0
  427. package/built/src/utils/er/index.js +3 -1
  428. package/built/src/utils/er/index.js.map +1 -1
  429. package/built/src/utils/er/performanceQueryDiagram.d.ts +18 -0
  430. package/built/src/utils/er/performanceQueryDiagram.js +381 -0
  431. package/built/src/utils/er/performanceQueryDiagram.js.map +1 -0
  432. package/built/src/utils/index.d.ts +5 -0
  433. package/built/src/utils/index.js +5 -0
  434. package/built/src/utils/index.js.map +1 -1
  435. package/built/src/utils/log/buildSqlExecutions.js.map +1 -1
  436. package/built/src/utils/log/constant/base.js.map +1 -1
  437. package/built/src/utils/log/constant/logEventSplitPreset.js.map +1 -1
  438. package/built/src/utils/log/constant/sqlLogParsePreset.js.map +1 -1
  439. package/built/src/utils/log/detect/presetDetector.js.map +1 -1
  440. package/built/src/utils/log/extract/runExtractors.js.map +1 -1
  441. package/built/src/utils/log/logSummary.js.map +1 -1
  442. package/built/src/utils/log/rdh/convertExtractedSqlRdhResult.js.map +1 -1
  443. package/built/src/utils/log/sql/removeSqlComments.js.map +1 -1
  444. package/built/src/utils/log/validator.js.map +1 -1
  445. package/built/src/utils/performanceTuningContext.d.ts +45 -0
  446. package/built/src/utils/performanceTuningContext.js +149 -0
  447. package/built/src/utils/performanceTuningContext.js.map +1 -0
  448. package/built/src/utils/performanceTuningContextValidator.d.ts +3 -0
  449. package/built/src/utils/performanceTuningContextValidator.js +364 -0
  450. package/built/src/utils/performanceTuningContextValidator.js.map +1 -0
  451. package/built/src/utils/statementStatistics.d.ts +11 -0
  452. package/built/src/utils/statementStatistics.js +39 -0
  453. package/built/src/utils/statementStatistics.js.map +1 -0
  454. package/package.json +38 -32
@@ -0,0 +1,751 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DynamoDbPerformanceTuningProvider = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const dynamoPartiqlAccessPattern_1 = require("./dynamoPartiqlAccessPattern");
6
+ const dynamoDbBillingMode_1 = require("../../../helpers/dynamoDbBillingMode");
7
+ const DEFAULT_MAX_PAYLOAD_BYTES = 200000;
8
+ const MAX_MAX_PAYLOAD_BYTES = 2000000;
9
+ const DEFAULT_MAX_INDEXES = 20;
10
+ const MAX_MAX_INDEXES = 100;
11
+ const DEFAULT_MAX_EVALUATED_ITEMS = 100;
12
+ const HIGH_SCANNED_TO_RETURNED_MIN_SCANNED = 100;
13
+ const HIGH_SCANNED_TO_RETURNED_MAX_PASS_RATE = 0.1;
14
+ function monitoringUnavailableMessage(mode) {
15
+ return mode === 'cloudWatchNotSelected'
16
+ ? 'CloudWatch metrics and Contributor Insights are not collected because CloudWatch is not enabled for this connection.'
17
+ : 'CloudWatch metrics and Contributor Insights are outside the scope of local/custom DynamoDB endpoints.';
18
+ }
19
+ function toCloudWatchOperation(operation) {
20
+ return operation === 'PartiQLSelect' ? 'ExecuteStatement' : operation;
21
+ }
22
+ function mapKeySchema(keySchema, attributeDefinitions) {
23
+ var _a, _b;
24
+ const partitionKeyName = (_a = keySchema === null || keySchema === void 0 ? void 0 : keySchema.find((k) => k.KeyType === 'HASH')) === null || _a === void 0 ? void 0 : _a.AttributeName;
25
+ if (!partitionKeyName)
26
+ return undefined;
27
+ const typeOf = (name) => {
28
+ var _a, _b;
29
+ return (_b = (_a = attributeDefinitions === null || attributeDefinitions === void 0 ? void 0 : attributeDefinitions.find((a) => a.AttributeName === name)) === null || _a === void 0 ? void 0 : _a.AttributeType) !== null && _b !== void 0 ? _b : 'S';
30
+ };
31
+ const sortKeyName = (_b = keySchema === null || keySchema === void 0 ? void 0 : keySchema.find((k) => k.KeyType === 'RANGE')) === null || _b === void 0 ? void 0 : _b.AttributeName;
32
+ return {
33
+ partitionKey: {
34
+ attributeName: partitionKeyName,
35
+ attributeType: typeOf(partitionKeyName),
36
+ },
37
+ sortKey: sortKeyName
38
+ ? { attributeName: sortKeyName, attributeType: typeOf(sortKeyName) }
39
+ : undefined,
40
+ };
41
+ }
42
+ function mapProjection(projection) {
43
+ var _a;
44
+ const type = projection === null || projection === void 0 ? void 0 : projection.ProjectionType;
45
+ return {
46
+ projectionType: type === 'ALL' || type === 'KEYS_ONLY' || type === 'INCLUDE'
47
+ ? type
48
+ : 'unknown',
49
+ nonKeyAttributes: type === 'INCLUDE' ? (_a = projection === null || projection === void 0 ? void 0 : projection.NonKeyAttributes) !== null && _a !== void 0 ? _a : [] : undefined,
50
+ };
51
+ }
52
+ function mapThroughput(t) {
53
+ if (!t ||
54
+ (t.ReadCapacityUnits === undefined && t.WriteCapacityUnits === undefined))
55
+ return undefined;
56
+ return {
57
+ readCapacityUnits: t.ReadCapacityUnits,
58
+ writeCapacityUnits: t.WriteCapacityUnits,
59
+ };
60
+ }
61
+ function mapWarmThroughput(w) {
62
+ if (!w ||
63
+ (w.ReadUnitsPerSecond === undefined && w.WriteUnitsPerSecond === undefined))
64
+ return undefined;
65
+ return {
66
+ readCapacityUnits: w.ReadUnitsPerSecond,
67
+ writeCapacityUnits: w.WriteUnitsPerSecond,
68
+ };
69
+ }
70
+ function mapIndex(index, indexType, tableAttributeDefinitions) {
71
+ var _a, _b, _c, _d;
72
+ if (!index.IndexName)
73
+ return undefined;
74
+ const gsi = indexType === 'GSI'
75
+ ? index
76
+ : undefined;
77
+ return {
78
+ indexName: index.IndexName,
79
+ indexType,
80
+ status: gsi === null || gsi === void 0 ? void 0 : gsi.IndexStatus,
81
+ keySchema: (_a = mapKeySchema(index.KeySchema, tableAttributeDefinitions)) !== null && _a !== void 0 ? _a : {
82
+ partitionKey: {
83
+ attributeName: (_d = (_c = (_b = index.KeySchema) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.AttributeName) !== null && _d !== void 0 ? _d : 'unknown',
84
+ attributeType: 'S',
85
+ },
86
+ },
87
+ projection: mapProjection(index.Projection),
88
+ itemCount: index.ItemCount !== undefined
89
+ ? {
90
+ value: index.ItemCount,
91
+ estimated: true,
92
+ source: 'DescribeTable.ItemCount',
93
+ }
94
+ : undefined,
95
+ indexSizeBytes: index.IndexSizeBytes !== undefined
96
+ ? {
97
+ value: index.IndexSizeBytes,
98
+ estimated: true,
99
+ source: 'DescribeTable.IndexSizeBytes',
100
+ }
101
+ : undefined,
102
+ provisionedThroughput: gsi
103
+ ? mapThroughput(gsi.ProvisionedThroughput)
104
+ : undefined,
105
+ onDemandThroughput: (gsi === null || gsi === void 0 ? void 0 : gsi.OnDemandThroughput)
106
+ ? {
107
+ maxReadRequestUnits: gsi.OnDemandThroughput.MaxReadRequestUnits,
108
+ maxWriteRequestUnits: gsi.OnDemandThroughput.MaxWriteRequestUnits,
109
+ }
110
+ : undefined,
111
+ warmThroughput: gsi ? mapWarmThroughput(gsi.WarmThroughput) : undefined,
112
+ };
113
+ }
114
+ function mapTableContext(table, ttl, contributorInsights) {
115
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
116
+ const keySchema = (_a = mapKeySchema(table.KeySchema, table.AttributeDefinitions)) !== null && _a !== void 0 ? _a : {
117
+ partitionKey: {
118
+ attributeName: (_d = (_c = (_b = table.KeySchema) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.AttributeName) !== null && _d !== void 0 ? _d : 'unknown',
119
+ attributeType: 'S',
120
+ },
121
+ };
122
+ return {
123
+ tableName: (_e = table.TableName) !== null && _e !== void 0 ? _e : '',
124
+ status: table.TableStatus,
125
+ billingMode: (0, dynamoDbBillingMode_1.resolveDynamoDbBillingMode)({
126
+ billingMode: (_f = table.BillingModeSummary) === null || _f === void 0 ? void 0 : _f.BillingMode,
127
+ readCapacityUnits: (_g = table.ProvisionedThroughput) === null || _g === void 0 ? void 0 : _g.ReadCapacityUnits,
128
+ writeCapacityUnits: (_h = table.ProvisionedThroughput) === null || _h === void 0 ? void 0 : _h.WriteCapacityUnits,
129
+ }),
130
+ keySchema,
131
+ attributeDefinitions: ((_j = table.AttributeDefinitions) !== null && _j !== void 0 ? _j : [])
132
+ .filter((a) => !!a.AttributeName)
133
+ .map((a) => ({
134
+ attributeName: a.AttributeName,
135
+ attributeType: a.AttributeType,
136
+ })),
137
+ localSecondaryIndexes: ((_k = table.LocalSecondaryIndexes) !== null && _k !== void 0 ? _k : [])
138
+ .map((i) => mapIndex(i, 'LSI', table.AttributeDefinitions))
139
+ .filter((i) => !!i),
140
+ globalSecondaryIndexes: ((_l = table.GlobalSecondaryIndexes) !== null && _l !== void 0 ? _l : [])
141
+ .map((i) => mapIndex(i, 'GSI', table.AttributeDefinitions))
142
+ .filter((i) => !!i),
143
+ provisionedThroughput: mapThroughput(table.ProvisionedThroughput),
144
+ onDemandThroughput: table.OnDemandThroughput
145
+ ? {
146
+ maxReadRequestUnits: table.OnDemandThroughput.MaxReadRequestUnits,
147
+ maxWriteRequestUnits: table.OnDemandThroughput.MaxWriteRequestUnits,
148
+ }
149
+ : undefined,
150
+ warmThroughput: mapWarmThroughput(table.WarmThroughput),
151
+ itemCount: table.ItemCount !== undefined
152
+ ? {
153
+ value: table.ItemCount,
154
+ estimated: true,
155
+ source: 'DescribeTable.ItemCount',
156
+ }
157
+ : undefined,
158
+ tableSizeBytes: table.TableSizeBytes !== undefined
159
+ ? {
160
+ value: table.TableSizeBytes,
161
+ estimated: true,
162
+ source: 'DescribeTable.TableSizeBytes',
163
+ }
164
+ : undefined,
165
+ tableClass: (_m = table.TableClassSummary) === null || _m === void 0 ? void 0 : _m.TableClass,
166
+ ttl: (ttl === null || ttl === void 0 ? void 0 : ttl.TimeToLiveStatus) !== undefined
167
+ ? { status: ttl.TimeToLiveStatus, attributeName: ttl.AttributeName }
168
+ : undefined,
169
+ contributorInsights,
170
+ };
171
+ }
172
+ function resolveTargetKeySchema(table, indexName) {
173
+ if (!indexName)
174
+ return { keySchema: table.keySchema };
175
+ const gsi = table.globalSecondaryIndexes.find((i) => i.indexName === indexName);
176
+ if (gsi)
177
+ return { keySchema: gsi.keySchema, indexType: 'GSI' };
178
+ const lsi = table.localSecondaryIndexes.find((i) => i.indexName === indexName);
179
+ if (lsi)
180
+ return { keySchema: lsi.keySchema, indexType: 'LSI' };
181
+ return undefined;
182
+ }
183
+ function diag(code, severity, affectsCompleteness, scope, message, extra) {
184
+ return Object.assign({ code, severity, affectsCompleteness, scope, message }, extra);
185
+ }
186
+ class DynamoDbPerformanceTuningProvider {
187
+ constructor(driver) {
188
+ this.driver = driver;
189
+ }
190
+ checkCapabilities(params) {
191
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
192
+ const monitoringMode = this.driver.monitoringMode;
193
+ const monitoringAvailable = monitoringMode === 'enabled';
194
+ const monitoringMessage = monitoringMode === 'enabled'
195
+ ? undefined
196
+ : monitoringUnavailableMessage(monitoringMode);
197
+ const capabilities = {
198
+ staticAccessPattern: {
199
+ available: true,
200
+ source: 'PartiQL/KeyCondition static parse against DescribeTable key schema',
201
+ },
202
+ tableDefinition: {
203
+ available: true,
204
+ source: 'dynamodb:DescribeTable',
205
+ requiredPermissions: ['dynamodb:DescribeTable'],
206
+ },
207
+ cloudWatchMetrics: monitoringAvailable
208
+ ? {
209
+ available: true,
210
+ source: 'cloudwatch:GetMetricData',
211
+ requiredPermissions: ['cloudwatch:GetMetricData'],
212
+ }
213
+ : { available: false, message: monitoringMessage },
214
+ contributorInsightsStatus: Object.assign({}, (monitoringAvailable
215
+ ? {
216
+ available: true,
217
+ source: 'dynamodb:DescribeContributorInsights',
218
+ requiredPermissions: ['dynamodb:DescribeContributorInsights'],
219
+ }
220
+ : { available: false, message: monitoringMessage })),
221
+ observedRead: {
222
+ available: true,
223
+ message: 'IAM permission for a Run Observed Read is not pre-verified; an AccessDenied surfaces only after the user confirms it.',
224
+ requiredPermissions: ['dynamodb:PartiQLSelect', 'dynamodb:Query'],
225
+ },
226
+ };
227
+ return { ok: true, message: '', result: capabilities };
228
+ });
229
+ }
230
+ collect(params, options) {
231
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
232
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
233
+ const limits = {
234
+ maxPayloadBytes: clamp((_a = params.limits) === null || _a === void 0 ? void 0 : _a.maxPayloadBytes, DEFAULT_MAX_PAYLOAD_BYTES, 1, MAX_MAX_PAYLOAD_BYTES),
235
+ maxIndexes: clamp((_b = params.limits) === null || _b === void 0 ? void 0 : _b.maxIndexes, DEFAULT_MAX_INDEXES, 1, MAX_MAX_INDEXES),
236
+ };
237
+ const mode = (_d = (_c = params.observation) === null || _c === void 0 ? void 0 : _c.mode) !== null && _d !== void 0 ? _d : 'static';
238
+ const request = params.statement.request;
239
+ let tableName;
240
+ let indexName;
241
+ let statementText;
242
+ if (request.kind === 'partiql') {
243
+ const extracted = (0, dynamoPartiqlAccessPattern_1.extractDynamoPartiqlTarget)(request.text);
244
+ if (!extracted) {
245
+ return {
246
+ ok: false,
247
+ message: 'The PartiQL statement could not be parsed as a single SELECT.',
248
+ };
249
+ }
250
+ if (params.target &&
251
+ (params.target.tableName !== extracted.tableName ||
252
+ params.target.indexName !== extracted.indexName)) {
253
+ return {
254
+ ok: false,
255
+ message: 'The explicit target does not match the table/index the statement references.',
256
+ };
257
+ }
258
+ tableName = extracted.tableName;
259
+ indexName = extracted.indexName;
260
+ statementText = request.text;
261
+ }
262
+ else {
263
+ if (!request.input.tableName) {
264
+ return {
265
+ ok: false,
266
+ message: 'A native Query analysis input requires tableName.',
267
+ };
268
+ }
269
+ tableName = request.input.tableName;
270
+ indexName = request.input.indexName;
271
+ }
272
+ let rawTable;
273
+ try {
274
+ rawTable = yield this.driver.describeTable(tableName);
275
+ }
276
+ catch (_u) {
277
+ rawTable = undefined;
278
+ }
279
+ if (!rawTable || !rawTable.TableName) {
280
+ return {
281
+ ok: false,
282
+ message: `Table "${tableName}" could not be described.`,
283
+ };
284
+ }
285
+ const diagnostics = [];
286
+ const unavailableSections = [];
287
+ const monitoringMode = this.driver.monitoringMode;
288
+ const monitoringEnabled = monitoringMode === 'enabled';
289
+ if (monitoringMode !== 'enabled') {
290
+ diagnostics.push(diag('DYNAMODB_MONITORING_COLLECTION_SKIPPED', 'info', false, 'collection', monitoringUnavailableMessage(monitoringMode), { tableName }));
291
+ }
292
+ let ttl;
293
+ try {
294
+ ttl = yield this.driver.describeTimeToLive(tableName);
295
+ }
296
+ catch (e) {
297
+ unavailableSections.push({
298
+ section: 'tableDefinition',
299
+ tableName,
300
+ reason: describeError(e, 'DescribeTimeToLive failed.'),
301
+ requiredPermissions: ['dynamodb:DescribeTimeToLive'],
302
+ });
303
+ diagnostics.push(diag('DYNAMODB_SECTION_COLLECTION_FAILED', 'warning', true, 'tableDefinition', 'Time to live status could not be collected.', {
304
+ tableName,
305
+ }));
306
+ }
307
+ const contributorInsights = [];
308
+ if (monitoringEnabled) {
309
+ const ciTargets = [
310
+ { resource: 'table' },
311
+ ...((_e = rawTable.GlobalSecondaryIndexes) !== null && _e !== void 0 ? _e : [])
312
+ .filter((i) => !!i.IndexName)
313
+ .map((i) => ({ resource: 'gsi', indexName: i.IndexName })),
314
+ ];
315
+ const ciResults = yield Promise.all(ciTargets.map((target) => tslib_1.__awaiter(this, void 0, void 0, function* () {
316
+ try {
317
+ const res = yield this.driver.describeContributorInsights(tableName, target.indexName);
318
+ return { target, res, error: undefined };
319
+ }
320
+ catch (e) {
321
+ return { target, res: undefined, error: e };
322
+ }
323
+ })));
324
+ for (const { target, res, error } of ciResults) {
325
+ if (error || !res) {
326
+ unavailableSections.push({
327
+ section: 'contributorInsights',
328
+ tableName,
329
+ indexName: target.indexName,
330
+ reason: describeError(error, 'DescribeContributorInsights failed.'),
331
+ requiredPermissions: ['dynamodb:DescribeContributorInsights'],
332
+ });
333
+ diagnostics.push(diag('DYNAMODB_SECTION_COLLECTION_FAILED', 'warning', true, 'contributorInsights', 'Contributor Insights status could not be collected.', {
334
+ tableName,
335
+ indexName: target.indexName,
336
+ }));
337
+ continue;
338
+ }
339
+ contributorInsights.push({
340
+ resource: target.resource,
341
+ status: (_f = res.status) !== null && _f !== void 0 ? _f : 'UNKNOWN',
342
+ mode: res.mode,
343
+ indexName: target.indexName,
344
+ });
345
+ }
346
+ }
347
+ const table = mapTableContext(rawTable, ttl, contributorInsights);
348
+ const resolvedTarget = resolveTargetKeySchema(table, indexName);
349
+ if (!resolvedTarget) {
350
+ return {
351
+ ok: false,
352
+ message: `Index "${indexName}" was not found on table "${tableName}".`,
353
+ };
354
+ }
355
+ let observationEligibility = {
356
+ allowed: true,
357
+ };
358
+ let accessPattern;
359
+ if (request.kind === 'partiql') {
360
+ if (containsUnresolvedBindMarker(statementText)) {
361
+ observationEligibility = {
362
+ allowed: false,
363
+ reason: 'The statement contains an unresolved bind marker (?); Run Observed Read is not available for parameterized PartiQL in v1.',
364
+ };
365
+ }
366
+ accessPattern = (0, dynamoPartiqlAccessPattern_1.analyzeDynamoPartiqlAccessPattern)({
367
+ sql: statementText,
368
+ keySchema: resolvedTarget.keySchema,
369
+ tableName,
370
+ indexName,
371
+ indexType: resolvedTarget.indexType,
372
+ });
373
+ }
374
+ else {
375
+ accessPattern = (0, dynamoPartiqlAccessPattern_1.analyzeDynamoNativeQueryAccessPattern)({
376
+ input: request.input,
377
+ keySchema: resolvedTarget.keySchema,
378
+ indexType: resolvedTarget.indexType,
379
+ });
380
+ }
381
+ if (accessPattern.confidence === 'unknown') {
382
+ diagnostics.push(diag('DYNAMODB_ACCESS_PATTERN_UNRESOLVED', 'warning', true, 'accessPattern', 'The statement could not be classified as Query or Scan safely.', {
383
+ tableName,
384
+ indexName,
385
+ }));
386
+ unavailableSections.push({
387
+ section: 'accessPattern',
388
+ tableName,
389
+ indexName,
390
+ reason: 'The statement could not be parsed.',
391
+ });
392
+ }
393
+ else if (accessPattern.accessPath === 'tableScan') {
394
+ diagnostics.push(diag('DYNAMODB_FULL_TABLE_SCAN', 'warning', false, 'accessPattern', 'This statement performs a full table scan.', { tableName }));
395
+ }
396
+ else if (accessPattern.accessPath === 'indexScan') {
397
+ diagnostics.push(diag('DYNAMODB_FULL_INDEX_SCAN', 'warning', false, 'accessPattern', 'This statement performs a full index scan.', { tableName, indexName }));
398
+ }
399
+ if (accessPattern.postReadFilter.present) {
400
+ diagnostics.push(diag('DYNAMODB_POST_READ_FILTER', 'info', false, 'accessPattern', 'A non-key predicate is evaluated after each item is read.', {
401
+ tableName,
402
+ indexName,
403
+ }));
404
+ }
405
+ if (table.itemCount !== undefined || table.tableSizeBytes !== undefined) {
406
+ diagnostics.push(diag('DYNAMODB_APPROXIMATE_TABLE_METADATA', 'info', false, 'tableDefinition', 'ItemCount/TableSizeBytes are AWS approximations, updated roughly every six hours.', { tableName }));
407
+ }
408
+ let cloudWatch;
409
+ if (monitoringEnabled) {
410
+ const cwResult = yield this.driver.collectCloudWatchMetrics({
411
+ tableName,
412
+ indexName,
413
+ indexType: resolvedTarget.indexType,
414
+ operation: toCloudWatchOperation(accessPattern.operation),
415
+ billingMode: table.billingMode,
416
+ hasOnDemandMaxLimit: ((_g = table.onDemandThroughput) === null || _g === void 0 ? void 0 : _g.maxReadRequestUnits) !== undefined,
417
+ lookbackMinutes: (_h = params.metrics) === null || _h === void 0 ? void 0 : _h.lookbackMinutes,
418
+ periodSeconds: (_j = params.metrics) === null || _j === void 0 ? void 0 : _j.periodSeconds,
419
+ signal: options === null || options === void 0 ? void 0 : options.signal,
420
+ });
421
+ if (cwResult.ok && cwResult.result) {
422
+ cloudWatch = cwResult.result;
423
+ for (const series of cloudWatch.series) {
424
+ if (series.noData) {
425
+ diagnostics.push(diag('DYNAMODB_CLOUDWATCH_NO_DATA', 'info', false, 'cloudWatchMetrics', `No CloudWatch datapoints for ${series.metricName} (${series.statistic}).`, {
426
+ tableName,
427
+ indexName: series.scope === 'gsi' ? series.indexName : undefined,
428
+ metricName: series.metricName,
429
+ }));
430
+ }
431
+ }
432
+ applyThrottleDiagnostics(cloudWatch, diagnostics, tableName);
433
+ }
434
+ else {
435
+ unavailableSections.push({
436
+ section: 'cloudWatchMetrics',
437
+ tableName,
438
+ reason: cwResult.message || 'CloudWatch metrics could not be collected.',
439
+ requiredPermissions: ['cloudwatch:GetMetricData'],
440
+ });
441
+ diagnostics.push(diag('DYNAMODB_SECTION_COLLECTION_FAILED', 'warning', true, 'cloudWatchMetrics', 'CloudWatch metrics could not be collected.', { tableName }));
442
+ }
443
+ }
444
+ let observation = params.statement.previousObservation;
445
+ const workload = params.statement.workload;
446
+ if (mode === 'executeOnce' || mode === 'executeComplete') {
447
+ if (((_k = params.observation) === null || _k === void 0 ? void 0 : _k.allowExecution) !== true) {
448
+ return {
449
+ ok: false,
450
+ message: `observation.mode is ${mode} but observation.allowExecution was not explicitly true. A measured read requires explicit, host-confirmed authorization.`,
451
+ };
452
+ }
453
+ if (!(options === null || options === void 0 ? void 0 : options.execution)) {
454
+ return {
455
+ ok: false,
456
+ message: `observation.mode is ${mode} but no execution options were supplied.`,
457
+ };
458
+ }
459
+ if (!observationEligibility.allowed) {
460
+ return {
461
+ ok: false,
462
+ message: (_l = observationEligibility.reason) !== null && _l !== void 0 ? _l : 'This statement is not eligible for Run Observed Read.',
463
+ };
464
+ }
465
+ const maxEvaluatedItems = mode === 'executeComplete'
466
+ ? clamp((_m = params.observation) === null || _m === void 0 ? void 0 : _m.maxEvaluatedItems, 1000, 1, 1000)
467
+ : clamp((_o = params.observation) === null || _o === void 0 ? void 0 : _o.maxEvaluatedItems, DEFAULT_MAX_EVALUATED_ITEMS, 1, DEFAULT_MAX_EVALUATED_ITEMS);
468
+ const maxPages = clamp((_p = params.observation) === null || _p === void 0 ? void 0 : _p.maxPages, 10, 1, 10);
469
+ if (mode === 'executeComplete' &&
470
+ ((options.execution.kind === 'partiql' &&
471
+ !this.driver.observePartiqlReadComplete) ||
472
+ (options.execution.kind === 'query' &&
473
+ !this.driver.observeNativeQueryReadComplete))) {
474
+ return {
475
+ ok: false,
476
+ message: 'Complete-result Benchmark is not supported by this DynamoDB driver.',
477
+ };
478
+ }
479
+ try {
480
+ const observed = mode === 'executeComplete'
481
+ ? options.execution.kind === 'partiql'
482
+ ? yield this.driver.observePartiqlReadComplete({
483
+ statement: statementText,
484
+ parameters: options.execution.parameters,
485
+ maxPages,
486
+ timeoutMs: (_q = params.observation) === null || _q === void 0 ? void 0 : _q.timeoutMs,
487
+ signal: options.signal,
488
+ })
489
+ : yield this.driver.observeNativeQueryReadComplete({
490
+ input: options.execution.input,
491
+ maxEvaluatedItems,
492
+ maxPages,
493
+ timeoutMs: (_r = params.observation) === null || _r === void 0 ? void 0 : _r.timeoutMs,
494
+ signal: options.signal,
495
+ })
496
+ : options.execution.kind === 'partiql'
497
+ ? yield this.driver.observePartiqlRead({
498
+ statement: statementText,
499
+ parameters: options.execution.parameters,
500
+ maxEvaluatedItems,
501
+ timeoutMs: (_s = params.observation) === null || _s === void 0 ? void 0 : _s.timeoutMs,
502
+ signal: options.signal,
503
+ })
504
+ : yield this.driver.observeNativeQueryRead({
505
+ input: options.execution.input,
506
+ maxEvaluatedItems,
507
+ timeoutMs: (_t = params.observation) === null || _t === void 0 ? void 0 : _t.timeoutMs,
508
+ signal: options.signal,
509
+ });
510
+ observation = buildObservation(observed, mode, request.kind);
511
+ if (observed.hasMorePages) {
512
+ diagnostics.push(diag('DYNAMODB_OBSERVATION_BOUNDED', 'info', false, 'observation', mode === 'executeComplete'
513
+ ? `Complete-result Benchmark reached its safety limit (${maxPages} pages / ${maxEvaluatedItems} evaluated items).`
514
+ : `Run Observed Read stopped after one response / ${maxEvaluatedItems} evaluated items.`, {
515
+ tableName,
516
+ indexName,
517
+ }));
518
+ }
519
+ if (observed.scannedItemCount !== undefined &&
520
+ observed.scannedItemCount >= HIGH_SCANNED_TO_RETURNED_MIN_SCANNED &&
521
+ observed.scannedItemCount > 0 &&
522
+ observed.returnedItemCount / observed.scannedItemCount <
523
+ HIGH_SCANNED_TO_RETURNED_MAX_PASS_RATE) {
524
+ diagnostics.push(diag('DYNAMODB_HIGH_SCANNED_TO_RETURNED', 'warning', false, 'observation', 'A large fraction of evaluated items were filtered out after being read.', {
525
+ tableName,
526
+ indexName,
527
+ }));
528
+ }
529
+ }
530
+ catch (e) {
531
+ return {
532
+ ok: false,
533
+ message: describeError(e, 'Run Observed Read failed.'),
534
+ };
535
+ }
536
+ }
537
+ let context = {
538
+ formatVersion: 1,
539
+ engine: 'dynamodb',
540
+ service: {
541
+ provider: 'AWS',
542
+ service: 'DynamoDB',
543
+ region: this.driver.region,
544
+ endpointKind: this.driver.endpointKind,
545
+ tableName,
546
+ indexName,
547
+ },
548
+ statement: {
549
+ language: request.kind === 'partiql' ? 'partiql' : 'dynamodb-query',
550
+ text: statementText,
551
+ source: params.statement.source,
552
+ kind: request.kind === 'partiql' ? 'select' : 'query',
553
+ observationEligibility,
554
+ },
555
+ accessPattern,
556
+ table: limitIndexes(table, indexName, limits.maxIndexes, diagnostics),
557
+ workload,
558
+ observation,
559
+ cloudWatch,
560
+ collection: {
561
+ collectedAt: new Date().toISOString(),
562
+ status: unavailableSections.length > 0 ||
563
+ diagnostics.some((d) => d.affectsCompleteness)
564
+ ? 'partial'
565
+ : 'complete',
566
+ diagnostics,
567
+ unavailableSections,
568
+ },
569
+ };
570
+ const limited = applyPayloadLimit(context, limits.maxPayloadBytes);
571
+ if (!limited.ok) {
572
+ return {
573
+ ok: false,
574
+ message: 'The collected context exceeds the configured payload limit even after truncation.',
575
+ };
576
+ }
577
+ context = limited.context;
578
+ return { ok: true, message: '', result: context };
579
+ });
580
+ }
581
+ }
582
+ exports.DynamoDbPerformanceTuningProvider = DynamoDbPerformanceTuningProvider;
583
+ function clamp(value, fallback, min, max) {
584
+ const n = Number(value);
585
+ if (!Number.isFinite(n))
586
+ return fallback;
587
+ return Math.min(max, Math.max(min, Math.floor(n)));
588
+ }
589
+ function describeError(e, fallback) {
590
+ const name = e instanceof Error ? e.name : undefined;
591
+ if (name === 'AccessDeniedException')
592
+ return `${fallback} (access denied)`;
593
+ if (name === 'ResourceNotFoundException')
594
+ return `${fallback} (resource not found)`;
595
+ return fallback;
596
+ }
597
+ function containsUnresolvedBindMarker(sql) {
598
+ let inSingle = false;
599
+ let inDouble = false;
600
+ for (let i = 0; i < sql.length; i++) {
601
+ const ch = sql[i];
602
+ if (inSingle) {
603
+ if (ch === "'" && sql[i + 1] === "'")
604
+ i++;
605
+ else if (ch === "'")
606
+ inSingle = false;
607
+ continue;
608
+ }
609
+ if (inDouble) {
610
+ if (ch === '"' && sql[i + 1] === '"')
611
+ i++;
612
+ else if (ch === '"')
613
+ inDouble = false;
614
+ continue;
615
+ }
616
+ if (ch === "'") {
617
+ inSingle = true;
618
+ continue;
619
+ }
620
+ if (ch === '"') {
621
+ inDouble = true;
622
+ continue;
623
+ }
624
+ if (ch === '?')
625
+ return true;
626
+ }
627
+ return false;
628
+ }
629
+ function buildObservation(observed, mode, requestKind) {
630
+ const filterPassRate = observed.scannedItemCount !== undefined && observed.scannedItemCount > 0
631
+ ? observed.returnedItemCount / observed.scannedItemCount
632
+ : undefined;
633
+ const bounded = observed.hasMorePages;
634
+ return {
635
+ source: 'observedRead',
636
+ observedAt: new Date().toISOString(),
637
+ clientElapsedTimeMs: observed.clientElapsedTimeMs,
638
+ requestCount: observed.requestCount,
639
+ retryCount: observed.retryCount,
640
+ returnedItemCount: observed.returnedItemCount,
641
+ evaluatedItemCount: requestKind === 'partiql' ? undefined : observed.scannedItemCount,
642
+ filterPassRate: requestKind === 'partiql' ? undefined : filterPassRate,
643
+ consumedCapacity: observed.capacityBreakdown,
644
+ hasMorePages: observed.hasMorePages,
645
+ bounded,
646
+ completeness: bounded ? 'bounded' : 'complete',
647
+ boundDescription: bounded
648
+ ? mode === 'executeComplete'
649
+ ? 'Complete-result Benchmark reached its safety limit; a continuation key remains.'
650
+ : `Limited to ${mode === 'executeOnce'
651
+ ? 'a single API response'
652
+ : 'the source evidence'} by Run Observed Read; a continuation key remains.`
653
+ : undefined,
654
+ };
655
+ }
656
+ function applyThrottleDiagnostics(cloudWatch, diagnostics, tableName) {
657
+ const hasActivity = (metricName) => cloudWatch.series.find((s) => s.metricName === metricName && !s.noData && s.values.some((v) => v > 0));
658
+ const checks = [
659
+ ['ReadThrottleEvents', 'DYNAMODB_READ_THROTTLING_OBSERVED'],
660
+ [
661
+ 'ReadKeyRangeThroughputThrottleEvents',
662
+ 'DYNAMODB_KEY_RANGE_THROTTLING_OBSERVED',
663
+ ],
664
+ [
665
+ 'ReadProvisionedThroughputThrottleEvents',
666
+ 'DYNAMODB_PROVISIONED_THROTTLING_OBSERVED',
667
+ ],
668
+ [
669
+ 'ReadMaxOnDemandThroughputThrottleEvents',
670
+ 'DYNAMODB_ON_DEMAND_LIMIT_THROTTLING_OBSERVED',
671
+ ],
672
+ [
673
+ 'ReadAccountLimitThrottleEvents',
674
+ 'DYNAMODB_ACCOUNT_LIMIT_THROTTLING_OBSERVED',
675
+ ],
676
+ ];
677
+ for (const [metricName, code] of checks) {
678
+ const series = hasActivity(metricName);
679
+ if (series) {
680
+ diagnostics.push(diag(code, 'warning', false, 'cloudWatchMetrics', `${metricName} was observed in the collection window.`, { tableName, metricName }));
681
+ }
682
+ }
683
+ }
684
+ function limitIndexes(table, targetIndexName, maxIndexes, diagnostics) {
685
+ const total = table.localSecondaryIndexes.length + table.globalSecondaryIndexes.length;
686
+ if (total <= maxIndexes)
687
+ return table;
688
+ diagnostics.push(diag('DYNAMODB_COLLECTION_TRUNCATED', 'warning', true, 'tableDefinition', `Index list truncated to ${maxIndexes} entries.`, { tableName: table.tableName }));
689
+ const target = [];
690
+ const restLsi = [];
691
+ const restGsi = [];
692
+ for (const index of table.localSecondaryIndexes) {
693
+ (index.indexName === targetIndexName ? target : restLsi).push({
694
+ index,
695
+ kind: 'LSI',
696
+ });
697
+ }
698
+ for (const index of table.globalSecondaryIndexes) {
699
+ (index.indexName === targetIndexName ? target : restGsi).push({
700
+ index,
701
+ kind: 'GSI',
702
+ });
703
+ }
704
+ const kept = [...target, ...restGsi, ...restLsi].slice(0, Math.max(0, maxIndexes));
705
+ return Object.assign(Object.assign({}, table), { localSecondaryIndexes: kept
706
+ .filter((e) => e.kind === 'LSI')
707
+ .map((e) => e.index), globalSecondaryIndexes: kept
708
+ .filter((e) => e.kind === 'GSI')
709
+ .map((e) => e.index) });
710
+ }
711
+ function byteSize(value) {
712
+ var _a;
713
+ return Buffer.byteLength((_a = JSON.stringify(value)) !== null && _a !== void 0 ? _a : '', 'utf8');
714
+ }
715
+ function applyPayloadLimit(context, maxPayloadBytes) {
716
+ if (byteSize(context) <= maxPayloadBytes)
717
+ return { context, ok: true };
718
+ let next = context;
719
+ const truncatedDiag = diag('DYNAMODB_COLLECTION_TRUNCATED', 'warning', true, 'collection', 'The context was reduced to fit the payload limit.');
720
+ if (next.cloudWatch) {
721
+ next = Object.assign(Object.assign({}, next), { cloudWatch: Object.assign(Object.assign({}, next.cloudWatch), { series: next.cloudWatch.series.map((s) => (Object.assign(Object.assign({}, s), { timestamps: s.timestamps.slice(-60), values: s.values.slice(-60) }))) }) });
722
+ }
723
+ if (byteSize(next) <= maxPayloadBytes) {
724
+ return { context: withDiagnostic(next, truncatedDiag), ok: true };
725
+ }
726
+ const targetIndexName = next.service.indexName;
727
+ const stripSize = (i) => i.indexName === targetIndexName
728
+ ? i
729
+ : Object.assign(Object.assign({}, i), { itemCount: undefined, indexSizeBytes: undefined });
730
+ next = Object.assign(Object.assign({}, next), { table: Object.assign(Object.assign({}, next.table), { localSecondaryIndexes: next.table.localSecondaryIndexes.map(stripSize), globalSecondaryIndexes: next.table.globalSecondaryIndexes.map(stripSize) }) });
731
+ if (byteSize(next) <= maxPayloadBytes) {
732
+ return { context: withDiagnostic(next, truncatedDiag), ok: true };
733
+ }
734
+ if (next.cloudWatch) {
735
+ const priority = (s) => s.scope === 'operation' ? 0 : s.scope === 'table' ? 1 : 2;
736
+ const ordered = [...next.cloudWatch.series].sort((a, b) => priority(b) - priority(a));
737
+ while (ordered.length > 0 &&
738
+ byteSize(Object.assign(Object.assign({}, next), { cloudWatch: Object.assign(Object.assign({}, next.cloudWatch), { series: ordered }) })) > maxPayloadBytes) {
739
+ ordered.shift();
740
+ }
741
+ next = Object.assign(Object.assign({}, next), { cloudWatch: Object.assign(Object.assign({}, next.cloudWatch), { series: ordered }) });
742
+ }
743
+ if (byteSize(next) <= maxPayloadBytes) {
744
+ return { context: withDiagnostic(next, truncatedDiag), ok: true };
745
+ }
746
+ return { context: next, ok: false };
747
+ }
748
+ function withDiagnostic(context, d) {
749
+ return Object.assign(Object.assign({}, context), { collection: Object.assign(Object.assign({}, context.collection), { status: 'partial', diagnostics: [...context.collection.diagnostics, d] }) });
750
+ }
751
+ //# sourceMappingURL=DynamoDbPerformanceTuningProvider.js.map