Help: GitHub project opens to a white screen, but the extension imports correctly

Hey guys! I’m creating an extension right now and I made it into a GitHub project so I could obv. let you guys use it. The only problem is that for some reason, the actual GitHub project in makecode keeps saying that there’s like a bug and it reloads the project multiple times before just going to a blank white screen. This seemed to happen when I used the extension in another project, and clicked on the pxt.json file and then the file with all the code! It also seems as if I paste the actual GitHub link in the extensions bar, it works perfectly normal as if nothing happened; but when I click the local copy in the extension tab, it breaks. Also, the GitHub code is perfectly normal. If someone like @richard or someone who can trouble shoot or knows how to use GitHub, please help me!!!

Summary:

  1. The repository imports fine as an extension using the GitHub URL.
  2. The extension functions work.
  3. But opening the GitHub project itself (from GitHub in MakeCode) results in a blank white screen.
  4. Another extension of mine (RetroFx+) had a similar issue that was eventually fixed by correcting something in pxt.json.
  5. Since the extension imports successfully, I don’t think the code itself is broken.

@CodaKnight hmmm, can you send me the console logs in the browser? i’m guessing an error is showing up in there.

in the meantime, you should be able to just re-import your project. from the home screen, click the import button, choose “import URL” (not github repo) and paste in the link to your github repo.

Thanks @richard!

I also tried using Import → Import URL with my GitHub repo, but that still results in the same blank white screen. Interestingly, if I add the exact same GitHub URL as an extension inside another MakeCode project, it imports and works correctly with all the files present.

So the repository seems to work as an extension, but trying to open/import it as a project results in the white screen.

Hey Richard, I checked the console logs. A main error I think I found is:

error: main.ts(1,11): error TS2552: Cannot find name 'MathX'. Did you mean 'Math'?

It looks like the project loads, but the MathX extension isn’t being recognized after importing. I also saw some Blockly warnings, but I think they are unrelated.

Console log: (Sorry if I’m not supposed to send the whole thing.)

