An open API service indexing awesome lists of open source software.

https://github.com/r-unic/flamework-meta-utility

Metadata utility for Flamework
https://github.com/r-unic/flamework-meta-utility

Last synced: 4 months ago
JSON representation

Metadata utility for Flamework

Awesome Lists containing this project

README

          

# @rbxts/flamework-meta-utils

Metadata utility and utility macros for Flamework

## Macros

### enumKey< E, V> ()

Retrieves the key associated with a const (or non-const) enum value

```ts
const enum Abc {
A,
B,
C
}

const a = enumKey();
```

Compiles to

```lua
local a = "A";
```

### deunify< T> ()

Deunifies a union type `T` into an array of all constituents

```ts
const constituents = deunify<"a" | "b" | "c">();
```

Compiles to

```lua
local constituents = deunify({"a", "b", "c"}); -- which returns the passed param
```

### repeatString< S, N> ()

Repeats the string `S` `N` times.

```ts
const line = repeatString<"-", 30>();
```

Compiles to

```lua
local line = "------------------------------";
```

### getChildrenOfType< T> ()

Generates a type guard (if one is not specified) and returns all children of the given instance that pass the guard.

```ts
interface CharacterModel extends Model {
Humanoid: Humanoid;
HumanoidRootPart: Part;
}

const characters = getChildrenOfType(Workspace.Characters);
```

### getDescendantsOfType< T> ()

Generates a type guard (if one is not specified) and returns all descendants of the given instance that pass the guard.

```ts
const assetsToPreload = getDescendantsOfType(ReplicatedStorage);
```

### getInstanceAtPath()

Resolves the instance at the given path using Rojo

```ts
const module = getInstanceAtPath("src/client/controllers/mouse.ts");
```

### safeCast< T> ()

Generates a type guard (if one is not specified) and if the guard passes, returns the casted value. Otherwise returns undefined.

```ts
const value = safeCast(someUnknownValue);
if (value !== undefined)
print("doubled value:", value * 2);
```

```ts
interface CharacterModel extends Model {
Humanoid: Humanoid;
HumanoidRootPart: Part;
}

const character = safeCast(Players.LocalPlayer.Character);
if (character !== undefined)
print("character root:", character.HumanoidRootPart);
```

## Methods

These next three methods are generally used in combination with decorators.

### resolveDependencies()

Takes a constructor and resolves it and all of it's dependencies

### processDependencies()

Calls the provided method for each dependency resolved from the provided constructor

### callMethodOnDependencies()

Calls the method from the provided method descriptor for each dependency resolved from the provided constructor