decky-frontend-lib
decky-frontend-lib copied to clipboard
Steam client reference
Using the SDH Discord server, GitHub, and personal findings, I have attempted to document as many functions as possible within the SteamClient object. Feedback is greatly appreciated. If you come across any functions that are not documented and you already understand their purpose, please consider leaving a comment or suggestion.
To do list will be done on a separate PR. ~~To-Do List:~~ ~~- [ ] Verify the functionality of all documented functions.~~ ~~- [ ] Organize and restructure all the interfaces for better readability.~~
After reading the latest commit message, how are you detecting the interface changes so quickly?
After reading the latest commit message, how are you detecting the interface changes so quickly?
Using the CEF debugger console, I've written this function to quickly extract every method for any object.
function mapFunctions(obj) {
const methods = {};
function extractMethods(obj, path = []) {
for (const key in obj) {
if (typeof obj[key] === 'function') {
if (!methods[path.join('.')]) {
methods[path.join('.')] = [];
}
methods[path.join('.')].push(key);
} else if (typeof obj[key] === 'object' && obj[key] !== null) {
extractMethods(obj[key], [...path, key]);
}
}
}
extractMethods(obj);
return methods;
}
Then I simply apply this to the SteamClient object, deserialize it as JSON, and compare it to a previous version using git's diff tool.
That's awesome, I'll add this to my update diff system if you don't mind
That's awesome, I'll add this to my update diff system if you don't mind
That would be awesome!
I think we can write a tool to generate the aforementioned TypeScript interfaces from it. This could prove useful, as it can be utilized anywhere. Unfortunately, native code does not provide parameters for these functions. This means documenting parameters must be done manually, unless someone is aware of a method I am not familiar with.
Edit: I decided to spend some time and write one: https://gist.github.com/FlashyReese/05748e25b9feabe14e62ef873a8058cb
Edit: I decided to spend some time and write one: https://gist.github.com/FlashyReese/05748e25b9feabe14e62ef873a8058cb
Noticed you weren't able to get the name of the object from the object. If it's a global object then this should work Object.getOwnPropertyNames(window).filter(name => window[name] === obj)[0]. Probably not actually useful though.
is this ready for review yet? (at least to have it merged until we can have this as a separate package)
Also please retarget to v4-dev
I've rebased to the v4-dev branch. This should be ready for review.