main.js:18 Block definition "text" overwrites previous definition.
Ba.defineBlocks$$module$build$src$core$common @ main.js:18
Ue @ main.js:18
je @ main.js:18
137.blockly @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
135../fieldString @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
30.../plugins/text @ main.js:1
r @ main.js:1
(anonymous) @ main.js:1
26../field_animation @ main.js:1
r @ main.js:1
(anonymous) @ main.js:1
70../fieldEditorRegistry @ main.js:1
r @ main.js:1
(anonymous) @ main.js:1
17../constants @ main.js:1
r @ main.js:1
(anonymous) @ main.js:1
77../builtins/functions @ main.js:1
r @ main.js:1
(anonymous) @ main.js:1
115.../../compiler/util @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
107../msg @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
112../blocks/argumentEditorBlocks @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
74../blockDragger @ main.js:1
r @ main.js:1
(anonymous) @ main.js:1
245.../../pxtblocks @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
370../compiler @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
243.../../pxtblocks @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
333.../../pxteditor @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
345../cloudsync @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
242../core @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
402.../../pxtblocks @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
231.../../pxtblocks @ main.js:6
r @ main.js:1
e @ main.js:1
(anonymous) @ main.js:1
main.js:18 Block definition "text_join" overwrites previous definition.
Ba.defineBlocks$$module$build$src$core$common @ main.js:18
Ue @ main.js:18
je @ main.js:18
136.../../fields/field_imagenotext @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
135../fieldString @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
30.../plugins/text @ main.js:1
r @ main.js:1
(anonymous) @ main.js:1
26../field_animation @ main.js:1
r @ main.js:1
(anonymous) @ main.js:1
70../fieldEditorRegistry @ main.js:1
r @ main.js:1
(anonymous) @ main.js:1
17../constants @ main.js:1
r @ main.js:1
(anonymous) @ main.js:1
77../builtins/functions @ main.js:1
r @ main.js:1
(anonymous) @ main.js:1
115.../../compiler/util @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
107../msg @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
112../blocks/argumentEditorBlocks @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
74../blockDragger @ main.js:1
r @ main.js:1
(anonymous) @ main.js:1
245.../../pxtblocks @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
370../compiler @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
243.../../pxtblocks @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
333.../../pxteditor @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
345../cloudsync @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
242../core @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
402.../../pxtblocks @ main.js:6
r @ main.js:1
(anonymous) @ main.js:1
231.../../pxtblocks @ main.js:6
r @ main.js:1
e @ main.js:1
(anonymous) @ main.js:1
pxtapp.js:1 Browser: chrome 150.0.0.0 on windows
The FetchEvent for "https://dc.services.visualstudio.com/v2/track" resulted in a network error response: the promise was rejected.
---serviceworker:1  Uncaught (in promise) TypeError: Failed to fetch
at ---serviceworker:1:10978
(anonymous) @ ---serviceworker:1
await in (anonymous)
(anonymous) @ ---serviceworker:1
network request
I @ ai.2.min.js:5
v. @ ai.2.min.js:5
r @ ai.2.min.js:5
v.flush @ ai.2.min.js:5
r @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
iterate @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
wn @ ai.2.min.js:5
I @ ai.2.min.js:5
flush @ ai.2.min.js:5
ue @ ai.2.min.js:5
r @ ai.2.min.js:5
s @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
setTimeout
e @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
setTimeout
e @ ai.2.min.js:5
l @ ai.2.min.js:5
i. @ ai.2.min.js:5
r @ ai.2.min.js:5
x. @ ai.2.min.js:5
r @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
r @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ (index):146
s.emptyQueue @ ai.2.min.js:5
r @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
s. @ ai.2.min.js:5
r @ ai.2.min.js:5
dg.getAppInsights @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
PendingScript
(anonymous) @ (index):146
setTimeout
(anonymous) @ (index):146
(anonymous) @ (index):146
window.loadAppInsights @ (index):146
l @ pxtweb.js:1
e.initAnalyticsAsync @ pxtweb.js:1
(anonymous) @ (index):195
ai.2.min.js:5  POST https://dc.services.visualstudio.com/v2/track net::ERR_FAILED
I @ ai.2.min.js:5
v. @ ai.2.min.js:5
r @ ai.2.min.js:5
v.flush @ ai.2.min.js:5
r @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
iterate @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
wn @ ai.2.min.js:5
I @ ai.2.min.js:5
flush @ ai.2.min.js:5
ue @ ai.2.min.js:5
r @ ai.2.min.js:5
s @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
setTimeout
e @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
setTimeout
e @ ai.2.min.js:5
l @ ai.2.min.js:5
i. @ ai.2.min.js:5
r @ ai.2.min.js:5
x. @ ai.2.min.js:5
r @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
r @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ (index):146
s.emptyQueue @ ai.2.min.js:5
r @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
s. @ ai.2.min.js:5
r @ ai.2.min.js:5
dg.getAppInsights @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
PendingScript
(anonymous) @ (index):146
setTimeout
(anonymous) @ (index):146
(anonymous) @ (index):146
window.loadAppInsights @ (index):146
l @ pxtweb.js:1
e.initAnalyticsAsync @ pxtweb.js:1
(anonymous) @ (index):195
pxtapp.js:1 workspace: browser
main.js:18 Unable to find \[flyoutcursor\]\[cursor\] in the registry.
r @ main.js:18
s @ main.js:18
addFlyout @ main.js:10
addWorkspace @ main.js:10
addWorkspace @ main.js:10
ge @ main.js:10
initAccessibleBlocks @ main.js:6
prepareBlockly @ main.js:6
(anonymous) @ main.js:6
Promise.then
loadBlocklyAsync @ main.js:6
loadBlocklyAsync @ main.js:6
componentDidMount @ main.js:6
await in componentDidMount
fa @ main.js:83
Ol @ main.js:83
n.unstable_runWithPriority @ main.js:205
Hr @ main.js:83
Il @ main.js:83
ml @ main.js:83
dl @ main.js:83
Zl @ main.js:83
(anonymous) @ main.js:83
yl @ main.js:83
nc @ main.js:83
n.render @ main.js:83
(anonymous) @ main.js:6
Promise.then
(anonymous) @ main.js:6
pxtsim.js:1 Simulator ServiceWorker registration successful with scope:  https://trg-arcade.userpxt.io/
pxtweb.js:1 Performance Report:


Milestones:
	first JS running @ 190ms
	DOM loaded @ 796ms
	workspace init finished @ 1s150ms
	simulator ready @ 3s283ms

