@tanstack/cta-engine 0.14.3 → 0.14.4
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/add-ons.js +5 -91
- package/dist/add-to-app.js +171 -0
- package/dist/config-file.js +34 -11
- package/dist/constants.js +0 -2
- package/dist/create-app.js +142 -451
- package/dist/custom-add-ons/add-on.js +175 -0
- package/dist/custom-add-ons/shared.js +116 -0
- package/dist/custom-add-ons/starter.js +84 -0
- package/dist/environment.js +67 -44
- package/dist/file-helpers.js +165 -0
- package/dist/frameworks.js +92 -0
- package/dist/index.js +18 -1
- package/dist/integrations/git.js +4 -0
- package/dist/integrations/shadcn.js +33 -0
- package/dist/options.js +9 -333
- package/dist/package-json.js +48 -0
- package/dist/package-manager.js +51 -6
- package/dist/registry.js +56 -0
- package/dist/special-steps/index.js +24 -0
- package/dist/special-steps/rimraf-node-modules.js +16 -0
- package/dist/template-file.js +112 -0
- package/dist/types/add-ons.d.ts +3 -8
- package/dist/types/add-to-app.d.ts +17 -0
- package/dist/types/config-file.d.ts +7 -4
- package/dist/types/constants.d.ts +0 -3
- package/dist/types/create-app.d.ts +1 -7
- package/dist/types/custom-add-ons/add-on.d.ts +69 -0
- package/dist/types/custom-add-ons/shared.d.ts +15 -0
- package/dist/types/custom-add-ons/starter.d.ts +7 -0
- package/dist/types/environment.d.ts +2 -1
- package/dist/types/file-helpers.d.ts +15 -0
- package/dist/types/frameworks.d.ts +7 -0
- package/dist/types/index.d.ts +21 -1
- package/dist/types/integrations/git.d.ts +2 -0
- package/dist/types/integrations/shadcn.d.ts +2 -0
- package/dist/types/options.d.ts +2 -6
- package/dist/types/package-json.d.ts +7 -0
- package/dist/types/package-manager.d.ts +18 -1
- package/dist/types/registry.d.ts +25 -0
- package/dist/types/special-steps/index.d.ts +2 -0
- package/dist/types/special-steps/rimraf-node-modules.d.ts +2 -0
- package/dist/types/template-file.d.ts +2 -0
- package/dist/types/types.d.ts +788 -85
- package/dist/types/utils.d.ts +5 -0
- package/dist/types.js +65 -1
- package/dist/utils.js +9 -0
- package/package.json +9 -12
- package/src/add-ons.ts +7 -123
- package/src/add-to-app.ts +276 -0
- package/src/config-file.ts +51 -20
- package/src/constants.ts +0 -5
- package/src/create-app.ts +180 -730
- package/src/custom-add-ons/add-on.ts +261 -0
- package/src/custom-add-ons/shared.ts +160 -0
- package/src/custom-add-ons/starter.ts +126 -0
- package/src/environment.ts +80 -45
- package/src/file-helpers.ts +235 -0
- package/src/frameworks.ts +134 -0
- package/src/index.ts +85 -1
- package/src/integrations/git.ts +7 -0
- package/src/integrations/shadcn.ts +54 -0
- package/src/options.ts +8 -409
- package/src/package-json.ts +69 -0
- package/src/package-manager.ts +80 -9
- package/src/registry.ts +92 -0
- package/src/special-steps/index.ts +36 -0
- package/src/special-steps/rimraf-node-modules.ts +25 -0
- package/src/template-file.ts +150 -0
- package/src/types.ts +175 -87
- package/src/utils.ts +17 -0
- package/tests/add-ons.test.ts +67 -0
- package/tests/add-to-app.test.ts +358 -0
- package/tests/config-file.test.ts +105 -0
- package/tests/create-app.test.ts +120 -0
- package/tests/custom-add-ons/add-on.test.ts +12 -0
- package/tests/custom-add-ons/shared.test.ts +253 -0
- package/tests/custom-add-ons/starter.test.ts +58 -0
- package/tests/environment.test.ts +115 -0
- package/tests/file-helper.test.ts +90 -0
- package/tests/frameworks.test.ts +95 -0
- package/tests/index.test.ts +9 -0
- package/tests/integrations/git.test.ts +20 -0
- package/tests/integrations/shadcn.test.ts +91 -0
- package/tests/options.test.ts +42 -0
- package/tests/package-json.test.ts +63 -0
- package/tests/package-manager.test.ts +154 -0
- package/tests/setupVitest.ts +6 -0
- package/tests/template-file.test.ts +178 -0
- package/tests/utils.test.ts +23 -0
- package/vitest.config.ts +21 -0
- package/dist/add.js +0 -125
- package/dist/cli.js +0 -132
- package/dist/custom-add-on.js +0 -254
- package/dist/file-helper.js +0 -18
- package/dist/mcp.js +0 -229
- package/dist/templates.js +0 -6
- package/dist/toolchain.js +0 -6
- package/dist/types/add.d.ts +0 -3
- package/dist/types/cli.d.ts +0 -7
- package/dist/types/custom-add-on.d.ts +0 -3
- package/dist/types/file-helper.d.ts +0 -2
- package/dist/types/mcp.d.ts +0 -7
- package/dist/types/templates.d.ts +0 -1
- package/dist/types/toolchain.d.ts +0 -3
- package/src/add.ts +0 -186
- package/src/cli.ts +0 -210
- package/src/custom-add-on.ts +0 -325
- package/src/file-helper.ts +0 -20
- package/src/mcp.ts +0 -302
- package/src/templates.ts +0 -7
- package/src/toolchain.ts +0 -7
- package/templates/react/add-on/clerk/README.md +0 -3
- package/templates/react/add-on/clerk/assets/_dot_env.local.append +0 -2
- package/templates/react/add-on/clerk/assets/src/integrations/clerk/header-user.tsx +0 -19
- package/templates/react/add-on/clerk/assets/src/integrations/clerk/provider.tsx +0 -18
- package/templates/react/add-on/clerk/assets/src/routes/demo.clerk.tsx +0 -20
- package/templates/react/add-on/clerk/info.json +0 -13
- package/templates/react/add-on/clerk/package.json +0 -5
- package/templates/react/add-on/convex/README.md +0 -4
- package/templates/react/add-on/convex/assets/_dot_cursorrules.append +0 -93
- package/templates/react/add-on/convex/assets/_dot_env.local.append +0 -3
- package/templates/react/add-on/convex/assets/convex/products.ts +0 -8
- package/templates/react/add-on/convex/assets/convex/schema.ts +0 -10
- package/templates/react/add-on/convex/assets/src/integrations/convex/provider.tsx +0 -20
- package/templates/react/add-on/convex/assets/src/routes/demo.convex.tsx +0 -33
- package/templates/react/add-on/convex/info.json +0 -13
- package/templates/react/add-on/convex/package.json +0 -6
- package/templates/react/add-on/form/assets/src/components/demo.FormComponents.tsx.ejs +0 -300
- package/templates/react/add-on/form/assets/src/hooks/demo.form-context.ts +0 -4
- package/templates/react/add-on/form/assets/src/hooks/demo.form.ts +0 -22
- package/templates/react/add-on/form/assets/src/routes/demo.form.address.tsx.ejs +0 -213
- package/templates/react/add-on/form/assets/src/routes/demo.form.simple.tsx.ejs +0 -77
- package/templates/react/add-on/form/info.json +0 -26
- package/templates/react/add-on/form/package.json +0 -6
- package/templates/react/add-on/module-federation/assets/module-federation.config.js.ejs +0 -31
- package/templates/react/add-on/module-federation/assets/src/demo-mf-component.tsx +0 -3
- package/templates/react/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +0 -11
- package/templates/react/add-on/module-federation/info.json +0 -7
- package/templates/react/add-on/module-federation/package.json +0 -5
- package/templates/react/add-on/netlify/README.md +0 -11
- package/templates/react/add-on/netlify/info.json +0 -7
- package/templates/react/add-on/sentry/assets/_dot_cursorrules.append +0 -22
- package/templates/react/add-on/sentry/assets/_dot_env.local.append +0 -11
- package/templates/react/add-on/sentry/assets/src/app/global-middleware.ts +0 -11
- package/templates/react/add-on/sentry/assets/src/routes/demo.sentry.testing.tsx +0 -489
- package/templates/react/add-on/sentry/info.json +0 -14
- package/templates/react/add-on/sentry/package.json +0 -5
- package/templates/react/add-on/shadcn/README.md +0 -7
- package/templates/react/add-on/shadcn/assets/_dot_cursorrules.append +0 -7
- package/templates/react/add-on/shadcn/assets/components.json +0 -21
- package/templates/react/add-on/shadcn/assets/src/lib/utils.ts +0 -6
- package/templates/react/add-on/shadcn/assets/src/styles.css +0 -138
- package/templates/react/add-on/shadcn/info.json +0 -7
- package/templates/react/add-on/shadcn/package.json +0 -9
- package/templates/react/add-on/start/assets/_dot_gitignore.append +0 -2
- package/templates/react/add-on/start/assets/app.config.ts.ejs +0 -32
- package/templates/react/add-on/start/assets/src/api.ts +0 -6
- package/templates/react/add-on/start/assets/src/client.tsx.ejs +0 -33
- package/templates/react/add-on/start/assets/src/router.tsx.ejs +0 -48
- package/templates/react/add-on/start/assets/src/routes/api.demo-names.ts +0 -11
- package/templates/react/add-on/start/assets/src/routes/demo.start.api-request.tsx.ejs +0 -33
- package/templates/react/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +0 -50
- package/templates/react/add-on/start/assets/src/ssr.tsx.ejs +0 -30
- package/templates/react/add-on/start/info.json +0 -18
- package/templates/react/add-on/start/package.json +0 -13
- package/templates/react/add-on/store/assets/src/lib/demo-store.ts +0 -13
- package/templates/react/add-on/store/assets/src/routes/demo.store.tsx.ejs +0 -75
- package/templates/react/add-on/store/info.json +0 -13
- package/templates/react/add-on/store/package.json +0 -6
- package/templates/react/add-on/t3env/README.md +0 -16
- package/templates/react/add-on/t3env/assets/src/env.ts +0 -39
- package/templates/react/add-on/t3env/info.json +0 -10
- package/templates/react/add-on/t3env/package.json +0 -6
- package/templates/react/add-on/tRPC/assets/src/integrations/trpc/init.ts +0 -9
- package/templates/react/add-on/tRPC/assets/src/integrations/trpc/react.ts +0 -4
- package/templates/react/add-on/tRPC/assets/src/integrations/trpc/router.ts +0 -18
- package/templates/react/add-on/tRPC/assets/src/routes/api.trpc.$.tsx +0 -16
- package/templates/react/add-on/tRPC/info.json +0 -9
- package/templates/react/add-on/tRPC/package.json +0 -9
- package/templates/react/add-on/table/assets/src/data/demo-table-data.ts +0 -50
- package/templates/react/add-on/table/assets/src/routes/demo.table.tsx.ejs +0 -373
- package/templates/react/add-on/table/info.json +0 -13
- package/templates/react/add-on/table/package.json +0 -7
- package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/layout.tsx +0 -5
- package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +0 -70
- package/templates/react/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx.ejs +0 -53
- package/templates/react/add-on/tanstack-query/info.json +0 -13
- package/templates/react/add-on/tanstack-query/package.json +0 -6
- package/templates/react/base/README.md.ejs +0 -558
- package/templates/react/base/_dot_gitignore +0 -5
- package/templates/react/base/_dot_vscode/settings.biome.json +0 -38
- package/templates/react/base/_dot_vscode/settings.json +0 -11
- package/templates/react/base/index.html.ejs +0 -20
- package/templates/react/base/package.biome.json +0 -10
- package/templates/react/base/package.eslintprettier.json +0 -11
- package/templates/react/base/package.json +0 -30
- package/templates/react/base/package.ts.json +0 -7
- package/templates/react/base/package.tw.json +0 -6
- package/templates/react/base/public/favicon.ico +0 -0
- package/templates/react/base/public/logo192.png +0 -0
- package/templates/react/base/public/logo512.png +0 -0
- package/templates/react/base/public/manifest.json +0 -25
- package/templates/react/base/public/robots.txt +0 -3
- package/templates/react/base/src/App.css +0 -38
- package/templates/react/base/src/App.test.tsx.ejs +0 -10
- package/templates/react/base/src/App.tsx.ejs +0 -74
- package/templates/react/base/src/components/Header.tsx.ejs +0 -27
- package/templates/react/base/src/logo.svg +0 -44
- package/templates/react/base/src/reportWebVitals.ts.ejs +0 -28
- package/templates/react/base/src/styles.css.ejs +0 -15
- package/templates/react/base/toolchain/.prettierignore +0 -3
- package/templates/react/base/toolchain/biome.json +0 -31
- package/templates/react/base/toolchain/eslint.config.js +0 -5
- package/templates/react/base/toolchain/prettier.config.js +0 -10
- package/templates/react/base/tsconfig.json.ejs +0 -29
- package/templates/react/base/vite.config.js.ejs +0 -23
- package/templates/react/code-router/src/main.tsx.ejs +0 -92
- package/templates/react/example/tanchat/README.md +0 -37
- package/templates/react/example/tanchat/assets/_dot_env.local.append +0 -2
- package/templates/react/example/tanchat/assets/public/example-guitar-flowers.jpg +0 -0
- package/templates/react/example/tanchat/assets/public/example-guitar-motherboard.jpg +0 -0
- package/templates/react/example/tanchat/assets/public/example-guitar-racing.jpg +0 -0
- package/templates/react/example/tanchat/assets/public/example-guitar-steamer-trunk.jpg +0 -0
- package/templates/react/example/tanchat/assets/public/example-guitar-superhero.jpg +0 -0
- package/templates/react/example/tanchat/assets/public/example-guitar-traveling.jpg +0 -0
- package/templates/react/example/tanchat/assets/public/example-guitar-video-games.jpg +0 -0
- package/templates/react/example/tanchat/assets/src/components/example-AIAssistant.tsx +0 -173
- package/templates/react/example/tanchat/assets/src/components/example-GuitarRecommendation.tsx +0 -47
- package/templates/react/example/tanchat/assets/src/data/example-guitars.ts +0 -83
- package/templates/react/example/tanchat/assets/src/demo.index.css +0 -220
- package/templates/react/example/tanchat/assets/src/integrations/tanchat/header-user.tsx +0 -5
- package/templates/react/example/tanchat/assets/src/routes/api.messages.ts +0 -24
- package/templates/react/example/tanchat/assets/src/routes/api.sse.ts +0 -23
- package/templates/react/example/tanchat/assets/src/routes/example.chat.tsx +0 -159
- package/templates/react/example/tanchat/assets/src/routes/example.guitars/$guitarId.tsx +0 -50
- package/templates/react/example/tanchat/assets/src/routes/example.guitars/index.tsx +0 -54
- package/templates/react/example/tanchat/assets/src/store/example-assistant.ts +0 -3
- package/templates/react/example/tanchat/assets/src/utils/demo.ai.ts +0 -62
- package/templates/react/example/tanchat/assets/src/utils/demo.sse.ts +0 -31
- package/templates/react/example/tanchat/assets/src/utils/demo.tools.ts +0 -47
- package/templates/react/example/tanchat/info.json +0 -19
- package/templates/react/example/tanchat/package.json +0 -16
- package/templates/react/file-router/package.fr.json +0 -5
- package/templates/react/file-router/src/main.tsx.ejs +0 -55
- package/templates/react/file-router/src/routes/__root.tsx.ejs +0 -82
- package/templates/solid/add-on/form/assets/src/routes/demo.form.tsx.ejs +0 -352
- package/templates/solid/add-on/form/info.json +0 -13
- package/templates/solid/add-on/form/package.json +0 -5
- package/templates/solid/add-on/module-federation/assets/module-federation.config.js.ejs +0 -27
- package/templates/solid/add-on/module-federation/assets/src/demo-mf-component.tsx +0 -3
- package/templates/solid/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +0 -9
- package/templates/solid/add-on/module-federation/info.json +0 -7
- package/templates/solid/add-on/module-federation/package.json +0 -5
- package/templates/solid/add-on/sentry/assets/_dot_cursorrules.append +0 -22
- package/templates/solid/add-on/sentry/assets/_dot_env.local.append +0 -2
- package/templates/solid/add-on/sentry/assets/src/routes/demo.sentry.bad-event-handler.tsx +0 -20
- package/templates/solid/add-on/sentry/info.json +0 -13
- package/templates/solid/add-on/sentry/package.json +0 -5
- package/templates/solid/add-on/solid-ui/README.md +0 -9
- package/templates/solid/add-on/solid-ui/assets/src/lib/utils.ts +0 -6
- package/templates/solid/add-on/solid-ui/assets/src/styles.css +0 -138
- package/templates/solid/add-on/solid-ui/assets/ui.config.json +0 -13
- package/templates/solid/add-on/solid-ui/info.json +0 -11
- package/templates/solid/add-on/solid-ui/package.json +0 -9
- package/templates/solid/add-on/start/assets/app.config.ts +0 -16
- package/templates/solid/add-on/start/assets/src/api.ts +0 -6
- package/templates/solid/add-on/start/assets/src/client.tsx +0 -7
- package/templates/solid/add-on/start/assets/src/router.tsx.ejs +0 -24
- package/templates/solid/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +0 -49
- package/templates/solid/add-on/start/assets/src/ssr.tsx +0 -12
- package/templates/solid/add-on/start/info.json +0 -14
- package/templates/solid/add-on/start/package.json +0 -12
- package/templates/solid/add-on/store/assets/src/lib/demo-store.ts +0 -13
- package/templates/solid/add-on/store/assets/src/routes/demo.store.tsx.ejs +0 -77
- package/templates/solid/add-on/store/info.json +0 -13
- package/templates/solid/add-on/store/package.json +0 -6
- package/templates/solid/add-on/t3env/README.md +0 -16
- package/templates/solid/add-on/t3env/assets/src/env.ts +0 -39
- package/templates/solid/add-on/t3env/info.json +0 -10
- package/templates/solid/add-on/t3env/package.json +0 -6
- package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/header-user.tsx +0 -5
- package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/provider.tsx +0 -15
- package/templates/solid/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx +0 -30
- package/templates/solid/add-on/tanstack-query/info.json +0 -13
- package/templates/solid/add-on/tanstack-query/package.json +0 -6
- package/templates/solid/base/README.md.ejs +0 -215
- package/templates/solid/base/_dot_cursorrules.append +0 -35
- package/templates/solid/base/_dot_gitignore +0 -5
- package/templates/solid/base/_dot_vscode/settings.biome.json +0 -38
- package/templates/solid/base/_dot_vscode/settings.json +0 -11
- package/templates/solid/base/index.html.ejs +0 -20
- package/templates/solid/base/package.biome.json +0 -10
- package/templates/solid/base/package.eslintprettier.json +0 -11
- package/templates/solid/base/package.json +0 -23
- package/templates/solid/base/package.ts.json +0 -5
- package/templates/solid/base/package.tw.json +0 -6
- package/templates/solid/base/public/favicon.ico +0 -0
- package/templates/solid/base/public/logo192.png +0 -0
- package/templates/solid/base/public/logo512.png +0 -0
- package/templates/solid/base/public/manifest.json +0 -25
- package/templates/solid/base/public/robots.txt +0 -3
- package/templates/solid/base/src/App.css +0 -0
- package/templates/solid/base/src/App.tsx.ejs +0 -47
- package/templates/solid/base/src/components/Header.tsx.ejs +0 -26
- package/templates/solid/base/src/logo.svg +0 -120
- package/templates/solid/base/src/styles.css.ejs +0 -15
- package/templates/solid/base/toolchain/.prettierignore +0 -3
- package/templates/solid/base/toolchain/biome.json +0 -31
- package/templates/solid/base/toolchain/eslint.config.js +0 -5
- package/templates/solid/base/toolchain/prettier.config.js +0 -10
- package/templates/solid/base/tsconfig.json.ejs +0 -31
- package/templates/solid/base/vite.config.js.ejs +0 -22
- package/templates/solid/code-router/src/main.tsx.ejs +0 -71
- package/templates/solid/example/tanchat/README.md +0 -52
- package/templates/solid/example/tanchat/assets/ai-streaming-server/README.md +0 -110
- package/templates/solid/example/tanchat/assets/ai-streaming-server/_dot_env.example +0 -1
- package/templates/solid/example/tanchat/assets/ai-streaming-server/package.json +0 -26
- package/templates/solid/example/tanchat/assets/ai-streaming-server/src/index.ts +0 -102
- package/templates/solid/example/tanchat/assets/ai-streaming-server/tsconfig.json +0 -15
- package/templates/solid/example/tanchat/assets/src/components/demo.SettingsDialog.tsx +0 -149
- package/templates/solid/example/tanchat/assets/src/demo.index.css +0 -227
- package/templates/solid/example/tanchat/assets/src/lib/demo-store.ts +0 -13
- package/templates/solid/example/tanchat/assets/src/routes/example.chat.tsx +0 -435
- package/templates/solid/example/tanchat/assets/src/store/demo.hooks.ts +0 -17
- package/templates/solid/example/tanchat/assets/src/store/demo.store.ts +0 -133
- package/templates/solid/example/tanchat/info.json +0 -14
- package/templates/solid/example/tanchat/package.json +0 -7
- package/templates/solid/file-router/package.fr.json +0 -5
- package/templates/solid/file-router/src/main.tsx.ejs +0 -47
- package/templates/solid/file-router/src/routes/__root.tsx.ejs +0 -41
- package/templates/solid/file-router/src/routes/index.tsx +0 -43
- package/tests/cra.test.ts +0 -293
- package/tests/snapshots/cra/cr-js-npm.json +0 -33
- package/tests/snapshots/cra/cr-ts-npm.json +0 -34
- package/tests/snapshots/cra/cr-ts-start-npm.json +0 -38
- package/tests/snapshots/cra/fr-ts-npm.json +0 -34
- package/tests/snapshots/cra/fr-ts-tw-npm.json +0 -33
- package/tests/snapshots/cra/solid-cr-js-npm.json +0 -31
- package/tests/snapshots/cra/solid-cr-ts-npm.json +0 -32
- package/tests/snapshots/cra/solid-cr-ts-start-npm.json +0 -36
- package/tests/snapshots/cra/solid-fr-ts-npm.json +0 -33
- package/tests/snapshots/cra/solid-fr-ts-tw-npm.json +0 -32
- package/tests/test-utilities.ts +0 -87
|
@@ -1,489 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* FILE OVERVIEW:
|
|
3
|
-
* Purpose: Interactive demo page showcasing Sentry's monitoring capabilities
|
|
4
|
-
* Key Concepts: Error tracking, Performance monitoring, Session replay
|
|
5
|
-
* Module Type: Route Component
|
|
6
|
-
* @ai_context: Demonstrates Sentry features through interactive examples with educational context
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import * as fs from 'node:fs/promises'
|
|
10
|
-
import { createFileRoute } from '@tanstack/react-router'
|
|
11
|
-
import { createServerFn } from '@tanstack/react-start'
|
|
12
|
-
import * as Sentry from "@sentry/tanstackstart-react";
|
|
13
|
-
import { useState, useEffect, useRef } from 'react'
|
|
14
|
-
|
|
15
|
-
export const Route = createFileRoute('/demo/sentry/testing')({
|
|
16
|
-
component: RouteComponent,
|
|
17
|
-
})
|
|
18
|
-
|
|
19
|
-
// Server function that will error
|
|
20
|
-
const badServerFunc = createServerFn({
|
|
21
|
-
method: 'GET',
|
|
22
|
-
}).handler(async () => {
|
|
23
|
-
return await Sentry.startSpan(
|
|
24
|
-
{
|
|
25
|
-
name: 'Reading non-existent file',
|
|
26
|
-
op: 'file.read'
|
|
27
|
-
},
|
|
28
|
-
async () => {
|
|
29
|
-
try {
|
|
30
|
-
await fs.readFile('./doesnt-exist', 'utf-8')
|
|
31
|
-
return true
|
|
32
|
-
} catch (error) {
|
|
33
|
-
Sentry.captureException(error)
|
|
34
|
-
throw error
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
)
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
// Server function that will succeed but be traced
|
|
41
|
-
const goodServerFunc = createServerFn({
|
|
42
|
-
method: 'GET',
|
|
43
|
-
}).handler(async () => {
|
|
44
|
-
return await Sentry.startSpan(
|
|
45
|
-
{
|
|
46
|
-
name: 'Successful server operation',
|
|
47
|
-
op: 'demo.success'
|
|
48
|
-
},
|
|
49
|
-
async () => {
|
|
50
|
-
await new Promise(resolve => setTimeout(resolve, 500))
|
|
51
|
-
return { success: true }
|
|
52
|
-
}
|
|
53
|
-
)
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
function RouteComponent() {
|
|
57
|
-
const [isLoading, setIsLoading] = useState<Record<string, boolean>>({})
|
|
58
|
-
const [hasError, setHasError] = useState<Record<string, boolean>>({})
|
|
59
|
-
const [showTrace, setShowTrace] = useState<Record<string, boolean>>({})
|
|
60
|
-
const [spanOps, setSpanOps] = useState<Record<string, string>>({})
|
|
61
|
-
const [demoStep, setDemoStep] = useState(0)
|
|
62
|
-
const [replayEvents, setReplayEvents] = useState<string[]>([])
|
|
63
|
-
const [copiedSpan, setCopiedSpan] = useState<string | null>(null)
|
|
64
|
-
const startTimeRef = useRef<string>('')
|
|
65
|
-
|
|
66
|
-
useEffect(() => {
|
|
67
|
-
// Set initial timestamp only once on client
|
|
68
|
-
if (!startTimeRef.current) {
|
|
69
|
-
startTimeRef.current = new Date().toISOString()
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (demoStep > 0) {
|
|
73
|
-
const secondsElapsed = ((new Date().getTime() - new Date(startTimeRef.current).getTime()) / 1000).toFixed(1)
|
|
74
|
-
setReplayEvents(prev => [...prev, `Step ${demoStep}: +${secondsElapsed}s`])
|
|
75
|
-
}
|
|
76
|
-
}, [demoStep])
|
|
77
|
-
|
|
78
|
-
const handleCopy = (operation: string) => {
|
|
79
|
-
navigator.clipboard.writeText(operation);
|
|
80
|
-
setCopiedSpan(operation);
|
|
81
|
-
setTimeout(() => setCopiedSpan(null), 2000);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const handleClientError = async () => {
|
|
85
|
-
setIsLoading(prev => ({ ...prev, clientError: true }))
|
|
86
|
-
setHasError(prev => ({ ...prev, clientError: false }))
|
|
87
|
-
setShowTrace(prev => ({ ...prev, clientError: true }))
|
|
88
|
-
|
|
89
|
-
try {
|
|
90
|
-
await Sentry.startSpan(
|
|
91
|
-
{
|
|
92
|
-
name: 'Client Error Flow Demo',
|
|
93
|
-
op: 'demo.client-error-flow',
|
|
94
|
-
},
|
|
95
|
-
async () => {
|
|
96
|
-
Sentry.setContext("demo", {
|
|
97
|
-
feature: "client-error-demo",
|
|
98
|
-
triggered_at: new Date().toISOString()
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
// Simulate a client-side error
|
|
102
|
-
throw new Error('Client-side error demonstration')
|
|
103
|
-
}
|
|
104
|
-
)
|
|
105
|
-
} catch (error) {
|
|
106
|
-
setHasError(prev => ({ ...prev, clientError: true }))
|
|
107
|
-
setSpanOps(prev => ({ ...prev, clientError: 'demo.client-error-flow' }))
|
|
108
|
-
Sentry.captureException(error)
|
|
109
|
-
} finally {
|
|
110
|
-
setIsLoading(prev => ({ ...prev, clientError: false }))
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
const handleServerError = async () => {
|
|
115
|
-
setIsLoading(prev => ({ ...prev, serverError: true }))
|
|
116
|
-
setHasError(prev => ({ ...prev, serverError: false }))
|
|
117
|
-
setShowTrace(prev => ({ ...prev, serverError: true }))
|
|
118
|
-
|
|
119
|
-
try {
|
|
120
|
-
await Sentry.startSpan(
|
|
121
|
-
{
|
|
122
|
-
name: 'Server Error Flow Demo',
|
|
123
|
-
op: 'demo.server-error-flow',
|
|
124
|
-
},
|
|
125
|
-
async () => {
|
|
126
|
-
Sentry.setContext("demo", {
|
|
127
|
-
feature: "server-error-demo",
|
|
128
|
-
triggered_at: new Date().toISOString()
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
await badServerFunc()
|
|
132
|
-
}
|
|
133
|
-
)
|
|
134
|
-
} catch (error) {
|
|
135
|
-
setHasError(prev => ({ ...prev, serverError: true }))
|
|
136
|
-
setSpanOps(prev => ({ ...prev, serverError: 'demo.server-error-flow' }))
|
|
137
|
-
Sentry.captureException(error)
|
|
138
|
-
} finally {
|
|
139
|
-
setIsLoading(prev => ({ ...prev, serverError: false }))
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
const handleClientTrace = async () => {
|
|
144
|
-
setIsLoading(prev => ({ ...prev, client: true }))
|
|
145
|
-
setShowTrace(prev => ({ ...prev, client: true }))
|
|
146
|
-
|
|
147
|
-
await Sentry.startSpan(
|
|
148
|
-
{
|
|
149
|
-
name: 'Client Operation',
|
|
150
|
-
op: 'demo.client',
|
|
151
|
-
},
|
|
152
|
-
async () => {
|
|
153
|
-
// Simulate some client-side work
|
|
154
|
-
await new Promise(resolve => setTimeout(resolve, 1000))
|
|
155
|
-
}
|
|
156
|
-
)
|
|
157
|
-
|
|
158
|
-
setSpanOps(prev => ({ ...prev, client: 'demo.client' }))
|
|
159
|
-
setIsLoading(prev => ({ ...prev, client: false }))
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
const handleServerTrace = async () => {
|
|
163
|
-
setIsLoading(prev => ({ ...prev, server: true }))
|
|
164
|
-
setShowTrace(prev => ({ ...prev, server: true }))
|
|
165
|
-
|
|
166
|
-
try {
|
|
167
|
-
await Sentry.startSpan(
|
|
168
|
-
{
|
|
169
|
-
name: 'Server Operation',
|
|
170
|
-
op: 'demo.server',
|
|
171
|
-
},
|
|
172
|
-
async () => {
|
|
173
|
-
await goodServerFunc()
|
|
174
|
-
}
|
|
175
|
-
)
|
|
176
|
-
setSpanOps(prev => ({ ...prev, server: 'demo.server' }))
|
|
177
|
-
} finally {
|
|
178
|
-
setIsLoading(prev => ({ ...prev, server: false }))
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
return (
|
|
183
|
-
<>
|
|
184
|
-
<style dangerouslySetInnerHTML={{
|
|
185
|
-
__html: `
|
|
186
|
-
@keyframes fadeOut {
|
|
187
|
-
from { opacity: 1; transform: translateY(0); }
|
|
188
|
-
to { opacity: 0; transform: translateY(-10px); }
|
|
189
|
-
}
|
|
190
|
-
.animate-fade-out {
|
|
191
|
-
animation: fadeOut 2s ease-out forwards;
|
|
192
|
-
}
|
|
193
|
-
`
|
|
194
|
-
}} />
|
|
195
|
-
<div className="min-h-[calc(100vh-32px)] text-white p-8" style={{
|
|
196
|
-
backgroundImage: 'radial-gradient(41.11% 49.93% at 50% 49.93%, #8d5494 0%, #563275 52.26%, #1f1633 100%)'
|
|
197
|
-
}}>
|
|
198
|
-
<div className="max-w-7xl mx-auto">
|
|
199
|
-
{/* Header */}
|
|
200
|
-
<div className="text-center mb-12">
|
|
201
|
-
<h1 className="text-8xl font-bold mb-4 text-white">
|
|
202
|
-
Sentry
|
|
203
|
-
</h1>
|
|
204
|
-
<p className="text-4xl font-semibold text-white">
|
|
205
|
-
Code <span className="inline-block -rotate-9">breaks</span>, fix it faster
|
|
206
|
-
</p>
|
|
207
|
-
</div>
|
|
208
|
-
|
|
209
|
-
{/* Content Grid */}
|
|
210
|
-
<div className="space-y-8">
|
|
211
|
-
{/* Information Section - Top */}
|
|
212
|
-
<div className="bg-[#1C2333] rounded-lg border border-gray-800 p-6">
|
|
213
|
-
<div className="space-y-4 text-gray-300">
|
|
214
|
-
<p>
|
|
215
|
-
The Sentry integration monitors this application across all routes; not just this one (we care about all tabs) using our <code>@sentry/react</code> and <code>@sentry/node</code> packages.
|
|
216
|
-
</p>
|
|
217
|
-
<div className="grid grid-cols-4 gap-4">
|
|
218
|
-
<div className="bg-[#2D3555] rounded-lg p-4 border border-gray-700 hover:border-purple-500/50 transition-colors">
|
|
219
|
-
<div className="font-bold mb-1">Error Monitoring</div>
|
|
220
|
-
<div className="text-sm text-gray-400">across client side and server functions</div>
|
|
221
|
-
</div>
|
|
222
|
-
<div className="bg-[#2D3555] rounded-lg p-4 border border-gray-700 hover:border-purple-500/50 transition-colors">
|
|
223
|
-
<div className="font-bold mb-1">Tracing and Spans</div>
|
|
224
|
-
<div className="text-sm text-gray-400">for client and server side performance</div>
|
|
225
|
-
</div>
|
|
226
|
-
<div className="bg-[#2D3555] rounded-lg p-4 border border-gray-700 hover:border-purple-500/50 transition-colors">
|
|
227
|
-
<div className="font-bold mb-1">Session replay</div>
|
|
228
|
-
<div className="text-sm text-gray-400">real user session playback</div>
|
|
229
|
-
</div>
|
|
230
|
-
<div className="bg-[#2D3555] rounded-lg p-4 border border-gray-700 hover:border-purple-500/50 transition-colors">
|
|
231
|
-
<div className="font-bold mb-1">Real-time alerts</div>
|
|
232
|
-
<div className="text-sm text-gray-400">because sleep is overrated anyway</div>
|
|
233
|
-
</div>
|
|
234
|
-
</div>
|
|
235
|
-
</div>
|
|
236
|
-
</div>
|
|
237
|
-
|
|
238
|
-
{/* Testing Sections - Bottom Grid */}
|
|
239
|
-
<div className="grid grid-cols-2 gap-8">
|
|
240
|
-
{/* Client Side Testing */}
|
|
241
|
-
<div className="bg-[#1C2333] rounded-lg p-6 border border-gray-800">
|
|
242
|
-
<h2 className="text-xl font-semibold text-white mb-6">Client-Side Testing</h2>
|
|
243
|
-
<div className="space-y-6">
|
|
244
|
-
<div>
|
|
245
|
-
<button
|
|
246
|
-
type="button"
|
|
247
|
-
onClick={() => {
|
|
248
|
-
setDemoStep(prev => prev + 1)
|
|
249
|
-
handleClientError()
|
|
250
|
-
}}
|
|
251
|
-
className="w-full text-white rounded-md p-4 relative overflow-hidden group"
|
|
252
|
-
style={{
|
|
253
|
-
background: 'linear-gradient(120deg, #c83852, #b44092 25%, #6a5fc1 50%, #452650 55%, #452650)',
|
|
254
|
-
backgroundPosition: '2% 0',
|
|
255
|
-
backgroundSize: '250% 100%'
|
|
256
|
-
}}
|
|
257
|
-
>
|
|
258
|
-
<div className="absolute inset-0 bg-gradient-to-r from-red-500/10 to-orange-500/10 opacity-0 group-hover:opacity-100 transition-opacity" />
|
|
259
|
-
<div className="relative">
|
|
260
|
-
<div className="flex items-center mb-2">
|
|
261
|
-
<span className="font-medium">Trigger Client-Side Error</span>
|
|
262
|
-
</div>
|
|
263
|
-
</div>
|
|
264
|
-
</button>
|
|
265
|
-
{hasError.clientError && (
|
|
266
|
-
<div className="mt-4 space-y-2">
|
|
267
|
-
<div className="bg-red-900/20 border border-red-500/50 rounded-lg p-2">
|
|
268
|
-
<div className="flex items-center text-red-400 text-sm">
|
|
269
|
-
<svg className="w-4 h-4 mr-2" fill="none" strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" viewBox="0 0 24 24" stroke="currentColor">
|
|
270
|
-
<title>Red Warning Sign</title>
|
|
271
|
-
<path d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
|
|
272
|
-
</svg>
|
|
273
|
-
Client-side error captured and traced
|
|
274
|
-
</div>
|
|
275
|
-
</div>
|
|
276
|
-
<div className="bg-purple-900/20 border border-purple-500/50 rounded-lg p-3">
|
|
277
|
-
<div className="flex items-center justify-between">
|
|
278
|
-
<div className="relative">
|
|
279
|
-
<button
|
|
280
|
-
type="button"
|
|
281
|
-
className={`inline-flex items-center bg-purple-900/40 px-3 py-1.5 rounded-lg border border-purple-500/50 cursor-pointer hover:bg-purple-900/60 transition-all ${copiedSpan === spanOps.clientError ? 'scale-95' : ''}`}
|
|
282
|
-
onClick={() => handleCopy(spanOps.clientError)}
|
|
283
|
-
title="Click to copy operation name"
|
|
284
|
-
>
|
|
285
|
-
<span className="text-purple-300 text-sm font-medium mr-2">span.op</span>
|
|
286
|
-
<code className="text-purple-400 text-sm font-mono">{spanOps.clientError}</code>
|
|
287
|
-
</button>
|
|
288
|
-
{copiedSpan === spanOps.clientError && (
|
|
289
|
-
<div className="absolute -top-8 left-1/2 -translate-x-1/2 bg-green-500/90 text-white text-xs px-2 py-1 rounded animate-fade-out">
|
|
290
|
-
Copied!
|
|
291
|
-
</div>
|
|
292
|
-
)}
|
|
293
|
-
</div>
|
|
294
|
-
</div>
|
|
295
|
-
</div>
|
|
296
|
-
</div>
|
|
297
|
-
)}
|
|
298
|
-
</div>
|
|
299
|
-
|
|
300
|
-
<div>
|
|
301
|
-
<button
|
|
302
|
-
type="button"
|
|
303
|
-
onClick={() => {
|
|
304
|
-
setDemoStep(prev => prev + 1)
|
|
305
|
-
handleClientTrace()
|
|
306
|
-
}}
|
|
307
|
-
className="w-full text-white rounded-md p-4 relative overflow-hidden group"
|
|
308
|
-
style={{
|
|
309
|
-
background: 'linear-gradient(120deg, #c83852, #b44092 25%, #6a5fc1 50%, #452650 55%, #452650)',
|
|
310
|
-
backgroundPosition: '2% 0',
|
|
311
|
-
backgroundSize: '250% 100%'
|
|
312
|
-
}}
|
|
313
|
-
>
|
|
314
|
-
<div className="absolute inset-0 bg-gradient-to-r from-blue-500/10 to-purple-500/10 opacity-0 group-hover:opacity-100 transition-opacity" />
|
|
315
|
-
<div className="relative">
|
|
316
|
-
<div className="flex items-center mb-2">
|
|
317
|
-
<span className="font-medium">Test Client-Side Span</span>
|
|
318
|
-
</div>
|
|
319
|
-
</div>
|
|
320
|
-
</button>
|
|
321
|
-
{showTrace.client && (
|
|
322
|
-
<div className="mt-4 space-y-2">
|
|
323
|
-
<div className="flex items-center">
|
|
324
|
-
<div className={`w-3 h-3 rounded-full ${isLoading.client ? 'bg-blue-500 animate-pulse' : 'bg-green-500'}`} />
|
|
325
|
-
<div className="ml-2 flex-1">
|
|
326
|
-
<div className="h-1.5 bg-[#2D3555] rounded">
|
|
327
|
-
<div
|
|
328
|
-
className="h-full bg-blue-500 rounded transition-all duration-500"
|
|
329
|
-
style={{ width: isLoading.client ? '60%' : '100%' }}
|
|
330
|
-
/>
|
|
331
|
-
</div>
|
|
332
|
-
</div>
|
|
333
|
-
</div>
|
|
334
|
-
{!isLoading.client && spanOps.client && (
|
|
335
|
-
<div className="bg-purple-900/20 border border-purple-500/50 rounded-lg p-3">
|
|
336
|
-
<div className="flex items-center justify-between">
|
|
337
|
-
<div className="relative">
|
|
338
|
-
<button
|
|
339
|
-
type="button"
|
|
340
|
-
className={`inline-flex items-center bg-purple-900/40 px-3 py-1.5 rounded-lg border border-purple-500/50 cursor-pointer hover:bg-purple-900/60 transition-all ${copiedSpan === spanOps.client ? 'scale-95' : ''}`}
|
|
341
|
-
onClick={() => handleCopy(spanOps.client)}
|
|
342
|
-
title="Click to copy operation name"
|
|
343
|
-
>
|
|
344
|
-
<span className="text-purple-300 text-sm font-medium mr-2">span.op</span>
|
|
345
|
-
<code className="text-purple-400 text-sm font-mono">{spanOps.client}</code>
|
|
346
|
-
</button>
|
|
347
|
-
{copiedSpan === spanOps.client && (
|
|
348
|
-
<div className="absolute -top-8 left-1/2 -translate-x-1/2 bg-green-500/90 text-white text-xs px-2 py-1 rounded animate-fade-out">
|
|
349
|
-
Copied!
|
|
350
|
-
</div>
|
|
351
|
-
)}
|
|
352
|
-
</div>
|
|
353
|
-
</div>
|
|
354
|
-
</div>
|
|
355
|
-
)}
|
|
356
|
-
</div>
|
|
357
|
-
)}
|
|
358
|
-
</div>
|
|
359
|
-
</div>
|
|
360
|
-
</div>
|
|
361
|
-
|
|
362
|
-
{/* Server Side Testing */}
|
|
363
|
-
<div className="bg-[#1C2333] rounded-lg p-6 border border-gray-800">
|
|
364
|
-
<h2 className="text-xl font-semibold text-white mb-6">Server-Side Testing</h2>
|
|
365
|
-
<div className="space-y-6">
|
|
366
|
-
<div>
|
|
367
|
-
<button
|
|
368
|
-
type="button"
|
|
369
|
-
onClick={() => {
|
|
370
|
-
setDemoStep(prev => prev + 1)
|
|
371
|
-
handleServerError()
|
|
372
|
-
}}
|
|
373
|
-
className="w-full text-white rounded-md p-4 relative overflow-hidden group"
|
|
374
|
-
style={{
|
|
375
|
-
background: 'linear-gradient(120deg, #c83852, #b44092 25%, #6a5fc1 50%, #452650 55%, #452650)',
|
|
376
|
-
backgroundPosition: '2% 0',
|
|
377
|
-
backgroundSize: '250% 100%'
|
|
378
|
-
}}
|
|
379
|
-
>
|
|
380
|
-
<div className="absolute inset-0 bg-gradient-to-r from-red-500/10 to-orange-500/10 opacity-0 group-hover:opacity-100 transition-opacity" />
|
|
381
|
-
<div className="relative">
|
|
382
|
-
<div className="flex items-center mb-2">
|
|
383
|
-
<span className="font-medium">Trigger Server Error</span>
|
|
384
|
-
</div>
|
|
385
|
-
</div>
|
|
386
|
-
</button>
|
|
387
|
-
{hasError.serverError && (
|
|
388
|
-
<div className="mt-4 space-y-2">
|
|
389
|
-
<div className="bg-red-900/20 border border-red-500/50 rounded-lg p-3">
|
|
390
|
-
<div className="flex items-center text-red-400 text-sm">
|
|
391
|
-
<svg className="w-4 h-4 mr-2" fill="none" strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" viewBox="0 0 24 24" stroke="currentColor">
|
|
392
|
-
<title>Red Warning Sign</title>
|
|
393
|
-
<path d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
|
|
394
|
-
</svg>
|
|
395
|
-
Server-side error captured and traced
|
|
396
|
-
</div>
|
|
397
|
-
</div>
|
|
398
|
-
<div className="bg-purple-900/20 border border-purple-500/50 rounded-lg p-3">
|
|
399
|
-
<div className="flex items-center justify-between">
|
|
400
|
-
<div className="relative">
|
|
401
|
-
<button
|
|
402
|
-
type="button"
|
|
403
|
-
className={`inline-flex items-center bg-purple-900/40 px-3 py-1.5 rounded-lg border border-purple-500/50 cursor-pointer hover:bg-purple-900/60 transition-all ${copiedSpan === spanOps.serverError ? 'scale-95' : ''}`}
|
|
404
|
-
onClick={() => handleCopy(spanOps.serverError)}
|
|
405
|
-
title="Click to copy operation name"
|
|
406
|
-
>
|
|
407
|
-
<span className="text-purple-300 text-sm font-medium mr-2">span.op</span>
|
|
408
|
-
<code className="text-purple-400 text-sm font-mono">{spanOps.serverError}</code>
|
|
409
|
-
</button>
|
|
410
|
-
{copiedSpan === spanOps.serverError && (
|
|
411
|
-
<div className="absolute -top-8 left-1/2 -translate-x-1/2 bg-green-500/90 text-white text-xs px-2 py-1 rounded animate-fade-out">
|
|
412
|
-
Copied!
|
|
413
|
-
</div>
|
|
414
|
-
)}
|
|
415
|
-
</div>
|
|
416
|
-
</div>
|
|
417
|
-
</div>
|
|
418
|
-
</div>
|
|
419
|
-
)}
|
|
420
|
-
</div>
|
|
421
|
-
|
|
422
|
-
<div>
|
|
423
|
-
<button
|
|
424
|
-
type="button"
|
|
425
|
-
onClick={() => {
|
|
426
|
-
setDemoStep(prev => prev + 1)
|
|
427
|
-
handleServerTrace()
|
|
428
|
-
}}
|
|
429
|
-
className="w-full text-white rounded-md p-4 relative overflow-hidden group"
|
|
430
|
-
style={{
|
|
431
|
-
background: 'linear-gradient(120deg, #c83852, #b44092 25%, #6a5fc1 50%, #452650 55%, #452650)',
|
|
432
|
-
backgroundPosition: '2% 0',
|
|
433
|
-
backgroundSize: '250% 100%'
|
|
434
|
-
}}
|
|
435
|
-
>
|
|
436
|
-
<div className="absolute inset-0 bg-gradient-to-r from-blue-500/10 to-purple-500/10 opacity-0 group-hover:opacity-100 transition-opacity" />
|
|
437
|
-
<div className="relative">
|
|
438
|
-
<div className="flex items-center mb-2">
|
|
439
|
-
<span className="font-medium">Test server Trace</span>
|
|
440
|
-
</div>
|
|
441
|
-
</div>
|
|
442
|
-
</button>
|
|
443
|
-
{showTrace.server && (
|
|
444
|
-
<div className="mt-4 space-y-2">
|
|
445
|
-
<div className="flex items-center">
|
|
446
|
-
<div className={`w-3 h-3 rounded-full ${isLoading.server ? 'bg-purple-500 animate-pulse' : 'bg-green-500'}`} />
|
|
447
|
-
<div className="ml-2 flex-1">
|
|
448
|
-
<div className="h-1.5 bg-[#2D3555] rounded">
|
|
449
|
-
<div
|
|
450
|
-
className="h-full bg-purple-500 rounded transition-all duration-500"
|
|
451
|
-
style={{ width: isLoading.server ? '60%' : '100%' }}
|
|
452
|
-
/>
|
|
453
|
-
</div>
|
|
454
|
-
</div>
|
|
455
|
-
</div>
|
|
456
|
-
{!isLoading.server && spanOps.server && (
|
|
457
|
-
<div className="bg-purple-900/20 border border-purple-500/50 rounded-lg p-3">
|
|
458
|
-
<div className="flex items-center justify-between">
|
|
459
|
-
<div className="relative">
|
|
460
|
-
<button
|
|
461
|
-
type="button"
|
|
462
|
-
className={`inline-flex items-center bg-purple-900/40 px-3 py-1.5 rounded-lg border border-purple-500/50 cursor-pointer hover:bg-purple-900/60 transition-all ${copiedSpan === spanOps.server ? 'scale-95' : ''}`}
|
|
463
|
-
onClick={() => handleCopy(spanOps.server)}
|
|
464
|
-
title="Click to copy operation name"
|
|
465
|
-
>
|
|
466
|
-
<span className="text-purple-300 text-sm font-medium mr-2">span.op</span>
|
|
467
|
-
<code className="text-purple-400 text-sm font-mono">{spanOps.server}</code>
|
|
468
|
-
</button>
|
|
469
|
-
{copiedSpan === spanOps.server && (
|
|
470
|
-
<div className="absolute -top-8 left-1/2 -translate-x-1/2 bg-green-500/90 text-white text-xs px-2 py-1 rounded animate-fade-out">
|
|
471
|
-
Copied!
|
|
472
|
-
</div>
|
|
473
|
-
)}
|
|
474
|
-
</div>
|
|
475
|
-
</div>
|
|
476
|
-
</div>
|
|
477
|
-
)}
|
|
478
|
-
</div>
|
|
479
|
-
)}
|
|
480
|
-
</div>
|
|
481
|
-
</div>
|
|
482
|
-
</div>
|
|
483
|
-
</div>
|
|
484
|
-
</div>
|
|
485
|
-
</div>
|
|
486
|
-
</div>
|
|
487
|
-
</>
|
|
488
|
-
)
|
|
489
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Sentry",
|
|
3
|
-
"phase": "setup",
|
|
4
|
-
"description": "Add Sentry for error monitoring, tracing, and session replays (requires Start).",
|
|
5
|
-
"link": "https://sentry.com/",
|
|
6
|
-
"templates": ["file-router", "code-router"],
|
|
7
|
-
"routes": [
|
|
8
|
-
{
|
|
9
|
-
"url": "/demo/sentry/testing",
|
|
10
|
-
"name": "Sentry"
|
|
11
|
-
}
|
|
12
|
-
],
|
|
13
|
-
"dependsOn": ["start"]
|
|
14
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://ui.shadcn.com/schema.json",
|
|
3
|
-
"style": "new-york",
|
|
4
|
-
"rsc": false,
|
|
5
|
-
"tsx": true,
|
|
6
|
-
"tailwind": {
|
|
7
|
-
"config": "",
|
|
8
|
-
"css": "src/styles.css",
|
|
9
|
-
"baseColor": "zinc",
|
|
10
|
-
"cssVariables": true,
|
|
11
|
-
"prefix": ""
|
|
12
|
-
},
|
|
13
|
-
"aliases": {
|
|
14
|
-
"components": "@/components",
|
|
15
|
-
"utils": "@/lib/utils",
|
|
16
|
-
"ui": "@/components/ui",
|
|
17
|
-
"lib": "@/lib",
|
|
18
|
-
"hooks": "@/hooks"
|
|
19
|
-
},
|
|
20
|
-
"iconLibrary": "lucide"
|
|
21
|
-
}
|