@alwaysmeticulous/cli 2.326.1 → 2.327.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/commonjs-dependencies.spec.d.ts +2 -0
- package/dist/__tests__/commonjs-dependencies.spec.d.ts.map +1 -0
- package/dist/__tests__/commonjs-dependencies.spec.js +82 -0
- package/dist/__tests__/commonjs-dependencies.spec.js.map +1 -0
- package/dist/command-utils/__tests__/parse-rewrites.spec.js +2 -2
- package/dist/command-utils/__tests__/parse-rewrites.spec.js.map +1 -1
- package/dist/command-utils/__tests__/warn-regex-rewrites.spec.js +2 -2
- package/dist/command-utils/__tests__/warn-regex-rewrites.spec.js.map +1 -1
- package/dist/command-utils/common-options.js +2 -2
- package/dist/command-utils/common-options.js.map +1 -1
- package/dist/command-utils/detect-upload-mode.js +2 -2
- package/dist/command-utils/detect-upload-mode.js.map +1 -1
- package/dist/command-utils/detect-upload-mode.spec.js +2 -2
- package/dist/command-utils/detect-upload-mode.spec.js.map +1 -1
- package/dist/command-utils/download-session.utils.js +2 -2
- package/dist/command-utils/download-session.utils.js.map +1 -1
- package/dist/command-utils/json-args.js +2 -2
- package/dist/command-utils/json-args.js.map +1 -1
- package/dist/command-utils/json-args.spec.js +2 -2
- package/dist/command-utils/json-args.spec.js.map +1 -1
- package/dist/command-utils/parse-container-env.js +2 -2
- package/dist/command-utils/parse-container-env.js.map +1 -1
- package/dist/command-utils/parse-rewrites.js +2 -2
- package/dist/command-utils/parse-rewrites.js.map +1 -1
- package/dist/command-utils/print-json.js +2 -2
- package/dist/command-utils/print-json.js.map +1 -1
- package/dist/command-utils/sentry.utils.js +2 -2
- package/dist/command-utils/sentry.utils.js.map +1 -1
- package/dist/command-utils/warn-regex-rewrites.js +2 -2
- package/dist/command-utils/warn-regex-rewrites.js.map +1 -1
- package/dist/commands/agent/agent-review-writes.command.spec.js +2 -2
- package/dist/commands/agent/agent-review-writes.command.spec.js.map +1 -1
- package/dist/commands/agent/build-git-options.js +2 -2
- package/dist/commands/agent/build-git-options.js.map +1 -1
- package/dist/commands/agent/build-git-options.spec.js +2 -2
- package/dist/commands/agent/build-git-options.spec.js.map +1 -1
- package/dist/commands/agent/coverage-columns.util.js +2 -2
- package/dist/commands/agent/coverage-columns.util.js.map +1 -1
- package/dist/commands/agent/create-diff-comment.command.js +2 -2
- package/dist/commands/agent/create-diff-comment.command.js.map +1 -1
- package/dist/commands/agent/diff-comment-write.utils.js +2 -2
- package/dist/commands/agent/diff-comment-write.utils.js.map +1 -1
- package/dist/commands/agent/diff-comments.command.js +2 -2
- package/dist/commands/agent/diff-comments.command.js.map +1 -1
- package/dist/commands/agent/diff-comments.command.spec.js +2 -2
- package/dist/commands/agent/diff-comments.command.spec.js.map +1 -1
- package/dist/commands/agent/ignore-diff.command.js +2 -2
- package/dist/commands/agent/ignore-diff.command.js.map +1 -1
- package/dist/commands/agent/index.js +2 -2
- package/dist/commands/agent/index.js.map +1 -1
- package/dist/commands/agent/js-coverage-diff.command.js +2 -2
- package/dist/commands/agent/js-coverage-diff.command.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.handler.spec.js +2 -2
- package/dist/commands/agent/js-coverage.command.handler.spec.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.js +2 -2
- package/dist/commands/agent/js-coverage.command.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.spec.js +2 -2
- package/dist/commands/agent/js-coverage.command.spec.js.map +1 -1
- package/dist/commands/agent/reject-diff.command.js +2 -2
- package/dist/commands/agent/reject-diff.command.js.map +1 -1
- package/dist/commands/agent/reject-diff.command.spec.js +2 -2
- package/dist/commands/agent/reject-diff.command.spec.js.map +1 -1
- package/dist/commands/agent/reply-to-diff-comment.command.js +2 -2
- package/dist/commands/agent/reply-to-diff-comment.command.js.map +1 -1
- package/dist/commands/agent/screenshot-dom-diff.command.js +2 -2
- package/dist/commands/agent/screenshot-dom-diff.command.js.map +1 -1
- package/dist/commands/agent/screenshot-image-files.command.js +2 -2
- package/dist/commands/agent/screenshot-image-files.command.js.map +1 -1
- package/dist/commands/agent/screenshot-image.command.js +2 -2
- package/dist/commands/agent/screenshot-image.command.js.map +1 -1
- package/dist/commands/agent/sessions.command.js +2 -2
- package/dist/commands/agent/sessions.command.js.map +1 -1
- package/dist/commands/agent/sessions.command.spec.js +2 -2
- package/dist/commands/agent/sessions.command.spec.js.map +1 -1
- package/dist/commands/agent/submit-feedback.command.js +2 -2
- package/dist/commands/agent/submit-feedback.command.js.map +1 -1
- package/dist/commands/agent/test-run-check.command.js +2 -2
- package/dist/commands/agent/test-run-check.command.js.map +1 -1
- package/dist/commands/agent/test-run-check.command.spec.js +2 -2
- package/dist/commands/agent/test-run-check.command.spec.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.js +2 -2
- package/dist/commands/agent/test-run-diffs.command.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.spec.js +2 -2
- package/dist/commands/agent/test-run-diffs.command.spec.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.utils.js +2 -2
- package/dist/commands/agent/test-run-diffs.utils.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.utils.spec.js +2 -2
- package/dist/commands/agent/test-run-diffs.utils.spec.js.map +1 -1
- package/dist/commands/agent/test-run-for-commit.command.js +2 -2
- package/dist/commands/agent/test-run-for-commit.command.js.map +1 -1
- package/dist/commands/agent/timeline.command.js +2 -2
- package/dist/commands/agent/timeline.command.js.map +1 -1
- package/dist/commands/agent/timeline.command.spec.js +2 -2
- package/dist/commands/agent/timeline.command.spec.js.map +1 -1
- package/dist/commands/agent/trigger-test-run.command.js +2 -2
- package/dist/commands/agent/trigger-test-run.command.js.map +1 -1
- package/dist/commands/agent/trigger-test-run.command.spec.js +2 -2
- package/dist/commands/agent/trigger-test-run.command.spec.js.map +1 -1
- package/dist/commands/agent/upload-build.command.js +2 -2
- package/dist/commands/agent/upload-build.command.js.map +1 -1
- package/dist/commands/all-commands.d.ts.map +1 -1
- package/dist/commands/all-commands.js +8 -6
- package/dist/commands/all-commands.js.map +1 -1
- package/dist/commands/auth/__tests__/get-project.command.spec.js +2 -2
- package/dist/commands/auth/__tests__/get-project.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/list-projects.command.spec.js +2 -2
- package/dist/commands/auth/__tests__/list-projects.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/login.command.spec.js +2 -2
- package/dist/commands/auth/__tests__/login.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/logout.command.spec.js +2 -2
- package/dist/commands/auth/__tests__/logout.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/set-project.command.spec.js +2 -2
- package/dist/commands/auth/__tests__/set-project.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/whoami.command.spec.js +2 -2
- package/dist/commands/auth/__tests__/whoami.command.spec.js.map +1 -1
- package/dist/commands/auth/get-project.command.js +2 -2
- package/dist/commands/auth/get-project.command.js.map +1 -1
- package/dist/commands/auth/index.js +2 -2
- package/dist/commands/auth/index.js.map +1 -1
- package/dist/commands/auth/list-projects.command.js +2 -2
- package/dist/commands/auth/list-projects.command.js.map +1 -1
- package/dist/commands/auth/login.command.js +2 -2
- package/dist/commands/auth/login.command.js.map +1 -1
- package/dist/commands/auth/logout.command.js +2 -2
- package/dist/commands/auth/logout.command.js.map +1 -1
- package/dist/commands/auth/set-project.command.js +2 -2
- package/dist/commands/auth/set-project.command.js.map +1 -1
- package/dist/commands/auth/whoami.command.js +2 -2
- package/dist/commands/auth/whoami.command.js.map +1 -1
- package/dist/commands/ci/__tests__/label-commit.utils.spec.js +2 -2
- package/dist/commands/ci/__tests__/label-commit.utils.spec.js.map +1 -1
- package/dist/commands/ci/__tests__/session-filter.utils.spec.js +2 -2
- package/dist/commands/ci/__tests__/session-filter.utils.spec.js.map +1 -1
- package/dist/commands/ci/agent-test.command.js +2 -2
- package/dist/commands/ci/agent-test.command.js.map +1 -1
- package/dist/commands/ci/deprecated-trigger-options.js +2 -2
- package/dist/commands/ci/deprecated-trigger-options.js.map +1 -1
- package/dist/commands/ci/index.js +2 -2
- package/dist/commands/ci/index.js.map +1 -1
- package/dist/commands/ci/label-commit.command.js +2 -2
- package/dist/commands/ci/label-commit.command.js.map +1 -1
- package/dist/commands/ci/label-commit.core.js +2 -2
- package/dist/commands/ci/label-commit.core.js.map +1 -1
- package/dist/commands/ci/label-commit.types.js +2 -2
- package/dist/commands/ci/label-commit.types.js.map +1 -1
- package/dist/commands/ci/label-commit.utils.js +2 -2
- package/dist/commands/ci/label-commit.utils.js.map +1 -1
- package/dist/commands/ci/prepare.command.js +2 -2
- package/dist/commands/ci/prepare.command.js.map +1 -1
- package/dist/commands/ci/resolve-git-options.js +2 -2
- package/dist/commands/ci/resolve-git-options.js.map +1 -1
- package/dist/commands/ci/run-local.command.js +2 -2
- package/dist/commands/ci/run-local.command.js.map +1 -1
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js +2 -2
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js.map +1 -1
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.spec.js +2 -2
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.spec.js.map +1 -1
- package/dist/commands/ci/run-with-uploaded-asset-chunks.utils.js +2 -2
- package/dist/commands/ci/run-with-uploaded-asset-chunks.utils.js.map +1 -1
- package/dist/commands/ci/run.command.js +2 -2
- package/dist/commands/ci/run.command.js.map +1 -1
- package/dist/commands/ci/session-filter.utils.js +2 -2
- package/dist/commands/ci/session-filter.utils.js.map +1 -1
- package/dist/commands/ci/start-tunnel.command.js +2 -2
- package/dist/commands/ci/start-tunnel.command.js.map +1 -1
- package/dist/commands/ci/trigger-test-run.core.js +2 -2
- package/dist/commands/ci/trigger-test-run.core.js.map +1 -1
- package/dist/commands/ci/trigger-test-run.types.js +2 -2
- package/dist/commands/ci/trigger-test-run.types.js.map +1 -1
- package/dist/commands/ci/upload-asset-chunk.command.js +2 -2
- package/dist/commands/ci/upload-asset-chunk.command.js.map +1 -1
- package/dist/commands/ci/upload-assets.command.js +2 -2
- package/dist/commands/ci/upload-assets.command.js.map +1 -1
- package/dist/commands/ci/upload-container.command.js +2 -2
- package/dist/commands/ci/upload-container.command.js.map +1 -1
- package/dist/commands/crawl.command.js +2 -2
- package/dist/commands/crawl.command.js.map +1 -1
- package/dist/commands/debug/clean-workspaces.js +2 -2
- package/dist/commands/debug/clean-workspaces.js.map +1 -1
- package/dist/commands/debug/index.js +2 -2
- package/dist/commands/debug/index.js.map +1 -1
- package/dist/commands/debug/present-workspace.js +2 -2
- package/dist/commands/debug/present-workspace.js.map +1 -1
- package/dist/commands/debug/project-worktree.js +2 -2
- package/dist/commands/debug/project-worktree.js.map +1 -1
- package/dist/commands/deprecated-aliases.js +2 -2
- package/dist/commands/deprecated-aliases.js.map +1 -1
- package/dist/commands/download/index.js +2 -2
- package/dist/commands/download/index.js.map +1 -1
- package/dist/commands/download/replay.command.js +2 -2
- package/dist/commands/download/replay.command.js.map +1 -1
- package/dist/commands/download/session.command.js +2 -2
- package/dist/commands/download/session.command.js.map +1 -1
- package/dist/commands/download/test-run.command.js +2 -2
- package/dist/commands/download/test-run.command.js.map +1 -1
- package/dist/commands/local/get-edited-files.utils.js +2 -2
- package/dist/commands/local/get-edited-files.utils.js.map +1 -1
- package/dist/commands/local/get-edited-files.utils.spec.js +2 -2
- package/dist/commands/local/get-edited-files.utils.spec.js.map +1 -1
- package/dist/commands/local/index.js +2 -2
- package/dist/commands/local/index.js.map +1 -1
- package/dist/commands/local/relevant-sessions.command.js +2 -2
- package/dist/commands/local/relevant-sessions.command.js.map +1 -1
- package/dist/commands/onboard/__tests__/build-context.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/build-context.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/build-context.spec.js +179 -0
- package/dist/commands/onboard/__tests__/build-context.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/check-vcs-link.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/check-vcs-link.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/check-vcs-link.spec.js +164 -0
- package/dist/commands/onboard/__tests__/check-vcs-link.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/codex-mcp.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/codex-mcp.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/codex-mcp.spec.js +73 -0
- package/dist/commands/onboard/__tests__/codex-mcp.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/detect-framework.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/detect-framework.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/detect-framework.spec.js +277 -0
- package/dist/commands/onboard/__tests__/detect-framework.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/git-repo-info.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/git-repo-info.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/git-repo-info.spec.js +109 -0
- package/dist/commands/onboard/__tests__/git-repo-info.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/inline-doc-constants.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/inline-doc-constants.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/inline-doc-constants.spec.js +157 -0
- package/dist/commands/onboard/__tests__/inline-doc-constants.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/install-skills.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/install-skills.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/install-skills.spec.js +158 -0
- package/dist/commands/onboard/__tests__/install-skills.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/materialize-workspace.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/materialize-workspace.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/materialize-workspace.spec.js +116 -0
- package/dist/commands/onboard/__tests__/materialize-workspace.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/resolve-app.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/resolve-app.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/resolve-app.spec.js +166 -0
- package/dist/commands/onboard/__tests__/resolve-app.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/safe-repo-fs.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/safe-repo-fs.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/safe-repo-fs.spec.js +137 -0
- package/dist/commands/onboard/__tests__/safe-repo-fs.spec.js.map +1 -0
- package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.d.ts +2 -0
- package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.d.ts.map +1 -0
- package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.js +286 -0
- package/dist/commands/onboard/__tests__/setup-agent-integrations.spec.js.map +1 -0
- package/dist/commands/onboard/build-context.d.ts +16 -0
- package/dist/commands/onboard/build-context.d.ts.map +1 -0
- package/dist/commands/onboard/build-context.js +104 -0
- package/dist/commands/onboard/build-context.js.map +1 -0
- package/dist/commands/onboard/check-vcs-link.d.ts +14 -0
- package/dist/commands/onboard/check-vcs-link.d.ts.map +1 -0
- package/dist/commands/onboard/check-vcs-link.js +111 -0
- package/dist/commands/onboard/check-vcs-link.js.map +1 -0
- package/dist/commands/onboard/codex-mcp.d.ts +24 -0
- package/dist/commands/onboard/codex-mcp.d.ts.map +1 -0
- package/dist/commands/onboard/codex-mcp.js +302 -0
- package/dist/commands/onboard/codex-mcp.js.map +1 -0
- package/dist/commands/onboard/customer-agents.d.ts +9 -0
- package/dist/commands/onboard/customer-agents.d.ts.map +1 -0
- package/dist/commands/onboard/customer-agents.js +19 -0
- package/dist/commands/onboard/customer-agents.js.map +1 -0
- package/dist/commands/onboard/customer-agents.json +17 -0
- package/dist/commands/onboard/customer-docs.d.ts +21 -0
- package/dist/commands/onboard/customer-docs.d.ts.map +1 -0
- package/dist/commands/onboard/customer-docs.js +31 -0
- package/dist/commands/onboard/customer-docs.js.map +1 -0
- package/dist/commands/onboard/customer-docs.json +35 -0
- package/dist/commands/onboard/detect-framework.d.ts +26 -0
- package/dist/commands/onboard/detect-framework.d.ts.map +1 -0
- package/dist/commands/onboard/detect-framework.js +305 -0
- package/dist/commands/onboard/detect-framework.js.map +1 -0
- package/dist/commands/onboard/discover-apps.d.ts +21 -0
- package/dist/commands/onboard/discover-apps.d.ts.map +1 -0
- package/dist/commands/onboard/discover-apps.js +318 -0
- package/dist/commands/onboard/discover-apps.js.map +1 -0
- package/dist/commands/onboard/docs-urls.d.ts +11 -0
- package/dist/commands/onboard/docs-urls.d.ts.map +1 -0
- package/dist/commands/onboard/docs-urls.js +17 -0
- package/dist/commands/onboard/docs-urls.js.map +1 -0
- package/dist/commands/onboard/git-repo-info.d.ts +15 -0
- package/dist/commands/onboard/git-repo-info.d.ts.map +1 -0
- package/dist/commands/onboard/git-repo-info.js +84 -0
- package/dist/commands/onboard/git-repo-info.js.map +1 -0
- package/dist/commands/onboard/index.d.ts +18 -0
- package/dist/commands/onboard/index.d.ts.map +1 -0
- package/dist/commands/onboard/index.js +164 -0
- package/dist/commands/onboard/index.js.map +1 -0
- package/dist/commands/onboard/inline-doc-constants.d.ts +21 -0
- package/dist/commands/onboard/inline-doc-constants.d.ts.map +1 -0
- package/dist/commands/onboard/inline-doc-constants.js +238 -0
- package/dist/commands/onboard/inline-doc-constants.js.map +1 -0
- package/dist/commands/onboard/launch-agent.d.ts +65 -0
- package/dist/commands/onboard/launch-agent.d.ts.map +1 -0
- package/dist/commands/onboard/launch-agent.js +311 -0
- package/dist/commands/onboard/launch-agent.js.map +1 -0
- package/dist/commands/onboard/materialize-workspace.d.ts +68 -0
- package/dist/commands/onboard/materialize-workspace.d.ts.map +1 -0
- package/dist/commands/onboard/materialize-workspace.js +177 -0
- package/dist/commands/onboard/materialize-workspace.js.map +1 -0
- package/dist/commands/onboard/print-summary.d.ts +10 -0
- package/dist/commands/onboard/print-summary.d.ts.map +1 -0
- package/dist/commands/onboard/print-summary.js +49 -0
- package/dist/commands/onboard/print-summary.js.map +1 -0
- package/dist/commands/onboard/resolve-app.d.ts +21 -0
- package/dist/commands/onboard/resolve-app.d.ts.map +1 -0
- package/dist/commands/onboard/resolve-app.js +78 -0
- package/dist/commands/onboard/resolve-app.js.map +1 -0
- package/dist/commands/onboard/resolve-project.d.ts +14 -0
- package/dist/commands/onboard/resolve-project.d.ts.map +1 -0
- package/dist/commands/onboard/resolve-project.js +92 -0
- package/dist/commands/onboard/resolve-project.js.map +1 -0
- package/dist/commands/onboard/safe-repo-fs.d.ts +59 -0
- package/dist/commands/onboard/safe-repo-fs.d.ts.map +1 -0
- package/dist/commands/onboard/safe-repo-fs.js +266 -0
- package/dist/commands/onboard/safe-repo-fs.js.map +1 -0
- package/dist/commands/onboard/setup-agent-integrations.d.ts +43 -0
- package/dist/commands/onboard/setup-agent-integrations.d.ts.map +1 -0
- package/dist/commands/onboard/setup-agent-integrations.js +324 -0
- package/dist/commands/onboard/setup-agent-integrations.js.map +1 -0
- package/dist/commands/onboard/templates/CLAUDE.md +213 -0
- package/dist/commands/onboard/templates/agents/auth-setup.md +117 -0
- package/dist/commands/onboard/templates/agents/ci-setup.md +742 -0
- package/dist/commands/onboard/templates/agents/csp-setup.md +78 -0
- package/dist/commands/onboard/templates/agents/false-positive-prevention.md +268 -0
- package/dist/commands/onboard/templates/agents/feature-flag-setup.md +133 -0
- package/dist/commands/onboard/templates/agents/local-simulation-verification.md +96 -0
- package/dist/commands/onboard/templates/agents/persisted-graphql-queries.md +150 -0
- package/dist/commands/onboard/templates/agents/recorder-installation.md +194 -0
- package/dist/commands/onboard/templates/agents/replay-fetch-retry-compatibility.md +252 -0
- package/dist/commands/onboard/templates/agents/reviewer.md +788 -0
- package/dist/commands/onboard/templates/agents/service-worker-compatibility.md +254 -0
- package/dist/commands/onboard/templates/agents/session-context.md +133 -0
- package/dist/commands/onboard/templates/agents/shared-worker-compatibility.md +187 -0
- package/dist/commands/onboard/templates/docs/additional-guides/backend-recorder.ts +340 -0
- package/dist/commands/onboard/templates/docs/ci/not-yet-run-checks.ts +58 -0
- package/dist/commands/onboard/templates/docs/ci.ts +19 -0
- package/dist/commands/onboard/templates/docs/cloud-replay.ts +145 -0
- package/dist/commands/onboard/templates/docs/constants.ts +37 -0
- package/dist/commands/onboard/templates/docs/github-actions-v2.ts +859 -0
- package/dist/commands/onboard/templates/docs/how-to/auth/bypassing-auth.ts +27 -0
- package/dist/commands/onboard/templates/docs/how-to/auth/enabling-full-auth.ts +91 -0
- package/dist/commands/onboard/templates/docs/how-to/configure-ignore-patterns.ts +77 -0
- package/dist/commands/onboard/templates/docs/how-to/enable-source-coverage.ts +84 -0
- package/dist/commands/onboard/templates/docs/how-to/fix-false-positive-diffs.ts +156 -0
- package/dist/commands/onboard/templates/docs/how-to/link-bitbucket.ts +15 -0
- package/dist/commands/onboard/templates/docs/how-to/link-gitlab.ts +22 -0
- package/dist/commands/onboard/templates/docs/how-to/record-session-context.ts +129 -0
- package/dist/commands/onboard/templates/docs/how-to/recorder-script.ts +139 -0
- package/dist/commands/onboard/templates/docs/how-to/testing-feature-flags.ts +97 -0
- package/dist/commands/onboard/templates/docs/how-to/testing-multiple-apps-or-app-variants.ts +40 -0
- package/dist/commands/onboard/templates/docs/how-to/troubleshoot-auth.ts +58 -0
- package/dist/commands/onboard/templates/docs/how-to/troubleshoot-failed-simulations.ts +97 -0
- package/dist/commands/onboard/templates/docs/how-to/typescript-types.ts +51 -0
- package/dist/commands/onboard/templates/docs/how-to/window-meticulous-object.ts +685 -0
- package/dist/commands/onboard/templates/docs/onboarding-guide.ts +415 -0
- package/dist/commands/onboard/templates/docs/recorder-getting-started.ts +24 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/constants.ts +1 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/explanation-of-methods-to-add-recorder.ts +21 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/npm-package-based-instructions/angular-instructions.ts +34 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/npm-package-based-instructions/any-other-framework-instructions.ts +118 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/npm-package-based-instructions/vue-instructions.ts +39 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/next-js-instructions.ts +49 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/nuxtjs-instructions.ts +68 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/rsbuild-instructions.ts +66 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/storybook-instructions.ts +59 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/sveltekit-instructions.ts +113 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/script-based-instructions/vite-instructions.ts +58 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/script-requirements.ts +51 -0
- package/dist/commands/onboard/templates/docs/recorder-snippets/steps-after-installing-recorder.ts +25 -0
- package/dist/commands/onboard/templates/docs/reference/cli-commands.ts +1324 -0
- package/dist/commands/onboard/templates/docs/session-recording/csp-exceptions.ts +17 -0
- package/dist/commands/onboard/templates/docs/session-recording/recorder-npm-dependency.ts +62 -0
- package/dist/commands/onboard/templates/docs-imports/src/lib/next/next.constants.ts +46 -0
- package/dist/commands/onboard/templates/docs-imports/src/lib/utils/internal-urls/docs-urls.utils.ts +254 -0
- package/dist/commands/onboard/templates/settings.json +14 -0
- package/dist/commands/project/index.js +2 -2
- package/dist/commands/project/index.js.map +1 -1
- package/dist/commands/project/show.command.js +2 -2
- package/dist/commands/project/show.command.js.map +1 -1
- package/dist/commands/project/upload-source.command.js +2 -2
- package/dist/commands/project/upload-source.command.js.map +1 -1
- package/dist/commands/record/__tests__/backend-dev-command.utils.spec.js +2 -2
- package/dist/commands/record/__tests__/backend-dev-command.utils.spec.js.map +1 -1
- package/dist/commands/record/__tests__/backend-sidecar.utils.spec.js +2 -2
- package/dist/commands/record/__tests__/backend-sidecar.utils.spec.js.map +1 -1
- package/dist/commands/record/__tests__/backend.command.spec.js +2 -2
- package/dist/commands/record/__tests__/backend.command.spec.js.map +1 -1
- package/dist/commands/record/__tests__/login.command.spec.js +2 -2
- package/dist/commands/record/__tests__/login.command.spec.js.map +1 -1
- package/dist/commands/record/__tests__/session.command.spec.js +2 -2
- package/dist/commands/record/__tests__/session.command.spec.js.map +1 -1
- package/dist/commands/record/backend-dev-command.utils.js +2 -2
- package/dist/commands/record/backend-dev-command.utils.js.map +1 -1
- package/dist/commands/record/backend-sidecar.utils.js +2 -2
- package/dist/commands/record/backend-sidecar.utils.js.map +1 -1
- package/dist/commands/record/backend.command.js +2 -2
- package/dist/commands/record/backend.command.js.map +1 -1
- package/dist/commands/record/index.js +2 -2
- package/dist/commands/record/index.js.map +1 -1
- package/dist/commands/record/login.command.js +2 -2
- package/dist/commands/record/login.command.js.map +1 -1
- package/dist/commands/record/session.command.js +2 -2
- package/dist/commands/record/session.command.js.map +1 -1
- package/dist/commands/replay-debugger.ui.js +2 -2
- package/dist/commands/replay-debugger.ui.js.map +1 -1
- package/dist/commands/replay.command.js +2 -2
- package/dist/commands/replay.command.js.map +1 -1
- package/dist/commands/schema.command.js +2 -2
- package/dist/commands/schema.command.js.map +1 -1
- package/dist/commands/schema.command.spec.js +2 -2
- package/dist/commands/schema.command.spec.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/main.js +2 -2
- package/dist/main.js.map +1 -1
- package/dist/utils/__tests__/handle-auth-failure.spec.js +2 -2
- package/dist/utils/__tests__/handle-auth-failure.spec.js.map +1 -1
- package/dist/utils/__tests__/project-selection-hint.spec.js +2 -2
- package/dist/utils/__tests__/project-selection-hint.spec.js.map +1 -1
- package/dist/utils/__tests__/resolve-project-identifier.spec.js +2 -2
- package/dist/utils/__tests__/resolve-project-identifier.spec.js.map +1 -1
- package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js +2 -2
- package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js.map +1 -1
- package/dist/utils/__tests__/select-project.spec.js +5 -4
- package/dist/utils/__tests__/select-project.spec.js.map +1 -1
- package/dist/utils/cli-user-error.js +2 -2
- package/dist/utils/cli-user-error.js.map +1 -1
- package/dist/utils/constants.js +2 -2
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/environment.utils.js +2 -2
- package/dist/utils/environment.utils.js.map +1 -1
- package/dist/utils/format-coverage-ranges.js +2 -2
- package/dist/utils/format-coverage-ranges.js.map +1 -1
- package/dist/utils/handle-auth-failure.js +2 -2
- package/dist/utils/handle-auth-failure.js.map +1 -1
- package/dist/utils/out-of-date-client-error.js +2 -2
- package/dist/utils/out-of-date-client-error.js.map +1 -1
- package/dist/utils/project-selection-hint.js +2 -2
- package/dist/utils/project-selection-hint.js.map +1 -1
- package/dist/utils/resolve-project-identifier.js +2 -2
- package/dist/utils/resolve-project-identifier.js.map +1 -1
- package/dist/utils/resolve-test-run-from-commit.js +2 -2
- package/dist/utils/resolve-test-run-from-commit.js.map +1 -1
- package/dist/utils/select-project.d.ts +9 -0
- package/dist/utils/select-project.d.ts.map +1 -1
- package/dist/utils/select-project.js +58 -15
- package/dist/utils/select-project.js.map +1 -1
- package/package.json +14 -12
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ANGULAR_CLI_URL,
|
|
3
|
+
CLOUD_REPLAY_URL,
|
|
4
|
+
ENSURE_RECORDER_CAPTURES_ALL_REQUESTS_URL,
|
|
5
|
+
FAQ_AND_TROUBLESHOOTING_URL,
|
|
6
|
+
FIX_FALSE_POSITIVES_URL,
|
|
7
|
+
GITHUB_ACTIONS_SETUP_URL,
|
|
8
|
+
MAKE_CHECK_BLOCKING_URL,
|
|
9
|
+
NETWORK_STUBBING_EXPLANATION_URL,
|
|
10
|
+
NEXTJS_APP_ROUTER_ADDITIONAL_SETUP_URL,
|
|
11
|
+
REACT_VITE_URL,
|
|
12
|
+
RECORD_AND_REPLAY_ON_DIFFERENT_ENVIRONMENTS_URL,
|
|
13
|
+
TESTING_FEATURE_FLAGS,
|
|
14
|
+
TROUBLESHOOT_AUTH_URL,
|
|
15
|
+
TROUBLESHOOT_RECORDER_URL,
|
|
16
|
+
VUE_VITE_URL,
|
|
17
|
+
} from "src/lib/utils/internal-urls/docs-urls.utils";
|
|
18
|
+
import { SIMULATION_TAB_NAMES } from "./constants";
|
|
19
|
+
import { EXPLANATION_OF_METHODS_TO_ADD_RECORDER } from "./recorder-snippets/explanation-of-methods-to-add-recorder";
|
|
20
|
+
|
|
21
|
+
export const document = `---
|
|
22
|
+
{
|
|
23
|
+
"title": "Meticulous Onboarding Guide"
|
|
24
|
+
}
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# {% $frontmatter.title %}
|
|
28
|
+
|
|
29
|
+
Welcome to Meticulous! This guide will help you set up automated visual testing for your web application in 3 main steps.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Quick Start - Choose Your Path
|
|
34
|
+
|
|
35
|
+
Answer 3 questions to get a customized setup guide:
|
|
36
|
+
|
|
37
|
+
**Question 1: What framework are you using?**
|
|
38
|
+
- **Next.js** → See [Next.js Setup Guide](${NEXTJS_APP_ROUTER_ADDITIONAL_SETUP_URL})
|
|
39
|
+
- **React (Vite/CRA)** → See [React Setup Guide](${REACT_VITE_URL})
|
|
40
|
+
- **Vue** → See [Vue Setup Guide](${VUE_VITE_URL})
|
|
41
|
+
- **Angular** → See [Angular Setup Guide](${ANGULAR_CLI_URL})
|
|
42
|
+
- **Other** → Continue with general guide below
|
|
43
|
+
|
|
44
|
+
**Question 2: What are you testing?**
|
|
45
|
+
- **Static site (HTML/JS/CSS, no SSR)** → Use \`upload-assets\` action (simplest and most reliable)
|
|
46
|
+
- **Server-rendered app (Next.js, Nuxt, etc.)** → Use \`upload-container\` action (Docker)
|
|
47
|
+
- **Not sure?** → Continue reading below
|
|
48
|
+
|
|
49
|
+
**Question 3: How do you deploy?**
|
|
50
|
+
- **Vercel Preview URLs** → Use [Cloud Replay](${CLOUD_REPLAY_URL}) (no CI workflow needed)
|
|
51
|
+
- **Netlify/Other preview URLs** → Use [Cloud Replay](${CLOUD_REPLAY_URL})
|
|
52
|
+
- **GitHub Actions CI** → Use [GitHub Actions Setup](${GITHUB_ACTIONS_SETUP_URL})
|
|
53
|
+
- **Other CI** → Continue with general guide below
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Overview - 3 Steps to Get Started
|
|
58
|
+
|
|
59
|
+
1. **[5 minutes]** Install recorder and test locally
|
|
60
|
+
2. **[15 minutes]** Set up CI/CD workflow
|
|
61
|
+
3. **[Ongoing]** Record sessions and review diffs
|
|
62
|
+
|
|
63
|
+
**Total setup time**: ~20 minutes for basic setup
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Step 1: Install Recorder and Test Locally (5 minutes)
|
|
68
|
+
|
|
69
|
+
Before setting up CI, let's verify Meticulous works on your local machine.
|
|
70
|
+
|
|
71
|
+
### 1.1 Add Recorder Script
|
|
72
|
+
|
|
73
|
+
{% callout type="info" title="Choose Your Environment" %}
|
|
74
|
+
- **Always install on localhost** (for local development)
|
|
75
|
+
- **Recommended**: Install on staging/preview environments
|
|
76
|
+
- **Production**: Contact support for guidance
|
|
77
|
+
{% /callout %}
|
|
78
|
+
|
|
79
|
+
Add the Meticulous recorder script to your HTML \`<head>\`:
|
|
80
|
+
|
|
81
|
+
\`\`\`html
|
|
82
|
+
<script
|
|
83
|
+
data-project-id="YOUR_PROJECT_ID"
|
|
84
|
+
src="https://snippet.meticulous.ai/v1/meticulous.js"
|
|
85
|
+
></script>
|
|
86
|
+
\`\`\`
|
|
87
|
+
|
|
88
|
+
**Get your project ID**: [Meticulous Dashboard](https://app.meticulous.ai) → Project Settings
|
|
89
|
+
|
|
90
|
+
**Where to add it**:
|
|
91
|
+
- **Next.js App Router**: \`app/layout.tsx\` in \`<head>\`
|
|
92
|
+
- **Next.js Pages**: \`pages/_document.tsx\` in \`<Head>\`
|
|
93
|
+
- **React/Vue/Angular**: \`index.html\` or \`src/index.html\` in \`<head>\`
|
|
94
|
+
|
|
95
|
+
### 1.2 Verify Recorder Works
|
|
96
|
+
|
|
97
|
+
1. **Start your dev server**: \`npm run dev\`
|
|
98
|
+
2. **Open browser DevTools Console**
|
|
99
|
+
3. **Check for**: "Meticulous recorder initialized" message
|
|
100
|
+
4. **Verify**: \`window.Meticulous\` object exists
|
|
101
|
+
|
|
102
|
+
If recorder doesn't load, see [Troubleshoot Recorder](${TROUBLESHOOT_RECORDER_URL}).
|
|
103
|
+
|
|
104
|
+
### 1.3 Test Local Simulation
|
|
105
|
+
|
|
106
|
+
Let's verify Meticulous can replay a session on your local machine:
|
|
107
|
+
|
|
108
|
+
{% command_card %}
|
|
109
|
+
\`\`\`shell
|
|
110
|
+
# Get a session ID from the dashboard first
|
|
111
|
+
npx @alwaysmeticulous/cli simulate \\
|
|
112
|
+
--apiToken="{% api_token /%}" \\
|
|
113
|
+
--sessionId="<SESSION_ID>" \\
|
|
114
|
+
--appUrl="http://localhost:3000"
|
|
115
|
+
\`\`\`
|
|
116
|
+
{% /command_card %}
|
|
117
|
+
|
|
118
|
+
**Where to get session ID**:
|
|
119
|
+
1. Use your app normally with recorder installed
|
|
120
|
+
2. Go to [Meticulous Dashboard](https://app.meticulous.ai)
|
|
121
|
+
3. Find a recent session and copy its ID
|
|
122
|
+
|
|
123
|
+
**Success criteria**:
|
|
124
|
+
- Command completes without errors
|
|
125
|
+
- You can view the simulation in the dashboard
|
|
126
|
+
- Screenshots look correct
|
|
127
|
+
|
|
128
|
+
**Common issues**:
|
|
129
|
+
- **Authentication blocks simulation?** → See [Troubleshoot Auth](${TROUBLESHOOT_AUTH_URL})
|
|
130
|
+
- **Different environment errors?** → See [Cross-Environment Guide](${RECORD_AND_REPLAY_ON_DIFFERENT_ENVIRONMENTS_URL})
|
|
131
|
+
- **Need to debug?** → Add \`--debugger --devTools\` flags
|
|
132
|
+
|
|
133
|
+
**Debug tools**:
|
|
134
|
+
- View simulation events: Dashboard → Simulation → *${SIMULATION_TAB_NAMES.TIMELINE_AND_LOGS}* tab
|
|
135
|
+
- Step through replay: Add \`--debugger --devTools\` to simulate command
|
|
136
|
+
|
|
137
|
+
{% callout type="warning" title="Test Local Simulation Before CI" %}
|
|
138
|
+
Debugging simulation issues on your local machine is **much easier** than debugging in CI.
|
|
139
|
+
Don't proceed to Step 2 until local simulation works!
|
|
140
|
+
{% /callout %}
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Step 2: Set Up CI/CD Workflow (15 minutes)
|
|
145
|
+
|
|
146
|
+
Now that local simulation works, let's run tests in CI on every pull request.
|
|
147
|
+
|
|
148
|
+
### 2.1 Choose Your CI Approach
|
|
149
|
+
|
|
150
|
+
**Option A: Upload static assets (Recommended for static sites)**
|
|
151
|
+
- If your app can be served as static HTML/JS/CSS without server-side rendering
|
|
152
|
+
- Simplest and most reliable approach
|
|
153
|
+
- Not recommended for typical Next.js apps
|
|
154
|
+
- Guide: [GitHub Actions Setup](${GITHUB_ACTIONS_SETUP_URL})
|
|
155
|
+
|
|
156
|
+
**Option B: Upload a Docker container (Recommended for server-rendered apps)**
|
|
157
|
+
- For Next.js, Nuxt, and other SSR frameworks
|
|
158
|
+
- You build a Docker image, Meticulous hosts it
|
|
159
|
+
- Guide: [GitHub Actions Setup](${GITHUB_ACTIONS_SETUP_URL})
|
|
160
|
+
|
|
161
|
+
**Option C: Preview URL integration**
|
|
162
|
+
- Works with Vercel, Netlify, and other preview URL providers
|
|
163
|
+
- No CI workflow needed (Vercel has a direct integration)
|
|
164
|
+
- Guide: [Cloud Replay Setup](${CLOUD_REPLAY_URL})
|
|
165
|
+
|
|
166
|
+
### 2.2 Add API Token to CI
|
|
167
|
+
|
|
168
|
+
1. **Get API token**: [Dashboard](https://app.meticulous.ai) → Project Settings
|
|
169
|
+
2. **Add to GitHub**: Repo Settings → Secrets → Actions
|
|
170
|
+
3. **Create secret**: Name it \`METICULOUS_API_TOKEN\`
|
|
171
|
+
|
|
172
|
+
### 2.3 Create Workflow File
|
|
173
|
+
|
|
174
|
+
Follow the [CI Setup Guide](${GITHUB_ACTIONS_SETUP_URL}) for step-by-step instructions and example workflow files for your chosen approach (upload static assets or upload a Docker container).
|
|
175
|
+
|
|
176
|
+
If using preview URLs, follow the [Cloud Replay Setup Guide](${CLOUD_REPLAY_URL}) instead.
|
|
177
|
+
|
|
178
|
+
### 2.4 Verify Workflow Runs
|
|
179
|
+
|
|
180
|
+
1. **Commit and push** the workflow file
|
|
181
|
+
2. **Create a test PR** with a small change
|
|
182
|
+
3. **Check Actions tab** for workflow run
|
|
183
|
+
4. **Expected first PR**: "No base test run found" (this is normal!)
|
|
184
|
+
|
|
185
|
+
### 2.5 Establish Base Run
|
|
186
|
+
|
|
187
|
+
For the first PR to work, Meticulous needs a base run on your main branch:
|
|
188
|
+
|
|
189
|
+
1. **Merge the PR** that adds Meticulous workflow
|
|
190
|
+
2. **Wait** for workflow to run on main branch
|
|
191
|
+
3. **Verify** in Actions tab: main branch run succeeded
|
|
192
|
+
4. **Check dashboard**: You should see sessions and test runs
|
|
193
|
+
|
|
194
|
+
### 2.6 Test with Second PR
|
|
195
|
+
|
|
196
|
+
1. **Make a small UI change**
|
|
197
|
+
2. **Create another PR**
|
|
198
|
+
3. **Expected**: Meticulous comment with test results
|
|
199
|
+
4. **If you changed UI**: Diffs are detected
|
|
200
|
+
5. **If no changes**: "No diffs detected"
|
|
201
|
+
|
|
202
|
+
{% callout type="success" title="Success!" %}
|
|
203
|
+
If you see a Meticulous comment on your PR, congratulations! You're now running automated visual tests.
|
|
204
|
+
{% /callout %}
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Checklist: Is Everything Working?
|
|
209
|
+
|
|
210
|
+
Use this checklist to verify your setup:
|
|
211
|
+
|
|
212
|
+
### Recorder Installation
|
|
213
|
+
- Recorder script added to HTML \`<head>\`
|
|
214
|
+
- Project ID is correct
|
|
215
|
+
- Console shows "Meticulous recorder initialized"
|
|
216
|
+
- \`window.Meticulous\` object exists
|
|
217
|
+
- Sessions appear in dashboard after using app
|
|
218
|
+
|
|
219
|
+
### Local Simulation
|
|
220
|
+
- \`npx @alwaysmeticulous/cli simulate\` completes successfully
|
|
221
|
+
- Can simulate authenticated pages
|
|
222
|
+
- Can simulate different environments (if needed)
|
|
223
|
+
- Simulation screenshots look correct
|
|
224
|
+
|
|
225
|
+
### CI Setup
|
|
226
|
+
- API token added as repository secret
|
|
227
|
+
- Workflow file created and pushed
|
|
228
|
+
- Workflow runs on PRs
|
|
229
|
+
- Base run exists on main branch
|
|
230
|
+
- Meticulous comments on PRs
|
|
231
|
+
|
|
232
|
+
### Ready for Production
|
|
233
|
+
- No false positive diffs
|
|
234
|
+
- Auth works in tests
|
|
235
|
+
- All critical user flows are recorded
|
|
236
|
+
- Team knows how to review diffs
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Step 3: Record Sessions and Review Diffs (Ongoing)
|
|
241
|
+
|
|
242
|
+
### 3.1 Record Real User Sessions
|
|
243
|
+
|
|
244
|
+
The more sessions you record, the better your test coverage:
|
|
245
|
+
|
|
246
|
+
**Where to record**:
|
|
247
|
+
- **Development**: Engineers testing locally
|
|
248
|
+
- **Staging**: QA and product testing
|
|
249
|
+
- **Preview URLs**: Testing on PRs
|
|
250
|
+
- **Production**: Contact support for guidance
|
|
251
|
+
|
|
252
|
+
**What gets recorded**:
|
|
253
|
+
- User clicks, typing, scrolling
|
|
254
|
+
- Network requests and responses
|
|
255
|
+
- DOM changes and state
|
|
256
|
+
|
|
257
|
+
### 3.2 Curate Your Golden Set
|
|
258
|
+
|
|
259
|
+
Meticulous automatically selects sessions that maximize coverage:
|
|
260
|
+
|
|
261
|
+
1. **View selected sessions**: Dashboard → Selected Sessions tab
|
|
262
|
+
2. **Increase count if needed**: Configure → Number of Sessions
|
|
263
|
+
3. **Manually add important flows**: Select specific sessions
|
|
264
|
+
|
|
265
|
+
### 3.3 Review Diffs on Pull Requests
|
|
266
|
+
|
|
267
|
+
When Meticulous detects visual differences:
|
|
268
|
+
|
|
269
|
+
1. **Review diff screenshots** in PR comment
|
|
270
|
+
2. **Determine if change is**:
|
|
271
|
+
- **Expected**: Click "Approve" to mark as intentional
|
|
272
|
+
- **Bug**: Fix the code
|
|
273
|
+
- **False positive**: See [Fix False Positives](${FIX_FALSE_POSITIVES_URL})
|
|
274
|
+
|
|
275
|
+
### 3.4 Make CI Check Blocking (Optional)
|
|
276
|
+
|
|
277
|
+
Prevent merging PRs with unacknowledged diffs:
|
|
278
|
+
|
|
279
|
+
1. Go to repository settings
|
|
280
|
+
2. Add Meticulous check as required status
|
|
281
|
+
3. Now PRs can't merge with pending diffs
|
|
282
|
+
|
|
283
|
+
See: [Make CI Check Blocking Guide](${MAKE_CHECK_BLOCKING_URL})
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## Original Setup Details
|
|
288
|
+
|
|
289
|
+
Below are the detailed instructions from the original onboarding guide.
|
|
290
|
+
|
|
291
|
+
## 1. Installing the session recorder
|
|
292
|
+
|
|
293
|
+
Before installing the Meticulous session recorder, you should decide which environments are a good fit for recording user sessions:
|
|
294
|
+
|
|
295
|
+
- The session recorder should always be installed on localhost to ensure that all sessions generated by engineers developing and testing your application locally are captured.
|
|
296
|
+
- We also recommend installing it on other internal environments, like staging stacks or preview URLs.
|
|
297
|
+
- If you are interested in recording production sessions, please reach out to Meticulous support for additional details.
|
|
298
|
+
|
|
299
|
+
${EXPLANATION_OF_METHODS_TO_ADD_RECORDER}
|
|
300
|
+
|
|
301
|
+
More information on troubleshooting recorder problems can be found [here](${TROUBLESHOOT_RECORDER_URL}) and [here](${ENSURE_RECORDER_CAPTURES_ALL_REQUESTS_URL}).
|
|
302
|
+
|
|
303
|
+
## 2. Setting up tests to run in CI
|
|
304
|
+
|
|
305
|
+
### Validating that sessions can be simulated
|
|
306
|
+
|
|
307
|
+
Before setting up tests to run in CI, you should ensure that sessions can be simulated on your local machine. Debugging any issues on your
|
|
308
|
+
local machine is much easier than debugging any issues that occur in CI. You can replay locally using the following CLI command:
|
|
309
|
+
|
|
310
|
+
{% command_card %}
|
|
311
|
+
\`\`\`shell
|
|
312
|
+
npx @alwaysmeticulous/cli simulate
|
|
313
|
+
--apiToken="{% api_token /%}"
|
|
314
|
+
--sessionId="<SESSION_ID>"
|
|
315
|
+
--appUrl="<URL_WHERE_APP_IS_RUNNING_LOCALLY>"
|
|
316
|
+
\`\`\`
|
|
317
|
+
{% /command_card %}
|
|
318
|
+
|
|
319
|
+
Important session simulation scenarios to check:
|
|
320
|
+
|
|
321
|
+
- Can you simulate sessions on authenticated pages? If not, see [this doc](${TROUBLESHOOT_AUTH_URL}) on troubleshooting authentication & authorization issues.
|
|
322
|
+
- Can you simulate sessions on a different environment from where they were recorded (e.g. can you simulate a session recorded on sandbox against
|
|
323
|
+
your localhost environment)? If not, see [this doc](${RECORD_AND_REPLAY_ON_DIFFERENT_ENVIRONMENTS_URL}) on troubleshooting cross-environment issues.
|
|
324
|
+
|
|
325
|
+
Two tools to debug simulation issues:
|
|
326
|
+
|
|
327
|
+
- Once a simulation has completed and been uploaded to Meticulous, you can view all the events that happened during the simulation on the
|
|
328
|
+
*${SIMULATION_TAB_NAMES.TIMELINE_AND_LOGS}* tab of the simulation’s page in the Meticulous UI
|
|
329
|
+
- Simulating a session with the flags \`--debugger --devTools\` will let you step through the simulation one user event at a time and pinpoint exactly where the issue is occurring
|
|
330
|
+
|
|
331
|
+
### Running tests in CI
|
|
332
|
+
|
|
333
|
+
For test runs to be executed in CI, Meticulous needs to be able to simulate sessions in 3 different contexts:
|
|
334
|
+
|
|
335
|
+
1. **PR test runs**: whenever a new commit is pushed to a PR branch, Meticulous kicks off a test run where it simulates user sessions against the app running that commit.
|
|
336
|
+
Ideally, this version of the app would be hosted on a commit-specific URL, but Meticulous can also run against the app if it's spun up in CI.
|
|
337
|
+
2. **New-commit-on-main test runs:** whenever a new commit is pushed to the main branch, Meticulous kicks off a test run to take new baseline screenshots.
|
|
338
|
+
Ideally, Meticulous would run against a commit-specific URL here as well, but running the app in CI also works.
|
|
339
|
+
3. **Session selection test runs:** each night, Meticulous simulates every new session from the last 24 hours to determine if any of them add new coverage and should be
|
|
340
|
+
included in the *selected set*. In this context, we want to test against the latest version of your app, so usually a publicly accessible staging URL works best.
|
|
341
|
+
|
|
342
|
+
How to get Meticulous to trigger test runs across these contexts depends on how you build and serve your app:
|
|
343
|
+
|
|
344
|
+
- **[Recommended] Upload static assets.** If your app can be served as a folder of static assets (HTML/JS/CSS) without server-side rendering, this is the simplest and most reliable approach. Follow the guide [here](${GITHUB_ACTIONS_SETUP_URL}) to set up the \`upload-assets\` action. This approach is not recommended for typical Next.js apps.
|
|
345
|
+
- **Upload a Docker container.** For server-rendered apps (Next.js, Nuxt, etc.), you can build a Docker image and have Meticulous host it. Follow the guide [here](${GITHUB_ACTIONS_SETUP_URL}) to set up the \`upload-container\` action.
|
|
346
|
+
- **Vercel preview URLs.** If you use Vercel preview URLs, the complexity of dealing with three different environments is completely abstracted.
|
|
347
|
+
You can add Meticulous’ Vercel integration [here](https://vercel.com/integrations/meticulous) and then follow the guide [here](${CLOUD_REPLAY_URL}) to complete installation.
|
|
348
|
+
- **Other preview URL providers (e.g. Netlify).** If you deploy your app to a preview URL without Vercel, you can follow the doc [here](${CLOUD_REPLAY_URL}) to set up Meticulous.
|
|
349
|
+
|
|
350
|
+
Almost any app can be containerized, so if neither static assets nor preview URLs fit your app, uploading a Docker container is the universal fallback.
|
|
351
|
+
|
|
352
|
+
{% callout type="info" title="GitHub Action Configuration" %}
|
|
353
|
+
For a comprehensive list of all GitHub Action options and configuration parameters, see the [report-diffs-action README](https://github.com/alwaysmeticulous/report-diffs-action#readme).
|
|
354
|
+
{% /callout %}
|
|
355
|
+
|
|
356
|
+
## Common Gotchas
|
|
357
|
+
|
|
358
|
+
Before diving into performance tuning, be aware of these common issues that can cause test failures:
|
|
359
|
+
|
|
360
|
+
### Static Assets with Absolute URLs
|
|
361
|
+
|
|
362
|
+
Meticulous automatically swaps the base URL for page navigation and API requests, but **static assets (CSS, JS, images) referenced with absolute URLs in your HTML are NOT rewritten**.
|
|
363
|
+
|
|
364
|
+
If your HTML contains:
|
|
365
|
+
\`\`\`html
|
|
366
|
+
<script src="https://production.example.com/dist/app.js"></script>
|
|
367
|
+
\`\`\`
|
|
368
|
+
|
|
369
|
+
Change it to a relative URL:
|
|
370
|
+
\`\`\`html
|
|
371
|
+
<script src="/dist/app.js"></script>
|
|
372
|
+
\`\`\`
|
|
373
|
+
|
|
374
|
+
See [Troubleshooting Cross-Environment Issues](${RECORD_AND_REPLAY_ON_DIFFERENT_ENVIRONMENTS_URL}) for more details.
|
|
375
|
+
|
|
376
|
+
### Understanding Network Mocking
|
|
377
|
+
|
|
378
|
+
Meticulous automatically mocks XHR, Fetch, and WebSocket requests, but does NOT mock static assets loaded via HTML tags. For a complete explanation of what is and isn't mocked, see [How Meticulous Handles Network Requests](${NETWORK_STUBBING_EXPLANATION_URL}).
|
|
379
|
+
|
|
380
|
+
### Cross-Environment Configuration
|
|
381
|
+
|
|
382
|
+
If you're recording sessions in one environment (e.g., production) and simulating against another (e.g., localhost or preview URLs), ensure your environments have consistent:
|
|
383
|
+
- Authentication configuration
|
|
384
|
+
- URL routing patterns
|
|
385
|
+
- Environment variables
|
|
386
|
+
|
|
387
|
+
See our [FAQ & Troubleshooting](${FAQ_AND_TROUBLESHOOTING_URL}) guide for more details.
|
|
388
|
+
|
|
389
|
+
## 3. Tuning Performance
|
|
390
|
+
|
|
391
|
+
Once Meticulous is set up to run in CI, there is usually a tuning period (~1-2 weeks) required to get Meticulous working at full capacity.
|
|
392
|
+
A variety of features that can be used to tune Meticulous are described below.
|
|
393
|
+
|
|
394
|
+
### Testing feature flags
|
|
395
|
+
|
|
396
|
+
If you make heavy use of feature flags we recommend configuring Meticulous to support using old sessions to test new features that are
|
|
397
|
+
gated behind feature flags. Get started [here](${TESTING_FEATURE_FLAGS}).
|
|
398
|
+
|
|
399
|
+
### Coverage
|
|
400
|
+
|
|
401
|
+
If you feel that coverage is insufficient, you can try to address it in a couple different ways:
|
|
402
|
+
|
|
403
|
+
- **Increase the number of selected sessions**. When you click the *Configure* button in the *Selected Session* tab of your project dashboard in the Meticulous UI,
|
|
404
|
+
you will see a *Number of Sessions to Auto Select* section. Below this, Meticulous will recommend increasing the number of selected sessions if it will add more coverage.
|
|
405
|
+
- **Enable the session recorder on production.** Increasing the number of sessions being ingested by Meticulous should increase the level of
|
|
406
|
+
coverage that Meticulous is able to provide. If you are interested in this option, please reach out to Meticulous support for more information.
|
|
407
|
+
|
|
408
|
+
### Flakes & false diffs
|
|
409
|
+
|
|
410
|
+
You may run into a flake or false diff during the tuning period — below are some strategies to manage them:
|
|
411
|
+
|
|
412
|
+
- If the flake is not too frequent or problematic, you can click on the screenshot of the diff and then click *Flag as Unexpected*.
|
|
413
|
+
This sends a bug report to the Meticulous team so that the flake can be prioritized and fixed.
|
|
414
|
+
- If the flake is problematic, you can use the techniques described in [this doc](${FIX_FALSE_POSITIVES_URL}) to debug or ignore the problematic element.
|
|
415
|
+
`;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EXPLANATION_OF_METHODS_TO_ADD_RECORDER } from "./recorder-snippets/explanation-of-methods-to-add-recorder";
|
|
2
|
+
|
|
3
|
+
export const document = `---
|
|
4
|
+
{
|
|
5
|
+
"title": "Get started with Meticulous Recorder"
|
|
6
|
+
}
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# {% $frontmatter.title %}
|
|
10
|
+
|
|
11
|
+
Meticulous recorder is a tool for recording real user sessions. The recorder captures your users' actions and any network requests
|
|
12
|
+
(and responses) during their session. Please note that although plaintext passwords are redacted, the recorded network requests can
|
|
13
|
+
include authorization tokens and other headers -- you should therefore only add trusted users to your Meticulous organization.
|
|
14
|
+
You can either add the recorder to all environments or just internal non-production environments.
|
|
15
|
+
|
|
16
|
+
## 1. Sign up
|
|
17
|
+
|
|
18
|
+
Sign up at [https://app.meticulous.ai/signup](https://app.meticulous.ai/signup). You will be prompted to create an organization and
|
|
19
|
+
project.
|
|
20
|
+
|
|
21
|
+
## 2. Install the Meticulous recorder
|
|
22
|
+
|
|
23
|
+
${EXPLANATION_OF_METHODS_TO_ADD_RECORDER}
|
|
24
|
+
`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const SNIPPET_URL = "https://snippet.meticulous.ai/v1/meticulous.js";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ENSURE_RECORDER_CAPTURES_ALL_REQUESTS_URL,
|
|
3
|
+
INSTALL_RECORDER_AS_SCRIPT_TAG_INSTALLATION_INSTRUCTIONS_URL,
|
|
4
|
+
INSTALL_RECORDER_AS_NPM_DEPENDENCY_INSTALLATION_INSTRUCTIONS_URL,
|
|
5
|
+
} from "src/lib/utils/internal-urls/docs-urls.utils";
|
|
6
|
+
|
|
7
|
+
export const EXPLANATION_OF_METHODS_TO_ADD_RECORDER = `
|
|
8
|
+
There are two ways to add the Meticulous recorder to your web application:
|
|
9
|
+
1. [By inserting it as script tag](${INSTALL_RECORDER_AS_SCRIPT_TAG_INSTALLATION_INSTRUCTIONS_URL}) **(recommended)**
|
|
10
|
+
2. [By installing an NPM package](${INSTALL_RECORDER_AS_NPM_DEPENDENCY_INSTALLATION_INSTRUCTIONS_URL})
|
|
11
|
+
|
|
12
|
+
If possible, we recommend that you use the **script tag** as it is the only way to fully guarantee that the recorder
|
|
13
|
+
initializes before any other scripts execute, thereby ensuring Meticulous can capture all network responses
|
|
14
|
+
([learn more](${ENSURE_RECORDER_CAPTURES_ALL_REQUESTS_URL})).
|
|
15
|
+
|
|
16
|
+
For bundler-based setups such as Vite, rsbuild, and Nuxt, our script tag instructions use the \`@alwaysmeticulous/recorder-plugin\`
|
|
17
|
+
dev dependency to inject the script automatically at build time.
|
|
18
|
+
|
|
19
|
+
However, if it's not possible to template your HTML so that the script tag is only included in the environments where you
|
|
20
|
+
want to record sessions then you can use [the loader package instead](${INSTALL_RECORDER_AS_NPM_DEPENDENCY_INSTALLATION_INSTRUCTIONS_URL}).
|
|
21
|
+
`;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { recorderLoaderInstructions } from "./any-other-framework-instructions";
|
|
2
|
+
|
|
3
|
+
// Based on https://angular.io/generated/live-examples/getting-started/stackblitz.html
|
|
4
|
+
const angularSnippet = ({
|
|
5
|
+
constants,
|
|
6
|
+
launchRecorderCode,
|
|
7
|
+
}: {
|
|
8
|
+
constants: string;
|
|
9
|
+
launchRecorderCode: string;
|
|
10
|
+
}) => `import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
|
11
|
+
import { AppModule } from './app/app.module';
|
|
12
|
+
import { tryLoadAndStartRecorder } from '@alwaysmeticulous/recorder-loader'
|
|
13
|
+
${constants}
|
|
14
|
+
async function startApp() {${launchRecorderCode}
|
|
15
|
+
|
|
16
|
+
// Initialise app after the Meticulous recorder is ready, e.g.
|
|
17
|
+
platformBrowserDynamic().bootstrapModule(AppModule)
|
|
18
|
+
.catch(err => console.error(err));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function isProduction() {
|
|
22
|
+
// TODO: Update me with your production hostname
|
|
23
|
+
return window.location.hostname.indexOf("your-production-site.com") > -1;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
startApp();
|
|
27
|
+
`;
|
|
28
|
+
|
|
29
|
+
export const angularInstructions = recorderLoaderInstructions({
|
|
30
|
+
title: "Installing on Angular",
|
|
31
|
+
appEntryPointDescription: "app entry point",
|
|
32
|
+
appEntryPointExampleFileName: "`main.js` or `main.ts`",
|
|
33
|
+
snippetTemplate: angularSnippet,
|
|
34
|
+
});
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
export interface SnippetTemplateOpts {
|
|
2
|
+
constants: string;
|
|
3
|
+
launchRecorderCode: string;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export type SnippetTemplate = (opts: SnippetTemplateOpts) => string;
|
|
7
|
+
|
|
8
|
+
export const anyOtherFrameworkSnippet = ({
|
|
9
|
+
constants,
|
|
10
|
+
launchRecorderCode,
|
|
11
|
+
}: {
|
|
12
|
+
constants: string;
|
|
13
|
+
launchRecorderCode: string;
|
|
14
|
+
}) => `import { tryLoadAndStartRecorder } from '@alwaysmeticulous/recorder-loader'
|
|
15
|
+
${constants}
|
|
16
|
+
async function startApp() {${launchRecorderCode}
|
|
17
|
+
|
|
18
|
+
// Initialise app after the Meticulous recorder is ready, e.g.
|
|
19
|
+
ReactDOM.render(component, document.getElementById('root'));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function isProduction() {
|
|
23
|
+
// TODO: Update me with your production hostname
|
|
24
|
+
return window.location.hostname.indexOf("your-production-site.com") > -1;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
startApp();
|
|
28
|
+
`;
|
|
29
|
+
|
|
30
|
+
export const devAndStagingOnlyOpts: SnippetTemplateOpts = {
|
|
31
|
+
constants: "",
|
|
32
|
+
launchRecorderCode: `
|
|
33
|
+
// Record all sessions on localhost, staging stacks and preview URLs
|
|
34
|
+
if (!isProduction()) {
|
|
35
|
+
// Start the Meticulous recorder before you initialise your app.
|
|
36
|
+
// Note: all errors are caught and logged, so no need to surround with try/catch
|
|
37
|
+
await tryLoadAndStartRecorder({
|
|
38
|
+
recordingToken: '{% project_recording_token /%}',
|
|
39
|
+
isProduction: false,
|
|
40
|
+
});
|
|
41
|
+
}`,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const allEnvironmentsOpts: SnippetTemplateOpts = {
|
|
45
|
+
constants: `
|
|
46
|
+
// Record 1% of production sessions
|
|
47
|
+
const METICULOUS_SAMPLING_RATE = 0.01;
|
|
48
|
+
`,
|
|
49
|
+
launchRecorderCode: `
|
|
50
|
+
if (!isProduction() || Math.random() < METICULOUS_SAMPLING_RATE) {
|
|
51
|
+
// Start the Meticulous recorder before you initialise your app.
|
|
52
|
+
// Note: all errors are caught and logged, so no need to surround with try/catch
|
|
53
|
+
await tryLoadAndStartRecorder({
|
|
54
|
+
recordingToken: '{% project_recording_token /%}',
|
|
55
|
+
isProduction: isProduction(),
|
|
56
|
+
maxMsToBlockFor: isProduction() ? 250 : undefined, // Optional, abandon waiting to load the Meticulous recorder, if it takes more than 250ms
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
`,
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export const recorderLoaderInstructions = ({
|
|
63
|
+
title,
|
|
64
|
+
appEntryPointDescription,
|
|
65
|
+
appEntryPointExampleFileName,
|
|
66
|
+
snippetTemplate,
|
|
67
|
+
}: {
|
|
68
|
+
title: string | null;
|
|
69
|
+
appEntryPointDescription: string;
|
|
70
|
+
appEntryPointExampleFileName: string;
|
|
71
|
+
snippetTemplate: SnippetTemplate;
|
|
72
|
+
}) => `
|
|
73
|
+
${title ? `### ${title}` : ""}
|
|
74
|
+
|
|
75
|
+
**Step A)** Add a dependency on the \`@alwaysmeticulous/recorder-loader\` package:
|
|
76
|
+
|
|
77
|
+
{% command_card_block %}
|
|
78
|
+
\`\`\`bash
|
|
79
|
+
npm install @alwaysmeticulous/recorder-loader
|
|
80
|
+
\`\`\`
|
|
81
|
+
{% /command_card_block %}
|
|
82
|
+
|
|
83
|
+
or
|
|
84
|
+
|
|
85
|
+
{% command_card_block %}
|
|
86
|
+
\`\`\`bash
|
|
87
|
+
yarn add @alwaysmeticulous/recorder-loader
|
|
88
|
+
\`\`\`
|
|
89
|
+
{% /command_card_block %}
|
|
90
|
+
|
|
91
|
+
**Step B)** In your ${appEntryPointDescription} call \`await tryLoadAndStartRecorder({ ... })\` before your app initialisation logic.
|
|
92
|
+
It is important to initialise the Meticulous recorder before your app initialises in order to capture all
|
|
93
|
+
network requests / user interactions correctly.
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
For example your ${appEntryPointExampleFileName} might contain something like:
|
|
97
|
+
|
|
98
|
+
{% code_with_project_selector %}
|
|
99
|
+
{% tabs %}
|
|
100
|
+
{% tab label="Dev & Staging Only" %}
|
|
101
|
+
\`\`\`typescript
|
|
102
|
+
${snippetTemplate(devAndStagingOnlyOpts)}
|
|
103
|
+
\`\`\`
|
|
104
|
+
{% /tab %}
|
|
105
|
+
{% tab label="All Environments" %}
|
|
106
|
+
\`\`\`typescript
|
|
107
|
+
${snippetTemplate(allEnvironmentsOpts)}
|
|
108
|
+
\`\`\`
|
|
109
|
+
{% /tab %}
|
|
110
|
+
{% /tabs %}
|
|
111
|
+
{% /code_with_project_selector %}`;
|
|
112
|
+
|
|
113
|
+
const anyOtherFrameworkInstructions = recorderLoaderInstructions({
|
|
114
|
+
title: "Installing on any other framework",
|
|
115
|
+
appEntryPointDescription: "app entry point",
|
|
116
|
+
appEntryPointExampleFileName: "`index.js` or `main.js`",
|
|
117
|
+
snippetTemplate: anyOtherFrameworkSnippet,
|
|
118
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { recorderLoaderInstructions } from "./any-other-framework-instructions";
|
|
2
|
+
|
|
3
|
+
// Based on https://github.com/gothinkster/vue-realworld-example-app
|
|
4
|
+
const vueSnippet = ({
|
|
5
|
+
constants,
|
|
6
|
+
launchRecorderCode,
|
|
7
|
+
}: {
|
|
8
|
+
constants: string;
|
|
9
|
+
launchRecorderCode: string;
|
|
10
|
+
}) => `import Vue from "vue";
|
|
11
|
+
import App from "./App.vue";
|
|
12
|
+
import router from "./router";
|
|
13
|
+
import store from "./store";
|
|
14
|
+
import { tryLoadAndStartRecorder } from '@alwaysmeticulous/recorder-loader'
|
|
15
|
+
${constants}
|
|
16
|
+
async function startApp() {${launchRecorderCode}
|
|
17
|
+
|
|
18
|
+
// Initialise app after the Meticulous recorder is ready, e.g.
|
|
19
|
+
new Vue({
|
|
20
|
+
router,
|
|
21
|
+
store,
|
|
22
|
+
render: h => h(App)
|
|
23
|
+
}).$mount("#app");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function isProduction() {
|
|
27
|
+
// TODO: Update me with your production hostname
|
|
28
|
+
return window.location.hostname.indexOf("your-production-site.com") > -1;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
startApp();
|
|
32
|
+
`;
|
|
33
|
+
|
|
34
|
+
export const vueInstructions = recorderLoaderInstructions({
|
|
35
|
+
title: "Installing on Vue",
|
|
36
|
+
appEntryPointDescription: "app entry point",
|
|
37
|
+
appEntryPointExampleFileName: "`main.js` or `main.ts`",
|
|
38
|
+
snippetTemplate: vueSnippet,
|
|
39
|
+
});
|