{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":441835361,"defaultBranch":"main","name":"NBTify","ownerLogin":"Offroaders123","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2021-12-26T07:37:02.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/65947371?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1717714015.0","currentOid":""},"activityList":{"items":[{"before":"bb338a0e01db74435fd61b2a4d6f1483d805358c","after":"47d78a22e77819770d14c3b9eb0ce82f48833754","ref":"refs/heads/main","pushedAt":"2024-06-11T08:45:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Format Typing Strictness","shortMessageHtmlLink":"Format Typing Strictness"}},{"before":"8126a889d59dc176e42a82a2162c3ce239d47383","after":"bb338a0e01db74435fd61b2a4d6f1483d805358c","ref":"refs/heads/main","pushedAt":"2024-06-11T08:23:23.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Compression Typing Strictness\n\nI'm not completely sure I still need the `.catch()` calls, but I'm not going to remove them, because that seems to cause errors. Same with needing to `await` each of their parent function calls, that doesn't work in the browser still for some reason, from the looks of it.","shortMessageHtmlLink":"Compression Typing Strictness"}},{"before":"aa14ae8c86f0707b35b81c6a3ee53d58307b9f3d","after":"8126a889d59dc176e42a82a2162c3ce239d47383","ref":"refs/heads/main","pushedAt":"2024-06-11T08:04:45.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Primitive Typing Strictness\n\nGoing to go back through the library and make it stronger in missing places, as well as fixing places that I changed along the way, unknowingly.\n\nI didn't have the return types here because I thought the assertions could just be enough to declare what they were, but now I think I'm full on board with using type annotations for things, it definitely helps you keep track of your intent a lot better, which is what I like it for, to keep track of what is temporary, and what needs work. If something has a type annotation, it's more likely to be marked as something complete, in my head.","shortMessageHtmlLink":"Primitive Typing Strictness"}},{"before":"85c256f84d8a3ddb39a3f24cc9058d7fc6f09206","after":"aa14ae8c86f0707b35b81c6a3ee53d58307b9f3d","ref":"refs/heads/main","pushedAt":"2024-06-11T07:13:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"TAG Byte Reading Validation\n\nRealized I shouldn't be making assertions at this part. This can make things more secure!\n\nI want to look through the code again after this, and refactor it, but not to move things around, but to see if there's any weird things still lying around the codebase.\n\nSolar Winds, it kind of sounds like Pineapple Thief at the beginning :D\n\nListened to Insurgentes and Grace for Drowning disc 1 today :D","shortMessageHtmlLink":"TAG Byte Reading Validation"}},{"before":"b950da648eb1999c63cd62c4cd8bf1e99229821e","after":"85c256f84d8a3ddb39a3f24cc9058d7fc6f09206","ref":"refs/heads/main","pushedAt":"2024-06-06T23:11:30.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Args Validations\n\nNow that the constructor doesn't specifically handle these, the CLI does instead.","shortMessageHtmlLink":"Args Validations"}},{"before":"64407ec3ea5c8a78b91bf44d95643a1ed8b75f74","after":null,"ref":"refs/heads/exp-pnbt-converter","pushedAt":"2024-06-06T22:46:55.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"}},{"before":"8080325a5b3e62c734b59b91f35074d48ab82fea","after":"b950da648eb1999c63cd62c4cd8bf1e99229821e","ref":"refs/heads/main","pushedAt":"2024-06-04T09:30:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Optional Spacing\n\nI think this is kind of annoying, but more consistent at the same time. Both `JSON.stringify()` and `NBT.stringify()` don't format by default, so I question whether the CLI doing that would make any sense. From a UX perspective I think it makes it easier for the user, but should it be different than how the programming side of it works?","shortMessageHtmlLink":"Optional Spacing"}},{"before":"155b070fd208034fa37e338d74b99feb8fcb5ea7","after":"8080325a5b3e62c734b59b91f35074d48ab82fea","ref":"refs/heads/main","pushedAt":"2024-06-04T09:17:36.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Any Extension Detection + Parser Args\n\nFurther flattening, shouldn't access variables outside the scope of the function!","shortMessageHtmlLink":"Any Extension Detection + Parser Args"}},{"before":"8b9d1a51cecc221f551e8c17788c3f9a850a6857","after":"155b070fd208034fa37e338d74b99feb8fcb5ea7","ref":"refs/heads/main","pushedAt":"2024-06-04T08:34:48.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Optional Format\n\nThis usage is okay actually.","shortMessageHtmlLink":"Optional Format"}},{"before":null,"after":"64407ec3ea5c8a78b91bf44d95643a1ed8b75f74","ref":"refs/heads/exp-pnbt-converter","pushedAt":"2024-06-04T06:44:00.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Prismarine-NBT Converter Demo\n\nI used this concept in part of what I think was Region-Types, a few months ago. I was curious what this might look like as a concept if it were built into NBTify itself. The idea is that you'd be able to have a pre-existing Prismarine-NBT parsed NBT file object, and NBTify would know how to convert those shapes into the object structure that it uses, like it's primitives and things like that. Ideally I would just map the values themselves, rather than reencoding the buffers like this, I was curious just how close this would get though, since it has worked for me already, it just might be more extra computations that don't have to be there.\n\nWhat do you think? Is writing it back to a file, and re-reading it better than just mapping over to the other object shapes? Maybe this really is just faster. I have no data to back up which one is better, but I do like the simplicity of this, it works well with the possibility of combining with the other libraries as well. This is a niche thing though, so I'm not sure I'm going to add this anyways.","shortMessageHtmlLink":"Prismarine-NBT Converter Demo"}},{"before":"f132db1e987fc437f27f5409fb67e6f046ea02a8","after":"8b9d1a51cecc221f551e8c17788c3f9a850a6857","ref":"refs/heads/main","pushedAt":"2024-05-16T21:27:31.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Stringify Primitive Flattening\n\nWanted to fix this a while back, glad it can be possible now! I don't have to construct the primitive wrappers to directly write a given value as a specific SNBT type. I'm not sure this did much in terms of performance (making unnecessary objects for each array item, to just be discarded over again), but it was definitely unnecessary. This is the kind of thing I think ThePrimeagen mentions to look out for, making things in unnecessary or repetitive times.\n\nhttps://minecraft.wiki/w/NBT_format#SNBT_format","shortMessageHtmlLink":"Stringify Primitive Flattening"}},{"before":"8bed4c78b8d5c961d0d0955cb0e3876d9e25d52c","after":"f132db1e987fc437f27f5409fb67e6f046ea02a8","ref":"refs/heads/main","pushedAt":"2024-05-14T10:43:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"MUTF-8 Test, Fix!\n\nThis was an interesting one! Thankfully I found an issue page about MUTF-8 handling on the repo for Twoolie/NBT, the Python project. It gave me some insight and a file to test against. I wrote my own script to slim it down a bunch, and dedupe the tags that are used multiple times. It's crazy how big just book text can get!\n\nI used this actual version of NBTify in this commit, to write the new content to the file. That's also why I diffed it out, I wanted to make sure when I slimmed it down that the content coming out of it was actually what it was supposed to be as well. When using older NBTify, it didn't work correctly, because MUTF-8 handles things different than standard UTF-8.\n\n```js\n// @ts-check\n\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport * as NBT from \"./NBTify/src/index.ts\";\n\nconst data = await readFile(\"./hotbar.nbt\");\n\nconst trimmed = data.subarray(0x000BAE96, 0x000CA7C2);\nconsole.log(trimmed);\n\n/** @type {NBT.NBTData} */\nconst hotbar = await NBT.read(data);\n\nconst book = hotbar.data[0][1].tag.BlockEntityTag.Items[12];\nconsole.log(book);\n\nconst mutf8Demo = await NBT.write(book);\nconsole.log(mutf8Demo);\n\nconst demoDiff = mutf8Demo.subarray(1, -2);\nconsole.log(Buffer.compare(trimmed, demoDiff));\n\nawait writeFile(\"./alien-book.nbt\", mutf8Demo);\n```\n\nhttps://github.com/Offroaders123/NBTify/issues/42\nhttps://github.com/Offroaders123/NBTify/issues/44\nhttps://github.com/twoolie/NBT/issues/144#issuecomment-943840281\nhttps://github.com/twoolie/NBT/issues/144\n\nI'm still not sure I'm going to use the dependency itself or if I should just emded that into NBTify on it's own. I think I may just use it as a dependency, as I've been trying to get more used to not reinventing the wheel for everything, unless that has benefits. The MUTF-8 library already does everything I need it to, and it's ESM TypeScript, so I'm not sure what other reason I have to not just use it, it's great! Eventually I want to move my compression handling into a separate module too, so I will have to use module resolution for that down the road either way. I say heck to it! Let's do it :) Gonna look into if there's anything I'm forgetting, before doing that though. I really like having the ability to use projects like these (NBTify) without needing a transpilation or build step. Modern CDNs seem to handle this nicely, so we'll see.","shortMessageHtmlLink":"MUTF-8 Test, Fix!"}},{"before":"764938d99837e5a62957e049437555196a3f43f1","after":"8bed4c78b8d5c961d0d0955cb0e3876d9e25d52c","ref":"refs/heads/main","pushedAt":"2024-05-14T07:45:42.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Future Formatting!\n\nBeen slowly taking this route over in other projects of mine. Now I think I'm fully on board with using spaces in more places for formatting things! I used to not use them in some spots, and I think it was a habit I had from back when I very first started learning JavaScript. Like the Code.org days, that kind of vibe.","shortMessageHtmlLink":"Future Formatting!"}},{"before":"8befae82dc00b2d5c1887c5883fe6fe68cf52625","after":"764938d99837e5a62957e049437555196a3f43f1","ref":"refs/heads/main","pushedAt":"2024-05-14T07:09:57.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Read v1.90.1 Collapsing\n\nStorm Corrosion - Ljudet Innan, Happy, Lock Howl","shortMessageHtmlLink":"Read v1.90.1 Collapsing"}},{"before":"e14e0d134be185baa10175d154b5e736f3edc90b","after":"8befae82dc00b2d5c1887c5883fe6fe68cf52625","ref":"refs/heads/main","pushedAt":"2024-04-25T08:18:55.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Tag-specific Method Flattening (for diffs)\n\nThis may be temporary, I'm exploring this to help with understanding what else I changed in the codebase from over the last few months. I'm going to make a few other changes like that again here soon too.","shortMessageHtmlLink":"Tag-specific Method Flattening (for diffs)"}},{"before":"b031e6ba9d546813243975ee31b216e1b3c4ae48","after":"e14e0d134be185baa10175d154b5e736f3edc90b","ref":"refs/heads/main","pushedAt":"2024-04-25T07:58:47.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Class Revertnaming","shortMessageHtmlLink":"Class Revertnaming"}},{"before":"ae90da4a3beb5f50407c53715754f8ae4048c8ae","after":"b031e6ba9d546813243975ee31b216e1b3c4ae48","ref":"refs/heads/main","pushedAt":"2024-04-25T07:50:29.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Formatting, Reordering, Indentation\n\nZiltoid & Ki Podcasts\n\nBrought things back to more similar organization to the original classes.","shortMessageHtmlLink":"Formatting, Reordering, Indentation"}},{"before":"e5f61fc1400e1f8d7ec4ab3969e57e70e7cd8421","after":null,"ref":"refs/heads/exp-fp-reader-writer","pushedAt":"2024-04-22T19:32:31.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"}},{"before":"e203756fec7df37f2ff91c9db0de62231dadd9ed","after":"ae90da4a3beb5f50407c53715754f8ae4048c8ae","ref":"refs/heads/main","pushedAt":"2024-04-22T18:58:20.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Unused Class Method Elision","shortMessageHtmlLink":"Unused Class Method Elision"}},{"before":"6e14d868893658560a0672a9f78fde561d0cc06e","after":"e203756fec7df37f2ff91c9db0de62231dadd9ed","ref":"refs/heads/main","pushedAt":"2024-04-22T18:56:35.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Class Field/Method Privacy\n\nThis actually noticeably helps with seeing what is used in the code as well! I guess I could just remove the `export` modifiers too, that has the same effect.\n\nWow, yeah I'm hearing a huge crossover in tone for Thank You Scientist and Snarky Puppy. \"Alma\" really reminds me of something that could be off of Terraformer. It's neat for things to click like that, because I already knew Puppy and this album long before TYS.\n\nSame with the crossover with Animals's influence from Matt, and Kris' style which I mentioned previously. Really neat. It's probably just a genre thing, I think I'm picking up how those guys have brought fusion aspects over to other genres though, that's more the part that's the new realization. It's like they upstreamed jazz fusion into the \"more main\" prog scene. I want to do that with the Keneally sound and metal. Maybe that's already Devin haha, especially since \"Empath\" (Mike plays and help produce on that!).","shortMessageHtmlLink":"Class Field/Method Privacy"}},{"before":"1b65eacdf3e4e2b70e697db6f9e6878dfe1237e0","after":"6e14d868893658560a0672a9f78fde561d0cc06e","ref":"refs/heads/main","pushedAt":"2024-04-22T18:40:18.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Re-Classing for Readers and Writers\n\nPhoebus + Metal!!! I want that combo. Gorod Puppy. Thank You Devin.\n\nThe functional setup for read/write is a bit confusing and or convoluted I feel like, so I am looking to go back to classes for those. I'm not sure I want to enable top-level support for reading indivudual tags either, maybe a top-level `readTag()` can work instead. You can choose from `readTag()` or `readRoot()`. I think doing that also elevates the need for needing to handle various config options, say like endianness and all things under that umbrella. I think having to explicitly name out all of your config when reading a tag on it's own seems necessary. If you just want to read a plain `TAG_Byte`, it should need to have an absolute format to read by. I'm not sure, I think I just don't fully get the need to parse individual NBT tags on their own, outside of a file. At least for what I use NBTify for, that's the deal I think.\n\nWoah, a passage in \"Fair Play\" reminds me of \"Sunday\" from Cab! That's a cool sonic connection.\n\n\"Native Sons\" kind of reminds me of Matt Garstka's playing! At least I hear where he gets his sound from I think. It reminds me of Kris Myers too. I really like The Bird Brain and \"In the Trees\" from Scambot 2. Kidzapunk!","shortMessageHtmlLink":"Re-Classing for Readers and Writers"}},{"before":"e5f61fc1400e1f8d7ec4ab3969e57e70e7cd8421","after":"1b65eacdf3e4e2b70e697db6f9e6878dfe1237e0","ref":"refs/heads/main","pushedAt":"2024-04-22T18:01:09.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Async Iterator Fallback\n\nLooked more into the browser support for this, and Caniuse seems to be a little behind on it. It says only very new versions of Chrome support it, and Firefox. I thought it's been around longer than that though? Either way, Node supports it too (probably because of the Chrome part, I don't think it supported it before either, so maybe it did just get added to Chrome? I'm confused lol), but Safari still doesn't.\n\nI demoed out the `for await` loop here in all three browsers, and Node, and everything as of now supports it, except for Safari. The metrics for that only means the latest versions of the environments though, so I'm not going to call it a complete dive in. I'm still going to use the polyfill I have. TS doesn't have types for it yet either, so that's another one to look out for. Once TS has types for things, that usually means it's supported in a larger variety of places.\n\nhttps://www.reddit.com/r/webdev/comments/11n4h7y/stream_is_not_async_iterable/\nhttps://jakearchibald.com/2017/async-iterators-and-generators/\nhttps://caniuse.com/mdn-api_readablestream_--asynciterator\n\n```html\n\n\n```","shortMessageHtmlLink":"Async Iterator Fallback"}},{"before":"db831b4403564e4bb448bb98c47072a34afc51fe","after":"e5f61fc1400e1f8d7ec4ab3969e57e70e7cd8421","ref":"refs/heads/main","pushedAt":"2024-03-29T21:39:14.000Z","pushType":"push","commitsCount":44,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Writer Builder Usage\n\nNot completely sure this is how things completely are meant to work, but it's to help with building things simpler. Inspired by help in discussion from @peacefulotter.\n\nhttps://github.com/peacefulotter/minecraft-server\nhttps://wiki.vg/Protocol#Data_types\n\nI may be trying to broaden the use of NBTify too far by exposing these methods as part of the API, I'm not sure how I feel about that yet.\n\nI do think I need something similar for my MCRegionJS project though, since LCE uses a custom non-NBT binary format for most chunk versions.\nhttps://github.com/Offroaders123/MCRegionJS\n\nThis seems to be the same concept that UtterEvergreen's and Jerrin's projects use as well, with the `DataInputManager` and `DataOutputManager` classes (maybe it's just `DataManager`).\nhttps://github.com/zugebot/LegacyEditor\n\nThis is the general concept for it:\n\n```ts\n// the API is weird, I still need to adjust it to look right, since it's still internally-shaped atm.\nNBT.writeDouble(undefined, 5).trimmedEnd();\n```\n\nI also still have to test if building plain buffers works like this. I still have to do that with the SNBT ones too, as those I definitely want to make exposable. Dovetail will use that for the UI, when editing tags from the tree view GUI. I want to add a dialog popup that shows you the editable SNBT just for that plain tag. That will make it really simple to derive the UI from that too, because it's just a simple parse step, rather than a class kind of thing. NBTify's use of primitives makes it kind of interesting to build the UI from it. I think using string indexing for keys and such is probably the way I'll go for it.","shortMessageHtmlLink":"Writer Builder Usage"}},{"before":"008656b41f47f15d2d293bae168a377ff4b1d196","after":"e5f61fc1400e1f8d7ec4ab3969e57e70e7cd8421","ref":"refs/heads/exp-fp-reader-writer","pushedAt":"2024-03-08T04:45:29.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Writer Builder Usage\n\nNot completely sure this is how things completely are meant to work, but it's to help with building things simpler. Inspired by help in discussion from @peacefulotter.\n\nhttps://github.com/peacefulotter/minecraft-server\nhttps://wiki.vg/Protocol#Data_types\n\nI may be trying to broaden the use of NBTify too far by exposing these methods as part of the API, I'm not sure how I feel about that yet.\n\nI do think I need something similar for my MCRegionJS project though, since LCE uses a custom non-NBT binary format for most chunk versions.\nhttps://github.com/Offroaders123/MCRegionJS\n\nThis seems to be the same concept that UtterEvergreen's and Jerrin's projects use as well, with the `DataInputManager` and `DataOutputManager` classes (maybe it's just `DataManager`).\nhttps://github.com/zugebot/LegacyEditor\n\nThis is the general concept for it:\n\n```ts\n// the API is weird, I still need to adjust it to look right, since it's still internally-shaped atm.\nNBT.writeDouble(undefined, 5).trimmedEnd();\n```\n\nI also still have to test if building plain buffers works like this. I still have to do that with the SNBT ones too, as those I definitely want to make exposable. Dovetail will use that for the UI, when editing tags from the tree view GUI. I want to add a dialog popup that shows you the editable SNBT just for that plain tag. That will make it really simple to derive the UI from that too, because it's just a simple parse step, rather than a class kind of thing. NBTify's use of primitives makes it kind of interesting to build the UI from it. I think using string indexing for keys and such is probably the way I'll go for it.","shortMessageHtmlLink":"Writer Builder Usage"}},{"before":"af0a9ea961540531c685188f321ed49cae503b22","after":"008656b41f47f15d2d293bae168a377ff4b1d196","ref":"refs/heads/exp-fp-reader-writer","pushedAt":"2024-03-08T04:17:10.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Write Validation Returns!\n\nMan, I was losing my brain a little bit. Some of the generic usage around the `object` type can get a bit confusing at times. This strengthens the usage of `NBTData`, so it is what is used to consistently package things throughout the API. For the more user-accessible parts of the API, that's going to allow options objects. But for more internal usage ones, I think I may use `NBTData` instead. This may all be up in the air though, we'll see. Not absolutely sure where and how I want to validate things safely, consistently, and without bloating the code a bunch all over the place.","shortMessageHtmlLink":"Write Validation Returns!"}},{"before":"a0b19c5acb2db59d90ebcf2a7733d5210a1c6fe4","after":"af0a9ea961540531c685188f321ed49cae503b22","ref":"refs/heads/exp-fp-reader-writer","pushedAt":"2024-03-08T03:54:13.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"Original Docs + Param Validation (Write needs work)\n\nBringing back some of the missing regular features that didn't get carried over to the rewrite, because I didn't want to cloud my mind with the extra config things that are more for API management than actual program logic.\n\nDiscovered that there was an issue with the BedrockLevel header detection, which didn't account for when a given file is smaller than the BedrockLevel header, which would error out because the reader would try to read from bytes that didn't exist in that short of a buffer. I added a new test file to account for that, which seems to be the smallest possible file that NBT can be. It's an unnamed, empty Compound tag. Only two bytes, extra small!\n\nI still need to properly test, and re-implement the validation for `write()`. It seems to need a better restructure because of the API concept changes. I want to ensure it's right.","shortMessageHtmlLink":"Original Docs + Param Validation (Write needs work)"}},{"before":"21d6fae85053ebf6c5bb6b718b0c7ebd5ae9bef9","after":"a0b19c5acb2db59d90ebcf2a7733d5210a1c6fe4","ref":"refs/heads/exp-fp-reader-writer","pushedAt":"2024-03-08T02:40:29.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"FP-Reader-Writer Merge\n\nMerging everything from `index-new.ts` into the regular source for the whole project. Going to re-add the missing validation features in the next commit, to show the difference between what the rework file was missing, and what it still needs as a library to be secure again.\n\nNormalizer 2 solo, on it's own 🎶 🥁","shortMessageHtmlLink":"FP-Reader-Writer Merge"}},{"before":"38a7bea6bb8b3ea2c45891c895944cbfd8e71f09","after":"21d6fae85053ebf6c5bb6b718b0c7ebd5ae9bef9","ref":"refs/heads/exp-fp-reader-writer","pushedAt":"2024-03-07T23:58:11.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"SNBT Parser: Class Removal!\n\nYaay!!! Been wanting to have this for some time now. Slow but surely chipping away at making my own SNBT parser from scratch. It's the challenging part of flattening the tree of how things are added on top of each other, like in terms of `this` usage, or state manipulation. Now it is cleanly described for each things in terms of being on a functional level. I'm glad the NBT reader and writer backings allow for that as well.\n\nClassless type concept thing, I thought it was interesting that you can have both a type and a function of the same name. I guess that's no different than the `as const`/`type` setup though.\n\n```ts\ninterface NBTData {\n fart: number;\n}\n\nconst data = NBTData();\n\nfunction NBTData({ fart = 5 }: Partial = {}): NBTData {\n return { fart };\n}\n```","shortMessageHtmlLink":"SNBT Parser: Class Removal!"}},{"before":"e5cb47abc8728460cb4ecc649640f296b3345f14","after":"38a7bea6bb8b3ea2c45891c895944cbfd8e71f09","ref":"refs/heads/exp-fp-reader-writer","pushedAt":"2024-03-07T23:41:58.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"SNBT Parser: Index Field Removal (Second Part)\n\nFull stateless SNBT parsing!! :DD\n\nNonagon Infinity is making this possible I think. Realized I can pass the index value around by way of an object wrapper/reference, which can be modified and accessed elsewhere. Heck yeah! Now I can tear apart this class and it's methods, because it doesn't have any inherent state anymore. Now I want to try using that system for the writing process, if possible.\n\nOnto Primus Cheese now. Is It Luck?","shortMessageHtmlLink":"SNBT Parser: Index Field Removal (Second Part)"}},{"before":"0d636534db07122f9644b7aa2884942856012e2c","after":"e5cb47abc8728460cb4ecc649640f296b3345f14","ref":"refs/heads/exp-fp-reader-writer","pushedAt":"2024-03-07T23:01:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"Offroaders123","name":"Brandon Bennett","path":"/Offroaders123","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/65947371?s=80&v=4"},"commit":{"message":"SNBT Parser: I Field Removal\n\nWas looking into this library to see if it might have any other good things to add/look into for my SNBT parser, but it doesn't seem to be quite what I'm looking for. Still a nice find! I think this version is a bit closer to the setup that I want to have, and that one is still in the class setup I'm trying to migrate from.\n\nhttps://www.npmjs.com/package/@bdsx/snbt\nhttps://github.com/bdsx/bdsx\n\nInvisible Face! KG&TLW is a great band, I can't believe how much they've released over the years, it is inspiring for me to keep trying to do that as well.","shortMessageHtmlLink":"SNBT Parser: I Field Removal"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEYfiQjwA","startCursor":null,"endCursor":null}},"title":"Activity · Offroaders123/NBTify"}