{"_id":"com.xmobitea.changx.mini-singleton","_rev":"28-1e38c10be0c040c9b0267029a03b0ac8","name":"com.xmobitea.changx.mini-singleton","dist-tags":{"latest":"1.5.2"},"versions":{"1.3.6":{"name":"com.xmobitea.changx.mini-singleton","version":"1.3.6","keywords":["chang x","changx","xmobitea"],"author":{"url":"https://xmobitea.com","name":"Chang X","email":"changx.develop@gmail.com"},"license":"ISC","_id":"com.xmobitea.changx.mini-singleton@1.3.6","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"dist":{"shasum":"9936a76ee0b9a6e82080444465d20c359aaf89c9","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-singleton/-/com.xmobitea.changx.mini-singleton-1.3.6.tgz","fileCount":13,"integrity":"sha512-CUd9zopCp9c9UJllTIWEQHfCwz2QspWQMzFgofs6RN3IIzsKCdRV58117qWkLy8j0b/vcyVTPUT5zJpKpZmmLw==","signatures":[{"sig":"MEYCIQDlJZFCYH/cVDeQcgZa8bkyb3DpoT0jcxRTh2rd1D/hNAIhAMBdIUy890CovaUHZ+HIFYmbrjz0oz2UZW2T+aclCvro","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3706,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJim35tACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpsPw//awjY1ul5qz79FhzMKDPr8Co5Z00YGvuB2vYhZmOcuqkzZfCa\r\nzig3LcA7fqK6eueNOsgS1U3Wuu28sTyWME/62Y20ej02YV/Cz1ZiWEHauqOn\r\n04qPBmpbcgFei44MRWIolu7EUsH6zUN2iTfA0MJkzXdcqeh6c7Mv0ZmWymsv\r\nbGrSWafsDXW+SKu+gvKA7T0+ymUZVHNJnWj4nqU2NE9MDq3H5RAJvt19W0Dl\r\nykFXPxPomhVZuXAQyK0WlwFqEAFvFyPEjhaD6bJrlCCXSyXlOyYGcfJyCkZI\r\nH0sw8L6uCWfqyKZ0s6m2/03J+Fz8kR9Ogjht2zJGHsdw5oEisZpU+fFhVc/f\r\nGtapzWHYdSANOXPgezhZQzJo4lNST7Wm/SrQU0fEwnmXz6GZGUChlsYmhMsV\r\n40FNYB0vqYQ9MjdTADQgYOBbIO5WPV3Pp4yzPtYuTtqWDLkPJxeof0kGcNDD\r\np6NiHo4TGU6Xi2apALpnwMnCfQsfpKlveYtmQVEFJSE1XdZ6JEQ0zsGnhZUG\r\nWGoF9KMCNwxovsgqjdV3M2+sO94KAXe1eXEUuY1VsOpGMRCsfjhyvbkd3Z8E\r\n+EAGdVKDJYbG0TG6QpqLL1oLb25nMr4kth7k3+56Q9u3ixNA2ShM3QLcvBGy\r\nR8yyfrxa2CEG28FaRxIDQXugBQO83TJ8ya4=\r\n=nLEQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","unity":"2020.3","gitHead":"dde3c2bbc82850bc5e5519fcb5de9a8414619166","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"_npmVersion":"8.5.5","description":"XmobiTea Unity package","directories":{},"displayName":"XmobiTea Singleton","_nodeVersion":"16.15.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/com.xmobitea.changx.mini-singleton_1.3.6_1654357613388_0.6031928598057497","host":"s3://npm-registry-packages"}},"1.3.8":{"name":"com.xmobitea.changx.mini-singleton","version":"1.3.8","keywords":["chang x","changx","xmobitea"],"author":{"url":"https://xmobitea.com","name":"Chang X","email":"changx.develop@gmail.com"},"license":"ISC","_id":"com.xmobitea.changx.mini-singleton@1.3.8","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"dist":{"shasum":"f790e85c6e66219a7cdc112ecb09913635c3fa54","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-singleton/-/com.xmobitea.changx.mini-singleton-1.3.8.tgz","fileCount":13,"integrity":"sha512-xXyeHLxmlN4jgVToFTFIiBkUMeae9vpTAGXT3WnDzbSEgBbjVm0rbO3TUYZN93AkIhvmAUMywSkT6F/UWSSctg==","signatures":[{"sig":"MEQCIF9Mb6eKnMWymgf56XD5MiJ3fDPnw7A0L7rybwm7DCGJAiAWz2O/34KgAaImDYrnNK3C7SwO4qzU8r78PprBD1JVhQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":3799,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJincosACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqiDw//c3hdKAWt3OkbaIy4rFE1OG1brNIdeTfPcZlmH1tmhtLgps6J\r\nGeGQgCWVJSRp4qUftmxdt0MG70EsK6pNOEuabHUObm+MGdmn1kSRAIujQmcf\r\nWumf4K1bOR0YNPZokE11UDOyOM0wAaJVABaDvxCPCOofrWa88uamxL/IRHUD\r\nEl5xj6+vnb2GDaVmvik3BKsuYHZw5Zkag7VczOONNMcYtZjvBP3FKxH6Ln1g\r\n84r9ePNDoH2TgJJVHHy0mkCQhv+Qqu5GkvX0trHDckrgHE15JmehUAa+ZQan\r\ntx6u5Rsr9GLI4+sLQAYyAiSFE1tpTawDQUUteM2nJjQ7yWKd6t2CQ4RRmtTi\r\nEOGp93BHKnCIa5E/8QkXl0ZTzBOp25v/Qm8ylssuoC/4MzR9wZ5U0H46D+5v\r\nBuoX7sUntEoCK/WEG5EiosBtJB8nJ4Ip5vuLUaqyPrOjmzdbAdNLAaVFdn8o\r\nwus7DoZHPIHS6141Uy+O4nWkzeOf4QLkR+RwnZuRHaJjkVq7pNez/XaUuIT4\r\nU/SbkNlcPExFleaV4VtvJ52nvmjUiThps58EuhevvFmlZtGZqQED1druZOWI\r\nzOb8QwvFNUJxtFv/EDiS0f86ifqRQOrlfuf7zNFv0HYIZ2BLuPbPn0izjgnX\r\ndirBP5PJsqsXEem2fGfguYuh8xK20dSN0Do=\r\n=WZqt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","unity":"2020.3","gitHead":"ecde3b303102d5cb1bd036353f7ed1fc8c8c6f3d","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"_npmVersion":"8.1.0","description":"XmobiTea Unity package","directories":{},"displayName":"XmobiTea Singleton","_nodeVersion":"16.13.0","dependencies":{},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/com.xmobitea.changx.mini-singleton_1.3.8_1654508076153_0.18140372148225548","host":"s3://npm-registry-packages"}},"1.4.0":{"name":"com.xmobitea.changx.mini-singleton","version":"1.4.0","keywords":["chang x","changx","xmobitea"],"author":{"url":"https://xmobitea.com","name":"Chang X","email":"changx.develop@gmail.com"},"license":"Apache-2.0","_id":"com.xmobitea.changx.mini-singleton@1.4.0","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"dist":{"shasum":"5bc14a355b27b8d71c48765334de5ebfedabcb2b","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-singleton/-/com.xmobitea.changx.mini-singleton-1.4.0.tgz","fileCount":15,"integrity":"sha512-4GJNdDJRvwUl0NV96wCoZsOcVhtMTlNp3mGoJqVfZaXC1nmc9ia1n+Wfo2PXurWrUlnf113Ng9LqxJcMK0WJiQ==","signatures":[{"sig":"MEUCIAlmQUBGsK2tTRO3CddrbFYyNLay4LvgsZxVgC1E3J7YAiEA0f4zIHIrOjkIk02mwb9rTkTuiQ0f3b6N+2Z2MB3fcog=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15794},"unity":"2020.3","gitHead":"a1df5f68b52782919c752e83a9ec3f96d3102810","_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"_npmVersion":"10.8.2","description":"XmobiTea Unity Toolkit packages","directories":{},"displayName":"XmobiTea Singleton","_nodeVersion":"20.17.0","dependencies":{"com.xmobitea.changx.app":"1.4.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/com.xmobitea.changx.mini-singleton_1.4.0_1772119664823_0.3574933675930074","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"com.xmobitea.changx.mini-singleton","version":"1.5.0","keywords":["chang x","changx","xmobitea"],"author":{"url":"https://xmobitea.com","name":"Chang X","email":"changx.develop@gmail.com"},"license":"Apache-2.0","_id":"com.xmobitea.changx.mini-singleton@1.5.0","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"dist":{"shasum":"65083c311602bcbe9cef5e87bda65e6caeb3ae9a","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-singleton/-/com.xmobitea.changx.mini-singleton-1.5.0.tgz","fileCount":19,"integrity":"sha512-rRlVQ5L5m4uZNKFfHgviCxdr2PMS4Toxb6fwKhjG1+LX/y+Y+93+oMiityzQxCHg8AgyOzePf+l75D9CzBZviw==","signatures":[{"sig":"MEUCIE1R2zPNEKLCxXIQ1VY738QzZ0vbsxfktpnByN4RYy3XAiEAjuDQm+VvY8RnYzgUuCE4LNNLVj/T5tTHL+JLN5azQhc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29807},"unity":"2022.3","gitHead":"8a69be78344a9d715d5aae334a681f1bf75ce2ea","_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"_npmVersion":"10.8.2","description":"XmobiTea Unity Toolkit packages","directories":{},"displayName":"XmobiTea Singleton","_nodeVersion":"20.17.0","dependencies":{"com.xmobitea.changx.app":"1.5.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/com.xmobitea.changx.mini-singleton_1.5.0_1778689621167_0.635043473656","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"com.xmobitea.changx.mini-singleton","version":"1.5.1","keywords":["chang x","changx","xmobitea"],"author":{"url":"https://xmobitea.com","name":"Chang X","email":"changx.develop@gmail.com"},"license":"Apache-2.0","_id":"com.xmobitea.changx.mini-singleton@1.5.1","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"dist":{"shasum":"42d563fabd890c5a3de271d5bf6e0fb8490e3574","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-singleton/-/com.xmobitea.changx.mini-singleton-1.5.1.tgz","fileCount":25,"integrity":"sha512-hF/RXaMUw1bOjsIHpVQckK45Yi1pXlnOjpbhhjLeRs4jd3hz1mVrqnnWBChu+qa5aftpGR69qaUOVIo3tNaFxg==","signatures":[{"sig":"MEYCIQDeupPSuMUd/f/fztCGt4WLZTn/NDSH6IlOgCxITpxUQQIhAPPY33tCgmayIbWdrIBBlm71JZja9J95Mxv0g7NXGUDO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37852},"unity":"2022.3","gitHead":"1b2c94d1025b98af0e93011d9ab7da6239fe627a","_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"_npmVersion":"10.8.2","description":"Scene-bound singleton base and optional persistence helper for Unity MonoBehaviour managers.","directories":{},"displayName":"XmobiTea Singleton","_nodeVersion":"20.17.0","dependencies":{"com.xmobitea.changx.app":"1.5.1"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/com.xmobitea.changx.mini-singleton_1.5.1_1780225379660_0.29959855226059773","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"com.xmobitea.changx.mini-singleton","version":"1.5.2","displayName":"XmobiTea Singleton","description":"Scene-bound singleton base and optional persistence helper for Unity MonoBehaviour managers.","unity":"2022.3","dependencies":{"com.xmobitea.changx.app":"1.5.2"},"keywords":["chang x","changx","xmobitea"],"author":{"name":"Chang X","email":"changx.develop@gmail.com","url":"https://xmobitea.com"},"license":"Apache-2.0","_id":"com.xmobitea.changx.mini-singleton@1.5.2","gitHead":"9d8761389a09fd51814c64a911448e7715c1dc76","_nodeVersion":"20.17.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-WC/03c2gu4TOJb2qsu4VudEqCylU+sB5jqUABPSX9YodiULM8WGvpDbkJ3mgRszYwKkeGyfJP2D/Qj3W0SP63Q==","shasum":"38b37ef886c95c7366a404347de94bd9cf00b151","tarball":"https://registry.npmjs.org/com.xmobitea.changx.mini-singleton/-/com.xmobitea.changx.mini-singleton-1.5.2.tgz","fileCount":25,"unpackedSize":40316,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCID2NioTuyDrwk53TG7Cc33pZEIeafWqEtrjd3SmefFwpAiAlhUJ+lDsRuZ/QIqSAZpY84QeKE/364JGKHejJTF39Ow=="}]},"_npmUser":{"name":"changx","email":"changx.develop@gmail.com"},"directories":{},"maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/com.xmobitea.changx.mini-singleton_1.5.2_1780326584679_0.5573328324855207"},"_hasShrinkwrap":false}},"time":{"created":"2021-04-07T19:22:16.782Z","modified":"2026-06-01T15:09:44.939Z","1.0.0":"2021-04-07T19:22:17.045Z","1.0.2":"2021-04-08T11:50:52.130Z","1.0.3":"2021-04-23T09:05:09.219Z","1.1.0":"2021-04-23T11:22:15.350Z","1.2.0":"2021-08-07T12:25:07.541Z","1.2.1":"2021-08-07T12:32:54.150Z","1.3.0":"2022-06-04T12:46:48.683Z","1.3.1":"2022-06-04T14:14:07.864Z","1.3.6":"2022-06-04T15:46:53.589Z","1.3.8":"2022-06-06T09:34:36.303Z","1.4.0":"2026-02-26T15:27:44.970Z","1.5.0":"2026-05-13T16:27:01.383Z","1.5.1":"2026-05-31T11:02:59.793Z","1.5.2":"2026-06-01T15:09:44.826Z"},"author":{"name":"Chang X","email":"changx.develop@gmail.com","url":"https://xmobitea.com"},"license":"Apache-2.0","keywords":["chang x","changx","xmobitea"],"description":"Scene-bound singleton base and optional persistence helper for Unity MonoBehaviour managers.","maintainers":[{"name":"changx","email":"changx.develop@gmail.com"}],"readme":"# XmobiTea Singleton\r\n\r\nScene-authored singleton utilities for Unity `MonoBehaviour` managers.\r\n\r\nThis package gives you:\r\n\r\n- `Singleton<T>` for one cached scene instance per manager type\r\n- `DontDestroy` for optional cross-scene persistence on the same host `GameObject`\r\n- `OnInit()` for one-time setup on the surviving instance\r\n\r\nIt does not auto-create missing objects, and `instance` can return `null`.\r\n\r\n## AI Entry Points\r\n\r\nOpen the smallest file for the task:\r\n\r\n| Need | Use |\r\n| --- | --- |\r\n| Generate common runtime code | `AI_USAGE.md` |\r\n| Scene setup and lifecycle requirements | `AI_SETUP.md` |\r\n| Exact signatures and package metadata | `AI_API_REFERENCE.md` |\r\n| Lookup, cache, duplicate, and persistence timing | `AI_BEHAVIOR.md` |\r\n| Agent guardrails and maintenance checklist | `AGENTS.md` |\r\n| Missing or conflicting docs | `Runtime/Singleton.cs`, `Runtime/DontDestroy.cs` |\r\n\r\n## Runtime Contract\n\n- `Singleton<T>` only works with components that already exist on loaded scene `GameObject`s.\n- `instance` returns the cached instance when available.\n- If the cache is empty, `instance` uses the default `FindObjectOfType<T>()` lookup, which does not include inactive `GameObject`s.\n- If no matching component is found, `instance` returns `null`.\n- `isExists` only checks whether the private static cache currently evaluates as assigned.\n- Duplicate singleton hosts destroy their own `GameObject` in `Awake()`.\n- `DontDestroy` calls `GameObject.DontDestroyOnLoad(gameObject)` in `Start()`.\n\r\n## Setup\r\n\r\n1. Create a component that derives from `Singleton<T>`.\r\n2. Attach it to an active `GameObject` in a loaded scene.\r\n3. Access `instance` only after the host is expected to exist.\r\n4. Add `DontDestroy` only when the same host must survive scene loads.\r\n5. Avoid multiple active hosts of the same singleton type across loaded scenes.\r\n\r\nSee `AI_SETUP.md` for detailed setup and lifecycle notes.\r\n\r\n## Usage\r\n\r\n```csharp\r\nusing UnityEngine;\r\nusing XmobiTea.MiniSingleton;\r\n\r\npublic sealed class GameManager : Singleton<GameManager>\r\n{\r\n    protected override void OnInit()\r\n    {\r\n        Application.targetFrameRate = 60;\r\n    }\r\n\r\n    public void RestartLevel()\r\n    {\r\n        Debug.Log(\"Restart level\");\r\n    }\r\n}\r\n```\r\n\r\nSafe access when scene setup is uncertain:\r\n\r\n```csharp\r\nvar manager = GameManager.instance;\r\nif (manager == null)\r\n{\r\n    Debug.LogError(\"Missing GameManager in loaded scene.\");\r\n    return;\r\n}\r\n\r\nmanager.RestartLevel();\r\n```\r\n\r\nCache-only check when you explicitly do not want a scene lookup:\r\n\r\n```csharp\r\nif (GameManager.isExists)\r\n{\r\n    GameManager.instance.RestartLevel();\r\n}\r\n```\r\n\r\n## Lifecycle Notes\r\n\r\n- The surviving instance runs `OnInit()` once per component instance.\n- `instance` may initialize a found object before that object's own `Awake()` runs if another component accesses it earlier.\n- `OnInit()` is the right place for setup that other code may need before `Start()`.\n- Avoid putting required singleton setup in a derived `Awake()` method; the package-owned `Awake()` handles cache assignment, duplicate destruction, and the `OnInit()` call.\n- `DontDestroy` does not enforce uniqueness; it only makes the host persistent after `Start()`.\n\r\n## Do And Do Not\r\n\r\n- Do null-check `instance` when scene setup is not guaranteed.\n- Do use `OnInit()` for one-time singleton setup.\n- Do keep unrelated critical components off possible duplicate hosts.\n- Do not assume `isExists` means a matching object exists somewhere in the scene.\n- Do not assume this package creates missing managers.\n- Do not use a derived `Awake()` method for setup that must run after singleton cache assignment.\n- Do not add `DontDestroy` when the manager should remain scene-local.\n\r\n## Common Mistakes\r\n\r\n- Using `isExists` as a scene existence check.\r\n- Accessing `instance` from code that can run before the host scene object exists.\n- Placing two active hosts of the same singleton type in concurrently loaded scenes.\n- Expecting an inactive host to be found by `instance` before Unity activates it and runs `Awake()`.\n- Expecting `DontDestroy` to apply before `Start()`.\n\r\n## Runtime Files\r\n\r\n```text\r\nRuntime/Singleton.cs\r\nRuntime/DontDestroy.cs\r\n```\r\n\r\n## Package Metadata\r\n\r\n- Package: `com.xmobitea.changx.mini-singleton`\r\n- Runtime assembly: `com.xmobitea.changx.mini-singleton.runtime`\r\n- Namespace: `XmobiTea.MiniSingleton`\n- Minimum Unity version declared: `2022.3`\n- Declared dependency: `com.xmobitea.changx.app` `1.5.2`\n- License: `Apache-2.0`\n","readmeFilename":"README.md"}