[sprout] Add shared runtime, improve error reporting
--- I added ~20 more tests to Sprout to get more of a feel for what the test framework would need to support all fixtures. I'm relatively confident that the approach outlined in [the original workplace post](https://fburl.com/workplace/ftu8woch) works to migrate almost all existing fixture tests to sprout (TLDR: use shared functions when possible, otherwise write helper functions in-file). Add `shared-runtime` file to reduce the amount of overhead needed to set up a fixture test. - All generalizable functions and values should be added here (e.g. `shallowCopy`, `deepCopy`, `sum`). - Editor integration is set up through a custom tsconfig, so importing from `shared-runtime` should just work (with hover annotations, click-to-definition, etc). <img width="682" alt="Screenshot 2023-08-17 at 11 09 47 AM" src="https://github.com/facebook/react-forget/assets/34200447/78c3dff9-ba10-4057-b3f6-2fa842d19b1d"> --- Tested new test fixtures added to sprout by adding them to `testfilter.txt` and running with `--verbose --filter`. Note that there are no unexpected exceptions, and all logs + returned values match. ``` feifei0@feifei0-mbp babel-plugin-react-forget % yarn sprout:build && yarn sprout --verbose --filter yarn run v1.22.19 $ yarn workspace sprout run build $ rimraf dist && tsc --build ✨ Done in 2.07s. yarn run v1.22.19 $ node ../sprout/dist/main.js --verbose --filter PASS console-readonly ok {"a":1,"b":2} [ "{ a: 1, b: 2 }", "{ a: 1, b: 2 }", "{ a: 1, b: 2 }", "{ a: 1, b: 2 }", "{ a: 1, b: 2 }" ] PASS constant-propagate-global-phis-constant ok <div>global string 0</div> PASS constant-propagate-global-phis ok <div>global string 1</div> PASS dce-loop ok 10 PASS destructure-capture-global ok {"a":"value 1","someGlobal":{}} PASS destructuring-mixed-scope-and-local-variables-with-default ok {"media":null,"allUrls":["url1","url2","url3"],"onClick":"[[ function params=1 ]]"} PASS holey-array-expr ok [null,"global string 0",{"a":1,"b":2}] PASS infer-global-object ok {"primitiveVal1":2,"primitiveVal2":null,"primitiveVal3":null} PASS infer-phi-primitive ok 1 PASS infer-types-through-type-cast.flow ok 4 PASS issue933-disjoint-set-infinite-loop ok [2] PASS jsx-tag-evaluation-order-non-global ok <div>StaticText1<div>StaticText2</div></div> PASS jsx-tag-evaluation-order ok <div>StaticText1string value 1<div>StaticText2</div></div> PASS method-call ok 4 PASS mutable-lifetime-loops ok {"a":{"value":6},"b":{"value":5},"c":{"value":4},"d":{"value":6}} PASS mutable-lifetime-with-aliasing ok {"b":[{}],"value":[{"c":{},"value":"[[ cyclic ref *0 ]]"},null]} PASS update-expression-in-sequence ok [4,2,3,4] PASS update-expression-on-function-parameter ok [4,1,4,2,4,3,1,4,4] PASS update-expression ok {"x":1,"y":1,"z":2} PASS useMemo-multiple-if-else ok 2 20 Tests, 20 Passed, 0 Failed ✨ Done in 4.11s. ```