Measurements:
	setAppTarget took ~ 62ms (796ms - 858ms)
	network.request took ~ 146ms (872ms - 1s18ms)
		url: /api/user/preferences
		method: GET
		sizeInBytes: 23703
		statusCode: 200
	network.request took ~ 92ms (1s22ms - 1s114ms)
		url: https://cdn.makecode.com/geo
		method: GET
		sizeInBytes: 2
		statusCode: 200
	network.request took ~ 515ms (1s151ms - 1s666ms)
		url: /api/user/project
		method: GET
		sizeInBytes: 719675
		statusCode: 200
	network.request took ~ 450ms (1s676ms - 2s126ms)
		url: /api/user/project
		method: POST
		sizeInBytes: 42
		statusCode: 200
	network.request took ~ 139ms (2s138ms - 2s277ms)
		url: /api/user/project/6c40a3e1-be14-4678-45b4-8fbb79389e7c
		method: GET
		sizeInBytes: 329870
		statusCode: 200
	prepareBlockly took ~ 28ms (2s340ms - 2s368ms)
	loadBlockly took ~ 40ms (2s328ms - 2s368ms)
	network.request took ~ 59ms (2s310ms - 2s370ms)
		url: https://cdn.makecode.com/api/config/arcade/targetconfig/v4.0.14...
		method: GET
		sizeInBytes: 15318
		statusCode: 200
	network.request took ~ 629ms (2s389ms - 3s17ms)
		url: /api/user/project...
		method: GET
		sizeInBytes: 552
		statusCode: 200
	network.request took ~ 138ms (3s19ms - 3s157ms)
		url: /api/user/project/6c40a3e1-be14-4678-45b4-8fbb79389e7c
		method: GET
		sizeInBytes: 329870
		statusCode: 200


main.js:83 TypeError: Cannot read properties of null (reading 'length')
at Object.r \[as computeFormattedDiff\] (pxtapp.js:1:183551)
at k.createTextDiffJSX (main.js:6:1045708)
at d (main.js:6:1042675)
at k.showDiff (main.js:6:1044475)
at main.js:6:1049456
at Array.map ()
at k.renderCore (main.js:6:1049444)
at k.render (main.js:6:907297)
at Hs (main.js:83:71482)
at $s (main.js:83:71282)
aa @ main.js:83
o.componentDidCatch.n.callback @ main.js:83
uo @ main.js:83
fa @ main.js:83
Ol @ main.js:83
n.unstable_runWithPriority @ main.js:205
Hr @ main.js:83
Il @ main.js:83
ml @ main.js:83
(anonymous) @ main.js:83
n.unstable_runWithPriority @ main.js:205
Hr @ main.js:83
Wr @ main.js:83
Vr @ main.js:83
dl @ main.js:83
enqueueSetState @ main.js:83
m.setState @ main.js:167
onErrorChanges @ main.js:6
setVisible @ main.js:6
(anonymous) @ main.js:6
(anonymous) @ main.js:6
Promise.then
updateEditorFileAsync @ main.js:6
(anonymous) @ main.js:6
Promise.then
componentDidUpdate @ main.js:6
fa @ main.js:83
Ol @ main.js:83
n.unstable_runWithPriority @ main.js:205
Hr @ main.js:83
Il @ main.js:83
ml @ main.js:83
(anonymous) @ main.js:83
n.unstable_runWithPriority @ main.js:205
Hr @ main.js:83
Wr @ main.js:83
Vr @ main.js:83
dl @ main.js:83
enqueueSetState @ main.js:83
m.setState @ main.js:167
internalLoadHeaderAsync @ main.js:6
await in internalLoadHeaderAsync
loadHeaderAsync @ main.js:6
await in loadHeaderAsync
(anonymous) @ main.js:6
Promise.then
(anonymous) @ main.js:6
pxtapp.js:1 Uncaught (in promise) TypeError: Cannot read properties of null (reading 'parentElement')
at e.remove (pxtapp.js:1:560677)
at main.js:6:421954
e.remove @ pxtapp.js:1
(anonymous) @ main.js:6
Promise.then
(anonymous) @ main.js:6
---serviceworker:1 check for existing lock
pxtapp.js:1 error: main.ts(1,11): error TS2552: Cannot find name 'MathX'. Did you mean 'Math'?

\---serviceworker:1 Timed-out check for existing lock
---serviceworker:1 Received lock request cfaf1e47-5a43-4982-e89c-1bb6306fbd7b
---serviceworker:1 Granted lock request cfaf1e47-5a43-4982-e89c-1bb6306fbd7b
pxtapp.js:1 error: main.ts(1,11): error TS2552: Cannot find name 'MathX'. Did you mean 'Math'?

