@rbxts/schema
TypeScript icon, indicating that this package has built-in type declarations

0.0.1 • Public • Published

schema

A powerful tree reconciler.

usage

import { reconcileSchema } from "@rbxts/schema";

const Workspace = game.GetService("Workspace");

reconcileSchema(
	{
		// The ClassName we expect to match (doesn't use IsA)
		$className: "Folder",

		// A check to perform on this instance to determine validity
		$check: (f) => f.Name === "myFolder",

		// A callback to be called when all candidate instances are deemed invalid,
		// destroyed (but children preserved), and a new instance is instantiated.
		// The argument passed to this callback is the newly instantiated instance
		$instantiate: (f) => {
			f.Name = "myFolder";
			f.Parent = Workspace;
		},

		// A table with the valid children of this object indexed by their name
		$children: {
			isAwesome: "BoolValue", // shorthand for { $className: "BoolValue" }

			color: {
				$className: "Color3Value",

				// If we need to create a new Color3Value for this schema, set Value to white
				// If we don't need to create a new Color3Value, this won't be called
				$instantiate: (c3) => {
					c3.Value = Color3.fromRGB(255, 255, 255);
				},
			},
		},
	},
	// If `reconcileSchema` is passed `undefined` here, it will instantiate the entire tree
	// Otherwise, it will try to reconcile the above definition with the instance passed in.
	Workspace.FindFirstChild("myFolder"),
);

reconcileSchema reconciles an InstanceSchema against an Instance, while trying to preserve child instances where possible (to save instance properties). Instances are validated by their ClassName property and the optional $check callback. Child instances are made into candidates for the aforementioned check by their Name being a key in the $children table. If multiple candidates exist, this will take the first one that matches (otherwise instantiate a new object) and re-parent the children of the other candidates before continuing to the next reconcile.

Dependents (0)

Package Sidebar

Install

npm i @rbxts/schema

Weekly Downloads

1

Version

0.0.1

License

ISC

Unpacked Size

10.2 kB

Total Files

4

Last publish

Collaborators

  • validark