@mdn/fred 1.3.2 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/build/render.js +5 -2
  3. package/components/baseline-indicator/server.js +3 -3
  4. package/components/compat-table/constants.js +0 -3
  5. package/components/compat-table/element.js +3 -6
  6. package/components/content-feedback/element.js +2 -5
  7. package/components/content-section/server.css +1 -1
  8. package/components/contributor-list/element.css +3 -2
  9. package/components/interactive-example/element.js +1 -1
  10. package/components/menu/constants.js +6 -4
  11. package/components/menu/server.js +142 -89
  12. package/components/placement-bottom/element.js +2 -2
  13. package/components/placement-hp-main/element.js +2 -2
  14. package/components/placement-no/element.js +1 -1
  15. package/components/placement-note/element.js +1 -1
  16. package/components/placement-sidebar/element.js +4 -4
  17. package/components/placement-top/element.js +5 -5
  18. package/components/play-controller/element.js +1 -0
  19. package/components/playground/element.js +2 -1
  20. package/components/recent-contributions/server.js +1 -1
  21. package/components/scrim-inline/element.js +2 -2
  22. package/l10n/en-US.ftl +5 -2
  23. package/out/service-worker.js +1 -1
  24. package/out/service-worker.js.map +1 -1
  25. package/out/static/client/{2308.69b80ae939b202ae.js → 2308.0ccf49974d71523d.js} +6 -6
  26. package/out/static/client/2308.0ccf49974d71523d.js.map +1 -0
  27. package/out/static/client/{2319.daf8150c3dd00fb4.js → 2319.0a40303319ac6a6e.js} +4 -4
  28. package/out/static/client/{2319.daf8150c3dd00fb4.js.map → 2319.0a40303319ac6a6e.js.map} +1 -1
  29. package/out/static/client/{288.ba983e8acda3116e.js → 288.684edb44f92a470c.js} +2 -2
  30. package/out/static/client/288.684edb44f92a470c.js.map +1 -0
  31. package/out/static/client/{3132.ec59f4619872c415.js → 3132.5ae6f61e3998aef1.js} +6 -6
  32. package/out/static/client/{3132.ec59f4619872c415.js.map → 3132.5ae6f61e3998aef1.js.map} +1 -1
  33. package/out/static/client/{3733.60667669ab613e1f.js → 3733.94bd76664194890b.js} +5 -5
  34. package/out/static/client/{3733.60667669ab613e1f.js.map → 3733.94bd76664194890b.js.map} +1 -1
  35. package/out/static/client/{451.cd85e2808f388a00.js → 451.fb2679190b3266e1.js} +2 -2
  36. package/out/static/client/{451.cd85e2808f388a00.js.map → 451.fb2679190b3266e1.js.map} +1 -1
  37. package/out/static/client/{603.8cdd963a9e248a75.js → 603.8670965b0722be3a.js} +5 -5
  38. package/out/static/client/603.8670965b0722be3a.js.map +1 -0
  39. package/out/static/client/{6040.80c6f96d0152ac99.js → 6040.13e672aff6757a47.js} +2 -2
  40. package/out/static/client/{6040.80c6f96d0152ac99.js.map → 6040.13e672aff6757a47.js.map} +1 -1
  41. package/out/static/client/{6536.faff8f026d145aad.js → 6536.ecdcc4458cbd0504.js} +2 -2
  42. package/out/static/client/6536.ecdcc4458cbd0504.js.map +1 -0
  43. package/out/static/client/{8036.9065b84aac240378.js → 8036.6e177b49bfa9b7c4.js} +3 -3
  44. package/out/static/client/{8036.9065b84aac240378.js.map → 8036.6e177b49bfa9b7c4.js.map} +1 -1
  45. package/out/static/client/{8607.266d488ae06c2279.js → 8607.464a88660a040f97.js} +4 -4
  46. package/out/static/client/{8607.266d488ae06c2279.js.map → 8607.464a88660a040f97.js.map} +1 -1
  47. package/out/static/client/{8797.46790b4359b5d1cb.js → 8797.f5880b5ee2659039.js} +2 -2
  48. package/out/static/client/{8797.46790b4359b5d1cb.js.map → 8797.f5880b5ee2659039.js.map} +1 -1
  49. package/out/static/client/{9784.214845ec6d3b77e3.js → 9784.3f8ca449f7d36818.js} +5 -5
  50. package/out/static/client/9784.3f8ca449f7d36818.js.map +1 -0
  51. package/out/static/client/{index.b9d9ebb034538241.js → index.881056601848b5c3.js} +15 -12
  52. package/out/static/client/{index.b9d9ebb034538241.js.map → index.881056601848b5c3.js.map} +1 -1
  53. package/out/static/client/{runtime.cc9114c9e108157f.js → runtime.63305f0549b94aae.js} +2 -2
  54. package/out/static/client/{runtime.cc9114c9e108157f.js.map → runtime.63305f0549b94aae.js.map} +1 -1
  55. package/out/static/client/stats.json +136 -136
  56. package/out/static/client/{styles-content-section.e0bbadd0c4bc857d.css → styles-content-section.2f0727a030110fc9.css} +2 -2
  57. package/out/static/client/{styles-content-section.e0bbadd0c4bc857d.css.map → styles-content-section.2f0727a030110fc9.css.map} +1 -1
  58. package/out/static/legacy/{1289.71de08e7375881e1.js → 1289.61e3f0658b3b42f6.js} +2 -2
  59. package/out/static/legacy/{1289.71de08e7375881e1.js.map → 1289.61e3f0658b3b42f6.js.map} +1 -1
  60. package/out/static/legacy/{2090.29b77e88722868ff.js → 2090.5996133ea26ddd0a.js} +2 -2
  61. package/out/static/legacy/{2090.29b77e88722868ff.js.map → 2090.5996133ea26ddd0a.js.map} +1 -1
  62. package/out/static/legacy/2235.b99812e73c08ee51.js +2 -0
  63. package/out/static/legacy/{2235.c0e6904b64ea18fe.js.map → 2235.b99812e73c08ee51.js.map} +1 -1
  64. package/out/static/legacy/{2465.676e7f0b0f9f9d85.js → 2465.041a63f06f35163c.js} +2 -2
  65. package/out/static/legacy/{2465.676e7f0b0f9f9d85.js.map → 2465.041a63f06f35163c.js.map} +1 -1
  66. package/out/static/legacy/{3172.0c1b9258951929cc.js → 3172.cf1b8a6dcea5d789.js} +2 -2
  67. package/out/static/legacy/{3172.0c1b9258951929cc.js.map → 3172.cf1b8a6dcea5d789.js.map} +1 -1
  68. package/out/static/legacy/{4968.62ad4db7389e93ad.js → 4968.e73f2795a9ca1639.js} +2 -2
  69. package/out/static/legacy/{4968.62ad4db7389e93ad.js.map → 4968.e73f2795a9ca1639.js.map} +1 -1
  70. package/out/static/legacy/{6364.d8cdb19b92fe6dc1.js → 6364.4c2629a5287ded91.js} +2 -2
  71. package/out/static/legacy/{6364.d8cdb19b92fe6dc1.js.map → 6364.4c2629a5287ded91.js.map} +1 -1
  72. package/out/static/legacy/{652.3c82fa8fa13a87b2.js → 652.d7ab50c73c693880.js} +2 -2
  73. package/out/static/legacy/{652.3c82fa8fa13a87b2.js.map → 652.d7ab50c73c693880.js.map} +1 -1
  74. package/out/static/legacy/7510.faa07a788cad6fc7.js +2 -0
  75. package/out/static/legacy/{7510.d1e3773463ecc314.js.map → 7510.faa07a788cad6fc7.js.map} +1 -1
  76. package/out/static/legacy/{7827.838d9e673c56e936.js → 7827.efd03057dbb6c884.js} +2 -2
  77. package/out/static/legacy/{7827.838d9e673c56e936.js.map → 7827.efd03057dbb6c884.js.map} +1 -1
  78. package/out/static/legacy/8183.26862a110c641391.js +2 -0
  79. package/out/static/legacy/8183.26862a110c641391.js.map +1 -0
  80. package/out/static/legacy/{8333.c00c132d6919165b.js → 8333.e5001734aea048b6.js} +2 -2
  81. package/out/static/legacy/{8333.c00c132d6919165b.js.map → 8333.e5001734aea048b6.js.map} +1 -1
  82. package/out/static/legacy/{8504.157e4a48938fdac7.js → 8504.d5df18204dd2b2ef.js} +2 -2
  83. package/out/static/legacy/{8504.157e4a48938fdac7.js.map → 8504.d5df18204dd2b2ef.js.map} +1 -1
  84. package/out/static/legacy/8856.0efcde0ace698d4a.js.map +1 -1
  85. package/out/static/legacy/{9221.64e46eedebf47df8.js → 9221.3cee7be6339f4234.js} +3 -3
  86. package/out/static/legacy/{9221.64e46eedebf47df8.js.map → 9221.3cee7be6339f4234.js.map} +1 -1
  87. package/out/static/legacy/asset-manifest.json +20 -20
  88. package/out/static/legacy/{index.e4ab469094607d20.html → index.17917fe951b4bbfe.html} +1 -1
  89. package/out/static/legacy/index.81f776c8a95b5c6c.js +6 -0
  90. package/out/static/legacy/{index.3504df1c7b6a1b29.js.LICENSE.txt → index.81f776c8a95b5c6c.js.LICENSE.txt} +1 -1
  91. package/out/static/legacy/index.81f776c8a95b5c6c.js.map +1 -0
  92. package/out/static/legacy/stats.json +20 -20
  93. package/out/static/legacy/yari.255b3bc6ef8a8b24.js +7 -0
  94. package/out/static/legacy/{yari.7a85003b4add8414.js.LICENSE.txt → yari.255b3bc6ef8a8b24.js.LICENSE.txt} +1 -1
  95. package/out/static/legacy/yari.255b3bc6ef8a8b24.js.map +1 -0
  96. package/out/static/ssr/index.js +153 -161
  97. package/out/static/ssr/index.js.map +1 -1
  98. package/out/static/ssr/stats.json +4 -4
  99. package/package.json +14 -14
  100. package/utils/glean.js +3 -8
  101. package/out/static/client/2308.69b80ae939b202ae.js.map +0 -1
  102. package/out/static/client/288.ba983e8acda3116e.js.map +0 -1
  103. package/out/static/client/603.8cdd963a9e248a75.js.map +0 -1
  104. package/out/static/client/6536.faff8f026d145aad.js.map +0 -1
  105. package/out/static/client/9784.214845ec6d3b77e3.js.map +0 -1
  106. package/out/static/legacy/2235.c0e6904b64ea18fe.js +0 -2
  107. package/out/static/legacy/7510.d1e3773463ecc314.js +0 -2
  108. package/out/static/legacy/8183.d3c84d03c477eac6.js +0 -2
  109. package/out/static/legacy/8183.d3c84d03c477eac6.js.map +0 -1
  110. package/out/static/legacy/index.3504df1c7b6a1b29.js +0 -6
  111. package/out/static/legacy/index.3504df1c7b6a1b29.js.map +0 -1
  112. package/out/static/legacy/yari.7a85003b4add8414.js +0 -7
  113. package/out/static/legacy/yari.7a85003b4add8414.js.map +0 -1
  114. /package/out/static/client/{2319.daf8150c3dd00fb4.js.LICENSE.txt → 2319.0a40303319ac6a6e.js.LICENSE.txt} +0 -0
  115. /package/out/static/client/{603.8cdd963a9e248a75.js.LICENSE.txt → 603.8670965b0722be3a.js.LICENSE.txt} +0 -0
  116. /package/out/static/client/{9784.214845ec6d3b77e3.js.LICENSE.txt → 9784.3f8ca449f7d36818.js.LICENSE.txt} +0 -0
  117. /package/out/static/client/{index.b9d9ebb034538241.js.LICENSE.txt → index.881056601848b5c3.js.LICENSE.txt} +0 -0
  118. /package/out/static/legacy/{9221.64e46eedebf47df8.js.LICENSE.txt → 9221.3cee7be6339f4234.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
- export const __webpack_id__="8504";export const __webpack_ids__=["8504"];export const __webpack_modules__={96427:function(e,t,n){n.r(t),n.d(t,{default:()=>g});var r=n(96540),l=n(60274),a=n(18761);function o(e){return({bad_bcd_queries:"Bad BCD queries",bad_pre_tags:"Bad <pre> tags",unsafe_html:"Unsafe HTML"})[e]||e.charAt(0).toUpperCase()+e.slice(1).replace(/_/g," ")}var c=n(17047),u=n(8574),i=n(23425);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function m(e,t,n,r,l,a,o){try{var c=e[a](o),u=c.value}catch(e){n(e);return}c.done?t(u):Promise.resolve(u).then(r,l)}function f(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,c=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(c)throw r}}return a}}(e,t)||v(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||v(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function v(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}}var h=Object.freeze({mdn_url:"",title:"",popularity:"",fixableFlaws:"",flaws:[],page:1,sort_by:"popularity",sort_reverse:!1,search_flaws:[]});function E(){var e=y((0,l.ok)(),2),t=e[0],n=e[1],a=(0,r.useMemo)(function(){var e=d(t.entries()).reduce(function(e,t){var n=y(t,2),r=n[0],l=n[1];return Object.prototype.hasOwnProperty.call(e,r)?Array.isArray(e[r])?e[r]=d(e[r]).concat([l]):e[r]=[e[r],l]:e[r]=l,e},{});return e.page&&(e.page=parseInt(e.page)),f({},h,e)},[t]),o=(0,r.useCallback)(function(e){n(Object.fromEntries(Object.entries(f({},a,e)).filter(function(e){var t=y(e,2),n=t[0],r=t[1];return JSON.stringify(h[n])!==JSON.stringify(r)})))},[a,n]),c=!0,u=!1,i=void 0;try{for(var s,m=["flaws","search_flaws"][Symbol.iterator]();!(c=(s=m.next()).done);c=!0){var p=s.value;a[p]&&!Array.isArray(a[p])&&(a[p]=[a[p]])}}catch(e){u=!0,i=e}finally{try{c||null==m.return||m.return()}finally{if(u)throw i}}return[a,o]}function g(){var e=(0,i.Ym)(),t=y(E(),1)[0],n=y((0,r.useState)(null),2),o=n[0],u=n[1];(0,r.useEffect)(function(){var e="Documents with flaws";o&&(e="(".concat(o.counts.found.toLocaleString()," found) ").concat(e)),document.title=e},[o]);var s=(0,r.useCallback)(function(){var n=t.sort_by,r=t.sort_reverse,a=t.page,o=function(e,t){if(null==e)return{};var n,r,l=function(e,t){if(null==e)return{};var n,r,l={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}(t,["sort_by","sort_reverse","page"]),c=(0,l.PI)(p(f({},o),{page:String(a),locale:e,sort:n,reverse:JSON.stringify(r)}));return"/_flaws?".concat(c.toString())},[e,t]),d=(0,a.Ay)(s(),function(e){var t;return(t=function(){var t;return function(e,t){var n,r,l,a={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return o.next=c(0),o.throw=c(1),o.return=c(2),"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function c(c){return function(u){var i=[c,u];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,i[0]&&(a=0)),a;)try{if(n=1,r&&(l=2&i[0]?r.return:i[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,i[1])).done)return l;switch(r=0,l&&(i=[2&i[0],l.value]),i[0]){case 0:case 1:l=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(l=(l=a.trys).length>0&&l[l.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!l||i[1]>l[0]&&i[1]<l[3])){a.label=i[1];break}if(6===i[0]&&a.label<l[1]){a.label=l[1],l=i;break}if(l&&a.label<l[2]){a.label=l[2],a.ops.push(i);break}l[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=l=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,fetch(e)];case 1:return t=n.sent(),[3,3];case 2:throw n.sent();case 3:if(!t.ok)throw Error("".concat(t.status," on ").concat(e));if(!t.headers.get("content-type").includes("application/json"))throw Error("Response is not JSON (".concat(t.headers.get("content-type"),")"));return[2,t.json()]}})},function(){var e=this,n=arguments;return new Promise(function(r,l){var a=t.apply(e,n);function o(e){m(a,r,l,o,c,"next",e)}function c(e){m(a,r,l,o,c,"throw",e)}o(void 0)})})()},{}),b=d.data,v=d.error,h=d.isValidating;(0,r.useEffect)(function(){b&&u(b)},[b]);var g=r.createElement("small",null,"\xa0");b||v?h&&(g=r.createElement("small",null,"Reloading...")):g=o?r.createElement("small",null,"Reloading..."):r.createElement("small",null,"Loading...");var k=t.page,P=o?o.counts.pages:0;return r.createElement(c.K,{className:"all-flaws",standalone:!0},g,v&&r.createElement(w,{error:v}),o&&r.createElement("div",{className:"filter-documents"},r.createElement(S,{flawLevels:o.flawLevels}),r.createElement(j,{locale:e,counts:o.counts,documents:o.documents,pageCount:P,page:k})),b&&b.counts&&r.createElement(_,{counts:b.counts.flaws}),b&&r.createElement(O,{times:b.times}))}function w(e){var t=e.error;return r.createElement("div",{className:"error-message search-error"},r.createElement("h3",null,"Search error"),r.createElement("pre",null,t.toString()))}function O(e){var t,n=e.times;return r.createElement("div",{className:"search-times"},r.createElement("p",null,"Time to find built documents ",(t=n.built)>1e3?"".concat((t/1e3).toFixed(1)," seconds"):"".concat(Math.trunc(t)," milliseconds")))}function S(e){var t=e.flawLevels,n=y(E(),2),l=n[0],a=n[1],c=y((0,r.useState)(l),2),u=c[0],i=c[1],s=y((0,r.useState)(function(e){var t=[],n=!0,r=!1,l=void 0;try{for(var a,o=e[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var c=a.value,u=y(c.split(":",2),2),i=u[0],s=u[1];t.push({flaw:i,search:s})}}catch(e){r=!0,l=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw l}}return t}(l.search_flaws)),2),m=s[0],v=s[1];function g(){a(u)}(0,r.useEffect)(function(){var e=d(document.querySelectorAll('ul.search-flaws-rows input[type="search"]')).filter(function(e){return!e.value});e.length&&e[e.length-1].focus()},[m]);var w=!function(e,t){var n=new Set(Object.keys(e)),r=new Set(Object.keys(t));if(n.size!==r.size)return!1;var l=!0,a=!1,o=void 0;try{for(var c,u=n[Symbol.iterator]();!(l=(c=u.next()).done);l=!0){var i=c.value;if(!r.has(i))return!1}}catch(e){a=!0,o=e}finally{try{l||null==u.return||u.return()}finally{if(a)throw o}}return Object.entries(e).every(function(e){var n=y(e,2),r=n[0],l=n[1],a=t[r];return(void 0===l?"undefined":b(l))===(void 0===a?"undefined":b(a))&&(Array.isArray(l)?l.length===a.length&&l.every(function(e,t){return e===a[t]}):l===a)})}(h,u),O=m.some(function(e){return!e.search.trim()});return r.createElement("div",{className:"filters"},r.createElement("h3",null,"Filters"),r.createElement("form",{onSubmit:function(e){e.preventDefault(),g()}},r.createElement("div",null,r.createElement("h4",null,"Document"),r.createElement("input",{type:"search",placeholder:"Filter by document URI",value:u.mdn_url,onChange:function(e){i(p(f({},u),{mdn_url:e.target.value}))},onBlur:g}),r.createElement("input",{type:"search",placeholder:"Filter by document title",value:u.title,onChange:function(e){i(p(f({},u),{title:e.target.value}))},onBlur:g})),r.createElement("div",null,r.createElement("h4",null,"Popularity"),r.createElement("input",{type:"search",placeholder:"E.g. < 100",value:u.popularity||"",onChange:function(e){i(p(f({},u),{popularity:e.target.value}))},onBlur:g})),r.createElement("div",null,r.createElement("h4",null,"Flaws"),r.createElement("select",{multiple:!0,value:u.flaws,onChange:function(e){var t=d(e.target.selectedOptions).map(function(e){return e.value});i(p(f({},u),{flaws:t}))}},t&&t.map(function(e){return r.createElement("option",{key:e.name,value:e.name},o(e.name)," ",e.ignored&&"(ignored)")}))),r.createElement("div",null,r.createElement("h4",null,"Search inside flaws"),r.createElement("ul",{className:"search-flaws-rows"},m.map(function(e,n){return r.createElement("li",{key:"".concat(e.flaw,":").concat(n)},r.createElement("select",{value:e.flaw,onChange:function(e){var t=d(m);t[n].flaw=e.target.value,v(t)}},t&&t.filter(function(e){return!e.ignored}).map(function(e){return r.createElement("option",{key:e.name,value:e.name},o(e.name))})),r.createElement("input",{type:"search",placeholder:"Search expression (e.g. jsxref)",value:e.search,onChange:function(e){v(m.map(function(t,r){return n===r&&(t.search=e.target.value),t}))},onBlur:function(){var e=m.map(function(e){return"".concat(e.flaw,":").concat(e.search)});i(p(f({},u),{search_flaws:e})),g()}}),r.createElement("button",{type:"button",title:"Remove search row",onClick:function(){var e=d(m);e.splice(n,1),v(e)}},"-"))})),r.createElement("button",{type:"button",title:"Add search row",disabled:O,onClick:function(){v(d(m).concat(d([{flaw:"macros",search:""}])))}},"+")),r.createElement("div",null,r.createElement("h4",null,"Fixable flaws"),r.createElement("input",{type:"search",placeholder:"E.g. >0",value:u.fixableFlaws||"",onChange:function(e){i(p(f({},u),{fixableFlaws:e.target.value}))},onBlur:g})),r.createElement("div",null,r.createElement("h4",null,"\xa0"),r.createElement("button",{type:"submit"},"Filter now"),w&&r.createElement("button",{type:"button",onClick:function(e){e.preventDefault(),i(h),a(h)}},"Reset filters"))))}function j(e){var t=e.locale,n=e.counts,a=e.documents,c=e.pageCount,i=e.page,s=y(E(),2),m=s[0],f=s[1];function p(e){var t=e.id,n=e.title;return r.createElement("th",{onClick:function(){f(m.sort_by===t?{sort_reverse:!m.sort_reverse}:{sort_by:t})},className:"sortable"},n," ",m.sort_by===t?m.sort_reverse?"↓":"↑":null)}function d(e,t){var n=e.split(RegExp("(".concat(t,")"),"gi"));return r.createElement("span",null," ",n.map(function(e,n){return r.createElement("span",{key:n,style:e.toLowerCase()===t.toLowerCase()?{fontWeight:"bold"}:{}},e)})," ")}return r.createElement("div",{className:"documents"},r.createElement("h3",null,"Documents with flaws found (",n.found.toLocaleString(),")"," ",c>1&&r.createElement("span",{className:"page"},"page ",i,"/",c)),n.built?r.createElement("h4",{className:"subheader"},n.built.toLocaleString()," documents built (",t,")"):r.createElement(k,{locale:t}),r.createElement("table",null,r.createElement("thead",null,r.createElement("tr",null,r.createElement(p,{id:"mdn_url",title:"Document"}),r.createElement(p,{id:"popularity",title:"Popularity"}),r.createElement(p,{id:"flaws",title:"Flaws"}))),r.createElement("tbody",null,a.map(function(e){var t,n,a,c,u,i,s,f,p;return r.createElement("tr",{key:e.mdn_url},r.createElement("td",null,r.createElement(l.N_,{to:"".concat(e.mdn_url,"#_flaws"),title:e.title,target:"_blank"},(n=(t=y(e.mdn_url.split(/\/docs\//,2),2))[0],a=t[1],r.createElement(r.Fragment,null,r.createElement("span",{className:"url-prefix"},n,"/docs/"),r.createElement("span",{className:"url-slug"},m.mdn_url?d(a,m.mdn_url):a)))),r.createElement("span",{className:"document-title-preview"},m.title?d(e.title,m.title):e.title)),r.createElement("td",{className:e.popularity.ranking?"":"no-popularity",title:e.popularity.ranking?"Meaning there are ".concat(e.popularity.ranking-1," more popular pages than this"):"Meaning it has no ranking. Most likely a very rare (or new) document"},e.popularity.ranking?"".concat((c=e.popularity.ranking,u=["th","st","nd","rd"],i=c%100,c.toLocaleString()+(u[(i-20)%10]||u[i]||u[0]))):"n/a"),r.createElement("td",{className:"document-flaws"},(f=(s=e.flaws).reduce(function(e,t){return t.countFixable+e},0),p=s.map(function(e){return"".concat(o(e.name),": ").concat(e.value)}),r.createElement(r.Fragment,null,p.join(", ")," ",r.createElement("span",{className:"document-flaws-fixable"},"(",f," fixable)")))))}))),r.createElement(u.m,{last:c}))}function k(e){var t=e.locale;return r.createElement("div",{className:"notecard warning document-warnings"},r.createElement("h4",null,"No documents have been built, so no flaws can be found"),r.createElement("p",null,"Run ",r.createElement("code",null,"yarn build --locale ",t.toLowerCase())," to build all documents for the current locale."))}function _(e){var t=e.counts,n=Object.entries(t.type).sort(function(e,t){return e[1]-t[1]}),l=Object.entries(t.macros).sort(function(e,t){return e[1]-t[1]});return r.createElement("div",{className:"flaw-counts"},r.createElement("h3",null,"Flaws counts"),r.createElement("table",null,r.createElement("tbody",null,r.createElement("tr",null,r.createElement("td",null,"Total"),r.createElement("td",null,r.createElement("b",null,t.total.toLocaleString()))),r.createElement("tr",null,r.createElement("td",null,"Fixable"),r.createElement("td",null,r.createElement("b",null,t.fixable.toLocaleString()))))),r.createElement("h4",null,"Breakdown by type"),r.createElement("table",null,r.createElement("thead",null,r.createElement("tr",null,r.createElement("th",null,"Type"),r.createElement("th",null,"Count"))),r.createElement("tbody",null,n.map(function(e){var t=y(e,2),n=t[0],l=t[1];return r.createElement("tr",{key:n},r.createElement("td",null,o(n)),r.createElement("td",null,r.createElement("b",null,l.toLocaleString())))}))),r.createElement("h4",null,"Breakdown by ",r.createElement("code",null,"macros")," flaws"),r.createElement("table",null,r.createElement("thead",null,r.createElement("tr",null,r.createElement("th",null,"Name"),r.createElement("th",null,"Count"))),r.createElement("tbody",null,l.map(function(e){var t=y(e,2),n=t[0],l=t[1];return r.createElement("tr",{key:n},r.createElement("td",null,r.createElement("code",null,n)),r.createElement("td",null,r.createElement("b",null,l.toLocaleString())))}))))}},8574:function(e,t,n){n.d(t,{m:()=>m});var r=n(60274),l=n(45571),a=n(96540);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,c=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(c)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var i="page";function s(e){var t=e.page,n=e.children,l=e.onClick,o=e.disabled,s=u((0,r.ok)(),2),m=s[0],f=s[1];return a.createElement(r.N_,{to:{},className:o?"disabled":"",onClick:function(e){if(e.preventDefault(),!o){var n,r;l&&l(t),f((n=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){c(e,t,n[t])})}return e}({},Object.fromEntries(m.entries())),r=null!=(r=c({},i,t.toString()))?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(r)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))}),n)),window.setTimeout(function(){return document.documentElement.scrollTo()})}}},n||t)}function m(e){var t=e.first,n=void 0===t?1:t,o=e.last,c=e.endPadding,m=void 0===c?2:c,f=e.middlePadding,p=void 0===f?2:f,y=e.onChange,d=parseInt(u((0,r.ok)(),1)[0].get(i)||"",10)||n,b=Math.max(d-p,n),v=Math.min(b+2*p+1,o+1),h=(0,l.y1)(n,Math.min(m,b)),E=(0,l.y1)(b,v),g=(0,l.y1)(Math.max(o+1-m,v),o+1),w=function(e){y&&y(e,d)};return n===o?a.createElement(a.Fragment,null):a.createElement("div",{className:"pagination"},a.createElement(s,{page:d-1,onClick:w,disabled:d===n},"← Previous"),h.map(function(e){return a.createElement(s,{key:e,page:e,onClick:w})}),!!h.length&&h[h.length-1]+1!==E[0]&&"…",E.map(function(e){return d===e?a.createElement("span",{className:"current-page",key:e},e):a.createElement(s,{key:e,page:e,onClick:w})}),!!g.length&&E[E.length-1]+1!==g[0]&&"…",g.map(function(e){return a.createElement(s,{key:e,page:e,onClick:w})}),a.createElement(s,{page:d+1,onClick:w,disabled:d===o},"Next →"))}}};
2
- //# sourceMappingURL=8504.157e4a48938fdac7.js.map
1
+ export const __webpack_id__="8504";export const __webpack_ids__=["8504"];export const __webpack_modules__={96427:function(e,t,n){n.r(t),n.d(t,{default:()=>g});var r=n(96540),l=n(39330),a=n(18761);function o(e){return({bad_bcd_queries:"Bad BCD queries",bad_pre_tags:"Bad <pre> tags",unsafe_html:"Unsafe HTML"})[e]||e.charAt(0).toUpperCase()+e.slice(1).replace(/_/g," ")}var c=n(17047),u=n(8574),i=n(23425);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function m(e,t,n,r,l,a,o){try{var c=e[a](o),u=c.value}catch(e){n(e);return}c.done?t(u):Promise.resolve(u).then(r,l)}function f(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function y(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,c=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(c)throw r}}return a}}(e,t)||v(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||v(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function v(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}}var h=Object.freeze({mdn_url:"",title:"",popularity:"",fixableFlaws:"",flaws:[],page:1,sort_by:"popularity",sort_reverse:!1,search_flaws:[]});function E(){var e=y((0,l.ok)(),2),t=e[0],n=e[1],a=(0,r.useMemo)(function(){var e=d(t.entries()).reduce(function(e,t){var n=y(t,2),r=n[0],l=n[1];return Object.prototype.hasOwnProperty.call(e,r)?Array.isArray(e[r])?e[r]=d(e[r]).concat([l]):e[r]=[e[r],l]:e[r]=l,e},{});return e.page&&(e.page=parseInt(e.page)),f({},h,e)},[t]),o=(0,r.useCallback)(function(e){n(Object.fromEntries(Object.entries(f({},a,e)).filter(function(e){var t=y(e,2),n=t[0],r=t[1];return JSON.stringify(h[n])!==JSON.stringify(r)})))},[a,n]),c=!0,u=!1,i=void 0;try{for(var s,m=["flaws","search_flaws"][Symbol.iterator]();!(c=(s=m.next()).done);c=!0){var p=s.value;a[p]&&!Array.isArray(a[p])&&(a[p]=[a[p]])}}catch(e){u=!0,i=e}finally{try{c||null==m.return||m.return()}finally{if(u)throw i}}return[a,o]}function g(){var e=(0,i.Ym)(),t=y(E(),1)[0],n=y((0,r.useState)(null),2),o=n[0],u=n[1];(0,r.useEffect)(function(){var e="Documents with flaws";o&&(e="(".concat(o.counts.found.toLocaleString()," found) ").concat(e)),document.title=e},[o]);var s=(0,r.useCallback)(function(){var n=t.sort_by,r=t.sort_reverse,a=t.page,o=function(e,t){if(null==e)return{};var n,r,l=function(e,t){if(null==e)return{};var n,r,l={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}(t,["sort_by","sort_reverse","page"]),c=(0,l.PI)(p(f({},o),{page:String(a),locale:e,sort:n,reverse:JSON.stringify(r)}));return"/_flaws?".concat(c.toString())},[e,t]),d=(0,a.Ay)(s(),function(e){var t;return(t=function(){var t;return function(e,t){var n,r,l,a={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return o.next=c(0),o.throw=c(1),o.return=c(2),"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function c(c){return function(u){var i=[c,u];if(n)throw TypeError("Generator is already executing.");for(;o&&(o=0,i[0]&&(a=0)),a;)try{if(n=1,r&&(l=2&i[0]?r.return:i[0]?r.throw||((l=r.return)&&l.call(r),0):r.next)&&!(l=l.call(r,i[1])).done)return l;switch(r=0,l&&(i=[2&i[0],l.value]),i[0]){case 0:case 1:l=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(l=(l=a.trys).length>0&&l[l.length-1])&&(6===i[0]||2===i[0])){a=0;continue}if(3===i[0]&&(!l||i[1]>l[0]&&i[1]<l[3])){a.label=i[1];break}if(6===i[0]&&a.label<l[1]){a.label=l[1],l=i;break}if(l&&a.label<l[2]){a.label=l[2],a.ops.push(i);break}l[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=l=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,fetch(e)];case 1:return t=n.sent(),[3,3];case 2:throw n.sent();case 3:if(!t.ok)throw Error("".concat(t.status," on ").concat(e));if(!t.headers.get("content-type").includes("application/json"))throw Error("Response is not JSON (".concat(t.headers.get("content-type"),")"));return[2,t.json()]}})},function(){var e=this,n=arguments;return new Promise(function(r,l){var a=t.apply(e,n);function o(e){m(a,r,l,o,c,"next",e)}function c(e){m(a,r,l,o,c,"throw",e)}o(void 0)})})()},{}),b=d.data,v=d.error,h=d.isValidating;(0,r.useEffect)(function(){b&&u(b)},[b]);var g=r.createElement("small",null,"\xa0");b||v?h&&(g=r.createElement("small",null,"Reloading...")):g=o?r.createElement("small",null,"Reloading..."):r.createElement("small",null,"Loading...");var k=t.page,P=o?o.counts.pages:0;return r.createElement(c.K,{className:"all-flaws",standalone:!0},g,v&&r.createElement(w,{error:v}),o&&r.createElement("div",{className:"filter-documents"},r.createElement(S,{flawLevels:o.flawLevels}),r.createElement(j,{locale:e,counts:o.counts,documents:o.documents,pageCount:P,page:k})),b&&b.counts&&r.createElement(_,{counts:b.counts.flaws}),b&&r.createElement(O,{times:b.times}))}function w(e){var t=e.error;return r.createElement("div",{className:"error-message search-error"},r.createElement("h3",null,"Search error"),r.createElement("pre",null,t.toString()))}function O(e){var t,n=e.times;return r.createElement("div",{className:"search-times"},r.createElement("p",null,"Time to find built documents ",(t=n.built)>1e3?"".concat((t/1e3).toFixed(1)," seconds"):"".concat(Math.trunc(t)," milliseconds")))}function S(e){var t=e.flawLevels,n=y(E(),2),l=n[0],a=n[1],c=y((0,r.useState)(l),2),u=c[0],i=c[1],s=y((0,r.useState)(function(e){var t=[],n=!0,r=!1,l=void 0;try{for(var a,o=e[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var c=a.value,u=y(c.split(":",2),2),i=u[0],s=u[1];t.push({flaw:i,search:s})}}catch(e){r=!0,l=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw l}}return t}(l.search_flaws)),2),m=s[0],v=s[1];function g(){a(u)}(0,r.useEffect)(function(){var e=d(document.querySelectorAll('ul.search-flaws-rows input[type="search"]')).filter(function(e){return!e.value});e.length&&e[e.length-1].focus()},[m]);var w=!function(e,t){var n=new Set(Object.keys(e)),r=new Set(Object.keys(t));if(n.size!==r.size)return!1;var l=!0,a=!1,o=void 0;try{for(var c,u=n[Symbol.iterator]();!(l=(c=u.next()).done);l=!0){var i=c.value;if(!r.has(i))return!1}}catch(e){a=!0,o=e}finally{try{l||null==u.return||u.return()}finally{if(a)throw o}}return Object.entries(e).every(function(e){var n=y(e,2),r=n[0],l=n[1],a=t[r];return(void 0===l?"undefined":b(l))===(void 0===a?"undefined":b(a))&&(Array.isArray(l)?l.length===a.length&&l.every(function(e,t){return e===a[t]}):l===a)})}(h,u),O=m.some(function(e){return!e.search.trim()});return r.createElement("div",{className:"filters"},r.createElement("h3",null,"Filters"),r.createElement("form",{onSubmit:function(e){e.preventDefault(),g()}},r.createElement("div",null,r.createElement("h4",null,"Document"),r.createElement("input",{type:"search",placeholder:"Filter by document URI",value:u.mdn_url,onChange:function(e){i(p(f({},u),{mdn_url:e.target.value}))},onBlur:g}),r.createElement("input",{type:"search",placeholder:"Filter by document title",value:u.title,onChange:function(e){i(p(f({},u),{title:e.target.value}))},onBlur:g})),r.createElement("div",null,r.createElement("h4",null,"Popularity"),r.createElement("input",{type:"search",placeholder:"E.g. < 100",value:u.popularity||"",onChange:function(e){i(p(f({},u),{popularity:e.target.value}))},onBlur:g})),r.createElement("div",null,r.createElement("h4",null,"Flaws"),r.createElement("select",{multiple:!0,value:u.flaws,onChange:function(e){var t=d(e.target.selectedOptions).map(function(e){return e.value});i(p(f({},u),{flaws:t}))}},t&&t.map(function(e){return r.createElement("option",{key:e.name,value:e.name},o(e.name)," ",e.ignored&&"(ignored)")}))),r.createElement("div",null,r.createElement("h4",null,"Search inside flaws"),r.createElement("ul",{className:"search-flaws-rows"},m.map(function(e,n){return r.createElement("li",{key:"".concat(e.flaw,":").concat(n)},r.createElement("select",{value:e.flaw,onChange:function(e){var t=d(m);t[n].flaw=e.target.value,v(t)}},t&&t.filter(function(e){return!e.ignored}).map(function(e){return r.createElement("option",{key:e.name,value:e.name},o(e.name))})),r.createElement("input",{type:"search",placeholder:"Search expression (e.g. jsxref)",value:e.search,onChange:function(e){v(m.map(function(t,r){return n===r&&(t.search=e.target.value),t}))},onBlur:function(){var e=m.map(function(e){return"".concat(e.flaw,":").concat(e.search)});i(p(f({},u),{search_flaws:e})),g()}}),r.createElement("button",{type:"button",title:"Remove search row",onClick:function(){var e=d(m);e.splice(n,1),v(e)}},"-"))})),r.createElement("button",{type:"button",title:"Add search row",disabled:O,onClick:function(){v(d(m).concat(d([{flaw:"macros",search:""}])))}},"+")),r.createElement("div",null,r.createElement("h4",null,"Fixable flaws"),r.createElement("input",{type:"search",placeholder:"E.g. >0",value:u.fixableFlaws||"",onChange:function(e){i(p(f({},u),{fixableFlaws:e.target.value}))},onBlur:g})),r.createElement("div",null,r.createElement("h4",null,"\xa0"),r.createElement("button",{type:"submit"},"Filter now"),w&&r.createElement("button",{type:"button",onClick:function(e){e.preventDefault(),i(h),a(h)}},"Reset filters"))))}function j(e){var t=e.locale,n=e.counts,a=e.documents,c=e.pageCount,i=e.page,s=y(E(),2),m=s[0],f=s[1];function p(e){var t=e.id,n=e.title;return r.createElement("th",{onClick:function(){f(m.sort_by===t?{sort_reverse:!m.sort_reverse}:{sort_by:t})},className:"sortable"},n," ",m.sort_by===t?m.sort_reverse?"↓":"↑":null)}function d(e,t){var n=e.split(RegExp("(".concat(t,")"),"gi"));return r.createElement("span",null," ",n.map(function(e,n){return r.createElement("span",{key:n,style:e.toLowerCase()===t.toLowerCase()?{fontWeight:"bold"}:{}},e)})," ")}return r.createElement("div",{className:"documents"},r.createElement("h3",null,"Documents with flaws found (",n.found.toLocaleString(),")"," ",c>1&&r.createElement("span",{className:"page"},"page ",i,"/",c)),n.built?r.createElement("h4",{className:"subheader"},n.built.toLocaleString()," documents built (",t,")"):r.createElement(k,{locale:t}),r.createElement("table",null,r.createElement("thead",null,r.createElement("tr",null,r.createElement(p,{id:"mdn_url",title:"Document"}),r.createElement(p,{id:"popularity",title:"Popularity"}),r.createElement(p,{id:"flaws",title:"Flaws"}))),r.createElement("tbody",null,a.map(function(e){var t,n,a,c,u,i,s,f,p;return r.createElement("tr",{key:e.mdn_url},r.createElement("td",null,r.createElement(l.N_,{to:"".concat(e.mdn_url,"#_flaws"),title:e.title,target:"_blank"},(n=(t=y(e.mdn_url.split(/\/docs\//,2),2))[0],a=t[1],r.createElement(r.Fragment,null,r.createElement("span",{className:"url-prefix"},n,"/docs/"),r.createElement("span",{className:"url-slug"},m.mdn_url?d(a,m.mdn_url):a)))),r.createElement("span",{className:"document-title-preview"},m.title?d(e.title,m.title):e.title)),r.createElement("td",{className:e.popularity.ranking?"":"no-popularity",title:e.popularity.ranking?"Meaning there are ".concat(e.popularity.ranking-1," more popular pages than this"):"Meaning it has no ranking. Most likely a very rare (or new) document"},e.popularity.ranking?"".concat((c=e.popularity.ranking,u=["th","st","nd","rd"],i=c%100,c.toLocaleString()+(u[(i-20)%10]||u[i]||u[0]))):"n/a"),r.createElement("td",{className:"document-flaws"},(f=(s=e.flaws).reduce(function(e,t){return t.countFixable+e},0),p=s.map(function(e){return"".concat(o(e.name),": ").concat(e.value)}),r.createElement(r.Fragment,null,p.join(", ")," ",r.createElement("span",{className:"document-flaws-fixable"},"(",f," fixable)")))))}))),r.createElement(u.m,{last:c}))}function k(e){var t=e.locale;return r.createElement("div",{className:"notecard warning document-warnings"},r.createElement("h4",null,"No documents have been built, so no flaws can be found"),r.createElement("p",null,"Run ",r.createElement("code",null,"yarn build --locale ",t.toLowerCase())," to build all documents for the current locale."))}function _(e){var t=e.counts,n=Object.entries(t.type).sort(function(e,t){return e[1]-t[1]}),l=Object.entries(t.macros).sort(function(e,t){return e[1]-t[1]});return r.createElement("div",{className:"flaw-counts"},r.createElement("h3",null,"Flaws counts"),r.createElement("table",null,r.createElement("tbody",null,r.createElement("tr",null,r.createElement("td",null,"Total"),r.createElement("td",null,r.createElement("b",null,t.total.toLocaleString()))),r.createElement("tr",null,r.createElement("td",null,"Fixable"),r.createElement("td",null,r.createElement("b",null,t.fixable.toLocaleString()))))),r.createElement("h4",null,"Breakdown by type"),r.createElement("table",null,r.createElement("thead",null,r.createElement("tr",null,r.createElement("th",null,"Type"),r.createElement("th",null,"Count"))),r.createElement("tbody",null,n.map(function(e){var t=y(e,2),n=t[0],l=t[1];return r.createElement("tr",{key:n},r.createElement("td",null,o(n)),r.createElement("td",null,r.createElement("b",null,l.toLocaleString())))}))),r.createElement("h4",null,"Breakdown by ",r.createElement("code",null,"macros")," flaws"),r.createElement("table",null,r.createElement("thead",null,r.createElement("tr",null,r.createElement("th",null,"Name"),r.createElement("th",null,"Count"))),r.createElement("tbody",null,l.map(function(e){var t=y(e,2),n=t[0],l=t[1];return r.createElement("tr",{key:n},r.createElement("td",null,r.createElement("code",null,n)),r.createElement("td",null,r.createElement("b",null,l.toLocaleString())))}))))}},8574:function(e,t,n){n.d(t,{m:()=>m});var r=n(39330),l=n(45571),a=n(96540);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,l=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=l){var a=[],o=!0,c=!1;try{for(l=l.call(e);!(o=(n=l.next()).done)&&(a.push(n.value),!t||a.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{o||null==l.return||l.return()}finally{if(c)throw r}}return a}}(e,t)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return o(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var i="page";function s(e){var t=e.page,n=e.children,l=e.onClick,o=e.disabled,s=u((0,r.ok)(),2),m=s[0],f=s[1];return a.createElement(r.N_,{to:{},className:o?"disabled":"",onClick:function(e){if(e.preventDefault(),!o){var n,r;l&&l(t),f((n=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){c(e,t,n[t])})}return e}({},Object.fromEntries(m.entries())),r=null!=(r=c({},i,t.toString()))?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(r)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(r)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(r,e))}),n)),window.setTimeout(function(){return document.documentElement.scrollTo()})}}},n||t)}function m(e){var t=e.first,n=void 0===t?1:t,o=e.last,c=e.endPadding,m=void 0===c?2:c,f=e.middlePadding,p=void 0===f?2:f,y=e.onChange,d=parseInt(u((0,r.ok)(),1)[0].get(i)||"",10)||n,b=Math.max(d-p,n),v=Math.min(b+2*p+1,o+1),h=(0,l.y1)(n,Math.min(m,b)),E=(0,l.y1)(b,v),g=(0,l.y1)(Math.max(o+1-m,v),o+1),w=function(e){y&&y(e,d)};return n===o?a.createElement(a.Fragment,null):a.createElement("div",{className:"pagination"},a.createElement(s,{page:d-1,onClick:w,disabled:d===n},"← Previous"),h.map(function(e){return a.createElement(s,{key:e,page:e,onClick:w})}),!!h.length&&h[h.length-1]+1!==E[0]&&"…",E.map(function(e){return d===e?a.createElement("span",{className:"current-page",key:e},e):a.createElement(s,{key:e,page:e,onClick:w})}),!!g.length&&E[E.length-1]+1!==g[0]&&"…",g.map(function(e){return a.createElement(s,{key:e,page:e,onClick:w})}),a.createElement(s,{page:d+1,onClick:w,disabled:d===o},"Next →"))}}};
2
+ //# sourceMappingURL=8504.d5df18204dd2b2ef.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"8504.157e4a48938fdac7.js","sources":["webpack://@mdn/fred/./node_modules/@mdn/yari/client/src/flaw-utils.js","webpack://@mdn/fred/./node_modules/@mdn/yari/client/src/flaws/index.tsx","webpack://@mdn/fred/./node_modules/@mdn/yari/client/src/ui/molecules/paginator/index.tsx"],"sourcesContent":["/**\n * This file serves to help flaws when displayed one at a time and when\n * displayed in batches.\n *\n */\n\nexport function humanizeFlawName(name) {\n const verboseNames = {\n // List all the names that can't be nicely computed by the fallback()\n // function.\n bad_bcd_queries: \"Bad BCD queries\",\n bad_pre_tags: \"Bad <pre> tags\",\n unsafe_html: \"Unsafe HTML\",\n };\n function fallback() {\n return name.charAt(0).toUpperCase() + name.slice(1).replace(/_/g, \" \");\n }\n return verboseNames[name] || fallback();\n}\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { createSearchParams, Link, useSearchParams } from \"react-router-dom\";\nimport useSWR from \"swr\";\n\nimport \"./index.scss\";\n\nimport { humanizeFlawName } from \"../flaw-utils\";\nimport { MainContentContainer } from \"../ui/atoms/page-content\";\nimport { Paginator } from \"../ui/molecules/paginator\";\nimport { useLocale } from \"../hooks\";\n\ninterface DocumentPopularity {\n value: number;\n ranking: number;\n}\n\ninterface DocumentFlaws {\n name: string;\n value: number | string;\n countFixable: number;\n}\ninterface Document {\n mdn_url: string;\n modified: string;\n title: string;\n popularity: DocumentPopularity;\n flaws: DocumentFlaws[];\n}\n\ntype Count = { [key: string]: number };\n\ninterface FlawsCounts {\n total: number;\n fixable: number;\n type: Count;\n macros: Count;\n}\n\ninterface Counts {\n found: number;\n built: number;\n pages: number;\n flaws: FlawsCounts;\n}\n\ninterface Times {\n built: number;\n}\n\ninterface FlawLevel {\n name: string;\n level: string;\n ignored: boolean;\n}\n\ninterface Data {\n counts: Counts;\n documents: Document[];\n times: Times;\n flawLevels: FlawLevel[];\n}\n\ninterface Filters {\n mdn_url: string;\n title: string;\n popularity: string;\n fixableFlaws: string;\n flaws: string[];\n page: number;\n sort_by: string;\n sort_reverse: boolean;\n search_flaws: string[];\n}\n\nconst defaultFilters: Filters = Object.freeze({\n mdn_url: \"\",\n title: \"\",\n popularity: \"\",\n fixableFlaws: \"\",\n flaws: [],\n page: 1,\n sort_by: \"popularity\",\n sort_reverse: false,\n search_flaws: [],\n});\n\nfunction withoutDefaultFilters(filters: Filters): Partial<Filters> {\n return Object.fromEntries(\n Object.entries(filters).filter(\n ([key, value]) =>\n JSON.stringify(defaultFilters[key]) !== JSON.stringify(value)\n )\n );\n}\n\n/**\n * Returns an array where\n * first element is the currently set (or default) filters\n * second element is a function to update a given set of partial filters.\n * NOTE: This only changes the given filters, and doesn't reset what is missing\n */\nfunction useFiltersURL(): [Filters, (filters: Partial<Filters>) => void] {\n const [searchParams, setSearchParams] = useSearchParams();\n\n function groupParamsByKey(params: URLSearchParams): any {\n return [...params.entries()].reduce((acc, tuple) => {\n // getting the key and value from each tuple\n const [key, val] = tuple;\n if (Object.prototype.hasOwnProperty.call(acc, key)) {\n // if the current key is already an array, we'll add the value to it\n if (Array.isArray(acc[key])) {\n acc[key] = [...acc[key], val];\n } else {\n // if it's not an array, but contains a value, we'll convert it into an array\n // and add the current value to it\n acc[key] = [acc[key], val];\n }\n } else {\n // plain assignment if no special case is present\n acc[key] = val;\n }\n return acc;\n }, {});\n }\n\n const filters = useMemo(() => {\n const searchParamsObject = groupParamsByKey(searchParams);\n if (searchParamsObject.page) {\n searchParamsObject.page = parseInt(searchParamsObject.page);\n }\n return { ...defaultFilters, ...searchParamsObject };\n }, [searchParams]);\n\n const updateFiltersURL = useCallback(\n (partialFilters: Partial<Filters>) => {\n const newSearchParams = withoutDefaultFilters({\n ...filters,\n ...partialFilters,\n }) as Record<string, string | string[]>;\n setSearchParams(newSearchParams);\n },\n [filters, setSearchParams]\n );\n\n const mustBeArrayKeys = [\"flaws\", \"search_flaws\"];\n for (const key of mustBeArrayKeys) {\n if (filters[key] && !Array.isArray(filters[key])) {\n filters[key] = [filters[key]];\n }\n }\n\n return [filters, updateFiltersURL];\n}\n\nexport default function AllFlaws() {\n const locale = useLocale();\n const [filters] = useFiltersURL();\n const [lastData, setLastData] = useState<Data | null>(null);\n\n useEffect(() => {\n let title = \"Documents with flaws\";\n if (lastData) {\n title = `(${lastData.counts.found.toLocaleString()} found) ${title}`;\n }\n document.title = title;\n }, [lastData]);\n\n const getAPIUrl = useCallback(() => {\n const { sort_by, sort_reverse, page, ...restFilters } = filters;\n const params = createSearchParams({\n ...restFilters,\n page: String(page),\n locale,\n sort: sort_by,\n reverse: JSON.stringify(sort_reverse),\n });\n return `/_flaws?${params.toString()}`;\n }, [locale, filters]);\n\n const { data, error, isValidating } = useSWR<Data, Error>(\n getAPIUrl(),\n async (url) => {\n let response;\n try {\n response = await fetch(url);\n } catch (ex) {\n throw ex;\n }\n if (!response.ok) {\n throw new Error(`${response.status} on ${url}`);\n }\n if (!response.headers.get(\"content-type\").includes(\"application/json\")) {\n throw new Error(\n `Response is not JSON (${response.headers.get(\"content-type\")})`\n );\n }\n // Always return a promise!\n return response.json();\n },\n {\n // revalidateOnFocus: false\n }\n );\n\n useEffect(() => {\n if (data) {\n setLastData(data);\n }\n }, [data]);\n\n // XXX there's something weird about this logic\n let loading: React.ReactNode = <small>&nbsp;</small>;\n if (!data && !error) {\n if (lastData) {\n loading = <small>Reloading...</small>;\n } else {\n loading = <small>Loading...</small>;\n }\n } else if (isValidating) {\n loading = <small>Reloading...</small>;\n }\n\n const { page } = filters;\n const pageCount = lastData ? lastData.counts.pages : 0;\n return (\n <MainContentContainer className=\"all-flaws\" standalone={true}>\n {loading}\n {error && <ShowSearchError error={error} />}\n {lastData && (\n <div className=\"filter-documents\">\n <FilterControls flawLevels={lastData.flawLevels} />\n <DocumentsTable\n locale={locale}\n counts={lastData.counts}\n documents={lastData.documents}\n pageCount={pageCount}\n page={page}\n />\n </div>\n )}\n {data && data.counts && <AllFlawCounts counts={data.counts.flaws} />}\n {data && <BuildTimes times={data.times} />}\n </MainContentContainer>\n );\n}\n\nfunction ShowSearchError({ error }) {\n return (\n <div className=\"error-message search-error\">\n <h3>Search error</h3>\n <pre>{error.toString()}</pre>\n </div>\n );\n}\n\nfunction BuildTimes({ times }: { times: Times }) {\n function format(ms: number) {\n if (ms > 1000) {\n const s = ms / 1000;\n return `${s.toFixed(1)} seconds`;\n } else {\n return `${Math.trunc(ms)} milliseconds`;\n }\n }\n return (\n <div className=\"search-times\">\n <p>Time to find built documents {format(times.built)}</p>\n </div>\n );\n}\n\ninterface SearchFlawRow {\n flaw: string;\n search: string;\n}\n\nfunction serializeSearchFlaws(rows: SearchFlawRow[]) {\n return rows.map((row) => `${row.flaw}:${row.search}`);\n}\n\nfunction deserializeSearchFlaws(list: string[]) {\n const rows: SearchFlawRow[] = [];\n for (const row of list) {\n const [flaw, search] = row.split(\":\", 2);\n rows.push({ flaw, search });\n }\n return rows;\n}\n\nfunction FilterControls({ flawLevels }: { flawLevels: FlawLevel[] }) {\n const [initialFilters, updateFiltersURL] = useFiltersURL();\n const [filters, setFilters] = useState(initialFilters);\n const [searchFlawsRows, setSearchFlawsRows] = useState<SearchFlawRow[]>(\n deserializeSearchFlaws(initialFilters.search_flaws)\n );\n\n useEffect(() => {\n // A little convenience DOM trick to put focus on the search input\n // after you've added a row or used the <select>\n const searchInputs = [\n ...document.querySelectorAll<HTMLInputElement>(\n 'ul.search-flaws-rows input[type=\"search\"]'\n ),\n ].filter((input) => !input.value);\n if (searchInputs.length) {\n searchInputs[searchInputs.length - 1].focus();\n }\n }, [searchFlawsRows]);\n\n function refreshFilters() {\n updateFiltersURL(filters);\n }\n\n let hasFilters = !equalObjects(defaultFilters, filters);\n\n let hasEmptySearchFlawsRow = searchFlawsRows.some(\n (row) => !row.search.trim()\n );\n\n function resetFilters(event: React.MouseEvent) {\n event.preventDefault();\n setFilters(defaultFilters);\n updateFiltersURL(defaultFilters);\n }\n\n return (\n <div className=\"filters\">\n <h3>Filters</h3>\n <form\n onSubmit={(event) => {\n event.preventDefault();\n refreshFilters();\n }}\n >\n <div>\n <h4>Document</h4>\n <input\n type=\"search\"\n placeholder=\"Filter by document URI\"\n value={filters.mdn_url}\n onChange={(event) => {\n setFilters({ ...filters, mdn_url: event.target.value });\n }}\n onBlur={refreshFilters}\n />\n <input\n type=\"search\"\n placeholder=\"Filter by document title\"\n value={filters.title}\n onChange={(event) => {\n setFilters({ ...filters, title: event.target.value });\n }}\n onBlur={refreshFilters}\n />\n </div>\n\n <div>\n <h4>Popularity</h4>\n <input\n type=\"search\"\n placeholder=\"E.g. < 100\"\n value={filters.popularity || \"\"}\n onChange={(event) => {\n setFilters({ ...filters, popularity: event.target.value });\n }}\n onBlur={refreshFilters}\n />\n </div>\n <div>\n <h4>Flaws</h4>\n <select\n multiple={true}\n value={filters.flaws}\n onChange={(event) => {\n const flaws = [...event.target.selectedOptions].map(\n (opt) => opt.value\n );\n setFilters({ ...filters, flaws });\n }}\n >\n {flawLevels &&\n flawLevels.map((flawLevel) => {\n return (\n <option key={flawLevel.name} value={flawLevel.name}>\n {humanizeFlawName(flawLevel.name)}{\" \"}\n {flawLevel.ignored && \"(ignored)\"}\n </option>\n );\n })}\n </select>\n </div>\n <div>\n <h4>Search inside flaws</h4>\n <ul className=\"search-flaws-rows\">\n {searchFlawsRows.map((row, i) => {\n return (\n <li key={`${row.flaw}:${i}`}>\n <select\n value={row.flaw}\n onChange={(event) => {\n const clone = [...searchFlawsRows];\n clone[i].flaw = event.target.value;\n setSearchFlawsRows(clone);\n }}\n >\n {flawLevels &&\n flawLevels\n .filter((flawLevel) => !flawLevel.ignored)\n .map((flawLevel) => {\n return (\n <option key={flawLevel.name} value={flawLevel.name}>\n {humanizeFlawName(flawLevel.name)}\n </option>\n );\n })}\n </select>\n <input\n type=\"search\"\n placeholder=\"Search expression (e.g. jsxref)\"\n value={row.search}\n onChange={(event) => {\n setSearchFlawsRows(\n searchFlawsRows.map((row, j) => {\n if (i === j) {\n row.search = event.target.value;\n }\n return row;\n })\n );\n }}\n onBlur={() => {\n const serialized = serializeSearchFlaws(searchFlawsRows);\n setFilters({ ...filters, search_flaws: serialized });\n refreshFilters();\n }}\n />\n <button\n type=\"button\"\n title=\"Remove search row\"\n onClick={() => {\n const clone = [...searchFlawsRows];\n clone.splice(i, 1);\n setSearchFlawsRows(clone);\n\n // const serialized = serializeSearchFlaws(searchFlawsRows);\n // setFilters({ ...filters, search_flaws: serialized });\n // refreshFilters()\n }}\n >\n -\n </button>\n </li>\n );\n })}\n </ul>\n <button\n type=\"button\"\n title=\"Add search row\"\n disabled={hasEmptySearchFlawsRow}\n onClick={() => {\n setSearchFlawsRows([\n ...searchFlawsRows,\n ...[\n {\n flaw: \"macros\",\n search: \"\",\n },\n ],\n ]);\n }}\n >\n +\n </button>\n </div>\n\n <div>\n <h4>Fixable flaws</h4>\n <input\n type=\"search\"\n placeholder=\"E.g. >0\"\n value={filters.fixableFlaws || \"\"}\n onChange={(event) => {\n setFilters({ ...filters, fixableFlaws: event.target.value });\n }}\n onBlur={refreshFilters}\n />\n </div>\n\n <div>\n <h4>&nbsp;</h4>\n <button type=\"submit\">Filter now</button>\n {hasFilters && (\n <button type=\"button\" onClick={resetFilters}>\n Reset filters\n </button>\n )}\n </div>\n </form>\n </div>\n );\n}\n\nfunction equalObjects(obj1: object, obj2: object) {\n const keys1 = new Set(Object.keys(obj1));\n const keys2 = new Set(Object.keys(obj2));\n if (keys1.size !== keys2.size) {\n return false;\n }\n for (const key of keys1) {\n if (!keys2.has(key)) {\n return false;\n }\n }\n\n return Object.entries(obj1).every(([key, value]) => {\n const value2 = obj2[key];\n if (typeof value !== typeof value2) {\n return false;\n }\n if (Array.isArray(value)) {\n return (\n value.length === value2.length && value.every((v, i) => v === value2[i])\n );\n } else {\n return value === value2;\n }\n });\n}\n\nfunction DocumentsTable({\n locale,\n counts,\n documents,\n pageCount,\n page,\n}: {\n locale: string;\n counts: Counts;\n documents: Document[];\n pageCount: number;\n page: number;\n}) {\n const [filters, updateFiltersURL] = useFiltersURL();\n\n function setSort(key: string): void {\n updateFiltersURL(\n filters.sort_by === key\n ? { sort_reverse: !filters.sort_reverse }\n : { sort_by: key }\n );\n }\n // https://gist.github.com/jlbruno/1535691/db35b4f3af3dcbb42babc01541410f291a8e8fac\n function getGetOrdinal(n: number) {\n const s = [\"th\", \"st\", \"nd\", \"rd\"];\n const v = n % 100;\n return n.toLocaleString() + (s[(v - 20) % 10] || s[v] || s[0]);\n }\n\n function summarizeFlaws(flaws: DocumentFlaws[]) {\n // Return a one-liner about all the flaws\n const totalCountFixable = flaws.reduce(\n (acc, flaw) => flaw.countFixable + acc,\n 0\n );\n const bits = flaws.map((flaw) => {\n return `${humanizeFlawName(flaw.name)}: ${flaw.value}`;\n });\n return (\n <>\n {bits.join(\", \")}{\" \"}\n <span className=\"document-flaws-fixable\">\n ({totalCountFixable} fixable)\n </span>\n </>\n );\n }\n\n function TH({ id, title }: { id: string; title: string }) {\n return (\n <th onClick={() => setSort(id)} className=\"sortable\">\n {title}{\" \"}\n {filters.sort_by === id ? (filters.sort_reverse ? \"↓\" : \"↑\") : null}\n </th>\n );\n }\n\n function getHighlightedText(text: string, highlight: string) {\n // Split on highlight term and include term into parts, ignore case\n const parts = text.split(new RegExp(`(${highlight})`, \"gi\"));\n return (\n <span>\n {\" \"}\n {parts.map((part, i) => (\n <span\n key={i}\n style={\n part.toLowerCase() === highlight.toLowerCase()\n ? { fontWeight: \"bold\" }\n : {}\n }\n >\n {part}\n </span>\n ))}{\" \"}\n </span>\n );\n }\n\n function showBriefURL(uri: string) {\n const [left, right] = uri.split(/\\/docs\\//, 2);\n return (\n <>\n <span className=\"url-prefix\">{left}/docs/</span>\n <span className=\"url-slug\">\n {filters.mdn_url ? getHighlightedText(right, filters.mdn_url) : right}\n </span>\n </>\n );\n }\n\n return (\n <div className=\"documents\">\n <h3>\n Documents with flaws found ({counts.found.toLocaleString()}){\" \"}\n {pageCount > 1 && (\n <span className=\"page\">\n page {page}/{pageCount}\n </span>\n )}\n </h3>\n {!counts.built ? (\n <WarnAboutNothingBuilt locale={locale} />\n ) : (\n <h4 className=\"subheader\">\n {counts.built.toLocaleString()} documents built ({locale})\n </h4>\n )}\n\n <table>\n <thead>\n <tr>\n <TH id=\"mdn_url\" title=\"Document\" />\n <TH id=\"popularity\" title=\"Popularity\" />\n <TH id=\"flaws\" title=\"Flaws\" />\n </tr>\n </thead>\n <tbody>\n {documents.map((doc: Document) => {\n return (\n <tr key={doc.mdn_url}>\n <td>\n <Link\n to={`${doc.mdn_url}#_flaws`}\n title={doc.title}\n target=\"_blank\"\n >\n {showBriefURL(doc.mdn_url)}\n </Link>\n <span className=\"document-title-preview\">\n {filters.title\n ? getHighlightedText(doc.title, filters.title)\n : doc.title}\n </span>\n </td>\n <td\n className={doc.popularity.ranking ? \"\" : \"no-popularity\"}\n title={\n doc.popularity.ranking\n ? `Meaning there are ${\n doc.popularity.ranking - 1\n } more popular pages than this`\n : \"Meaning it has no ranking. Most likely a very rare (or new) document\"\n }\n >\n {!doc.popularity.ranking\n ? \"n/a\"\n : `${getGetOrdinal(doc.popularity.ranking)}`}\n </td>\n <td className=\"document-flaws\">{summarizeFlaws(doc.flaws)}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n\n <Paginator last={pageCount} />\n </div>\n );\n}\n\nfunction WarnAboutNothingBuilt({ locale }) {\n return (\n <div className=\"notecard warning document-warnings\">\n <h4>No documents have been built, so no flaws can be found</h4>\n <p>\n Run <code>yarn build --locale {locale.toLowerCase()}</code> to build all\n documents for the current locale.\n </p>\n </div>\n );\n}\n\nfunction AllFlawCounts({ counts }: { counts: FlawsCounts }) {\n const typesSorted = Object.entries(counts.type).sort((a, b) => {\n return a[1] - b[1];\n });\n const macrosSorted = Object.entries(counts.macros).sort((a, b) => {\n return a[1] - b[1];\n });\n return (\n <div className=\"flaw-counts\">\n <h3>Flaws counts</h3>\n <table>\n <tbody>\n <tr>\n <td>Total</td>\n <td>\n <b>{counts.total.toLocaleString()}</b>\n </td>\n </tr>\n <tr>\n <td>Fixable</td>\n <td>\n <b>{counts.fixable.toLocaleString()}</b>\n </td>\n </tr>\n </tbody>\n </table>\n\n <h4>Breakdown by type</h4>\n <table>\n <thead>\n <tr>\n <th>Type</th>\n <th>Count</th>\n </tr>\n </thead>\n <tbody>\n {typesSorted.map(([key, value]) => {\n return (\n <tr key={key}>\n <td>{humanizeFlawName(key)}</td>\n <td>\n <b>{value.toLocaleString()}</b>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n <h4>\n Breakdown by <code>macros</code> flaws\n </h4>\n <table>\n <thead>\n <tr>\n <th>Name</th>\n <th>Count</th>\n </tr>\n </thead>\n <tbody>\n {macrosSorted.map(([key, value]) => {\n return (\n <tr key={key}>\n <td>\n <code>{key}</code>\n </td>\n <td>\n <b>{value.toLocaleString()}</b>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n","import { Link, useSearchParams } from \"react-router-dom\";\nimport { range } from \"../../../utils\";\n\nconst PARAM = \"page\";\n\nfunction PageLink({\n page,\n children,\n onClick,\n disabled,\n}: {\n page: number;\n children?: React.ReactNode;\n onClick?: (page: number) => unknown;\n disabled?: boolean;\n}) {\n const [searchParams, setSearchParams] = useSearchParams();\n\n return (\n <Link\n to={{}}\n className={disabled ? \"disabled\" : \"\"}\n onClick={(event) => {\n event.preventDefault();\n if (disabled) {\n return;\n }\n\n onClick && onClick(page);\n setSearchParams({\n ...Object.fromEntries(searchParams.entries()),\n [PARAM]: page.toString(),\n });\n\n window.setTimeout(() => document.documentElement.scrollTo());\n }}\n >\n {children || page}\n </Link>\n );\n}\n\nexport function Paginator({\n first = 1,\n last,\n endPadding = 2,\n middlePadding = 2,\n onChange,\n}: {\n first?: number;\n last: number;\n endPadding?: number;\n middlePadding?: number;\n onChange?: (page: number, oldPage: number) => unknown;\n}) {\n const [searchParams] = useSearchParams();\n const current = parseInt(searchParams.get(PARAM) || \"\", 10) || first;\n const middleFirst = Math.max(current - middlePadding, first);\n const middleLast = Math.min(middleFirst + middlePadding * 2 + 1, last + 1);\n const left = range(first, Math.min(endPadding, middleFirst));\n const middle = range(middleFirst, middleLast);\n const right = range(Math.max(last + 1 - endPadding, middleLast), last + 1);\n\n const onClick = (page: number) => {\n onChange && onChange(page, current);\n };\n\n if (first === last) {\n // There are no pages, so return nothing\n return <></>;\n }\n\n return (\n <div className=\"pagination\">\n <PageLink\n page={current - 1}\n onClick={onClick}\n disabled={current === first}\n >\n ← Previous\n </PageLink>\n {left.map((page) => (\n <PageLink key={page} page={page} onClick={onClick} />\n ))}\n {Boolean(left.length) && left[left.length - 1] + 1 !== middle[0] && \"…\"}\n {middle.map((page) =>\n current === page ? (\n <span className=\"current-page\" key={page}>\n {page}\n </span>\n ) : (\n <PageLink key={page} page={page} onClick={onClick} />\n )\n )}\n {Boolean(right.length) &&\n middle[middle.length - 1] + 1 !== right[0] &&\n \"…\"}\n {right.map((page) => (\n <PageLink key={page} page={page} onClick={onClick} />\n ))}\n <PageLink\n page={current + 1}\n onClick={onClick}\n disabled={current === last}\n >\n Next →\n </PageLink>\n </div>\n );\n}\n"],"names":["defaultFilters","Object","useFiltersURL","_useSearchParams","searchParams","setSearchParams","filters","useMemo","searchParamsObject","params","acc","tuple","_tuple","key","val","Array","parseInt","updateFiltersURL","useCallback","partialFilters","value","JSON","_iteratorError","mustBeArrayKeys","AllFlaws","locale","useLocale","_useFiltersURL","_useState","lastData","setLastData","useEffect","title","document","getAPIUrl","sort_by","sort_reverse","page","restFilters","createSearchParams","String","_useSWR","url","response","fetch","ex","Error","data","error","isValidating","loading","pageCount","MainContentContainer","ShowSearchError","FilterControls","DocumentsTable","AllFlawCounts","BuildTimes","param","ms","times","s","Math","flawLevels","initialFilters","setFilters","_useState1","deserializeSearchFlaws","list","rows","row","_row_split","flaw","search","searchFlawsRows","setSearchFlawsRows","refreshFilters","searchInputs","input","hasFilters","equalObjects","obj1","obj2","keys1","Set","keys2","value2","_type_of","v","i","hasEmptySearchFlawsRow","event","flaws","opt","flawLevel","humanizeFlawName","clone","j","serialized","counts","documents","TH","id","getHighlightedText","text","highlight","parts","RegExp","part","WarnAboutNothingBuilt","doc","_uri_split","left","right","n","totalCountFixable","bits","Link","Paginator","typesSorted","a","b","macrosSorted","PARAM","PageLink","children","onClick","disabled","window","first","last","endPadding","middlePadding","onChange","current","middleFirst","middleLast","range","middle","Boolean"],"mappings":"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"}
1
+ {"version":3,"file":"8504.d5df18204dd2b2ef.js","sources":["webpack://@mdn/fred/./node_modules/@mdn/yari/client/src/flaw-utils.js","webpack://@mdn/fred/./node_modules/@mdn/yari/client/src/flaws/index.tsx","webpack://@mdn/fred/./node_modules/@mdn/yari/client/src/ui/molecules/paginator/index.tsx"],"sourcesContent":["/**\n * This file serves to help flaws when displayed one at a time and when\n * displayed in batches.\n *\n */\n\nexport function humanizeFlawName(name) {\n const verboseNames = {\n // List all the names that can't be nicely computed by the fallback()\n // function.\n bad_bcd_queries: \"Bad BCD queries\",\n bad_pre_tags: \"Bad <pre> tags\",\n unsafe_html: \"Unsafe HTML\",\n };\n function fallback() {\n return name.charAt(0).toUpperCase() + name.slice(1).replace(/_/g, \" \");\n }\n return verboseNames[name] || fallback();\n}\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { createSearchParams, Link, useSearchParams } from \"react-router-dom\";\nimport useSWR from \"swr\";\n\nimport \"./index.scss\";\n\nimport { humanizeFlawName } from \"../flaw-utils\";\nimport { MainContentContainer } from \"../ui/atoms/page-content\";\nimport { Paginator } from \"../ui/molecules/paginator\";\nimport { useLocale } from \"../hooks\";\n\ninterface DocumentPopularity {\n value: number;\n ranking: number;\n}\n\ninterface DocumentFlaws {\n name: string;\n value: number | string;\n countFixable: number;\n}\ninterface Document {\n mdn_url: string;\n modified: string;\n title: string;\n popularity: DocumentPopularity;\n flaws: DocumentFlaws[];\n}\n\ntype Count = { [key: string]: number };\n\ninterface FlawsCounts {\n total: number;\n fixable: number;\n type: Count;\n macros: Count;\n}\n\ninterface Counts {\n found: number;\n built: number;\n pages: number;\n flaws: FlawsCounts;\n}\n\ninterface Times {\n built: number;\n}\n\ninterface FlawLevel {\n name: string;\n level: string;\n ignored: boolean;\n}\n\ninterface Data {\n counts: Counts;\n documents: Document[];\n times: Times;\n flawLevels: FlawLevel[];\n}\n\ninterface Filters {\n mdn_url: string;\n title: string;\n popularity: string;\n fixableFlaws: string;\n flaws: string[];\n page: number;\n sort_by: string;\n sort_reverse: boolean;\n search_flaws: string[];\n}\n\nconst defaultFilters: Filters = Object.freeze({\n mdn_url: \"\",\n title: \"\",\n popularity: \"\",\n fixableFlaws: \"\",\n flaws: [],\n page: 1,\n sort_by: \"popularity\",\n sort_reverse: false,\n search_flaws: [],\n});\n\nfunction withoutDefaultFilters(filters: Filters): Partial<Filters> {\n return Object.fromEntries(\n Object.entries(filters).filter(\n ([key, value]) =>\n JSON.stringify(defaultFilters[key]) !== JSON.stringify(value)\n )\n );\n}\n\n/**\n * Returns an array where\n * first element is the currently set (or default) filters\n * second element is a function to update a given set of partial filters.\n * NOTE: This only changes the given filters, and doesn't reset what is missing\n */\nfunction useFiltersURL(): [Filters, (filters: Partial<Filters>) => void] {\n const [searchParams, setSearchParams] = useSearchParams();\n\n function groupParamsByKey(params: URLSearchParams): any {\n return [...params.entries()].reduce((acc, tuple) => {\n // getting the key and value from each tuple\n const [key, val] = tuple;\n if (Object.prototype.hasOwnProperty.call(acc, key)) {\n // if the current key is already an array, we'll add the value to it\n if (Array.isArray(acc[key])) {\n acc[key] = [...acc[key], val];\n } else {\n // if it's not an array, but contains a value, we'll convert it into an array\n // and add the current value to it\n acc[key] = [acc[key], val];\n }\n } else {\n // plain assignment if no special case is present\n acc[key] = val;\n }\n return acc;\n }, {});\n }\n\n const filters = useMemo(() => {\n const searchParamsObject = groupParamsByKey(searchParams);\n if (searchParamsObject.page) {\n searchParamsObject.page = parseInt(searchParamsObject.page);\n }\n return { ...defaultFilters, ...searchParamsObject };\n }, [searchParams]);\n\n const updateFiltersURL = useCallback(\n (partialFilters: Partial<Filters>) => {\n const newSearchParams = withoutDefaultFilters({\n ...filters,\n ...partialFilters,\n }) as Record<string, string | string[]>;\n setSearchParams(newSearchParams);\n },\n [filters, setSearchParams]\n );\n\n const mustBeArrayKeys = [\"flaws\", \"search_flaws\"];\n for (const key of mustBeArrayKeys) {\n if (filters[key] && !Array.isArray(filters[key])) {\n filters[key] = [filters[key]];\n }\n }\n\n return [filters, updateFiltersURL];\n}\n\nexport default function AllFlaws() {\n const locale = useLocale();\n const [filters] = useFiltersURL();\n const [lastData, setLastData] = useState<Data | null>(null);\n\n useEffect(() => {\n let title = \"Documents with flaws\";\n if (lastData) {\n title = `(${lastData.counts.found.toLocaleString()} found) ${title}`;\n }\n document.title = title;\n }, [lastData]);\n\n const getAPIUrl = useCallback(() => {\n const { sort_by, sort_reverse, page, ...restFilters } = filters;\n const params = createSearchParams({\n ...restFilters,\n page: String(page),\n locale,\n sort: sort_by,\n reverse: JSON.stringify(sort_reverse),\n });\n return `/_flaws?${params.toString()}`;\n }, [locale, filters]);\n\n const { data, error, isValidating } = useSWR<Data, Error>(\n getAPIUrl(),\n async (url) => {\n let response;\n try {\n response = await fetch(url);\n } catch (ex) {\n throw ex;\n }\n if (!response.ok) {\n throw new Error(`${response.status} on ${url}`);\n }\n if (!response.headers.get(\"content-type\").includes(\"application/json\")) {\n throw new Error(\n `Response is not JSON (${response.headers.get(\"content-type\")})`\n );\n }\n // Always return a promise!\n return response.json();\n },\n {\n // revalidateOnFocus: false\n }\n );\n\n useEffect(() => {\n if (data) {\n setLastData(data);\n }\n }, [data]);\n\n // XXX there's something weird about this logic\n let loading: React.ReactNode = <small>&nbsp;</small>;\n if (!data && !error) {\n if (lastData) {\n loading = <small>Reloading...</small>;\n } else {\n loading = <small>Loading...</small>;\n }\n } else if (isValidating) {\n loading = <small>Reloading...</small>;\n }\n\n const { page } = filters;\n const pageCount = lastData ? lastData.counts.pages : 0;\n return (\n <MainContentContainer className=\"all-flaws\" standalone={true}>\n {loading}\n {error && <ShowSearchError error={error} />}\n {lastData && (\n <div className=\"filter-documents\">\n <FilterControls flawLevels={lastData.flawLevels} />\n <DocumentsTable\n locale={locale}\n counts={lastData.counts}\n documents={lastData.documents}\n pageCount={pageCount}\n page={page}\n />\n </div>\n )}\n {data && data.counts && <AllFlawCounts counts={data.counts.flaws} />}\n {data && <BuildTimes times={data.times} />}\n </MainContentContainer>\n );\n}\n\nfunction ShowSearchError({ error }) {\n return (\n <div className=\"error-message search-error\">\n <h3>Search error</h3>\n <pre>{error.toString()}</pre>\n </div>\n );\n}\n\nfunction BuildTimes({ times }: { times: Times }) {\n function format(ms: number) {\n if (ms > 1000) {\n const s = ms / 1000;\n return `${s.toFixed(1)} seconds`;\n } else {\n return `${Math.trunc(ms)} milliseconds`;\n }\n }\n return (\n <div className=\"search-times\">\n <p>Time to find built documents {format(times.built)}</p>\n </div>\n );\n}\n\ninterface SearchFlawRow {\n flaw: string;\n search: string;\n}\n\nfunction serializeSearchFlaws(rows: SearchFlawRow[]) {\n return rows.map((row) => `${row.flaw}:${row.search}`);\n}\n\nfunction deserializeSearchFlaws(list: string[]) {\n const rows: SearchFlawRow[] = [];\n for (const row of list) {\n const [flaw, search] = row.split(\":\", 2);\n rows.push({ flaw, search });\n }\n return rows;\n}\n\nfunction FilterControls({ flawLevels }: { flawLevels: FlawLevel[] }) {\n const [initialFilters, updateFiltersURL] = useFiltersURL();\n const [filters, setFilters] = useState(initialFilters);\n const [searchFlawsRows, setSearchFlawsRows] = useState<SearchFlawRow[]>(\n deserializeSearchFlaws(initialFilters.search_flaws)\n );\n\n useEffect(() => {\n // A little convenience DOM trick to put focus on the search input\n // after you've added a row or used the <select>\n const searchInputs = [\n ...document.querySelectorAll<HTMLInputElement>(\n 'ul.search-flaws-rows input[type=\"search\"]'\n ),\n ].filter((input) => !input.value);\n if (searchInputs.length) {\n searchInputs[searchInputs.length - 1].focus();\n }\n }, [searchFlawsRows]);\n\n function refreshFilters() {\n updateFiltersURL(filters);\n }\n\n let hasFilters = !equalObjects(defaultFilters, filters);\n\n let hasEmptySearchFlawsRow = searchFlawsRows.some(\n (row) => !row.search.trim()\n );\n\n function resetFilters(event: React.MouseEvent) {\n event.preventDefault();\n setFilters(defaultFilters);\n updateFiltersURL(defaultFilters);\n }\n\n return (\n <div className=\"filters\">\n <h3>Filters</h3>\n <form\n onSubmit={(event) => {\n event.preventDefault();\n refreshFilters();\n }}\n >\n <div>\n <h4>Document</h4>\n <input\n type=\"search\"\n placeholder=\"Filter by document URI\"\n value={filters.mdn_url}\n onChange={(event) => {\n setFilters({ ...filters, mdn_url: event.target.value });\n }}\n onBlur={refreshFilters}\n />\n <input\n type=\"search\"\n placeholder=\"Filter by document title\"\n value={filters.title}\n onChange={(event) => {\n setFilters({ ...filters, title: event.target.value });\n }}\n onBlur={refreshFilters}\n />\n </div>\n\n <div>\n <h4>Popularity</h4>\n <input\n type=\"search\"\n placeholder=\"E.g. < 100\"\n value={filters.popularity || \"\"}\n onChange={(event) => {\n setFilters({ ...filters, popularity: event.target.value });\n }}\n onBlur={refreshFilters}\n />\n </div>\n <div>\n <h4>Flaws</h4>\n <select\n multiple={true}\n value={filters.flaws}\n onChange={(event) => {\n const flaws = [...event.target.selectedOptions].map(\n (opt) => opt.value\n );\n setFilters({ ...filters, flaws });\n }}\n >\n {flawLevels &&\n flawLevels.map((flawLevel) => {\n return (\n <option key={flawLevel.name} value={flawLevel.name}>\n {humanizeFlawName(flawLevel.name)}{\" \"}\n {flawLevel.ignored && \"(ignored)\"}\n </option>\n );\n })}\n </select>\n </div>\n <div>\n <h4>Search inside flaws</h4>\n <ul className=\"search-flaws-rows\">\n {searchFlawsRows.map((row, i) => {\n return (\n <li key={`${row.flaw}:${i}`}>\n <select\n value={row.flaw}\n onChange={(event) => {\n const clone = [...searchFlawsRows];\n clone[i].flaw = event.target.value;\n setSearchFlawsRows(clone);\n }}\n >\n {flawLevels &&\n flawLevels\n .filter((flawLevel) => !flawLevel.ignored)\n .map((flawLevel) => {\n return (\n <option key={flawLevel.name} value={flawLevel.name}>\n {humanizeFlawName(flawLevel.name)}\n </option>\n );\n })}\n </select>\n <input\n type=\"search\"\n placeholder=\"Search expression (e.g. jsxref)\"\n value={row.search}\n onChange={(event) => {\n setSearchFlawsRows(\n searchFlawsRows.map((row, j) => {\n if (i === j) {\n row.search = event.target.value;\n }\n return row;\n })\n );\n }}\n onBlur={() => {\n const serialized = serializeSearchFlaws(searchFlawsRows);\n setFilters({ ...filters, search_flaws: serialized });\n refreshFilters();\n }}\n />\n <button\n type=\"button\"\n title=\"Remove search row\"\n onClick={() => {\n const clone = [...searchFlawsRows];\n clone.splice(i, 1);\n setSearchFlawsRows(clone);\n\n // const serialized = serializeSearchFlaws(searchFlawsRows);\n // setFilters({ ...filters, search_flaws: serialized });\n // refreshFilters()\n }}\n >\n -\n </button>\n </li>\n );\n })}\n </ul>\n <button\n type=\"button\"\n title=\"Add search row\"\n disabled={hasEmptySearchFlawsRow}\n onClick={() => {\n setSearchFlawsRows([\n ...searchFlawsRows,\n ...[\n {\n flaw: \"macros\",\n search: \"\",\n },\n ],\n ]);\n }}\n >\n +\n </button>\n </div>\n\n <div>\n <h4>Fixable flaws</h4>\n <input\n type=\"search\"\n placeholder=\"E.g. >0\"\n value={filters.fixableFlaws || \"\"}\n onChange={(event) => {\n setFilters({ ...filters, fixableFlaws: event.target.value });\n }}\n onBlur={refreshFilters}\n />\n </div>\n\n <div>\n <h4>&nbsp;</h4>\n <button type=\"submit\">Filter now</button>\n {hasFilters && (\n <button type=\"button\" onClick={resetFilters}>\n Reset filters\n </button>\n )}\n </div>\n </form>\n </div>\n );\n}\n\nfunction equalObjects(obj1: object, obj2: object) {\n const keys1 = new Set(Object.keys(obj1));\n const keys2 = new Set(Object.keys(obj2));\n if (keys1.size !== keys2.size) {\n return false;\n }\n for (const key of keys1) {\n if (!keys2.has(key)) {\n return false;\n }\n }\n\n return Object.entries(obj1).every(([key, value]) => {\n const value2 = obj2[key];\n if (typeof value !== typeof value2) {\n return false;\n }\n if (Array.isArray(value)) {\n return (\n value.length === value2.length && value.every((v, i) => v === value2[i])\n );\n } else {\n return value === value2;\n }\n });\n}\n\nfunction DocumentsTable({\n locale,\n counts,\n documents,\n pageCount,\n page,\n}: {\n locale: string;\n counts: Counts;\n documents: Document[];\n pageCount: number;\n page: number;\n}) {\n const [filters, updateFiltersURL] = useFiltersURL();\n\n function setSort(key: string): void {\n updateFiltersURL(\n filters.sort_by === key\n ? { sort_reverse: !filters.sort_reverse }\n : { sort_by: key }\n );\n }\n // https://gist.github.com/jlbruno/1535691/db35b4f3af3dcbb42babc01541410f291a8e8fac\n function getGetOrdinal(n: number) {\n const s = [\"th\", \"st\", \"nd\", \"rd\"];\n const v = n % 100;\n return n.toLocaleString() + (s[(v - 20) % 10] || s[v] || s[0]);\n }\n\n function summarizeFlaws(flaws: DocumentFlaws[]) {\n // Return a one-liner about all the flaws\n const totalCountFixable = flaws.reduce(\n (acc, flaw) => flaw.countFixable + acc,\n 0\n );\n const bits = flaws.map((flaw) => {\n return `${humanizeFlawName(flaw.name)}: ${flaw.value}`;\n });\n return (\n <>\n {bits.join(\", \")}{\" \"}\n <span className=\"document-flaws-fixable\">\n ({totalCountFixable} fixable)\n </span>\n </>\n );\n }\n\n function TH({ id, title }: { id: string; title: string }) {\n return (\n <th onClick={() => setSort(id)} className=\"sortable\">\n {title}{\" \"}\n {filters.sort_by === id ? (filters.sort_reverse ? \"↓\" : \"↑\") : null}\n </th>\n );\n }\n\n function getHighlightedText(text: string, highlight: string) {\n // Split on highlight term and include term into parts, ignore case\n const parts = text.split(new RegExp(`(${highlight})`, \"gi\"));\n return (\n <span>\n {\" \"}\n {parts.map((part, i) => (\n <span\n key={i}\n style={\n part.toLowerCase() === highlight.toLowerCase()\n ? { fontWeight: \"bold\" }\n : {}\n }\n >\n {part}\n </span>\n ))}{\" \"}\n </span>\n );\n }\n\n function showBriefURL(uri: string) {\n const [left, right] = uri.split(/\\/docs\\//, 2);\n return (\n <>\n <span className=\"url-prefix\">{left}/docs/</span>\n <span className=\"url-slug\">\n {filters.mdn_url ? getHighlightedText(right, filters.mdn_url) : right}\n </span>\n </>\n );\n }\n\n return (\n <div className=\"documents\">\n <h3>\n Documents with flaws found ({counts.found.toLocaleString()}){\" \"}\n {pageCount > 1 && (\n <span className=\"page\">\n page {page}/{pageCount}\n </span>\n )}\n </h3>\n {!counts.built ? (\n <WarnAboutNothingBuilt locale={locale} />\n ) : (\n <h4 className=\"subheader\">\n {counts.built.toLocaleString()} documents built ({locale})\n </h4>\n )}\n\n <table>\n <thead>\n <tr>\n <TH id=\"mdn_url\" title=\"Document\" />\n <TH id=\"popularity\" title=\"Popularity\" />\n <TH id=\"flaws\" title=\"Flaws\" />\n </tr>\n </thead>\n <tbody>\n {documents.map((doc: Document) => {\n return (\n <tr key={doc.mdn_url}>\n <td>\n <Link\n to={`${doc.mdn_url}#_flaws`}\n title={doc.title}\n target=\"_blank\"\n >\n {showBriefURL(doc.mdn_url)}\n </Link>\n <span className=\"document-title-preview\">\n {filters.title\n ? getHighlightedText(doc.title, filters.title)\n : doc.title}\n </span>\n </td>\n <td\n className={doc.popularity.ranking ? \"\" : \"no-popularity\"}\n title={\n doc.popularity.ranking\n ? `Meaning there are ${\n doc.popularity.ranking - 1\n } more popular pages than this`\n : \"Meaning it has no ranking. Most likely a very rare (or new) document\"\n }\n >\n {!doc.popularity.ranking\n ? \"n/a\"\n : `${getGetOrdinal(doc.popularity.ranking)}`}\n </td>\n <td className=\"document-flaws\">{summarizeFlaws(doc.flaws)}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n\n <Paginator last={pageCount} />\n </div>\n );\n}\n\nfunction WarnAboutNothingBuilt({ locale }) {\n return (\n <div className=\"notecard warning document-warnings\">\n <h4>No documents have been built, so no flaws can be found</h4>\n <p>\n Run <code>yarn build --locale {locale.toLowerCase()}</code> to build all\n documents for the current locale.\n </p>\n </div>\n );\n}\n\nfunction AllFlawCounts({ counts }: { counts: FlawsCounts }) {\n const typesSorted = Object.entries(counts.type).sort((a, b) => {\n return a[1] - b[1];\n });\n const macrosSorted = Object.entries(counts.macros).sort((a, b) => {\n return a[1] - b[1];\n });\n return (\n <div className=\"flaw-counts\">\n <h3>Flaws counts</h3>\n <table>\n <tbody>\n <tr>\n <td>Total</td>\n <td>\n <b>{counts.total.toLocaleString()}</b>\n </td>\n </tr>\n <tr>\n <td>Fixable</td>\n <td>\n <b>{counts.fixable.toLocaleString()}</b>\n </td>\n </tr>\n </tbody>\n </table>\n\n <h4>Breakdown by type</h4>\n <table>\n <thead>\n <tr>\n <th>Type</th>\n <th>Count</th>\n </tr>\n </thead>\n <tbody>\n {typesSorted.map(([key, value]) => {\n return (\n <tr key={key}>\n <td>{humanizeFlawName(key)}</td>\n <td>\n <b>{value.toLocaleString()}</b>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n <h4>\n Breakdown by <code>macros</code> flaws\n </h4>\n <table>\n <thead>\n <tr>\n <th>Name</th>\n <th>Count</th>\n </tr>\n </thead>\n <tbody>\n {macrosSorted.map(([key, value]) => {\n return (\n <tr key={key}>\n <td>\n <code>{key}</code>\n </td>\n <td>\n <b>{value.toLocaleString()}</b>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n","import { Link, useSearchParams } from \"react-router-dom\";\nimport { range } from \"../../../utils\";\n\nconst PARAM = \"page\";\n\nfunction PageLink({\n page,\n children,\n onClick,\n disabled,\n}: {\n page: number;\n children?: React.ReactNode;\n onClick?: (page: number) => unknown;\n disabled?: boolean;\n}) {\n const [searchParams, setSearchParams] = useSearchParams();\n\n return (\n <Link\n to={{}}\n className={disabled ? \"disabled\" : \"\"}\n onClick={(event) => {\n event.preventDefault();\n if (disabled) {\n return;\n }\n\n onClick && onClick(page);\n setSearchParams({\n ...Object.fromEntries(searchParams.entries()),\n [PARAM]: page.toString(),\n });\n\n window.setTimeout(() => document.documentElement.scrollTo());\n }}\n >\n {children || page}\n </Link>\n );\n}\n\nexport function Paginator({\n first = 1,\n last,\n endPadding = 2,\n middlePadding = 2,\n onChange,\n}: {\n first?: number;\n last: number;\n endPadding?: number;\n middlePadding?: number;\n onChange?: (page: number, oldPage: number) => unknown;\n}) {\n const [searchParams] = useSearchParams();\n const current = parseInt(searchParams.get(PARAM) || \"\", 10) || first;\n const middleFirst = Math.max(current - middlePadding, first);\n const middleLast = Math.min(middleFirst + middlePadding * 2 + 1, last + 1);\n const left = range(first, Math.min(endPadding, middleFirst));\n const middle = range(middleFirst, middleLast);\n const right = range(Math.max(last + 1 - endPadding, middleLast), last + 1);\n\n const onClick = (page: number) => {\n onChange && onChange(page, current);\n };\n\n if (first === last) {\n // There are no pages, so return nothing\n return <></>;\n }\n\n return (\n <div className=\"pagination\">\n <PageLink\n page={current - 1}\n onClick={onClick}\n disabled={current === first}\n >\n ← Previous\n </PageLink>\n {left.map((page) => (\n <PageLink key={page} page={page} onClick={onClick} />\n ))}\n {Boolean(left.length) && left[left.length - 1] + 1 !== middle[0] && \"…\"}\n {middle.map((page) =>\n current === page ? (\n <span className=\"current-page\" key={page}>\n {page}\n </span>\n ) : (\n <PageLink key={page} page={page} onClick={onClick} />\n )\n )}\n {Boolean(right.length) &&\n middle[middle.length - 1] + 1 !== right[0] &&\n \"…\"}\n {right.map((page) => (\n <PageLink key={page} page={page} onClick={onClick} />\n ))}\n <PageLink\n page={current + 1}\n onClick={onClick}\n disabled={current === last}\n >\n Next →\n </PageLink>\n </div>\n );\n}\n"],"names":["defaultFilters","Object","useFiltersURL","_useSearchParams","searchParams","setSearchParams","filters","useMemo","searchParamsObject","params","acc","tuple","_tuple","key","val","Array","parseInt","updateFiltersURL","useCallback","partialFilters","value","JSON","_iteratorError","mustBeArrayKeys","AllFlaws","locale","useLocale","_useFiltersURL","_useState","lastData","setLastData","useEffect","title","document","getAPIUrl","sort_by","sort_reverse","page","restFilters","createSearchParams","String","_useSWR","url","response","fetch","ex","Error","data","error","isValidating","loading","pageCount","MainContentContainer","ShowSearchError","FilterControls","DocumentsTable","AllFlawCounts","BuildTimes","param","ms","times","s","Math","flawLevels","initialFilters","setFilters","_useState1","deserializeSearchFlaws","list","rows","row","_row_split","flaw","search","searchFlawsRows","setSearchFlawsRows","refreshFilters","searchInputs","input","hasFilters","equalObjects","obj1","obj2","keys1","Set","keys2","value2","_type_of","v","i","hasEmptySearchFlawsRow","event","flaws","opt","flawLevel","humanizeFlawName","clone","j","serialized","counts","documents","TH","id","getHighlightedText","text","highlight","parts","RegExp","part","WarnAboutNothingBuilt","doc","_uri_split","left","right","n","totalCountFixable","bits","Link","Paginator","typesSorted","a","b","macrosSorted","PARAM","PageLink","children","onClick","disabled","window","first","last","endPadding","middlePadding","onChange","current","middleFirst","middleLast","range","middle","Boolean"],"mappings":"oMAMO,SAAS,EAAiB,CAAI,EAWnC,MAAO,AAVc,EAGnB,gBAAiB,kBACjB,aAAc,iBACd,YAAa,aACf,EAImB,CAAC,EAAK,EAFhB,EAAK,MAAM,CAAC,GAAG,WAAW,GAAK,EAAK,KAAK,CAAC,GAAG,OAAO,CAAC,KAAM,IAGtE,C,izECwDA,IAAMA,EAA0BC,OAAO,MAAM,CAAC,CAC5C,QAAS,GACT,MAAO,GACP,WAAY,GACZ,aAAc,GACd,MAAO,EAAE,CACT,KAAM,EACN,QAAS,aACT,aAAc,GACd,aAAc,EAAE,AAClB,GAiBA,SAASC,IACP,IAAwCC,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,IAAeA,GAAhDC,EAAiCD,CAAAA,CAAAA,EAAAA,CAAnBE,EAAmBF,CAAAA,CAAAA,EAAAA,CAuBlCG,EAAUC,AAAAA,GAAAA,EAAAA,OAAAA,AAAAA,EAAQ,WACtB,IAAMC,EArBE,EAAGC,AAqBiCL,EArB1B,OAAO,IAAI,MAAM,CAAC,SAACM,CAAG,CAAEC,CAAK,EAE7C,IAAmBC,EAAAA,EAAAA,EAAAA,GAAZC,EAAYD,CAAAA,CAAAA,EAAAA,CAAPE,EAAOF,CAAAA,CAAAA,EAAAA,CAcnB,OAbIX,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACS,EAAKG,GAExCE,MAAM,OAAO,CAACL,CAAG,CAACG,EAAI,EACxBH,CAAG,CAACG,EAAI,CAAI,EAAGH,CAAG,CAACG,EAAI,SAAZ,CAAcC,EAAI,EAI7BJ,CAAG,CAACG,EAAI,CAAG,CAACH,CAAG,CAACG,EAAI,CAAEC,EAAI,CAI5BJ,CAAG,CAACG,EAAI,CAAGC,EAENJ,CACT,EAAG,CAAC,GAQJ,OAHIF,EAAmB,IAAI,EACzBA,CAAAA,EAAmB,IAAI,CAAGQ,SAASR,EAAmB,IAAI,GAErD,KAAKR,EAAmBQ,EACjC,EAAG,CAACJ,EAAa,EAEXa,EAAmBC,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EACvB,SAACC,CAAc,EAKbd,EApDGJ,OAAO,WAAW,CACvBA,OAAO,OAAO,CA+CkC,KACzCK,EACAa,IAjDiB,MAAM,CAC5B,Y,aAAEN,EAAAA,CAAAA,CAAAA,EAAAA,CAAKO,EAAAA,CAAAA,CAAAA,EAAAA,C,OACLC,KAAK,SAAS,CAACrB,CAAc,CAACa,EAAI,IAAMQ,KAAK,SAAS,CAACD,E,IAkD3D,EACA,CAACd,EAASD,EAAgB,EAIvBiB,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAaC,AADM,CAAC,QAAS,eAAe,AAChB,CAAfA,OAAAA,QAAAA,CAAAA,GAAbD,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,GAA8B,CAA9BA,IAAMT,EAANS,EAAAA,KAAAA,AACChB,CAAAA,CAAO,CAACO,EAAI,EAAI,CAACE,MAAM,OAAO,CAACT,CAAO,CAACO,EAAI,GAC7CP,CAAAA,CAAO,CAACO,EAAI,CAAG,CAACP,CAAO,CAACO,EAAI,CAAC,A,CAEjC,C,UAJKS,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,EAML,MAAO,CAAChB,EAASW,EAAiB,AACpC,CAEe,SAASO,IACtB,IAAMC,EAASC,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,IACRpB,EAAWqB,AAAAA,EAAAA,IAAAA,EAAAA,CAAAA,EAAAA,CACcC,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAsB,SAA/CC,EAAyBD,CAAAA,CAAAA,EAAAA,CAAfE,EAAeF,CAAAA,CAAAA,EAAAA,CAEhCG,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAU,WACR,IAAIC,EAAQ,sBACRH,CAAAA,GACFG,CAAAA,EAAS,IAAoDA,MAAAA,CAAjDH,EAAS,MAAM,CAAC,KAAK,CAAC,cAAc,GAAG,YAAgB,OAANG,EAAK,EAEpEC,SAAS,KAAK,CAAGD,CACnB,EAAG,CAACH,EAAS,EAEb,IAAMK,EAAYhB,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EAAY,WAC5B,IAAQiB,EAAgD7B,EAAhD6B,OAAO,CAAEC,EAAuC9B,EAAvC8B,YAAY,CAAEC,EAAyB/B,EAAzB+B,IAAI,CAAKC,EAAAA,A,sXAAgBhC,EAAAA,CAAhD6B,UAASC,eAAcC,O,EACzB5B,EAAS8B,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EAAmB,OAC7BD,GAAAA,CACH,KAAME,OAAOH,GACbZ,OAAAA,EACA,KAAMU,EACN,QAASd,KAAK,SAAS,CAACe,E,IAE1B,MAAQ,WAA4B,OAAlB3B,EAAO,QAAQ,GACnC,EAAG,CAACgB,EAAQnB,EAAQ,EAEkBmC,EAAAA,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EACpCP,IACA,SAAOQ,CAAG,M,0BACJC,E,+pCAES,O,sBAAA,C,EAAMC,MAAMF,G,eAAvBC,EAAW,S,aAEX,MADOE,EAAAA,IAAAA,E,QAGT,GAAI,CAACF,EAAS,EAAE,CACd,MAAM,AAAIG,MAAO,GAAwBJ,MAAAA,CAAtBC,EAAS,MAAM,CAAC,QAAU,OAAJD,IAE3C,GAAI,CAACC,EAAS,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,CAAC,oBACjD,MAAM,AAAIG,MACP,yBAA6D,OAArCH,EAAS,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAIlE,MAAO,C,EAAAA,EAAS,IAAI,G,GACtB,E,gLACA,CAEA,GAtBMI,EAA8BN,EAA9BM,IAAI,CAAEC,EAAwBP,EAAxBO,KAAK,CAAEC,EAAiBR,EAAjBQ,YAAY,CAyBjClB,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAU,WACJgB,GACFjB,EAAYiB,EAEhB,EAAG,CAACA,EAAK,EAGT,IAAIG,EAA2B,gBAAC,aAAM,OAClC,CAACH,GAASC,EAMHC,GACTC,CAAAA,EAAU,gBAAC,aAAM,iBALfA,EADErB,EACQ,gBAAC,aAAM,gBAEP,gBAAC,aAAM,cAMrB,IAAQQ,EAAS/B,EAAT+B,IAAI,CACNc,EAAYtB,EAAWA,EAAS,MAAM,CAAC,KAAK,CAAG,EACrD,OACE,gBAACuB,EAAAA,CAAoBA,CAAAA,CAAC,UAAU,YAAY,WAAY,E,EACrDF,EACAF,GAAS,gBAACK,EAAAA,CAAgB,MAAOL,C,GACjCnB,GACC,gBAAC,OAAI,UAAU,kB,EACb,gBAACyB,EAAAA,CAAe,WAAYzB,EAAS,UAAU,A,GAC/C,gBAAC0B,EAAAA,CACC,OAAQ9B,EACR,OAAQI,EAAS,MAAM,CACvB,UAAWA,EAAS,SAAS,CAC7B,UAAWsB,EACX,KAAMd,C,IAIXU,GAAQA,EAAK,MAAM,EAAI,gBAACS,EAAAA,CAAc,OAAQT,EAAK,MAAM,CAAC,KAAK,A,GAC/DA,GAAQ,gBAACU,EAAAA,CAAW,MAAOV,EAAK,KAAK,A,GAG5C,CAEA,SAASM,EAAgBK,CAAS,E,IAAPV,EAAFU,EAAEV,KAAK,CAC9B,OACE,gBAAC,OAAI,UAAU,4B,EACb,gBAAC,UAAG,gBACJ,gBAAC,WAAKA,EAAM,QAAQ,IAG1B,CAEA,SAASS,EAAWC,CAA2B,E,IAC7BC,EADIC,EAAFF,EAAEE,KAAK,CASzB,OACE,gBAAC,OAAI,UAAU,c,EACb,gBAAC,SAAE,gCATL,AAAID,CADUA,EAU4BC,EAAM,KAAK,EAT5C,IAEC,GAAe,OAAbC,AADAF,CAAAA,EAAK,GAAG,EACN,OAAO,CAAC,GAAG,YAEf,GAAiB,OAAfG,KAAK,KAAK,CAACH,GAAI,kBAQ/B,CAoBA,SAASL,EAAeI,CAA2C,E,IAAzCK,EAAFL,EAAEK,UAAU,CACSpC,EAAAA,EAAAA,IAAAA,GAApCqC,EAAoCrC,CAAAA,CAAAA,EAAAA,CAApBV,EAAoBU,CAAAA,CAAAA,EAAAA,CACbC,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAASoC,GAAAA,GAAhC1D,EAAuBsB,CAAAA,CAAAA,EAAAA,CAAdqC,EAAcrC,CAAAA,CAAAA,EAAAA,CACgBsC,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAC5CC,AAbJ,SAAgCC,CAAc,EAC5C,IAAMC,EAAwB,EAAE,CAC3B/C,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAa8C,CAAI,CAAJA,OAAAA,QAAAA,CAAAA,GAAb9C,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,GAAmB,CAAnBA,IAAMgD,EAANhD,EAAAA,KAAAA,CACoBiD,EAAAA,EAAAA,EAAI,KAAK,CAAC,IAAK,MAA/BC,EAAgBD,CAAAA,CAAAA,EAAAA,CAAVE,EAAUF,CAAAA,CAAAA,EAAAA,CACvBF,EAAK,IAAI,CAAC,CAAEG,KAAAA,EAAMC,OAAAA,CAAO,EAC3B,C,UAHKnD,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,EAIL,OAAO+C,CACT,EAM2BL,EAAe,YAAY,MAD7CU,EAAuCR,CAAAA,CAAAA,EAAAA,CAAtBS,EAAsBT,CAAAA,CAAAA,EAAAA,CAiB9C,SAASU,IACP3D,EAAiBX,EACnB,CAfAyB,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAU,WAGR,IAAM8C,EACJ,EAAG5C,SAAS,gBAAgB,CAC1B,8CAEF,MAAM,CAAC,SAAC6C,CAAK,E,MAAK,CAACA,EAAM,KAAK,A,EAC5BD,CAAAA,EAAa,MAAM,EACrBA,CAAY,CAACA,EAAa,MAAM,CAAG,EAAE,CAAC,KAAK,EAE/C,EAAG,CAACH,EAAgB,EAMpB,IAAIK,EAAa,CAACC,AA6LpB,SAAsBC,CAAY,CAAEC,CAAY,EAC9C,IAAMC,EAAQ,IAAIC,IAAInF,OAAO,IAAI,CAACgF,IAC5BI,EAAQ,IAAID,IAAInF,OAAO,IAAI,CAACiF,IAClC,GAAIC,EAAM,IAAI,GAAKE,EAAM,IAAI,CAC3B,MAAO,G,IAEJ/D,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,O,IAAL,QAAKA,EAAAA,EAAa6D,CAAK,CAALA,OAAAA,QAAAA,CAAAA,GAAb7D,CAAAA,CAAAA,EAAAA,AAAAA,CAAAA,EAAAA,EAAAA,IAAAA,EAAAA,EAAAA,IAAAA,AAAAA,EAAAA,EAAAA,GAAoB,CAApBA,IAAMT,EAANS,EAAAA,KAAAA,CACH,GAAI,CAAC+D,EAAM,GAAG,CAACxE,GACb,MAAO,EAEX,C,UAJKS,EAAAA,GAAAA,EAAAA,C,aAAAA,GAAAA,AAAAA,MAAAA,EAAAA,MAAAA,EAAAA,EAAAA,MAAAA,E,YAAAA,E,MAAAA,C,EAML,OAAOrB,OAAO,OAAO,CAACgF,GAAM,KAAK,CAAC,Y,aAAEpE,EAAAA,CAAAA,CAAAA,EAAAA,CAAKO,EAAAA,CAAAA,CAAAA,EAAAA,CACjCkE,EAASJ,CAAI,CAACrE,EAAI,OACxB,AAAI0E,CAAOnE,SAAAA,EAAAA,YAAPmE,EAAOnE,EAAK,IAAKmE,CAAOD,SAAAA,EAAAA,YAAPC,EAAOD,EAAM,IAG9BvE,MAAM,OAAO,CAACK,GAEdA,EAAM,MAAM,GAAKkE,EAAO,MAAM,EAAIlE,EAAM,KAAK,CAAC,SAACoE,CAAC,CAAEC,CAAC,E,OAAKD,IAAMF,CAAM,CAACG,EAAE,A,GAGlErE,IAAUkE,EAErB,EACF,EAtNiCtF,EAAgBM,GAE3CoF,EAAyBhB,EAAgB,IAAI,CAC/C,SAACJ,CAAG,E,MAAK,CAACA,EAAI,MAAM,CAAC,IAAI,E,GAS3B,OACE,gBAAC,OAAI,UAAU,S,EACb,gBAAC,UAAG,WACJ,gBAAC,QACC,SAAU,SAACqB,CAAK,EACdA,EAAM,cAAc,GACpBf,GACF,C,EAEA,gBAAC,WACC,gBAAC,UAAG,YACJ,gBAAC,SACC,KAAK,SACL,YAAY,yBACZ,MAAOtE,EAAQ,OAAO,CACtB,SAAU,SAACqF,CAAK,EACd1B,EAAW,OAAK3D,GAAAA,CAAS,QAASqF,EAAM,MAAM,CAAC,KAAK,A,GACtD,EACA,OAAQf,C,GAEV,gBAAC,SACC,KAAK,SACL,YAAY,2BACZ,MAAOtE,EAAQ,KAAK,CACpB,SAAU,SAACqF,CAAK,EACd1B,EAAW,OAAK3D,GAAAA,CAAS,MAAOqF,EAAM,MAAM,CAAC,KAAK,A,GACpD,EACA,OAAQf,C,IAIZ,gBAAC,WACC,gBAAC,UAAG,cACJ,gBAAC,SACC,KAAK,SACL,YAAY,aACZ,MAAOtE,EAAQ,UAAU,EAAI,GAC7B,SAAU,SAACqF,CAAK,EACd1B,EAAW,OAAK3D,GAAAA,CAAS,WAAYqF,EAAM,MAAM,CAAC,KAAK,A,GACzD,EACA,OAAQf,C,IAGZ,gBAAC,WACC,gBAAC,UAAG,SACJ,gBAAC,UACC,SAAU,GACV,MAAOtE,EAAQ,KAAK,CACpB,SAAU,SAACqF,CAAK,EACd,IAAMC,EAAS,EAAGD,EAAM,MAAM,CAAC,eAAe,EAAE,GAAG,CACjD,SAACE,CAAG,E,OAAKA,EAAI,KAAK,A,GAEpB5B,EAAW,OAAK3D,GAAAA,CAASsF,MAAAA,C,GAC3B,C,EAEC7B,GACCA,EAAW,GAAG,CAAC,SAAC+B,CAAS,EACvB,OACE,gBAAC,UAAO,IAAKA,EAAU,IAAI,CAAE,MAAOA,EAAU,IAAI,A,EAC/CC,EAAiBD,EAAU,IAAI,EAAG,IAClCA,EAAU,OAAO,EAAI,YAG5B,KAGN,gBAAC,WACC,gBAAC,UAAG,uBACJ,gBAAC,MAAG,UAAU,mB,EACXpB,EAAgB,GAAG,CAAC,SAACJ,CAAG,CAAEmB,CAAC,EAC1B,OACE,gBAAC,MAAG,IAAM,GAAcA,MAAAA,CAAZnB,EAAI,IAAI,CAAC,KAAK,OAAFmB,E,EACtB,gBAAC,UACC,MAAOnB,EAAI,IAAI,CACf,SAAU,SAACqB,CAAK,EACd,IAAMK,EAAS,EAAGtB,EAClBsB,CAAAA,CAAK,CAACP,EAAE,CAAC,IAAI,CAAGE,EAAM,MAAM,CAAC,KAAK,CAClChB,EAAmBqB,EACrB,C,EAECjC,GACCA,EACG,MAAM,CAAC,SAAC+B,CAAS,E,MAAK,CAACA,EAAU,OAAO,A,GACxC,GAAG,CAAC,SAACA,CAAS,EACb,OACE,gBAAC,UAAO,IAAKA,EAAU,IAAI,CAAE,MAAOA,EAAU,IAAI,A,EAC/CC,EAAiBD,EAAU,IAAI,EAGtC,IAEN,gBAAC,SACC,KAAK,SACL,YAAY,kCACZ,MAAOxB,EAAI,MAAM,CACjB,SAAU,SAACqB,CAAK,EACdhB,EACED,EAAgB,GAAG,CAAC,SAACJ,CAAG,CAAE2B,CAAC,EAIzB,OAHIR,IAAMQ,GACR3B,CAAAA,EAAI,MAAM,CAAGqB,EAAM,MAAM,CAAC,KAAK,AAAD,EAEzBrB,CACT,GAEJ,EACA,OAAQ,WACN,IAAM4B,EA1JnB7B,AA0JqDK,EA1JhD,GAAG,CAAC,SAACJ,CAAG,E,MAAM,GAAcA,MAAAA,CAAZA,EAAI,IAAI,CAAC,KAAc,OAAXA,EAAI,MAAM,C,GA2J9BL,EAAW,OAAK3D,GAAAA,CAAS,aAAc4F,C,IACvCtB,GACF,C,GAEF,gBAAC,UACC,KAAK,SACL,MAAM,oBACN,QAAS,WACP,IAAMoB,EAAS,EAAGtB,GAClBsB,EAAM,MAAM,CAACP,EAAG,GAChBd,EAAmBqB,EAKrB,C,EACD,KAKP,IAEF,gBAAC,UACC,KAAK,SACL,MAAM,iBACN,SAAUN,EACV,QAAS,WACPf,EACE,EAAGD,GAAAA,MAAAA,CACH,EAAG,CACD,CACE,KAAM,SACN,OAAQ,EACV,EACD,GAEL,C,EACD,MAKH,gBAAC,WACC,gBAAC,UAAG,iBACJ,gBAAC,SACC,KAAK,SACL,YAAY,UACZ,MAAOpE,EAAQ,YAAY,EAAI,GAC/B,SAAU,SAACqF,CAAK,EACd1B,EAAW,OAAK3D,GAAAA,CAAS,aAAcqF,EAAM,MAAM,CAAC,KAAK,A,GAC3D,EACA,OAAQf,C,IAIZ,gBAAC,WACC,gBAAC,UAAG,QACJ,gBAAC,UAAO,KAAK,Q,EAAS,cACrBG,GACC,gBAAC,UAAO,KAAK,SAAS,QA7KhC,SAAsBY,CAAuB,EAC3CA,EAAM,cAAc,GACpB1B,EAAWjE,GACXiB,EAAiBjB,EACnB,C,EAyKuD,mBAQzD,CA6BA,SAASuD,EAAeG,CAYvB,E,IAXCjC,EADsBiC,EACtBjC,MAAM,CACN0E,EAFsBzC,EAEtByC,MAAM,CACNC,EAHsB1C,EAGtB0C,SAAS,CACTjD,EAJsBO,EAItBP,SAAS,CACTd,EALsBqB,EAKtBrB,IAAI,CAQgCV,EAAAA,EAAAA,IAAAA,GAA7BrB,EAA6BqB,CAAAA,CAAAA,EAAAA,CAApBV,EAAoBU,CAAAA,CAAAA,EAAAA,CAmCpC,SAAS0E,EAAG3C,CAA4C,E,IAA1C4C,EAAF5C,EAAE4C,EAAE,CAAEtE,EAAN0B,EAAM1B,KAAK,CACrB,OACE,gBAAC,MAAG,QAAS,WAlCff,EACEX,EAAQ,OAAO,GAiCYgG,EAhCvB,CAAE,aAAc,CAAChG,EAAQ,YAAY,AAAC,EACtC,CAAE,QA+BqBgG,CA/BR,E,EA+Ba,UAAU,U,EACvCtE,EAAO,IACP1B,EAAQ,OAAO,GAAKgG,EAAMhG,EAAQ,YAAY,CAAG,IAAM,IAAO,KAGrE,CAEA,SAASiG,EAAmBC,CAAY,CAAEC,CAAiB,EAEzD,IAAMC,EAAQF,EAAK,KAAK,CAAC,AAAIG,OAAQ,IAAa,OAAVF,EAAU,KAAI,OACtD,OACE,gBAAC,YACE,IACAC,EAAM,GAAG,CAAC,SAACE,CAAI,CAAEnB,CAAC,E,OACjB,gBAAC,QACC,IAAKA,EACL,MACEmB,EAAK,WAAW,KAAOH,EAAU,WAAW,GACxC,CAAE,WAAY,MAAO,EACrB,CAAC,C,EAGNG,E,GAED,IAGV,CAcA,OACE,gBAAC,OAAI,UAAU,W,EACb,gBAAC,UAAG,+BAC2BT,EAAO,KAAK,CAAC,cAAc,GAAG,IAAE,IAC5DhD,EAAY,GACX,gBAAC,QAAK,UAAU,M,EAAO,QACfd,EAAK,IAAEc,IAIlB,AAACgD,EAAO,KAAK,CAGZ,gBAAC,MAAG,UAAU,W,EACXA,EAAO,KAAK,CAAC,cAAc,GAAG,qBAAmB1E,EAAO,KAH3D,gBAACoF,EAAAA,CAAsB,OAAQpF,C,GAOjC,gBAAC,aACC,gBAAC,aACC,gBAAC,UACC,gBAAC4E,EAAAA,CAAG,GAAG,UAAU,MAAM,U,GACvB,gBAACA,EAAAA,CAAG,GAAG,aAAa,MAAM,Y,GAC1B,gBAACA,EAAAA,CAAG,GAAG,QAAQ,MAAM,O,KAGzB,gBAAC,aACED,EAAU,GAAG,CAAC,SAACU,CAAG,MAtCHC,EAAfC,EAAMC,EAzDQC,EACfrD,EACA2B,EAIgBI,EAEhBuB,EAIAC,EAoFE,OACE,gBAAC,MAAG,IAAKN,EAAI,OAAO,A,EAClB,gBAAC,UACC,gBAACO,EAAAA,EAAIA,CAAAA,CACH,GAAK,GAAc,OAAZP,EAAI,OAAO,CAAC,WACnB,MAAOA,EAAI,KAAK,CAChB,OAAO,Q,GA7ChBE,EAAeD,CAAAA,EAAAA,EAAAA,AA+CQD,EAAI,OAAO,CA/Cf,KAAK,CAAC,WAAY,MAAtBC,CAAAA,EAAAA,CAATE,EAASF,CAAAA,CAAAA,EAAAA,CAEpB,gCACE,gBAAC,QAAK,UAAU,Y,EAAcC,EAAK,UACnC,gBAAC,QAAK,UAAU,U,EACb1G,EAAQ,OAAO,CAAGiG,EAAmBU,EAAO3G,EAAQ,OAAO,EAAI2G,MA4CxD,gBAAC,QAAK,UAAU,wB,EACb3G,EAAQ,KAAK,CACViG,EAAmBO,EAAI,KAAK,CAAExG,EAAQ,KAAK,EAC3CwG,EAAI,KAAK,GAGjB,gBAAC,MACC,UAAWA,EAAI,UAAU,CAAC,OAAO,CAAG,GAAK,gBACzC,MACEA,EAAI,UAAU,CAAC,OAAO,CACjB,qBAEA,OADCA,EAAI,UAAU,CAAC,OAAO,CAAG,EAC1B,iCACD,sE,EAGL,AAACA,EAAI,UAAU,CAAC,OAAO,CAEnB,GAAwC,QA5HtCI,EA4HcJ,EAAI,UAAU,CAAC,OAAO,CA3HnDjD,EAAI,CAAC,KAAM,KAAM,KAAM,KAAK,CAC5B2B,EAAI0B,EAAI,IACPA,EAAE,cAAc,GAAMrD,CAAAA,CAAC,CAAE2B,AAAAA,CAAAA,EAAI,EAAC,EAAK,GAAG,EAAI3B,CAAC,CAAC2B,EAAE,EAAI3B,CAAC,CAAC,EAAC,IAwH1C,OAGN,gBAAC,MAAG,UAAU,gB,GAtHpBsD,EAAoBvB,CAFJA,EAwHqCkB,EAAI,KAAK,EAtHpC,MAAM,CACpC,SAACpG,CAAG,CAAE8D,CAAI,E,OAAKA,EAAK,YAAY,CAAG9D,C,EACnC,GAEI0G,EAAOxB,EAAM,GAAG,CAAC,SAACpB,CAAI,EAC1B,MAAQ,GAAkCA,MAAAA,CAAhCuB,EAAiBvB,EAAK,IAAI,EAAE,MAAe,OAAXA,EAAK,KAAK,CACtD,GAEE,gCACG4C,EAAK,IAAI,CAAC,MAAO,IAClB,gBAAC,QAAK,UAAU,wB,EAAyB,IACrCD,EAAkB,gBA8GpB,KAIJ,gBAACG,EAAAA,CAASA,CAAAA,CAAC,KAAMnE,C,GAGvB,CAEA,SAAS0D,EAAsBnD,CAAU,E,IAARjC,EAAFiC,EAAEjC,MAAM,CACrC,OACE,gBAAC,OAAI,UAAU,oC,EACb,gBAAC,UAAG,0DACJ,gBAAC,SAAE,OACG,gBAAC,YAAK,uBAAqBA,EAAO,WAAW,IAAU,mDAKnE,CAEA,SAAS+B,EAAcE,CAAmC,E,IAAjCyC,EAAFzC,EAAEyC,MAAM,CACvBoB,EAActH,OAAO,OAAO,CAACkG,EAAO,IAAI,EAAE,IAAI,CAAC,SAACqB,CAAC,CAAEC,CAAC,EACxD,OAAOD,CAAC,CAAC,EAAE,CAAGC,CAAC,CAAC,EAAE,AACpB,GACMC,EAAezH,OAAO,OAAO,CAACkG,EAAO,MAAM,EAAE,IAAI,CAAC,SAACqB,CAAC,CAAEC,CAAC,EAC3D,OAAOD,CAAC,CAAC,EAAE,CAAGC,CAAC,CAAC,EAAE,AACpB,GACA,OACE,gBAAC,OAAI,UAAU,a,EACb,gBAAC,UAAG,gBACJ,gBAAC,aACC,gBAAC,aACC,gBAAC,UACC,gBAAC,UAAG,SACJ,gBAAC,UACC,gBAAC,SAAGtB,EAAO,KAAK,CAAC,cAAc,MAGnC,gBAAC,UACC,gBAAC,UAAG,WACJ,gBAAC,UACC,gBAAC,SAAGA,EAAO,OAAO,CAAC,cAAc,QAMzC,gBAAC,UAAG,qBACJ,gBAAC,aACC,gBAAC,aACC,gBAAC,UACC,gBAAC,UAAG,QACJ,gBAAC,UAAG,WAGR,gBAAC,aACEoB,EAAY,GAAG,CAAC,Y,aAAE1G,EAAAA,CAAAA,CAAAA,EAAAA,CAAKO,EAAAA,CAAAA,CAAAA,EAAAA,CACtB,OACE,gBAAC,MAAG,IAAKP,C,EACP,gBAAC,UAAIkF,EAAiBlF,IACtB,gBAAC,UACC,gBAAC,SAAGO,EAAM,cAAc,KAIhC,KAGJ,gBAAC,UAAG,gBACW,gBAAC,YAAK,UAAa,UAElC,gBAAC,aACC,gBAAC,aACC,gBAAC,UACC,gBAAC,UAAG,QACJ,gBAAC,UAAG,WAGR,gBAAC,aACEsG,EAAa,GAAG,CAAC,Y,aAAE7G,EAAAA,CAAAA,CAAAA,EAAAA,CAAKO,EAAAA,CAAAA,CAAAA,EAAAA,CACvB,OACE,gBAAC,MAAG,IAAKP,C,EACP,gBAAC,UACC,gBAAC,YAAMA,IAET,gBAAC,UACC,gBAAC,SAAGO,EAAM,cAAc,KAIhC,KAKV,C,moCCtwBA,IAAMuG,EAAQ,OAEd,SAASC,EAASlE,CAUjB,E,IATCrB,EADgBqB,EAChBrB,IAAI,CACJwF,EAFgBnE,EAEhBmE,QAAQ,CACRC,EAHgBpE,EAGhBoE,OAAO,CACPC,EAJgBrE,EAIhBqE,QAAQ,CAOgC5H,EAAAA,EAAAA,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,IAAeA,GAAhDC,EAAiCD,CAAAA,CAAAA,EAAAA,CAAnBE,EAAmBF,CAAAA,CAAAA,EAAAA,CAExC,OACE,gBAACkH,EAAAA,EAAIA,CAAAA,CACH,GAAI,CAAC,EACL,UAAWU,EAAW,WAAa,GACnC,QAAS,SAACpC,CAAK,EAEb,GADAA,EAAM,cAAc,IAChBoC,O,GAIJD,CAAAA,GAAWA,EAAQzF,GACnBhC,G,EAAgB,A,mUAAA,GACXJ,OAAO,WAAW,CAACG,EAAa,OAAO,K,WAC1C,KAACuH,EAAQtF,EAAK,QAAQ,K,kVAGxB2F,OAAO,UAAU,CAAC,W,OAAM/F,SAAS,eAAe,CAAC,QAAQ,E,GAC3D,C,EAEC4F,GAAYxF,EAGnB,CAEO,SAASiF,EAAU5D,CAYzB,E,MAZyBA,EACxBuE,KAAK,CAALA,EAAQ,AAARA,KAAAA,IAAQ,MACRC,EAFwBxE,EAExBwE,IAAI,CAAJA,EAFwBxE,EAGxByE,UAAU,CAAVA,EAAa,AAAbA,KAAAA,IAAa,QAHWzE,EAIxB0E,aAAa,CAAbA,EAAgB,AAAhBA,KAAAA,IAAgB,MAChBC,EALwB3E,EAKxB2E,QAAQ,CASFC,EAAUtH,SAASZ,AADFD,AAAAA,EAAAA,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,IAAeA,EAAfA,CAAAA,EAAAA,CACe,GAAG,CAACwH,IAAU,GAAI,KAAOM,EACzDM,EAAczE,KAAK,GAAG,CAACwE,EAAUF,EAAeH,GAChDO,EAAa1E,KAAK,GAAG,CAACyE,EAAcH,AAAgB,EAAhBA,EAAoB,EAAGF,EAAO,GAClElB,EAAOyB,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EAAMR,EAAOnE,KAAK,GAAG,CAACqE,EAAYI,IACzCG,EAASD,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EAAMF,EAAaC,GAC5BvB,EAAQwB,AAAAA,GAAAA,EAAAA,EAAAA,AAAAA,EAAM3E,KAAK,GAAG,CAACoE,EAAO,EAAIC,EAAYK,GAAaN,EAAO,GAElEJ,EAAU,SAACzF,CAAI,EACnBgG,GAAYA,EAAShG,EAAMiG,EAC7B,SAEA,AAAIL,IAAUC,EAEL,iCAIP,gBAAC,OAAI,UAAU,Y,EACb,gBAACN,EAAAA,CACC,KAAMU,EAAU,EAChB,QAASR,EACT,SAAUQ,IAAYL,C,EACvB,cAGAjB,EAAK,GAAG,CAAC,SAAC3E,CAAI,E,OACb,gBAACuF,EAAAA,CAAS,IAAKvF,EAAM,KAAMA,EAAM,QAASyF,C,KAE3Ca,EAAQ3B,EAAK,MAAM,EAAKA,CAAI,CAACA,EAAK,MAAM,CAAG,EAAE,CAAG,IAAM0B,CAAM,CAAC,EAAE,EAAI,IACnEA,EAAO,GAAG,CAAC,SAACrG,CAAI,E,OACfiG,IAAYjG,EACV,gBAAC,QAAK,UAAU,eAAe,IAAKA,C,EACjCA,GAGH,gBAACuF,EAAAA,CAAS,IAAKvF,EAAM,KAAMA,EAAM,QAASyF,C,KAG7Ca,EAAQ1B,EAAM,MAAM,EACnByB,CAAM,CAACA,EAAO,MAAM,CAAG,EAAE,CAAG,IAAMzB,CAAK,CAAC,EAAE,EAC1C,IACDA,EAAM,GAAG,CAAC,SAAC5E,CAAI,E,OACd,gBAACuF,EAAAA,CAAS,IAAKvF,EAAM,KAAMA,EAAM,QAASyF,C,KAE5C,gBAACF,EAAAA,CACC,KAAMU,EAAU,EAChB,QAASR,EACT,SAAUQ,IAAYJ,C,EACvB,UAKP,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"8856.0efcde0ace698d4a.js","sources":["webpack://@mdn/fred/./node_modules/@stripe/stripe-js/dist/index.mjs","webpack://@mdn/fred/./node_modules/@mdn/yari/client/src/plus/offer-overview/offer-overview-subscribe/stripe.tsx"],"sourcesContent":["var RELEASE_TRAIN = 'basil';\n\nvar runtimeVersionToUrlVersion = function runtimeVersionToUrlVersion(version) {\n return version === 3 ? 'v3' : version;\n};\n\nvar ORIGIN = 'https://js.stripe.com';\nvar STRIPE_JS_URL = \"\".concat(ORIGIN, \"/\").concat(RELEASE_TRAIN, \"/stripe.js\");\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar STRIPE_JS_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/(v3|[a-z]+)\\/stripe\\.js(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\n\nvar isStripeJSURL = function isStripeJSURL(url) {\n return V3_URL_REGEX.test(url) || STRIPE_JS_URL_REGEX.test(url);\n};\n\nvar findScript = function findScript() {\n var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(ORIGIN, \"\\\"]\"));\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n\n if (!isStripeJSURL(script.src)) {\n continue;\n }\n\n return script;\n }\n\n return null;\n};\n\nvar injectScript = function injectScript(params) {\n var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n var script = document.createElement('script');\n script.src = \"\".concat(STRIPE_JS_URL).concat(queryString);\n var headOrBody = document.head || document.body;\n\n if (!headOrBody) {\n throw new Error('Expected document.body not to be null. Stripe.js requires a <body> element.');\n }\n\n headOrBody.appendChild(script);\n return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe, startTime) {\n if (!stripe || !stripe._registerWrapper) {\n return;\n }\n\n stripe._registerWrapper({\n name: 'stripe-js',\n version: \"7.8.0\",\n startTime: startTime\n });\n};\n\nvar stripePromise$1 = null;\nvar onErrorListener = null;\nvar onLoadListener = null;\n\nvar onError = function onError(reject) {\n return function (cause) {\n reject(new Error('Failed to load Stripe.js', {\n cause: cause\n }));\n };\n};\n\nvar onLoad = function onLoad(resolve, reject) {\n return function () {\n if (window.Stripe) {\n resolve(window.Stripe);\n } else {\n reject(new Error('Stripe.js not available'));\n }\n };\n};\n\nvar loadScript = function loadScript(params) {\n // Ensure that we only attempt to load Stripe.js at most once\n if (stripePromise$1 !== null) {\n return stripePromise$1;\n }\n\n stripePromise$1 = new Promise(function (resolve, reject) {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n // Resolve to null when imported server side. This makes the module\n // safe to import in an isomorphic code base.\n resolve(null);\n return;\n }\n\n if (window.Stripe && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n }\n\n if (window.Stripe) {\n resolve(window.Stripe);\n return;\n }\n\n try {\n var script = findScript();\n\n if (script && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n } else if (!script) {\n script = injectScript(params);\n } else if (script && onLoadListener !== null && onErrorListener !== null) {\n var _script$parentNode;\n\n // remove event listeners\n script.removeEventListener('load', onLoadListener);\n script.removeEventListener('error', onErrorListener); // if script exists, but we are reloading due to an error,\n // reload script to trigger 'load' event\n\n (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);\n script = injectScript(params);\n }\n\n onLoadListener = onLoad(resolve, reject);\n onErrorListener = onError(reject);\n script.addEventListener('load', onLoadListener);\n script.addEventListener('error', onErrorListener);\n } catch (error) {\n reject(error);\n return;\n }\n }); // Resets stripePromise on error\n\n return stripePromise$1[\"catch\"](function (error) {\n stripePromise$1 = null;\n return Promise.reject(error);\n });\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n if (maybeStripe === null) {\n return null;\n }\n\n var pk = args[0];\n var isTestKey = pk.match(/^pk_test/); // @ts-expect-error this is not publicly typed\n\n var version = runtimeVersionToUrlVersion(maybeStripe.version);\n var expectedVersion = RELEASE_TRAIN;\n\n if (isTestKey && version !== expectedVersion) {\n console.warn(\"Stripe.js@\".concat(version, \" was loaded on the page, but @stripe/stripe-js@\").concat(\"7.8.0\", \" expected Stripe.js@\").concat(expectedVersion, \". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning\"));\n }\n\n var stripe = maybeStripe.apply(undefined, args);\n registerWrapper(stripe, startTime);\n return stripe;\n}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\nvar stripePromise;\nvar loadCalled = false;\n\nvar getStripePromise = function getStripePromise() {\n if (stripePromise) {\n return stripePromise;\n }\n\n stripePromise = loadScript(null)[\"catch\"](function (error) {\n // clear cache on error\n stripePromise = null;\n return Promise.reject(error);\n });\n return stripePromise;\n}; // Execute our own script injection after a tick to give users time to do their\n// own script injection.\n\n\nPromise.resolve().then(function () {\n return getStripePromise();\n})[\"catch\"](function (error) {\n if (!loadCalled) {\n console.warn(error);\n }\n});\nvar loadStripe = function loadStripe() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n loadCalled = true;\n var startTime = Date.now(); // if previous attempts are unsuccessful, will re-load script\n\n return getStripePromise().then(function (maybeStripe) {\n return initStripe(maybeStripe, args, startTime);\n });\n};\n\nexport { loadStripe };\n","import \"@stripe/stripe-js\";\nexport default function Stripe() {\n return <></>;\n}\n"],"names":["document","Error","Promise","window","e","console","Stripe"],"mappings":"+JAMA,IAuJI,EAvJA,EAAS,wBACT,EAAgB,GAAG,MAAM,CAAC,EAAQ,KAAK,MAAM,CAP7B,QAO6C,cAC7D,EAAe,4CACf,EAAsB,8DAOtB,EAAa,WAGf,IAAK,IAFD,EAAUA,SAAS,gBAAgB,CAAC,gBAAiB,MAAM,CAAC,EAAQ,OAE/D,EAAI,EAAG,EAAI,EAAQ,MAAM,CAAE,IAAK,CACvC,IARuC,EAQnC,EAAS,CAAO,CAAC,EAAE,CAEvB,GAVuC,EAUpB,EAAO,GAAG,CATxB,EAAa,IAAI,CAAC,IAAQ,EAAoB,IAAI,CAAC,GAaxD,OAAO,CACT,CAEA,OAAO,IACT,EAEI,EAAe,SAAsB,CAAM,EAC7C,IAAI,EAAc,GAAU,CAAC,EAAO,oBAAoB,CAAG,8BAAgC,GACvF,EAASA,SAAS,aAAa,CAAC,SACpC,GAAO,GAAG,CAAG,GAAG,MAAM,CAAC,GAAe,MAAM,CAAC,GAC7C,IAAI,EAAaA,SAAS,IAAI,EAAIA,SAAS,IAAI,CAE/C,GAAI,CAAC,EACH,MAAM,AAAIC,MAAM,+EAIlB,OADA,EAAW,WAAW,CAAC,GAChB,CACT,EAcI,EAAkB,KAClB,EAAkB,KAClB,EAAiB,KAoGjB,EAAmB,kBACrB,AAAI,EACK,EAGT,EAAgB,AAnFhB,CAAI,AAAoB,OAApB,EACK,EAiDF,AA9CP,GAAkB,IAAIC,QAAQ,SAAU,CAAO,CAAE,CAAM,EACrD,GAAI,AAAkB,aAAlB,OAAOC,QAA0B,AAAoB,aAApB,OAAOH,SAA0B,YAGpE,EAAQ,MAQV,GAJIG,OAAO,MAAM,CAIbA,OAAO,MAAM,CAAE,YACjB,EAAQA,OAAO,MAAM,EAIvB,GAAI,CACF,IAOM,EAPF,EAAS,IAID,EAED,GAAU,AAAmB,OAAnB,GAA2B,AAAoB,OAApB,IAI9C,EAAO,mBAAmB,CAAC,OAAQ,GACnC,EAAO,mBAAmB,CAAC,QAAS,GAGpC,MAAC,GAAqB,EAAO,UAAU,AAAD,GAAwD,EAAmB,WAAW,CAAC,GAC7H,EAAS,EA8CY,OAxDrB,EAAS,EAwDY,MA3CvB,EAnDG,WACDA,OAAO,MAAM,CACf,AAiDwB,EAjDhBA,OAAO,MAAM,EAErB,AA+CiC,EA/C1B,AAAIF,MAAM,2BAErB,EA8CI,EA5DG,SAAU,CAAK,EACpB,AA2D4B,EA3DrB,AAAIA,MAAM,2BAA4B,CAC3C,MAAO,CACT,GACF,EAyDI,EAAO,gBAAgB,CAAC,OAAQ,GAChC,EAAO,gBAAgB,CAAC,QAAS,EACnC,CAAE,MAAOG,EAAO,CACd,EAAOA,GACP,MACF,CACF,EAAC,EAEsB,KAAQ,CAAC,SAAUA,CAAK,EAE7C,OADA,EAAkB,KACXF,QAAQ,MAAM,CAACE,EACxB,EAnDA,EAiFiC,KAAQ,CAAC,SAAUA,CAAK,EAGvD,OADA,EAAgB,KACTF,QAAQ,MAAM,CAACE,EACxB,EAEF,EAIAF,QAAQ,OAAO,GAAG,IAAI,CAAC,WACrB,OAAO,GACT,GAAG,KAAQ,CAAC,SAAUE,CAAK,EAEvBC,QAAQ,IAAI,CAACD,EAEjB,G,eCpLe,SAASE,IACtB,OAAO,gCACT,C"}
1
+ {"version":3,"file":"8856.0efcde0ace698d4a.js","sources":["webpack://@mdn/fred/./node_modules/@stripe/stripe-js/dist/index.mjs","webpack://@mdn/fred/./node_modules/@mdn/yari/client/src/plus/offer-overview/offer-overview-subscribe/stripe.tsx"],"sourcesContent":["var RELEASE_TRAIN = 'basil';\n\nvar runtimeVersionToUrlVersion = function runtimeVersionToUrlVersion(version) {\n return version === 3 ? 'v3' : version;\n};\n\nvar ORIGIN = 'https://js.stripe.com';\nvar STRIPE_JS_URL = \"\".concat(ORIGIN, \"/\").concat(RELEASE_TRAIN, \"/stripe.js\");\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar STRIPE_JS_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/(v3|[a-z]+)\\/stripe\\.js(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\n\nvar isStripeJSURL = function isStripeJSURL(url) {\n return V3_URL_REGEX.test(url) || STRIPE_JS_URL_REGEX.test(url);\n};\n\nvar findScript = function findScript() {\n var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(ORIGIN, \"\\\"]\"));\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n\n if (!isStripeJSURL(script.src)) {\n continue;\n }\n\n return script;\n }\n\n return null;\n};\n\nvar injectScript = function injectScript(params) {\n var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n var script = document.createElement('script');\n script.src = \"\".concat(STRIPE_JS_URL).concat(queryString);\n var headOrBody = document.head || document.body;\n\n if (!headOrBody) {\n throw new Error('Expected document.body not to be null. Stripe.js requires a <body> element.');\n }\n\n headOrBody.appendChild(script);\n return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe, startTime) {\n if (!stripe || !stripe._registerWrapper) {\n return;\n }\n\n stripe._registerWrapper({\n name: 'stripe-js',\n version: \"7.9.0\",\n startTime: startTime\n });\n};\n\nvar stripePromise$1 = null;\nvar onErrorListener = null;\nvar onLoadListener = null;\n\nvar onError = function onError(reject) {\n return function (cause) {\n reject(new Error('Failed to load Stripe.js', {\n cause: cause\n }));\n };\n};\n\nvar onLoad = function onLoad(resolve, reject) {\n return function () {\n if (window.Stripe) {\n resolve(window.Stripe);\n } else {\n reject(new Error('Stripe.js not available'));\n }\n };\n};\n\nvar loadScript = function loadScript(params) {\n // Ensure that we only attempt to load Stripe.js at most once\n if (stripePromise$1 !== null) {\n return stripePromise$1;\n }\n\n stripePromise$1 = new Promise(function (resolve, reject) {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n // Resolve to null when imported server side. This makes the module\n // safe to import in an isomorphic code base.\n resolve(null);\n return;\n }\n\n if (window.Stripe && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n }\n\n if (window.Stripe) {\n resolve(window.Stripe);\n return;\n }\n\n try {\n var script = findScript();\n\n if (script && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n } else if (!script) {\n script = injectScript(params);\n } else if (script && onLoadListener !== null && onErrorListener !== null) {\n var _script$parentNode;\n\n // remove event listeners\n script.removeEventListener('load', onLoadListener);\n script.removeEventListener('error', onErrorListener); // if script exists, but we are reloading due to an error,\n // reload script to trigger 'load' event\n\n (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);\n script = injectScript(params);\n }\n\n onLoadListener = onLoad(resolve, reject);\n onErrorListener = onError(reject);\n script.addEventListener('load', onLoadListener);\n script.addEventListener('error', onErrorListener);\n } catch (error) {\n reject(error);\n return;\n }\n }); // Resets stripePromise on error\n\n return stripePromise$1[\"catch\"](function (error) {\n stripePromise$1 = null;\n return Promise.reject(error);\n });\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n if (maybeStripe === null) {\n return null;\n }\n\n var pk = args[0];\n var isTestKey = pk.match(/^pk_test/); // @ts-expect-error this is not publicly typed\n\n var version = runtimeVersionToUrlVersion(maybeStripe.version);\n var expectedVersion = RELEASE_TRAIN;\n\n if (isTestKey && version !== expectedVersion) {\n console.warn(\"Stripe.js@\".concat(version, \" was loaded on the page, but @stripe/stripe-js@\").concat(\"7.9.0\", \" expected Stripe.js@\").concat(expectedVersion, \". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning\"));\n }\n\n var stripe = maybeStripe.apply(undefined, args);\n registerWrapper(stripe, startTime);\n return stripe;\n}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\nvar stripePromise;\nvar loadCalled = false;\n\nvar getStripePromise = function getStripePromise() {\n if (stripePromise) {\n return stripePromise;\n }\n\n stripePromise = loadScript(null)[\"catch\"](function (error) {\n // clear cache on error\n stripePromise = null;\n return Promise.reject(error);\n });\n return stripePromise;\n}; // Execute our own script injection after a tick to give users time to do their\n// own script injection.\n\n\nPromise.resolve().then(function () {\n return getStripePromise();\n})[\"catch\"](function (error) {\n if (!loadCalled) {\n console.warn(error);\n }\n});\nvar loadStripe = function loadStripe() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n loadCalled = true;\n var startTime = Date.now(); // if previous attempts are unsuccessful, will re-load script\n\n return getStripePromise().then(function (maybeStripe) {\n return initStripe(maybeStripe, args, startTime);\n });\n};\n\nexport { loadStripe };\n","import \"@stripe/stripe-js\";\nexport default function Stripe() {\n return <></>;\n}\n"],"names":["document","Error","Promise","window","e","console","Stripe"],"mappings":"+JAMA,IAuJI,EAvJA,EAAS,wBACT,EAAgB,GAAG,MAAM,CAAC,EAAQ,KAAK,MAAM,CAP7B,QAO6C,cAC7D,EAAe,4CACf,EAAsB,8DAOtB,EAAa,WAGf,IAAK,IAFD,EAAUA,SAAS,gBAAgB,CAAC,gBAAiB,MAAM,CAAC,EAAQ,OAE/D,EAAI,EAAG,EAAI,EAAQ,MAAM,CAAE,IAAK,CACvC,IARuC,EAQnC,EAAS,CAAO,CAAC,EAAE,CAEvB,GAVuC,EAUpB,EAAO,GAAG,CATxB,EAAa,IAAI,CAAC,IAAQ,EAAoB,IAAI,CAAC,GAaxD,OAAO,CACT,CAEA,OAAO,IACT,EAEI,EAAe,SAAsB,CAAM,EAC7C,IAAI,EAAc,GAAU,CAAC,EAAO,oBAAoB,CAAG,8BAAgC,GACvF,EAASA,SAAS,aAAa,CAAC,SACpC,GAAO,GAAG,CAAG,GAAG,MAAM,CAAC,GAAe,MAAM,CAAC,GAC7C,IAAI,EAAaA,SAAS,IAAI,EAAIA,SAAS,IAAI,CAE/C,GAAI,CAAC,EACH,MAAM,AAAIC,MAAM,+EAIlB,OADA,EAAW,WAAW,CAAC,GAChB,CACT,EAcI,EAAkB,KAClB,EAAkB,KAClB,EAAiB,KAoGjB,EAAmB,kBACrB,AAAI,EACK,EAGT,EAAgB,AAnFhB,CAAI,AAAoB,OAApB,EACK,EAiDF,AA9CP,GAAkB,IAAIC,QAAQ,SAAU,CAAO,CAAE,CAAM,EACrD,GAAI,AAAkB,aAAlB,OAAOC,QAA0B,AAAoB,aAApB,OAAOH,SAA0B,YAGpE,EAAQ,MAQV,GAJIG,OAAO,MAAM,CAIbA,OAAO,MAAM,CAAE,YACjB,EAAQA,OAAO,MAAM,EAIvB,GAAI,CACF,IAOM,EAPF,EAAS,IAID,EAED,GAAU,AAAmB,OAAnB,GAA2B,AAAoB,OAApB,IAI9C,EAAO,mBAAmB,CAAC,OAAQ,GACnC,EAAO,mBAAmB,CAAC,QAAS,GAGpC,MAAC,GAAqB,EAAO,UAAU,AAAD,GAAwD,EAAmB,WAAW,CAAC,GAC7H,EAAS,EA8CY,OAxDrB,EAAS,EAwDY,MA3CvB,EAnDG,WACDA,OAAO,MAAM,CACf,AAiDwB,EAjDhBA,OAAO,MAAM,EAErB,AA+CiC,EA/C1B,AAAIF,MAAM,2BAErB,EA8CI,EA5DG,SAAU,CAAK,EACpB,AA2D4B,EA3DrB,AAAIA,MAAM,2BAA4B,CAC3C,MAAO,CACT,GACF,EAyDI,EAAO,gBAAgB,CAAC,OAAQ,GAChC,EAAO,gBAAgB,CAAC,QAAS,EACnC,CAAE,MAAOG,EAAO,CACd,EAAOA,GACP,MACF,CACF,EAAC,EAEsB,KAAQ,CAAC,SAAUA,CAAK,EAE7C,OADA,EAAkB,KACXF,QAAQ,MAAM,CAACE,EACxB,EAnDA,EAiFiC,KAAQ,CAAC,SAAUA,CAAK,EAGvD,OADA,EAAgB,KACTF,QAAQ,MAAM,CAACE,EACxB,EAEF,EAIAF,QAAQ,OAAO,GAAG,IAAI,CAAC,WACrB,OAAO,GACT,GAAG,KAAQ,CAAC,SAAUE,CAAK,EAEvBC,QAAQ,IAAI,CAACD,EAEjB,G,eCpLe,SAASE,IACtB,OAAO,gCACT,C"}