# phmilk/reforged-ts architecture

> Architecture diagram of the GitHub repository phmilk/reforged-ts, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/phmilk/reforged-ts
- Repository: https://github.com/phmilk/reforged-ts
- Video tour (about a minute): https://gitdiagram.com/phmilk/reforged-ts/video

## Overview

This workspace supports Warcraft III map authors: write map code in TypeScript using the reforged-ts API and patch-specific typings, then compile it to Lua for the game. The library wraps game natives with handles and systems; separate packages provide static scripting guards, a Lua test harness, generated typings, and game-run probes. The README documents package roles and the main authoring path; source excerpts and the index support only a few internal calls, so other internal links are omitted rather than inferred.

Main entry points: [`packages/reforged-ts/src/handles/unit.ts`](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/unit.ts) (Unit wrapper), [`packages/eslint-plugin-reforged/src/plugin.ts`](https://github.com/phmilk/reforged-ts/blob/master/packages/eslint-plugin-reforged/src/plugin.ts) (ESLint plugin), [`packages/reforged-types/src/generate.ts`](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-types/src/generate.ts) (Typings generator), [`packages/reforged-ts/src/index.ts`](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/index.ts) (TypeScript API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Map runtime"]
  node_ts_api["TypeScript API<br/>[index.ts]"]
  node_unit_wrapper["Unit wrapper<br/>[unit.ts]"]
  node_handle_wrapper["Handle wrapper<br/>[handle.ts]"]
  node_item_wrapper["Item wrapper<br/>[item.ts]"]
  node_player_wrapper["Player wrapper<br/>[player.ts]"]
  node_group_wrapper["Group wrapper<br/>[group.ts]"]
  node_destructable_wrapper["Destructable wrapper<br/>[destructable.ts]"]
  node_sound_wrapper["Sound wrapper<br/>[sound.ts]"]
  node_order_globals["Order globals<br/>[order.ts]"]
  node_init_state["Initialization state<br/>[state.ts]"]
  node_configuration["Configuration<br/>[configuration.ts]"]
end

subgraph group_typing["Patch typings"]
  node_typing_generator["Typings generator<br/>[generate.ts]"]
  node_jass_parser["Jass parser<br/>[parser.ts]"]
  node_patch_overlay["Patch files and Overlay<br/>[overlay.ts]"]
  node_patch_typings["Patch declarations<br/>[3.0.0.d.ts]"]
end

subgraph group_guards["Lint guards"]
  node_eslint_plugin["ESLint plugin<br/>[plugin.ts]"]
  node_native_classifier["Native classifier<br/>[native.ts]"]
  node_package_classifier["Package classifier<br/>[package.ts]"]
  node_wrapper_classifier["Wrapper classifier<br/>[wrapper.ts]"]
  node_legacy_rule["Legacy-name rule"]
end

subgraph group_testing["Test harness"]
  node_test_harness["Lua test harness<br/>[index.ts]"]
  node_lua_runner["Lua runner<br/>[index.ts]"]
end

subgraph group_probe["Game probes"]
  node_probe_reader["Probe result reader<br/>[read.ts]"]
  node_probe_machine["Probe machine<br/>[machine.ts]"]
  node_probe_game_runner["In-game runner<br/>[runner.ts]"]
end

node_map_author(("Map project"))
node_game_natives["Warcraft natives"]
node_lua_compiler["TypeScript-to-Lua"]
node_game(("Warcraft III"))

node_map_author -->|"uses"| node_ts_api
node_map_author -->|"codes against"| node_patch_typings
node_map_author -->|"checks with"| node_eslint_plugin
node_ts_api -->|"compiles through"| node_lua_compiler
node_lua_compiler -->|"produces Lua for"| node_game
node_ts_api -->|"wraps"| node_game_natives
node_unit_wrapper -->|"imports"| node_handle_wrapper
node_unit_wrapper -->|"imports"| node_item_wrapper
node_unit_wrapper -->|"imports"| node_destructable_wrapper
node_unit_wrapper -->|"imports"| node_group_wrapper
node_unit_wrapper -->|"imports"| node_player_wrapper
node_unit_wrapper -->|"imports"| node_sound_wrapper
node_configuration -->|"imports"| node_init_state
node_typing_generator -->|"parses with"| node_jass_parser
node_typing_generator -.->|"uses"| node_patch_overlay
node_typing_generator -.->|"generates"| node_patch_typings
node_eslint_plugin -.->|"classifies"| node_native_classifier
node_eslint_plugin -.->|"classifies"| node_package_classifier
node_eslint_plugin -.->|"classifies"| node_wrapper_classifier
node_eslint_plugin -.->|"registers"| node_legacy_rule
node_test_harness -->|"runs via"| node_lua_runner
node_game -.->|"runs probe"| node_probe_game_runner
node_probe_reader -->|"uses"| node_probe_machine

click node_ts_api "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/index.ts"
click node_unit_wrapper "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/unit.ts"
click node_handle_wrapper "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/handle.ts"
click node_item_wrapper "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/item.ts"
click node_player_wrapper "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/player.ts"
click node_group_wrapper "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/group.ts"
click node_destructable_wrapper "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/destructable.ts"
click node_sound_wrapper "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/sound.ts"
click node_order_globals "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/globals/order.ts"
click node_init_state "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/init/state.ts"
click node_configuration "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/reforged/configuration.ts"
click node_typing_generator "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-types/src/generate.ts"
click node_jass_parser "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-types/src/parser.ts"
click node_patch_overlay "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-types/src/overlay.ts"
click node_patch_typings "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-types/3.0.0.d.ts"
click node_eslint_plugin "https://github.com/phmilk/reforged-ts/blob/master/packages/eslint-plugin-reforged/src/plugin.ts"
click node_native_classifier "https://github.com/phmilk/reforged-ts/blob/master/packages/eslint-plugin-reforged/src/classify/native.ts"
click node_package_classifier "https://github.com/phmilk/reforged-ts/blob/master/packages/eslint-plugin-reforged/src/classify/package.ts"
click node_wrapper_classifier "https://github.com/phmilk/reforged-ts/blob/master/packages/eslint-plugin-reforged/src/classify/wrapper.ts"
click node_legacy_rule "https://github.com/phmilk/reforged-ts/blob/master/packages/eslint-plugin-reforged/src/rules/no-legacy-w3ts-names.ts"
click node_test_harness "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-test/src/index.ts"
click node_lua_runner "https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-test/runner/index.ts"
click node_probe_reader "https://github.com/phmilk/reforged-ts/blob/master/probe/src/read.ts"
click node_probe_machine "https://github.com/phmilk/reforged-ts/blob/master/probe/src/machine.ts"
click node_probe_game_runner "https://github.com/phmilk/reforged-ts/blob/master/probe/game/runner.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_ts_api,node_unit_wrapper,node_handle_wrapper,node_item_wrapper,node_player_wrapper,node_group_wrapper,node_destructable_wrapper,node_sound_wrapper,node_order_globals,node_init_state,node_configuration toneBlue
class node_typing_generator,node_jass_parser,node_patch_overlay,node_patch_typings toneAmber
class node_eslint_plugin,node_native_classifier,node_package_classifier,node_wrapper_classifier,node_legacy_rule toneMint
class node_test_harness,node_lua_runner toneRose
class node_probe_reader,node_probe_machine,node_probe_game_runner,node_map_author,node_game_natives,node_lua_compiler,node_game toneIndigo
```

## Components

### Map runtime

- [TypeScript API](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/index.ts): `packages/reforged-ts/src/index.ts`
- [Unit wrapper](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/unit.ts): `packages/reforged-ts/src/handles/unit.ts`
- [Handle wrapper](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/handle.ts): `packages/reforged-ts/src/handles/handle.ts`
- [Item wrapper](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/item.ts): `packages/reforged-ts/src/handles/item.ts`
- [Player wrapper](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/player.ts): `packages/reforged-ts/src/handles/player.ts`
- [Group wrapper](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/group.ts): `packages/reforged-ts/src/handles/group.ts`
- [Destructable wrapper](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/destructable.ts): `packages/reforged-ts/src/handles/destructable.ts`
- [Sound wrapper](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/handles/sound.ts): `packages/reforged-ts/src/handles/sound.ts`
- [Order globals](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/globals/order.ts): `packages/reforged-ts/src/globals/order.ts`
- [Initialization state](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/init/state.ts): `packages/reforged-ts/src/init/state.ts`
- [Configuration](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-ts/src/reforged/configuration.ts): `packages/reforged-ts/src/reforged/configuration.ts`

### Patch typings

- [Typings generator](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-types/src/generate.ts): `packages/reforged-types/src/generate.ts`
- [Jass parser](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-types/src/parser.ts): `packages/reforged-types/src/parser.ts`
- [Patch files and Overlay](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-types/src/overlay.ts): `packages/reforged-types/src/overlay.ts`
- [Patch declarations](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-types/3.0.0.d.ts): `packages/reforged-types/3.0.0.d.ts`

### Lint guards

- [ESLint plugin](https://github.com/phmilk/reforged-ts/blob/master/packages/eslint-plugin-reforged/src/plugin.ts): `packages/eslint-plugin-reforged/src/plugin.ts`
- [Native classifier](https://github.com/phmilk/reforged-ts/blob/master/packages/eslint-plugin-reforged/src/classify/native.ts): `packages/eslint-plugin-reforged/src/classify/native.ts`
- [Package classifier](https://github.com/phmilk/reforged-ts/blob/master/packages/eslint-plugin-reforged/src/classify/package.ts): `packages/eslint-plugin-reforged/src/classify/package.ts`
- [Wrapper classifier](https://github.com/phmilk/reforged-ts/blob/master/packages/eslint-plugin-reforged/src/classify/wrapper.ts): `packages/eslint-plugin-reforged/src/classify/wrapper.ts`
- [Legacy-name rule](https://github.com/phmilk/reforged-ts/blob/master/packages/eslint-plugin-reforged/src/rules/no-legacy-w3ts-names.ts): `packages/eslint-plugin-reforged/src/rules/no-legacy-w3ts-names.ts`

### Test harness

- [Lua test harness](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-test/src/index.ts): `packages/reforged-test/src/index.ts`
- [Lua runner](https://github.com/phmilk/reforged-ts/blob/master/packages/reforged-test/runner/index.ts): `packages/reforged-test/runner/index.ts`

### Game probes

- [Probe result reader](https://github.com/phmilk/reforged-ts/blob/master/probe/src/read.ts): `probe/src/read.ts`
- [Probe machine](https://github.com/phmilk/reforged-ts/blob/master/probe/src/machine.ts): `probe/src/machine.ts`
- [In-game runner](https://github.com/phmilk/reforged-ts/blob/master/probe/game/runner.ts): `probe/game/runner.ts`

### Other components

- **Map project**
- **Warcraft natives**
- **TypeScript-to-Lua**
- **Warcraft III**

## Connections

- Map project → TypeScript API: uses (evidence: `README.md`)
- Map project → Patch declarations: codes against (evidence: `README.md`)
- Map project → ESLint plugin: checks with (evidence: `README.md`)
- TypeScript API → TypeScript-to-Lua: compiles through (evidence: `README.md`)
- TypeScript-to-Lua → Warcraft III: produces Lua for (evidence: `README.md`)
- TypeScript API → Warcraft natives: wraps (evidence: `README.md`)
- Unit wrapper → Handle wrapper: imports (evidence: `packages/reforged-ts/src/handles/unit.ts`)
- Unit wrapper → Item wrapper: imports (evidence: `packages/reforged-ts/src/handles/unit.ts`)
- Unit wrapper → Destructable wrapper: imports (evidence: `packages/reforged-ts/src/handles/unit.ts`)
- Unit wrapper → Group wrapper: imports (evidence: `packages/reforged-ts/src/handles/unit.ts`)
- Unit wrapper → Player wrapper: imports (evidence: `packages/reforged-ts/src/handles/unit.ts`)
- Unit wrapper → Sound wrapper: imports (evidence: `packages/reforged-ts/src/handles/unit.ts`)
- Configuration → Initialization state: imports (evidence: `packages/reforged-ts/src/reforged/configuration.ts`)
- Typings generator → Jass parser: parses with (evidence: `packages/reforged-types/src/parser.ts`)
- Typings generator → Patch files and Overlay: uses
- Typings generator → Patch declarations: generates
- ESLint plugin → Native classifier: classifies
- ESLint plugin → Package classifier: classifies
- ESLint plugin → Wrapper classifier: classifies
- ESLint plugin → Legacy-name rule: registers
- Lua test harness → Lua runner: runs via (evidence: `packages/reforged-test/src/index.ts`)
- Warcraft III → In-game runner: runs probe
- Probe result reader → Probe machine: uses (evidence: `probe/src/read.ts`)
