diff --git a/Rakefile b/Rakefile index 546f7dba1..d50dc5b10 100644 --- a/Rakefile +++ b/Rakefile @@ -61,8 +61,15 @@ task :update_acknowledgements do File.open('_data/acknowledgements.yml', 'w+') { |f| f.write(cols.to_yaml) } end +desc "copy error codes to docs" +task :copy_error_codes do + codes_json = File.read('../scripts/error-codes/codes.json') + codes_js = "var errorMap = #{codes_json.chomp};\n" + File.write('js/errorMap.js', codes_js) +end + desc "build into ../../react-gh-pages" -task :release => [:update_version, :js, :fetch_remotes] do +task :release => [:update_version, :js, :fetch_remotes, :copy_error_codes] do system "jekyll build -d ../../react-gh-pages" end diff --git a/_js/ErrorDecoderComponent.js b/_js/ErrorDecoderComponent.js new file mode 100644 index 000000000..7ac945228 --- /dev/null +++ b/_js/ErrorDecoderComponent.js @@ -0,0 +1,111 @@ +/** + * 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)}
+