local U=require("\046\047\083\121\109\098\111\108\046\114\111\098\108\111\120\046\108\117\097\117")local S=newproxy(true)local Z={}local function q(S)Z[S]=U.named("\082\111\097\099\116"..S)end q("\072\111\115\116\067\104\097\110\103\101\069\118\101\110\116")q("\072\111\115\116\069\118\101\110\116")function Z.of(U)if typeof(U)~="\116\097\098\108\101"then return nil end return U[S]end;(getmetatable(S)).__index=Z;(getmetatable(S)).__tostring=function()return"\082\111\097\099\116\084\121\112\101"end return S
--[[
	* Copyright (c) Roblox Corporation. All rights reserved.
	* Licensed under the MIT License (the "License");
	* you may not use this file except in compliance with the License.
	* You may obtain a copy of the License at
	*
	*     https://opensource.org/licenses/MIT
	*
	* Unless required by applicable law or agreed to in writing, software
	* distributed under the License is distributed on an "AS IS" BASIS,
	* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	* See the License for the specific language governing permissions and
	* limitations under the License.
]]
--[[
	Contains markers for annotating objects with types.

	To set the type of an object, use `Type` as a key and the actual marker as
	the value:

		local foo = {
			[Type] = Type.Foo,
		}
]]

local Symbol = require("./Symbol.roblox.luau")

local Type = newproxy(true)

local TypeInternal = {}

local function addType(name)
	TypeInternal[name] = Symbol.named("Roact" .. name)
end

addType("HostChangeEvent")
addType("HostEvent")

function TypeInternal.of(value)
	if typeof(value) ~= "table" then
		return nil
	end

	return value[Type]
end

getmetatable(Type).__index = TypeInternal

getmetatable(Type).__tostring = function()
	return "RoactType"
end

return Type
