checkly 9.5.0 → 10.0.0-prerelease-4f88d60

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 (575) hide show
  1. package/README.md +10 -0
  2. package/bin/launch.cjs +12 -0
  3. package/dist/ai-context/context.js +1 -0
  4. package/dist/ai-context/context.js.map +1 -1
  5. package/dist/ai-context/onboarding-boilerplate/checkly-config-template.ts +2 -2
  6. package/dist/ai-context/public-skills/checkly/SKILL.md +34 -5
  7. package/dist/ai-context/skills-command/references/communicate.md +8 -5
  8. package/dist/ai-context/skills-command/references/configure-api-checks.md +1 -9
  9. package/dist/ai-context/skills-command/references/configure-browser-checks.md +1 -8
  10. package/dist/ai-context/skills-command/references/configure-check-groups.md +1 -0
  11. package/dist/ai-context/skills-command/references/configure-dns-monitors.md +1 -9
  12. package/dist/ai-context/skills-command/references/configure-grpc-monitors.md +24 -0
  13. package/dist/ai-context/skills-command/references/configure-heartbeat-monitors.md +1 -9
  14. package/dist/ai-context/skills-command/references/configure-icmp-monitors.md +1 -9
  15. package/dist/ai-context/skills-command/references/configure-multistep-checks.md +1 -9
  16. package/dist/ai-context/skills-command/references/configure-playwright-checks.md +2 -2
  17. package/dist/ai-context/skills-command/references/configure-supporting-constructs.md +6 -2
  18. package/dist/ai-context/skills-command/references/configure-tcp-monitors.md +1 -10
  19. package/dist/ai-context/skills-command/references/configure-url-monitors.md +1 -10
  20. package/dist/ai-context/skills-command/references/configure.md +17 -5
  21. package/dist/ai-context/skills-command/references/initialize.md +11 -3
  22. package/dist/ai-context/skills-command/references/investigate-checks.md +1 -1
  23. package/dist/auth/api-key.d.ts +24 -0
  24. package/dist/auth/api-key.js +104 -0
  25. package/dist/auth/api-key.js.map +1 -0
  26. package/dist/auth/device-flow.d.ts +58 -0
  27. package/dist/auth/device-flow.js +228 -0
  28. package/dist/auth/device-flow.js.map +1 -0
  29. package/dist/auth/index.d.ts +6 -6
  30. package/dist/auth/index.js +64 -64
  31. package/dist/auth/index.js.map +1 -1
  32. package/dist/commands/account/plan.js +1 -1
  33. package/dist/commands/account/plan.js.map +1 -1
  34. package/dist/commands/account/usage/projections.d.ts +16 -0
  35. package/dist/commands/account/usage/projections.js +40 -0
  36. package/dist/commands/account/usage/projections.js.map +1 -0
  37. package/dist/commands/account/usage/series.d.ts +7 -3
  38. package/dist/commands/account/usage/series.js +30 -87
  39. package/dist/commands/account/usage/series.js.map +1 -1
  40. package/dist/commands/account/usage/summary.d.ts +4 -1
  41. package/dist/commands/account/usage/summary.js +19 -27
  42. package/dist/commands/account/usage/summary.js.map +1 -1
  43. package/dist/commands/account/usage/term.d.ts +15 -0
  44. package/dist/commands/account/usage/term.js +32 -0
  45. package/dist/commands/account/usage/term.js.map +1 -0
  46. package/dist/commands/account/usage/terms.d.ts +4 -0
  47. package/dist/commands/account/usage/terms.js +19 -27
  48. package/dist/commands/account/usage/terms.js.map +1 -1
  49. package/dist/commands/alert-channels/get.js +2 -1
  50. package/dist/commands/alert-channels/get.js.map +1 -1
  51. package/dist/commands/alert-channels/list.js +2 -1
  52. package/dist/commands/alert-channels/list.js.map +1 -1
  53. package/dist/commands/alert-channels/logs.js +2 -1
  54. package/dist/commands/alert-channels/logs.js.map +1 -1
  55. package/dist/commands/api.js +53 -10
  56. package/dist/commands/api.js.map +1 -1
  57. package/dist/commands/assets/download.js +11 -7
  58. package/dist/commands/assets/download.js.map +1 -1
  59. package/dist/commands/assets/list.js +2 -3
  60. package/dist/commands/assets/list.js.map +1 -1
  61. package/dist/commands/authCommand.d.ts +19 -0
  62. package/dist/commands/authCommand.js +118 -12
  63. package/dist/commands/authCommand.js.map +1 -1
  64. package/dist/commands/baseCommand.d.ts +12 -1
  65. package/dist/commands/baseCommand.js +24 -5
  66. package/dist/commands/baseCommand.js.map +1 -1
  67. package/dist/commands/checks/delete.js +1 -1
  68. package/dist/commands/checks/delete.js.map +1 -1
  69. package/dist/commands/checks/run.js +3 -1
  70. package/dist/commands/checks/run.js.map +1 -1
  71. package/dist/commands/debug/parse-project.d.ts +1 -0
  72. package/dist/commands/debug/parse-project.js +5 -2
  73. package/dist/commands/debug/parse-project.js.map +1 -1
  74. package/dist/commands/deploy.d.ts +8 -2
  75. package/dist/commands/deploy.js +735 -274
  76. package/dist/commands/deploy.js.map +1 -1
  77. package/dist/commands/destroy.js +3 -3
  78. package/dist/commands/destroy.js.map +1 -1
  79. package/dist/commands/env/add.js +2 -2
  80. package/dist/commands/env/add.js.map +1 -1
  81. package/dist/commands/env/ls.js +2 -1
  82. package/dist/commands/env/ls.js.map +1 -1
  83. package/dist/commands/env/pull.js +3 -3
  84. package/dist/commands/env/pull.js.map +1 -1
  85. package/dist/commands/env/update.js +2 -2
  86. package/dist/commands/env/update.js.map +1 -1
  87. package/dist/commands/import/apply.js +12 -10
  88. package/dist/commands/import/apply.js.map +1 -1
  89. package/dist/commands/import/cancel.js +4 -4
  90. package/dist/commands/import/cancel.js.map +1 -1
  91. package/dist/commands/import/commit.js +11 -9
  92. package/dist/commands/import/commit.js.map +1 -1
  93. package/dist/commands/import/plan.js +82 -62
  94. package/dist/commands/import/plan.js.map +1 -1
  95. package/dist/commands/init.d.ts +2 -0
  96. package/dist/commands/init.js +62 -41
  97. package/dist/commands/init.js.map +1 -1
  98. package/dist/commands/login.d.ts +38 -2
  99. package/dist/commands/login.js +848 -52
  100. package/dist/commands/login.js.map +1 -1
  101. package/dist/commands/logout.js +10 -4
  102. package/dist/commands/logout.js.map +1 -1
  103. package/dist/commands/pw-test.js +6 -3
  104. package/dist/commands/pw-test.js.map +1 -1
  105. package/dist/commands/rca/get.js +1 -1
  106. package/dist/commands/rca/get.js.map +1 -1
  107. package/dist/commands/rca/run.js +1 -1
  108. package/dist/commands/rca/run.js.map +1 -1
  109. package/dist/commands/skills/index.js +1 -1
  110. package/dist/commands/skills/index.js.map +1 -1
  111. package/dist/commands/skills/install.js +12 -12
  112. package/dist/commands/skills/install.js.map +1 -1
  113. package/dist/commands/switch.d.ts +10 -1
  114. package/dist/commands/switch.js +75 -13
  115. package/dist/commands/switch.js.map +1 -1
  116. package/dist/commands/sync-playwright.js +5 -10
  117. package/dist/commands/sync-playwright.js.map +1 -1
  118. package/dist/commands/test.d.ts +2 -0
  119. package/dist/commands/test.js +58 -29
  120. package/dist/commands/test.js.map +1 -1
  121. package/dist/commands/trigger.d.ts +1 -2
  122. package/dist/commands/trigger.js +27 -20
  123. package/dist/commands/trigger.js.map +1 -1
  124. package/dist/commands/validate.js +1 -0
  125. package/dist/commands/validate.js.map +1 -1
  126. package/dist/commands/whoami.d.ts +8 -0
  127. package/dist/commands/whoami.js +57 -6
  128. package/dist/commands/whoami.js.map +1 -1
  129. package/dist/constants.d.ts +3 -2
  130. package/dist/constants.js +8 -1
  131. package/dist/constants.js.map +1 -1
  132. package/dist/constructs/alert-channel-codegen.d.ts +6 -1
  133. package/dist/constructs/alert-channel-codegen.js +12 -6
  134. package/dist/constructs/alert-channel-codegen.js.map +1 -1
  135. package/dist/constructs/alert-channel-subscription.d.ts +1 -0
  136. package/dist/constructs/alert-channel-subscription.js +4 -0
  137. package/dist/constructs/alert-channel-subscription.js.map +1 -1
  138. package/dist/constructs/alert-channel.js +8 -5
  139. package/dist/constructs/alert-channel.js.map +1 -1
  140. package/dist/constructs/alert-escalation-policy-codegen.d.ts +7 -0
  141. package/dist/constructs/alert-escalation-policy-codegen.js +25 -8
  142. package/dist/constructs/alert-escalation-policy-codegen.js.map +1 -1
  143. package/dist/constructs/api-assertion.d.ts +0 -2
  144. package/dist/constructs/api-assertion.js +0 -4
  145. package/dist/constructs/api-assertion.js.map +1 -1
  146. package/dist/constructs/api-check-bundle.d.ts +4 -124
  147. package/dist/constructs/api-check-codegen.js +1 -1
  148. package/dist/constructs/api-check-codegen.js.map +1 -1
  149. package/dist/constructs/api-check.d.ts +8 -128
  150. package/dist/constructs/api-check.js +15 -17
  151. package/dist/constructs/api-check.js.map +1 -1
  152. package/dist/constructs/api-request-codegen.js +10 -8
  153. package/dist/constructs/api-request-codegen.js.map +1 -1
  154. package/dist/constructs/browser-check-bundle.d.ts +11 -125
  155. package/dist/constructs/browser-check-bundle.js +5 -1
  156. package/dist/constructs/browser-check-bundle.js.map +1 -1
  157. package/dist/constructs/browser-check.d.ts +5 -107
  158. package/dist/constructs/browser-check.js +1 -1
  159. package/dist/constructs/browser-check.js.map +1 -1
  160. package/dist/constructs/check-codegen.d.ts +46 -14
  161. package/dist/constructs/check-codegen.js +118 -34
  162. package/dist/constructs/check-codegen.js.map +1 -1
  163. package/dist/constructs/check-group-codegen.js +23 -9
  164. package/dist/constructs/check-group-codegen.js.map +1 -1
  165. package/dist/constructs/check-group-v1.d.ts +28 -16
  166. package/dist/constructs/check-group-v1.js +48 -17
  167. package/dist/constructs/check-group-v1.js.map +1 -1
  168. package/dist/constructs/check-group-v2.d.ts +2 -21
  169. package/dist/constructs/check-group-v2.js +4 -4
  170. package/dist/constructs/check-group-v2.js.map +1 -1
  171. package/dist/constructs/check.d.ts +68 -220
  172. package/dist/constructs/check.js +106 -37
  173. package/dist/constructs/check.js.map +1 -1
  174. package/dist/constructs/construct-codegen.d.ts +1 -2
  175. package/dist/constructs/construct-diagnostics.d.ts +3 -0
  176. package/dist/constructs/construct-diagnostics.js +11 -0
  177. package/dist/constructs/construct-diagnostics.js.map +1 -1
  178. package/dist/constructs/construct.d.ts +30 -4
  179. package/dist/constructs/construct.js +52 -6
  180. package/dist/constructs/construct.js.map +1 -1
  181. package/dist/constructs/dashboard.js +11 -7
  182. package/dist/constructs/dashboard.js.map +1 -1
  183. package/dist/constructs/dns-monitor.d.ts +4 -100
  184. package/dist/constructs/dns-request-codegen.js +1 -1
  185. package/dist/constructs/dns-request-codegen.js.map +1 -1
  186. package/dist/constructs/email-alert-channel-codegen.js +1 -1
  187. package/dist/constructs/email-alert-channel-codegen.js.map +1 -1
  188. package/dist/constructs/engine.d.ts +4 -2
  189. package/dist/constructs/engine.js +3 -1
  190. package/dist/constructs/engine.js.map +1 -1
  191. package/dist/constructs/frequency-codegen.js +10 -2
  192. package/dist/constructs/frequency-codegen.js.map +1 -1
  193. package/dist/constructs/frequency.d.ts +8 -3
  194. package/dist/constructs/frequency.js +7 -2
  195. package/dist/constructs/frequency.js.map +1 -1
  196. package/dist/constructs/grpc-monitor.d.ts +4 -100
  197. package/dist/constructs/grpc-monitor.js +19 -0
  198. package/dist/constructs/grpc-monitor.js.map +1 -1
  199. package/dist/constructs/grpc-request-codegen.js +13 -4
  200. package/dist/constructs/grpc-request-codegen.js.map +1 -1
  201. package/dist/constructs/grpc-request.d.ts +23 -0
  202. package/dist/constructs/heartbeat-monitor.d.ts +2 -1
  203. package/dist/constructs/heartbeat-monitor.js +2 -2
  204. package/dist/constructs/heartbeat-monitor.js.map +1 -1
  205. package/dist/constructs/icmp-monitor.d.ts +4 -100
  206. package/dist/constructs/icmp-request-codegen.js +1 -1
  207. package/dist/constructs/icmp-request-codegen.js.map +1 -1
  208. package/dist/constructs/incidentio-alert-channel-codegen.d.ts +1 -1
  209. package/dist/constructs/incidentio-alert-channel-codegen.js +14 -8
  210. package/dist/constructs/incidentio-alert-channel-codegen.js.map +1 -1
  211. package/dist/constructs/index.d.ts +1 -1
  212. package/dist/constructs/index.js +1 -1
  213. package/dist/constructs/index.js.map +1 -1
  214. package/dist/constructs/internal/assertion-validation.js +1 -2
  215. package/dist/constructs/internal/assertion-validation.js.map +1 -1
  216. package/dist/constructs/internal/codegen/context.d.ts +73 -6
  217. package/dist/constructs/internal/codegen/context.js +78 -6
  218. package/dist/constructs/internal/codegen/context.js.map +1 -1
  219. package/dist/constructs/internal/codegen/index.d.ts +3 -1
  220. package/dist/constructs/internal/codegen/index.js +2 -1
  221. package/dist/constructs/internal/codegen/index.js.map +1 -1
  222. package/dist/constructs/internal/codegen/render.d.ts +68 -0
  223. package/dist/constructs/internal/codegen/render.js +75 -0
  224. package/dist/constructs/internal/codegen/render.js.map +1 -0
  225. package/dist/constructs/internal/common-diagnostics.d.ts +1 -2
  226. package/dist/constructs/internal/common-diagnostics.js +7 -17
  227. package/dist/constructs/internal/common-diagnostics.js.map +1 -1
  228. package/dist/constructs/internal/declaring-file.d.ts +39 -0
  229. package/dist/constructs/internal/declaring-file.js +139 -0
  230. package/dist/constructs/internal/declaring-file.js.map +1 -0
  231. package/dist/constructs/internal/default-retry-strategy.d.ts +9 -0
  232. package/dist/constructs/internal/default-retry-strategy.js +13 -0
  233. package/dist/constructs/internal/default-retry-strategy.js.map +1 -0
  234. package/dist/constructs/internal/retry-strategy-defaults.d.ts +13 -0
  235. package/dist/constructs/internal/retry-strategy-defaults.js +14 -0
  236. package/dist/constructs/internal/retry-strategy-defaults.js.map +1 -0
  237. package/dist/constructs/key-value-pair-codegen.d.ts +6 -1
  238. package/dist/constructs/key-value-pair-codegen.js +24 -3
  239. package/dist/constructs/key-value-pair-codegen.js.map +1 -1
  240. package/dist/constructs/maintenance-window-codegen.d.ts +7 -0
  241. package/dist/constructs/maintenance-window-codegen.js +36 -19
  242. package/dist/constructs/maintenance-window-codegen.js.map +1 -1
  243. package/dist/constructs/maintenance-window.d.ts +37 -3
  244. package/dist/constructs/maintenance-window.js +34 -1
  245. package/dist/constructs/maintenance-window.js.map +1 -1
  246. package/dist/constructs/monitor.d.ts +6 -119
  247. package/dist/constructs/monitor.js +3 -5
  248. package/dist/constructs/monitor.js.map +1 -1
  249. package/dist/constructs/msteams-alert-channel-codegen.d.ts +1 -1
  250. package/dist/constructs/msteams-alert-channel-codegen.js +8 -18
  251. package/dist/constructs/msteams-alert-channel-codegen.js.map +1 -1
  252. package/dist/constructs/multi-step-check-bundle.d.ts +4 -109
  253. package/dist/constructs/multi-step-check.d.ts +4 -100
  254. package/dist/constructs/opsgenie-alert-channel-codegen.js +1 -1
  255. package/dist/constructs/opsgenie-alert-channel-codegen.js.map +1 -1
  256. package/dist/constructs/pagerduty-alert-channel-codegen.js +1 -1
  257. package/dist/constructs/pagerduty-alert-channel-codegen.js.map +1 -1
  258. package/dist/constructs/phone-call-alert-channel-codegen.js +1 -1
  259. package/dist/constructs/phone-call-alert-channel-codegen.js.map +1 -1
  260. package/dist/constructs/playwright-check-bundle.d.ts +10 -130
  261. package/dist/constructs/playwright-check-bundle.js +3 -3
  262. package/dist/constructs/playwright-check-bundle.js.map +1 -1
  263. package/dist/constructs/playwright-check-codegen.d.ts +85 -0
  264. package/dist/constructs/playwright-check-codegen.js +212 -0
  265. package/dist/constructs/playwright-check-codegen.js.map +1 -0
  266. package/dist/constructs/playwright-check.d.ts +14 -122
  267. package/dist/constructs/playwright-check.js +17 -51
  268. package/dist/constructs/playwright-check.js.map +1 -1
  269. package/dist/constructs/private-location-check-assignment.d.ts +1 -0
  270. package/dist/constructs/private-location-check-assignment.js +4 -0
  271. package/dist/constructs/private-location-check-assignment.js.map +1 -1
  272. package/dist/constructs/private-location-group-assignment.d.ts +1 -0
  273. package/dist/constructs/private-location-group-assignment.js +4 -0
  274. package/dist/constructs/private-location-group-assignment.js.map +1 -1
  275. package/dist/constructs/private-location.js +3 -1
  276. package/dist/constructs/private-location.js.map +1 -1
  277. package/dist/constructs/retry-strategy-codegen.d.ts +7 -1
  278. package/dist/constructs/retry-strategy-codegen.js +41 -32
  279. package/dist/constructs/retry-strategy-codegen.js.map +1 -1
  280. package/dist/constructs/retry-strategy.d.ts +0 -4
  281. package/dist/constructs/retry-strategy.js +5 -8
  282. package/dist/constructs/retry-strategy.js.map +1 -1
  283. package/dist/constructs/session.d.ts +38 -1
  284. package/dist/constructs/session.js +73 -3
  285. package/dist/constructs/session.js.map +1 -1
  286. package/dist/constructs/slack-alert-channel-codegen.js +1 -1
  287. package/dist/constructs/slack-alert-channel-codegen.js.map +1 -1
  288. package/dist/constructs/slack-app-alert-channel-codegen.js +1 -1
  289. package/dist/constructs/slack-app-alert-channel-codegen.js.map +1 -1
  290. package/dist/constructs/sms-alert-channel-codegen.js +1 -1
  291. package/dist/constructs/sms-alert-channel-codegen.js.map +1 -1
  292. package/dist/constructs/ssl-monitor.d.ts +4 -142
  293. package/dist/constructs/ssl-request-codegen.js +4 -3
  294. package/dist/constructs/ssl-request-codegen.js.map +1 -1
  295. package/dist/constructs/status-page-v3-automation-rule-codegen.js +5 -4
  296. package/dist/constructs/status-page-v3-automation-rule-codegen.js.map +1 -1
  297. package/dist/constructs/status-page-v3-codegen.js +3 -2
  298. package/dist/constructs/status-page-v3-codegen.js.map +1 -1
  299. package/dist/constructs/status-page-v3-component-codegen.js +8 -7
  300. package/dist/constructs/status-page-v3-component-codegen.js.map +1 -1
  301. package/dist/constructs/tcp-monitor-codegen.js +3 -2
  302. package/dist/constructs/tcp-monitor-codegen.js.map +1 -1
  303. package/dist/constructs/tcp-monitor.d.ts +8 -103
  304. package/dist/constructs/tcp-monitor.js +3 -2
  305. package/dist/constructs/tcp-monitor.js.map +1 -1
  306. package/dist/constructs/telegram-alert-channel-codegen.d.ts +1 -1
  307. package/dist/constructs/telegram-alert-channel-codegen.js +14 -8
  308. package/dist/constructs/telegram-alert-channel-codegen.js.map +1 -1
  309. package/dist/constructs/time-zone.d.ts +24 -0
  310. package/dist/constructs/time-zone.js +455 -0
  311. package/dist/constructs/time-zone.js.map +1 -0
  312. package/dist/constructs/traceroute-monitor.d.ts +4 -100
  313. package/dist/constructs/traceroute-request-codegen.js +2 -2
  314. package/dist/constructs/traceroute-request-codegen.js.map +1 -1
  315. package/dist/constructs/url-monitor-codegen.js +1 -1
  316. package/dist/constructs/url-monitor-codegen.js.map +1 -1
  317. package/dist/constructs/url-monitor.d.ts +7 -123
  318. package/dist/constructs/url-monitor.js +3 -0
  319. package/dist/constructs/url-monitor.js.map +1 -1
  320. package/dist/constructs/url-request-codegen.js +4 -3
  321. package/dist/constructs/url-request-codegen.js.map +1 -1
  322. package/dist/constructs/webhook-alert-channel-codegen.js +3 -3
  323. package/dist/constructs/webhook-alert-channel-codegen.js.map +1 -1
  324. package/dist/formatters/check-result-detail.js +0 -185
  325. package/dist/formatters/check-result-detail.js.map +1 -1
  326. package/dist/formatters/render.d.ts +2 -1
  327. package/dist/formatters/render.js +2 -2
  328. package/dist/formatters/render.js.map +1 -1
  329. package/dist/formatters/usage.d.ts +18 -12
  330. package/dist/formatters/usage.js +285 -245
  331. package/dist/formatters/usage.js.map +1 -1
  332. package/dist/help/help-extension.js +2 -1
  333. package/dist/help/help-extension.js.map +1 -1
  334. package/dist/helpers/accounts.d.ts +28 -0
  335. package/dist/helpers/accounts.js +50 -0
  336. package/dist/helpers/accounts.js.map +1 -0
  337. package/dist/helpers/activate-account.d.ts +13 -0
  338. package/dist/helpers/activate-account.js +24 -0
  339. package/dist/helpers/activate-account.js.map +1 -0
  340. package/dist/helpers/api-fields.js +3 -2
  341. package/dist/helpers/api-fields.js.map +1 -1
  342. package/dist/helpers/cli-mode.d.ts +24 -0
  343. package/dist/helpers/cli-mode.js +64 -8
  344. package/dist/helpers/cli-mode.js.map +1 -1
  345. package/dist/helpers/command-preview.d.ts +44 -0
  346. package/dist/helpers/command-preview.js +29 -9
  347. package/dist/helpers/command-preview.js.map +1 -1
  348. package/dist/helpers/command-style.d.ts +1 -0
  349. package/dist/helpers/command-style.js +51 -37
  350. package/dist/helpers/command-style.js.map +1 -1
  351. package/dist/helpers/flags.d.ts +10 -0
  352. package/dist/helpers/flags.js +18 -0
  353. package/dist/helpers/flags.js.map +1 -1
  354. package/dist/helpers/import-plan-selection.d.ts +1 -1
  355. package/dist/helpers/import-plan-selection.js +8 -20
  356. package/dist/helpers/import-plan-selection.js.map +1 -1
  357. package/dist/helpers/invalid-input-error.d.ts +15 -0
  358. package/dist/helpers/invalid-input-error.js +17 -0
  359. package/dist/helpers/invalid-input-error.js.map +1 -0
  360. package/dist/helpers/number.js +4 -3
  361. package/dist/helpers/number.js.map +1 -1
  362. package/dist/helpers/onboarding/boilerplate.js +15 -3
  363. package/dist/helpers/onboarding/boilerplate.js.map +1 -1
  364. package/dist/helpers/onboarding/index.d.ts +1 -1
  365. package/dist/helpers/onboarding/index.js +1 -1
  366. package/dist/helpers/onboarding/index.js.map +1 -1
  367. package/dist/helpers/onboarding/messages.d.ts +7 -0
  368. package/dist/helpers/onboarding/messages.js +14 -0
  369. package/dist/helpers/onboarding/messages.js.map +1 -1
  370. package/dist/helpers/onboarding/prompt-display.js +2 -2
  371. package/dist/helpers/onboarding/prompt-display.js.map +1 -1
  372. package/dist/helpers/onboarding/prompts-helpers.js +3 -1
  373. package/dist/helpers/onboarding/prompts-helpers.js.map +1 -1
  374. package/dist/helpers/onboarding/skill-install.js +4 -4
  375. package/dist/helpers/onboarding/skill-install.js.map +1 -1
  376. package/dist/helpers/prompts.d.ts +7 -0
  377. package/dist/helpers/prompts.js +10 -0
  378. package/dist/helpers/prompts.js.map +1 -0
  379. package/dist/helpers/result-assets.js +4 -3
  380. package/dist/helpers/result-assets.js.map +1 -1
  381. package/dist/helpers/test-helper.d.ts +14 -0
  382. package/dist/helpers/test-helper.js +33 -3
  383. package/dist/helpers/test-helper.js.map +1 -1
  384. package/dist/helpers/usage.d.ts +51 -14
  385. package/dist/helpers/usage.js +193 -53
  386. package/dist/helpers/usage.js.map +1 -1
  387. package/dist/helpers/wrap.js +1 -1
  388. package/dist/helpers/wrap.js.map +1 -1
  389. package/dist/messages/common-messages.d.ts +1 -0
  390. package/dist/messages/common-messages.js +4 -2
  391. package/dist/messages/common-messages.js.map +1 -1
  392. package/dist/reporters/abstract-list.d.ts +9 -2
  393. package/dist/reporters/abstract-list.js +105 -32
  394. package/dist/reporters/abstract-list.js.map +1 -1
  395. package/dist/reporters/ci.js +7 -4
  396. package/dist/reporters/ci.js.map +1 -1
  397. package/dist/reporters/dot.d.ts +1 -0
  398. package/dist/reporters/dot.js +19 -7
  399. package/dist/reporters/dot.js.map +1 -1
  400. package/dist/reporters/github.d.ts +2 -0
  401. package/dist/reporters/github.js +29 -4
  402. package/dist/reporters/github.js.map +1 -1
  403. package/dist/reporters/json.d.ts +2 -0
  404. package/dist/reporters/json.js +27 -4
  405. package/dist/reporters/json.js.map +1 -1
  406. package/dist/reporters/list.js +10 -8
  407. package/dist/reporters/list.js.map +1 -1
  408. package/dist/reporters/reporter.d.ts +1 -0
  409. package/dist/reporters/reporter.js.map +1 -1
  410. package/dist/reporters/util.d.ts +5 -2
  411. package/dist/reporters/util.js +25 -61
  412. package/dist/reporters/util.js.map +1 -1
  413. package/dist/rest/analytics.js +0 -4
  414. package/dist/rest/analytics.js.map +1 -1
  415. package/dist/rest/api.d.ts +10 -1
  416. package/dist/rest/api.js +44 -9
  417. package/dist/rest/api.js.map +1 -1
  418. package/dist/rest/check-results.d.ts +1 -50
  419. package/dist/rest/check-results.js.map +1 -1
  420. package/dist/rest/checkly-storage.d.ts +6 -1
  421. package/dist/rest/checkly-storage.js +13 -2
  422. package/dist/rest/checkly-storage.js.map +1 -1
  423. package/dist/rest/errors.d.ts +19 -0
  424. package/dist/rest/errors.js +20 -1
  425. package/dist/rest/errors.js.map +1 -1
  426. package/dist/rest/projects.d.ts +254 -4
  427. package/dist/rest/projects.js +208 -17
  428. package/dist/rest/projects.js.map +1 -1
  429. package/dist/rest/usage.d.ts +164 -73
  430. package/dist/rest/usage.js +21 -10
  431. package/dist/rest/usage.js.map +1 -1
  432. package/dist/services/abstract-check-runner.d.ts +34 -2
  433. package/dist/services/abstract-check-runner.js +183 -56
  434. package/dist/services/abstract-check-runner.js.map +1 -1
  435. package/dist/services/check-parser/bundler.d.ts +26 -0
  436. package/dist/services/check-parser/bundler.js +81 -7
  437. package/dist/services/check-parser/bundler.js.map +1 -1
  438. package/dist/services/check-parser/cache-hash.d.ts +1 -4
  439. package/dist/services/check-parser/cache-hash.js.map +1 -1
  440. package/dist/services/check-parser/package-files/json-text-source-file.d.ts +0 -2
  441. package/dist/services/check-parser/package-files/json-text-source-file.js +6 -6
  442. package/dist/services/check-parser/package-files/json-text-source-file.js.map +1 -1
  443. package/dist/services/check-parser/parser.d.ts +3 -2
  444. package/dist/services/check-parser/parser.js +31 -40
  445. package/dist/services/check-parser/parser.js.map +1 -1
  446. package/dist/services/checkly-config-codegen.js +4 -4
  447. package/dist/services/checkly-config-codegen.js.map +1 -1
  448. package/dist/services/checkly-config-loader.d.ts +18 -33
  449. package/dist/services/checkly-config-loader.js +50 -47
  450. package/dist/services/checkly-config-loader.js.map +1 -1
  451. package/dist/services/config.d.ts +42 -1
  452. package/dist/services/config.js +93 -9
  453. package/dist/services/config.js.map +1 -1
  454. package/dist/services/content-hash.d.ts +14 -0
  455. package/dist/services/content-hash.js +22 -0
  456. package/dist/services/content-hash.js.map +1 -0
  457. package/dist/services/deploy-diff/diff-lines.d.ts +52 -0
  458. package/dist/services/deploy-diff/diff-lines.js +327 -0
  459. package/dist/services/deploy-diff/diff-lines.js.map +1 -0
  460. package/dist/services/deploy-diff/double-check.d.ts +9 -0
  461. package/dist/services/deploy-diff/double-check.js +21 -0
  462. package/dist/services/deploy-diff/double-check.js.map +1 -0
  463. package/dist/services/deploy-diff/import-shape.d.ts +171 -0
  464. package/dist/services/deploy-diff/import-shape.js +633 -0
  465. package/dist/services/deploy-diff/import-shape.js.map +1 -0
  466. package/dist/services/deploy-diff/legacy-payload.d.ts +22 -0
  467. package/dist/services/deploy-diff/legacy-payload.js +51 -0
  468. package/dist/services/deploy-diff/legacy-payload.js.map +1 -0
  469. package/dist/services/deploy-diff/plan-summary.d.ts +81 -0
  470. package/dist/services/deploy-diff/plan-summary.js +262 -0
  471. package/dist/services/deploy-diff/plan-summary.js.map +1 -0
  472. package/dist/services/deploy-diff/preview-output.d.ts +63 -0
  473. package/dist/services/deploy-diff/preview-output.js +403 -0
  474. package/dist/services/deploy-diff/preview-output.js.map +1 -0
  475. package/dist/services/deploy-diff/render.d.ts +59 -0
  476. package/dist/services/deploy-diff/render.js +326 -0
  477. package/dist/services/deploy-diff/render.js.map +1 -0
  478. package/dist/services/deploy-diff/shape-changes.d.ts +2 -0
  479. package/dist/services/deploy-diff/shape-changes.js +48 -0
  480. package/dist/services/deploy-diff/shape-changes.js.map +1 -0
  481. package/dist/services/deploy-diff/source-index.d.ts +18 -0
  482. package/dist/services/deploy-diff/source-index.js +48 -0
  483. package/dist/services/deploy-diff/source-index.js.map +1 -0
  484. package/dist/services/deploy-diff/variable-names.d.ts +30 -0
  485. package/dist/services/deploy-diff/variable-names.js +64 -0
  486. package/dist/services/deploy-diff/variable-names.js.map +1 -0
  487. package/dist/services/engine-resolver.js +3 -0
  488. package/dist/services/engine-resolver.js.map +1 -1
  489. package/dist/services/engine-rules-loader.d.ts +6 -0
  490. package/dist/services/engine-rules-loader.js +12 -3
  491. package/dist/services/engine-rules-loader.js.map +1 -1
  492. package/dist/services/oxc-parser.d.ts +26 -0
  493. package/dist/services/oxc-parser.js +70 -0
  494. package/dist/services/oxc-parser.js.map +1 -0
  495. package/dist/services/project-cli.d.ts +75 -0
  496. package/dist/services/project-cli.js +302 -0
  497. package/dist/services/project-cli.js.map +1 -0
  498. package/dist/services/project-parser.d.ts +5 -0
  499. package/dist/services/project-parser.js +25 -13
  500. package/dist/services/project-parser.js.map +1 -1
  501. package/dist/services/skills.js +3 -3
  502. package/dist/services/skills.js.map +1 -1
  503. package/dist/services/snapshot-service.d.ts +25 -8
  504. package/dist/services/snapshot-service.js +46 -4
  505. package/dist/services/snapshot-service.js.map +1 -1
  506. package/dist/services/socket-client.js +1 -1
  507. package/dist/services/socket-client.js.map +1 -1
  508. package/dist/services/test-filters.d.ts +18 -0
  509. package/dist/services/test-filters.js +10 -0
  510. package/dist/services/test-filters.js.map +1 -1
  511. package/dist/services/test-runner.d.ts +1 -1
  512. package/dist/services/test-runner.js +10 -11
  513. package/dist/services/test-runner.js.map +1 -1
  514. package/dist/services/test-session-cancel.d.ts +5 -0
  515. package/dist/services/test-session-cancel.js +28 -3
  516. package/dist/services/test-session-cancel.js.map +1 -1
  517. package/dist/services/trigger-runner.d.ts +1 -1
  518. package/dist/services/trigger-runner.js +2 -2
  519. package/dist/services/trigger-runner.js.map +1 -1
  520. package/dist/services/two-installs.d.ts +39 -0
  521. package/dist/services/two-installs.js +155 -0
  522. package/dist/services/two-installs.js.map +1 -0
  523. package/dist/services/util.d.ts +17 -2
  524. package/dist/services/util.js +118 -11
  525. package/dist/services/util.js.map +1 -1
  526. package/dist/services/write-back/apply-edits.d.ts +29 -0
  527. package/dist/services/write-back/apply-edits.js +255 -0
  528. package/dist/services/write-back/apply-edits.js.map +1 -0
  529. package/dist/services/write-back/helper-edit.d.ts +135 -0
  530. package/dist/services/write-back/helper-edit.js +343 -0
  531. package/dist/services/write-back/helper-edit.js.map +1 -0
  532. package/dist/services/write-back/imports.d.ts +30 -0
  533. package/dist/services/write-back/imports.js +88 -0
  534. package/dist/services/write-back/imports.js.map +1 -0
  535. package/dist/services/write-back/literal-edit.d.ts +183 -0
  536. package/dist/services/write-back/literal-edit.js +359 -0
  537. package/dist/services/write-back/literal-edit.js.map +1 -0
  538. package/dist/services/write-back/output.d.ts +26 -0
  539. package/dist/services/write-back/output.js +110 -0
  540. package/dist/services/write-back/output.js.map +1 -0
  541. package/dist/services/write-back/plan.d.ts +180 -0
  542. package/dist/services/write-back/plan.js +1046 -0
  543. package/dist/services/write-back/plan.js.map +1 -0
  544. package/dist/services/write-back/source-file.d.ts +133 -0
  545. package/dist/services/write-back/source-file.js +460 -0
  546. package/dist/services/write-back/source-file.js.map +1 -0
  547. package/dist/sourcegen/index.d.ts +1 -1
  548. package/dist/sourcegen/index.js +1 -1
  549. package/dist/sourcegen/index.js.map +1 -1
  550. package/dist/sourcegen/program.d.ts +19 -1
  551. package/dist/sourcegen/program.js +32 -7
  552. package/dist/sourcegen/program.js.map +1 -1
  553. package/dist/testing/clear-git-env.d.ts +1 -0
  554. package/dist/testing/clear-git-env.js +25 -0
  555. package/dist/testing/clear-git-env.js.map +1 -0
  556. package/dist/testing/global-setup.d.ts +1 -0
  557. package/dist/testing/global-setup.js +3 -0
  558. package/dist/testing/global-setup.js.map +1 -1
  559. package/oclif.manifest.json +1113 -884
  560. package/package.json +21 -19
  561. package/dist/commands/rules.d.ts +0 -9
  562. package/dist/commands/rules.js +0 -13
  563. package/dist/commands/rules.js.map +0 -1
  564. package/dist/constructs/agentic-check-codegen.d.ts +0 -22
  565. package/dist/constructs/agentic-check-codegen.js +0 -59
  566. package/dist/constructs/agentic-check-codegen.js.map +0 -1
  567. package/dist/constructs/agentic-check.d.ts +0 -237
  568. package/dist/constructs/agentic-check.js +0 -100
  569. package/dist/constructs/agentic-check.js.map +0 -1
  570. package/dist/services/check-parser/package-files/json-text-source-file-parser.d.ts +0 -7
  571. package/dist/services/check-parser/package-files/json-text-source-file-parser.js +0 -47
  572. package/dist/services/check-parser/package-files/json-text-source-file-parser.js.map +0 -1
  573. package/dist/services/check-parser/package-files/source-file-parser.d.ts +0 -10
  574. package/dist/services/check-parser/package-files/source-file-parser.js +0 -13
  575. package/dist/services/check-parser/package-files/source-file-parser.js.map +0 -1
