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.
- package/README.md +10 -0
- package/bin/launch.cjs +12 -0
- 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 -2
- package/dist/ai-context/public-skills/checkly/SKILL.md +34 -5
- package/dist/ai-context/skills-command/references/communicate.md +8 -5
- 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 +2 -2
- 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 +17 -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 +58 -0
- package/dist/auth/device-flow.js +228 -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/account/plan.js +1 -1
- package/dist/commands/account/plan.js.map +1 -1
- package/dist/commands/account/usage/projections.d.ts +16 -0
- package/dist/commands/account/usage/projections.js +40 -0
- package/dist/commands/account/usage/projections.js.map +1 -0
- package/dist/commands/account/usage/series.d.ts +7 -3
- package/dist/commands/account/usage/series.js +30 -87
- package/dist/commands/account/usage/series.js.map +1 -1
- package/dist/commands/account/usage/summary.d.ts +4 -1
- package/dist/commands/account/usage/summary.js +19 -27
- package/dist/commands/account/usage/summary.js.map +1 -1
- package/dist/commands/account/usage/term.d.ts +15 -0
- package/dist/commands/account/usage/term.js +32 -0
- package/dist/commands/account/usage/term.js.map +1 -0
- package/dist/commands/account/usage/terms.d.ts +4 -0
- package/dist/commands/account/usage/terms.js +19 -27
- package/dist/commands/account/usage/terms.js.map +1 -1
- package/dist/commands/alert-channels/get.js +2 -1
- package/dist/commands/alert-channels/get.js.map +1 -1
- package/dist/commands/alert-channels/list.js +2 -1
- package/dist/commands/alert-channels/list.js.map +1 -1
- package/dist/commands/alert-channels/logs.js +2 -1
- package/dist/commands/alert-channels/logs.js.map +1 -1
- package/dist/commands/api.js +53 -10
- package/dist/commands/api.js.map +1 -1
- package/dist/commands/assets/download.js +11 -7
- package/dist/commands/assets/download.js.map +1 -1
- package/dist/commands/assets/list.js +2 -3
- package/dist/commands/assets/list.js.map +1 -1
- package/dist/commands/authCommand.d.ts +19 -0
- package/dist/commands/authCommand.js +118 -12
- package/dist/commands/authCommand.js.map +1 -1
- package/dist/commands/baseCommand.d.ts +12 -1
- package/dist/commands/baseCommand.js +24 -5
- package/dist/commands/baseCommand.js.map +1 -1
- package/dist/commands/checks/delete.js +1 -1
- package/dist/commands/checks/delete.js.map +1 -1
- package/dist/commands/checks/run.js +3 -1
- package/dist/commands/checks/run.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 +8 -2
- package/dist/commands/deploy.js +735 -274
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/destroy.js +3 -3
- package/dist/commands/destroy.js.map +1 -1
- package/dist/commands/env/add.js +2 -2
- package/dist/commands/env/add.js.map +1 -1
- package/dist/commands/env/ls.js +2 -1
- package/dist/commands/env/ls.js.map +1 -1
- package/dist/commands/env/pull.js +3 -3
- package/dist/commands/env/pull.js.map +1 -1
- package/dist/commands/env/update.js +2 -2
- package/dist/commands/env/update.js.map +1 -1
- package/dist/commands/import/apply.js +12 -10
- package/dist/commands/import/apply.js.map +1 -1
- package/dist/commands/import/cancel.js +4 -4
- package/dist/commands/import/cancel.js.map +1 -1
- package/dist/commands/import/commit.js +11 -9
- package/dist/commands/import/commit.js.map +1 -1
- package/dist/commands/import/plan.js +82 -62
- package/dist/commands/import/plan.js.map +1 -1
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.js +62 -41
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts +38 -2
- package/dist/commands/login.js +848 -52
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +10 -4
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/pw-test.js +6 -3
- package/dist/commands/pw-test.js.map +1 -1
- package/dist/commands/rca/get.js +1 -1
- package/dist/commands/rca/get.js.map +1 -1
- package/dist/commands/rca/run.js +1 -1
- package/dist/commands/rca/run.js.map +1 -1
- package/dist/commands/skills/index.js +1 -1
- package/dist/commands/skills/index.js.map +1 -1
- package/dist/commands/skills/install.js +12 -12
- package/dist/commands/skills/install.js.map +1 -1
- package/dist/commands/switch.d.ts +10 -1
- package/dist/commands/switch.js +75 -13
- package/dist/commands/switch.js.map +1 -1
- package/dist/commands/sync-playwright.js +5 -10
- package/dist/commands/sync-playwright.js.map +1 -1
- package/dist/commands/test.d.ts +2 -0
- package/dist/commands/test.js +58 -29
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/trigger.d.ts +1 -2
- package/dist/commands/trigger.js +27 -20
- 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/commands/whoami.d.ts +8 -0
- package/dist/commands/whoami.js +57 -6
- package/dist/commands/whoami.js.map +1 -1
- package/dist/constants.d.ts +3 -2
- package/dist/constants.js +8 -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-channel-subscription.d.ts +1 -0
- package/dist/constructs/alert-channel-subscription.js +4 -0
- package/dist/constructs/alert-channel-subscription.js.map +1 -1
- package/dist/constructs/alert-channel.js +8 -5
- package/dist/constructs/alert-channel.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-bundle.d.ts +4 -124
- 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 +8 -128
- 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 +11 -125
- 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 +5 -107
- package/dist/constructs/browser-check.js +1 -1
- package/dist/constructs/browser-check.js.map +1 -1
- package/dist/constructs/check-codegen.d.ts +46 -14
- package/dist/constructs/check-codegen.js +118 -34
- 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 +28 -16
- package/dist/constructs/check-group-v1.js +48 -17
- package/dist/constructs/check-group-v1.js.map +1 -1
- package/dist/constructs/check-group-v2.d.ts +2 -21
- package/dist/constructs/check-group-v2.js +4 -4
- package/dist/constructs/check-group-v2.js.map +1 -1
- package/dist/constructs/check.d.ts +68 -220
- package/dist/constructs/check.js +106 -37
- 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 +30 -4
- package/dist/constructs/construct.js +52 -6
- package/dist/constructs/construct.js.map +1 -1
- package/dist/constructs/dashboard.js +11 -7
- package/dist/constructs/dashboard.js.map +1 -1
- package/dist/constructs/dns-monitor.d.ts +4 -100
- 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/engine.d.ts +4 -2
- package/dist/constructs/engine.js +3 -1
- package/dist/constructs/engine.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.d.ts +4 -100
- 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-monitor.d.ts +4 -100
- 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 +7 -17
- 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/default-retry-strategy.d.ts +9 -0
- package/dist/constructs/internal/default-retry-strategy.js +13 -0
- package/dist/constructs/internal/default-retry-strategy.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 +37 -3
- package/dist/constructs/maintenance-window.js +34 -1
- package/dist/constructs/maintenance-window.js.map +1 -1
- package/dist/constructs/monitor.d.ts +6 -119
- package/dist/constructs/monitor.js +3 -5
- package/dist/constructs/monitor.js.map +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/multi-step-check-bundle.d.ts +4 -109
- package/dist/constructs/multi-step-check.d.ts +4 -100
- 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 +10 -130
- package/dist/constructs/playwright-check-bundle.js +3 -3
- 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 -122
- package/dist/constructs/playwright-check.js +17 -51
- package/dist/constructs/playwright-check.js.map +1 -1
- package/dist/constructs/private-location-check-assignment.d.ts +1 -0
- package/dist/constructs/private-location-check-assignment.js +4 -0
- package/dist/constructs/private-location-check-assignment.js.map +1 -1
- package/dist/constructs/private-location-group-assignment.d.ts +1 -0
- package/dist/constructs/private-location-group-assignment.js +4 -0
- package/dist/constructs/private-location-group-assignment.js.map +1 -1
- package/dist/constructs/private-location.js +3 -1
- package/dist/constructs/private-location.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 +38 -1
- package/dist/constructs/session.js +73 -3
- 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-monitor.d.ts +4 -142
- 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 +8 -103
- 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-monitor.d.ts +4 -100
- 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 +7 -123
- 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/formatters/render.d.ts +2 -1
- package/dist/formatters/render.js +2 -2
- package/dist/formatters/render.js.map +1 -1
- package/dist/formatters/usage.d.ts +18 -12
- package/dist/formatters/usage.js +285 -245
- package/dist/formatters/usage.js.map +1 -1
- package/dist/help/help-extension.js +2 -1
- package/dist/help/help-extension.js.map +1 -1
- package/dist/helpers/accounts.d.ts +28 -0
- package/dist/helpers/accounts.js +50 -0
- package/dist/helpers/accounts.js.map +1 -0
- package/dist/helpers/activate-account.d.ts +13 -0
- package/dist/helpers/activate-account.js +24 -0
- package/dist/helpers/activate-account.js.map +1 -0
- package/dist/helpers/api-fields.js +3 -2
- package/dist/helpers/api-fields.js.map +1 -1
- package/dist/helpers/cli-mode.d.ts +24 -0
- package/dist/helpers/cli-mode.js +64 -8
- 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/command-style.d.ts +1 -0
- package/dist/helpers/command-style.js +51 -37
- package/dist/helpers/command-style.js.map +1 -1
- package/dist/helpers/flags.d.ts +10 -0
- package/dist/helpers/flags.js +18 -0
- package/dist/helpers/flags.js.map +1 -1
- package/dist/helpers/import-plan-selection.d.ts +1 -1
- package/dist/helpers/import-plan-selection.js +8 -20
- package/dist/helpers/import-plan-selection.js.map +1 -1
- package/dist/helpers/invalid-input-error.d.ts +15 -0
- package/dist/helpers/invalid-input-error.js +17 -0
- package/dist/helpers/invalid-input-error.js.map +1 -0
- package/dist/helpers/number.js +4 -3
- package/dist/helpers/number.js.map +1 -1
- package/dist/helpers/onboarding/boilerplate.js +15 -3
- 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 +7 -0
- package/dist/helpers/onboarding/messages.js +14 -0
- package/dist/helpers/onboarding/messages.js.map +1 -1
- package/dist/helpers/onboarding/prompt-display.js +2 -2
- package/dist/helpers/onboarding/prompt-display.js.map +1 -1
- package/dist/helpers/onboarding/prompts-helpers.js +3 -1
- package/dist/helpers/onboarding/prompts-helpers.js.map +1 -1
- package/dist/helpers/onboarding/skill-install.js +4 -4
- package/dist/helpers/onboarding/skill-install.js.map +1 -1
- package/dist/helpers/prompts.d.ts +7 -0
- package/dist/helpers/prompts.js +10 -0
- package/dist/helpers/prompts.js.map +1 -0
- package/dist/helpers/result-assets.js +4 -3
- package/dist/helpers/result-assets.js.map +1 -1
- package/dist/helpers/test-helper.d.ts +14 -0
- package/dist/helpers/test-helper.js +33 -3
- package/dist/helpers/test-helper.js.map +1 -1
- package/dist/helpers/usage.d.ts +51 -14
- package/dist/helpers/usage.js +193 -53
- package/dist/helpers/usage.js.map +1 -1
- package/dist/helpers/wrap.js +1 -1
- package/dist/helpers/wrap.js.map +1 -1
- package/dist/messages/common-messages.d.ts +1 -0
- package/dist/messages/common-messages.js +4 -2
- package/dist/messages/common-messages.js.map +1 -1
- package/dist/reporters/abstract-list.d.ts +9 -2
- package/dist/reporters/abstract-list.js +105 -32
- package/dist/reporters/abstract-list.js.map +1 -1
- package/dist/reporters/ci.js +7 -4
- package/dist/reporters/ci.js.map +1 -1
- package/dist/reporters/dot.d.ts +1 -0
- package/dist/reporters/dot.js +19 -7
- package/dist/reporters/dot.js.map +1 -1
- package/dist/reporters/github.d.ts +2 -0
- package/dist/reporters/github.js +29 -4
- package/dist/reporters/github.js.map +1 -1
- package/dist/reporters/json.d.ts +2 -0
- package/dist/reporters/json.js +27 -4
- package/dist/reporters/json.js.map +1 -1
- package/dist/reporters/list.js +10 -8
- package/dist/reporters/list.js.map +1 -1
- package/dist/reporters/reporter.d.ts +1 -0
- package/dist/reporters/reporter.js.map +1 -1
- package/dist/reporters/util.d.ts +5 -2
- package/dist/reporters/util.js +25 -61
- 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 +10 -1
- package/dist/rest/api.js +44 -9
- 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 +19 -0
- package/dist/rest/errors.js +20 -1
- package/dist/rest/errors.js.map +1 -1
- package/dist/rest/projects.d.ts +254 -4
- package/dist/rest/projects.js +208 -17
- package/dist/rest/projects.js.map +1 -1
- package/dist/rest/usage.d.ts +164 -73
- package/dist/rest/usage.js +21 -10
- package/dist/rest/usage.js.map +1 -1
- package/dist/services/abstract-check-runner.d.ts +34 -2
- package/dist/services/abstract-check-runner.js +183 -56
- 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/check-parser/package-files/json-text-source-file.d.ts +0 -2
- package/dist/services/check-parser/package-files/json-text-source-file.js +6 -6
- package/dist/services/check-parser/package-files/json-text-source-file.js.map +1 -1
- package/dist/services/check-parser/parser.d.ts +3 -2
- package/dist/services/check-parser/parser.js +31 -40
- package/dist/services/check-parser/parser.js.map +1 -1
- package/dist/services/checkly-config-codegen.js +4 -4
- package/dist/services/checkly-config-codegen.js.map +1 -1
- package/dist/services/checkly-config-loader.d.ts +18 -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 +42 -1
- package/dist/services/config.js +93 -9
- 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 +52 -0
- package/dist/services/deploy-diff/diff-lines.js +327 -0
- package/dist/services/deploy-diff/diff-lines.js.map +1 -0
- package/dist/services/deploy-diff/double-check.d.ts +9 -0
- package/dist/services/deploy-diff/double-check.js +21 -0
- package/dist/services/deploy-diff/double-check.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 +81 -0
- package/dist/services/deploy-diff/plan-summary.js +262 -0
- package/dist/services/deploy-diff/plan-summary.js.map +1 -0
- package/dist/services/deploy-diff/preview-output.d.ts +63 -0
- package/dist/services/deploy-diff/preview-output.js +403 -0
- package/dist/services/deploy-diff/preview-output.js.map +1 -0
- package/dist/services/deploy-diff/render.d.ts +59 -0
- package/dist/services/deploy-diff/render.js +326 -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 +48 -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/engine-resolver.js +3 -0
- package/dist/services/engine-resolver.js.map +1 -1
- package/dist/services/engine-rules-loader.d.ts +6 -0
- package/dist/services/engine-rules-loader.js +12 -3
- package/dist/services/engine-rules-loader.js.map +1 -1
- package/dist/services/oxc-parser.d.ts +26 -0
- package/dist/services/oxc-parser.js +70 -0
- package/dist/services/oxc-parser.js.map +1 -0
- package/dist/services/project-cli.d.ts +75 -0
- package/dist/services/project-cli.js +302 -0
- package/dist/services/project-cli.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/skills.js +3 -3
- package/dist/services/skills.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/socket-client.js +1 -1
- package/dist/services/socket-client.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.d.ts +1 -1
- package/dist/services/test-runner.js +10 -11
- package/dist/services/test-runner.js.map +1 -1
- package/dist/services/test-session-cancel.d.ts +5 -0
- package/dist/services/test-session-cancel.js +28 -3
- package/dist/services/test-session-cancel.js.map +1 -1
- package/dist/services/trigger-runner.d.ts +1 -1
- package/dist/services/trigger-runner.js +2 -2
- package/dist/services/trigger-runner.js.map +1 -1
- package/dist/services/two-installs.d.ts +39 -0
- package/dist/services/two-installs.js +155 -0
- package/dist/services/two-installs.js.map +1 -0
- 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 +88 -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 +180 -0
- package/dist/services/write-back/plan.js +1046 -0
- package/dist/services/write-back/plan.js.map +1 -0
- package/dist/services/write-back/source-file.d.ts +133 -0
- package/dist/services/write-back/source-file.js +460 -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/dist/testing/clear-git-env.d.ts +1 -0
- package/dist/testing/clear-git-env.js +25 -0
- package/dist/testing/clear-git-env.js.map +1 -0
- package/dist/testing/global-setup.d.ts +1 -0
- package/dist/testing/global-setup.js +3 -0
- package/dist/testing/global-setup.js.map +1 -1
- package/oclif.manifest.json +1113 -884
- package/package.json +21 -19
- 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
- package/dist/services/check-parser/package-files/json-text-source-file-parser.d.ts +0 -7
- package/dist/services/check-parser/package-files/json-text-source-file-parser.js +0 -47
- package/dist/services/check-parser/package-files/json-text-source-file-parser.js.map +0 -1
- package/dist/services/check-parser/package-files/source-file-parser.d.ts +0 -10
- package/dist/services/check-parser/package-files/source-file-parser.js +0 -13
- package/dist/services/check-parser/package-files/source-file-parser.js.map +0 -1
|
@@ -0,0 +1,633 @@
|
|
|
1
|
+
import { MASKED_VALUE } from '../../constructs/internal/codegen/index.js';
|
|
2
|
+
export function idKey(type, logicalId) {
|
|
3
|
+
return `${type}:${logicalId}`;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* The segments of an RFC 6901 pointer, unescaped; the root pointer has none.
|
|
7
|
+
*
|
|
8
|
+
* @throws UnshapeableError for a string that is not a pointer, rather than
|
|
9
|
+
* matching it against nothing.
|
|
10
|
+
*/
|
|
11
|
+
export function pointerSegments(pointer) {
|
|
12
|
+
if (pointer === '') {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
if (!pointer.startsWith('/')) {
|
|
16
|
+
throw new UnshapeableError(`'${pointer}' is not a JSON Pointer`);
|
|
17
|
+
}
|
|
18
|
+
return pointer.slice(1).split('/').map(segment => segment.replace(/~1/g, '/').replace(/~0/g, '~'));
|
|
19
|
+
}
|
|
20
|
+
/** A payload this module cannot turn into an import resource; the message says why. */
|
|
21
|
+
export class UnshapeableError extends Error {
|
|
22
|
+
}
|
|
23
|
+
/** Types whose physical id is a number; every other type's is a string. */
|
|
24
|
+
const NUMERIC_ID_TYPES = new Set(['check-group', 'alert-channel', 'alert-channel-subscription']);
|
|
25
|
+
/**
|
|
26
|
+
* Above every real numeric id, so a synthetic one can never be mistaken for
|
|
27
|
+
* (or collide with) a resource that exists.
|
|
28
|
+
*/
|
|
29
|
+
const SYNTHETIC_ID_BASE = 1_000_000_000_000;
|
|
30
|
+
/**
|
|
31
|
+
* A stable id for a resource that has none yet (it is being created), derived
|
|
32
|
+
* from its identity rather than counted: two shapings of the same project
|
|
33
|
+
* must number the same resource the same way, whatever order they run in.
|
|
34
|
+
* FNV-1a over the key, offset above every real id for numeric types; string
|
|
35
|
+
* ids reuse the logical id, which no UUID can equal.
|
|
36
|
+
*/
|
|
37
|
+
function syntheticId(type, logicalId) {
|
|
38
|
+
if (!NUMERIC_ID_TYPES.has(type)) {
|
|
39
|
+
return `synthetic:${logicalId}`;
|
|
40
|
+
}
|
|
41
|
+
let hash = 0x811c9dc5;
|
|
42
|
+
for (const char of `${type}\0${logicalId}`) {
|
|
43
|
+
hash ^= char.codePointAt(0);
|
|
44
|
+
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
45
|
+
}
|
|
46
|
+
return SYNTHETIC_ID_BASE + hash;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Every resource's physical id, for the rendering: the preview's entries
|
|
50
|
+
* carry the id of everything that exists (including a resource the code only
|
|
51
|
+
* references, whose `fromId` construct sends it), and a resource being created
|
|
52
|
+
* gets a synthetic one so the codegen has something to key its registrations
|
|
53
|
+
* on. Every local resource has an entry afterwards; this is the one place an
|
|
54
|
+
* id is minted.
|
|
55
|
+
*/
|
|
56
|
+
export function physicalIdsFromPlan(diff, local) {
|
|
57
|
+
const ids = new Map();
|
|
58
|
+
for (const entry of diff) {
|
|
59
|
+
if (entry.physicalId !== undefined) {
|
|
60
|
+
ids.set(idKey(entry.type, entry.logicalId), entry.physicalId);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
for (const resource of local) {
|
|
64
|
+
const key = idKey(resource.type, resource.logicalId);
|
|
65
|
+
if (!ids.has(key)) {
|
|
66
|
+
ids.set(key, resource.physicalId ?? syntheticId(resource.type, resource.logicalId));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return ids;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The payload keys that hold a reference (`{ ref: logicalId }` in a deploy
|
|
73
|
+
* payload, a physical id in the import format), and the type they point at.
|
|
74
|
+
* `services` is a list of references on a status page card, and its codegen
|
|
75
|
+
* reads each element's `id`, so it is substituted to `{ id }` objects rather
|
|
76
|
+
* than bare ids.
|
|
77
|
+
*/
|
|
78
|
+
const REFERENCE_KEYS = {
|
|
79
|
+
alertChannelId: 'alert-channel',
|
|
80
|
+
checkId: 'check',
|
|
81
|
+
componentId: 'status-page-component',
|
|
82
|
+
groupId: 'check-group',
|
|
83
|
+
parentId: 'status-page-component',
|
|
84
|
+
privateLocationId: 'private-location',
|
|
85
|
+
serviceId: 'status-page-service',
|
|
86
|
+
services: 'status-page-service',
|
|
87
|
+
statusPageId: 'status-page',
|
|
88
|
+
};
|
|
89
|
+
/** Keys only a deploy reads; the import format has no counterpart and the codegen would ignore them. */
|
|
90
|
+
const DEPLOY_ONLY_KEYS = ['sourceFile', 'codeBundleSha256', 'privateLocations', 'v'];
|
|
91
|
+
/**
|
|
92
|
+
* Keys of a deployed row that neither side renders: a setup or teardown
|
|
93
|
+
* snippet reference. The codegen resolves one through snippet files an
|
|
94
|
+
* import registers and a preview has not, a deploy clears it either way, and
|
|
95
|
+
* it is a bookkeeping column the plan never reports — so left in `before`,
|
|
96
|
+
* `fillUnchangedFromBefore` would copy it onto the local side.
|
|
97
|
+
*/
|
|
98
|
+
export const UNRENDERED_KEYS = ['setupSnippetId', 'tearDownSnippetId'];
|
|
99
|
+
/** Keys of a deployed row that are not properties of the local payload: its id, and the relation rows it carries. */
|
|
100
|
+
const NOT_FILLED = new Set(['id', 'alertChannelSubscriptions', 'privateLocationAssignments']);
|
|
101
|
+
const escapeSegment = (segment) => segment.replace(/~/g, '~0').replace(/\//g, '~1');
|
|
102
|
+
const isPlainObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
103
|
+
/**
|
|
104
|
+
* Fills into the shaped local payload every property the deployed row holds
|
|
105
|
+
* that the payload leaves out and the plan does not report as changed. Those
|
|
106
|
+
* are the defaults the deploy's validation fills into an absent property
|
|
107
|
+
* (`activated: true`, a check type's response-time limits, an empty header
|
|
108
|
+
* list), which the row then always carries and the codegen prints: the plan
|
|
109
|
+
* compared the validated payload against the row, so a property absent here
|
|
110
|
+
* and unreported there is one the deploy leaves as it is. Taking it from
|
|
111
|
+
* `before` makes the two renderings agree on it without this CLI keeping a
|
|
112
|
+
* copy of any default — and cannot hide a change, since a value copied to
|
|
113
|
+
* both sides prints alike on both.
|
|
114
|
+
*
|
|
115
|
+
* A key is left alone when a reported change path is it, lies under it, or
|
|
116
|
+
* lies above it; an explicit `null` is a value, not an absence; and only
|
|
117
|
+
* object keys are filled, never the elements of a list.
|
|
118
|
+
*/
|
|
119
|
+
export function fillUnchangedFromBefore(local, before, changes) {
|
|
120
|
+
const reported = changes.map(change => change.path);
|
|
121
|
+
const touched = (pointer) => reported.some(path => path === pointer || path.startsWith(`${pointer}/`) || pointer.startsWith(`${path}/`));
|
|
122
|
+
const fill = (target, source, prefix) => {
|
|
123
|
+
for (const [key, value] of Object.entries(source)) {
|
|
124
|
+
if (prefix === '' && NOT_FILLED.has(key)) {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
const pointer = `${prefix}/${escapeSegment(key)}`;
|
|
128
|
+
const current = target[key];
|
|
129
|
+
if (current === undefined) {
|
|
130
|
+
if (!touched(pointer)) {
|
|
131
|
+
target[key] = structuredClone(value);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if (isPlainObject(current) && isPlainObject(value)) {
|
|
135
|
+
fill(current, value, pointer);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
fill(local, before, '');
|
|
140
|
+
}
|
|
141
|
+
function isRef(value) {
|
|
142
|
+
return (typeof value === 'object'
|
|
143
|
+
&& value !== null
|
|
144
|
+
&& !Array.isArray(value)
|
|
145
|
+
&& Object.keys(value).length === 1
|
|
146
|
+
&& typeof value.ref === 'string');
|
|
147
|
+
}
|
|
148
|
+
function resolveRef(ids, key, ref) {
|
|
149
|
+
const id = ids.get(idKey(REFERENCE_KEYS[key], ref.ref));
|
|
150
|
+
if (id === undefined) {
|
|
151
|
+
throw new UnshapeableError(`'${key}' refers to ${REFERENCE_KEYS[key]} '${ref.ref}', which this plan does not know`);
|
|
152
|
+
}
|
|
153
|
+
return id;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Rebuild a payload subtree with references substituted. Only a JSON-shaped
|
|
157
|
+
* value is accepted: the codegen renders values, and an invalid `Date` or a
|
|
158
|
+
* function would either throw mid-render or print nonsense. A value that
|
|
159
|
+
* serializes itself (`toJSON`) is taken as what it serializes to, which is
|
|
160
|
+
* what the deploy sends.
|
|
161
|
+
*/
|
|
162
|
+
function substitute(value, key, ids) {
|
|
163
|
+
if (value === null || value === undefined) {
|
|
164
|
+
return value;
|
|
165
|
+
}
|
|
166
|
+
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
167
|
+
return value;
|
|
168
|
+
}
|
|
169
|
+
if (value instanceof Date) {
|
|
170
|
+
if (Number.isNaN(value.getTime())) {
|
|
171
|
+
throw new UnshapeableError(`'${key}' holds an invalid date`);
|
|
172
|
+
}
|
|
173
|
+
return value.toISOString();
|
|
174
|
+
}
|
|
175
|
+
if (Array.isArray(value)) {
|
|
176
|
+
if (key === 'services') {
|
|
177
|
+
return value.map(element => isRef(element) ? { id: resolveRef(ids, key, element) } : substitute(element, key, ids));
|
|
178
|
+
}
|
|
179
|
+
if (key === 'cards') {
|
|
180
|
+
// A card's `services` may be left out (or left undefined) by the
|
|
181
|
+
// construct; the import format always carries the list and the card
|
|
182
|
+
// codegen iterates it unguarded.
|
|
183
|
+
return value.map(element => {
|
|
184
|
+
const card = substitute(element, key, ids);
|
|
185
|
+
return card !== null && typeof card === 'object' && !Array.isArray(card) && !('services' in card)
|
|
186
|
+
? { ...card, services: [] }
|
|
187
|
+
: card;
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
return value.map(element => substitute(element, key, ids));
|
|
191
|
+
}
|
|
192
|
+
if (typeof value !== 'object') {
|
|
193
|
+
throw new UnshapeableError(`'${key}' holds a ${typeof value}`);
|
|
194
|
+
}
|
|
195
|
+
if (isRef(value) && key !== undefined && key in REFERENCE_KEYS) {
|
|
196
|
+
return resolveRef(ids, key, value);
|
|
197
|
+
}
|
|
198
|
+
if (isRef(value)) {
|
|
199
|
+
throw new UnshapeableError(`'${key}' holds a reference this shaping does not know how to place`);
|
|
200
|
+
}
|
|
201
|
+
if (typeof value.toJSON === 'function') {
|
|
202
|
+
return substitute(value.toJSON(), key, ids);
|
|
203
|
+
}
|
|
204
|
+
const result = {};
|
|
205
|
+
for (const [childKey, child] of Object.entries(value)) {
|
|
206
|
+
if (child !== undefined) {
|
|
207
|
+
result[childKey] = substitute(child, childKey, ids);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return result;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* A check's intent as the backend stores and the import format returns it:
|
|
214
|
+
* the constraints grouped by type, required outcomes first, in the order the
|
|
215
|
+
* author gave within each group. The construct keeps the author's
|
|
216
|
+
* interleaving, which the store does not.
|
|
217
|
+
*/
|
|
218
|
+
function groupConstraints(intent) {
|
|
219
|
+
if (intent === null || typeof intent !== 'object' || !Array.isArray(intent.constraints)) {
|
|
220
|
+
return intent;
|
|
221
|
+
}
|
|
222
|
+
const { constraints, ...rest } = intent;
|
|
223
|
+
const required = [];
|
|
224
|
+
const preserved = [];
|
|
225
|
+
// A type this CLI does not know keeps its place after the known groups
|
|
226
|
+
// rather than vanishing from the rendering.
|
|
227
|
+
const others = [];
|
|
228
|
+
for (const constraint of constraints) {
|
|
229
|
+
const bucket = constraint?.type === 'REQUIRED_OUTCOME' ? required : constraint?.type === 'MUST_PRESERVE' ? preserved : others;
|
|
230
|
+
bucket.push(constraint);
|
|
231
|
+
}
|
|
232
|
+
return { ...rest, constraints: [...required, ...preserved, ...others] };
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* The local payload of one resource, as an import resource: `id` set, every
|
|
236
|
+
* reference a physical id, deploy-only keys dropped, the intent's constraints
|
|
237
|
+
* grouped as stored. No canonicalization of nulls, defaults or
|
|
238
|
+
* ordering: the payload has none, and the defaults the deploy would fill
|
|
239
|
+
* are taken from the deployed row by `fillUnchangedFromBefore`.
|
|
240
|
+
*
|
|
241
|
+
* @throws UnshapeableError for a payload the codegen could not render.
|
|
242
|
+
*/
|
|
243
|
+
export function toImportResource(type, logicalId, payload, ids) {
|
|
244
|
+
if (payload === null || typeof payload !== 'object' || Array.isArray(payload)) {
|
|
245
|
+
throw new UnshapeableError('the payload is not an object');
|
|
246
|
+
}
|
|
247
|
+
const id = ids.get(idKey(type, logicalId));
|
|
248
|
+
if (id === undefined) {
|
|
249
|
+
throw new UnshapeableError(`${type} '${logicalId}' has no id in this plan`);
|
|
250
|
+
}
|
|
251
|
+
const shaped = substitute(payload, undefined, ids);
|
|
252
|
+
for (const key of DEPLOY_ONLY_KEYS) {
|
|
253
|
+
delete shaped[key];
|
|
254
|
+
}
|
|
255
|
+
if ('intent' in shaped) {
|
|
256
|
+
shaped.intent = groupConstraints(shaped.intent);
|
|
257
|
+
}
|
|
258
|
+
shaped.id = id;
|
|
259
|
+
return { type, logicalId, payload: shaped };
|
|
260
|
+
}
|
|
261
|
+
/** The relation types a parent of each kind carries, and the parent key on their rows. */
|
|
262
|
+
const RELATIONS = {
|
|
263
|
+
'check': {
|
|
264
|
+
parentKey: 'checkId',
|
|
265
|
+
subscription: 'alert-channel-subscription',
|
|
266
|
+
assignment: 'private-location-check-assignment',
|
|
267
|
+
},
|
|
268
|
+
'check-group': {
|
|
269
|
+
parentKey: 'groupId',
|
|
270
|
+
subscription: 'alert-channel-subscription',
|
|
271
|
+
assignment: 'private-location-group-assignment',
|
|
272
|
+
},
|
|
273
|
+
};
|
|
274
|
+
/** The target a relation row or resource points at, for matching the two sides. */
|
|
275
|
+
function relationTarget(payload) {
|
|
276
|
+
return payload.alertChannelId !== undefined
|
|
277
|
+
? `alert-channel:${payload.alertChannelId}`
|
|
278
|
+
: `private-location:${payload.privateLocationId}`;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Relations in one stable order, by target, on whichever side they come
|
|
282
|
+
* from: the codegen folds them into `alertChannels`/`privateLocations` in
|
|
283
|
+
* registration order, and the deployed rows' order (creation order) means
|
|
284
|
+
* nothing the diff should show.
|
|
285
|
+
*/
|
|
286
|
+
function inTargetOrder(resources) {
|
|
287
|
+
return [...resources].sort((a, b) => relationTarget(a.payload).localeCompare(relationTarget(b.payload)));
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* The relation rows a parent's `before` carries — every live subscription
|
|
291
|
+
* and assignment, the way the import format spells them — as the resources
|
|
292
|
+
* whose `prepare()` registers them on the codegen context.
|
|
293
|
+
*/
|
|
294
|
+
export function relationResourcesFromBefore(type, before) {
|
|
295
|
+
const kinds = RELATIONS[type];
|
|
296
|
+
if (!kinds) {
|
|
297
|
+
return [];
|
|
298
|
+
}
|
|
299
|
+
const rows = (key) => (Array.isArray(before[key]) ? before[key] : []);
|
|
300
|
+
return inTargetOrder([
|
|
301
|
+
...rows('alertChannelSubscriptions').map(row => ({
|
|
302
|
+
type: kinds.subscription,
|
|
303
|
+
logicalId: `deployed:${kinds.subscription}:${row.id}`,
|
|
304
|
+
payload: row,
|
|
305
|
+
})),
|
|
306
|
+
...rows('privateLocationAssignments').map(row => ({
|
|
307
|
+
type: kinds.assignment,
|
|
308
|
+
logicalId: `deployed:${kinds.assignment}:${row.id}`,
|
|
309
|
+
payload: row,
|
|
310
|
+
})),
|
|
311
|
+
]);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* The relation resources the local side renders with: the project's own
|
|
315
|
+
* subscription and assignment constructs for this parent, plus every deployed
|
|
316
|
+
* relation the deploy will leave in place. A deployed row is left out when the
|
|
317
|
+
* code removed it (a DELETE or DETACH relation entry folded into this parent
|
|
318
|
+
* names its row id), when `--prune-unmanaged-relations` will delete it (a pruned entry
|
|
319
|
+
* names it too), or when a local construct already stands for the same target.
|
|
320
|
+
* What remains is unmanaged: the deploy keeps it, so both sides show it.
|
|
321
|
+
*
|
|
322
|
+
* @throws UnshapeableError when one of the parent's own relations cannot be shaped.
|
|
323
|
+
*/
|
|
324
|
+
export function relationResourcesForAfter(input) {
|
|
325
|
+
const { ids, local, entry, diff, pruneRelations } = input;
|
|
326
|
+
const { type, logicalId } = entry;
|
|
327
|
+
const kinds = RELATIONS[type];
|
|
328
|
+
if (!kinds) {
|
|
329
|
+
return [];
|
|
330
|
+
}
|
|
331
|
+
const ownRelations = [];
|
|
332
|
+
for (const resource of local) {
|
|
333
|
+
if (resource.type !== kinds.subscription && resource.type !== kinds.assignment) {
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
const parentRef = resource.payload?.[kinds.parentKey];
|
|
337
|
+
if (!isRef(parentRef) || parentRef.ref !== logicalId) {
|
|
338
|
+
continue;
|
|
339
|
+
}
|
|
340
|
+
ownRelations.push(toImportResource(resource.type, resource.logicalId, resource.payload, ids));
|
|
341
|
+
}
|
|
342
|
+
// Subscriptions and assignments live in different tables, with independent
|
|
343
|
+
// ids, so a removed row is known by its type as well.
|
|
344
|
+
const removed = new Set();
|
|
345
|
+
for (const candidate of diff) {
|
|
346
|
+
const folded = candidate.foldedInto?.type === type && candidate.foldedInto.logicalId === logicalId;
|
|
347
|
+
if (!folded) {
|
|
348
|
+
continue;
|
|
349
|
+
}
|
|
350
|
+
const goes = candidate.action === 'DELETE' || candidate.action === 'DETACH';
|
|
351
|
+
if (!goes || (candidate.origin === 'unmanaged' && !pruneRelations)) {
|
|
352
|
+
continue;
|
|
353
|
+
}
|
|
354
|
+
if (candidate.physicalId === undefined) {
|
|
355
|
+
throw new UnshapeableError(`the plan removes a ${candidate.type} of '${logicalId}' without saying which`);
|
|
356
|
+
}
|
|
357
|
+
removed.add(`${candidate.type}:${candidate.physicalId}`);
|
|
358
|
+
}
|
|
359
|
+
const covered = new Set(ownRelations.map(resource => relationTarget(resource.payload)));
|
|
360
|
+
const kept = entry.before === undefined
|
|
361
|
+
? []
|
|
362
|
+
: relationResourcesFromBefore(type, entry.before).filter(resource => {
|
|
363
|
+
const row = resource.payload;
|
|
364
|
+
return !removed.has(`${resource.type}:${row.id}`) && !covered.has(relationTarget(row));
|
|
365
|
+
});
|
|
366
|
+
return inTargetOrder([...ownRelations, ...kept]);
|
|
367
|
+
}
|
|
368
|
+
const CONDITIONS = {
|
|
369
|
+
locked: element => element.locked === true,
|
|
370
|
+
lockedOrSecret: element => element.locked === true || element.secret === true,
|
|
371
|
+
};
|
|
372
|
+
/** What a redacted value renders as, on both sides: never an empty string, which could pass for a value. */
|
|
373
|
+
export const MASK = MASKED_VALUE;
|
|
374
|
+
const placeholderOf = (rule) => (rule.kind === 'object' ? null : MASK);
|
|
375
|
+
/**
|
|
376
|
+
* Whether a conditional rule applies to the element holding the value. A
|
|
377
|
+
* condition this CLI does not know (a newer API) applies regardless — the
|
|
378
|
+
* one direction that cannot print a credential.
|
|
379
|
+
*/
|
|
380
|
+
function qualifies(rule, element) {
|
|
381
|
+
if (rule.when === undefined) {
|
|
382
|
+
return true;
|
|
383
|
+
}
|
|
384
|
+
const condition = Object.hasOwn(CONDITIONS, rule.when) ? CONDITIONS[rule.when] : undefined;
|
|
385
|
+
return condition === undefined || (element !== null && typeof element === 'object' && condition(element));
|
|
386
|
+
}
|
|
387
|
+
function blank(node, segments, rule) {
|
|
388
|
+
if (segments.length === 0) {
|
|
389
|
+
return node;
|
|
390
|
+
}
|
|
391
|
+
const [segment, ...rest] = segments;
|
|
392
|
+
if (segment === '*') {
|
|
393
|
+
// Every position: of a list, or of a map (a free-form header object).
|
|
394
|
+
// A trailing `*` names the positions themselves, each blanked when it
|
|
395
|
+
// qualifies.
|
|
396
|
+
const each = (element) => (rest.length === 0 ? (qualifies(rule, element) ? placeholderOf(rule) : element) : blank(element, rest, rule));
|
|
397
|
+
if (Array.isArray(node)) {
|
|
398
|
+
return node.map(each);
|
|
399
|
+
}
|
|
400
|
+
if (node !== null && typeof node === 'object') {
|
|
401
|
+
return Object.fromEntries(Object.entries(node).map(([k, v]) => [k, each(v)]));
|
|
402
|
+
}
|
|
403
|
+
return node;
|
|
404
|
+
}
|
|
405
|
+
if (node === null || typeof node !== 'object' || Array.isArray(node)) {
|
|
406
|
+
return node;
|
|
407
|
+
}
|
|
408
|
+
const object = node;
|
|
409
|
+
const key = segment;
|
|
410
|
+
if (rest.length > 0) {
|
|
411
|
+
const replaced = blank(object[key], rest, rule);
|
|
412
|
+
return replaced === object[key] ? node : { ...object, [key]: replaced };
|
|
413
|
+
}
|
|
414
|
+
if (rule.when === undefined) {
|
|
415
|
+
// Unconditional: blank a value that is there.
|
|
416
|
+
if (!(key in object) || object[key] === undefined) {
|
|
417
|
+
return node;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
else if (!qualifies(rule, object)) {
|
|
421
|
+
// Conditional: the element's own flags decide, and the API blanks a
|
|
422
|
+
// qualifying element whether or not the value is there, so this side
|
|
423
|
+
// does too.
|
|
424
|
+
return node;
|
|
425
|
+
}
|
|
426
|
+
// The placeholder the rule names, which is what the API wrote on its side.
|
|
427
|
+
return { ...object, [key]: placeholderOf(rule) };
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* A payload with the API's redaction rules applied — the type's whole table,
|
|
431
|
+
* whatever the deployed row held — so a credential is masked on both sides
|
|
432
|
+
* (the deployed side arrives blanked and is masked the same way, since a
|
|
433
|
+
* blank could pass for a value) and never a phantom change, nor printed. A
|
|
434
|
+
* rule that matches nothing is simply ignored. No table at all is refused:
|
|
435
|
+
* an API that reports a `before` without one predates the rules, and the one
|
|
436
|
+
* direction this module must never take is printing a credential.
|
|
437
|
+
*
|
|
438
|
+
* @throws UnshapeableError when the API reported no rule table.
|
|
439
|
+
*/
|
|
440
|
+
export function blankRedacted(payload, redactions) {
|
|
441
|
+
if (redactions === undefined) {
|
|
442
|
+
throw new UnshapeableError('the preview reports no redaction rules for this resource');
|
|
443
|
+
}
|
|
444
|
+
let result = payload;
|
|
445
|
+
for (const rule of redactions) {
|
|
446
|
+
result = blank(result, pointerSegments(rule.path), rule);
|
|
447
|
+
}
|
|
448
|
+
return result;
|
|
449
|
+
}
|
|
450
|
+
export function isMaskedMarker(value) {
|
|
451
|
+
return (typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
452
|
+
&& (value.$masked === 'same' || value.$masked === 'changed'));
|
|
453
|
+
}
|
|
454
|
+
function markerPositions(value, segments = []) {
|
|
455
|
+
if (isMaskedMarker(value)) {
|
|
456
|
+
return [{ segments: [...segments], changed: value.$masked === 'changed' }];
|
|
457
|
+
}
|
|
458
|
+
if (Array.isArray(value)) {
|
|
459
|
+
return value.flatMap((element, index) => markerPositions(element, [...segments, String(index)]));
|
|
460
|
+
}
|
|
461
|
+
if (value !== null && typeof value === 'object') {
|
|
462
|
+
return Object.entries(value)
|
|
463
|
+
.flatMap(([key, member]) => markerPositions(member, [...segments, key]));
|
|
464
|
+
}
|
|
465
|
+
return [];
|
|
466
|
+
}
|
|
467
|
+
/** Whether a reported value holds a marker anywhere inside it. */
|
|
468
|
+
export const carriesMarker = (value) => markerPositions(value).length > 0;
|
|
469
|
+
const changedPositions = (value) => markerPositions(value).filter(position => position.changed).map(position => position.segments);
|
|
470
|
+
/** The value at `segments` inside `root`, or undefined where the path does not resolve. */
|
|
471
|
+
export function nodeAt(root, segments) {
|
|
472
|
+
let node = root;
|
|
473
|
+
for (const segment of segments) {
|
|
474
|
+
if (Array.isArray(node)) {
|
|
475
|
+
node = node[Number(segment)];
|
|
476
|
+
}
|
|
477
|
+
else if (node !== null && typeof node === 'object') {
|
|
478
|
+
node = node[segment];
|
|
479
|
+
}
|
|
480
|
+
else {
|
|
481
|
+
return undefined;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
return node;
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Overwrite the masked value at `segments` with `label`. Only a masked string
|
|
488
|
+
* is overwritten: a position the rules blank to `null` (a Playwright config
|
|
489
|
+
* subtree) has nothing to print, and one that is not masked at all is not
|
|
490
|
+
* this CLI's to touch.
|
|
491
|
+
*/
|
|
492
|
+
function label(root, segments, text) {
|
|
493
|
+
const parent = nodeAt(root, segments.slice(0, -1));
|
|
494
|
+
const last = segments[segments.length - 1];
|
|
495
|
+
if (last === undefined || parent === null || typeof parent !== 'object') {
|
|
496
|
+
return false;
|
|
497
|
+
}
|
|
498
|
+
const container = parent;
|
|
499
|
+
if (container[last] !== MASK) {
|
|
500
|
+
return false;
|
|
501
|
+
}
|
|
502
|
+
container[last] = text;
|
|
503
|
+
return true;
|
|
504
|
+
}
|
|
505
|
+
const keyOf = (element) => {
|
|
506
|
+
const key = element?.key;
|
|
507
|
+
return typeof key === 'string' ? key : undefined;
|
|
508
|
+
};
|
|
509
|
+
/**
|
|
510
|
+
* Write `text` over the masked value of every element the report marks
|
|
511
|
+
* `changed`, in the payload's list at `path`. A reported element is matched
|
|
512
|
+
* to the payload's by `key` when that key is unique in both, else by index
|
|
513
|
+
* when the key at that index is the same and the lists are equal in length,
|
|
514
|
+
* else not at all — the deployed row's list can be ordered differently from
|
|
515
|
+
* the report, so an index alone is never trusted, and a name is never
|
|
516
|
+
* wrong. A scalar marker names its own path. Returns whether any mark was
|
|
517
|
+
* placed.
|
|
518
|
+
*/
|
|
519
|
+
export function markChanged(payload, path, reported, text) {
|
|
520
|
+
const segments = pointerSegments(path);
|
|
521
|
+
const root = nodeAt(payload, segments);
|
|
522
|
+
let placed = false;
|
|
523
|
+
if (Array.isArray(reported) && Array.isArray(root)) {
|
|
524
|
+
const count = (list, key) => list.filter(element => keyOf(element) === key).length;
|
|
525
|
+
reported.forEach((element, index) => {
|
|
526
|
+
const positions = changedPositions(element);
|
|
527
|
+
if (positions.length === 0) {
|
|
528
|
+
return;
|
|
529
|
+
}
|
|
530
|
+
const key = keyOf(element);
|
|
531
|
+
let target;
|
|
532
|
+
if (key !== undefined && count(reported, key) === 1 && count(root, key) === 1) {
|
|
533
|
+
target = root.findIndex(candidate => keyOf(candidate) === key);
|
|
534
|
+
}
|
|
535
|
+
else if (reported.length === root.length && keyOf(root[index]) === key) {
|
|
536
|
+
target = index;
|
|
537
|
+
}
|
|
538
|
+
if (target === undefined) {
|
|
539
|
+
return;
|
|
540
|
+
}
|
|
541
|
+
for (const position of positions) {
|
|
542
|
+
placed = label(payload, [...segments, String(target), ...position], text) || placed;
|
|
543
|
+
}
|
|
544
|
+
});
|
|
545
|
+
return placed;
|
|
546
|
+
}
|
|
547
|
+
for (const position of changedPositions(reported)) {
|
|
548
|
+
placed = label(payload, [...segments, ...position], text) || placed;
|
|
549
|
+
}
|
|
550
|
+
return placed;
|
|
551
|
+
}
|
|
552
|
+
/** How each referenceable type registers on the codegen context. */
|
|
553
|
+
const REGISTRARS = [
|
|
554
|
+
{ type: 'check-group', register: (context, id, name, file) => context.registerCheckGroup(id, name, file) },
|
|
555
|
+
{ type: 'alert-channel', register: (context, id, name, file) => context.registerAlertChannel(id, name, file) },
|
|
556
|
+
{ type: 'private-location', register: (context, id, name, file) => context.registerPrivateLocation(id, name, file) },
|
|
557
|
+
{ type: 'status-page', register: (context, id, name, file) => context.registerStatusPage(id, name, file) },
|
|
558
|
+
{ type: 'status-page-service', register: (context, id, name, file) => context.registerStatusPageService(id, name, file) },
|
|
559
|
+
{ type: 'status-page-component', register: (context, id, name, file) => context.registerStatusPageComponent(id, name, file) },
|
|
560
|
+
];
|
|
561
|
+
/** The types another construct refers to by variable. */
|
|
562
|
+
export const REFERENCEABLE_TYPES = REGISTRARS.map(({ type }) => type);
|
|
563
|
+
/** The name a construct has in the user's code (`names`, keyed by `idKey`), to use as it is, or else `fallback`. */
|
|
564
|
+
function variableName(names, type, logicalId, fallback) {
|
|
565
|
+
const identifier = names.get(idKey(type, logicalId));
|
|
566
|
+
return identifier !== undefined ? { identifier } : fallback;
|
|
567
|
+
}
|
|
568
|
+
const LOOKUPS = {
|
|
569
|
+
'check-group': (context, id) => context.lookupCheckGroup(id),
|
|
570
|
+
'alert-channel': (context, id) => context.lookupAlertChannel(id),
|
|
571
|
+
'private-location': (context, id) => context.lookupPrivateLocation(id),
|
|
572
|
+
'status-page': (context, id) => context.lookupStatusPage(id),
|
|
573
|
+
'status-page-service': (context, id) => context.lookupStatusPageService(id),
|
|
574
|
+
'status-page-component': (context, id) => context.lookupStatusPageComponent(id),
|
|
575
|
+
};
|
|
576
|
+
/**
|
|
577
|
+
* Re-register the construct a codegen has just prepared under the name it
|
|
578
|
+
* has in the user's code (`names`, keyed by `idKey`), or else its logical
|
|
579
|
+
* id, in the construct file the codegen chose. A codegen names the variable
|
|
580
|
+
* it exports after the resource's content (an alert channel after its
|
|
581
|
+
* address, a group after its name), so a change to that content would show
|
|
582
|
+
* as a renamed variable beside the change itself; the code's name and the
|
|
583
|
+
* logical id are the same on both sides. The codegen's own name is given up
|
|
584
|
+
* first, so the new one can be the same (a group declared as `websiteGroup`
|
|
585
|
+
* and named "Website Group") without a counter to tell the two apart. A type
|
|
586
|
+
* whose codegen registers no variable is left alone.
|
|
587
|
+
*/
|
|
588
|
+
export function registerUnderCodeName(context, resource, names = new Map()) {
|
|
589
|
+
const lookup = LOOKUPS[resource.type];
|
|
590
|
+
const registrar = REGISTRARS.find(entry => entry.type === resource.type);
|
|
591
|
+
if (lookup === undefined || registrar === undefined) {
|
|
592
|
+
return;
|
|
593
|
+
}
|
|
594
|
+
const id = resource.payload.id;
|
|
595
|
+
const prepared = lookup(context, id);
|
|
596
|
+
const { file } = prepared;
|
|
597
|
+
context.releaseVariable(prepared);
|
|
598
|
+
registrar.register(context, id, variableName(names, resource.type, resource.logicalId, resource.logicalId), file);
|
|
599
|
+
}
|
|
600
|
+
/**
|
|
601
|
+
* Register every referenceable construct of the local project on a fresh
|
|
602
|
+
* context, under its physical id, so a rendered reference comes out as a
|
|
603
|
+
* variable rather than as `fromId(...)`: the one the construct has in the
|
|
604
|
+
* user's code (`names`, keyed by `idKey`), or else one derived from its name. Both
|
|
605
|
+
* sides of a comparison register the same set in the same order, which is
|
|
606
|
+
* what makes their identifiers agree. The constructs the code names go
|
|
607
|
+
* first, so a name derived for another construct that happens to be the
|
|
608
|
+
* same is the one that gets a counter. One support file for all of them, so
|
|
609
|
+
* the context's per-file identifier namespace tells two constructs with the
|
|
610
|
+
* same name apart (`group`, `group2`); a support file, not a construct file,
|
|
611
|
+
* because `renderConstruct` counts the construct files a render adds.
|
|
612
|
+
*/
|
|
613
|
+
export function registerProject(context, program, project, ids, names = new Map()) {
|
|
614
|
+
const file = program.generatedSupportFile('__preview__/project');
|
|
615
|
+
for (const named of [true, false]) {
|
|
616
|
+
for (const { type, register } of REGISTRARS) {
|
|
617
|
+
const constructs = project.data[type];
|
|
618
|
+
for (const logicalId of Object.keys(constructs).sort()) {
|
|
619
|
+
const id = ids.get(idKey(type, logicalId));
|
|
620
|
+
// A reference construct (`fromId(...)`) has no name of its own: left
|
|
621
|
+
// unregistered, the codegen renders the reference as the `fromId(...)`
|
|
622
|
+
// it is, on both sides.
|
|
623
|
+
if (id === undefined || constructs[logicalId].member === false || names.has(idKey(type, logicalId)) !== named) {
|
|
624
|
+
continue;
|
|
625
|
+
}
|
|
626
|
+
const name = constructs[logicalId].name;
|
|
627
|
+
const derived = typeof name === 'string' && name.length > 0 ? name : logicalId;
|
|
628
|
+
register(context, id, variableName(names, type, logicalId, derived), file);
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
//# sourceMappingURL=import-shape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-shape.js","sourceRoot":"","sources":["../../../src/services/deploy-diff/import-shape.ts"],"names":[],"mappings":"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"}
|