onerror_page.mustache 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <style>
  7. /* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript&plugins=line-highlight+line-numbers+toolbar+show-language */
  8. /**
  9. * prism.js default theme for JavaScript, CSS and HTML
  10. * Based on dabblet (http://dabblet.com)
  11. * @author Lea Verou
  12. */
  13. code[class*="language-"],
  14. pre[class*="language-"] {
  15. color: black;
  16. background: none;
  17. text-shadow: 0 1px white;
  18. font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
  19. text-align: left;
  20. white-space: pre;
  21. word-spacing: normal;
  22. word-break: normal;
  23. word-wrap: normal;
  24. line-height: 1.5;
  25. -moz-tab-size: 4;
  26. -o-tab-size: 4;
  27. tab-size: 4;
  28. -webkit-hyphens: none;
  29. -moz-hyphens: none;
  30. -ms-hyphens: none;
  31. hyphens: none;
  32. }
  33. pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
  34. code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
  35. text-shadow: none;
  36. background: #98d8b7;
  37. }
  38. pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
  39. code[class*="language-"]::selection, code[class*="language-"] ::selection {
  40. text-shadow: none;
  41. background: #98d8b7;
  42. }
  43. @media print {
  44. code[class*="language-"],
  45. pre[class*="language-"] {
  46. text-shadow: none;
  47. }
  48. }
  49. /* Code blocks */
  50. pre[class*="language-"] {
  51. padding: 1em;
  52. margin: .5em 0;
  53. overflow: auto;
  54. }
  55. :not(pre) > code[class*="language-"],
  56. pre[class*="language-"] {
  57. background: #f5f2f0;
  58. }
  59. /* Inline code */
  60. :not(pre) > code[class*="language-"] {
  61. padding: .1em;
  62. border-radius: .3em;
  63. white-space: normal;
  64. }
  65. .token.comment,
  66. .token.prolog,
  67. .token.doctype,
  68. .token.cdata {
  69. color: slategray;
  70. }
  71. .token.punctuation {
  72. color: #999;
  73. }
  74. .namespace {
  75. opacity: .7;
  76. }
  77. .token.property,
  78. .token.tag,
  79. .token.boolean,
  80. .token.number,
  81. .token.constant,
  82. .token.symbol,
  83. .token.deleted {
  84. color: #905;
  85. }
  86. .token.selector,
  87. .token.attr-name,
  88. .token.string,
  89. .token.char,
  90. .token.builtin,
  91. .token.inserted {
  92. color: #690;
  93. }
  94. .token.operator,
  95. .token.entity,
  96. .token.url,
  97. .language-css .token.string,
  98. .style .token.string {
  99. color: #a67f59;
  100. background: hsla(0, 0%, 100%, .5);
  101. }
  102. .token.atrule,
  103. .token.attr-value,
  104. .token.keyword {
  105. color: #07a;
  106. }
  107. .token.function {
  108. color: #DD4A68;
  109. }
  110. .token.regex,
  111. .token.important,
  112. .token.variable {
  113. color: #e90;
  114. }
  115. .token.important,
  116. .token.bold {
  117. font-weight: bold;
  118. }
  119. .token.italic {
  120. font-style: italic;
  121. }
  122. .token.entity {
  123. cursor: help;
  124. }
  125. pre[data-line] {
  126. position: relative;
  127. padding: 1em 0 1em 3em;
  128. }
  129. .line-highlight {
  130. position: absolute;
  131. left: 0;
  132. right: 0;
  133. padding: inherit 0;
  134. margin-top: 1em; /* Same as .prism’s padding-top */
  135. background: hsla(24, 20%, 50%,.08);
  136. background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0));
  137. pointer-events: none;
  138. line-height: inherit;
  139. white-space: pre;
  140. }
  141. .line-highlight:before,
  142. .line-highlight[data-end]:after {
  143. content: attr(data-start);
  144. position: absolute;
  145. top: .4em;
  146. left: .6em;
  147. min-width: 1em;
  148. padding: 0 .5em;
  149. background-color: hsla(24, 20%, 50%,.4);
  150. color: hsl(24, 20%, 95%);
  151. font: bold 65%/1.5 sans-serif;
  152. text-align: center;
  153. vertical-align: .3em;
  154. border-radius: 999px;
  155. text-shadow: none;
  156. box-shadow: 0 1px white;
  157. }
  158. .line-highlight[data-end]:after {
  159. content: attr(data-end);
  160. top: auto;
  161. bottom: .4em;
  162. }
  163. pre.line-numbers {
  164. position: relative;
  165. padding-left: 3.8em;
  166. counter-reset: linenumber;
  167. }
  168. pre.line-numbers > code {
  169. position: relative;
  170. }
  171. .line-numbers .line-numbers-rows {
  172. position: absolute;
  173. pointer-events: none;
  174. top: 0;
  175. font-size: 100%;
  176. left: -3.8em;
  177. width: 3em; /* works for line-numbers below 1000 lines */
  178. letter-spacing: -1px;
  179. border-right: 1px solid #999;
  180. -webkit-user-select: none;
  181. -moz-user-select: none;
  182. -ms-user-select: none;
  183. user-select: none;
  184. }
  185. .line-numbers-rows > span {
  186. pointer-events: none;
  187. display: block;
  188. counter-increment: linenumber;
  189. }
  190. .line-numbers-rows > span:before {
  191. content: counter(linenumber);
  192. color: #999;
  193. display: block;
  194. padding-right: 0.8em;
  195. text-align: right;
  196. }
  197. pre.code-toolbar {
  198. position: relative;
  199. }
  200. pre.code-toolbar > .toolbar {
  201. position: absolute;
  202. top: .3em;
  203. right: .2em;
  204. transition: opacity 0.3s ease-in-out;
  205. opacity: 0;
  206. }
  207. pre.code-toolbar:hover > .toolbar {
  208. opacity: 1;
  209. }
  210. pre.code-toolbar > .toolbar .toolbar-item {
  211. display: inline-block;
  212. }
  213. pre.code-toolbar > .toolbar a {
  214. cursor: pointer;
  215. }
  216. pre.code-toolbar > .toolbar button {
  217. background: none;
  218. border: 0;
  219. color: inherit;
  220. font: inherit;
  221. line-height: normal;
  222. overflow: visible;
  223. padding: 0;
  224. -webkit-user-select: none; /* for button */
  225. -moz-user-select: none;
  226. -ms-user-select: none;
  227. }
  228. pre.code-toolbar > .toolbar a,
  229. pre.code-toolbar > .toolbar button,
  230. pre.code-toolbar > .toolbar span {
  231. color: #bbb;
  232. font-size: .8em;
  233. padding: 0 .5em;
  234. background: #f5f2f0;
  235. background: rgba(224, 224, 224, 0.2);
  236. box-shadow: 0 2px 0 0 rgba(0,0,0,0.2);
  237. border-radius: .5em;
  238. }
  239. pre.code-toolbar > .toolbar a:hover,
  240. pre.code-toolbar > .toolbar a:focus,
  241. pre.code-toolbar > .toolbar button:hover,
  242. pre.code-toolbar > .toolbar button:focus,
  243. pre.code-toolbar > .toolbar span:hover,
  244. pre.code-toolbar > .toolbar span:focus {
  245. color: inherit;
  246. text-decoration: none;
  247. }
  248. </style>
  249. <style>
  250. @keyframes hover-color {
  251. from {
  252. border-color: #c0c0c0; }
  253. to {
  254. border-color: #53b783; } }
  255. .magic-radio,
  256. .magic-checkbox {
  257. position: absolute;
  258. display: none; }
  259. .magic-radio[disabled],
  260. .magic-checkbox[disabled] {
  261. cursor: not-allowed; }
  262. .magic-radio + label,
  263. .magic-checkbox + label {
  264. position: relative;
  265. display: block;
  266. padding-left: 30px;
  267. cursor: pointer;
  268. vertical-align: middle; }
  269. .magic-radio + label:hover:before,
  270. .magic-checkbox + label:hover:before {
  271. animation-duration: 0.4s;
  272. animation-fill-mode: both;
  273. animation-name: hover-color; }
  274. .magic-radio + label:before,
  275. .magic-checkbox + label:before {
  276. position: absolute;
  277. top: 0;
  278. left: 0;
  279. display: inline-block;
  280. width: 20px;
  281. height: 20px;
  282. content: '';
  283. border: 1px solid #c0c0c0; }
  284. .magic-radio + label:after,
  285. .magic-checkbox + label:after {
  286. position: absolute;
  287. display: none;
  288. content: ''; }
  289. .magic-radio[disabled] + label,
  290. .magic-checkbox[disabled] + label {
  291. cursor: not-allowed;
  292. color: #e4e4e4; }
  293. .magic-radio[disabled] + label:hover, .magic-radio[disabled] + label:before, .magic-radio[disabled] + label:after,
  294. .magic-checkbox[disabled] + label:hover,
  295. .magic-checkbox[disabled] + label:before,
  296. .magic-checkbox[disabled] + label:after {
  297. cursor: not-allowed; }
  298. .magic-radio[disabled] + label:hover:before,
  299. .magic-checkbox[disabled] + label:hover:before {
  300. border: 1px solid #e4e4e4;
  301. animation-name: none; }
  302. .magic-radio[disabled] + label:before,
  303. .magic-checkbox[disabled] + label:before {
  304. border-color: #e4e4e4; }
  305. .magic-radio:checked + label:before,
  306. .magic-checkbox:checked + label:before {
  307. animation-name: none; }
  308. .magic-radio:checked + label:after,
  309. .magic-checkbox:checked + label:after {
  310. display: block; }
  311. .magic-radio + label:before {
  312. border-radius: 50%; }
  313. .magic-radio + label:after {
  314. top: 6px;
  315. left: 6px;
  316. width: 8px;
  317. height: 8px;
  318. border-radius: 50%;
  319. background: #53b783; }
  320. .magic-radio:checked + label:before {
  321. border: 1px solid #53b783; }
  322. .magic-radio:checked[disabled] + label:before {
  323. border: 1px solid #c9e2f9; }
  324. .magic-radio:checked[disabled] + label:after {
  325. background: #c9e2f9; }
  326. .magic-checkbox + label:before {
  327. border-radius: 3px; }
  328. .magic-checkbox + label:after {
  329. top: 2px;
  330. left: 7px;
  331. box-sizing: border-box;
  332. width: 6px;
  333. height: 12px;
  334. transform: rotate(45deg);
  335. border-width: 2px;
  336. border-style: solid;
  337. border-color: #fff;
  338. border-top: 0;
  339. border-left: 0; }
  340. .magic-checkbox:checked + label:before {
  341. border: #53b783;
  342. background: #53b783; }
  343. .magic-checkbox:checked[disabled] + label:before {
  344. border: #c9e2f9;
  345. background: #c9e2f9; }
  346. </style>
  347. <style>
  348. html, body {
  349. height: 100%;
  350. width: 100%;
  351. -webkit-font-smoothing: antialiased;
  352. -moz-osx-font-smoothing: grayscale;
  353. }
  354. body {
  355. font-family: Helvetica Neue For Number,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;
  356. font-size: 14px;
  357. line-height: 24px;
  358. color: #444;
  359. }
  360. * {
  361. padding: 0;
  362. margin: 0;
  363. }
  364. ::selection {
  365. text-shadow: none;
  366. color: #fff;
  367. background: #98d8b7;
  368. }
  369. ::-moz-selection {
  370. text-shadow: none;
  371. color: #fff;
  372. background: #98d8b7;
  373. }
  374. .error-page {
  375. display: flex;
  376. flex-direction: column;
  377. width: 100%;
  378. height: 100%;
  379. }
  380. .error-logo {
  381. position: absolute;
  382. top: -15px;
  383. right: 0px;
  384. }
  385. .error-stack {
  386. background: #f1f1f1;
  387. padding: 140px 80px 40px;
  388. box-sizing: border-box;
  389. border-bottom: 1px solid #e2e2e2;
  390. }
  391. .error-status {
  392. color: #afafaf;
  393. font-size: 150px;
  394. position: absolute;
  395. opacity: 0.2;
  396. left: 76px;
  397. top: 80px;
  398. font-weight: 600;
  399. margin-bottom: 10px;
  400. }
  401. .error-name {
  402. color: #db5461;
  403. font-size: 18px;
  404. font-family: menlo, 'sans-serif';
  405. font-weight: 300;
  406. margin-bottom: 15px;
  407. }
  408. .error-title {
  409. border-bottom: 1px solid #e0e0e0;
  410. padding-bottom: 26px;
  411. margin-bottom: 20px;
  412. margin-top: 48px;
  413. }
  414. .error-title .box {
  415. color: #db5461;
  416. font-weight: 700;
  417. font-size: 20px;
  418. margin-left: 5px;
  419. }
  420. .error-title .context {
  421. color: #db5461;
  422. font-weight: 400;
  423. margin-left: 5px;
  424. margin-top: 48px;
  425. line-height: 1.5;
  426. }
  427. .error-frames {
  428. display: flex;
  429. flex-direction: row-reverse;
  430. margin-top: 40px;
  431. }
  432. .frame-preview {
  433. background: #fff;
  434. width: 50%;
  435. box-shadow: 0px 0px 9px #d3d3d3;
  436. height: 100%;
  437. box-sizing: border-box;
  438. overflow: auto;
  439. }
  440. .frame-stack {
  441. margin-right: 40px;
  442. flex: 1;
  443. padding: 10px 0;
  444. box-sizing: border-box;
  445. }
  446. .frames-list {
  447. overflow: auto;
  448. max-height: 334px;
  449. }
  450. .frames-filter-selector {
  451. margin-bottom: 30px;
  452. margin-left: 8px;
  453. }
  454. .request-details {
  455. padding: 50px 80px;
  456. }
  457. .request-title {
  458. text-transform: uppercase;
  459. font-size: 18px;
  460. letter-spacing: 1px;
  461. padding: 0 5px 5px 5px;
  462. margin-bottom: 15px;
  463. color: #53b783;
  464. }
  465. .request-details .table {
  466. width: 100%;
  467. border-collapse: collapse;
  468. margin-bottom: 80px;
  469. }
  470. .request-details .tr {
  471. display: flex;
  472. flex-direction: row;
  473. }
  474. .request-details .tr:nth-of-type(even) {
  475. background: #fbfbfb;
  476. }
  477. .request-details .table .td {
  478. padding: 6px 5px;
  479. font-size: 14px;
  480. letter-spacing: 0.4px;
  481. color: #455275;
  482. border-bottom: 1px solid #e8e8e8;
  483. word-break: break-word;
  484. }
  485. .request-details .table .td.title {
  486. flex: 1;
  487. color: #565655;
  488. font-size: 14px;
  489. font-weight: 600;
  490. }
  491. .request-details .table .td.content {
  492. width: 70%;
  493. }
  494. .request-details .table .td.content.code {
  495. background: #fff;
  496. width: 70%;
  497. box-shadow: 0px 0px 9px #d3d3d3;
  498. height: 100%;
  499. box-sizing: border-box;
  500. overflow: auto;
  501. }
  502. code[class*="language-"], pre[class*="language-"] {
  503. background: transparent;
  504. font-size: 13px;
  505. line-height: 1.8;
  506. }
  507. .line-numbers .line-numbers-rows {
  508. border: none;
  509. }
  510. .frame-row {
  511. display: flex;
  512. justify-content: space-between;
  513. padding: 6px 10px 6px 34px;
  514. position: relative;
  515. cursor: pointer;
  516. transition: background 300ms ease;
  517. }
  518. .frame-row.native-frame {
  519. display: none;
  520. opacity: 0.4;
  521. }
  522. .frame-row.native-frame.force-show {
  523. display: flex;
  524. }
  525. .frame-row:after {
  526. content: "";
  527. background: #db5461;
  528. position: absolute;
  529. top: 50%;
  530. left: 10px;
  531. transform: translateY(-50%);
  532. height: 10px;
  533. width: 10px;
  534. border-radius: 24px;
  535. }
  536. .frame-row:hover, .frame-row.active {
  537. background: #fff;
  538. }
  539. .frame-row.active {
  540. opacity: 1;
  541. }
  542. .frame-row-filepath {
  543. color: #455275;
  544. font-weight: 600;
  545. margin-right: 15px;
  546. }
  547. .frame-context {
  548. display: none;
  549. }
  550. .frame-row-code {
  551. color: #999;
  552. }
  553. #frame-file {
  554. color: #455275;
  555. font-weight: 600;
  556. border-bottom: 1px solid #e8e8e8;
  557. padding: 10px 22px;
  558. }
  559. #frame-method {
  560. color: #999;
  561. font-weight: 400;
  562. border-top: 1px solid #e8e8e8;
  563. padding: 10px 22px;
  564. }
  565. .is-hidden {
  566. display: none;
  567. }
  568. </style>
  569. </head>
  570. <body>
  571. <section class="error-page">
  572. <section class="error-stack">
  573. <h3 class="error-status">{{ status }}</h3>
  574. <div class="error-title">
  575. <h1 class="box">{{ name }} in {{ request.url }}</h1>
  576. <div class="context">{{ message }}</div>
  577. </div>
  578. <img class="error-logo" src="https://zos.alipayobjects.com/rmsportal/JFKAMfmPehWfhBPdCjrw.svg"/>
  579. <div class="error-frames">
  580. <div class="frame-preview is-hidden">
  581. <div id="frame-file"></div>
  582. <div id="frame-code"><pre class="line-numbers"><code id="code-drop"></code></pre></div>
  583. <div id="frame-method"></div>
  584. </div>
  585. <div class="frame-stack">
  586. <div class="frames-filter-selector">
  587. <input type="checkbox" class="magic-checkbox" name="frames-filter" id="frames-filter">
  588. <label for="frames-filter">Show all frames</label>
  589. </div>
  590. <div class="frames-list">
  591. {{#frames}}
  592. {{index}}
  593. <div class="frame-row {{classes}}">
  594. <div class="frame-row-filepath">
  595. {{ file }}:{{ line }}:{{ column }}
  596. </div>
  597. <div class="frame-row-code">
  598. {{ method }}
  599. </div>
  600. <div class="frame-context"
  601. data-start="{{context.start}}"
  602. data-line="{{line}}"
  603. data-file="{{file}}"
  604. data-method="{{method}}"
  605. data-extname="{{extname}}"
  606. data-line-column="{{line}}:{{column}}"
  607. >{{ context.pre }}
  608. {{ context.line }}
  609. {{ context.post }}
  610. </div>
  611. </div>
  612. {{/frames}}
  613. </div>
  614. </div>
  615. </div>
  616. </section>
  617. <section class="request-details">
  618. <h2 class="request-title"> Request Details </h2>
  619. <div class="table">
  620. <div class="tr">
  621. <div class="td title"> URI </div>
  622. <div class="td content">{{ request.url }}</div>
  623. </div>
  624. <div class="tr">
  625. <div class="td title"> Request Method </div>
  626. <div class="td content">{{ request.method }}</div>
  627. </div>
  628. <div class="tr">
  629. <div class="td title"> HTTP Version </div>
  630. <div class="td content">{{ request.httpVersion }}</div>
  631. </div>
  632. <div class="tr">
  633. <div class="td title"> Connection </div>
  634. <div class="td content">{{ request.connection }}</div>
  635. </div>
  636. </div>
  637. <h2 class="request-title"> Headers </h2>
  638. <div class="table">
  639. {{#request.headers}}
  640. <div class="tr">
  641. <div class="td title">{{ key }}</div>
  642. <div class="td content">{{ value }}</div>
  643. </div>
  644. {{/request.headers}}
  645. </div>
  646. <h2 class="request-title"> Cookies </h2>
  647. <div class="table">
  648. {{#request.cookies}}
  649. <div class="tr">
  650. <div class="td title">{{ key }}</div>
  651. <div class="td content">{{ value }}</div>
  652. </div>
  653. {{/request.cookies}}
  654. </div>
  655. <h2 class="request-title"> AppInfo </h2>
  656. <div class="table">
  657. <div class="tr">
  658. <div class="td title"> baseDir </div>
  659. <div class="td content">{{ appInfo.baseDir }}</div>
  660. </div>
  661. <div class="tr">
  662. <div class="td title"> config </div>
  663. <div class="td content code">
  664. <pre class="line-numbers"><code class="language-json">{{ appInfo.config }}</code></pre>
  665. </div>
  666. </div>
  667. </<div>
  668. </section>
  669. <script type="text/javascript">
  670. var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(\w+)\b/i,t=0,n=_self.Prism={util:{encode:function(e){return e instanceof a?new a(e.type,n.util.encode(e.content),e.alias):"Array"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function(e){var t=n.util.type(e);switch(t){case"Object":var a={};for(var r in e)e.hasOwnProperty(r)&&(a[r]=n.util.clone(e[r]));return a;case"Array":return e.map&&e.map(function(e){return n.util.clone(e)})}return e}},languages:{extend:function(e,t){var a=n.util.clone(n.languages[e]);for(var r in t)a[r]=t[r];return a},insertBefore:function(e,t,a,r){r=r||n.languages;var i=r[e];if(2==arguments.length){a=arguments[1];for(var l in a)a.hasOwnProperty(l)&&(i[l]=a[l]);return i}var o={};for(var s in i)if(i.hasOwnProperty(s)){if(s==t)for(var l in a)a.hasOwnProperty(l)&&(o[l]=a[l]);o[s]=i[s]}return n.languages.DFS(n.languages,function(t,n){n===r[e]&&t!=e&&(this[t]=o)}),r[e]=o},DFS:function(e,t,a,r){r=r||{};for(var i in e)e.hasOwnProperty(i)&&(t.call(e,i,e[i],a||i),"Object"!==n.util.type(e[i])||r[n.util.objId(e[i])]?"Array"!==n.util.type(e[i])||r[n.util.objId(e[i])]||(r[n.util.objId(e[i])]=!0,n.languages.DFS(e[i],t,i,r)):(r[n.util.objId(e[i])]=!0,n.languages.DFS(e[i],t,null,r)))}},plugins:{},highlightAll:function(e,t){var a={callback:t,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};n.hooks.run("before-highlightall",a);for(var r,i=a.elements||document.querySelectorAll(a.selector),l=0;r=i[l++];)n.highlightElement(r,e===!0,a.callback)},highlightElement:function(t,a,r){for(var i,l,o=t;o&&!e.test(o.className);)o=o.parentNode;o&&(i=(o.className.match(e)||[,""])[1].toLowerCase(),l=n.languages[i]),t.className=t.className.replace(e,"").replace(/\s+/g," ")+" language-"+i,o=t.parentNode,/pre/i.test(o.nodeName)&&(o.className=o.className.replace(e,"").replace(/\s+/g," ")+" language-"+i);var s=t.textContent,u={element:t,language:i,grammar:l,code:s};if(n.hooks.run("before-sanity-check",u),!u.code||!u.grammar)return u.code&&(u.element.textContent=u.code),n.hooks.run("complete",u),void 0;if(n.hooks.run("before-highlight",u),a&&_self.Worker){var g=new Worker(n.filename);g.onmessage=function(e){u.highlightedCode=e.data,n.hooks.run("before-insert",u),u.element.innerHTML=u.highlightedCode,r&&r.call(u.element),n.hooks.run("after-highlight",u),n.hooks.run("complete",u)},g.postMessage(JSON.stringify({language:u.language,code:u.code,immediateClose:!0}))}else u.highlightedCode=n.highlight(u.code,u.grammar,u.language),n.hooks.run("before-insert",u),u.element.innerHTML=u.highlightedCode,r&&r.call(t),n.hooks.run("after-highlight",u),n.hooks.run("complete",u)},highlight:function(e,t,r){var i=n.tokenize(e,t);return a.stringify(n.util.encode(i),r)},tokenize:function(e,t){var a=n.Token,r=[e],i=t.rest;if(i){for(var l in i)t[l]=i[l];delete t.rest}e:for(var l in t)if(t.hasOwnProperty(l)&&t[l]){var o=t[l];o="Array"===n.util.type(o)?o:[o];for(var s=0;s<o.length;++s){var u=o[s],g=u.inside,c=!!u.lookbehind,h=!!u.greedy,f=0,d=u.alias;if(h&&!u.pattern.global){var p=u.pattern.toString().match(/[imuy]*$/)[0];u.pattern=RegExp(u.pattern.source,p+"g")}u=u.pattern||u;for(var m=0,y=0;m<r.length;y+=r[m].length,++m){var v=r[m];if(r.length>e.length)break e;if(!(v instanceof a)){u.lastIndex=0;var b=u.exec(v),k=1;if(!b&&h&&m!=r.length-1){if(u.lastIndex=y,b=u.exec(e),!b)break;for(var w=b.index+(c?b[1].length:0),_=b.index+b[0].length,A=m,P=y,j=r.length;j>A&&_>P;++A)P+=r[A].length,w>=P&&(++m,y=P);if(r[m]instanceof a||r[A-1].greedy)continue;k=A-m,v=e.slice(y,P),b.index-=y}if(b){c&&(f=b[1].length);var w=b.index+f,b=b[0].slice(f),_=w+b.length,x=v.slice(0,w),O=v.slice(_),S=[m,k];x&&S.push(x);var N=new a(l,g?n.tokenize(b,g):b,d,b,h);S.push(N),O&&S.push(O),Array.prototype.splice.apply(r,S)}}}}}return r},hooks:{all:{},add:function(e,t){var a=n.hooks.all;a[e]=a[e]||[],a[e].push(t)},run:function(e,t){var a=n.hooks.all[e];if(a&&a.length)for(var r,i=0;r=a[i++];)r(t)}}},a=n.Token=function(e,t,n,a,r){this.type=e,this.content=t,this.alias=n,this.length=0|(a||"").length,this.greedy=!!r};if(a.stringify=function(e,t,r){if("string"==typeof e)return e;if("Array"===n.util.type(e))return e.map(function(n){return a.stringify(n,t,e)}).join("");var i={type:e.type,content:a.stringify(e.content,t,r),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:r};if("comment"==i.type&&(i.attributes.spellcheck="true"),e.alias){var l="Array"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(i.classes,l)}n.hooks.run("wrap",i);var o=Object.keys(i.attributes).map(function(e){return e+'="'+(i.attributes[e]||"").replace(/"/g,"&quot;")+'"'}).join(" ");return"<"+i.tag+' class="'+i.classes.join(" ")+'"'+(o?" "+o:"")+">"+i.content+"</"+i.tag+">"},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var t=JSON.parse(e.data),a=t.language,r=t.code,i=t.immediateClose;_self.postMessage(n.highlight(r,n.languages[a],a)),i&&_self.close()},!1),_self.Prism):_self.Prism;var r=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return r&&(n.filename=r.src,document.addEventListener&&!r.hasAttribute("data-manual")&&("loading"!==document.readyState?window.requestAnimationFrame?window.requestAnimationFrame(n.highlightAll):window.setTimeout(n.highlightAll,16):document.addEventListener("DOMContentLoaded",n.highlightAll))),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
  671. Prism.languages.markup={comment:/<!--[\w\W]*?-->/,prolog:/<\?[\w\W]+?\?>/,doctype:/<!DOCTYPE[\w\W]+?>/i,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&amp;/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup;
  672. Prism.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:{pattern:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,greedy:!0},property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.util.clone(Prism.languages.css),Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<style[\w\W]*?>)[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css"}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag));
  673. Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:{pattern:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/};
  674. Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*\*?|\/|~|\^|%|\.{3}/}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^\/])\/(?!\/)(\[.+?]|\\.|[^\/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0,greedy:!0}}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\\\|\\?[^\\])*?`/,greedy:!0,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<script[\w\W]*?>)[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript"}}),Prism.languages.js=Prism.languages.javascript;
  675. Prism.languages.json={property:/"(?:\\.|[^\\"])*"(?=\s*:)/gi,string:/"(?!:)(?:\\.|[^\\"])*"(?!:)/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee][+-]?\d+)?)\b/g,punctuation:/[{}[\]);,]/g,operator:/:/g,"boolean":/\b(true|false)\b/gi,"null":/\bnull\b/gi},Prism.languages.jsonp=Prism.languages.json;
  676. Prism.languages.typescript=Prism.languages.extend("javascript",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield|false|true|module|declare|constructor|string|Function|any|number|boolean|Array|enum|symbol|namespace|abstract|require|type)\b/}),Prism.languages.ts=Prism.languages.typescript;
  677. !function(){function e(e,t){return Array.prototype.slice.call((t||document).querySelectorAll(e))}function t(e,t){return t=" "+t+" ",(" "+e.className+" ").replace(/[\n\t]/g," ").indexOf(t)>-1}function n(e,n,i){for(var o,a=n.replace(/\s+/g,"").split(","),l=+e.getAttribute("data-line-offset")||0,d=r()?parseInt:parseFloat,c=d(getComputedStyle(e).lineHeight),s=0;o=a[s++];){o=o.split("-");var u=+o[0],m=+o[1]||u,h=document.createElement("div");h.textContent=Array(m-u+2).join(" \n"),h.setAttribute("aria-hidden","true"),h.className=(i||"")+" line-highlight",t(e,"line-numbers")||(h.setAttribute("data-start",u),m>u&&h.setAttribute("data-end",m)),h.style.top=(u-l-1)*c+"px",t(e,"line-numbers")?e.appendChild(h):(e.querySelector("code")||e).appendChild(h)}}function i(){var t=location.hash.slice(1);e(".temporary.line-highlight").forEach(function(e){e.parentNode.removeChild(e)});var i=(t.match(/\.([\d,-]+)$/)||[,""])[1];if(i&&!document.getElementById(t)){var r=t.slice(0,t.lastIndexOf(".")),o=document.getElementById(r);o&&(o.hasAttribute("data-line")||o.setAttribute("data-line",""),n(o,i,"temporary "),document.querySelector(".temporary.line-highlight").scrollIntoView())}}if("undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector){var r=function(){var e;return function(){if("undefined"==typeof e){var t=document.createElement("div");t.style.fontSize="13px",t.style.lineHeight="1.5",t.style.padding=0,t.style.border=0,t.innerHTML="&nbsp;<br />&nbsp;",document.body.appendChild(t),e=38===t.offsetHeight,document.body.removeChild(t)}return e}}(),o=0;Prism.hooks.add("complete",function(t){var r=t.element.parentNode,a=r&&r.getAttribute("data-line");r&&a&&/pre/i.test(r.nodeName)&&(clearTimeout(o),e(".line-highlight",r).forEach(function(e){e.parentNode.removeChild(e)}),n(r,a),o=setTimeout(i,1))}),window.addEventListener&&window.addEventListener("hashchange",i)}}();
  678. !function(){"undefined"!=typeof self&&self.Prism&&self.document&&Prism.hooks.add("complete",function(e){if(e.code){var t=e.element.parentNode,s=/\s*\bline-numbers\b\s*/;if(t&&/pre/i.test(t.nodeName)&&(s.test(t.className)||s.test(e.element.className))&&!e.element.querySelector(".line-numbers-rows")){s.test(e.element.className)&&(e.element.className=e.element.className.replace(s,"")),s.test(t.className)||(t.className+=" line-numbers");var n,a=e.code.match(/\n(?!$)/g),l=a?a.length+1:1,r=new Array(l+1);r=r.join("<span></span>"),n=document.createElement("span"),n.setAttribute("aria-hidden","true"),n.className="line-numbers-rows",n.innerHTML=r,t.hasAttribute("data-start")&&(t.style.counterReset="linenumber "+(parseInt(t.getAttribute("data-start"),10)-1)),e.element.appendChild(n)}}})}();
  679. </script>
  680. <script>
  681. (function() {
  682. const $ = function(value) { return document.querySelector(value) };
  683. const $$ = function(value) { return document.querySelectorAll(value) };
  684. var nativeFramesLength = $$('.frame-row.native-frame').length;
  685. var allFramesLength = $$('.frame-row').length;
  686. function filterFrames () {
  687. $('.frame-preview').classList.remove('is-hidden');
  688. var isSelected = $('#frames-filter').checked;
  689. if (isSelected) {
  690. $$('.frame-row.native-frame').forEach(function(node) {
  691. node.classList.add('force-show');
  692. });
  693. } else {
  694. $$('.frame-row.native-frame').forEach(function(node) {
  695. node.classList.remove('force-show');
  696. });
  697. }
  698. }
  699. function displayFirstView () {
  700. if (nativeFramesLength !== allFramesLength) {
  701. $('.frame-preview').classList.remove('is-hidden');
  702. }
  703. }
  704. function showFrameContext (frame) {
  705. $frameContext = frame.querySelector('.frame-context');
  706. var $context = $frameContext.innerHTML;
  707. $context = $context.trim().length === 0 ? 'Missing stack frames' : $context;
  708. var $line = $frameContext.getAttribute('data-line');
  709. var $start = $frameContext.getAttribute('data-start');
  710. var $file = $frameContext.getAttribute('data-file');
  711. var $method = $frameContext.getAttribute('data-method');
  712. var $lineColumn = $frameContext.getAttribute('data-line-column');
  713. var $language = $frameContext.getAttribute('data-extname') || 'js';
  714. $('#code-drop').parentNode.setAttribute('data-line', $line);
  715. $('#code-drop').parentNode.setAttribute('data-start', $start);
  716. $('#code-drop').parentNode.setAttribute('data-language', $language);
  717. $('#code-drop').parentNode.setAttribute('data-line-offset', (Number($start) - 1));
  718. $('#code-drop').setAttribute('class', 'language-' + $language);
  719. $('#code-drop').innerHTML = $context;
  720. $('#frame-file').innerHTML = $file;
  721. $('#frame-method').innerHTML = $method + '' + $lineColumn;
  722. Prism.highlightAll();
  723. }
  724. $$('.frame-row').forEach(function(node) {
  725. node.onclick = function (e) {
  726. $$('.frame-row').forEach(function(_node) { _node.classList.remove('active') });
  727. e.currentTarget.classList.add('active');
  728. showFrameContext(e.currentTarget);
  729. }
  730. })
  731. $('#frames-filter').onclick = function () {
  732. filterFrames();
  733. }
  734. displayFirstView();
  735. showFrameContext($('.frame-row.active'));
  736. })();
  737. </script>
  738. </section>
  739. </body>
  740. </html>