/** * Copyright (c) 2013-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ /* global React ReactDOM errorMap:true */ 'use strict'; function replaceArgs(msg, argList) { let argIdx = 0; return msg.replace(/%s/g, function() { const arg = argList[argIdx++]; return arg === undefined ? '[missing argument]' : arg; }); } function urlify(str) { const urlRegex = /(https:\/\/fb\.me\/[a-z\-]+)/g; const segments = str.split(urlRegex); for (let i = 0; i < segments.length; i++) { if (i % 2 === 1) { segments[i] = ({segments[i]}); } } return segments; } // ?invariant=123&args[]=foo&args[]=bar function parseQueryString() { const rawQueryString = window.location.search.substring(1); if (!rawQueryString) { return null; } let code = ''; let args = []; const queries = rawQueryString.split('&'); for (let i = 0; i < queries.length; i++) { const query = decodeURIComponent(queries[i]); if (query.indexOf('invariant=') === 0) { code = query.slice(10); } else if (query.indexOf('args[]=') === 0) { args.push(query.slice(7)); } } return [code, args]; } function ErrorResult(props) { const code = props.code; const errorMsg = props.msg; if (!code) { return (

When you encounter an error, you'll receive a link to this page for that specific error and we'll show you the full error text.

); } return (

The full text of the error you just encountered is:

{urlify(errorMsg)}
); } class ErrorDecoder extends React.Component { constructor(...args) { super(...args); this.state = { code: null, errorMsg: '', }; } componentWillMount() { const parseResult = parseQueryString(); if (parseResult != null) { const [code, args] = parseResult; if (errorMap[code]) { this.setState({ code: code, errorMsg: replaceArgs(errorMap[code], args), }); } } } render() { return ( ); } } ReactDOM.render( , document.querySelector('.error-decoder-container') );