{"version":3,"sources":["webpack:///./node_modules/error-stack-parser/error-stack-parser.js","webpack:///./node_modules/stack-generator/stack-generator.js","webpack:///./node_modules/stacktrace-gps/stacktrace-gps.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/source-map.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/base64.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/mapping-list.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/source-map-consumer.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/binary-search.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/quick-sort.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/source-node.js","webpack:///./app/javascript/mastodon/components/error_boundary.jsx","webpack:///./node_modules/react-router/es/Router.js","webpack:///./app/javascript/mastodon/components/router.tsx","webpack:///./node_modules/react-router/es/generatePath.js","webpack:///./node_modules/react-router/es/Redirect.js","webpack:///./node_modules/react-router-dom/es/Redirect.js","webpack:///./app/javascript/mastodon/features/picture_in_picture/components/header.jsx","webpack:///./app/javascript/mastodon/features/picture_in_picture/index.jsx","webpack:///./app/javascript/mastodon/components/logo.tsx","webpack:///./app/javascript/mastodon/features/ui/components/header.jsx","webpack:///./app/javascript/mastodon/features/ui/util/file.js","webpack:///./app/javascript/mastodon/features/ui/components/plusminus_setting_modal.jsx","webpack:///./app/javascript/mastodon/features/ui/components/upload_area.jsx","webpack:///./app/javascript/mastodon/features/ui/components/column_loading.jsx","webpack:///./app/javascript/mastodon/features/ui/components/compose_half_modal.jsx","webpack:///./app/javascript/mastodon/components/server_banner.jsx","webpack:///./app/javascript/mastodon/features/ui/components/compose_panel.jsx","webpack:///./app/javascript/mastodon/features/ui/components/drawer_loading.jsx","webpack:///./app/javascript/mastodon/features/account/components/featured_tags.jsx","webpack:///./app/javascript/mastodon/features/account/containers/featured_tags_container.js","webpack:///./app/javascript/mastodon/features/account/navigation.jsx","webpack:///./app/javascript/mastodon/components/navigation_portal.jsx","webpack:///./app/javascript/mastodon/features/ui/components/disabled_account_banner.jsx","webpack:///./app/javascript/mastodon/features/ui/components/follow_requests_column_link.jsx","webpack:///./app/javascript/mastodon/features/ui/components/list_panel.jsx","webpack:///./app/javascript/mastodon/features/ui/components/notifications_counter_icon.js","webpack:///./app/javascript/mastodon/features/ui/components/sign_in_banner.jsx","webpack:///./app/javascript/mastodon/features/ui/components/navigation_panel.jsx","webpack:///./app/javascript/mastodon/features/ui/components/columns_area.jsx","webpack:///./app/javascript/mastodon/features/ui/containers/columns_area_container.js","webpack:///./app/javascript/mastodon/features/ui/util/react_router_helpers.jsx","webpack:///./app/javascript/mastodon/features/ui/index.jsx","webpack:///./app/javascript/mastodon/containers/mastodon.jsx","webpack:///./node_modules/marky/lib/marky.browser.es.js","webpack:///./app/javascript/mastodon/main.jsx","webpack:///./app/javascript/packs/application.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/util.js","webpack:///./node_modules/stacktrace-js/stacktrace.js","webpack:///./node_modules/stackframe/stackframe.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/source-map-generator.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/base64-vlq.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/array-set.js"],"names":["StackFrame","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","parse","error","stacktrace","this","parseOpera","stack","match","parseV8OrIE","parseFFOrSafari","Error","extractLocation","urlLike","indexOf","parts","exec","replace","undefined","split","filter","line","map","sanitizedLine","location","locationParts","functionName","fileName","lineNumber","columnNumber","source","functionNameRegex","matches","e","message","length","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","i","len","push","argsRaw","tokens","pop","functionCall","shift","args","backtrace","opts","maxStackSize","curr","arguments","callee","Array","test","toString","RegExp","$1","caller","SourceMap","_xdr","url","Promise","resolve","reject","req","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","substr","responseText","send","_atob","b64str","window","atob","_parseJson","string","JSON","_findFunctionName","syntaxes","code","maxLines","Math","min","commentPos","index","m","_ensureSupportedEnvironment","Object","defineProperty","create","_ensureStackFrameIsLegit","stackframe","TypeError","_findSourceMappingURL","lastSourceMappingUrl","matchSourceMappingUrl","sourceMappingUrlRegExp","_extractLocationInfoFromSourceMapSource","sourceMapConsumer","sourceCache","loc","originalPositionFor","column","mappedSource","sourceContentFor","name","StackTraceGPS","sourceMapConsumerCache","ajax","_get","isDataUrl","offline","supportedEncodingRegexp","sourceMapStart","encodedSource","xhrPromise","method","then","bind","_getSourceMapConsumer","sourceMappingURL","defaultSourceRoot","sourceMapConsumerPromise","sourceMapSource","sourceRoot","SourceMapConsumer","catch","pinpoint","getMappedLocation","mappedStackFrame","resolveMappedStackFrame","findFunctionName","guessedFunctionName","substring","lastIndexOf","exports","SourceMapGenerator","SourceNode","intToCharMap","encode","number","decode","charCode","util","MappingList","_array","_sorted","_last","generatedLine","generatedColumn","prototype","unsortedForEach","aCallback","aThisArg","forEach","add","aMapping","mappingA","mappingB","lineA","lineB","columnA","columnB","compareByGeneratedPositionsInflated","toArray","sort","binarySearch","ArraySet","base64VLQ","quickSort","aSourceMap","sourceMap","sections","IndexedSourceMapConsumer","BasicSourceMapConsumer","version","getArg","sources","names","sourcesContent","mappings","file","_version","String","normalize","isAbsolute","relative","_names","fromArray","_sources","_mappings","Mapping","originalLine","originalColumn","lastOffset","_sections","s","offset","offsetLine","offsetColumn","generatedOffset","consumer","fromSourceMap","__generatedMappings","get","_parseMappings","__originalMappings","_charIsMappingSeparator","aStr","c","charAt","aSourceRoot","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","aContext","aOrder","context","_generatedMappings","_originalMappings","mapping","at","join","allGeneratedPositionsFor","aArgs","needle","has","_findMapping","compareByOriginalPositions","lastColumn","smc","_sourceRoot","_generateSourcesContent","_file","generatedMappings","slice","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","str","segment","end","value","previousGeneratedColumn","previousOriginalLine","previousOriginalColumn","previousSource","previousName","cachedSegments","temp","originalMappings","rest","compareByGeneratedPositionsDeflated","aNeedle","aMappings","aLineName","aColumnName","aComparator","aBias","search","computeColumnSpans","nextMapping","lastGeneratedColumn","Infinity","hasContentsOfAllSources","size","some","sc","aSource","nullOnMissing","urlParse","fileUriAbsPath","scheme","path","generatedPositionFor","constructor","j","sectionIndex","section","cmp","bias","every","content","generatedPosition","sectionMappings","adjustedMapping","recursiveSearch","aLow","aHigh","aHaystack","aCompare","mid","floor","swap","ary","x","y","doQuickSort","comparator","p","r","low","high","round","random","pivot","q","REGEX_NEWLINE","isSourceNode","aLine","aColumn","aChunks","aName","children","sourceContents","fromStringWithSourceMap","aGeneratedCode","aSourceMapConsumer","aRelativePath","node","remainingLines","shiftNextLine","lastGeneratedLine","lastMapping","nextLine","addMappingWithCode","sourceFile","setSourceContent","aChunk","isArray","chunk","prepend","unshift","walk","aFn","aSep","newChildren","replaceRight","aPattern","aReplacement","lastChild","aSourceFile","aSourceContent","toSetString","walkSourceContents","keys","fromSetString","toStringWithSourceMap","generated","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","original","addMapping","idx","charCodeAt","sourceContent","ErrorBoundary","PureComponent","state","hasError","errorMessage","stackTrace","mappedStackTrace","componentStack","handleCopyStackTrace","textarea","document","createElement","contents","textContent","style","position","body","appendChild","select","execCommand","removeChild","setState","copied","setTimeout","componentDidCatch","info","stackTraceLimit","StackTrace","fromError","stackframes","sf","render","props","likelyBrowserAddonIssue","includes","_jsx","className","FormattedMessage","id","defaultMessage","href","source_url","rel","target","onClick","reload","Helmet","_extends","assign","key","hasOwnProperty","call","_possibleConstructorReturn","self","ReferenceError","_React$Component","Router","_temp","_this","instance","Constructor","_classCallCheck","_len","_key","apply","concat","computeMatch","history","pathname","subClass","superClass","enumerable","writable","configurable","setPrototypeOf","__proto__","_inherits","getChildContext","router","route","params","isExact","componentWillMount","_this2","_props","Children","count","unlisten","listen","componentWillReceiveProps","nextProps","componentWillUnmount","only","Component","propTypes","object","isRequired","contextTypes","childContextTypes","browserHistory","createBrowserHistory","originalPush","originalReplace","_state","fromMastodon","layoutFromWindow","startsWith","_browserHistory$locat","_state2","_ref","OriginalRouter","patternCache","cacheCount","pattern","generator","cacheKey","cache","compiledGenerator","compile","pretty","Redirect","isStatic","staticContext","perform","componentDidMount","componentDidUpdate","prevProps","prevTo","to","nextTo","computeTo","computedMatch","bool","from","oneOfType","defaultProps","shape","func","messages","defineMessages","close","Header","ImmutablePureComponent","account","statusId","onClose","intl","Link","Avatar","DisplayName","IconButton","icon","title","formatMessage","accountId","PropTypes","ImmutablePropTypes","connect","mapStateToProps","getIn","injectIntl","PictureInPicture","handleClose","dispatch","removePictureInPicture","type","src","currentTime","player","Video","volume","muted","autoPlay","inline","alwaysVisible","Audio","poster","backgroundColor","foregroundColor","accentColor","Footer","WordmarkLogo","viewBox","role","xlinkHref","SymbolLogo","logo","alt","Account","me","openComposeHalfModal","documentElement","classList","dispatchServer","signedIn","identity","openClosedRegistrationsModal","signupUrl","isBottomRightButton","localStorage","plusminus_config_post_button_location","useHalfModal","plusminus_config_post_half_modal","buttonInner","_jsxs","_Fragment","Icon","fixedWidth","onKeyUp","sso_redirect","signupButton","registrationsOpen","withRouter","openModal","modalType","fetchServer","styles","container","padding","display","flexDirection","flex","fontSize","lineHeight","justifyContent","buttonContainer","importButton","marginRight","main","marginTop","config","childConfig","marginLeft","hint","opacity","description","link","color","textDecoration","actionBar","paddingTop","cancelButton","customCwInputs","alignItems","maxWidth","customCwInput","width","marginBottom","customCwInputWrapper","flexWrap","customCwInputTextArea","customCwInputSelect","customCwInputButtonWrapper","customCwInputButton","minWidth","minHeight","customCwInputAddButton","developerMode","border","background","cursor","localStorageKeyPrefix","PlusMinusSettingModalLoader","React","super","onClickCancel","onOpenEvent","__PLUS_MINUS_EVENTS__","addEventListener","removeEventListener","PlusMinusSettingModal","onCancel","_jsx2","developerModeButtonClicked","timestamp","sidenav","post_button_location","post_page_link","searchbox","custom_spoiler_button","custom_spoiler_buttons","sp_header","decode_morse","encode_morse","reload_button","keyword_based_visibility","spoiler_keyword_based_visibility","keyword_based_visibilities","keyword","visibility","emotional_button","post_half_modal","quick_report","live_mode_button","developer_mode","decode_ame","encode_ame","komiflo_linkify","jumbomoji","filter_media_only_toots","max_image_scale","onClickDeveloperModeButton","alert","handleCancel","convert","obj","stringify","handleImport","async","text","accept","input","onchange","files","ev","onabort","click","parseConfig","console","handleExport","download","blob","Blob","a","URL","createObjectURL","revokeObjectURL","Date","getTime","handleSave","UNSAFE_componentWillMount","baseObj","currentSettings","reduce","overflow","updateConfig","_this$state$config$cu","_this$state$config$ke","Button","checked","onChange","parseInt","isNaN","buttonText","splice","placeholder","disabled","UploadArea","handleKeyUp","keyCode","active","preventDefault","stopPropagation","Motion","defaultStyle","backgroundOpacity","backgroundScale","spring","stiffness","damping","transform","ColumnLoading","multiColumn","Column","ColumnHeader","focusable","ComposeHalfModal","handleScroll","_throttle","height","offsetTop","pageTop","visualViewport","closeComposeHalfModal","remove","ComposeFormContainer","showClose","bottom","aboutActiveUsers","ServerBanner","server","isLoading","values","domain","mastodon","ServerHeroImage","blurhash","Skeleton","minimal","ShortNumber","ComposePanel","onFocus","changeComposing","onBlur","mountCompose","unmountCompose","SearchContainer","openInRoute","NavigationContainer","singleColumn","LinkFooter","DrawerLoading","lastStatusAt","empty","FeaturedTags","featuredTags","isEmpty","dangerouslySetInnerHTML","__html","take","featuredTag","Hashtag","uses","withGraph","date","formatDate","month","day","list","tagged","getAccount","makeGetAccount","ImmutableList","AccountNavigation","acct","normalizeForLookup","DefaultNavigation","showTrends","Trends","NavigationPortal","Switch","Route","exact","component","logoutMessage","logoutConfirm","DisabledAccountBanner","handleLogOutClick","onLogout","disabledAcct","movedToAcct","disabledAccountLink","disabledAccount","movedToAccount","disabledAccountId","movedToAccountId","mapDispatchToProps","modalProps","confirm","closeWhenConfirm","onConfirm","logOut","FollowRequestsColumnLink","fetchFollowRequests","ColumnLink","transparent","IconWithBadge","getOrderedLists","createSelector","lists","toList","item","b","localeCompare","ListPanel","fetchLists","strict","SignInBanner","useAppDispatch","useCallback","useAppSelector","home","notifications","explore","firehose","direct","favourites","bookmarks","preferences","followsAndFollowers","about","advancedInterface","openedInClassicInterface","NavigationPanel","isFirehoseActive","banner","transientSingleColumn","class","plusminus_config_reload_button","NotificationsCounterIcon","trendsEnabled","timelinePreview","isActive","dispatchEvent","Event","componentMap","Compose","HomeTimeline","Notifications","PublicTimeline","CommunityTimeline","HashtagTimeline","DirectTimeline","FavouritedStatuses","BookmarkedStatuses","ListTimeline","Directory","ColumnsArea","mediaQuery","matchMedia","renderComposePanel","handleLayoutChange","handleWheel","_interruptScrollAnimation","setRef","renderLoading","columnId","renderError","BundleColumnError","errorType","supportsPassiveEvents","passive","addListener","isRtlLayout","getElementsByTagName","contains","UNSAFE_componentWillUpdate","removeListener","handleChildrenContentChange","modifier","scrollRight","scrollWidth","innerWidth","columns","isModalOpen","plusminus_config_sidenav","ref","toJS","other","BundleContainer","fetchComponent","loading","SpecificComponent","child","cloneElement","forwardRef","WrappedSwitch","decklessLocation","WrappedRoute","renderComponent","componentParams","getDerivedStateFromError","frame","err","beforeUnload","keyMap","help","new","forceNew","toggleComposeSpoilers","focusColumn","reply","favourite","boost","mention","openProfile","moveDown","moveUp","back","goToHome","goToNotifications","goToLocal","goToFederated","goToDirect","goToStart","goToFavourites","goToPinned","goToProfile","goToBlocked","goToMuted","goToRequests","toggleHidden","toggleSensitive","openMedia","SwitchingColumnsArea","toggle","pathName","redirect","singleUserMode","owner","initialState","accounts","username","trendsAsLanding","ColumnsAreaContainer","GettingStarted","KeyboardShortcuts","About","PrivacyPolicy","InstanceStats","Firehose","feedType","PinnedStatuses","Onboarding","Explore","AccountTimeline","withReplies","Followers","Following","AccountGallery","Status","Reblogs","Favourites","FollowRequests","Blocks","DomainBlocks","FollowedTags","Mutes","Lists","UI","draggingOver","handleBeforeUnload","isComposing","hasComposingText","hasMediaAttachments","synchronouslySubmitMarkers","returnValue","handleWindowFocus","focusApp","submitMarkers","immediate","handleWindowBlur","unfocusApp","handleDragEnter","dragTargets","dataTransfer","types","canUploadMore","handleDragOver","dataTransferIsText","dropEffect","handleDrop","uploadCompose","handleDragLeave","el","closeUploadModal","handleServiceWorkerPostMessage","data","warn","_debounce","clearHeight","trailing","handleResize","layout","cancel","changeLayout","handleHotkeyNew","element","querySelector","focus","handleHotkeySearch","handleHotkeyForceNew","resetCompose","handleHotkeyToggleComposeSpoilers","changeComposeSpoilerness","handleHotkeyFocusColumn","scrollTop","scrollIntoView","handleHotkeyBack","_router$history$locat","goBack","setHotkeysRef","hotkeys","handleHotkeyToggleHelp","handleHotkeyGoToHome","handleHotkeyGoToNotifications","handleHotkeyGoToLocal","handleHotkeyGoToFederated","handleHotkeyGoToDirect","handleHotkeyGoToStart","handleHotkeyGoToFavourites","handleHotkeyGoToPinned","handleHotkeyGoToProfile","handleHotkeyGoToBlocked","handleHotkeyGoToMuted","handleHotkeyGoToRequests","handleDragEnd","navigator","serviceWorker","fetchMarkers","expandHomeTimeline","expandNotifications","fetchServerTranslationLanguages","__mousetrap__","stopCallback","tagName","dropdownMenuIsOpen","handlers","HotKeys","attach","focused","classNames","pointerEvents","NotificationsContainer","LoadingBarContainer","ModalContainer","trim","firstLaunch","INTRODUCTION_VERSION","siteTitle","hydrateAction","hydrateStore","store","meta","fetchCustomEmojis","Mastodon","disabled_account_id","accessToken","access_token","permissions","disconnect","connectUserStream","shouldUpdateScroll","prevRouterProps","_location$state","_location$state2","_prevRouterProps$loca","mastodonModalKey","IntlProvider","ReduxProvider","ScrollContext","defaultTitle","titleTemplate","perf","performance","now","throwIfEmpty","mark","measure","getEntriesByName","getEntriesByType","clearMarks","clearMeasures","entries","marks","startTime","endTime","entry","duration","entryType","arr","insertSorted","ready","mountNode","getElementById","getAttribute","EventTarget","plusminus_config_sp_header","createRoot","setupBrowserNotifications","_document$querySelect","Workbox","workerPath","wb","registration","register","Notification","permission","registerPushNotifications","start","loadPolyfills","loadLocale","aDefaultValue","urlRegexp","dataUrlRegexp","aUrl","auth","host","port","urlGenerate","aParsedUrl","aPath","part","up","aRoot","aPathUrl","aRootUrl","joined","level","supportsNullProto","isProtoString","strcmp","aStr1","aStr2","onlyCompareOriginal","onlyCompareGenerated","ErrorStackParser","StackGenerator","_options","_generateError","_merge","first","second","prop","_isShapedLikeParsableError","_filtered","generateArtificially","getSync","gps","all","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","requestOptions","setRequestHeader","headers","header","reportPayload","_isNumber","n","parseFloat","isFinite","_capitalize","toUpperCase","_getter","booleanProps","numericProps","stringProps","arrayProps","objectProps","getArgs","setArgs","v","getEvalOrigin","evalOrigin","setEvalOrigin","getFileName","getLineNumber","getColumnNumber","getFunctionName","getIsEval","fromString","argsStartIndex","argsEndIndex","locationString","Boolean","Number","k","_skipValidation","_sourcesContents","newMapping","_validateMapping","applySourceMap","aSourceMapPath","newSources","newNames","aGenerated","aOriginal","_serializeMappings","next","nameIdx","sourceIdx","previousGeneratedLine","aSources","toJSON","base64","aValue","digit","encoded","vlq","toVLQSigned","VLQ_BASE","aIndex","aOutParam","continuation","shifted","strLen","_set","aArray","aAllowDuplicates","set","getOwnPropertyNames","sStr","isDuplicate","aIdx"],"mappings":"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","file":"js/application-68d0b02a3a16430b6db2.chunk.js","sourcesContent":["(function (root, factory) {\n 'use strict';\n\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n})(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[()]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = error.stack.split('\\n').filter(function (line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n return filtered.map(function (line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(,.*$)/g, '');\n }\n var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').replace(/^.*?\\s+/, '');\n\n // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n // case it has spaces in it, as the string is split on \\s+ later on\n var location = sanitizedLine.match(/ (\\(.+\\)$)/);\n\n // remove the parenthesized location from the line, if it was matched\n sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n\n // if a location was matched, pass it to extractLocation() otherwise pass all sanitizedLine\n // because this line doesn't have function name\n var locationParts = this.extractLocation(location ? location[1] : sanitizedLine);\n var functionName = location && sanitizedLine || undefined;\n var fileName = ['eval', '<anonymous>'].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n },\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = error.stack.split('\\n').filter(function (line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n return filtered.map(function (line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, ':$1');\n }\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : undefined;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }\n }, this);\n },\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || e.message.indexOf('\\n') > -1 && e.message.split('\\n').length > e.stacktrace.split('\\n').length) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n return result;\n },\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n functionName: match[3] || undefined,\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n return result;\n },\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = error.stack.split('\\n').filter(function (line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n return filtered.map(function (line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = tokens.shift() || '';\n var functionName = functionCall.replace(/<anonymous function(: (\\w+))?>/, '$2').replace(/\\([^)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^(]+\\(([^)]*)\\)$/, '$1');\n }\n var args = argsRaw === undefined || argsRaw === '[arguments not available]' ? undefined : argsRaw.split(',');\n return new StackFrame({\n functionName: functionName,\n args: args,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n }\n };\n});","(function (root, factory) {\n 'use strict';\n\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stack-generator', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.StackGenerator = factory(root.StackFrame);\n }\n})(this, function (StackFrame) {\n return {\n backtrace: function StackGenerator$$backtrace(opts) {\n var stack = [];\n var maxStackSize = 10;\n if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n maxStackSize = opts.maxStackSize;\n }\n var curr = arguments.callee;\n while (curr && stack.length < maxStackSize && curr['arguments']) {\n // Allow V8 optimizations\n var args = new Array(curr['arguments'].length);\n for (var i = 0; i < args.length; ++i) {\n args[i] = curr['arguments'][i];\n }\n if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n stack.push(new StackFrame({\n functionName: RegExp.$1 || undefined,\n args: args\n }));\n } else {\n stack.push(new StackFrame({\n args: args\n }));\n }\n try {\n curr = curr.caller;\n } catch (e) {\n break;\n }\n }\n return stack;\n }\n };\n});","(function (root, factory) {\n 'use strict';\n\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace-gps', ['source-map', 'stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('source-map/lib/source-map-consumer'), require('stackframe'));\n } else {\n root.StackTraceGPS = factory(root.SourceMap || root.sourceMap, root.StackFrame);\n }\n})(this, function (SourceMap, StackFrame) {\n 'use strict';\n\n /**\n * Make a X-Domain request to url and callback.\n *\n * @param {String} url\n * @returns {Promise} with response text if fulfilled\n */\n function _xdr(url) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.open('get', url);\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 300 || url.substr(0, 7) === 'file://' && req.responseText) {\n resolve(req.responseText);\n } else {\n reject(new Error('HTTP status: ' + req.status + ' retrieving ' + url));\n }\n }\n };\n req.send();\n });\n }\n\n /**\n * Convert a Base64-encoded string into its original representation.\n * Used for inline sourcemaps.\n *\n * @param {String} b64str Base-64 encoded string\n * @returns {String} original representation of the base64-encoded string.\n */\n function _atob(b64str) {\n if (typeof window !== 'undefined' && window.atob) {\n return window.atob(b64str);\n } else {\n throw new Error('You must supply a polyfill for window.atob in this environment');\n }\n }\n function _parseJson(string) {\n if (typeof JSON !== 'undefined' && JSON.parse) {\n return JSON.parse(string);\n } else {\n throw new Error('You must supply a polyfill for JSON.parse in this environment');\n }\n }\n function _findFunctionName(source, lineNumber /*, columnNumber*/) {\n var syntaxes = [\n // {name} = function ({args}) TODO args capture\n /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,\n // function {name}({args}) m[1]=name m[2]=args\n /function\\s+([^('\"`]*?)\\s*\\(([^)]*)\\)/,\n // {name} = eval()\n /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,\n // fn_name() {\n /\\b(?!(?:if|for|switch|while|with|catch)\\b)(?:(?:static)\\s+)?(\\S+)\\s*\\(.*?\\)\\s*\\{/,\n // {name} = () => {\n /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*\\(.*?\\)\\s*=>/];\n var lines = source.split('\\n');\n\n // Walk backwards in the source lines until we find the line which matches one of the patterns above\n var code = '';\n var maxLines = Math.min(lineNumber, 20);\n for (var i = 0; i < maxLines; ++i) {\n // lineNo is 1-based, source[] is 0-based\n var line = lines[lineNumber - i - 1];\n var commentPos = line.indexOf('//');\n if (commentPos >= 0) {\n line = line.substr(0, commentPos);\n }\n if (line) {\n code = line + code;\n var len = syntaxes.length;\n for (var index = 0; index < len; index++) {\n var m = syntaxes[index].exec(code);\n if (m && m[1]) {\n return m[1];\n }\n }\n }\n }\n return undefined;\n }\n function _ensureSupportedEnvironment() {\n if (typeof Object.defineProperty !== 'function' || typeof Object.create !== 'function') {\n throw new Error('Unable to consume source maps in older browsers');\n }\n }\n function _ensureStackFrameIsLegit(stackframe) {\n if (typeof stackframe !== 'object') {\n throw new TypeError('Given StackFrame is not an object');\n } else if (typeof stackframe.fileName !== 'string') {\n throw new TypeError('Given file name is not a String');\n } else if (typeof stackframe.lineNumber !== 'number' || stackframe.lineNumber % 1 !== 0 || stackframe.lineNumber < 1) {\n throw new TypeError('Given line number must be a positive integer');\n } else if (typeof stackframe.columnNumber !== 'number' || stackframe.columnNumber % 1 !== 0 || stackframe.columnNumber < 0) {\n throw new TypeError('Given column number must be a non-negative integer');\n }\n return true;\n }\n function _findSourceMappingURL(source) {\n var sourceMappingUrlRegExp = /\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/mg;\n var lastSourceMappingUrl;\n var matchSourceMappingUrl;\n // eslint-disable-next-line no-cond-assign\n while (matchSourceMappingUrl = sourceMappingUrlRegExp.exec(source)) {\n lastSourceMappingUrl = matchSourceMappingUrl[1];\n }\n if (lastSourceMappingUrl) {\n return lastSourceMappingUrl;\n } else {\n throw new Error('sourceMappingURL not found');\n }\n }\n function _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) {\n return new Promise(function (resolve, reject) {\n var loc = sourceMapConsumer.originalPositionFor({\n line: stackframe.lineNumber,\n column: stackframe.columnNumber\n });\n if (loc.source) {\n // cache mapped sources\n var mappedSource = sourceMapConsumer.sourceContentFor(loc.source);\n if (mappedSource) {\n sourceCache[loc.source] = mappedSource;\n }\n resolve(\n // given stackframe and source location, update stackframe\n new StackFrame({\n functionName: loc.name || stackframe.functionName,\n args: stackframe.args,\n fileName: loc.source,\n lineNumber: loc.line,\n columnNumber: loc.column\n }));\n } else {\n reject(new Error('Could not get original source for given stackframe and source map'));\n }\n });\n }\n\n /**\n * @constructor\n * @param {Object} opts\n * opts.sourceCache = {url: \"Source String\"} => preload source cache\n * opts.sourceMapConsumerCache = {/path/file.js.map: SourceMapConsumer}\n * opts.offline = True to prevent network requests.\n * Best effort without sources or source maps.\n * opts.ajax = Promise returning function to make X-Domain requests\n */\n return function StackTraceGPS(opts) {\n if (!(this instanceof StackTraceGPS)) {\n return new StackTraceGPS(opts);\n }\n opts = opts || {};\n this.sourceCache = opts.sourceCache || {};\n this.sourceMapConsumerCache = opts.sourceMapConsumerCache || {};\n this.ajax = opts.ajax || _xdr;\n this._atob = opts.atob || _atob;\n this._get = function _get(location) {\n return new Promise(function (resolve, reject) {\n var isDataUrl = location.substr(0, 5) === 'data:';\n if (this.sourceCache[location]) {\n resolve(this.sourceCache[location]);\n } else if (opts.offline && !isDataUrl) {\n reject(new Error('Cannot make network requests in offline mode'));\n } else {\n if (isDataUrl) {\n // data URLs can have parameters.\n // see http://tools.ietf.org/html/rfc2397\n var supportedEncodingRegexp = /^data:application\\/json;([\\w=:\"-]+;)*base64,/;\n var match = location.match(supportedEncodingRegexp);\n if (match) {\n var sourceMapStart = match[0].length;\n var encodedSource = location.substr(sourceMapStart);\n var source = this._atob(encodedSource);\n this.sourceCache[location] = source;\n resolve(source);\n } else {\n reject(new Error('The encoding of the inline sourcemap is not supported'));\n }\n } else {\n var xhrPromise = this.ajax(location, {\n method: 'get'\n });\n // Cache the Promise to prevent duplicate in-flight requests\n this.sourceCache[location] = xhrPromise;\n xhrPromise.then(resolve, reject);\n }\n }\n }.bind(this));\n };\n\n /**\n * Creating SourceMapConsumers is expensive, so this wraps the creation of a\n * SourceMapConsumer in a per-instance cache.\n *\n * @param {String} sourceMappingURL = URL to fetch source map from\n * @param {String} defaultSourceRoot = Default source root for source map if undefined\n * @returns {Promise} that resolves a SourceMapConsumer\n */\n this._getSourceMapConsumer = function _getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) {\n return new Promise(function (resolve) {\n if (this.sourceMapConsumerCache[sourceMappingURL]) {\n resolve(this.sourceMapConsumerCache[sourceMappingURL]);\n } else {\n var sourceMapConsumerPromise = new Promise(function (resolve, reject) {\n return this._get(sourceMappingURL).then(function (sourceMapSource) {\n if (typeof sourceMapSource === 'string') {\n sourceMapSource = _parseJson(sourceMapSource.replace(/^\\)\\]\\}'/, ''));\n }\n if (typeof sourceMapSource.sourceRoot === 'undefined') {\n sourceMapSource.sourceRoot = defaultSourceRoot;\n }\n resolve(new SourceMap.SourceMapConsumer(sourceMapSource));\n }).catch(reject);\n }.bind(this));\n this.sourceMapConsumerCache[sourceMappingURL] = sourceMapConsumerPromise;\n resolve(sourceMapConsumerPromise);\n }\n }.bind(this));\n };\n\n /**\n * Given a StackFrame, enhance function name and use source maps for a\n * better StackFrame.\n *\n * @param {StackFrame} stackframe object\n * @returns {Promise} that resolves with with source-mapped StackFrame\n */\n this.pinpoint = function StackTraceGPS$$pinpoint(stackframe) {\n return new Promise(function (resolve, reject) {\n this.getMappedLocation(stackframe).then(function (mappedStackFrame) {\n function resolveMappedStackFrame() {\n resolve(mappedStackFrame);\n }\n this.findFunctionName(mappedStackFrame).then(resolve, resolveMappedStackFrame)\n // eslint-disable-next-line no-unexpected-multiline\n ['catch'](resolveMappedStackFrame);\n }.bind(this), reject);\n }.bind(this));\n };\n\n /**\n * Given a StackFrame, guess function name from location information.\n *\n * @param {StackFrame} stackframe\n * @returns {Promise} that resolves with enhanced StackFrame.\n */\n this.findFunctionName = function StackTraceGPS$$findFunctionName(stackframe) {\n return new Promise(function (resolve, reject) {\n _ensureStackFrameIsLegit(stackframe);\n this._get(stackframe.fileName).then(function getSourceCallback(source) {\n var lineNumber = stackframe.lineNumber;\n var columnNumber = stackframe.columnNumber;\n var guessedFunctionName = _findFunctionName(source, lineNumber, columnNumber);\n // Only replace functionName if we found something\n if (guessedFunctionName) {\n resolve(new StackFrame({\n functionName: guessedFunctionName,\n args: stackframe.args,\n fileName: stackframe.fileName,\n lineNumber: lineNumber,\n columnNumber: columnNumber\n }));\n } else {\n resolve(stackframe);\n }\n }, reject)['catch'](reject);\n }.bind(this));\n };\n\n /**\n * Given a StackFrame, seek source-mapped location and return new enhanced StackFrame.\n *\n * @param {StackFrame} stackframe\n * @returns {Promise} that resolves with enhanced StackFrame.\n */\n this.getMappedLocation = function StackTraceGPS$$getMappedLocation(stackframe) {\n return new Promise(function (resolve, reject) {\n _ensureSupportedEnvironment();\n _ensureStackFrameIsLegit(stackframe);\n var sourceCache = this.sourceCache;\n var fileName = stackframe.fileName;\n this._get(fileName).then(function (source) {\n var sourceMappingURL = _findSourceMappingURL(source);\n var isDataUrl = sourceMappingURL.substr(0, 5) === 'data:';\n var defaultSourceRoot = fileName.substring(0, fileName.lastIndexOf('/') + 1);\n if (sourceMappingURL[0] !== '/' && !isDataUrl && !/^https?:\\/\\/|^\\/\\//i.test(sourceMappingURL)) {\n sourceMappingURL = defaultSourceRoot + sourceMappingURL;\n }\n return this._getSourceMapConsumer(sourceMappingURL, defaultSourceRoot).then(function (sourceMapConsumer) {\n return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache).then(resolve)['catch'](function () {\n resolve(stackframe);\n });\n });\n }.bind(this), reject)['catch'](reject);\n }.bind(this));\n };\n };\n});","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return charCode - bigA;\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return charCode - littleA + littleOffset;\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return charCode - zero + numberOffset;\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n var lineA = mappingA.generatedLine;\n var lineB = mappingB.generatedLine;\n var columnA = mappingA.generatedColumn;\n var columnB = mappingB.generatedColumn;\n return lineB > lineA || lineB == lineA && columnB >= columnA || util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = {\n generatedLine: -1,\n generatedColumn: 0\n };\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach = function MappingList_forEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n};\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n};\nexports.MappingList = MappingList;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\nfunction SourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n return sourceMap.sections != null ? new IndexedSourceMapConsumer(sourceMap) : new BasicSourceMapConsumer(sourceMap);\n}\nSourceMapConsumer.fromSourceMap = function (aSourceMap) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n};\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n return this.__generatedMappings;\n }\n});\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n return this.__originalMappings;\n }\n});\nSourceMapConsumer.prototype._charIsMappingSeparator = function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n};\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n};\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping = function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n if (source != null && sourceRoot != null) {\n source = util.join(sourceRoot, source);\n }\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n};\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: Optional. the column number in the original source.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor = function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n if (this.sourceRoot != null) {\n needle.source = util.relative(this.sourceRoot, needle.source);\n }\n if (!this._sources.has(needle.source)) {\n return [];\n }\n needle.source = this._sources.indexOf(needle.source);\n var mappings = [];\n var index = this._findMapping(needle, this._originalMappings, \"originalLine\", \"originalColumn\", util.compareByOriginalPositions, binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping && mapping.originalLine === line && mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n mapping = this._originalMappings[++index];\n }\n }\n }\n return mappings;\n};\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The only parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n sources = sources.map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) ? util.relative(sourceRoot, source) : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this.file = file;\n}\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap = function SourceMapConsumer_fromSourceMap(aSourceMap) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), smc.sourceRoot);\n smc.file = aSourceMap._file;\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping();\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n destOriginalMappings.push(destMapping);\n }\n destGeneratedMappings.push(destMapping);\n }\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n return smc;\n};\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._sources.toArray().map(function (s) {\n return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n }, this);\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n } else if (aStr.charAt(index) === ',') {\n index++;\n } else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n};\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping = function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got ' + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got ' + aNeedle[aColumnName]);\n }\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n};\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans = function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n};\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor = function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n var index = this._findMapping(needle, this._generatedMappings, \"generatedLine\", \"generatedColumn\", util.compareByGeneratedPositionsDeflated, util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND));\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n if (this.sourceRoot != null) {\n source = util.join(this.sourceRoot, source);\n }\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n};\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources = function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() && !this.sourcesContent.some(function (sc) {\n return sc == null;\n });\n};\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor = function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n if (this.sourceRoot != null) {\n aSource = util.relative(this.sourceRoot, aSource);\n }\n if (this._sources.has(aSource)) {\n return this.sourcesContent[this._sources.indexOf(aSource)];\n }\n var url;\n if (this.sourceRoot != null && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\" && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)];\n }\n if ((!url.path || url.path == \"/\") && this._sources.has(\"/\" + aSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n } else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n};\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor = function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n if (this.sourceRoot != null) {\n source = util.relative(this.sourceRoot, source);\n }\n if (!this._sources.has(source)) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n source = this._sources.indexOf(source);\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n var index = this._findMapping(needle, this._originalMappings, \"originalLine\", \"originalColumn\", util.compareByOriginalPositions, util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND));\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n};\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The only parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n this._sources = new ArraySet();\n this._names = new ArraySet();\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n if (offsetLine < lastOffset.line || offsetLine === lastOffset.line && offsetColumn < lastOffset.column) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n };\n });\n}\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor = function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections, function (needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n return needle.generatedColumn - section.generatedOffset.generatedColumn;\n });\n var section = this._sections[sectionIndex];\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n return section.consumer.originalPositionFor({\n line: needle.generatedLine - (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn - (section.generatedOffset.generatedLine === needle.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0),\n bias: aArgs.bias\n });\n};\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources = function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n};\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor = function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n } else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n};\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor = function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line + (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column + (section.generatedOffset.generatedLine === generatedPosition.line ? section.generatedOffset.generatedColumn - 1 : 0)\n };\n return ret;\n }\n }\n return {\n line: null,\n column: null\n };\n};\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings = function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n var source = section.consumer._sources.at(mapping.source);\n if (section.consumer.sourceRoot !== null) {\n source = util.join(section.consumer.sourceRoot, source);\n }\n this._sources.add(source);\n source = this._sources.indexOf(source);\n var name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine + (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn + (section.generatedOffset.generatedLine === mapping.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n};\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n } else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n } else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n return index;\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + Math.random() * (high - low));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap = function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n var node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are removed from this array, by calling `shiftNextLine`.\n var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n var shiftNextLine = function () {\n var lineContents = remainingLines.shift();\n // The last line of a file might not have a newline.\n var newLine = remainingLines.shift() || \"\";\n return lineContents + newLine;\n };\n\n // We need to remember the position of \"remainingLines\"\n var lastGeneratedLine = 1,\n lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n var lastMapping = null;\n aSourceMapConsumer.eachMapping(function (mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n var nextLine = remainingLines[0];\n var code = nextLine.substr(0, mapping.generatedColumn - lastGeneratedColumn);\n remainingLines[0] = nextLine.substr(mapping.generatedColumn - lastGeneratedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n var nextLine = remainingLines[0];\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[0] = nextLine.substr(mapping.generatedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLines.length > 0) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n return node;\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n var source = aRelativePath ? util.join(aRelativePath, mapping.source) : mapping.source;\n node.add(new SourceNode(mapping.originalLine, mapping.originalColumn, source, code, mapping.name));\n }\n }\n};\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function (chunk) {\n this.add(chunk);\n }, this);\n } else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n } else {\n throw new TypeError(\"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk);\n }\n return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (var i = aChunk.length - 1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n } else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n } else {\n throw new TypeError(\"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk);\n }\n return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n var chunk;\n for (var i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n } else {\n if (chunk !== '') {\n aFn(chunk, {\n source: this.source,\n line: this.line,\n column: this.column,\n name: this.name\n });\n }\n }\n }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n var newChildren;\n var i;\n var len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len - 1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n var lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n } else if (typeof lastChild === 'string') {\n this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n } else {\n this.children.push(''.replace(aPattern, aReplacement));\n }\n return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent = function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n};\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents = function SourceNode_walkSourceContents(aFn) {\n for (var i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n var sources = Object.keys(this.sourceContents);\n for (var i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n};\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n var str = \"\";\n this.walk(function (chunk) {\n str += chunk;\n });\n return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n var generated = {\n code: \"\",\n line: 1,\n column: 0\n };\n var map = new SourceMapGenerator(aArgs);\n var sourceMappingActive = false;\n var lastOriginalSource = null;\n var lastOriginalLine = null;\n var lastOriginalColumn = null;\n var lastOriginalName = null;\n this.walk(function (chunk, original) {\n generated.code += chunk;\n if (original.source !== null && original.line !== null && original.column !== null) {\n if (lastOriginalSource !== original.source || lastOriginalLine !== original.line || lastOriginalColumn !== original.column || lastOriginalName !== original.name) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column\n }\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (var idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function (sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n return {\n code: generated.code,\n map: map\n };\n};\nexports.SourceNode = SourceNode;","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { FormattedMessage } from 'react-intl';\n\nimport { Helmet } from 'react-helmet';\n\nimport StackTrace from 'stacktrace-js';\n\nimport { version, source_url } from 'mastodon/initial_state';\n\nexport default class ErrorBoundary extends PureComponent {\n\n static propTypes = {\n children: PropTypes.node,\n };\n\n state = {\n hasError: false,\n errorMessage: undefined,\n stackTrace: undefined,\n mappedStackTrace: undefined,\n componentStack: undefined,\n };\n\n componentDidCatch (error, info) {\n this.setState({\n hasError: true,\n errorMessage: error.toString(),\n stackTrace: error.stack,\n componentStack: info && info.componentStack,\n mappedStackTrace: undefined,\n });\n\n Error.stackTraceLimit = Infinity;\n\n StackTrace.fromError(error).then((stackframes) => {\n this.setState({\n mappedStackTrace: stackframes.map((sf) => sf.toString()).join('\\n'),\n });\n }).catch(() => {\n this.setState({\n mappedStackTrace: undefined,\n });\n });\n }\n\n handleCopyStackTrace = () => {\n const { errorMessage, stackTrace, mappedStackTrace } = this.state;\n const textarea = document.createElement('textarea');\n\n let contents = [errorMessage, stackTrace];\n if (mappedStackTrace) {\n contents.push(mappedStackTrace);\n }\n\n textarea.textContent = contents.join('\\n\\n\\n');\n textarea.style.position = 'fixed';\n\n document.body.appendChild(textarea);\n\n try {\n textarea.select();\n document.execCommand('copy');\n } catch (e) {\n\n } finally {\n document.body.removeChild(textarea);\n }\n\n this.setState({ copied: true });\n setTimeout(() => this.setState({ copied: false }), 700);\n };\n\n render() {\n const { hasError, copied, errorMessage } = this.state;\n\n if (!hasError) {\n return this.props.children;\n }\n\n const likelyBrowserAddonIssue = errorMessage && errorMessage.includes('NotFoundError');\n\n return (\n <div className='error-boundary'>\n <div>\n <p className='error-boundary__error'>\n { likelyBrowserAddonIssue ? (\n <FormattedMessage id='error.unexpected_crash.explanation_addons' defaultMessage='This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.' />\n ) : (\n <FormattedMessage id='error.unexpected_crash.explanation' defaultMessage='Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.' />\n )}\n </p>\n\n <p>\n { likelyBrowserAddonIssue ? (\n <FormattedMessage id='error.unexpected_crash.next_steps_addons' defaultMessage='Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' />\n ) : (\n <FormattedMessage id='error.unexpected_crash.next_steps' defaultMessage='Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' />\n )}\n </p>\n <p className='error-boundary__footer'>Mastodon v{version} · <a href={source_url} rel='noopener noreferrer' target='_blank'><FormattedMessage id='errors.unexpected_crash.report_issue' defaultMessage='Report issue' /></a> · <button onClick={this.handleCopyStackTrace} className={copied ? 'copied' : ''}><FormattedMessage id='errors.unexpected_crash.copy_stacktrace' defaultMessage='Copy stacktrace to clipboard' /></button> · <button onClick={() => location.reload()}>reload</button></p>\n </div>\n\n <Helmet>\n <meta name='robots' content='noindex' />\n </Helmet>\n </div>\n );\n }\n\n}\n","var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n};\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\nimport warning from \"warning\";\nimport invariant from \"invariant\";\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\n/**\n * The public API for putting history on context.\n */\n\nvar Router = function (_React$Component) {\n _inherits(Router, _React$Component);\n function Router() {\n var _temp, _this, _ret;\n _classCallCheck(this, Router);\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n match: _this.computeMatch(_this.props.history.location.pathname)\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n Router.prototype.getChildContext = function getChildContext() {\n return {\n router: _extends({}, this.context.router, {\n history: this.props.history,\n route: {\n location: this.props.history.location,\n match: this.state.match\n }\n })\n };\n };\n Router.prototype.computeMatch = function computeMatch(pathname) {\n return {\n path: \"/\",\n url: \"/\",\n params: {},\n isExact: pathname === \"/\"\n };\n };\n Router.prototype.componentWillMount = function componentWillMount() {\n var _this2 = this;\n var _props = this.props,\n children = _props.children,\n history = _props.history;\n invariant(children == null || React.Children.count(children) === 1, \"A <Router> may have only one child element\");\n\n // Do this here so we can setState when a <Redirect> changes the\n // location in componentWillMount. This happens e.g. when doing\n // server rendering using a <StaticRouter>.\n this.unlisten = history.listen(function () {\n _this2.setState({\n match: _this2.computeMatch(history.location.pathname)\n });\n });\n };\n Router.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n warning(this.props.history === nextProps.history, \"You cannot change <Router history>\");\n };\n Router.prototype.componentWillUnmount = function componentWillUnmount() {\n this.unlisten();\n };\n Router.prototype.render = function render() {\n var children = this.props.children;\n return children ? React.Children.only(children) : null;\n };\n return Router;\n}(React.Component);\nRouter.propTypes = {\n history: PropTypes.object.isRequired,\n children: PropTypes.node\n};\nRouter.contextTypes = {\n router: PropTypes.object\n};\nRouter.childContextTypes = {\n router: PropTypes.object.isRequired\n};\nexport default Router;","import type { PropsWithChildren } from 'react';\nimport React from 'react';\n\nimport { createBrowserHistory } from 'history';\nimport { Router as OriginalRouter } from 'react-router';\n\nimport { layoutFromWindow } from 'mastodon/is_mobile';\n\ninterface MastodonLocationState {\n fromMastodon?: boolean;\n mastodonModalKey?: string;\n}\n\nconst browserHistory = createBrowserHistory<\n MastodonLocationState | undefined\n>();\nconst originalPush = browserHistory.push.bind(browserHistory);\nconst originalReplace = browserHistory.replace.bind(browserHistory);\n\nbrowserHistory.push = (path: string, state?: MastodonLocationState) => {\n state = state ?? {};\n state.fromMastodon = true;\n\n if (layoutFromWindow() === 'multi-column' && !path.startsWith('/deck')) {\n originalPush(`/deck${path}`, state);\n } else {\n originalPush(path, state);\n }\n};\n\nbrowserHistory.replace = (path: string, state?: MastodonLocationState) => {\n if (browserHistory.location.state?.fromMastodon) {\n state = state ?? {};\n state.fromMastodon = true;\n }\n\n if (layoutFromWindow() === 'multi-column' && !path.startsWith('/deck')) {\n originalReplace(`/deck${path}`, state);\n } else {\n originalReplace(path, state);\n }\n};\n\nexport const Router: React.FC<PropsWithChildren> = ({ children }) => {\n return <OriginalRouter history={browserHistory}>{children}</OriginalRouter>;\n};\n","import pathToRegexp from \"path-to-regexp\";\nvar patternCache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\nvar compileGenerator = function compileGenerator(pattern) {\n var cacheKey = pattern;\n var cache = patternCache[cacheKey] || (patternCache[cacheKey] = {});\n if (cache[pattern]) return cache[pattern];\n var compiledGenerator = pathToRegexp.compile(pattern);\n if (cacheCount < cacheLimit) {\n cache[pattern] = compiledGenerator;\n cacheCount++;\n }\n return compiledGenerator;\n};\n\n/**\n * Public API for generating a URL pathname from a pattern and parameters.\n */\nvar generatePath = function generatePath() {\n var pattern = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (pattern === \"/\") {\n return pattern;\n }\n var generator = compileGenerator(pattern);\n return generator(params, {\n pretty: true\n });\n};\nexport default generatePath;","var _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n};\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport warning from \"warning\";\nimport invariant from \"invariant\";\nimport { createLocation, locationsAreEqual } from \"history\";\nimport generatePath from \"./generatePath\";\n\n/**\n * The public API for updating the location programmatically\n * with a component.\n */\n\nvar Redirect = function (_React$Component) {\n _inherits(Redirect, _React$Component);\n function Redirect() {\n _classCallCheck(this, Redirect);\n return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n Redirect.prototype.isStatic = function isStatic() {\n return this.context.router && this.context.router.staticContext;\n };\n Redirect.prototype.componentWillMount = function componentWillMount() {\n invariant(this.context.router, \"You should not use <Redirect> outside a <Router>\");\n if (this.isStatic()) this.perform();\n };\n Redirect.prototype.componentDidMount = function componentDidMount() {\n if (!this.isStatic()) this.perform();\n };\n Redirect.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {\n var prevTo = createLocation(prevProps.to);\n var nextTo = createLocation(this.props.to);\n if (locationsAreEqual(prevTo, nextTo)) {\n warning(false, \"You tried to redirect to the same route you're currently on: \" + (\"\\\"\" + nextTo.pathname + nextTo.search + \"\\\"\"));\n return;\n }\n this.perform();\n };\n Redirect.prototype.computeTo = function computeTo(_ref) {\n var computedMatch = _ref.computedMatch,\n to = _ref.to;\n if (computedMatch) {\n if (typeof to === \"string\") {\n return generatePath(to, computedMatch.params);\n } else {\n return _extends({}, to, {\n pathname: generatePath(to.pathname, computedMatch.params)\n });\n }\n }\n return to;\n };\n Redirect.prototype.perform = function perform() {\n var history = this.context.router.history;\n var push = this.props.push;\n var to = this.computeTo(this.props);\n if (push) {\n history.push(to);\n } else {\n history.replace(to);\n }\n };\n Redirect.prototype.render = function render() {\n return null;\n };\n return Redirect;\n}(React.Component);\nRedirect.propTypes = {\n computedMatch: PropTypes.object,\n // private, from <Switch>\n push: PropTypes.bool,\n from: PropTypes.string,\n to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired\n};\nRedirect.defaultProps = {\n push: false\n};\nRedirect.contextTypes = {\n router: PropTypes.shape({\n history: PropTypes.shape({\n push: PropTypes.func.isRequired,\n replace: PropTypes.func.isRequired\n }).isRequired,\n staticContext: PropTypes.object\n }).isRequired\n};\nexport default Redirect;","// Written in this round about way for babel-transform-imports\nimport Redirect from \"react-router/es/Redirect\";\nexport default Redirect;","import PropTypes from 'prop-types';\n\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { Link } from 'react-router-dom';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { connect } from 'react-redux';\n\nimport { Avatar } from 'mastodon/components/avatar';\nimport { DisplayName } from 'mastodon/components/display_name';\nimport { IconButton } from 'mastodon/components/icon_button';\n\nconst messages = defineMessages({\n close: { id: 'lightbox.close', defaultMessage: 'Close' },\n});\n\nconst mapStateToProps = (state, { accountId }) => ({\n account: state.getIn(['accounts', accountId]),\n});\n\nclass Header extends ImmutablePureComponent {\n\n static propTypes = {\n accountId: PropTypes.string.isRequired,\n statusId: PropTypes.string.isRequired,\n account: ImmutablePropTypes.map.isRequired,\n onClose: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n render () {\n const { account, statusId, onClose, intl } = this.props;\n\n return (\n <div className='picture-in-picture__header'>\n <Link to={`/@${account.get('acct')}/${statusId}`} className='picture-in-picture__header__account'>\n <Avatar account={account} size={36} />\n <DisplayName account={account} />\n </Link>\n\n <IconButton icon='times' onClick={onClose} title={intl.formatMessage(messages.close)} />\n </div>\n );\n }\n\n}\n\nexport default connect(mapStateToProps)(injectIntl(Header));\n","import PropTypes from 'prop-types';\nimport { Component } from 'react';\n\nimport { connect } from 'react-redux';\n\nimport { removePictureInPicture } from 'mastodon/actions/picture_in_picture';\nimport Audio from 'mastodon/features/audio';\nimport Video from 'mastodon/features/video';\n\nimport Footer from './components/footer';\nimport Header from './components/header';\n\nconst mapStateToProps = state => ({\n ...state.get('picture_in_picture'),\n});\n\nclass PictureInPicture extends Component {\n\n static propTypes = {\n statusId: PropTypes.string,\n accountId: PropTypes.string,\n type: PropTypes.string,\n src: PropTypes.string,\n muted: PropTypes.bool,\n volume: PropTypes.number,\n currentTime: PropTypes.number,\n poster: PropTypes.string,\n backgroundColor: PropTypes.string,\n foregroundColor: PropTypes.string,\n accentColor: PropTypes.string,\n dispatch: PropTypes.func.isRequired,\n };\n\n handleClose = () => {\n const { dispatch } = this.props;\n dispatch(removePictureInPicture());\n };\n\n render () {\n const { type, src, currentTime, accountId, statusId } = this.props;\n\n if (!currentTime) {\n return null;\n }\n\n let player;\n\n if (type === 'video') {\n player = (\n <Video\n src={src}\n currentTime={this.props.currentTime}\n volume={this.props.volume}\n muted={this.props.muted}\n autoPlay\n inline\n alwaysVisible\n />\n );\n } else if (type === 'audio') {\n player = (\n <Audio\n src={src}\n currentTime={this.props.currentTime}\n volume={this.props.volume}\n muted={this.props.muted}\n poster={this.props.poster}\n backgroundColor={this.props.backgroundColor}\n foregroundColor={this.props.foregroundColor}\n accentColor={this.props.accentColor}\n autoPlay\n />\n );\n }\n\n return (\n <div className='picture-in-picture'>\n <Header accountId={accountId} statusId={statusId} onClose={this.handleClose} />\n\n {player}\n\n <Footer statusId={statusId} />\n </div>\n );\n }\n\n}\n\nexport default connect(mapStateToProps)(PictureInPicture);\n","import logo from 'mastodon/../images/logo.svg';\n\nexport const WordmarkLogo: React.FC = () => (\n <svg viewBox='0 0 261 66' className='logo logo--wordmark' role='img'>\n <title>Mastodon</title>\n <use xlinkHref='#logo-symbol-wordmark' />\n </svg>\n);\n\nexport const SymbolLogo: React.FC = () => (\n <img src={logo} alt='Mastodon' className='logo logo--icon' />\n);\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport { Link, withRouter } from 'react-router-dom';\n\nimport { connect } from 'react-redux';\n\nimport { openModal } from 'mastodon/actions/modal';\nimport { fetchServer } from 'mastodon/actions/server';\nimport { Avatar } from 'mastodon/components/avatar';\nimport { Icon } from 'mastodon/components/icon';\nimport { WordmarkLogo, SymbolLogo } from 'mastodon/components/logo';\nimport { registrationsOpen, me, sso_redirect } from 'mastodon/initial_state';\n\nconst Account = connect(state => ({\n account: state.getIn(['accounts', me]),\n}))(({ account }) => (\n <Link to={`/@${account.get('acct')}`} title={account.get('acct')}>\n <Avatar account={account} size={35} />\n </Link>\n));\n\nconst messages = defineMessages({\n search: { id: 'navigation_bar.search', defaultMessage: 'Search' },\n});\n\nconst mapStateToProps = (state) => ({\n signupUrl: state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up',\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n openClosedRegistrationsModal() {\n dispatch(openModal({ modalType: 'CLOSED_REGISTRATIONS' }));\n },\n dispatchServer() {\n dispatch(fetchServer());\n }\n});\n\nclass Header extends PureComponent {\n\n static contextTypes = {\n identity: PropTypes.object,\n };\n\n static propTypes = {\n openClosedRegistrationsModal: PropTypes.func,\n location: PropTypes.object,\n signupUrl: PropTypes.string.isRequired,\n dispatchServer: PropTypes.func,\n intl: PropTypes.object.isRequired,\n };\n\n componentDidMount () {\n const { dispatchServer } = this.props;\n dispatchServer();\n }\n\n openComposeHalfModal = () => {\n // const scrollChildren = document.querySelector('.scrollable > div');\n // if (scrollChildren) {\n // const { pageTop } = window.visualViewport;\n // scrollChildren.style.top = `${-pageTop}px`;\n // scrollChildren.dataset.pageTop = pageTop;\n // }\n\n setTimeout(() => {\n document.documentElement.classList.add('show-compose-half-modal');\n }, 0);\n };\n\n render () {\n const { signedIn } = this.context.identity;\n const { location, openClosedRegistrationsModal, signupUrl, intl } = this.props;\n\n let content;\n\n if (signedIn) {\n const isBottomRightButton = localStorage.plusminus_config_post_button_location === 'bottom_right';\n const useHalfModal = localStorage.plusminus_config_post_half_modal === 'enabled';\n const buttonInner = (\n <>\n {isBottomRightButton && <Icon id='send' fixedWidth />}\n {!isBottomRightButton && <FormattedMessage id='compose_form.publish' defaultMessage='Publish' /> }\n </>\n );\n content = (\n <>\n {useHalfModal ? (\n <div className={`button ${isBottomRightButton ? 'bottom_right' : ''}`} onClick={this.openComposeHalfModal} onKeyUp={this.openComposeHalfModal}>\n {buttonInner}\n </div>\n ) : location.pathname !== '/publish' && (\n <Link to='/publish' className={`button ${isBottomRightButton ? 'bottom_right' : ''}`}>\n {buttonInner}\n </Link>\n )}\n <Account />\n </>\n );\n } else {\n\n if (sso_redirect) {\n content = (\n <a href={sso_redirect} data-method='post' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sso_redirect' defaultMessage='Login or Register' /></a>\n )\n } else {\n let signupButton;\n\n if (registrationsOpen) {\n signupButton = (\n <a href={signupUrl} className='button'>\n <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />\n </a>\n );\n } else {\n signupButton = (\n <button className='button' onClick={openClosedRegistrationsModal}>\n <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />\n </button>\n );\n }\n\n content = (\n <>\n {signupButton}\n <a href='/auth/sign_in' className='button button-tertiary'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Login' /></a>\n </>\n );\n }\n }\n\n return (\n <div className='ui__header'>\n <Link to='/' className='ui__header__logo'>\n <WordmarkLogo />\n <SymbolLogo />\n </Link>\n\n <div className='ui__header__links'>\n {content}\n </div>\n </div>\n );\n }\n\n}\n\nexport default injectIntl(withRouter(connect(mapStateToProps, mapDispatchToProps)(Header)));\n","export const download = (fileName, body) => {\n const blob = new Blob([body], { type: 'text/plain' });\n\n const a = document.createElement('a');\n document.body.appendChild(a);\n const url = window.URL.createObjectURL(blob);\n a.href = url;\n a.download = fileName;\n a.click();\n\n setTimeout(() => {\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }, 0);\n};\n\nexport const open = (accept) => {\n const input = document.createElement('input');\n document.body.appendChild(input);\n input.type = 'file';\n input.accept = accept;\n\n return new Promise((resolve) => {\n input.onchange = async (ev) => {\n const { files } = ev.target;\n if (!files || files.length === 0) {\n resolve(null);\n }\n const file = files[0];\n resolve(await file.text());\n document.body.removeChild(input);\n };\n input.onabort = () => {\n document.body.removeChild(input);\n };\n input.click();\n });\n};\n","/* eslint-disable react/jsx-no-bind */\n\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { injectIntl, FormattedMessage } from 'react-intl';\n\nimport Button from 'mastodon/components/button';\n\nimport { open, download } from '../util/file';\n\nconst styles = {\n container: {\n padding: '1rem',\n display: 'flex',\n flexDirection: 'column',\n flex: 1,\n },\n title: {\n fontSize: '1.6rem',\n lineHeight: '2em',\n display: 'flex',\n justifyContent: 'space-between',\n },\n buttonContainer: {\n display: 'flex',\n },\n importButton: {\n marginRight: '1rem',\n },\n main: {\n flex: 1,\n },\n section: {\n fontSize: '1.3rem',\n lineHeight: '2em',\n marginTop: '1em',\n },\n config: {\n fontSize: '1rem',\n marginTop: '1rem',\n },\n childConfig: {\n fontSize: '1rem',\n marginTop: '1rem',\n marginLeft: 20,\n },\n hint: {\n opacity: 0.6,\n marginTop: 4,\n fontSize: '0.85em',\n },\n description: {\n opacity: 0.6,\n marginTop: 4,\n marginLeft: 20,\n fontSize: '0.85em',\n },\n link: {\n color: 'rgb(165 199 255)',\n textDecoration: 'underline',\n },\n actionBar: {\n display: 'flex',\n justifyContent: 'flex-end',\n padding: '1rem',\n paddingTop: 0,\n },\n cancelButton: {\n marginRight: '1rem',\n },\n customCwInputs: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n marginTop: '1rem',\n marginLeft: 20,\n maxWidth: '640px',\n },\n customCwInput: {\n display: 'flex',\n width: '100%',\n marginBottom: '0.5rem',\n },\n customCwInputWrapper: {\n display: 'flex',\n flexWrap: 'wrap',\n flex: 1,\n },\n customCwInputTextArea: {\n flex: 2,\n fontSize: 16,\n },\n customCwInputSelect: {\n flex: 1,\n fontSize: 16,\n },\n customCwInputButtonWrapper: {\n display: 'flex',\n alignItems: 'center',\n },\n customCwInputButton: {\n marginLeft: '0.25rem',\n fontSize: 16,\n minWidth: '25px',\n minHeight: '25px',\n },\n customCwInputAddButton: {\n fontSize: 16,\n minWidth: '25px',\n minHeight: '25px',\n },\n developerMode: {\n border: 0,\n padding: 0,\n background: 'transparent',\n color: 'inherit',\n fontSize: 'inherit',\n cursor: 'text',\n },\n};\n\nconst localStorageKeyPrefix = 'plusminus_config_';\n\nclass PlusMinusSettingModalLoader extends React.Component {\n\n constructor() {\n super();\n\n this.state = {\n open: false,\n };\n\n this.onOpenEvent = this.onOpenEvent.bind(this);\n }\n\n componentDidMount() {\n window.__PLUS_MINUS_EVENTS__.addEventListener('openConfig', this.onOpenEvent);\n }\n\n componentWillUnmount() {\n window.__PLUS_MINUS_EVENTS__.removeEventListener('openConfig', this.onOpenEvent);\n }\n\n onOpenEvent() {\n this.setState({\n open: true,\n });\n }\n\n onClickCancel = () => {\n this.setState({ open: false });\n };\n\n render() {\n if (this.state.open) {\n return (\n <PlusMinusSettingModal onCancel={this.onClickCancel} />\n );\n }\n return <></>;\n }\n\n}\n\n\nclass PlusMinusSettingModal extends React.Component {\n\n static propTypes = {\n onCancel: PropTypes.func.isRequired,\n };\n\n UNSAFE_componentWillMount() {\n this.parseConfig(localStorage);\n }\n\n parseConfig(baseObj) {\n const currentSettings = Object.keys(baseObj).filter((key) => key.startsWith(localStorageKeyPrefix)).reduce((obj, key) => {\n if (baseObj[key].startsWith('{') || baseObj[key].startsWith('[')) {\n try {\n obj[key.replace(localStorageKeyPrefix, '')] = JSON.parse(baseObj[key]);\n } catch (e) {\n // eslint-disable-next-line eqeqeq\n if (baseObj[key] != null) {\n obj[key.replace(localStorageKeyPrefix, '')] = baseObj[key];\n }\n }\n } else {\n obj[key.replace(localStorageKeyPrefix, '')] = baseObj[key];\n }\n return obj;\n }, { ...this.state.config });\n this.setState({ config: currentSettings });\n }\n\n componentDidMount() {\n document.body.style.overflow = 'hidden';\n }\n\n componentWillUnmount() {\n document.body.style.overflow = '';\n }\n\n state = {\n developerModeButtonClicked: 0,\n config: {\n timestamp: 'relative',\n content: 'plain',\n sidenav: 'normal',\n post_button_location: 'normal',\n post_page_link: 'hidden',\n searchbox: 'hidden',\n custom_spoiler_button: 'hidden',\n custom_spoiler_buttons: ['ããŽãŽ'],\n sp_header: 'visible',\n decode_morse: 'disabled',\n encode_morse: 'disabled',\n reload_button: 'hidden',\n keyword_based_visibility: 'disabled',\n spoiler_keyword_based_visibility: 'disabled',\n keyword_based_visibilities: [{ keyword: 'ã“ã“ã ã‘ã®è©±ãªã‚“ã ã‘ã©', visibility: 'unlisted' }],\n emotional_button: 'hidden',\n post_half_modal: 'disabled',\n quick_report: 'hidden',\n live_mode_button: 'hidden',\n developer_mode: 'disabled',\n decode_ame: 'disabled',\n encode_ame: 'disabled',\n komiflo_linkify: 'disabled',\n jumbomoji: 'disabled',\n filter_media_only_toots: 'disabled',\n max_image_scale: 200,\n },\n };\n\n updateConfig(key, value) {\n this.setState({ config: { ...this.state.config, [key]: value } });\n }\n\n onClickDeveloperModeButton = () => {\n if (this.state.config.developer_mode === 'enabled') {\n return;\n }\n\n this.setState({\n developerModeButtonClicked: this.state.developerModeButtonClicked+1,\n }, () => {\n if (this.state.developerModeButtonClicked === 7) {\n localStorage[`${localStorageKeyPrefix}developer_mode`] = 'enabled';\n alert('開発者モードを有効化ã—ã¾ã—ãŸã€‚リãƒãƒ¼ãƒ‰ã—ã¾ã™ã€‚');\n location.reload();\n }\n });\n };\n\n render() {\n return (\n <div className={'plusminus-config__root'}>\n <div style={styles.container}>\n <h1 style={styles.title}>\n <div>\n plusminusè¨å®š (<button style={styles.developerMode} onClick={this.onClickDeveloperModeButton}>β</button>{this.state.config.developer_mode === 'enabled' && '!'})\n </div>\n <div style={styles.buttonContainer}>\n <div style={styles.importButton}>\n <Button className='button-secondary' onClick={this.handleImport}>インãƒãƒ¼ãƒˆ</Button>\n </div>\n <div>\n <Button className='button-secondary' onClick={this.handleExport}>エクスãƒãƒ¼ãƒˆ</Button>\n </div>\n </div>\n </h1>\n\n <div style={styles.main}>\n <hr />\n\n <p style={styles.hint}>以下ã®è¨å®šã¯ãƒ–ラウザã”ã¨ã«ä¿å˜ã•ã‚Œã¾ã™</p>\n\n <div style={styles.section}>\n <h2>スマートフォンå‘ã‘UI</h2>\n </div>\n\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.sidenav === 'reverse'}\n onChange={(e) => this.updateConfig('sidenav', e.target.checked ? 'reverse' : 'normal')}\n />\n ナビゲージョンを左å´ã«è¡¨ç¤ºã™ã‚‹\n </label>\n <p style={styles.description}>サイド ナビゲーションを左å´ã«è¡¨ç¤ºã—ã¾ã™</p>\n </div>\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.post_button_location === 'bottom_right'}\n onChange={(e) => this.updateConfig('post_button_location', e.target.checked ? 'bottom_right' : 'normal')}\n />\n 投稿ボタンをå³ä¸‹ã«è¡¨ç¤ºã™ã‚‹\n </label>\n <p style={styles.description}>ç”»é¢ä¸Šéƒ¨ã®æŠ•ç¨¿ãƒœã‚¿ãƒ³ã‚’å³ä¸‹ã«è¡¨ç¤ºã—ã¾ã™</p>\n </div>\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.post_half_modal === 'enabled'}\n onChange={(e) => this.updateConfig('post_half_modal', e.target.checked ? 'enabled' : 'disabled')}\n />\n 投稿欄をãƒãƒ¼ãƒ•ãƒ¢ãƒ¼ãƒ€ãƒ«ã§è¡¨ç¤ºã™ã‚‹\n </label>\n <p style={styles.description}>投稿欄をå˜ä¸€ã®ç”»é¢ã§è¡¨ç¤ºã›ãšã«ã€ç”»é¢ä¸‹éƒ¨ã«ãƒãƒ¼ãƒ•ãƒ¢ãƒ¼ãƒ€ãƒ«ã§è¡¨ç¤ºã—ã¾ã™</p>\n </div>\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.sp_header === 'hidden'}\n onChange={(e) => this.updateConfig('sp_header', e.target.checked ? 'hidden' : 'visible')}\n />\n ヘッダーをéžè¡¨ç¤ºã«ã™ã‚‹\n </label>\n <p style={styles.description}>ç”»é¢ä¸Šéƒ¨ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’éžè¡¨ç¤ºã«ã—ã¾ã™</p>\n </div>\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.reload_button === 'visible'}\n onChange={(e) => this.updateConfig('reload_button', e.target.checked ? 'visible' : 'hidden')}\n />\n リãƒãƒ¼ãƒ‰ãƒœã‚¿ãƒ³ã‚’表示ã™ã‚‹\n </label>\n <p style={styles.description}>サイド ナビゲーション最上部ã«ãƒªãƒãƒ¼ãƒ‰ãƒœã‚¿ãƒ³ã‚’表示ã—ã¾ã™<br />PWAã¨ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ã„ã‚‹å ´åˆã«ãƒªãƒãƒ¼ãƒ‰ã§ããªã„å•é¡Œã‚’暫定的ã«è§£æ±ºã—ã¾ã™</p>\n </div>\n\n <div style={styles.section}>\n <h2>タイムライン</h2>\n </div>\n\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.timestamp === 'absolute'}\n onChange={(e) => this.updateConfig('timestamp', e.target.checked ? 'absolute' : 'relative')}\n />\n 絶対時刻表示\n </label>\n <p style={styles.description}>タイムラインä¸ã®æ™‚刻表示を相対時刻ã‹ã‚‰çµ¶å¯¾æ™‚刻ã«å¤‰æ›´ã—ã¾ã™</p>\n </div>\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.content === 'markdown'}\n onChange={(e) => this.updateConfig('content', e.target.checked ? 'markdown' : 'plain')}\n />\n Markdownをレンダリング(実験的)\n </label>\n <p style={styles.description}><a className={'link'} href='https://github.com/mixmark-io/turndown' target='_blank'>turndown</a>ã¨<a className={'link'} href='https://github.com/remarkjs/react-markdown' target='_blank'>react-markdown</a>を使用ã—ã¦Markdownをレンダリングã—ã¾ã™<br />投稿ã®HTMLã«ä¾å˜ã™ã‚‹ãŸã‚ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚„改行ãªã©ãŒæ£ã—ãåæ˜ ã•ã‚Œã‚‹ã¨ã¯é™ã‚Šã¾ã›ã‚“</p>\n </div>\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.jumbomoji === 'enabled'}\n onChange={(e) => this.updateConfig('jumbomoji', e.target.checked ? 'enabled' : 'disabled')}\n />\n Jumbomojiを有効ã«ã™ã‚‹\n </label>\n <p style={styles.description}>Slackã®ã‚ˆã†ã«ã€çµµæ–‡å—ã®ã¿ã®æŠ•ç¨¿ã®å ´åˆã¯çµµæ–‡å—を大ãã表示ã—ã¾ã™</p>\n </div>\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.post_page_link === 'visible'}\n onChange={(e) => this.updateConfig('post_page_link', e.target.checked ? 'visible' : 'hidden')}\n />\n 投稿元ページã®ãƒªãƒ³ã‚¯ã‚’表示ã™ã‚‹\n </label>\n <p style={styles.description}>投稿時刻ã®å³å´ã«æŠ•ç¨¿å…ƒãƒšãƒ¼ã‚¸ã‚’別タブã§é–‹ããƒªãƒ³ã‚¯ã‚’è¿½åŠ ã—ã¾ã™</p>\n </div>\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.searchbox === 'visible'}\n onChange={(e) => this.updateConfig('searchbox', e.target.checked ? 'visible' : 'hidden')}\n />\n Misskey Flavored Markdownã®æ¤œç´¢çª“を展開ã™ã‚‹\n </label>\n <p style={styles.description}><a className={'link'} href='https://wiki.misskey.io/ja/function/mfm#%E6%A4%9C%E7%B4%A2%E7%AA%93' target='_blank'>Misskey Flavored Markdownã®æ¤œç´¢çª“</a>を投稿本文ã®ä¸‹ã«å±•é–‹ã—ã¾ã™</p>\n </div>\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.decode_morse === 'enabled'}\n onChange={(e) => this.updateConfig('decode_morse', e.target.checked ? 'enabled' : 'disabled')}\n />\n y4aスタイルã®ãƒ¢ãƒ¼ãƒ«ã‚¹ç¬¦å·ã‚’デコードã™ã‚‹\n </label>\n <p style={styles.description}>\n <a className={'link'} href='https://github.com/shibafu528/Yukari' target='_blank'>Yukari for Android</a>スタイルã®æ—¥æœ¬èªžãƒ¢ãƒ¼ãƒ«ã‚¹ç¬¦å·ã‚’カタカナã«å¤‰æ›ã—ã¦è¡¨ç¤ºã—ã¾ã™<br />\n 英数モールス符å·ã‚‚デコードã§ãã¾ã™ãŒã€äº’æ›æ€§ã¯ã‚ã‚Šã¾ã›ã‚“\n </p>\n </div>\n {this.state.config.developer_mode === 'enabled' && <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.komiflo_linkify === 'enabled'}\n onChange={(e) => this.updateConfig('komiflo_linkify', e.target.checked ? 'enabled' : 'disabled')}\n />\n comics/xxxxxx ã®æ–‡å—列をKomifloã®ãƒªãƒ³ã‚¯ã«ç½®ãæ›ãˆã‚‹\n </label>\n </div>}\n {this.state.config.developer_mode === 'enabled' && <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.decode_ame === 'enabled'}\n onChange={(e) => this.updateConfig('decode_ame', e.target.checked ? 'enabled' : 'disabled')}\n />\n ᕂᕙᕸᕵᖋᕂá–ᕸᖓᕋᖓᖒᕧᕓーᕩᕙᖋ\n </label>\n </div>}\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.quick_report === 'visible'}\n onChange={(e) => this.updateConfig('quick_report', e.target.checked ? 'visible' : 'hidden')}\n />\n 投稿下部ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ãƒœã‚¿ãƒ³ã«é€šå ±ãƒœã‚¿ãƒ³ã‚’è¿½åŠ ã™ã‚‹\n </label>\n <p style={styles.description}>\n é€šå ±ã‚’ã™ã°ã‚„ãã€ç°¡å˜ã«è¡Œãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™\n </p>\n </div>\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.filter_media_only_toots === 'enabled'}\n onChange={(e) => this.updateConfig('filter_media_only_toots', e.target.checked ? 'enabled' : 'disabled')}\n />\n <code>🖼ï¸</code> ã‹ã‚‰å§‹ã¾ã‚‹åå‰ã®ãƒªã‚¹ãƒˆã®ãƒˆã‚¥ãƒ¼ãƒˆã‚’メディアã§ãƒ•ã‚£ãƒ«ã‚¿ã™ã‚‹\n </label>\n <p style={styles.description}>\n åå‰ãŒ <code>🖼ï¸</code> ã‹ã‚‰å§‹ã¾ã‚‹ãƒªã‚¹ãƒˆTLã®è¡¨ç¤ºå¯¾è±¡ã‚’ã€ãƒ¡ãƒ‡ã‚£ã‚¢ãŒæ·»ä»˜ã•ã‚Œã¦ã„ã‚‹ã‚‚ã®ã ã‘ã«çµžã‚Šè¾¼ã¿ã¾ã™\n </p>\n </div>\n <div style={styles.config}>\n <label>\n ç”»åƒãƒ—レビューã®æ‹¡å¤§å€çŽ‡åˆ¶é™: \n <input\n type='number'\n value={this.state.config.max_image_scale}\n onChange={(e) => {\n const value = parseInt(e.target.value || '0');\n if (!isNaN(value)) {\n this.updateConfig('max_image_scale', value);\n }\n }}\n />\n %\n </label>\n </div>\n\n <div style={styles.section}>\n <h2>投稿欄</h2>\n </div>\n\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.custom_spoiler_button === 'visible'}\n onChange={(e) => this.updateConfig('custom_spoiler_button', e.target.checked ? 'visible' : 'hidden')}\n />\n CW (Content Warning)ã®ãƒ—リセットボタンを表示ã™ã‚‹\n </label>\n <p style={styles.description}>ボタンを押ã™ã ã‘ã§ä»»æ„ã®æ–‡ç« ã‚’CWã«å…¥åŠ›ã§ãるよã†ã«ãªã‚Šã¾ã™<br />ã¾ãŸã€CWãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ãªã„å ´åˆã¯è‡ªå‹•çš„ã«æœ‰åŠ¹ã«ãªã‚Šã¾ã™</p>\n\n <div style={styles.customCwInputs}>\n {this.state.config.custom_spoiler_buttons?.map((buttonText, index) => (\n <div key={`${index}_${this.state.config.custom_spoiler_buttons.length}`} style={styles.customCwInput}>\n <input\n style={styles.customCwInputTextArea}\n type='text'\n value={buttonText}\n onChange={(e) => {\n this.state.config.custom_spoiler_buttons[index] = e.target.value;\n this.updateConfig('custom_spoiler_buttons', this.state.config.custom_spoiler_buttons);\n }}\n />\n <button\n style={styles.customCwInputButton}\n onClick={() => {\n this.state.config.custom_spoiler_buttons.splice(index, 1);\n this.updateConfig('custom_spoiler_buttons', this.state.config.custom_spoiler_buttons);\n }}\n >\n -\n </button>\n </div>\n ))}\n <button\n style={styles.customCwInputAddButton}\n onClick={() => {\n this.state.config.custom_spoiler_buttons.push('');\n this.updateConfig('custom_spoiler_buttons', this.state.config.custom_spoiler_buttons);\n }}\n >\n +\n </button>\n </div>\n </div>\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.keyword_based_visibility === 'enabled'}\n onChange={(e) => this.updateConfig('keyword_based_visibility', e.target.checked ? 'enabled' : 'disabled')}\n />\n ã‚ーワードã§å…¬é–‹ç¯„囲を自動的ã«è¨å®šã™ã‚‹\n </label>\n <p style={styles.description}>指定ã—ãŸæ–‡å—列ãŒæœ¬æ–‡ã«å«ã¾ã‚Œã‚‹å ´åˆã«ã€å…¬é–‹ç¯„囲を自動的ã«è¨å®šã—ã¾ã™</p>\n\n <div style={styles.childConfig}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.spoiler_keyword_based_visibility === 'enabled'}\n onChange={(e) => this.updateConfig('spoiler_keyword_based_visibility', e.target.checked ? 'enabled' : 'disabled')}\n />\n CW (Content Warning)も対象ã«ã™ã‚‹\n </label>\n <p style={styles.description}>\n 指定ã—ãŸæ–‡å—列ãŒCWã«å«ã¾ã‚Œã‚‹å ´åˆã«ã‚‚ã€å…¬é–‹ç¯„囲を自動的ã«è¨å®šã—ã¾ã™<br />\n CWプリセットボタンã§æœ‰ç”¨ã§ã™\n </p>\n </div>\n\n <div style={styles.config}>\n <p style={styles.description}>ã‚ーワードã¯ä¸Šã«ã‚ã‚‹ã‚‚ã®ãŒå„ªå…ˆã•ã‚Œã¾ã™</p>\n <div style={styles.customCwInputs}>\n {this.state.config.keyword_based_visibilities?.map(({ keyword, visibility }, index) => (\n <div key={`${index}_${this.state.config.custom_spoiler_buttons.length}`} style={styles.customCwInput}>\n <div className='custom-cw-input__wrapper' style={styles.customCwInputWrapper}>\n <input\n style={styles.customCwInputTextArea}\n type='text'\n placeholder={'ã‚ーワード'}\n value={keyword}\n onChange={(e) => {\n this.state.config.keyword_based_visibilities[index].keyword = e.target.value;\n this.updateConfig('keyword_based_visibilities', this.state.config.keyword_based_visibilities);\n }}\n />\n <select\n style={styles.customCwInputSelect}\n value={visibility}\n onChange={(e) => {\n this.state.config.keyword_based_visibilities[index].visibility = e.target.value;\n this.updateConfig('keyword_based_visibilities', this.state.config.keyword_based_visibilities);\n }}\n >\n <option value='public'>Public</option>\n <option value='unlisted'>Unlisted</option>\n <option value='private'>Followers only</option>\n <option value='direct'>Mentioned people only</option>\n </select>\n </div>\n <div className='custom-cw-input-button__wrapper' style={styles.customCwInputButtonWrapper}>\n <div className='custom-cw-input-button__wrapper-order-button'>\n <button\n style={styles.customCwInputButton}\n disabled={index === 0}\n onClick={() => {\n const obj = this.state.config.keyword_based_visibilities[index];\n this.state.config.keyword_based_visibilities.splice(index, 1);\n this.state.config.keyword_based_visibilities.splice(index - 1, 0, obj);\n this.updateConfig('keyword_based_visibilities', this.state.config.keyword_based_visibilities);\n }}\n >\n ↑\n </button>\n <button\n style={styles.customCwInputButton}\n disabled={index === this.state.config.keyword_based_visibilities.length - 1}\n onClick={() => {\n const obj = this.state.config.keyword_based_visibilities[index];\n this.state.config.keyword_based_visibilities.splice(index, 1);\n this.state.config.keyword_based_visibilities.splice(index + 1, 0, obj);\n this.updateConfig('keyword_based_visibilities', this.state.config.keyword_based_visibilities);\n this.updateConfig('keyword_based_visibilities', this.state.config.keyword_based_visibilities);\n }}\n >\n ↓\n </button>\n </div>\n\n <button\n style={styles.customCwInputButton}\n onClick={() => {\n this.state.config.keyword_based_visibilities.splice(index, 1);\n this.updateConfig('keyword_based_visibilities', this.state.config.keyword_based_visibilities);\n }}\n >\n -\n </button>\n </div>\n </div>\n ))}\n <button\n style={styles.customCwInputAddButton}\n onClick={() => {\n this.state.config.keyword_based_visibilities.push({ keyword: '', visibility: 'public' });\n this.updateConfig('keyword_based_visibilities', this.state.config.keyword_based_visibilities);\n }}\n >\n +\n </button>\n </div>\n </div>\n </div>\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.emotional_button === 'visible'}\n onChange={(e) => this.updateConfig('emotional_button', e.target.checked ? 'visible' : 'hidden')}\n />\n åŠè§’英数をUnicodeã®æ•°å¦ç”¨è‹±æ•°å—ブãƒãƒƒã‚¯ã«ç½®ãæ›ãˆã‚‹ãƒœã‚¿ãƒ³ã‚’表示ã™ã‚‹\n </label>\n <p style={styles.description}>\n <code>Lorem ipsum dolor sit amet,</code> ã‚’ <code>ð“›ð“¸ð“»ð“®ð“¶ ð“²ð“¹ð“¼ð“¾ð“¶ ð“ð“¸ð“µð“¸ð“» ð“¼ð“²ð“½ ð“ªð“¶ð“®ð“½,</code> ãªã©ã®ã‚¨ãƒ¢ã„æ–‡å—ã«ç½®ãæ›ãˆã‚‹ãƒœã‚¿ãƒ³ã‚’表示ã—ã¾ã™\n </p>\n </div>\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.encode_morse === 'enabled'}\n onChange={(e) => this.updateConfig('encode_morse', e.target.checked ? 'enabled' : 'disabled')}\n />\n y4aスタイルã®ãƒ¢ãƒ¼ãƒ«ã‚¹ç¬¦å·ã«ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã™ã‚‹ãƒœã‚¿ãƒ³ã‚’表示ã™ã‚‹\n </label>\n <p style={styles.description}>\n ã²ã‚‰ãŒãª/カタカナを<a className={'link'} href='https://github.com/shibafu528/Yukari' target='_blank'>Yukari for Android</a>スタイルã®ãƒ¢ãƒ¼ãƒ«ã‚¹ç¬¦å·ã«å¤‰æ›ã—ã¾ã™<br />\n 英数モールス符å·ã‚‚エンコードã§ãã¾ã™ãŒã€äº’æ›æ€§ã¯ã‚ã‚Šã¾ã›ã‚“<br />\n æ¼¢å—/一部を除ã記å·ã¯å¯¾è±¡å¤–ã§ã™\n </p>\n </div>\n {this.state.config.developer_mode === 'enabled' && <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.encode_ame === 'enabled'}\n onChange={(e) => this.updateConfig('encode_ame', e.target.checked ? 'enabled' : 'disabled')}\n />\n ᕂᕙᕸᕵᖋᕂá–ᕸᖓᕋᖓᖒᕊᕓᕪᕆᕼᕟᖓᖒᕲᖇᕆᕘᕙᖋ\n </label>\n </div>}\n <div style={styles.config}>\n <label>\n <input\n type='checkbox'\n checked={this.state.config.live_mode_button === 'visible'}\n onChange={(e) => this.updateConfig('live_mode_button', e.target.checked ? 'visible' : 'hidden')}\n />\n 実æ³ãƒ¢ãƒ¼ãƒ‰ã‚’切り替ãˆã‚‹ãƒœã‚¿ãƒ³ã‚’表示ã™ã‚‹\n </label>\n <p style={styles.description}>\n 投稿後もãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°ã‚’投稿欄ã«æ®‹ã™ã“ã¨ã§ã€ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°ã‚’使ã£ãŸå®Ÿæ³ãŒè¡Œã„ã‚„ã™ããªã‚Šã¾ã™<br />\n ã“ã®è¨å®šã‚’無効化ã™ã‚‹ã¨ã€å®Ÿæ³ãƒ¢ãƒ¼ãƒ‰ã‚‚自動的ã«ç„¡åŠ¹åŒ–ã•ã‚Œã¾ã™\n </p>\n </div>\n </div>\n </div>\n\n <div style={styles.actionBar}>\n <div style={styles.cancelButton}>\n <Button onClick={this.handleCancel} className='button-secondary'>\n <FormattedMessage id='confirmation_modal.cancel' defaultMessage='Cancel' />\n </Button>\n </div>\n <Button onClick={this.handleSave}>\n <FormattedMessage id='compose_form.save_changes' defaultMessage='Save' />\n </Button>\n </div>\n </div>\n );\n }\n\n handleCancel = () => {\n this.props.onCancel();\n };\n\n convert = (obj = {}) => {\n Object.keys(this.state.config).forEach((key) =>\n obj[`${localStorageKeyPrefix}${key}`] = typeof this.state.config[key] === 'object' ? JSON.stringify(this.state.config[key]) : this.state.config[key],\n );\n return obj;\n };\n\n handleImport = async () => {\n const text = await open('.json');\n if (!text) {\n return;\n }\n\n try {\n const config = JSON.parse(text);\n this.parseConfig(config);\n } catch (e) {\n console.error(e);\n alert('JSONã®ãƒ‘ースã«å¤±æ•—ã—ã¾ã—ãŸ');\n }\n };\n\n handleExport = () => {\n const config = JSON.stringify(this.convert());\n download(`mastodon-plusminus-settings-${new Date().getTime()}.json`, config);\n };\n\n handleSave = () => {\n Object.keys(this.state.config).forEach((key) =>\n localStorage[`${localStorageKeyPrefix}${key}`] = typeof this.state.config[key] === 'object' ? JSON.stringify(this.state.config[key]) : this.state.config[key],\n );\n\n if (this.state.config.live_mode_button === 'hidden') {\n // NOTE: 実æ³ãƒ¢ãƒ¼ãƒ‰ãƒœã‚¿ãƒ³ãŒç„¡åŠ¹åŒ–ã•ã‚Œã¦ã„ã‚‹ã®ã§ã€å®Ÿæ³ãƒ¢ãƒ¼ãƒ‰ã‚‚無効化ã™ã‚‹\n localStorage[`${localStorageKeyPrefix}live_mode`] = 'disabled';\n }\n\n location.reload();\n };\n\n}\n\nexport default injectIntl(PlusMinusSettingModalLoader);\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { FormattedMessage } from 'react-intl';\n\nimport spring from 'react-motion/lib/spring';\n\nimport Motion from '../util/optional_motion';\n\nexport default class UploadArea extends PureComponent {\n\n static propTypes = {\n active: PropTypes.bool,\n onClose: PropTypes.func,\n };\n\n handleKeyUp = (e) => {\n const keyCode = e.keyCode;\n if (this.props.active) {\n switch(keyCode) {\n case 27:\n e.preventDefault();\n e.stopPropagation();\n this.props.onClose();\n break;\n }\n }\n };\n\n componentDidMount () {\n window.addEventListener('keyup', this.handleKeyUp, false);\n }\n\n componentWillUnmount () {\n window.removeEventListener('keyup', this.handleKeyUp);\n }\n\n render () {\n const { active } = this.props;\n\n return (\n <Motion defaultStyle={{ backgroundOpacity: 0, backgroundScale: 0.95 }} style={{ backgroundOpacity: spring(active ? 1 : 0, { stiffness: 150, damping: 15 }), backgroundScale: spring(active ? 1 : 0.95, { stiffness: 200, damping: 3 }) }}>\n {({ backgroundOpacity, backgroundScale }) => (\n <div className='upload-area' style={{ visibility: active ? 'visible' : 'hidden', opacity: backgroundOpacity }}>\n <div className='upload-area__drop'>\n <div className='upload-area__background' style={{ transform: `scale(${backgroundScale})` }} />\n <div className='upload-area__content'><FormattedMessage id='upload_area.title' defaultMessage='Drag & drop to upload' /></div>\n </div>\n </div>\n )}\n </Motion>\n );\n }\n\n}\n","import PropTypes from 'prop-types';\n\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nimport Column from '../../../components/column';\nimport ColumnHeader from '../../../components/column_header';\n\nexport default class ColumnLoading extends ImmutablePureComponent {\n\n static propTypes = {\n title: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),\n icon: PropTypes.string,\n multiColumn: PropTypes.bool,\n };\n\n static defaultProps = {\n title: '',\n icon: '',\n };\n\n render() {\n let { title, icon, multiColumn } = this.props;\n\n return (\n <Column>\n <ColumnHeader icon={icon} title={title} multiColumn={multiColumn} focusable={false} placeholder />\n <div className='scrollable' />\n </Column>\n );\n }\n\n}\n","/* eslint-disable react/jsx-no-bind */\n\nimport React from 'react';\n\nimport { throttle } from 'lodash';\n\nimport ComposeFormContainer from '../../compose/containers/compose_form_container';\n\nexport default class ComposeHalfModal extends React.Component {\n\n constructor() {\n super();\n\n this.state = {\n offsetTop: 0,\n pageTop: 0,\n height: 0,\n };\n }\n\n componentDidMount() {\n window.addEventListener('scroll', this.handleScroll);\n window.visualViewport.addEventListener('scroll', this.handleScroll);\n window.visualViewport.addEventListener('resize', this.handleScroll);\n\n this.handleScroll();\n }\n\n componentWillUnmount() {\n window.removeEventListener('scroll', this.handleScroll);\n window.visualViewport.removeEventListener('scroll', this.handleScroll);\n window.visualViewport.removeEventListener('resize', this.handleScroll);\n }\n\n handleScroll = throttle(() => {\n const { height, offsetTop, pageTop } = window.visualViewport;\n this.setState({\n offsetTop,\n pageTop,\n height,\n });\n }, 15);\n\n closeComposeHalfModal = () => {\n document.documentElement.classList.remove('show-compose-half-modal');\n };\n\n render() {\n return (\n <div className={'compose-half-modal'} style={{ height: this.state.pageTop + this.state.height }}>\n <ComposeFormContainer showClose onClose={this.closeComposeHalfModal} style={{ bottom: 0 }} />\n </div>\n );\n }\n\n}\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport { Link } from 'react-router-dom';\n\nimport { connect } from 'react-redux';\n\nimport { fetchServer } from 'mastodon/actions/server';\nimport { ServerHeroImage } from 'mastodon/components/server_hero_image';\nimport { ShortNumber } from 'mastodon/components/short_number';\nimport { Skeleton } from 'mastodon/components/skeleton';\nimport Account from 'mastodon/containers/account_container';\nimport { domain } from 'mastodon/initial_state';\n\nconst messages = defineMessages({\n aboutActiveUsers: { id: 'server_banner.about_active_users', defaultMessage: 'People using this server during the last 30 days (Monthly Active Users)' },\n});\n\nconst mapStateToProps = state => ({\n server: state.getIn(['server', 'server']),\n});\n\nclass ServerBanner extends PureComponent {\n\n static propTypes = {\n server: PropTypes.object,\n dispatch: PropTypes.func,\n intl: PropTypes.object,\n };\n\n componentDidMount () {\n const { dispatch } = this.props;\n dispatch(fetchServer());\n }\n\n render () {\n const { server, intl } = this.props;\n const isLoading = server.get('isLoading');\n\n return (\n <div className='server-banner'>\n <div className='server-banner__introduction'>\n <FormattedMessage id='server_banner.introduction' defaultMessage='{domain} is part of the decentralized social network powered by {mastodon}.' values={{ domain: <strong>{domain}</strong>, mastodon: <a href='https://joinmastodon.org' target='_blank'>Mastodon</a> }} />\n </div>\n\n <ServerHeroImage blurhash={server.getIn(['thumbnail', 'blurhash'])} src={server.getIn(['thumbnail', 'url'])} className='server-banner__hero' />\n\n <div className='server-banner__description'>\n {isLoading ? (\n <>\n <Skeleton width='100%' />\n <br />\n <Skeleton width='100%' />\n <br />\n <Skeleton width='70%' />\n </>\n ) : server.get('description')}\n </div>\n\n <div className='server-banner__meta'>\n <div className='server-banner__meta__column'>\n <h4><FormattedMessage id='server_banner.administered_by' defaultMessage='Administered by:' /></h4>\n\n <Account id={server.getIn(['contact', 'account', 'id'])} size={36} minimal />\n </div>\n\n <div className='server-banner__meta__column'>\n <h4><FormattedMessage id='server_banner.server_stats' defaultMessage='Server stats:' /></h4>\n\n {isLoading ? (\n <>\n <strong className='server-banner__number'><Skeleton width='10ch' /></strong>\n <br />\n <span className='server-banner__number-label'><Skeleton width='5ch' /></span>\n </>\n ) : (\n <>\n <strong className='server-banner__number'><ShortNumber value={server.getIn(['usage', 'users', 'active_month'])} /></strong>\n <br />\n <span className='server-banner__number-label' title={intl.formatMessage(messages.aboutActiveUsers)}><FormattedMessage id='server_banner.active_users' defaultMessage='active users' /></span>\n </>\n )}\n </div>\n </div>\n\n <hr className='spacer' />\n\n <Link className='button button--block button-secondary' to='/about'><FormattedMessage id='server_banner.learn_more' defaultMessage='Learn more' /></Link>\n </div>\n );\n }\n\n}\n\nexport default connect(mapStateToProps)(injectIntl(ServerBanner));\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { connect } from 'react-redux';\n\nimport { changeComposing, mountCompose, unmountCompose } from 'mastodon/actions/compose';\nimport ServerBanner from 'mastodon/components/server_banner';\nimport ComposeFormContainer from 'mastodon/features/compose/containers/compose_form_container';\nimport NavigationContainer from 'mastodon/features/compose/containers/navigation_container';\nimport SearchContainer from 'mastodon/features/compose/containers/search_container';\n\nimport LinkFooter from './link_footer';\n\nclass ComposePanel extends PureComponent {\n\n static contextTypes = {\n identity: PropTypes.object.isRequired,\n };\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n };\n\n onFocus = () => {\n const { dispatch } = this.props;\n dispatch(changeComposing(true));\n };\n\n onBlur = () => {\n const { dispatch } = this.props;\n dispatch(changeComposing(false));\n };\n\n componentDidMount () {\n const { dispatch } = this.props;\n dispatch(mountCompose());\n }\n\n componentWillUnmount () {\n const { dispatch } = this.props;\n dispatch(unmountCompose());\n }\n\n render() {\n const { signedIn } = this.context.identity;\n\n return (\n <div className='compose-panel' onFocus={this.onFocus}>\n <SearchContainer openInRoute />\n\n {!signedIn && (\n <>\n <ServerBanner />\n <div className='flex-spacer' />\n </>\n )}\n\n {signedIn && (\n <>\n <NavigationContainer onClose={this.onBlur} />\n <ComposeFormContainer singleColumn />\n </>\n )}\n\n <LinkFooter />\n </div>\n );\n }\n\n}\n\nexport default connect()(ComposePanel);\n","const DrawerLoading = () => (\n <div className='drawer'>\n <div className='drawer__pager'>\n <div className='drawer__inner' />\n </div>\n </div>\n);\n\nexport default DrawerLoading;\n","import PropTypes from 'prop-types';\n\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nimport Hashtag from 'mastodon/components/hashtag';\n\nconst messages = defineMessages({\n lastStatusAt: { id: 'account.featured_tags.last_status_at', defaultMessage: 'Last post on {date}' },\n empty: { id: 'account.featured_tags.last_status_never', defaultMessage: 'No posts' },\n});\n\nclass FeaturedTags extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object,\n };\n\n static propTypes = {\n account: ImmutablePropTypes.map,\n featuredTags: ImmutablePropTypes.list,\n tagged: PropTypes.string,\n intl: PropTypes.object.isRequired,\n };\n\n render () {\n const { account, featuredTags, intl } = this.props;\n\n if (!account || account.get('suspended') || featuredTags.isEmpty()) {\n return null;\n }\n\n return (\n <div className='getting-started__trends'>\n <h4><FormattedMessage id='account.featured_tags.title' defaultMessage=\"{name}'s featured hashtags\" values={{ name: <bdi dangerouslySetInnerHTML={{ __html: account.get('display_name_html') }} /> }} /></h4>\n\n {featuredTags.take(3).map(featuredTag => (\n <Hashtag\n key={featuredTag.get('name')}\n name={featuredTag.get('name')}\n to={`/@${account.get('acct')}/tagged/${featuredTag.get('name')}`}\n uses={featuredTag.get('statuses_count') * 1}\n withGraph={false}\n description={((featuredTag.get('statuses_count') * 1) > 0) ? intl.formatMessage(messages.lastStatusAt, { date: intl.formatDate(featuredTag.get('last_status_at'), { month: 'short', day: '2-digit' }) }) : intl.formatMessage(messages.empty)}\n />\n ))}\n </div>\n );\n }\n\n}\n\nexport default injectIntl(FeaturedTags);\n","import { List as ImmutableList } from 'immutable';\nimport { connect } from 'react-redux';\n\nimport { makeGetAccount } from 'mastodon/selectors';\n\nimport FeaturedTags from '../components/featured_tags';\n\nconst mapStateToProps = () => {\n const getAccount = makeGetAccount();\n\n return (state, { accountId }) => ({\n account: getAccount(state, accountId),\n featuredTags: state.getIn(['user_lists', 'featured_tags', accountId, 'items'], ImmutableList()),\n });\n};\n\nexport default connect(mapStateToProps)(FeaturedTags);\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { connect } from 'react-redux';\n\nimport FeaturedTags from 'mastodon/features/account/containers/featured_tags_container';\nimport { normalizeForLookup } from 'mastodon/reducers/accounts_map';\n\nconst mapStateToProps = (state, { match: { params: { acct } } }) => {\n const accountId = state.getIn(['accounts_map', normalizeForLookup(acct)]);\n\n if (!accountId) {\n return {\n isLoading: true,\n };\n }\n\n return {\n accountId,\n isLoading: false,\n };\n};\n\nclass AccountNavigation extends PureComponent {\n\n static propTypes = {\n match: PropTypes.shape({\n params: PropTypes.shape({\n acct: PropTypes.string,\n tagged: PropTypes.string,\n }).isRequired,\n }).isRequired,\n\n accountId: PropTypes.string,\n isLoading: PropTypes.bool,\n };\n\n render () {\n const { accountId, isLoading, match: { params: { tagged } } } = this.props;\n\n if (isLoading) {\n return null;\n }\n\n return (\n <>\n <div className='flex-spacer' />\n <FeaturedTags accountId={accountId} tagged={tagged} />\n </>\n );\n }\n\n}\n\nexport default connect(mapStateToProps)(AccountNavigation);\n","import { PureComponent } from 'react';\n\nimport { Switch, Route, withRouter } from 'react-router-dom';\n\nimport AccountNavigation from 'mastodon/features/account/navigation';\nimport Trends from 'mastodon/features/getting_started/containers/trends_container';\nimport { showTrends } from 'mastodon/initial_state';\n\nconst DefaultNavigation = () => (\n showTrends ? (\n <>\n <div className='flex-spacer' />\n <Trends />\n </>\n ) : null\n);\n\nclass NavigationPortal extends PureComponent {\n\n render () {\n return (\n <Switch>\n <Route path='/@:acct' exact component={AccountNavigation} />\n <Route path='/@:acct/tagged/:tagged?' exact component={AccountNavigation} />\n <Route path='/@:acct/with_replies' exact component={AccountNavigation} />\n <Route path='/@:acct/followers' exact component={AccountNavigation} />\n <Route path='/@:acct/following' exact component={AccountNavigation} />\n <Route path='/@:acct/media' exact component={AccountNavigation} />\n <Route component={DefaultNavigation} />\n </Switch>\n );\n }\n\n}\nexport default withRouter(NavigationPortal);\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport { Link } from 'react-router-dom';\n\nimport { connect } from 'react-redux';\n\nimport { openModal } from 'mastodon/actions/modal';\nimport { disabledAccountId, movedToAccountId, domain } from 'mastodon/initial_state';\nimport { logOut } from 'mastodon/utils/log_out';\n\nconst messages = defineMessages({\n logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' },\n logoutConfirm: { id: 'confirmations.logout.confirm', defaultMessage: 'Log out' },\n});\n\nconst mapStateToProps = (state) => ({\n disabledAcct: state.getIn(['accounts', disabledAccountId, 'acct']),\n movedToAcct: movedToAccountId ? state.getIn(['accounts', movedToAccountId, 'acct']) : undefined,\n});\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n onLogout () {\n dispatch(openModal({\n modalType: 'CONFIRM',\n modalProps: {\n message: intl.formatMessage(messages.logoutMessage),\n confirm: intl.formatMessage(messages.logoutConfirm),\n closeWhenConfirm: false,\n onConfirm: () => logOut(),\n },\n }));\n },\n});\n\nclass DisabledAccountBanner extends PureComponent {\n\n static propTypes = {\n disabledAcct: PropTypes.string.isRequired,\n movedToAcct: PropTypes.string,\n onLogout: PropTypes.func.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n handleLogOutClick = e => {\n e.preventDefault();\n e.stopPropagation();\n\n this.props.onLogout();\n\n return false;\n };\n\n render () {\n const { disabledAcct, movedToAcct } = this.props;\n\n const disabledAccountLink = (\n <Link to={`/@${disabledAcct}`}>\n {disabledAcct}@{domain}\n </Link>\n );\n\n return (\n <div className='sign-in-banner'>\n <p>\n {movedToAcct ? (\n <FormattedMessage\n id='moved_to_account_banner.text'\n defaultMessage='Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.'\n values={{\n disabledAccount: disabledAccountLink,\n movedToAccount: <Link to={`/@${movedToAcct}`}>{movedToAcct.includes('@') ? movedToAcct : `${movedToAcct}@${domain}`}</Link>,\n }}\n />\n ) : (\n <FormattedMessage\n id='disabled_account_banner.text'\n defaultMessage='Your account {disabledAccount} is currently disabled.'\n values={{\n disabledAccount: disabledAccountLink,\n }}\n />\n )}\n </p>\n <a href='/auth/edit' className='button button--block'>\n <FormattedMessage id='disabled_account_banner.account_settings' defaultMessage='Account settings' />\n </a>\n <button type='button' className='button button--block button-tertiary' onClick={this.handleLogOutClick}>\n <FormattedMessage id='confirmations.logout.confirm' defaultMessage='Log out' />\n </button>\n </div>\n );\n }\n\n}\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(DisabledAccountBanner));\n","import PropTypes from 'prop-types';\nimport { Component } from 'react';\n\nimport { injectIntl, defineMessages } from 'react-intl';\n\nimport { List as ImmutableList } from 'immutable';\nimport { connect } from 'react-redux';\n\nimport { fetchFollowRequests } from 'mastodon/actions/accounts';\nimport { IconWithBadge } from 'mastodon/components/icon_with_badge';\nimport ColumnLink from 'mastodon/features/ui/components/column_link';\n\nconst messages = defineMessages({\n text: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },\n});\n\nconst mapStateToProps = state => ({\n count: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size,\n});\n\nclass FollowRequestsColumnLink extends Component {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n count: PropTypes.number.isRequired,\n intl: PropTypes.object.isRequired,\n };\n\n componentDidMount () {\n const { dispatch } = this.props;\n\n dispatch(fetchFollowRequests());\n }\n\n render () {\n const { count, intl } = this.props;\n\n if (count === 0) {\n return null;\n }\n\n return (\n <ColumnLink\n transparent\n to='/follow_requests'\n icon={<IconWithBadge className='column-link__icon' id='user-plus' count={count} />}\n text={intl.formatMessage(messages.text)}\n />\n );\n }\n\n}\n\nexport default injectIntl(connect(mapStateToProps)(FollowRequestsColumnLink));\n","import PropTypes from 'prop-types';\n\nimport { withRouter } from 'react-router-dom';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { connect } from 'react-redux';\nimport { createSelector } from 'reselect';\n\nimport { fetchLists } from 'mastodon/actions/lists';\n\nimport ColumnLink from './column_link';\n\nconst getOrderedLists = createSelector([state => state.get('lists')], lists => {\n if (!lists) {\n return lists;\n }\n\n return lists.toList().filter(item => !!item).sort((a, b) => a.get('title').localeCompare(b.get('title'))).take(4);\n});\n\nconst mapStateToProps = state => ({\n lists: getOrderedLists(state),\n});\n\nclass ListPanel extends ImmutablePureComponent {\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n lists: ImmutablePropTypes.list,\n };\n\n componentDidMount () {\n const { dispatch } = this.props;\n dispatch(fetchLists());\n }\n\n render () {\n const { lists } = this.props;\n\n if (!lists || lists.isEmpty()) {\n return null;\n }\n\n return (\n <div className='list-panel'>\n <hr />\n\n {lists.map(list => (\n <ColumnLink icon='list-ul' key={list.get('id')} strict text={list.get('title')} to={`/lists/${list.get('id')}`} transparent />\n ))}\n </div>\n );\n }\n\n}\n\nexport default withRouter(connect(mapStateToProps)(ListPanel));\n","import { connect } from 'react-redux';\n\nimport { IconWithBadge } from 'mastodon/components/icon_with_badge';\n\nconst mapStateToProps = state => ({\n count: state.getIn(['notifications', 'unread']),\n id: 'bell',\n});\n\nexport default connect(mapStateToProps)(IconWithBadge);\n","import { useCallback } from 'react';\n\nimport { FormattedMessage } from 'react-intl';\n\n\nimport { openModal } from 'mastodon/actions/modal';\nimport { registrationsOpen, sso_redirect } from 'mastodon/initial_state';\nimport { useAppDispatch, useAppSelector } from 'mastodon/store';\n\nconst SignInBanner = () => {\n const dispatch = useAppDispatch();\n\n const openClosedRegistrationsModal = useCallback(\n () => dispatch(openModal({ modalType: 'CLOSED_REGISTRATIONS' })),\n [dispatch],\n );\n\n let signupButton;\n\n const signupUrl = useAppSelector((state) => state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up');\n\n if (sso_redirect) {\n return (\n <div className='sign-in-banner'>\n <p><FormattedMessage id='sign_in_banner.text' defaultMessage='Login to follow profiles or hashtags, favorite, share and reply to posts. You can also interact from your account on a different server.' /></p>\n <a href={sso_redirect} data-method='post' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sso_redirect' defaultMessage='Login or Register' /></a>\n </div>\n )\n }\n\n if (registrationsOpen) {\n signupButton = (\n <a href={signupUrl} className='button button--block'>\n <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />\n </a>\n );\n } else {\n signupButton = (\n <button className='button button--block' onClick={openClosedRegistrationsModal}>\n <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />\n </button>\n );\n }\n\n return (\n <div className='sign-in-banner'>\n <p><FormattedMessage id='sign_in_banner.text' defaultMessage='Login to follow profiles or hashtags, favorite, share and reply to posts. You can also interact from your account on a different server.' /></p>\n {signupButton}\n <a href='/auth/sign_in' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Login' /></a>\n </div>\n );\n};\n\nexport default SignInBanner;\n","import PropTypes from 'prop-types';\nimport { Component } from 'react';\n\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { Link } from 'react-router-dom';\n\nimport { WordmarkLogo } from 'mastodon/components/logo';\nimport NavigationPortal from 'mastodon/components/navigation_portal';\nimport { timelinePreview, trendsEnabled } from 'mastodon/initial_state';\nimport { transientSingleColumn } from 'mastodon/is_mobile';\n\nimport ColumnLink from './column_link';\nimport DisabledAccountBanner from './disabled_account_banner';\nimport FollowRequestsColumnLink from './follow_requests_column_link';\nimport ListPanel from './list_panel';\nimport NotificationsCounterIcon from './notifications_counter_icon';\nimport SignInBanner from './sign_in_banner';\n\nconst messages = defineMessages({\n home: { id: 'tabs_bar.home', defaultMessage: 'Home' },\n notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' },\n explore: { id: 'explore.title', defaultMessage: 'Explore' },\n firehose: { id: 'column.firehose', defaultMessage: 'Live feeds' },\n direct: { id: 'navigation_bar.direct', defaultMessage: 'Direct messages' },\n favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favorites' },\n bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },\n lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },\n preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },\n followsAndFollowers: { id: 'navigation_bar.follows_and_followers', defaultMessage: 'Follows and followers' },\n about: { id: 'navigation_bar.about', defaultMessage: 'About' },\n search: { id: 'navigation_bar.search', defaultMessage: 'Search' },\n advancedInterface: { id: 'navigation_bar.advanced_interface', defaultMessage: 'Open in advanced web interface' },\n openedInClassicInterface: { id: 'navigation_bar.opened_in_classic_interface', defaultMessage: 'Posts, accounts, and other specific pages are opened by default in the classic web interface.' },\n});\n\nclass NavigationPanel extends Component {\n\n static contextTypes = {\n router: PropTypes.object.isRequired,\n identity: PropTypes.object.isRequired,\n };\n\n static propTypes = {\n intl: PropTypes.object.isRequired,\n };\n\n isFirehoseActive = (match, location) => {\n return match || location.pathname.startsWith('/public');\n };\n\n render () {\n const { intl } = this.props;\n const { signedIn, disabledAccountId } = this.context.identity;\n\n let banner = undefined;\n\n if(transientSingleColumn)\n banner = (<div className='switch-to-advanced'>\n {intl.formatMessage(messages.openedInClassicInterface)}\n {\" \"}\n <a href={`/deck${location.pathname}`} className='switch-to-advanced__toggle'>\n {intl.formatMessage(messages.advancedInterface)}\n </a>\n </div>);\n\n return (\n <div className='navigation-panel'>\n <div className='navigation-panel__logo'>\n <Link to='/' className='column-link column-link--logo'><WordmarkLogo /></Link>\n {!banner && <hr />}\n </div>\n\n {banner &&\n <div class='navigation-panel__banner'>\n {banner}\n </div>\n }\n\n {signedIn && localStorage.plusminus_config_reload_button === 'visible' && (\n <div className={'sidenav__reload'}>\n <ColumnLink transparent href={location.href} icon='refresh' text={'Reload'} />\n <hr />\n </div>\n )}\n\n {signedIn && (\n <>\n <ColumnLink transparent to='/home' icon='home' text={intl.formatMessage(messages.home)} />\n <ColumnLink transparent to='/notifications' icon={<NotificationsCounterIcon className='column-link__icon' />} text={intl.formatMessage(messages.notifications)} />\n <FollowRequestsColumnLink />\n </>\n )}\n\n {trendsEnabled ? (\n <ColumnLink transparent to='/explore' icon='hashtag' text={intl.formatMessage(messages.explore)} />\n ) : (\n <ColumnLink transparent to='/search' icon='search' text={intl.formatMessage(messages.search)} />\n )}\n\n {(signedIn || timelinePreview) && (\n <ColumnLink transparent to='/public' isActive={this.isFirehoseActive} icon='globe' text={intl.formatMessage(messages.firehose)} />\n )}\n\n {!signedIn && (\n <div className='navigation-panel__sign-in-banner'>\n <hr />\n { disabledAccountId ? <DisabledAccountBanner /> : <SignInBanner /> }\n </div>\n )}\n\n {signedIn && (\n <>\n <ColumnLink transparent to='/conversations' icon='envelope' text={intl.formatMessage(messages.direct)} />\n <ColumnLink transparent to='/bookmarks' icon='bookmark' text={intl.formatMessage(messages.bookmarks)} />\n <ColumnLink transparent to='/favourites' icon='star' text={intl.formatMessage(messages.favourites)} />\n <ColumnLink transparent to='/lists' icon='list-ul' text={intl.formatMessage(messages.lists)} />\n\n <ListPanel />\n\n <hr />\n\n <ColumnLink transparent href='/settings/preferences' icon='cog' text={intl.formatMessage(messages.preferences)} />\n <ColumnLink transparent to='#' icon='puzzle-piece' text={'plusminusè¨å®š (β)'} onClick={(e) => {\n e.preventDefault();\n window.__PLUS_MINUS_EVENTS__.dispatchEvent(new Event('openConfig'));\n }} />\n </>\n )}\n\n <div className='navigation-panel__legal'>\n <hr />\n <ColumnLink transparent to='/about' icon='ellipsis-h' text={intl.formatMessage(messages.about)} />\n </div>\n\n <NavigationPortal />\n </div>\n );\n }\n\n}\n\nexport default injectIntl(NavigationPanel);\n","import PropTypes from 'prop-types';\nimport { Children, cloneElement } from 'react';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nimport { supportsPassiveEvents } from 'detect-passive-events';\n\nimport { scrollRight } from '../../../scroll';\nimport BundleContainer from '../containers/bundle_container';\nimport {\n Compose,\n Notifications,\n HomeTimeline,\n CommunityTimeline,\n PublicTimeline,\n HashtagTimeline,\n DirectTimeline,\n FavouritedStatuses,\n BookmarkedStatuses,\n ListTimeline,\n Directory,\n} from '../util/async-components';\n\nimport BundleColumnError from './bundle_column_error';\nimport ColumnLoading from './column_loading';\nimport ComposeHalfModal from './compose_half_modal';\nimport ComposePanel from './compose_panel';\nimport DrawerLoading from './drawer_loading';\nimport NavigationPanel from './navigation_panel';\n\nconst componentMap = {\n 'COMPOSE': Compose,\n 'HOME': HomeTimeline,\n 'NOTIFICATIONS': Notifications,\n 'PUBLIC': PublicTimeline,\n 'REMOTE': PublicTimeline,\n 'COMMUNITY': CommunityTimeline,\n 'HASHTAG': HashtagTimeline,\n 'DIRECT': DirectTimeline,\n 'FAVOURITES': FavouritedStatuses,\n 'BOOKMARKS': BookmarkedStatuses,\n 'LIST': ListTimeline,\n 'DIRECTORY': Directory,\n};\n\nexport default class ColumnsArea extends ImmutablePureComponent {\n\n static contextTypes = {\n router: PropTypes.object.isRequired,\n };\n\n static propTypes = {\n columns: ImmutablePropTypes.list.isRequired,\n isModalOpen: PropTypes.bool.isRequired,\n singleColumn: PropTypes.bool,\n children: PropTypes.node,\n };\n\n // Corresponds to (max-width: $no-gap-breakpoint + 285px - 1px) in SCSS\n mediaQuery = 'matchMedia' in window && window.matchMedia('(max-width: 854px)');\n\n state = {\n renderComposePanel: !(this.mediaQuery && this.mediaQuery.matches),\n };\n\n componentDidMount() {\n if (!this.props.singleColumn) {\n this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false);\n }\n\n if (this.mediaQuery) {\n if (this.mediaQuery.addEventListener) {\n this.mediaQuery.addEventListener('change', this.handleLayoutChange);\n } else {\n this.mediaQuery.addListener(this.handleLayoutChange);\n }\n this.setState({ renderComposePanel: !this.mediaQuery.matches });\n }\n\n this.isRtlLayout = document.getElementsByTagName('body')[0].classList.contains('rtl');\n }\n\n UNSAFE_componentWillUpdate(nextProps) {\n if (this.props.singleColumn !== nextProps.singleColumn && nextProps.singleColumn) {\n this.node.removeEventListener('wheel', this.handleWheel);\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.singleColumn !== prevProps.singleColumn && !this.props.singleColumn) {\n this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false);\n }\n }\n\n componentWillUnmount () {\n if (!this.props.singleColumn) {\n this.node.removeEventListener('wheel', this.handleWheel);\n }\n\n if (this.mediaQuery) {\n if (this.mediaQuery.removeEventListener) {\n this.mediaQuery.removeEventListener('change', this.handleLayoutChange);\n } else {\n this.mediaQuery.removeListener(this.handleLayoutChange);\n }\n }\n }\n\n handleChildrenContentChange() {\n if (!this.props.singleColumn) {\n const modifier = this.isRtlLayout ? -1 : 1;\n this._interruptScrollAnimation = scrollRight(this.node, (this.node.scrollWidth - window.innerWidth) * modifier);\n }\n }\n\n handleLayoutChange = (e) => {\n this.setState({ renderComposePanel: !e.matches });\n };\n\n handleWheel = () => {\n if (typeof this._interruptScrollAnimation !== 'function') {\n return;\n }\n\n this._interruptScrollAnimation();\n };\n\n setRef = (node) => {\n this.node = node;\n };\n\n renderLoading = columnId => () => {\n return columnId === 'COMPOSE' ? <DrawerLoading /> : <ColumnLoading multiColumn />;\n };\n\n renderError = (props) => {\n return <BundleColumnError multiColumn errorType='network' {...props} />;\n };\n\n render () {\n const { columns, children, singleColumn, isModalOpen } = this.props;\n const { renderComposePanel } = this.state;\n\n if (singleColumn) {\n return (\n <div className={`columns-area__panels ${localStorage.plusminus_config_sidenav === 'reverse' ? 'reverse' : ''}`}>\n <div className='columns-area__panels__pane columns-area__panels__pane--compositional'>\n <div className='columns-area__panels__pane__inner'>\n {renderComposePanel && <ComposePanel />}\n </div>\n </div>\n\n <div className='columns-area__panels__main'>\n <div className='tabs-bar__wrapper'><div id='tabs-bar__portal' /></div>\n <div className='columns-area columns-area--mobile'>{children}</div>\n </div>\n\n <div className='columns-area__panels__pane columns-area__panels__pane--start columns-area__panels__pane--navigational'>\n <div className='columns-area__panels__pane__inner'>\n <NavigationPanel />\n </div>\n </div>\n <ComposeHalfModal />\n </div>\n );\n }\n\n return (\n <div className={`columns-area ${ isModalOpen ? 'unscrollable' : '' }`} ref={this.setRef}>\n {columns.map(column => {\n const params = column.get('params', null) === null ? null : column.get('params').toJS();\n const other = params && params.other ? params.other : {};\n\n return (\n <BundleContainer key={column.get('uuid')} fetchComponent={componentMap[column.get('id')]} loading={this.renderLoading(column.get('id'))} error={this.renderError}>\n {SpecificComponent => <SpecificComponent columnId={column.get('uuid')} params={params} multiColumn {...other} />}\n </BundleContainer>\n );\n })}\n\n {Children.map(children, child => cloneElement(child, { multiColumn: true }))}\n </div>\n );\n }\n\n}\n","import { connect } from 'react-redux';\n\nimport ColumnsArea from '../components/columns_area';\n\nconst mapStateToProps = state => ({\n columns: state.getIn(['settings', 'columns']),\n isModalOpen: !!state.get('modal').modalType,\n});\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(ColumnsArea);\n","import PropTypes from 'prop-types';\nimport { Component, PureComponent, cloneElement, Children } from 'react';\n\nimport { Switch, Route } from 'react-router-dom';\n\nimport StackTrace from 'stacktrace-js';\n\nimport BundleColumnError from '../components/bundle_column_error';\nimport ColumnLoading from '../components/column_loading';\nimport BundleContainer from '../containers/bundle_container';\n\n// Small wrapper to pass multiColumn to the route components\nexport class WrappedSwitch extends PureComponent {\n static contextTypes = {\n router: PropTypes.object,\n };\n\n render () {\n const { multiColumn, children } = this.props;\n const { location } = this.context.router.route;\n\n const decklessLocation = multiColumn && location.pathname.startsWith('/deck')\n ? {...location, pathname: location.pathname.slice(5)}\n : location;\n\n return (\n <Switch location={decklessLocation}>\n {Children.map(children, child => child ? cloneElement(child, { multiColumn }) : null)}\n </Switch>\n );\n }\n\n}\n\nWrappedSwitch.propTypes = {\n multiColumn: PropTypes.bool,\n children: PropTypes.node,\n};\n\n// Small Wrapper to extract the params from the route and pass\n// them to the rendered component, together with the content to\n// be rendered inside (the children)\nexport class WrappedRoute extends Component {\n\n static propTypes = {\n component: PropTypes.func.isRequired,\n content: PropTypes.node,\n multiColumn: PropTypes.bool,\n componentParams: PropTypes.object,\n };\n\n static defaultProps = {\n componentParams: {},\n };\n\n static getDerivedStateFromError () {\n return {\n hasError: true,\n };\n }\n\n state = {\n hasError: false,\n stacktrace: '',\n };\n\n componentDidCatch (error) {\n StackTrace.fromError(error).then(stackframes => {\n this.setState({ stacktrace: error.toString() + '\\n' + stackframes.map(frame => frame.toString()).join('\\n') });\n }).catch(err => {\n console.error(err);\n });\n }\n\n renderComponent = ({ match }) => {\n const { component, content, multiColumn, componentParams } = this.props;\n const { hasError, stacktrace } = this.state;\n\n if (hasError) {\n return (\n <BundleColumnError\n stacktrace={stacktrace}\n multiColumn={multiColumn}\n errorType='error'\n />\n );\n }\n\n return (\n <BundleContainer fetchComponent={component} loading={this.renderLoading} error={this.renderError}>\n {Component => <Component params={match.params} multiColumn={multiColumn} {...componentParams}>{content}</Component>}\n </BundleContainer>\n );\n };\n\n renderLoading = () => {\n const { multiColumn } = this.props;\n\n return <ColumnLoading multiColumn={multiColumn} />;\n };\n\n renderError = (props) => {\n return <BundleColumnError {...props} errorType='network' />;\n };\n\n render () {\n const { component: Component, content, ...rest } = this.props;\n\n return <Route {...rest} render={this.renderComponent} />;\n }\n\n}\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport classNames from 'classnames';\nimport { Redirect, Route, withRouter } from 'react-router-dom';\n\nimport { connect } from 'react-redux';\n\nimport { debounce } from 'lodash';\nimport { HotKeys } from 'react-hotkeys';\n\nimport { focusApp, unfocusApp, changeLayout } from 'mastodon/actions/app';\nimport { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'mastodon/actions/markers';\nimport { INTRODUCTION_VERSION } from 'mastodon/actions/onboarding';\nimport PictureInPicture from 'mastodon/features/picture_in_picture';\nimport { layoutFromWindow } from 'mastodon/is_mobile';\n\nimport { uploadCompose, resetCompose, changeComposeSpoilerness } from '../../actions/compose';\nimport { clearHeight } from '../../actions/height_cache';\nimport { expandNotifications } from '../../actions/notifications';\nimport { fetchServer, fetchServerTranslationLanguages } from '../../actions/server';\nimport { expandHomeTimeline } from '../../actions/timelines';\nimport initialState, { me, owner, singleUserMode, trendsEnabled, trendsAsLanding } from '../../initial_state';\n\nimport BundleColumnError from './components/bundle_column_error';\nimport Header from './components/header';\nimport PlusMinusSettingModal from './components/plusminus_setting_modal';\nimport UploadArea from './components/upload_area';\nimport ColumnsAreaContainer from './containers/columns_area_container';\nimport LoadingBarContainer from './containers/loading_bar_container';\nimport ModalContainer from './containers/modal_container';\nimport NotificationsContainer from './containers/notifications_container';\nimport {\n Compose,\n Status,\n GettingStarted,\n KeyboardShortcuts,\n Firehose,\n AccountTimeline,\n AccountGallery,\n HomeTimeline,\n Followers,\n Following,\n Reblogs,\n Favourites,\n DirectTimeline,\n HashtagTimeline,\n Notifications,\n FollowRequests,\n FavouritedStatuses,\n BookmarkedStatuses,\n FollowedTags,\n ListTimeline,\n Blocks,\n DomainBlocks,\n Mutes,\n PinnedStatuses,\n Lists,\n Directory,\n Explore,\n Onboarding,\n InstanceStats,\n About,\n PrivacyPolicy,\n} from './util/async-components';\nimport { WrappedSwitch, WrappedRoute } from './util/react_router_helpers';\n\n// Dummy import, to make sure that <Status /> ends up in the application bundle.\n// Without this it ends up in ~8 very commonly used bundles.\nimport '../../components/status';\n\nconst messages = defineMessages({\n beforeUnload: { id: 'ui.beforeunload', defaultMessage: 'Your draft will be lost if you leave Mastodon.' },\n});\n\nconst mapStateToProps = state => ({\n layout: state.getIn(['meta', 'layout']),\n isComposing: state.getIn(['compose', 'is_composing']),\n hasComposingText: state.getIn(['compose', 'text']).trim().length !== 0,\n hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0,\n canUploadMore: !state.getIn(['compose', 'media_attachments']).some(x => ['audio', 'video'].includes(x.get('type'))) && state.getIn(['compose', 'media_attachments']).size < state.getIn(['compose', 'max_media_attachments']),\n dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null,\n firstLaunch: state.getIn(['settings', 'introductionVersion'], 0) < INTRODUCTION_VERSION,\n username: state.getIn(['accounts', me, 'username']),\n});\n\nconst keyMap = {\n help: '?',\n new: 'n',\n search: 's',\n forceNew: 'option+n',\n toggleComposeSpoilers: 'option+x',\n focusColumn: ['1', '2', '3', '4', '5', '6', '7', '8', '9'],\n reply: 'r',\n favourite: 'f',\n boost: 'b',\n mention: 'm',\n open: ['enter', 'o'],\n openProfile: 'p',\n moveDown: ['down', 'j'],\n moveUp: ['up', 'k'],\n back: 'backspace',\n goToHome: 'g h',\n goToNotifications: 'g n',\n goToLocal: 'g l',\n goToFederated: 'g t',\n goToDirect: 'g d',\n goToStart: 'g s',\n goToFavourites: 'g f',\n goToPinned: 'g p',\n goToProfile: 'g u',\n goToBlocked: 'g b',\n goToMuted: 'g m',\n goToRequests: 'g r',\n toggleHidden: 'x',\n toggleSensitive: 'h',\n openMedia: 'e',\n};\n\nclass SwitchingColumnsArea extends PureComponent {\n\n static contextTypes = {\n identity: PropTypes.object,\n };\n\n static propTypes = {\n children: PropTypes.node,\n location: PropTypes.object,\n singleColumn: PropTypes.bool,\n };\n\n UNSAFE_componentWillMount () {\n if (this.props.singleColumn) {\n document.body.classList.toggle('layout-single-column', true);\n document.body.classList.toggle('layout-multiple-columns', false);\n } else {\n document.body.classList.toggle('layout-single-column', false);\n document.body.classList.toggle('layout-multiple-columns', true);\n }\n }\n\n componentDidUpdate (prevProps) {\n if (![this.props.location.pathname, '/'].includes(prevProps.location.pathname)) {\n this.node.handleChildrenContentChange();\n }\n\n if (prevProps.singleColumn !== this.props.singleColumn) {\n document.body.classList.toggle('layout-single-column', this.props.singleColumn);\n document.body.classList.toggle('layout-multiple-columns', !this.props.singleColumn);\n }\n }\n\n setRef = c => {\n if (c) {\n this.node = c;\n }\n };\n\n render () {\n const { children, singleColumn } = this.props;\n const { signedIn } = this.context.identity;\n const pathName = this.props.location.pathname;\n\n let redirect;\n\n if (signedIn) {\n if (singleColumn) {\n redirect = <Redirect from='/' to='/home' exact />;\n } else {\n redirect = <Redirect from='/' to='/deck/getting-started' exact />;\n }\n } else if (singleUserMode && owner && initialState?.accounts[owner]) {\n redirect = <Redirect from='/' to={`/@${initialState.accounts[owner].username}`} exact />;\n } else if (trendsEnabled && trendsAsLanding) {\n redirect = <Redirect from='/' to='/explore' exact />;\n } else {\n redirect = <Redirect from='/' to='/about' exact />;\n }\n\n return (\n <ColumnsAreaContainer ref={this.setRef} singleColumn={singleColumn}>\n <WrappedSwitch>\n {redirect}\n\n {singleColumn ? <Redirect from='/deck' to='/home' exact /> : null}\n {singleColumn && pathName.startsWith('/deck/') ? <Redirect from={pathName} to={pathName.slice(5)} /> : null}\n {!singleColumn && pathName === '/getting-started' ? <Redirect from='/getting-started' to='/deck/getting-started' exact /> : null}\n\n <WrappedRoute path='/getting-started' component={GettingStarted} content={children} />\n <WrappedRoute path='/keyboard-shortcuts' component={KeyboardShortcuts} content={children} />\n <WrappedRoute path='/about' component={About} content={children} />\n <WrappedRoute path='/privacy-policy' component={PrivacyPolicy} content={children} />\n <WrappedRoute path='/instance-stats/:domain' component={InstanceStats} content={children} />\n\n <WrappedRoute path={['/home', '/timelines/home']} component={HomeTimeline} content={children} />\n <Redirect from='/timelines/public' to='/public' exact />\n <Redirect from='/timelines/public/local' to='/public/local' exact />\n <WrappedRoute path='/public' exact component={Firehose} componentParams={{ feedType: 'public' }} content={children} />\n <WrappedRoute path='/public/local' exact component={Firehose} componentParams={{ feedType: 'community' }} content={children} />\n <WrappedRoute path='/public/remote' exact component={Firehose} componentParams={{ feedType: 'public:remote' }} content={children} />\n <WrappedRoute path={['/conversations', '/timelines/direct']} component={DirectTimeline} content={children} />\n <WrappedRoute path='/tags/:id' component={HashtagTimeline} content={children} />\n <WrappedRoute path='/lists/:id' component={ListTimeline} content={children} />\n <WrappedRoute path='/notifications' component={Notifications} content={children} />\n <WrappedRoute path='/favourites' component={FavouritedStatuses} content={children} />\n\n <WrappedRoute path='/bookmarks' component={BookmarkedStatuses} content={children} />\n <WrappedRoute path='/pinned' component={PinnedStatuses} content={children} />\n\n <WrappedRoute path='/start' exact component={Onboarding} content={children} />\n <WrappedRoute path='/directory' component={Directory} content={children} />\n <WrappedRoute path={['/explore', '/search']} component={Explore} content={children} />\n <WrappedRoute path={['/publish', '/statuses/new']} component={Compose} content={children} />\n\n <WrappedRoute path={['/@:acct', '/accounts/:id']} exact component={AccountTimeline} content={children} />\n <WrappedRoute path='/@:acct/tagged/:tagged?' exact component={AccountTimeline} content={children} />\n <WrappedRoute path={['/@:acct/with_replies', '/accounts/:id/with_replies']} component={AccountTimeline} content={children} componentParams={{ withReplies: true }} />\n <WrappedRoute path={['/accounts/:id/followers', '/users/:acct/followers', '/@:acct/followers']} component={Followers} content={children} />\n <WrappedRoute path={['/accounts/:id/following', '/users/:acct/following', '/@:acct/following']} component={Following} content={children} />\n <WrappedRoute path={['/@:acct/media', '/accounts/:id/media']} component={AccountGallery} content={children} />\n <WrappedRoute path='/@:acct/:statusId' exact component={Status} content={children} />\n <WrappedRoute path='/@:acct/:statusId/reblogs' component={Reblogs} content={children} />\n <WrappedRoute path='/@:acct/:statusId/favourites' component={Favourites} content={children} />\n\n {/* Legacy routes, cannot be easily factored with other routes because they share a param name */}\n <WrappedRoute path='/timelines/tag/:id' component={HashtagTimeline} content={children} />\n <WrappedRoute path='/timelines/list/:id' component={ListTimeline} content={children} />\n <WrappedRoute path='/statuses/:statusId' exact component={Status} content={children} />\n <WrappedRoute path='/statuses/:statusId/reblogs' component={Reblogs} content={children} />\n <WrappedRoute path='/statuses/:statusId/favourites' component={Favourites} content={children} />\n\n <WrappedRoute path='/follow_requests' component={FollowRequests} content={children} />\n <WrappedRoute path='/blocks' component={Blocks} content={children} />\n <WrappedRoute path='/domain_blocks' component={DomainBlocks} content={children} />\n <WrappedRoute path='/followed_tags' component={FollowedTags} content={children} />\n <WrappedRoute path='/mutes' component={Mutes} content={children} />\n <WrappedRoute path='/lists' component={Lists} content={children} />\n\n <Route component={BundleColumnError} />\n </WrappedSwitch>\n </ColumnsAreaContainer>\n );\n }\n\n}\n\nclass UI extends PureComponent {\n\n static contextTypes = {\n router: PropTypes.object.isRequired,\n identity: PropTypes.object.isRequired,\n };\n\n static propTypes = {\n dispatch: PropTypes.func.isRequired,\n children: PropTypes.node,\n isComposing: PropTypes.bool,\n hasComposingText: PropTypes.bool,\n hasMediaAttachments: PropTypes.bool,\n canUploadMore: PropTypes.bool,\n location: PropTypes.object,\n intl: PropTypes.object.isRequired,\n dropdownMenuIsOpen: PropTypes.bool,\n layout: PropTypes.string.isRequired,\n firstLaunch: PropTypes.bool,\n username: PropTypes.string,\n };\n\n state = {\n draggingOver: false,\n };\n\n handleBeforeUnload = e => {\n const { intl, dispatch, isComposing, hasComposingText, hasMediaAttachments } = this.props;\n\n dispatch(synchronouslySubmitMarkers());\n\n if (isComposing && (hasComposingText || hasMediaAttachments)) {\n e.preventDefault();\n // Setting returnValue to any string causes confirmation dialog.\n // Many browsers no longer display this text to users,\n // but we set user-friendly message for other browsers, e.g. Edge.\n e.returnValue = intl.formatMessage(messages.beforeUnload);\n }\n };\n\n handleWindowFocus = () => {\n this.props.dispatch(focusApp());\n this.props.dispatch(submitMarkers({ immediate: true }));\n };\n\n handleWindowBlur = () => {\n this.props.dispatch(unfocusApp());\n };\n\n handleDragEnter = (e) => {\n e.preventDefault();\n\n if (!this.dragTargets) {\n this.dragTargets = [];\n }\n\n if (this.dragTargets.indexOf(e.target) === -1) {\n this.dragTargets.push(e.target);\n }\n\n if (e.dataTransfer && Array.from(e.dataTransfer.types).includes('Files') && this.props.canUploadMore && this.context.identity.signedIn) {\n this.setState({ draggingOver: true });\n }\n };\n\n handleDragOver = (e) => {\n if (this.dataTransferIsText(e.dataTransfer)) return false;\n\n e.preventDefault();\n e.stopPropagation();\n\n try {\n e.dataTransfer.dropEffect = 'copy';\n } catch (err) {\n\n }\n\n return false;\n };\n\n handleDrop = (e) => {\n if (this.dataTransferIsText(e.dataTransfer)) return;\n\n e.preventDefault();\n\n this.setState({ draggingOver: false });\n this.dragTargets = [];\n\n if (e.dataTransfer && e.dataTransfer.files.length >= 1 && this.props.canUploadMore && this.context.identity.signedIn) {\n this.props.dispatch(uploadCompose(e.dataTransfer.files));\n }\n };\n\n handleDragLeave = (e) => {\n e.preventDefault();\n e.stopPropagation();\n\n this.dragTargets = this.dragTargets.filter(el => el !== e.target && this.node.contains(el));\n\n if (this.dragTargets.length > 0) {\n return;\n }\n\n this.setState({ draggingOver: false });\n };\n\n dataTransferIsText = (dataTransfer) => {\n return (dataTransfer && Array.from(dataTransfer.types).filter((type) => type === 'text/plain').length === 1);\n };\n\n closeUploadModal = () => {\n this.setState({ draggingOver: false });\n };\n\n handleServiceWorkerPostMessage = ({ data }) => {\n if (data.type === 'navigate') {\n this.context.router.history.push(data.path);\n } else {\n console.warn('Unknown message type:', data.type);\n }\n };\n\n handleLayoutChange = debounce(() => {\n this.props.dispatch(clearHeight()); // The cached heights are no longer accurate, invalidate\n }, 500, {\n trailing: true,\n });\n\n handleResize = () => {\n const layout = layoutFromWindow();\n\n if (layout !== this.props.layout) {\n this.handleLayoutChange.cancel();\n this.props.dispatch(changeLayout({ layout }));\n } else {\n this.handleLayoutChange();\n }\n };\n\n componentDidMount () {\n const { signedIn } = this.context.identity;\n\n window.addEventListener('focus', this.handleWindowFocus, false);\n window.addEventListener('blur', this.handleWindowBlur, false);\n window.addEventListener('beforeunload', this.handleBeforeUnload, false);\n window.addEventListener('resize', this.handleResize, { passive: true });\n\n document.addEventListener('dragenter', this.handleDragEnter, false);\n document.addEventListener('dragover', this.handleDragOver, false);\n document.addEventListener('drop', this.handleDrop, false);\n document.addEventListener('dragleave', this.handleDragLeave, false);\n document.addEventListener('dragend', this.handleDragEnd, false);\n\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.addEventListener('message', this.handleServiceWorkerPostMessage);\n }\n\n if (signedIn) {\n this.props.dispatch(fetchMarkers());\n this.props.dispatch(expandHomeTimeline());\n this.props.dispatch(expandNotifications());\n this.props.dispatch(fetchServerTranslationLanguages());\n\n setTimeout(() => this.props.dispatch(fetchServer()), 3000);\n }\n\n this.hotkeys.__mousetrap__.stopCallback = (e, element) => {\n return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName);\n };\n }\n\n componentWillUnmount () {\n window.removeEventListener('focus', this.handleWindowFocus);\n window.removeEventListener('blur', this.handleWindowBlur);\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\n window.removeEventListener('resize', this.handleResize);\n\n document.removeEventListener('dragenter', this.handleDragEnter);\n document.removeEventListener('dragover', this.handleDragOver);\n document.removeEventListener('drop', this.handleDrop);\n document.removeEventListener('dragleave', this.handleDragLeave);\n document.removeEventListener('dragend', this.handleDragEnd);\n }\n\n setRef = c => {\n this.node = c;\n };\n\n handleHotkeyNew = e => {\n e.preventDefault();\n\n const element = this.node.querySelector('.compose-form__autosuggest-wrapper textarea');\n\n if (element) {\n element.focus();\n }\n };\n\n handleHotkeySearch = e => {\n e.preventDefault();\n\n const element = this.node.querySelector('.search__input');\n\n if (element) {\n element.focus();\n }\n };\n\n handleHotkeyForceNew = e => {\n this.handleHotkeyNew(e);\n this.props.dispatch(resetCompose());\n };\n\n handleHotkeyToggleComposeSpoilers = e => {\n e.preventDefault();\n this.props.dispatch(changeComposeSpoilerness());\n };\n\n handleHotkeyFocusColumn = e => {\n const index = (e.key * 1) + 1; // First child is drawer, skip that\n const column = this.node.querySelector(`.column:nth-child(${index})`);\n if (!column) return;\n const container = column.querySelector('.scrollable');\n\n if (container) {\n const status = container.querySelector('.focusable');\n\n if (status) {\n if (container.scrollTop > status.offsetTop) {\n status.scrollIntoView(true);\n }\n status.focus();\n }\n }\n };\n\n handleHotkeyBack = () => {\n const { router } = this.context;\n\n if (router.history.location?.state?.fromMastodon) {\n router.history.goBack();\n } else {\n router.history.push('/');\n }\n };\n\n setHotkeysRef = c => {\n this.hotkeys = c;\n };\n\n handleHotkeyToggleHelp = () => {\n if (this.props.location.pathname === '/keyboard-shortcuts') {\n this.context.router.history.goBack();\n } else {\n this.context.router.history.push('/keyboard-shortcuts');\n }\n };\n\n handleHotkeyGoToHome = () => {\n this.context.router.history.push('/home');\n };\n\n handleHotkeyGoToNotifications = () => {\n this.context.router.history.push('/notifications');\n };\n\n handleHotkeyGoToLocal = () => {\n this.context.router.history.push('/public/local');\n };\n\n handleHotkeyGoToFederated = () => {\n this.context.router.history.push('/public');\n };\n\n handleHotkeyGoToDirect = () => {\n this.context.router.history.push('/conversations');\n };\n\n handleHotkeyGoToStart = () => {\n this.context.router.history.push('/getting-started');\n };\n\n handleHotkeyGoToFavourites = () => {\n this.context.router.history.push('/favourites');\n };\n\n handleHotkeyGoToPinned = () => {\n this.context.router.history.push('/pinned');\n };\n\n handleHotkeyGoToProfile = () => {\n this.context.router.history.push(`/@${this.props.username}`);\n };\n\n handleHotkeyGoToBlocked = () => {\n this.context.router.history.push('/blocks');\n };\n\n handleHotkeyGoToMuted = () => {\n this.context.router.history.push('/mutes');\n };\n\n handleHotkeyGoToRequests = () => {\n this.context.router.history.push('/follow_requests');\n };\n\n render () {\n const { draggingOver } = this.state;\n const { children, isComposing, location, dropdownMenuIsOpen, layout } = this.props;\n\n const handlers = {\n help: this.handleHotkeyToggleHelp,\n new: this.handleHotkeyNew,\n search: this.handleHotkeySearch,\n forceNew: this.handleHotkeyForceNew,\n toggleComposeSpoilers: this.handleHotkeyToggleComposeSpoilers,\n focusColumn: this.handleHotkeyFocusColumn,\n back: this.handleHotkeyBack,\n goToHome: this.handleHotkeyGoToHome,\n goToNotifications: this.handleHotkeyGoToNotifications,\n goToLocal: this.handleHotkeyGoToLocal,\n goToFederated: this.handleHotkeyGoToFederated,\n goToDirect: this.handleHotkeyGoToDirect,\n goToStart: this.handleHotkeyGoToStart,\n goToFavourites: this.handleHotkeyGoToFavourites,\n goToPinned: this.handleHotkeyGoToPinned,\n goToProfile: this.handleHotkeyGoToProfile,\n goToBlocked: this.handleHotkeyGoToBlocked,\n goToMuted: this.handleHotkeyGoToMuted,\n goToRequests: this.handleHotkeyGoToRequests,\n };\n\n return (\n <HotKeys keyMap={keyMap} handlers={handlers} ref={this.setHotkeysRef} attach={window} focused>\n <div className={classNames('ui', { 'is-composing': isComposing })} ref={this.setRef} style={{ pointerEvents: dropdownMenuIsOpen ? 'none' : null }}>\n <Header />\n\n <SwitchingColumnsArea location={location} singleColumn={layout === 'mobile' || layout === 'single-column'}>\n {children}\n </SwitchingColumnsArea>\n\n {layout !== 'mobile' && <PictureInPicture />}\n <NotificationsContainer />\n <LoadingBarContainer className='loading-bar' />\n <ModalContainer />\n <UploadArea active={draggingOver} onClose={this.closeUploadModal} />\n\n <PlusMinusSettingModal />\n </div>\n </HotKeys>\n );\n }\n\n}\n\nexport default connect(mapStateToProps)(injectIntl(withRouter(UI)));\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { Helmet } from 'react-helmet';\nimport { Route } from 'react-router-dom';\n\nimport { Provider as ReduxProvider } from 'react-redux';\n\nimport { ScrollContext } from 'react-router-scroll-4';\n\nimport { fetchCustomEmojis } from 'mastodon/actions/custom_emojis';\nimport { hydrateStore } from 'mastodon/actions/store';\nimport { connectUserStream } from 'mastodon/actions/streaming';\nimport ErrorBoundary from 'mastodon/components/error_boundary';\nimport { Router } from 'mastodon/components/router';\nimport UI from 'mastodon/features/ui';\nimport initialState, { title as siteTitle } from 'mastodon/initial_state';\nimport { IntlProvider } from 'mastodon/locales';\nimport { store } from 'mastodon/store';\n\nconst title = process.env.NODE_ENV === 'production' ? siteTitle : `${siteTitle} (Dev)`;\n\nconst hydrateAction = hydrateStore(initialState);\n\nstore.dispatch(hydrateAction);\nif (initialState.meta.me) {\n store.dispatch(fetchCustomEmojis());\n}\n\nconst createIdentityContext = state => ({\n signedIn: !!state.meta.me,\n accountId: state.meta.me,\n disabledAccountId: state.meta.disabled_account_id,\n accessToken: state.meta.access_token,\n permissions: state.role ? state.role.permissions : 0,\n});\n\nexport default class Mastodon extends PureComponent {\n\n static childContextTypes = {\n identity: PropTypes.shape({\n signedIn: PropTypes.bool.isRequired,\n accountId: PropTypes.string,\n disabledAccountId: PropTypes.string,\n accessToken: PropTypes.string,\n }).isRequired,\n };\n\n identity = createIdentityContext(initialState);\n\n getChildContext() {\n return {\n identity: this.identity,\n };\n }\n\n componentDidMount() {\n if (this.identity.signedIn) {\n this.disconnect = store.dispatch(connectUserStream());\n }\n }\n\n componentWillUnmount () {\n if (this.disconnect) {\n this.disconnect();\n this.disconnect = null;\n }\n }\n\n shouldUpdateScroll (prevRouterProps, { location }) {\n return !(location.state?.mastodonModalKey && location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey);\n }\n\n render () {\n return (\n <IntlProvider>\n <ReduxProvider store={store}>\n <ErrorBoundary>\n <Router>\n <ScrollContext shouldUpdateScroll={this.shouldUpdateScroll}>\n <Route path='/' component={UI} />\n </ScrollContext>\n </Router>\n\n <Helmet defaultTitle={title} titleTemplate={`%s - ${title}`} />\n </ErrorBoundary>\n </ReduxProvider>\n </IntlProvider>\n );\n }\n\n}\n","/* global performance */\nvar perf = typeof performance !== 'undefined' && performance;\nvar now = perf && perf.now ? function () {\n return perf.now();\n} : function () {\n return Date.now();\n};\nfunction throwIfEmpty(name) {\n if (!name) {\n throw new Error('name must be non-empty');\n }\n}\n\n// simple binary sort insertion\nfunction insertSorted(arr, item) {\n var low = 0;\n var high = arr.length;\n var mid;\n while (low < high) {\n mid = low + high >>> 1; // like (num / 2) but faster\n if (arr[mid].startTime < item.startTime) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n arr.splice(low, 0, item);\n}\nvar mark;\nvar stop;\nvar getEntries;\nvar clear;\nif (perf && perf.mark && perf.measure && perf.getEntriesByName && perf.getEntriesByType && perf.clearMarks && perf.clearMeasures &&\n// In Node, we want to detect that this perf/correctness fix [1] is available, which\n// landed in Node 16.15.0, 17.6.0, and 18.0.0. However, it's not observable, and\n// we don't want to rely on fragile version checks.\n// So we can rely on this observable change [2] to add clearResourceTimings, which\n// landed a bit later (18.2.0), but is close enough for our purposes.\n// [1]: https://github.com/nodejs/node/pull/42032\n// [2]: https://github.com/nodejs/node/pull/42725\ntrue) {\n mark = function (name) {\n throwIfEmpty(name);\n perf.mark(\"start \" + name);\n };\n stop = function (name) {\n throwIfEmpty(name);\n perf.mark(\"end \" + name);\n var measure = perf.measure(name, \"start \" + name, \"end \" + name);\n if (measure) {\n // return value from performance.measure not supported in all browsers\n // https://developer.mozilla.org/en-US/docs/Web/API/Performance/measure#browser_compatibility\n return measure;\n }\n var entries = perf.getEntriesByName(name);\n return entries[entries.length - 1];\n };\n getEntries = function () {\n return perf.getEntriesByType('measure');\n };\n clear = function () {\n perf.clearMarks();\n perf.clearMeasures();\n };\n} else {\n var marks = {};\n var entries = [];\n mark = function (name) {\n throwIfEmpty(name);\n var startTime = now();\n marks['$' + name] = startTime;\n };\n stop = function (name) {\n throwIfEmpty(name);\n var endTime = now();\n var startTime = marks['$' + name];\n if (!startTime) {\n throw new Error(\"no known mark: \" + name);\n }\n var entry = {\n startTime: startTime,\n name: name,\n duration: endTime - startTime,\n entryType: 'measure'\n };\n // per the spec this should be at least 150:\n // https://www.w3.org/TR/resource-timing-1/#extensions-performance-interface\n // we just have no limit, per Chrome and Edge's de-facto behavior\n insertSorted(entries, entry);\n return entry;\n };\n getEntries = function () {\n return entries;\n };\n clear = function () {\n marks = {};\n entries = [];\n };\n}\nexport { clear, getEntries, mark, stop };","import { createRoot } from 'react-dom/client';\n\nimport { setupBrowserNotifications } from 'mastodon/actions/notifications';\nimport Mastodon from 'mastodon/containers/mastodon';\nimport { me } from 'mastodon/initial_state';\nimport * as perf from 'mastodon/performance';\nimport ready from 'mastodon/ready';\nimport { store } from 'mastodon/store';\n\n/**\n * @returns {Promise<void>}\n */\nfunction main() {\n perf.start('main()');\n\n return ready(async () => {\n const mountNode = document.getElementById('mastodon');\n const props = JSON.parse(mountNode.getAttribute('data-props'));\n\n window.__PLUS_MINUS_EVENTS__ = new EventTarget();\n\n if (localStorage.plusminus_config_sp_header === 'hidden') {\n document.body.classList.add('hide-sp-header');\n }\n\n const root = createRoot(mountNode);\n root.render(<Mastodon {...props} />);\n store.dispatch(setupBrowserNotifications());\n\n if (process.env.NODE_ENV === 'production' && me && 'serviceWorker' in navigator) {\n const { Workbox } = await import('workbox-window');\n\n let workerPath = '/sw.js';\n if (document.querySelector('meta[name=\"plusminus-disable-remote-media-cache\"]')?.getAttribute('content') === 'true') {\n workerPath += '?disable-remote-media-cache=true';\n }\n\n const wb = new Workbox(workerPath);\n /** @type {ServiceWorkerRegistration} */\n let registration;\n\n try {\n registration = await wb.register();\n } catch (err) {\n console.error(err);\n }\n\n if (registration && 'Notification' in window && Notification.permission === 'granted') {\n const registerPushNotifications = await import('mastodon/actions/push_notifications');\n\n store.dispatch(registerPushNotifications.register());\n }\n }\n\n perf.stop('main()');\n });\n}\n\nexport default main;\n","import './public-path';\nimport main from \"mastodon/main\"\n\nimport { start } from '../mastodon/common';\nimport { loadLocale } from '../mastodon/locales';\nimport { loadPolyfills } from '../mastodon/polyfills';\n\nstart();\n\nloadPolyfills()\n .then(loadLocale)\n .then(main)\n .catch(e => {\n console.error(e);\n });\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port;\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n var joined = aPath.charAt(0) === '/' ? aPath : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\nvar supportsNullProto = function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}();\nfunction identity(s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n var length = s.length;\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ || s.charCodeAt(length - 2) !== 95 /* '_' */ || s.charCodeAt(length - 3) !== 111 /* 'o' */ || s.charCodeAt(length - 4) !== 116 /* 't' */ || s.charCodeAt(length - 5) !== 111 /* 'o' */ || s.charCodeAt(length - 6) !== 114 /* 'r' */ || s.charCodeAt(length - 7) !== 112 /* 'p' */ || s.charCodeAt(length - 8) !== 95 /* '_' */ || s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n return mappingA.name - mappingB.name;\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n if (aStr1 > aStr2) {\n return 1;\n }\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;","(function (root, factory) {\n 'use strict';\n\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n } else {\n root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n }\n})(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n var _options = {\n filter: function (stackframe) {\n // Filter out stackframes for this library by default\n return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 && (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 && (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 && (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n },\n sourceCache: {}\n };\n var _generateError = function StackTrace$$GenerateError() {\n try {\n // Error must be thrown to get stack in IE\n throw new Error();\n } catch (err) {\n return err;\n }\n };\n\n /**\n * Merge 2 given Objects. If a conflict occurs the second object wins.\n * Does not do deep merges.\n *\n * @param {Object} first base object\n * @param {Object} second overrides\n * @returns {Object} merged first and second\n * @private\n */\n function _merge(first, second) {\n var target = {};\n [first, second].forEach(function (obj) {\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n target[prop] = obj[prop];\n }\n }\n return target;\n });\n return target;\n }\n function _isShapedLikeParsableError(err) {\n return err.stack || err['opera#sourceloc'];\n }\n function _filtered(stackframes, filter) {\n if (typeof filter === 'function') {\n return stackframes.filter(filter);\n }\n return stackframes;\n }\n return {\n /**\n * Get a backtrace from invocation point.\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n get: function StackTrace$$get(opts) {\n var err = _generateError();\n return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts);\n },\n /**\n * Get a backtrace from invocation point.\n * IMPORTANT: Does not handle source maps or guess function names!\n *\n * @param {Object} opts\n * @returns {Array} of StackFrame\n */\n getSync: function StackTrace$$getSync(opts) {\n opts = _merge(_options, opts);\n var err = _generateError();\n var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts);\n return _filtered(stack, opts.filter);\n },\n /**\n * Given an error object, parse it.\n *\n * @param {Error} error object\n * @param {Object} opts\n * @returns {Promise} for Array[StackFrame}\n */\n fromError: function StackTrace$$fromError(error, opts) {\n opts = _merge(_options, opts);\n var gps = new StackTraceGPS(opts);\n return new Promise(function (resolve) {\n var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter);\n resolve(Promise.all(stackframes.map(function (sf) {\n return new Promise(function (resolve) {\n function resolveOriginal() {\n resolve(sf);\n }\n gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n });\n })));\n }.bind(this));\n },\n /**\n * Use StackGenerator to generate a backtrace.\n *\n * @param {Object} opts\n * @returns {Promise} of Array[StackFrame]\n */\n generateArtificially: function StackTrace$$generateArtificially(opts) {\n opts = _merge(_options, opts);\n var stackFrames = StackGenerator.backtrace(opts);\n if (typeof opts.filter === 'function') {\n stackFrames = stackFrames.filter(opts.filter);\n }\n return Promise.resolve(stackFrames);\n },\n /**\n * Given a function, wrap it such that invocations trigger a callback that\n * is called with a stack trace.\n *\n * @param {Function} fn to be instrumented\n * @param {Function} callback function to call with a stack trace on invocation\n * @param {Function} errback optional function to call with error if unable to get stack trace.\n * @param {Object} thisArg optional context object (e.g. window)\n */\n instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n // Already instrumented, return given Function\n return fn;\n }\n var instrumented = function StackTrace$$instrumented() {\n try {\n this.get().then(callback, errback)['catch'](errback);\n return fn.apply(thisArg || this, arguments);\n } catch (e) {\n if (_isShapedLikeParsableError(e)) {\n this.fromError(e).then(callback, errback)['catch'](errback);\n }\n throw e;\n }\n }.bind(this);\n instrumented.__stacktraceOriginalFn = fn;\n return instrumented;\n },\n /**\n * Given a function that has been instrumented,\n * revert the function to it's original (non-instrumented) state.\n *\n * @param {Function} fn to de-instrument\n */\n deinstrument: function StackTrace$$deinstrument(fn) {\n if (typeof fn !== 'function') {\n throw new Error('Cannot de-instrument non-function object');\n } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n return fn.__stacktraceOriginalFn;\n } else {\n // Function not instrumented, return original\n return fn;\n }\n },\n /**\n * Given an error message and Array of StackFrames, serialize and POST to given URL.\n *\n * @param {Array} stackframes\n * @param {String} url\n * @param {String} errorMsg\n * @param {Object} requestOptions\n */\n report: function StackTrace$$report(stackframes, url, errorMsg, requestOptions) {\n return new Promise(function (resolve, reject) {\n var req = new XMLHttpRequest();\n req.onerror = reject;\n req.onreadystatechange = function onreadystatechange() {\n if (req.readyState === 4) {\n if (req.status >= 200 && req.status < 400) {\n resolve(req.responseText);\n } else {\n reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n }\n }\n };\n req.open('post', url);\n\n // Set request headers\n req.setRequestHeader('Content-Type', 'application/json');\n if (requestOptions && typeof requestOptions.headers === 'object') {\n var headers = requestOptions.headers;\n for (var header in headers) {\n if (Object.prototype.hasOwnProperty.call(headers, header)) {\n req.setRequestHeader(header, headers[header]);\n }\n }\n }\n var reportPayload = {\n stack: stackframes\n };\n if (errorMsg !== undefined && errorMsg !== null) {\n reportPayload.message = errorMsg;\n }\n req.send(JSON.stringify(reportPayload));\n });\n }\n };\n});","(function (root, factory) {\n 'use strict';\n\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n})(this, function () {\n 'use strict';\n\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n }\n function _getter(p) {\n return function () {\n return this[p];\n };\n }\n var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n var numericProps = ['columnNumber', 'lineNumber'];\n var stringProps = ['fileName', 'functionName', 'source'];\n var arrayProps = ['args'];\n var objectProps = ['evalOrigin'];\n var props = booleanProps.concat(numericProps, stringProps, arrayProps, objectProps);\n function StackFrame(obj) {\n if (!obj) return;\n for (var i = 0; i < props.length; i++) {\n if (obj[props[i]] !== undefined) {\n this['set' + _capitalize(props[i])](obj[props[i]]);\n }\n }\n }\n StackFrame.prototype = {\n getArgs: function () {\n return this.args;\n },\n setArgs: function (v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n getEvalOrigin: function () {\n return this.evalOrigin;\n },\n setEvalOrigin: function (v) {\n if (v instanceof StackFrame) {\n this.evalOrigin = v;\n } else if (v instanceof Object) {\n this.evalOrigin = new StackFrame(v);\n } else {\n throw new TypeError('Eval Origin must be an Object or StackFrame');\n }\n },\n toString: function () {\n var fileName = this.getFileName() || '';\n var lineNumber = this.getLineNumber() || '';\n var columnNumber = this.getColumnNumber() || '';\n var functionName = this.getFunctionName() || '';\n if (this.getIsEval()) {\n if (fileName) {\n return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return '[eval]:' + lineNumber + ':' + columnNumber;\n }\n if (functionName) {\n return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return fileName + ':' + lineNumber + ':' + columnNumber;\n }\n };\n StackFrame.fromString = function StackFrame$$fromString(str) {\n var argsStartIndex = str.indexOf('(');\n var argsEndIndex = str.lastIndexOf(')');\n var functionName = str.substring(0, argsStartIndex);\n var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n var locationString = str.substring(argsEndIndex + 1);\n if (locationString.indexOf('@') === 0) {\n var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n var fileName = parts[1];\n var lineNumber = parts[2];\n var columnNumber = parts[3];\n }\n return new StackFrame({\n functionName: functionName,\n args: args || undefined,\n fileName: fileName,\n lineNumber: lineNumber || undefined,\n columnNumber: columnNumber || undefined\n });\n };\n for (var i = 0; i < booleanProps.length; i++) {\n StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n StackFrame.prototype['set' + _capitalize(booleanProps[i])] = function (p) {\n return function (v) {\n this[p] = Boolean(v);\n };\n }(booleanProps[i]);\n }\n for (var j = 0; j < numericProps.length; j++) {\n StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n StackFrame.prototype['set' + _capitalize(numericProps[j])] = function (p) {\n return function (v) {\n if (!_isNumber(v)) {\n throw new TypeError(p + ' must be a Number');\n }\n this[p] = Number(v);\n };\n }(numericProps[j]);\n }\n for (var k = 0; k < stringProps.length; k++) {\n StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n StackFrame.prototype['set' + _capitalize(stringProps[k])] = function (p) {\n return function (v) {\n this[p] = String(v);\n };\n }(stringProps[k]);\n }\n return StackFrame;\n});","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, 'file', null);\n this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n}\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap = function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n var sourceRoot = aSourceMapConsumer.sourceRoot;\n var generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot: sourceRoot\n });\n aSourceMapConsumer.eachMapping(function (mapping) {\n var newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn\n }\n };\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn\n };\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n};\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping = function SourceMapGenerator_addMapping(aArgs) {\n var generated = util.getArg(aArgs, 'generated');\n var original = util.getArg(aArgs, 'original', null);\n var source = util.getArg(aArgs, 'source', null);\n var name = util.getArg(aArgs, 'name', null);\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\n }\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original != null && original.line,\n originalColumn: original != null && original.column,\n source: source,\n name: name\n });\n};\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent = function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n var source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n};\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap = function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n var sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + 'or the source map\\'s \"file\" property. Both were omitted.');\n }\n sourceFile = aSourceMapConsumer.file;\n }\n var sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n var newSources = new ArraySet();\n var newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n var original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source);\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n var source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n var name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n sourceFile = util.join(aSourceMapPath, sourceFile);\n }\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n this.setSourceContent(sourceFile, content);\n }\n }, this);\n};\n\n/**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping = function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, aName) {\n if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aGenerated.line > 0 && aGenerated.column >= 0 && !aOriginal && !aSource && !aName) {\n // Case 1.\n return;\n } else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aOriginal && 'line' in aOriginal && 'column' in aOriginal && aGenerated.line > 0 && aGenerated.column >= 0 && aOriginal.line > 0 && aOriginal.column >= 0 && aSource) {\n // Cases 2 and 3.\n return;\n } else {\n throw new Error('Invalid mapping: ' + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\n }));\n }\n};\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings = function SourceMapGenerator_serializeMappings() {\n var previousGeneratedColumn = 0;\n var previousGeneratedLine = 1;\n var previousOriginalColumn = 0;\n var previousOriginalLine = 0;\n var previousName = 0;\n var previousSource = 0;\n var result = '';\n var next;\n var mapping;\n var nameIdx;\n var sourceIdx;\n var mappings = this._mappings.toArray();\n for (var i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = '';\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\n } else {\n if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += ',';\n }\n }\n next += base64VLQ.encode(mapping.generatedColumn - previousGeneratedColumn);\n previousGeneratedColumn = mapping.generatedColumn;\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(mapping.originalLine - 1 - previousOriginalLine);\n previousOriginalLine = mapping.originalLine - 1;\n next += base64VLQ.encode(mapping.originalColumn - previousOriginalColumn);\n previousOriginalColumn = mapping.originalColumn;\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n result += next;\n }\n return result;\n};\nSourceMapGenerator.prototype._generateSourcesContent = function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n var key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) ? this._sourcesContents[key] : null;\n }, this);\n};\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON = function SourceMapGenerator_toJSON() {\n var map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings()\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n }\n return map;\n};\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString = function SourceMapGenerator_toString() {\n return JSON.stringify(this.toJSON());\n};\nexports.SourceMapGenerator = SourceMapGenerator;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0 ? (-aValue << 1) + 1 : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative ? -shifted : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n var vlq = toVLQSigned(aValue);\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = util.toSetString(aStr);\n var isDuplicate = has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n this._set[sStr] = idx;\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\nexports.ArraySet = ArraySet;"],"sourceRoot":""}