refactor: improve structure and alien-signals integration

This commit is contained in:
littensy 2025-07-02 09:25:50 -07:00
parent a9c60c701f
commit 95476e93ec
107 changed files with 3660 additions and 815 deletions

View file

@ -0,0 +1,6 @@
local Charm = require(script.Parent.Parent.charm.src)
export type Atom<T = any> = Charm.Atom<T>
export type Selector<T = any> = Charm.Selector<T>
return Charm

View file

@ -0,0 +1,12 @@
type CoreReactBinding<T> = {
getValue: (self: CoreReactBinding<T>) -> T,
_source: string?,
}
type ReactBindingMap = {
map: <T, U>(self: CoreReactBinding<T> & ReactBindingMap, (T) -> U) -> ReactBindingMap & CoreReactBinding<U>,
}
export type Binding<T> = CoreReactBinding<T> & ReactBindingMap
return require(script.Parent.Parent.Parent:WaitForChild("@rbxts-js").React)

View file

@ -0,0 +1 @@
return require(script.Parent.Parent.Parent:WaitForChild("@rbxts-js").ReactRoblox)

View file

@ -1,5 +1,5 @@
{
"name": "ReactCharm",
"name": "react-charm",
"tree": {
"$path": "src"
}

View file

@ -0,0 +1,30 @@
{
"name": "@rbxts/react-charm",
"version": "0.3.0",
"description": "React bindings for Charm state management",
"license": "MIT",
"main": "src/init.luau",
"types": "src/index.d.ts",
"files": [
"src",
"*.luau",
"!wally.toml",
"!wally.lock",
"!default.project.json",
"!**/__tests__"
],
"repository": {
"type": "git",
"url": "git+https://github.com/littensy/charm.git"
},
"scripts": {
"prepare": "cp ../../LICENSE.md . && cp ../../README.md .",
"publish:wally": "wally publish"
},
"dependencies": {
"@rbxts/charm": "workspace:*"
},
"peerDependencies": {
"@rbxts/react": "*"
}
}

View file

@ -1,9 +1,7 @@
local ReplicatedStorage = game:GetService("ReplicatedStorage")
_G.__ROACT_17_MOCK_SCHEDULER__ = true
local React = require(ReplicatedStorage.Packages.React)
local ReactRoblox = require(ReplicatedStorage.Packages.ReactRoblox)
local React = require("../../../React")
local ReactRoblox = require("../../../ReactRoblox")
type RenderedHook<Props, Result> = {
result: Result,

View file

@ -1,8 +1,9 @@
local ServerScriptService = game:GetService("ServerScriptService")
local suite = require(ServerScriptService.Tests.suite)
local suite = require("../../../../test/suite")
suite.describe("react-charm", function()
if not game then
return suite.skip()
end
suite.describe("useAtom", function()
require("./useAtom.spec")
end)

View file

@ -1,10 +1,7 @@
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerScriptService = game:GetService("ServerScriptService")
local Charm = require(ReplicatedStorage.Packages.Charm)
local ReactCharm = require(ReplicatedStorage.Packages.ReactCharm)
local renderHook = require(script.Parent.helpers.renderHook)
local suite = require(ServerScriptService.Tests.suite)
local Charm = require("../../Charm")
local ReactCharm = require("../")
local renderHook = require("./helpers/renderHook")
local suite = require("../../../../test/suite")
local atom = Charm.atom
local useAtom = ReactCharm.useAtom

View file

@ -1,10 +1,7 @@
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerScriptService = game:GetService("ServerScriptService")
local Charm = require(ReplicatedStorage.Packages.Charm)
local ReactCharm = require(ReplicatedStorage.Packages.ReactCharm)
local renderHook = require(script.Parent.helpers.renderHook)
local suite = require(ServerScriptService.Tests.suite)
local Charm = require("../../Charm")
local ReactCharm = require("../")
local renderHook = require("./helpers/renderHook")
local suite = require("../../../../test/suite")
local atom = Charm.atom
local useAtomBinding = ReactCharm.useAtomBinding

1
packages/react-charm/src/index.d.ts vendored Normal file
View file

@ -0,0 +1 @@
export {};

View file

@ -1,5 +1,5 @@
local Charm = require(script.Parent.Charm)
local React = require(script.Parent.React)
local Charm = require("./Charm")
local React = require("./React")
local effect = Charm.effect
local useBinding = React.useBinding

View file

@ -3,7 +3,14 @@ name = "littensy/react-charm"
version = "0.3.0"
registry = "https://github.com/UpliftGames/wally-index"
realm = "shared"
exclude = ["tests"]
exclude = [
"node_modules",
"src/__tests__",
"src/index.d.ts",
"package.json",
"React.luau",
"Charm.luau",
]
[dependencies]
Charm = "littensy/charm@^0.10"