platforms.tsx 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699
  1. import sortBy from 'lodash/sortBy';
  2. import {t} from 'sentry/locale';
  3. import type {PlatformIntegration} from 'sentry/types';
  4. // TODO(arthur): clean up and use PlatformIntegration type here
  5. type Platform = {
  6. id: string;
  7. language: string;
  8. link: string;
  9. name: string;
  10. type: string;
  11. };
  12. const goPlatforms: Platform[] = [
  13. {
  14. id: 'go',
  15. link: 'https://docs.sentry.io/platforms/go/',
  16. name: 'Go',
  17. type: 'language',
  18. language: 'go',
  19. },
  20. {
  21. link: 'https://docs.sentry.io/platforms/go/guides/echo/',
  22. type: 'framework',
  23. id: 'go-echo',
  24. name: t('Echo'),
  25. language: 'go',
  26. },
  27. {
  28. link: 'https://docs.sentry.io/platforms/go/guides/fasthttp/',
  29. type: 'framework',
  30. id: 'go-fasthttp',
  31. name: t('FastHTTP'),
  32. language: 'go',
  33. },
  34. {
  35. link: 'https://docs.sentry.io/platforms/go/guides/gin/',
  36. type: 'framework',
  37. id: 'go-gin',
  38. name: t('Gin'),
  39. language: 'go',
  40. },
  41. {
  42. link: 'https://docs.sentry.io/platforms/go/guides/http/',
  43. type: 'framework',
  44. id: 'go-http',
  45. name: t('Net/Http'),
  46. language: 'go',
  47. },
  48. {
  49. link: 'https://docs.sentry.io/platforms/go/guides/iris',
  50. type: 'framework',
  51. id: 'go-iris',
  52. name: t('Iris'),
  53. language: 'go',
  54. },
  55. {
  56. link: 'https://docs.sentry.io/platforms/go/guides/martini/',
  57. type: 'framework',
  58. id: 'go-martini',
  59. name: t('Martini'),
  60. language: 'go',
  61. },
  62. {
  63. link: 'https://docs.sentry.io/platforms/go/guides/negroni/',
  64. type: 'framework',
  65. id: 'go-negroni',
  66. name: t('Negroni'),
  67. language: 'go',
  68. },
  69. ];
  70. const javaScriptPlatforms: Platform[] = [
  71. {
  72. id: 'javascript-angular',
  73. name: 'Angular',
  74. type: 'framework',
  75. language: 'javascript',
  76. link: 'https://docs.sentry.io/platforms/javascript/guides/angular/',
  77. },
  78. {
  79. id: 'javascript',
  80. name: 'Browser JavaScript',
  81. type: 'language',
  82. language: 'javascript',
  83. link: 'https://docs.sentry.io/platforms/javascript/',
  84. },
  85. {
  86. id: 'javascript-ember',
  87. name: 'Ember',
  88. type: 'framework',
  89. language: 'javascript',
  90. link: 'https://docs.sentry.io/platforms/javascript/guides/ember/',
  91. },
  92. {
  93. id: 'javascript-gatsby',
  94. name: 'Gatsby',
  95. type: 'framework',
  96. language: 'javascript',
  97. link: 'https://docs.sentry.io/platforms/javascript/guides/gatsby/',
  98. },
  99. {
  100. id: 'javascript-nextjs',
  101. name: 'Next.js',
  102. type: 'framework',
  103. language: 'javascript',
  104. link: 'https://docs.sentry.io/platforms/javascript/guides/nextjs/',
  105. },
  106. {
  107. id: 'javascript-react',
  108. name: 'React',
  109. type: 'framework',
  110. language: 'javascript',
  111. link: 'https://docs.sentry.io/platforms/javascript/guides/react/',
  112. },
  113. {
  114. id: 'javascript-remix',
  115. name: 'Remix',
  116. type: 'framework',
  117. language: 'javascript',
  118. link: 'https://docs.sentry.io/platforms/javascript/guides/remix/',
  119. },
  120. {
  121. id: 'javascript-svelte',
  122. name: 'Svelte',
  123. type: 'framework',
  124. language: 'javascript',
  125. link: 'https://docs.sentry.io/platforms/javascript/guides/svelte/',
  126. },
  127. {
  128. id: 'javascript-sveltekit',
  129. name: 'SvelteKit',
  130. type: 'framework',
  131. language: 'javascript',
  132. link: 'https://docs.sentry.io/platforms/javascript/guides/sveltekit/',
  133. },
  134. {
  135. id: 'javascript-vue',
  136. name: 'Vue',
  137. type: 'framework',
  138. language: 'javascript',
  139. link: 'https://docs.sentry.io/platforms/javascript/guides/vue/',
  140. },
  141. ];
  142. const javaPlatforms: Platform[] = [
  143. {
  144. id: 'java',
  145. name: 'Java',
  146. type: 'language',
  147. language: 'java',
  148. link: 'https://docs.sentry.io/platforms/java/',
  149. },
  150. {
  151. id: 'java-log4j2',
  152. name: 'Log4j 2.x',
  153. type: 'framework',
  154. language: 'java',
  155. link: 'https://docs.sentry.io/platforms/java/guides/log4j2/',
  156. },
  157. {
  158. id: 'java-logback',
  159. name: 'Logback',
  160. type: 'framework',
  161. language: 'java',
  162. link: 'https://docs.sentry.io/platforms/java/guides/logback/',
  163. },
  164. {
  165. id: 'java-spring',
  166. name: 'Spring',
  167. type: 'framework',
  168. language: 'java',
  169. link: 'https://https://docs.sentry.io/platforms/java/guides/spring/',
  170. },
  171. {
  172. id: 'java-spring-boot',
  173. name: 'Spring Boot',
  174. type: 'framework',
  175. language: 'java',
  176. link: 'https://docs.sentry.io/platforms/java/guides/spring-boot/',
  177. },
  178. ];
  179. const pythonPlatforms: Platform[] = [
  180. {
  181. id: 'python-aiohttp',
  182. name: 'AIOHTTP',
  183. type: 'framework',
  184. language: 'python',
  185. link: 'https://docs.sentry.io/platforms/python/guides/aiohttp/',
  186. },
  187. {
  188. id: 'python-asgi',
  189. name: 'ASGI',
  190. type: 'framework',
  191. language: 'python',
  192. link: 'https://docs.sentry.io/platforms/python/guides/asgi/',
  193. },
  194. {
  195. id: 'python-awslambda',
  196. name: 'AWS Lambda (Python)',
  197. type: 'framework',
  198. language: 'python',
  199. link: 'https://docs.sentry.io/platforms/python/guides/aws-lambda/',
  200. },
  201. {
  202. id: 'python-bottle',
  203. name: 'Bottle',
  204. type: 'framework',
  205. language: 'python',
  206. link: 'https://docs.sentry.io/platforms/python/guides/bottle/',
  207. },
  208. {
  209. id: 'python-celery',
  210. name: 'Celery',
  211. type: 'library',
  212. language: 'python',
  213. link: 'https://docs.sentry.io/platforms/python/guides/celery/',
  214. },
  215. {
  216. id: 'python-chalice',
  217. name: 'Chalice',
  218. type: 'framework',
  219. language: 'python',
  220. link: 'https://docs.sentry.io/platforms/python/guides/chalice/',
  221. },
  222. {
  223. id: 'python-django',
  224. name: 'Django',
  225. type: 'framework',
  226. language: 'python',
  227. link: 'https://docs.sentry.io/platforms/python/guides/django/',
  228. },
  229. {
  230. id: 'python-falcon',
  231. name: 'Falcon',
  232. type: 'framework',
  233. language: 'python',
  234. link: 'https://docs.sentry.io/platforms/python/guides/falcon/',
  235. },
  236. {
  237. id: 'python-fastapi',
  238. name: 'FastAPI',
  239. type: 'framework',
  240. language: 'python',
  241. link: 'https://docs.sentry.io/platforms/python/guides/fastapi/',
  242. },
  243. {
  244. id: 'python-flask',
  245. name: 'Flask',
  246. type: 'framework',
  247. language: 'python',
  248. link: 'https://docs.sentry.io/platforms/python/guides/flask/',
  249. },
  250. {
  251. id: 'python-gcpfunctions',
  252. name: 'Google Cloud Functions (Python)',
  253. type: 'framework',
  254. language: 'python',
  255. link: 'https://docs.sentry.io/platforms/python/guides/gcp-functions/',
  256. },
  257. {
  258. id: 'python-pymongo',
  259. name: 'PyMongo',
  260. type: 'library',
  261. language: 'python',
  262. link: 'https://docs.sentry.io/platforms/python/guides/pymongo/',
  263. },
  264. {
  265. id: 'python-pylons',
  266. name: 'Pylons',
  267. type: 'framework',
  268. language: 'python',
  269. link: 'https://docs.sentry.io/platforms/python/legacy-sdk/integrations/pylons/',
  270. },
  271. {
  272. id: 'python-pyramid',
  273. name: 'Pyramid',
  274. type: 'framework',
  275. language: 'python',
  276. link: 'https://docs.sentry.io/platforms/python/pyramid/',
  277. },
  278. {
  279. id: 'python',
  280. name: 'Python',
  281. type: 'language',
  282. language: 'python',
  283. link: 'https://docs.sentry.io/platforms/python/',
  284. },
  285. {
  286. id: 'python-quart',
  287. name: 'Quart',
  288. type: 'framework',
  289. language: 'python',
  290. link: 'https://docs.sentry.io/platforms/python/guides/quart/',
  291. },
  292. {
  293. id: 'python-rq',
  294. name: 'RQ (Redis Queue)',
  295. type: 'library',
  296. language: 'python',
  297. link: 'https://docs.sentry.io/platforms/python/guides/rq/',
  298. },
  299. {
  300. id: 'python-sanic',
  301. name: 'Sanic',
  302. type: 'framework',
  303. language: 'python',
  304. link: 'https://docs.sentry.io/platforms/python/guides/sanic/',
  305. },
  306. {
  307. id: 'python-serverless',
  308. name: 'Serverless',
  309. type: 'framework',
  310. language: 'python',
  311. link: 'https://docs.sentry.io/platforms/python/guides/serverless/',
  312. },
  313. {
  314. id: 'python-starlette',
  315. name: 'Starlette',
  316. type: 'framework',
  317. language: 'python',
  318. link: 'https://docs.sentry.io/platforms/python/guides/starlette/',
  319. },
  320. {
  321. id: 'python-tornado',
  322. name: 'Tornado',
  323. type: 'framework',
  324. language: 'python',
  325. link: 'https://docs.sentry.io/platforms/python/guides/tornado/',
  326. },
  327. {
  328. id: 'python-tryton',
  329. name: 'Tryton',
  330. type: 'framework',
  331. language: 'python',
  332. link: 'https://docs.sentry.io/platforms/python/guides/tryton/',
  333. },
  334. {
  335. id: 'python-wsgi',
  336. name: 'WSGI',
  337. type: 'framework',
  338. language: 'python',
  339. link: 'https://docs.sentry.io/platforms/python/guides/wsgi/',
  340. },
  341. ];
  342. const phpPlatforms: Platform[] = [
  343. {
  344. id: 'php-laravel',
  345. name: 'Laravel',
  346. type: 'framework',
  347. language: 'php',
  348. link: 'https://docs.sentry.io/platforms/php/guides/laravel/',
  349. },
  350. {
  351. id: 'php',
  352. name: 'PHP',
  353. type: 'language',
  354. language: 'php',
  355. link: 'https://docs.sentry.io/platforms/php/',
  356. },
  357. {
  358. id: 'php-symfony',
  359. name: 'Symfony',
  360. type: 'framework',
  361. language: 'php',
  362. link: 'https://docs.sentry.io/platforms/php/guides/symfony/',
  363. },
  364. ];
  365. const nodePlatforms: Platform[] = [
  366. {
  367. id: 'node-awslambda',
  368. name: 'AWS Lambda (Node)',
  369. type: 'framework',
  370. language: 'node',
  371. link: 'https://docs.sentry.io/platforms/node/guides/aws-lambda/',
  372. },
  373. {
  374. id: 'node-azurefunctions',
  375. name: 'Azure Functions (Node)',
  376. type: 'framework',
  377. language: 'node',
  378. link: 'https://docs.sentry.io/platforms/node/guides/azure-functions/',
  379. },
  380. {
  381. id: 'node-connect',
  382. name: 'Connect',
  383. type: 'framework',
  384. language: 'node',
  385. link: 'https://docs.sentry.io/platforms/node/guides/connect/',
  386. },
  387. {
  388. id: 'node-express',
  389. name: 'Express',
  390. type: 'framework',
  391. language: 'node',
  392. link: 'https://docs.sentry.io/platforms/node/guides/express/',
  393. },
  394. {
  395. id: 'node-gcpfunctions',
  396. name: 'Google Cloud Functions (Node)',
  397. type: 'framework',
  398. language: 'node',
  399. link: 'https://docs.sentry.io/platforms/node/guides/gcp-functions/',
  400. },
  401. {
  402. id: 'node-koa',
  403. name: 'Koa',
  404. type: 'framework',
  405. language: 'node',
  406. link: 'https://docs.sentry.io/platforms/node/guides/koa/',
  407. },
  408. {
  409. id: 'node',
  410. name: 'Node.js',
  411. type: 'language',
  412. language: 'node',
  413. link: 'https://docs.sentry.io/platforms/node/',
  414. },
  415. {
  416. id: 'node-serverlesscloud',
  417. name: 'Serverless (Node)',
  418. type: 'framework',
  419. language: 'node',
  420. link: 'https://docs.sentry.io/platforms/node/guides/serverless-cloud/',
  421. },
  422. ];
  423. const dotNetPlatforms: Platform[] = [
  424. {
  425. id: 'dotnet',
  426. name: '.NET',
  427. type: 'language',
  428. language: 'dotnet',
  429. link: 'https://docs.sentry.io/platforms/dotnet/',
  430. },
  431. {
  432. id: 'dotnet-aspnet',
  433. name: 'ASP.NET',
  434. type: 'framework',
  435. language: 'dotnet',
  436. link: 'https://docs.sentry.io/platforms/dotnet/guides/aspnet/',
  437. },
  438. {
  439. id: 'dotnet-aspnetcore',
  440. name: 'ASP.NET Core',
  441. type: 'framework',
  442. language: 'dotnet',
  443. link: 'https://docs.sentry.io/platforms/dotnet/guides/aspnetcore/',
  444. },
  445. {
  446. id: 'dotnet-awslambda',
  447. name: 'AWS Lambda (.NET)',
  448. type: 'framework',
  449. language: 'dotnet',
  450. link: 'https://docs.sentry.io/platforms/dotnet/guides/aws-lambda/',
  451. },
  452. {
  453. id: 'dotnet-gcpfunctions',
  454. name: 'Google Cloud Functions (.NET)',
  455. type: 'framework',
  456. language: 'dotnet',
  457. link: 'https://docs.sentry.io/platforms/dotnet/guides/google-cloud-functions/',
  458. },
  459. {
  460. id: 'dotnet-maui',
  461. name: 'Multi-platform App UI (MAUI)',
  462. type: 'framework',
  463. language: 'dotnet',
  464. link: 'https://docs.sentry.io/platforms/dotnet/guides/maui/',
  465. },
  466. {
  467. id: 'dotnet-uwp',
  468. name: 'UWP',
  469. type: 'framework',
  470. language: 'dotnet',
  471. link: 'https://docs.sentry.io/platforms/dotnet/guides/uwp/',
  472. },
  473. {
  474. id: 'dotnet-wpf',
  475. name: 'WPF',
  476. type: 'framework',
  477. language: 'dotnet',
  478. link: 'https://docs.sentry.io/platforms/dotnet/guides/wpf/',
  479. },
  480. {
  481. id: 'dotnet-winforms',
  482. name: 'Windows Forms',
  483. type: 'framework',
  484. language: 'dotnet',
  485. link: 'https://docs.sentry.io/platforms/dotnet/guides/winforms/',
  486. },
  487. {
  488. id: 'dotnet-xamarin',
  489. name: 'Xamarin',
  490. type: 'framework',
  491. language: 'dotnet',
  492. link: 'https://docs.sentry.io/platforms/dotnet/guides/xamarin/',
  493. },
  494. ];
  495. const applePlatforms: Platform[] = [
  496. {
  497. id: 'apple',
  498. name: 'Apple',
  499. type: 'language',
  500. language: 'apple',
  501. link: 'https://docs.sentry.io/platforms/apple/',
  502. },
  503. {
  504. id: 'apple-ios',
  505. name: 'iOS',
  506. type: 'language',
  507. language: 'apple',
  508. link: 'https://docs.sentry.io/platforms/apple/',
  509. },
  510. {
  511. id: 'apple-macos',
  512. name: 'macOS',
  513. type: 'language',
  514. language: 'apple',
  515. link: 'https://docs.sentry.io/platforms/apple/',
  516. },
  517. ];
  518. const rubyPlatforms: Platform[] = [
  519. {
  520. id: 'ruby-rack',
  521. name: 'Rack Middleware',
  522. type: 'framework',
  523. language: 'ruby',
  524. link: 'https://docs.sentry.io/platforms/ruby/guides/rack/',
  525. },
  526. {
  527. id: 'ruby-rails',
  528. name: 'Rails',
  529. type: 'framework',
  530. language: 'ruby',
  531. link: 'https://docs.sentry.io/platforms/ruby/guides/rails/',
  532. },
  533. {
  534. id: 'ruby',
  535. name: 'Ruby',
  536. type: 'language',
  537. language: 'ruby',
  538. link: 'https://docs.sentry.io/platforms/ruby/',
  539. },
  540. ];
  541. const nativePlatforms: Platform[] = [
  542. {
  543. id: 'native',
  544. name: 'Native',
  545. type: 'language',
  546. language: 'native',
  547. link: 'https://docs.sentry.io/platforms/native/',
  548. },
  549. {
  550. id: 'native-qt',
  551. name: 'Qt',
  552. type: 'framework',
  553. language: 'native',
  554. link: 'https://docs.sentry.io/platforms/native/guides/qt/',
  555. },
  556. ];
  557. const miscPlatforms: Platform[] = [
  558. {
  559. id: 'android',
  560. name: 'Android',
  561. type: 'framework',
  562. language: 'android',
  563. link: 'https://docs.sentry.io/platforms/android/',
  564. },
  565. {
  566. id: 'capacitor',
  567. name: 'Capacitor',
  568. type: 'framework',
  569. language: 'capacitor',
  570. link: 'https://docs.sentry.io/platforms/javascript/guides/capacitor/',
  571. },
  572. {
  573. id: 'cordova',
  574. name: 'Cordova',
  575. type: 'language',
  576. language: 'cordova',
  577. link: 'https://docs.sentry.io/platforms/javascript/guides/cordova/',
  578. },
  579. {
  580. id: 'dart',
  581. name: 'Dart',
  582. type: 'framework',
  583. language: 'dart',
  584. link: 'https://docs.sentry.io/platforms/dart/',
  585. },
  586. {
  587. id: 'electron',
  588. name: 'Electron',
  589. type: 'language',
  590. language: 'electron',
  591. link: 'https://docs.sentry.io/platforms/javascript/guides/electron/',
  592. },
  593. {
  594. id: 'elixir',
  595. name: 'Elixir',
  596. type: 'language',
  597. language: 'elixir',
  598. link: 'https://docs.sentry.io/platforms/elixir/',
  599. },
  600. {
  601. id: 'flutter',
  602. name: 'Flutter',
  603. type: 'framework',
  604. language: 'flutter',
  605. link: 'https://docs.sentry.io/platforms/flutter/',
  606. },
  607. {
  608. id: 'ionic',
  609. name: 'Ionic',
  610. type: 'framework',
  611. language: 'ionic',
  612. link: 'https://docs.sentry.io/platforms/javascript/guides/capacitor/',
  613. },
  614. {
  615. id: 'kotlin',
  616. name: 'Kotlin',
  617. type: 'language',
  618. language: 'kotlin',
  619. link: 'https://docs.sentry.io/platforms/kotlin/',
  620. },
  621. {
  622. id: 'minidump',
  623. name: 'Minidump',
  624. type: 'framework',
  625. language: 'minidump',
  626. link: 'https://docs.sentry.io/platforms/native/minidump/',
  627. },
  628. {
  629. id: 'rust',
  630. name: 'Rust',
  631. type: 'language',
  632. language: 'rust',
  633. link: 'https://docs.sentry.io/platforms/rust/',
  634. },
  635. {
  636. id: 'unity',
  637. name: 'Unity',
  638. type: 'framework',
  639. language: 'unity',
  640. link: 'https://docs.sentry.io/platforms/unity/',
  641. },
  642. {
  643. id: 'unreal',
  644. name: 'Unreal Engine',
  645. type: 'framework',
  646. language: 'unreal',
  647. link: 'https://docs.sentry.io/platforms/unreal/',
  648. },
  649. {
  650. id: 'react-native',
  651. name: 'React Native',
  652. type: 'language',
  653. language: 'react-native',
  654. link: 'https://docs.sentry.io/platforms/react-native/',
  655. },
  656. ];
  657. export const otherPlatform: PlatformIntegration = {
  658. id: 'other',
  659. name: 'Other',
  660. type: 'language',
  661. language: 'other',
  662. link: 'https://docs.sentry.io/platforms/',
  663. };
  664. // If you update items of this list, please remember to update the "GETTING_STARTED_DOCS_PLATFORMS" list
  665. // in the 'src/sentry/models/project.py' file. This way, they'll work together correctly.
  666. // Otherwise, creating a project will cause an error in the backend, saying "Invalid platform".
  667. const allPlatforms = [
  668. ...javaScriptPlatforms,
  669. ...nodePlatforms,
  670. ...dotNetPlatforms,
  671. ...applePlatforms,
  672. ...javaPlatforms,
  673. ...pythonPlatforms,
  674. ...phpPlatforms,
  675. ...goPlatforms,
  676. ...rubyPlatforms,
  677. ...nativePlatforms,
  678. ...miscPlatforms,
  679. otherPlatform,
  680. ];
  681. const platforms = sortBy(allPlatforms, 'id') as PlatformIntegration[];
  682. export default platforms;