@@ -0,0 +1,343 @@
1
+ import { hasEscalationPolicy, valueForAlertEscalation } from '../../constructs/alert-escalation-policy-codegen.js';
2
+ import { valueForAssertion } from '../../constructs/api-assertion-codegen.js';
3
+ import { valueForDnsAssertion } from '../../constructs/dns-assertion-codegen.js';
4
+ import { valueForFrequency } from '../../constructs/frequency-codegen.js';
5
+ import { valueForGrpcAssertion } from '../../constructs/grpc-assertion-codegen.js';
6
+ import { valueForIcmpAssertion } from '../../constructs/icmp-assertion-codegen.js';
7
+ import { valueForDate } from '../../constructs/maintenance-window-codegen.js';
8
+ import { valueForRetryStrategy } from '../../constructs/retry-strategy-codegen.js';
9
+ import { valueForSslAssertion } from '../../constructs/ssl-assertion-codegen.js';
10
+ import { valueForTcpAssertion } from '../../constructs/tcp-monitor-codegen.js';
11
+ import { valueForTracerouteAssertion } from '../../constructs/traceroute-assertion-codegen.js';
12
+ import { valueForUrlAssertion } from '../../constructs/url-assertion-codegen.js';
13
+ import { ArgumentsValue, ArrayValue, BooleanValue, CallExpressionValue, GeneratedFile, IdentifierValue, MemberExpressionValue, NewExpressionValue, NullValue, NumberValue, ObjectValue, sortObjectPropertiesByOrderAndName, StringValue, UndefinedValue, } from '../../sourcegen/index.js';
14
+ import { isPlainLiteral, layoutList, quoteString, renderKey } from './literal-edit.js';
15
+ import { memberName, WriteBackSkipped } from './source-file.js';
16
+ /** The codegen for each assertion builder a monitor class spells its assertions with. */
17
+ const ASSERTION_CODEGENS = {
18
+ AssertionBuilder: valueForAssertion,
19
+ UrlAssertionBuilder: valueForUrlAssertion,
20
+ TcpAssertionBuilder: valueForTcpAssertion,
21
+ DnsAssertionBuilder: valueForDnsAssertion,
22
+ GrpcAssertionBuilder: valueForGrpcAssertion,
23
+ SslAssertionBuilder: valueForSslAssertion,
24
+ IcmpAssertionBuilder: valueForIcmpAssertion,
25
+ TracerouteAssertionBuilder: valueForTracerouteAssertion,
26
+ };
27
+ /** The names of every assertion builder: each spells the same property, so a file may hold any of them. */
28
+ export const ASSERTION_BUILDERS = Object.keys(ASSERTION_CODEGENS);
29
+ export function isHelperEdit(edit) {
30
+ return edit.helper !== undefined;
31
+ }
32
+ const HELPER_CLASSES = {
33
+ frequency: 'Frequency',
34
+ retryStrategy: 'RetryStrategyBuilder',
35
+ alertEscalation: 'AlertEscalationBuilder',
36
+ date: 'Date',
37
+ };
38
+ /** The class the edit's expression is built on, as `checkly/constructs` exports it, or the global `Date`. */
39
+ export function helperClass(edit) {
40
+ return edit.helper === 'assertions' ? edit.builder : HELPER_CLASSES[edit.helper];
41
+ }
42
+ /** Whether the edit's class is a global every file binds, rather than one imported from `checkly/constructs`. */
43
+ export function isGlobalHelper(edit) {
44
+ return edit.helper === 'date';
45
+ }
46
+ /**
47
+ * A `GeneratedFile` that only remembers which names the codegen asked to
48
+ * import. The names are added to the file's `checkly/constructs` import, so
49
+ * a codegen asking for anything else cannot be written.
50
+ */
51
+ class ImportSink extends GeneratedFile {
52
+ names = [];
53
+ constructor() {
54
+ super('write-back.ts');
55
+ }
56
+ namedImport(identifier, from, options) {
57
+ if (from !== 'checkly/constructs' || options?.alias !== undefined) {
58
+ throw new WriteBackSkipped(`${identifier} is not a class checkly/constructs exports`);
59
+ }
60
+ if (!this.names.includes(identifier)) {
61
+ this.names.push(identifier);
62
+ }
63
+ super.namedImport(identifier, from, options);
64
+ }
65
+ }
66
+ /** The errors of a `cause` chain, outermost first: the codegen wraps each failure in another. */
67
+ function causes(err) {
68
+ const chain = [];
69
+ for (let current = err; current !== undefined; current = current instanceof Error ? current.cause : undefined) {
70
+ chain.push(current);
71
+ }
72
+ return chain;
73
+ }
74
+ /** The classes an expression references: the identifiers its member and call chains are rooted at. */
75
+ function referencedClasses(value, names = new Set()) {
76
+ if (value instanceof IdentifierValue) {
77
+ names.add(value.value);
78
+ }
79
+ else if (value instanceof MemberExpressionValue) {
80
+ referencedClasses(value.object, names);
81
+ }
82
+ else if (value instanceof CallExpressionValue || value instanceof NewExpressionValue) {
83
+ referencedClasses(value.callee, names);
84
+ referencedClasses(value.args, names);
85
+ }
86
+ else if (value instanceof ArgumentsValue || value instanceof ArrayValue) {
87
+ value.value.forEach(member => referencedClasses(member, names));
88
+ }
89
+ else if (value instanceof ObjectValue) {
90
+ value.value.forEach(property => referencedClasses(property.value, names));
91
+ }
92
+ return names;
93
+ }
94
+ /**
95
+ * The expression the codegen builds for the edit's value, and the classes
96
+ * it references (those the codegen asked to import and the expression
97
+ * names: a gRPC assertion the builder cannot spell comes back as a plain
98
+ * object, which needs no import). The value is what the account holds, in
99
+ * the import format `entry.before` carries.
100
+ *
101
+ * @throws WriteBackSkipped for a value the codegen cannot spell (an
102
+ * assertion source or retry type this CLI does not know, a malformed row)
103
+ * or one that means "unset", which is never written because nothing is
104
+ * ever removed from the code.
105
+ */
106
+ export function buildHelperValue(edit, spelledOut = []) {
107
+ const at = edit.path.join('.');
108
+ const missing = () => new WriteBackSkipped(`Checkly has no value for ${at}; edit the property by hand`);
109
+ const sink = new ImportSink();
110
+ let value;
111
+ try {
112
+ switch (edit.helper) {
113
+ case 'frequency': {
114
+ const schedule = typeof edit.value === 'number'
115
+ ? { frequency: edit.value }
116
+ : edit.value;
117
+ if (typeof schedule?.frequency !== 'number') {
118
+ throw missing();
119
+ }
120
+ value = valueForFrequency(sink, {
121
+ frequency: schedule.frequency,
122
+ frequencyOffset: typeof schedule.frequencyOffset === 'number' ? schedule.frequencyOffset : undefined,
123
+ });
124
+ break;
125
+ }
126
+ case 'retryStrategy': {
127
+ // A row holds null for no retries; anything else is a strategy of a type.
128
+ const strategy = edit.value;
129
+ if (strategy !== null && typeof strategy?.type !== 'string') {
130
+ throw missing();
131
+ }
132
+ value = valueForRetryStrategy(sink, strategy, spelledOut);
133
+ break;
134
+ }
135
+ case 'alertEscalation':
136
+ // A v2 group on the global policy spells it as the word 'global';
137
+ // the column holds `{}` for a check that never set a policy of its own.
138
+ if (edit.value === 'global') {
139
+ value = new StringValue('global');
140
+ break;
141
+ }
142
+ if (!hasEscalationPolicy(edit.value)) {
143
+ throw missing();
144
+ }
145
+ value = valueForAlertEscalation(sink, edit.value);
146
+ break;
147
+ case 'date': {
148
+ // The account reports a timestamp as an ISO string; the construct
149
+ // takes a Date, which the import spells as `new Date('<iso>')`.
150
+ if (typeof edit.value !== 'string' || Number.isNaN(Date.parse(edit.value))) {
151
+ throw missing();
152
+ }
153
+ value = valueForDate(edit.value);
154
+ break;
155
+ }
156
+ case 'assertions': {
157
+ const codegen = ASSERTION_CODEGENS[edit.builder];
158
+ if (codegen === undefined) {
159
+ throw new WriteBackSkipped(`${edit.builder} is not an assertion builder this tool knows`);
160
+ }
161
+ if (!Array.isArray(edit.value) || !edit.value.every(isRecord)) {
162
+ throw missing();
163
+ }
164
+ value = new ArrayValue(edit.value.map(assertion => codegen(sink, assertion)));
165
+ break;
166
+ }
167
+ }
168
+ }
169
+ catch (err) {
170
+ const chain = causes(err);
171
+ const skipped = chain.find(cause => cause instanceof WriteBackSkipped);
172
+ if (skipped !== undefined) {
173
+ throw skipped;
174
+ }
175
+ // The codegens refuse what they cannot spell with a plain `Error`
176
+ // (`Unsupported …`, `… cannot be null`), wrapped by the builders; a
177
+ // `TypeError` or the like is a defect of this CLI and stays one.
178
+ const cause = chain[chain.length - 1];
179
+ if (cause instanceof Error && cause.constructor === Error) {
180
+ throw new WriteBackSkipped(`Checkly reported a value this CLI cannot spell: ${cause.message}`);
181
+ }
182
+ throw err;
183
+ }
184
+ const referenced = referencedClasses(value);
185
+ return { value, imports: sink.names.filter(name => referenced.has(name)) };
186
+ }
187
+ const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
188
+ /**
189
+ * Whether `node` is an expression built on one of `locals` (the names the
190
+ * file binds the helper class to): a member, call or `new` chain rooted at
191
+ * such a name, with every argument a literal (see `isReplaceableByHelper`),
192
+ * `undefined`, or such a chain. Replacing it loses nothing the user wrote
193
+ * by hand.
194
+ */
195
+ export function isHelperExpression(node, locals) {
196
+ const argument = (arg) => arg.type !== 'SpreadElement'
197
+ && ((arg.type === 'Identifier' && arg.name === 'undefined') || isReplaceableByHelper(arg, locals));
198
+ switch (node.type) {
199
+ case 'Identifier':
200
+ return locals.has(node.name);
201
+ case 'MemberExpression':
202
+ return !node.computed && node.property.type === 'Identifier' && isHelperExpression(node.object, locals);
203
+ case 'CallExpression':
204
+ case 'NewExpression':
205
+ return isHelperExpression(node.callee, locals) && node.arguments.every(argument);
206
+ default:
207
+ return false;
208
+ }
209
+ }
210
+ /**
211
+ * Whether `node` can be replaced by a helper edit without losing anything
212
+ * written by hand: a plain literal, `null` (the edit writes an expression,
213
+ * not null, and the codegen spells an assertion it has no builder method
214
+ * for as an object holding `regex: null`), a helper expression, or an
215
+ * array or object built only of those.
216
+ */
217
+ export function isReplaceableByHelper(node, locals) {
218
+ if (isPlainLiteral(node) || isHelperExpression(node, locals) || (node.type === 'Literal' && node.value === null)) {
219
+ return true;
220
+ }
221
+ if (node.type === 'ArrayExpression') {
222
+ return node.elements.every(element => element !== null && element.type !== 'SpreadElement' && isReplaceableByHelper(element, locals));
223
+ }
224
+ if (node.type === 'ObjectExpression') {
225
+ return node.properties.every(property => memberName(property) !== undefined
226
+ && !property.shorthand
227
+ && isReplaceableByHelper(property.value, locals));
228
+ }
229
+ return false;
230
+ }
231
+ /**
232
+ * The source text of a sourcegen expression in the file's style. Objects
233
+ * keep the order the codegen gave them (its own sorter), so the text is
234
+ * the one `checkly import` would print, reindented and requoted.
235
+ *
236
+ * @throws WriteBackSkipped for a value class the codegen never produces for
237
+ * these properties and this renderer does not spell.
238
+ */
239
+ export function renderExpression(value, style, layout) {
240
+ const inner = layout.column + style.indentUnit;
241
+ const nested = (member) => renderExpression(member, style, { ...layout, column: inner });
242
+ if (value instanceof IdentifierValue) {
243
+ return layout.locals.get(value.value) ?? value.value;
244
+ }
245
+ if (value instanceof MemberExpressionValue) {
246
+ return `${renderExpression(value.object, style, layout)}.${renderExpression(value.property, style, layout)}`;
247
+ }
248
+ if (value instanceof CallExpressionValue) {
249
+ return `${renderExpression(value.callee, style, layout)}${renderExpression(value.args, style, layout)}`;
250
+ }
251
+ if (value instanceof NewExpressionValue) {
252
+ return `new ${renderExpression(value.callee, style, layout)}${renderExpression(value.args, style, layout)}`;
253
+ }
254
+ if (value instanceof ArgumentsValue) {
255
+ return `(${value.value.map(arg => renderExpression(arg, style, layout)).join(', ')})`;
256
+ }
257
+ if (value instanceof StringValue) {
258
+ return quoteString(value.value, style.quote);
259
+ }
260
+ if (value instanceof NumberValue) {
261
+ if (!Number.isFinite(value.value)) {
262
+ throw new WriteBackSkipped(`${value.value} cannot be written as a literal`);
263
+ }
264
+ return String(value.value);
265
+ }
266
+ if (value instanceof BooleanValue) {
267
+ return String(value.value);
268
+ }
269
+ if (value instanceof UndefinedValue) {
270
+ return 'undefined';
271
+ }
272
+ if (value instanceof NullValue) {
273
+ return 'null';
274
+ }
275
+ if (value instanceof ArrayValue) {
276
+ return layoutList('[', value.value.map(nested), ']', style, layout);
277
+ }
278
+ if (value instanceof ObjectValue) {
279
+ const sorter = value.options?.sort ?? sortObjectPropertiesByOrderAndName;
280
+ const members = [...value.value].sort(sorter)
281
+ .map(property => `${renderKey(property.name, style.quote)}: ${nested(property.value)}`);
282
+ return layoutList('{', members, '}', style, layout);
283
+ }
284
+ throw new WriteBackSkipped(`a ${value.constructor.name} cannot be written into the code`);
285
+ }
286
+ /**
287
+ * Whether a parsed node is the expression `value` renders to: the same
288
+ * names, members, arguments and literals. The check the read-back of a
289
+ * written file makes; it says nothing about what the expression means,
290
+ * which the codegen's own tests cover.
291
+ */
292
+ export function matchesValue(node, value, locals) {
293
+ const all = (nodes, values) => nodes.length === values.length
294
+ && nodes.every((child, i) => child !== null && matchesValue(child, values[i], locals));
295
+ if (value instanceof IdentifierValue) {
296
+ return node.type === 'Identifier' && node.name === (locals.get(value.value) ?? value.value);
297
+ }
298
+ if (value instanceof MemberExpressionValue) {
299
+ return node.type === 'MemberExpression' && !node.computed
300
+ && matchesValue(node.object, value.object, locals) && matchesValue(node.property, value.property, locals);
301
+ }
302
+ if (value instanceof CallExpressionValue) {
303
+ return node.type === 'CallExpression' && matchesValue(node.callee, value.callee, locals)
304
+ && all(node.arguments, value.args.value);
305
+ }
306
+ if (value instanceof NewExpressionValue) {
307
+ return node.type === 'NewExpression' && matchesValue(node.callee, value.callee, locals)
308
+ && all(node.arguments, value.args.value);
309
+ }
310
+ if (value instanceof StringValue) {
311
+ return node.type === 'Literal' && node.value === value.value;
312
+ }
313
+ if (value instanceof NumberValue) {
314
+ if (value.value < 0) {
315
+ return node.type === 'UnaryExpression' && node.operator === '-'
316
+ && node.argument.type === 'Literal' && node.argument.value === -value.value;
317
+ }
318
+ return node.type === 'Literal' && node.value === value.value;
319
+ }
320
+ if (value instanceof BooleanValue) {
321
+ return node.type === 'Literal' && node.value === value.value;
322
+ }
323
+ if (value instanceof UndefinedValue) {
324
+ return node.type === 'Identifier' && node.name === 'undefined';
325
+ }
326
+ if (value instanceof NullValue) {
327
+ return node.type === 'Literal' && node.value === null;
328
+ }
329
+ if (value instanceof ArrayValue) {
330
+ return node.type === 'ArrayExpression' && all(node.elements, value.value);
331
+ }
332
+ if (value instanceof ObjectValue) {
333
+ if (node.type !== 'ObjectExpression' || node.properties.length !== value.value.length) {
334
+ return false;
335
+ }
336
+ return value.value.every(property => {
337
+ const member = node.properties.find(candidate => memberName(candidate) === property.name);
338
+ return member !== undefined && !member.shorthand && matchesValue(member.value, property.value, locals);
339
+ });
340
+ }
341
+ return false;
342
+ }
343
+ //# sourceMappingURL=helper-edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helper-edit.js","sourceRoot":"","sources":["../../../src/services/write-back/helper-edit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAA;AAClH,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAA;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAA;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAA;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAA;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAA;AAClF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAA;AAC9E,OAAO,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAA;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EACL,cAAc,EACd,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,WAAW,EACX,kCAAkC,EAClC,WAAW,EACX,cAAc,GAEf,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAoB,WAAW,EAAE,SAAS,EAAoB,MAAM,mBAAmB,CAAA;AAC1H,OAAO,EAAE,UAAU,EAAa,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AA4B1E,yFAAyF;AACzF,MAAM,kBAAkB,GAAG;IACzB,gBAAgB,EAAE,iBAAiB;IACnC,mBAAmB,EAAE,oBAAoB;IACzC,mBAAmB,EAAE,oBAAoB;IACzC,mBAAmB,EAAE,oBAAoB;IACzC,oBAAoB,EAAE,qBAAqB;IAC3C,mBAAmB,EAAE,oBAAoB;IACzC,oBAAoB,EAAE,qBAAqB;IAC3C,0BAA0B,EAAE,2BAA2B;CACb,CAAA;AAI5C,2GAA2G;AAC3G,MAAM,CAAC,MAAM,kBAAkB,GAAsB,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;AA0BpF,MAAM,UAAU,YAAY,CAAE,IAAgB;IAC5C,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,CAAA;AAClC,CAAC;AAED,MAAM,cAAc,GAAgE;IAClF,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,sBAAsB;IACrC,eAAe,EAAE,wBAAwB;IACzC,IAAI,EAAE,MAAM;CACb,CAAA;AAED,6GAA6G;AAC7G,MAAM,UAAU,WAAW,CAAE,IAAgB;IAC3C,OAAO,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAClF,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,cAAc,CAAE,IAAgB;IAC9C,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,CAAA;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAW,SAAQ,aAAa;IAC3B,KAAK,GAAa,EAAE,CAAA;IAE7B;QACE,KAAK,CAAC,eAAe,CAAC,CAAA;IACxB,CAAC;IAED,WAAW,CAAE,UAAkB,EAAE,IAAY,EAAE,OAAqD;QAClG,IAAI,IAAI,KAAK,oBAAoB,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;YAClE,MAAM,IAAI,gBAAgB,CAAC,GAAG,UAAU,4CAA4C,CAAC,CAAA;QACvF,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC7B,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IAC9C,CAAC;CACF;AAED,iGAAiG;AACjG,SAAS,MAAM,CAAE,GAAY;IAC3B,MAAM,KAAK,GAAc,EAAE,CAAA;IAC3B,KAAK,IAAI,OAAO,GAAG,GAAG,EAAE,OAAO,KAAK,SAAS,EAAE,OAAO,GAAG,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QAC9G,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACrB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,sGAAsG;AACtG,SAAS,iBAAiB,CAAE,KAAY,EAAE,QAAqB,IAAI,GAAG,EAAE;IACtE,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;QACrC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;SAAM,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;QAClD,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACxC,CAAC;SAAM,IAAI,KAAK,YAAY,mBAAmB,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;QACvF,iBAAiB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACtC,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACtC,CAAC;SAAM,IAAI,KAAK,YAAY,cAAc,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAC1E,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;IACjE,CAAC;SAAM,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACxC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IAC3E,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAC9B,IAAgB,EAChB,aAAgC,EAAE;IAElC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,gBAAgB,CAAC,4BAA4B,EAAE,6BAA6B,CAAC,CAAA;IACvG,MAAM,IAAI,GAAG,IAAI,UAAU,EAAE,CAAA;IAC7B,IAAI,KAAY,CAAA;IAChB,IAAI,CAAC;QACH,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,QAAQ,GAAG,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;oBAC7C,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE;oBAC3B,CAAC,CAAC,IAAI,CAAC,KAA8E,CAAA;gBACvF,IAAI,OAAO,QAAQ,EAAE,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAC5C,MAAM,OAAO,EAAE,CAAA;gBACjB,CAAC;gBACD,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE;oBAC9B,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,eAAe,EAAE,OAAO,QAAQ,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;iBACrG,CAAC,CAAA;gBACF,MAAK;YACP,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,0EAA0E;gBAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAA8C,CAAA;gBACpE,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC5D,MAAM,OAAO,EAAE,CAAA;gBACjB,CAAC;gBACD,KAAK,GAAG,qBAAqB,CAAC,IAAI,EAAE,QAAuD,EAAE,UAAU,CAAC,CAAA;gBACxG,MAAK;YACP,CAAC;YACD,KAAK,iBAAiB;gBACpB,kEAAkE;gBAClE,wEAAwE;gBACxE,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC5B,KAAK,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAA;oBACjC,MAAK;gBACP,CAAC;gBACD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrC,MAAM,OAAO,EAAE,CAAA;gBACjB,CAAC;gBACD,KAAK,GAAG,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;gBACjD,MAAK;YACP,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,kEAAkE;gBAClE,gEAAgE;gBAChE,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC3E,MAAM,OAAO,EAAE,CAAA;gBACjB,CAAC;gBACD,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBAChC,MAAK;YACP,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,OAAO,GAAiC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBAC9E,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAC1B,MAAM,IAAI,gBAAgB,CAAC,GAAG,IAAI,CAAC,OAAO,8CAA8C,CAAC,CAAA;gBAC3F,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC9D,MAAM,OAAO,EAAE,CAAA;gBACjB,CAAC;gBACD,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;gBAC7E,MAAK;YACP,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,YAAY,gBAAgB,CAAC,CAAA;QACtE,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,OAAO,CAAA;QACf,CAAC;QACD,kEAAkE;QAClE,oEAAoE;QACpE,iEAAiE;QACjE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACrC,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YAC1D,MAAM,IAAI,gBAAgB,CAAC,mDAAmD,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QAChG,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IACD,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;IAC3C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAA;AAC5E,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CACpE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAEtE;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAE,IAAU,EAAE,MAA2B;IACzE,MAAM,QAAQ,GAAG,CAAC,GAAS,EAAW,EAAE,CACtC,GAAG,CAAC,IAAI,KAAK,eAAe;WACzB,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAA;IACpG,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,YAAY;YACf,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,KAAK,kBAAkB;YACrB,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACzG,KAAK,gBAAgB,CAAC;QACtB,KAAK,eAAe;YAClB,OAAO,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClF;YACE,OAAO,KAAK,CAAA;IAChB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAE,IAAU,EAAE,MAA2B;IAC5E,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;QACjH,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CACnC,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,IAAI,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;IACnG,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CACtC,UAAU,CAAC,QAAQ,CAAC,KAAK,SAAS;eAC/B,CAAE,QAA8B,CAAC,SAAS;eAC1C,qBAAqB,CAAE,QAA8B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5E,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAaD;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAE,KAAY,EAAE,KAAkB,EAAE,MAAwB;IAC1F,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAA;IAC9C,MAAM,MAAM,GAAG,CAAC,MAAa,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IAC/F,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;QACrC,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAA;IACtD,CAAC;IACD,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;QAC3C,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAA;IAC9G,CAAC;IACD,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;QACzC,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAA;IACzG,CAAC;IACD,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;QACxC,OAAO,OAAO,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAA;IAC7G,CAAC;IACD,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;IACvF,CAAC;IACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAC9C,CAAC;IACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,gBAAgB,CAAC,GAAG,KAAK,CAAC,KAAK,iCAAiC,CAAC,CAAA;QAC7E,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IACD,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IACD,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,OAAO,WAAW,CAAA;IACpB,CAAC;IACD,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAA;IACf,CAAC;IACD,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IACrE,CAAC;IACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,kCAAkC,CAAA;QACxE,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;aAC1C,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACzF,OAAO,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IACrD,CAAC;IACD,MAAM,IAAI,gBAAgB,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,kCAAkC,CAAC,CAAA;AAC3F,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAE,IAAU,EAAE,KAAY,EAAE,MAAmC;IACzF,MAAM,GAAG,GAAG,CAAmB,KAA+B,EAAE,MAAoB,EAAW,EAAE,CAC/F,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;WAC3B,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IACxF,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAA;IAC7F,CAAC;IACD,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,CAAC,IAAI,CAAC,QAAQ;eACpD,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC7G,CAAC;IACD,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;eACnF,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5C,CAAC;IACD,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;eAClF,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5C,CAAC;IACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAA;IAC9D,CAAC;IACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG;mBAC1D,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,CAAA;QAC/E,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAA;IAC9D,CAAC;IACD,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAA;IAC9D,CAAC;IACD,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,CAAA;IAChE,CAAC;IACD,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAA;IACvD,CAAC;IACD,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAC3E,CAAC;IACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACtF,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,IAAI,CACzD,CAAA;YAC/B,OAAO,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QACxG,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { type ParsedSource, type Splice } from './source-file.js';
2
+ /**
3
+ * Makes the classes a helper expression references (`Frequency`,
4
+ * `RetryStrategyBuilder`, an assertion builder — all exports of
5
+ * `checkly/constructs`) available in a construct file: under the local name
6
+ * an existing import or `require` of a checkly package already binds them
7
+ * to, or by adding them to the file's top-level
8
+ * `import { … } from 'checkly/constructs'` (or
9
+ * `const { … } = require('checkly/constructs')`). A name the file already
10
+ * uses for something else is refused, and so is every name when the file
11
+ * has no such declaration to extend: no statement is ever added, which
12
+ * would mean guessing the file's module style.
13
+ */
14
+ export interface ImportResolution {
15
+ /** Names that cannot be made available, with the reason. */
16
+ refused: Map<string, string>;
17
+ /** Names the file binds nowhere yet, which `appendImports` can add. */
18
+ missing: string[];
19
+ }
20
+ /** Which of `names` the file lacks, and which it cannot take. Independent of which of them end up written. */
21
+ export declare function resolveImports(source: ParsedSource, names: readonly string[]): ImportResolution;
22
+ /**
23
+ * The edit that adds `names` (each one `resolveImports` reported missing) to
24
+ * the file's `checkly/constructs` declaration, after its last specifier: on
25
+ * the same line when the list is one line, otherwise one per line at the
26
+ * last specifier's indentation, after the line the last specifier (or its
27
+ * comma, or a comment behind it) ends on, keeping the trailing comma when
28
+ * the list has one.
29
+ */
30
+ export declare function appendImports(source: ParsedSource, names: readonly string[]): Splice | undefined;
@@ -0,0 +1,88 @@
1
+ import { indentationAt, lineEndingOf } from './literal-edit.js';
2
+ import { appendAfterLast, checklyBindings, CONSTRUCTS_MODULE, isChecklyRequire, stringOf, gapTokens, usesIdentifier, } from './source-file.js';
3
+ /** Which of `names` the file lacks, and which it cannot take. Independent of which of them end up written. */
4
+ export function resolveImports(source, names) {
5
+ const { program } = source;
6
+ const refused = new Map();
7
+ const missing = [];
8
+ for (const name of new Set(names)) {
9
+ if (checklyBindings(program, new Set([name])).size > 0) {
10
+ continue;
11
+ }
12
+ if (usesIdentifier(program, name)) {
13
+ refused.set(name, `${name} is already used for something else in this file`);
14
+ }
15
+ else if (constructsDeclaration(source) === undefined) {
16
+ refused.set(name, `add \`import { ${name} } from '${CONSTRUCTS_MODULE}'\` by hand`);
17
+ }
18
+ else {
19
+ missing.push(name);
20
+ }
21
+ }
22
+ return { refused, missing };
23
+ }
24
+ /**
25
+ * The edit that adds `names` (each one `resolveImports` reported missing) to
26
+ * the file's `checkly/constructs` declaration, after its last specifier: on
27
+ * the same line when the list is one line, otherwise one per line at the
28
+ * last specifier's indentation, after the line the last specifier (or its
29
+ * comma, or a comment behind it) ends on, keeping the trailing comma when
30
+ * the list has one.
31
+ */
32
+ export function appendImports(source, names) {
33
+ const declaration = constructsDeclaration(source);
34
+ if (declaration === undefined || names.length === 0) {
35
+ return undefined;
36
+ }
37
+ const { text } = source;
38
+ const { last, open, close } = declaration;
39
+ if (!text.slice(open, close).includes('\n')) {
40
+ return { start: last.range[1], end: last.range[1], text: names.map(name => `, ${name}`).join('') };
41
+ }
42
+ return appendAfterLast(source, last, close, names, indentationAt(text, last.range[0]), lineEndingOf(text));
43
+ }
44
+ /**
45
+ * The top-level declaration that names what `checkly/constructs` exports:
46
+ * a value import with named specifiers, or, for a CommonJS file, a
47
+ * destructuring `require` of the same module.
48
+ */
49
+ function constructsDeclaration(source) {
50
+ const { program } = source;
51
+ const brace = (start, end, value) => gapTokens(source, start, end).find(token => token.kind === 'token' && token.value === value)?.range[0];
52
+ for (const statement of program.body) {
53
+ if (statement.type === 'ImportDeclaration' && statement.source.value === CONSTRUCTS_MODULE
54
+ && statement.importKind !== 'type') {
55
+ const named = statement.specifiers.filter(specifier => specifier.type === 'ImportSpecifier');
56
+ if (named.length === 0) {
57
+ continue;
58
+ }
59
+ const last = named[named.length - 1];
60
+ const open = brace(statement.range[0], named[0].range[0], '{');
61
+ const close = brace(last.range[1], statement.source.range[0], '}');
62
+ if (open !== undefined && close !== undefined) {
63
+ return { last, open, close };
64
+ }
65
+ }
66
+ if (statement.type === 'VariableDeclaration') {
67
+ for (const declarator of statement.declarations) {
68
+ if (declarator.id.type !== 'ObjectPattern' || !isChecklyRequire(declarator.init)
69
+ || stringOf(declarator.init.arguments[0]) !== CONSTRUCTS_MODULE) {
70
+ continue;
71
+ }
72
+ const properties = declarator.id.properties.filter(property => property.type === 'Property');
73
+ if (properties.length > 0) {
74
+ const pattern = declarator.id;
75
+ const last = properties[properties.length - 1];
76
+ // A TypeScript annotation (`const { … }: T = require(…)`) is part of
77
+ // the pattern's range; the closing brace comes before it.
78
+ const close = brace(last.range[1], pattern.typeAnnotation?.range[0] ?? pattern.range[1], '}');
79
+ if (close !== undefined) {
80
+ return { last, open: pattern.range[0], close };
81
+ }
82
+ }
83
+ }
84
+ }
85
+ }
86
+ return undefined;
87
+ }
88
+ //# sourceMappingURL=imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.js","sourceRoot":"","sources":["../../../src/services/write-back/imports.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC/D,OAAO,EACL,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAIhB,QAAQ,EACR,SAAS,EACT,cAAc,GACf,MAAM,kBAAkB,CAAA;AAsBzB,8GAA8G;AAC9G,MAAM,UAAU,cAAc,CAAE,MAAoB,EAAE,KAAwB;IAC5E,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IACzC,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,IAAI,eAAe,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACvD,SAAQ;QACV,CAAC;QACD,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,kDAAkD,CAAC,CAAA;QAC9E,CAAC;aAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,kBAAkB,IAAI,YAAY,iBAAiB,aAAa,CAAC,CAAA;QACrF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AAC7B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAE,MAAoB,EAAE,KAAwB;IAC3E,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAA;IACjD,IAAI,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAA;IACvB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,WAAW,CAAA;IACzC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;IACpG,CAAC;IACD,OAAO,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;AAC5G,CAAC;AAWD;;;;GAIG;AACH,SAAS,qBAAqB,CAAE,MAAoB;IAClD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;IAC1B,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,KAAgB,EAAsB,EAAE,CACjF,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IACxG,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,SAAS,CAAC,IAAI,KAAK,mBAAmB,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,KAAK,iBAAiB;eACrF,SAAS,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAA;YAC5F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,SAAQ;YACV,CAAC;YACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YAClE,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC9C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;YAC9B,CAAC;QACH,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YAC7C,KAAK,MAAM,UAAU,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBAChD,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,KAAK,eAAe,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC;uBAC3E,QAAQ,CAAE,UAAU,CAAC,IAAgC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,iBAAiB,EAAE,CAAC;oBAC/F,SAAQ;gBACV,CAAC;gBACD,MAAM,UAAU,GAAG,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,CAAA;gBAC5F,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,CAAA;oBAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;oBAC9C,qEAAqE;oBACrE,0DAA0D;oBAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;oBAC7F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;wBACxB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAA;oBAChD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}