{"id":"kineticwallet/documentservice","name":"documentservice","scope":"kineticwallet","platform":"roblox","description":"DataStores with full type checking, hooks, +more","version":"1.2.0","latest":"1.2.0","versions":["1.2.0-signal-dependency","1.2.0-signal-fix","1.2.0"],"license":"MIT","licenseRating":"safe","licenseCaveats":[],"licenseVerified":true,"dependencies":{"sleitnick/signal":{"version":"^2.0.1","alias":"Signal"}},"integrity":"8c28edea5992d0eb6789b1a32f45ecca52a8843dbe803f15939697caa82e9f38","likes":0,"downloads":0,"install":"forest install kineticwallet/documentservice","url":"https://forest.dev/p/roblox/kineticwallet/documentservice","files":"https://api.forest.dev/ai/package/roblox/kineticwallet/documentservice/files","readme":"# DocumentService - A powerful, schematised Roblox datastore library\n\nDocumentService is a fully strictly typed Luau library for saving data with Roblox DataStores.\nIt can be used for sesssion-locked data, such as player data, or for non-session-locked data, like\nshared groups or houses.\n\nSee the [docs](https://anthony0br.github.io/DocumentService/docs/intro) for more information.\n\nThis is a new release and, although it has been thoroughly unit tested, it hasn't yet been used \nin a live production game - as with any open source software, use it at your own risk! I am\nworking on adding it to my game, so this will not be a concern for too long.\n\n## Features\n- Fully strictly typed. This means you get full intellisense and typechecking on your data,\nand on every API method, including possible errors for each method.\n- Superior Rust-inspired error handling (Result types).\n- Immutable cache and autosaves - preventing bugs caused by updates interfering with eachother.\n- Migrations, inspired by nezuo's Lapis.\n- Validate your data with support for runtime and static typechecking.\n- Documents can be session-locked, or not (to allow multi-server editing).\n- Run hooks before and after operations, e.g. logging.\n- Automatic retries with exponential backoff.\n- Migrate from no library, or another library if you're brave.\n- Checks your data can be stored in JSON to avoid silent errors.\n- Simple API: session-locking a document simply extends the API.\n- Use any Mock DataStore you like.\n\n## Installation\n\n### Method 1: Wally\nAdd `DocumentService = \"anthony0br/documentservice@LATEST_VERSION\"` to your `wally.toml`.\n\n### Method 2: Manual\nDocumentService has no dependencies so you can just copy and paste the contents of\n`target/roblox` into your project.\n\n## Long-term goals\n- ACID transactions involving multiple Documents. Please get in touch if you can help with this!\n- See the [issues](https://github.com/anthony0br/DocumentService/issues) page to discuss ways to make DocumentService better!\n\n## Inspiration\nThis library takes inspiration from Lapis, ProfileService, keyForm, and kampfkarren's blog.\nThese are all great projects but didn't meet my needs in some way.\n\n## Contributing\nContributions are accepted. Your contributions must run in Lune directly from src and, when compiled by darklua to target/roblox, in Roblox. You should use moonwave to update/generate documentation.\n\nTo build for Roblox:\n1. Install necessary tools (see aftman.toml).\n2. Run `rojo sourcemap source.project.json -o sourcemap.json`. It is necessary to generate a sourcemap of the src folder so darklua can convert our requires.\n3. Run `darklua process src target/roblox`.\n\n## Contact\nThe best way to get in touch is to ping me in the thread in the Roblox OSS discord, or create an issue.\n","readmeTruncated":false}