checkly 9.5.0 → 10.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai-context/context.js +1 -0
- package/dist/ai-context/context.js.map +1 -1
- package/dist/ai-context/onboarding-boilerplate/checkly-config-template.ts +2 -0
- package/dist/ai-context/public-skills/checkly/SKILL.md +18 -5
- package/dist/ai-context/skills-command/references/communicate.md +6 -3
- package/dist/ai-context/skills-command/references/configure-api-checks.md +1 -9
- package/dist/ai-context/skills-command/references/configure-browser-checks.md +1 -8
- package/dist/ai-context/skills-command/references/configure-check-groups.md +1 -0
- package/dist/ai-context/skills-command/references/configure-dns-monitors.md +1 -9
- package/dist/ai-context/skills-command/references/configure-grpc-monitors.md +24 -0
- package/dist/ai-context/skills-command/references/configure-heartbeat-monitors.md +1 -9
- package/dist/ai-context/skills-command/references/configure-icmp-monitors.md +1 -9
- package/dist/ai-context/skills-command/references/configure-multistep-checks.md +1 -9
- package/dist/ai-context/skills-command/references/configure-playwright-checks.md +1 -1
- package/dist/ai-context/skills-command/references/configure-supporting-constructs.md +6 -2
- package/dist/ai-context/skills-command/references/configure-tcp-monitors.md +1 -10
- package/dist/ai-context/skills-command/references/configure-url-monitors.md +1 -10
- package/dist/ai-context/skills-command/references/configure.md +16 -5
- package/dist/ai-context/skills-command/references/initialize.md +11 -3
- package/dist/ai-context/skills-command/references/investigate-checks.md +1 -1
- package/dist/auth/api-key.d.ts +24 -0
- package/dist/auth/api-key.js +104 -0
- package/dist/auth/api-key.js.map +1 -0
- package/dist/auth/device-flow.d.ts +57 -0
- package/dist/auth/device-flow.js +221 -0
- package/dist/auth/device-flow.js.map +1 -0
- package/dist/auth/index.d.ts +6 -6
- package/dist/auth/index.js +64 -64
- package/dist/auth/index.js.map +1 -1
- package/dist/commands/api.js +43 -10
- package/dist/commands/api.js.map +1 -1
- package/dist/commands/authCommand.d.ts +2 -0
- package/dist/commands/authCommand.js +77 -7
- package/dist/commands/authCommand.js.map +1 -1
- package/dist/commands/debug/parse-project.d.ts +1 -0
- package/dist/commands/debug/parse-project.js +5 -2
- package/dist/commands/debug/parse-project.js.map +1 -1
- package/dist/commands/deploy.d.ts +7 -1
- package/dist/commands/deploy.js +627 -271
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/import/plan.js +18 -4
- package/dist/commands/import/plan.js.map +1 -1
- package/dist/commands/init.js +29 -13
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts +18 -2
- package/dist/commands/login.js +681 -48
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +7 -1
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/pw-test.js +3 -2
- package/dist/commands/pw-test.js.map +1 -1
- package/dist/commands/switch.js +23 -10
- package/dist/commands/switch.js.map +1 -1
- package/dist/commands/test.js +16 -17
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/trigger.js +4 -3
- package/dist/commands/trigger.js.map +1 -1
- package/dist/commands/validate.js +1 -0
- package/dist/commands/validate.js.map +1 -1
- package/dist/constants.d.ts +1 -2
- package/dist/constants.js +0 -1
- package/dist/constants.js.map +1 -1
- package/dist/constructs/alert-channel-codegen.d.ts +6 -1
- package/dist/constructs/alert-channel-codegen.js +12 -6
- package/dist/constructs/alert-channel-codegen.js.map +1 -1
- package/dist/constructs/alert-escalation-policy-codegen.d.ts +7 -0
- package/dist/constructs/alert-escalation-policy-codegen.js +25 -8
- package/dist/constructs/alert-escalation-policy-codegen.js.map +1 -1
- package/dist/constructs/api-assertion.d.ts +0 -2
- package/dist/constructs/api-assertion.js +0 -4
- package/dist/constructs/api-assertion.js.map +1 -1
- package/dist/constructs/api-check-codegen.js +1 -1
- package/dist/constructs/api-check-codegen.js.map +1 -1
- package/dist/constructs/api-check.d.ts +4 -22
- package/dist/constructs/api-check.js +15 -17
- package/dist/constructs/api-check.js.map +1 -1
- package/dist/constructs/api-request-codegen.js +10 -8
- package/dist/constructs/api-request-codegen.js.map +1 -1
- package/dist/constructs/browser-check-bundle.d.ts +19 -13
- package/dist/constructs/browser-check-bundle.js +5 -1
- package/dist/constructs/browser-check-bundle.js.map +1 -1
- package/dist/constructs/browser-check.d.ts +1 -4
- package/dist/constructs/browser-check.js +1 -1
- package/dist/constructs/browser-check.js.map +1 -1
- package/dist/constructs/check-codegen.d.ts +39 -14
- package/dist/constructs/check-codegen.js +101 -23
- package/dist/constructs/check-codegen.js.map +1 -1
- package/dist/constructs/check-group-codegen.js +23 -9
- package/dist/constructs/check-group-codegen.js.map +1 -1
- package/dist/constructs/check-group-v1.d.ts +19 -14
- package/dist/constructs/check-group-v1.js +39 -14
- package/dist/constructs/check-group-v1.js.map +1 -1
- package/dist/constructs/check-group-v2.d.ts +0 -20
- package/dist/constructs/check-group-v2.js +0 -4
- package/dist/constructs/check-group-v2.js.map +1 -1
- package/dist/constructs/check.d.ts +45 -32
- package/dist/constructs/check.js +78 -17
- package/dist/constructs/check.js.map +1 -1
- package/dist/constructs/construct-codegen.d.ts +1 -2
- package/dist/constructs/construct-diagnostics.d.ts +3 -0
- package/dist/constructs/construct-diagnostics.js +11 -0
- package/dist/constructs/construct-diagnostics.js.map +1 -1
- package/dist/constructs/construct.d.ts +25 -4
- package/dist/constructs/construct.js +41 -5
- package/dist/constructs/construct.js.map +1 -1
- package/dist/constructs/dns-request-codegen.js +1 -1
- package/dist/constructs/dns-request-codegen.js.map +1 -1
- package/dist/constructs/email-alert-channel-codegen.js +1 -1
- package/dist/constructs/email-alert-channel-codegen.js.map +1 -1
- package/dist/constructs/frequency-codegen.js +10 -2
- package/dist/constructs/frequency-codegen.js.map +1 -1
- package/dist/constructs/frequency.d.ts +8 -3
- package/dist/constructs/frequency.js +7 -2
- package/dist/constructs/frequency.js.map +1 -1
- package/dist/constructs/grpc-monitor.js +19 -0
- package/dist/constructs/grpc-monitor.js.map +1 -1
- package/dist/constructs/grpc-request-codegen.js +13 -4
- package/dist/constructs/grpc-request-codegen.js.map +1 -1
- package/dist/constructs/grpc-request.d.ts +23 -0
- package/dist/constructs/heartbeat-monitor.d.ts +2 -1
- package/dist/constructs/heartbeat-monitor.js +2 -2
- package/dist/constructs/heartbeat-monitor.js.map +1 -1
- package/dist/constructs/icmp-request-codegen.js +1 -1
- package/dist/constructs/icmp-request-codegen.js.map +1 -1
- package/dist/constructs/incidentio-alert-channel-codegen.d.ts +1 -1
- package/dist/constructs/incidentio-alert-channel-codegen.js +14 -8
- package/dist/constructs/incidentio-alert-channel-codegen.js.map +1 -1
- package/dist/constructs/index.d.ts +1 -1
- package/dist/constructs/index.js +1 -1
- package/dist/constructs/index.js.map +1 -1
- package/dist/constructs/internal/assertion-validation.js +1 -2
- package/dist/constructs/internal/assertion-validation.js.map +1 -1
- package/dist/constructs/internal/codegen/context.d.ts +73 -6
- package/dist/constructs/internal/codegen/context.js +78 -6
- package/dist/constructs/internal/codegen/context.js.map +1 -1
- package/dist/constructs/internal/codegen/index.d.ts +3 -1
- package/dist/constructs/internal/codegen/index.js +2 -1
- package/dist/constructs/internal/codegen/index.js.map +1 -1
- package/dist/constructs/internal/codegen/render.d.ts +68 -0
- package/dist/constructs/internal/codegen/render.js +75 -0
- package/dist/constructs/internal/codegen/render.js.map +1 -0
- package/dist/constructs/internal/common-diagnostics.d.ts +1 -2
- package/dist/constructs/internal/common-diagnostics.js +6 -14
- package/dist/constructs/internal/common-diagnostics.js.map +1 -1
- package/dist/constructs/internal/declaring-file.d.ts +39 -0
- package/dist/constructs/internal/declaring-file.js +139 -0
- package/dist/constructs/internal/declaring-file.js.map +1 -0
- package/dist/constructs/internal/retry-strategy-defaults.d.ts +13 -0
- package/dist/constructs/internal/retry-strategy-defaults.js +14 -0
- package/dist/constructs/internal/retry-strategy-defaults.js.map +1 -0
- package/dist/constructs/key-value-pair-codegen.d.ts +6 -1
- package/dist/constructs/key-value-pair-codegen.js +24 -3
- package/dist/constructs/key-value-pair-codegen.js.map +1 -1
- package/dist/constructs/maintenance-window-codegen.d.ts +7 -0
- package/dist/constructs/maintenance-window-codegen.js +36 -19
- package/dist/constructs/maintenance-window-codegen.js.map +1 -1
- package/dist/constructs/maintenance-window.d.ts +35 -3
- package/dist/constructs/maintenance-window.js +35 -1
- package/dist/constructs/maintenance-window.js.map +1 -1
- package/dist/constructs/monitor.d.ts +1 -1
- package/dist/constructs/msteams-alert-channel-codegen.d.ts +1 -1
- package/dist/constructs/msteams-alert-channel-codegen.js +8 -18
- package/dist/constructs/msteams-alert-channel-codegen.js.map +1 -1
- package/dist/constructs/opsgenie-alert-channel-codegen.js +1 -1
- package/dist/constructs/opsgenie-alert-channel-codegen.js.map +1 -1
- package/dist/constructs/pagerduty-alert-channel-codegen.js +1 -1
- package/dist/constructs/pagerduty-alert-channel-codegen.js.map +1 -1
- package/dist/constructs/phone-call-alert-channel-codegen.js +1 -1
- package/dist/constructs/phone-call-alert-channel-codegen.js.map +1 -1
- package/dist/constructs/playwright-check-bundle.d.ts +7 -1
- package/dist/constructs/playwright-check-bundle.js +3 -0
- package/dist/constructs/playwright-check-bundle.js.map +1 -1
- package/dist/constructs/playwright-check-codegen.d.ts +85 -0
- package/dist/constructs/playwright-check-codegen.js +212 -0
- package/dist/constructs/playwright-check-codegen.js.map +1 -0
- package/dist/constructs/playwright-check.d.ts +14 -24
- package/dist/constructs/playwright-check.js +16 -52
- package/dist/constructs/playwright-check.js.map +1 -1
- package/dist/constructs/retry-strategy-codegen.d.ts +7 -1
- package/dist/constructs/retry-strategy-codegen.js +41 -32
- package/dist/constructs/retry-strategy-codegen.js.map +1 -1
- package/dist/constructs/retry-strategy.d.ts +0 -4
- package/dist/constructs/retry-strategy.js +5 -8
- package/dist/constructs/retry-strategy.js.map +1 -1
- package/dist/constructs/session.d.ts +26 -1
- package/dist/constructs/session.js +33 -2
- package/dist/constructs/session.js.map +1 -1
- package/dist/constructs/slack-alert-channel-codegen.js +1 -1
- package/dist/constructs/slack-alert-channel-codegen.js.map +1 -1
- package/dist/constructs/slack-app-alert-channel-codegen.js +1 -1
- package/dist/constructs/slack-app-alert-channel-codegen.js.map +1 -1
- package/dist/constructs/sms-alert-channel-codegen.js +1 -1
- package/dist/constructs/sms-alert-channel-codegen.js.map +1 -1
- package/dist/constructs/ssl-request-codegen.js +4 -3
- package/dist/constructs/ssl-request-codegen.js.map +1 -1
- package/dist/constructs/status-page-v3-automation-rule-codegen.js +5 -4
- package/dist/constructs/status-page-v3-automation-rule-codegen.js.map +1 -1
- package/dist/constructs/status-page-v3-codegen.js +3 -2
- package/dist/constructs/status-page-v3-codegen.js.map +1 -1
- package/dist/constructs/status-page-v3-component-codegen.js +8 -7
- package/dist/constructs/status-page-v3-component-codegen.js.map +1 -1
- package/dist/constructs/tcp-monitor-codegen.js +3 -2
- package/dist/constructs/tcp-monitor-codegen.js.map +1 -1
- package/dist/constructs/tcp-monitor.d.ts +4 -3
- package/dist/constructs/tcp-monitor.js +3 -2
- package/dist/constructs/tcp-monitor.js.map +1 -1
- package/dist/constructs/telegram-alert-channel-codegen.d.ts +1 -1
- package/dist/constructs/telegram-alert-channel-codegen.js +14 -8
- package/dist/constructs/telegram-alert-channel-codegen.js.map +1 -1
- package/dist/constructs/time-zone.d.ts +24 -0
- package/dist/constructs/time-zone.js +455 -0
- package/dist/constructs/time-zone.js.map +1 -0
- package/dist/constructs/traceroute-request-codegen.js +2 -2
- package/dist/constructs/traceroute-request-codegen.js.map +1 -1
- package/dist/constructs/url-monitor-codegen.js +1 -1
- package/dist/constructs/url-monitor-codegen.js.map +1 -1
- package/dist/constructs/url-monitor.d.ts +3 -2
- package/dist/constructs/url-monitor.js +3 -0
- package/dist/constructs/url-monitor.js.map +1 -1
- package/dist/constructs/url-request-codegen.js +4 -3
- package/dist/constructs/url-request-codegen.js.map +1 -1
- package/dist/constructs/webhook-alert-channel-codegen.js +3 -3
- package/dist/constructs/webhook-alert-channel-codegen.js.map +1 -1
- package/dist/formatters/check-result-detail.js +0 -185
- package/dist/formatters/check-result-detail.js.map +1 -1
- package/dist/helpers/activate-account.d.ts +14 -0
- package/dist/helpers/activate-account.js +25 -0
- package/dist/helpers/activate-account.js.map +1 -0
- package/dist/helpers/cli-mode.d.ts +18 -0
- package/dist/helpers/cli-mode.js +41 -2
- package/dist/helpers/cli-mode.js.map +1 -1
- package/dist/helpers/command-preview.d.ts +44 -0
- package/dist/helpers/command-preview.js +29 -9
- package/dist/helpers/command-preview.js.map +1 -1
- package/dist/helpers/flags.d.ts +10 -0
- package/dist/helpers/flags.js +17 -0
- package/dist/helpers/flags.js.map +1 -1
- package/dist/helpers/onboarding/boilerplate.js +13 -1
- package/dist/helpers/onboarding/boilerplate.js.map +1 -1
- package/dist/helpers/onboarding/index.d.ts +1 -1
- package/dist/helpers/onboarding/index.js +1 -1
- package/dist/helpers/onboarding/index.js.map +1 -1
- package/dist/helpers/onboarding/messages.d.ts +6 -0
- package/dist/helpers/onboarding/messages.js +14 -0
- package/dist/helpers/onboarding/messages.js.map +1 -1
- package/dist/helpers/onboarding/skill-install.js +2 -2
- package/dist/helpers/onboarding/skill-install.js.map +1 -1
- package/dist/helpers/wrap.js +1 -1
- package/dist/helpers/wrap.js.map +1 -1
- package/dist/reporters/abstract-list.js +11 -2
- package/dist/reporters/abstract-list.js.map +1 -1
- package/dist/reporters/github.js +3 -2
- package/dist/reporters/github.js.map +1 -1
- package/dist/reporters/util.d.ts +1 -0
- package/dist/reporters/util.js +5 -58
- package/dist/reporters/util.js.map +1 -1
- package/dist/rest/analytics.js +0 -4
- package/dist/rest/analytics.js.map +1 -1
- package/dist/rest/api.d.ts +8 -1
- package/dist/rest/api.js +21 -3
- package/dist/rest/api.js.map +1 -1
- package/dist/rest/check-results.d.ts +1 -50
- package/dist/rest/check-results.js.map +1 -1
- package/dist/rest/checkly-storage.d.ts +6 -1
- package/dist/rest/checkly-storage.js +13 -2
- package/dist/rest/checkly-storage.js.map +1 -1
- package/dist/rest/errors.d.ts +13 -0
- package/dist/rest/errors.js +5 -1
- package/dist/rest/errors.js.map +1 -1
- package/dist/rest/projects.d.ts +254 -4
- package/dist/rest/projects.js +184 -12
- package/dist/rest/projects.js.map +1 -1
- package/dist/services/abstract-check-runner.d.ts +11 -0
- package/dist/services/abstract-check-runner.js +98 -46
- package/dist/services/abstract-check-runner.js.map +1 -1
- package/dist/services/check-parser/bundler.d.ts +26 -0
- package/dist/services/check-parser/bundler.js +81 -7
- package/dist/services/check-parser/bundler.js.map +1 -1
- package/dist/services/check-parser/cache-hash.d.ts +1 -4
- package/dist/services/check-parser/cache-hash.js.map +1 -1
- package/dist/services/checkly-config-codegen.js +1 -4
- package/dist/services/checkly-config-codegen.js.map +1 -1
- package/dist/services/checkly-config-loader.d.ts +7 -33
- package/dist/services/checkly-config-loader.js +50 -47
- package/dist/services/checkly-config-loader.js.map +1 -1
- package/dist/services/config.d.ts +2 -0
- package/dist/services/config.js +14 -0
- package/dist/services/config.js.map +1 -1
- package/dist/services/content-hash.d.ts +14 -0
- package/dist/services/content-hash.js +22 -0
- package/dist/services/content-hash.js.map +1 -0
- package/dist/services/deploy-diff/diff-lines.d.ts +38 -0
- package/dist/services/deploy-diff/diff-lines.js +191 -0
- package/dist/services/deploy-diff/diff-lines.js.map +1 -0
- package/dist/services/deploy-diff/import-shape.d.ts +171 -0
- package/dist/services/deploy-diff/import-shape.js +633 -0
- package/dist/services/deploy-diff/import-shape.js.map +1 -0
- package/dist/services/deploy-diff/legacy-payload.d.ts +22 -0
- package/dist/services/deploy-diff/legacy-payload.js +51 -0
- package/dist/services/deploy-diff/legacy-payload.js.map +1 -0
- package/dist/services/deploy-diff/plan-summary.d.ts +37 -0
- package/dist/services/deploy-diff/plan-summary.js +154 -0
- package/dist/services/deploy-diff/plan-summary.js.map +1 -0
- package/dist/services/deploy-diff/preview-output.d.ts +61 -0
- package/dist/services/deploy-diff/preview-output.js +394 -0
- package/dist/services/deploy-diff/preview-output.js.map +1 -0
- package/dist/services/deploy-diff/render.d.ts +53 -0
- package/dist/services/deploy-diff/render.js +317 -0
- package/dist/services/deploy-diff/render.js.map +1 -0
- package/dist/services/deploy-diff/shape-changes.d.ts +2 -0
- package/dist/services/deploy-diff/shape-changes.js +35 -0
- package/dist/services/deploy-diff/shape-changes.js.map +1 -0
- package/dist/services/deploy-diff/source-index.d.ts +18 -0
- package/dist/services/deploy-diff/source-index.js +48 -0
- package/dist/services/deploy-diff/source-index.js.map +1 -0
- package/dist/services/deploy-diff/variable-names.d.ts +30 -0
- package/dist/services/deploy-diff/variable-names.js +64 -0
- package/dist/services/deploy-diff/variable-names.js.map +1 -0
- package/dist/services/project-parser.d.ts +5 -0
- package/dist/services/project-parser.js +25 -13
- package/dist/services/project-parser.js.map +1 -1
- package/dist/services/snapshot-service.d.ts +25 -8
- package/dist/services/snapshot-service.js +46 -4
- package/dist/services/snapshot-service.js.map +1 -1
- package/dist/services/test-filters.d.ts +18 -0
- package/dist/services/test-filters.js +10 -0
- package/dist/services/test-filters.js.map +1 -1
- package/dist/services/test-runner.js +7 -3
- package/dist/services/test-runner.js.map +1 -1
- package/dist/services/test-session-cancel.js +1 -1
- package/dist/services/test-session-cancel.js.map +1 -1
- package/dist/services/util.d.ts +17 -2
- package/dist/services/util.js +118 -11
- package/dist/services/util.js.map +1 -1
- package/dist/services/write-back/apply-edits.d.ts +29 -0
- package/dist/services/write-back/apply-edits.js +255 -0
- package/dist/services/write-back/apply-edits.js.map +1 -0
- package/dist/services/write-back/helper-edit.d.ts +135 -0
- package/dist/services/write-back/helper-edit.js +343 -0
- package/dist/services/write-back/helper-edit.js.map +1 -0
- package/dist/services/write-back/imports.d.ts +30 -0
- package/dist/services/write-back/imports.js +82 -0
- package/dist/services/write-back/imports.js.map +1 -0
- package/dist/services/write-back/literal-edit.d.ts +183 -0
- package/dist/services/write-back/literal-edit.js +359 -0
- package/dist/services/write-back/literal-edit.js.map +1 -0
- package/dist/services/write-back/output.d.ts +26 -0
- package/dist/services/write-back/output.js +110 -0
- package/dist/services/write-back/output.js.map +1 -0
- package/dist/services/write-back/plan.d.ts +173 -0
- package/dist/services/write-back/plan.js +968 -0
- package/dist/services/write-back/plan.js.map +1 -0
- package/dist/services/write-back/source-file.d.ts +118 -0
- package/dist/services/write-back/source-file.js +432 -0
- package/dist/services/write-back/source-file.js.map +1 -0
- package/dist/sourcegen/index.d.ts +1 -1
- package/dist/sourcegen/index.js +1 -1
- package/dist/sourcegen/index.js.map +1 -1
- package/dist/sourcegen/program.d.ts +19 -1
- package/dist/sourcegen/program.js +32 -7
- package/dist/sourcegen/program.js.map +1 -1
- package/oclif.manifest.json +676 -635
- package/package.json +13 -13
- package/dist/commands/rules.d.ts +0 -9
- package/dist/commands/rules.js +0 -13
- package/dist/commands/rules.js.map +0 -1
- package/dist/constructs/agentic-check-codegen.d.ts +0 -22
- package/dist/constructs/agentic-check-codegen.js +0 -59
- package/dist/constructs/agentic-check-codegen.js.map +0 -1
- package/dist/constructs/agentic-check.d.ts +0 -237
- package/dist/constructs/agentic-check.js +0 -100
- package/dist/constructs/agentic-check.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":"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"}
|
|
@@ -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,82 @@
|
|
|
1
|
+
import { indentationAt, lineEndingOf } from './literal-edit.js';
|
|
2
|
+
import { appendAfterLast, checklyBindings, CONSTRUCTS_MODULE, isChecklyRequire, stringOf, tokensBetween, 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) => tokensBetween(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
|
+
return { last: properties[properties.length - 1], open: pattern.range[0], close: pattern.range[1] - 1 };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=imports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../../src/services/write-back/imports.ts"],"names":[],"mappings":"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"}
|