{"id":"pocketpremium/mixin","name":"mixin","scope":"pocketpremium","platform":"roblox","description":"A deep copying mixin utility for Luau with full type support.","version":"1.0.0","latest":"1.0.0","versions":["1.0.0"],"license":"MIT","licenseRating":"safe","licenseCaveats":[],"licenseVerified":true,"dependencies":{},"integrity":"dd919b1a24665cad19fcd2aca4a3ede044b51077b7934471763d4bf651b7daae","likes":0,"downloads":0,"install":"forest install pocketpremium/mixin","url":"https://forest.dev/p/roblox/pocketpremium/mixin","files":"https://api.forest.dev/ai/package/roblox/pocketpremium/mixin/files","readme":"# Mixin\r\n\r\nA deep copying mixin utility for Luau with full type support and zero dependencies.\r\n\r\n## Why?\r\nMerge tables without writing `for` loops manually, with safe deep cloning and full autocomplete support out of the box.\r\n\r\n## Quick Start\r\n```lua\r\nlocal Mixin = require(ReplicatedStorage.Packages.Mixin)\r\n\r\nlocal A = { HP = 100, Speed = 10 }\r\nlocal B = { HP = 50, Damage = 5 }\r\n\r\nlocal C = Mixin(A, B)\r\n\r\nC.HP -= 50\r\n\r\nprint(A.HP) -- 100, untouched because C is a deep copy, not a reference to A\r\nprint(C.HP) -- 0, because B overwrote A's HP\r\n```\r\n\r\n## Extra\r\nExample of how Mixin can be used in OOP to replace inheritance with composition\r\n\r\n```lua\r\nlocal Mixin = require(ReplicatedStorage.Packages.Mixin)\r\n\r\nlocal Animal = require(\"./Animal\")\r\n\r\nexport type Type = Animal.Type & {\r\n    Bark: (self: Type) -> (),\r\n    IsAngry: boolean\r\n}\r\n\r\nlocal Dog = {} :: Type\r\nDog.IsAngry = false --Default properties here, mixin will copy them\r\nDog.IsHungry = true --Derived from Animal, overriding \r\n\r\nlocal Constructor = {}\r\n\r\nfunction Constructor.new(): Type\r\n    return Mixin(\r\n        Animal.new(),\r\n        Dog\r\n    ) --No metatables used, copying everything from Animal and Dog\r\nend\r\n\r\nfunction Dog:Bark()\r\n    print(\"Woof!\")\r\nend\r\n\r\nreturn table.freeze(Constructor)\r\n```\r\n\r\n## Installation\r\nAdd to your wally.toml:\r\n```\r\n[dependencies]\r\nMixin = \"pocketpremium/mixin@1.0.0\"\r\n```","readmeTruncated":false}