-
Notifications
You must be signed in to change notification settings - Fork 22
Decompile Worker #65
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Decompile Worker #65
Conversation
|
This is something I have tried a few times and got working. However the big issue was always how slow decompling the entire jar is, hopefully I was just being silly as it would be great if this could be done. |
|
I'll try forcing it to decompile the entire Jar first and then time it. |
It's cool, but I think it's unreasonable to make the user wait for 11 minutes for the site to be ready. Especially if we want to be able to link to it from the docs for example. |
|
I imagine it not being enabled by default, and only so for when you want to index the entire Jar, e.g. for full code search, as in #11. |
handle unknown class
modmuss50
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just taken a quick look at this it looks good. There is quite a lot going on here, at some stuff that I need to get familar with. I do worry a little bit that this is going to cause browsers to fall over, where it was previously working just fine.
The requirement of the added headers is also less than ideal, but it seems there is no nice way around that.
| import { decompileEntireJar, deleteCache, type DecompileEntireJarTask } from "../workers/decompile/client"; | ||
| import { minecraftJar } from "../logic/MinecraftApi"; | ||
|
|
||
| const modalOpen = new BehaviorSubject(false); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: can likely just be a useState hook.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Needs the button and modal to acces it, other modals are also in this way.
| // export async function streamJar(name: string, url: string): Promise<Jar> { | ||
| // const reader = new HttpStreamReader(url); | ||
| // const zip = await read(reader, { | ||
| // naive: true | ||
| // }); | ||
| // return new JarImpl(name, zip); | ||
| // } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This isnt actually used atm, as it made too many seperate requests. Maybe just make this return a Zip as I have future plans for this (libraries).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since it waits for the zip to read all the stream, why can't it use the fetched blob instead?
| "@katana-project/zip": "^0.7.1", | ||
| "@monaco-editor/react": "^4.7.0", | ||
| "@run-slicer/vf": "^0.3.2-1.11.2", | ||
| "@run-slicer/vf": "git+https://github.com/deirn/vineflower.js.git#7a257563c0352acf232313612146eae82b5919bf", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note before merging, use a proper version.
|
Would it be possible to add some E2E tests for this, or is it too slow? It would be nice to have some confidence that it works on the 3 main browsers. |
|
I say this PR is ready for actual review. Added E2E test for decompiling some classes by stopping as early after one class is decompiled. |
|
Awesome, thanks for that. Ill take a closer look shortly. Do I need to do anything special in cloudflare to add the headers or is that magically handled by the |
|
CF should handle it automatically by the |

Move the decompiling logic to workers.
Also cache decompiled result to IndexedDB.
TODO:
Related to #11