The FetchEvent for "https://dc.services.visualstudio.com/v2/track" resulted in a network error response: the promise was rejected.
---serviceworker:1  Uncaught (in promise) TypeError: Failed to fetch
at ---serviceworker:1:10978
(anonymous) @ ---serviceworker:1
await in (anonymous)
(anonymous) @ ---serviceworker:1
network request
I @ ai.2.min.js:5
v. @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
setTimeout
\_ @ ai.2.min.js:5
v.processTelemetry @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
c @ ai.2.min.js:5
processTelemetry @ ai.2.min.js:5
o. @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
wn @ ai.2.min.js:5
I @ ai.2.min.js:5
processTelemetry @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
c @ ai.2.min.js:5
processTelemetry @ ai.2.min.js:5
o. @ ai.2.min.js:5
o. @ ai.2.min.js:5
t. @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
c @ ai.2.min.js:5
processTelemetry @ ai.2.min.js:5
o. @ ai.2.min.js:5
o. @ ai.2.min.js:5
x.processTelemetry @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
c @ ai.2.min.js:5
processTelemetry @ ai.2.min.js:5
o. @ ai.2.min.js:5
o. @ ai.2.min.js:5
ol.processTelemetry @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
c @ ai.2.min.js:5
processTelemetry @ ai.2.min.js:5
o. @ ai.2.min.js:5
o. @ ai.2.min.js:5
r.processTelemetry @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
c @ ai.2.min.js:5
processTelemetry @ ai.2.min.js:5
o. @ ai.2.min.js:5
J.track @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
e.track @ ai.2.min.js:5
x.trackEvent @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ pxtweb.js:1
track @ pxtweb.js:1
e.aiTrackEvent @ pxtweb.js:1
e.tickEvent @ pxtapp.js:1
(anonymous) @ main.js:6
Promise.then
(anonymous) @ main.js:6
Promise.then
(anonymous) @ main.js:6
ai.2.min.js:5  POST https://dc.services.visualstudio.com/v2/track net::ERR_FAILED
I @ ai.2.min.js:5
v. @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
setTimeout
\_ @ ai.2.min.js:5
v.processTelemetry @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
c @ ai.2.min.js:5
processTelemetry @ ai.2.min.js:5
o. @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
wn @ ai.2.min.js:5
I @ ai.2.min.js:5
processTelemetry @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
c @ ai.2.min.js:5
processTelemetry @ ai.2.min.js:5
o. @ ai.2.min.js:5
o. @ ai.2.min.js:5
t. @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
c @ ai.2.min.js:5
processTelemetry @ ai.2.min.js:5
o. @ ai.2.min.js:5
o. @ ai.2.min.js:5
x.processTelemetry @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
c @ ai.2.min.js:5
processTelemetry @ ai.2.min.js:5
o. @ ai.2.min.js:5
o. @ ai.2.min.js:5
ol.processTelemetry @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
c @ ai.2.min.js:5
processTelemetry @ ai.2.min.js:5
o. @ ai.2.min.js:5
o. @ ai.2.min.js:5
r.processTelemetry @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
c @ ai.2.min.js:5
processTelemetry @ ai.2.min.js:5
o. @ ai.2.min.js:5
J.track @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
Ir @ ai.2.min.js:5
e.track @ ai.2.min.js:5
x.trackEvent @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ ai.2.min.js:5
(anonymous) @ pxtweb.js:1
track @ pxtweb.js:1
e.aiTrackEvent @ pxtweb.js:1
e.tickEvent @ pxtapp.js:1
(anonymous) @ main.js:6
Promise.then
(anonymous) @ main.js:6
Promise.then
(anonymous) @ main.js:6

ah, i see. those logs are helpful! here, give this link a shot: https://arcade.makecode.com/app/5771ab511bd5151e6aa133adfdb69d8392fb7138-71509d0054

WHAT!!! How the heck does it work now??? @richard Please tell me!!! Also btw, I created a github project and now it says I can’t open it even though it worked earlier. ):

1 Like

this bit was the smoking gun:

main.js:83 TypeError: Cannot read properties of null (reading 'length')
at Object.r \[as computeFormattedDiff\] (pxtapp.js:1:183551)
at k.createTextDiffJSX (main.js:6:1045708)
at d (main.js:6:1042675)
at k.showDiff (main.js:6:1044475)
at main.js:6:1049456
at Array.map ()
at k.renderCore (main.js:6:1049444)
at k.render (main.js:6:907297)

i peeked at computeFormattedDiff and was able to spot the issue pretty quickly; if the change in a file is bigger than our maximum allowed diff size then we hit an exception. here’s the full change if you’re interested (it’s real tiny)

as for the second issue, can you give me logs for that one as well? i’ll take a look

2 Likes