# moonrailgun/chinese-address-generator architecture

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

- Interactive diagram: https://gitdiagram.com/moonrailgun/chinese-address-generator
- Repository: https://github.com/moonrailgun/chinese-address-generator

## Overview

This small Node.js library randomly generates Chinese administrative addresses at levels 1–4 and can fabricate a complete address with a building and room number. The documented workflow starts with a caller invoking a generator; level 4 builds on level 3, while full-address fabrication adds randomized numbers. The sampled source confirms the data reads and helper calls shown; the level-3 data structure is used for levels 1–3, and the level-4 text data is matched by code prefix.

Main entry points: [`generator4.js`](https://github.com/moonrailgun/chinese-address-generator/blob/master/generator4.js) (Level 4), [`generator.js`](https://github.com/moonrailgun/chinese-address-generator/blob/master/generator.js) (Levels 1–3), [`utils.js`](https://github.com/moonrailgun/chinese-address-generator/blob/master/utils.js) (Random helpers), [`index.js`](https://github.com/moonrailgun/chinese-address-generator/blob/master/index.js) (Package entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Public API"]
  node_entry["Package entry<br/>[index.js]"]
end

subgraph group_generation["Address generation"]
  node_levels123["Levels 1–3<br/>[generator.js]"]
  node_level1["Level 1<br/>[generator.js]"]
  node_level2["Level 2<br/>[generator.js]"]
  node_level3["Level 3<br/>[generator.js]"]
  node_level4["Level 4<br/>[generator4.js]"]
  node_full["Full address<br/>[generator4.js]"]
  node_random["Random helpers<br/>[utils.js]"]
end

subgraph group_data["Address data"]
  node_data3["Level 3 dataset<br/>[level3.json]"]
  node_data4["Level 4 dataset<br/>[level4.txt]"]
end

node_caller(("Library caller"))

node_caller -->|"loads package"| node_entry
node_entry -->|"exports"| node_levels123
node_caller -->|"requests"| node_level1
node_caller -->|"requests"| node_level2
node_caller -->|"requests"| node_level3
node_caller -->|"requests"| node_level4
node_caller -->|"requests"| node_full
node_levels123 -->|"reads"| node_data3
node_levels123 -->|"calls"| node_random
node_level4 -->|"calls level 3"| node_levels123
node_level4 -->|"reads"| node_data4
node_level4 -->|"calls"| node_random
node_full -->|"calls"| node_level4
node_full -->|"calls"| node_random

click node_entry "https://github.com/moonrailgun/chinese-address-generator/blob/master/index.js"
click node_levels123 "https://github.com/moonrailgun/chinese-address-generator/blob/master/generator.js"
click node_level1 "https://github.com/moonrailgun/chinese-address-generator/blob/master/generator.js"
click node_level2 "https://github.com/moonrailgun/chinese-address-generator/blob/master/generator.js"
click node_level3 "https://github.com/moonrailgun/chinese-address-generator/blob/master/generator.js"
click node_level4 "https://github.com/moonrailgun/chinese-address-generator/blob/master/generator4.js"
click node_full "https://github.com/moonrailgun/chinese-address-generator/blob/master/generator4.js"
click node_random "https://github.com/moonrailgun/chinese-address-generator/blob/master/utils.js"
click node_data3 "https://github.com/moonrailgun/chinese-address-generator/blob/master/data/level3.json"
click node_data4 "https://github.com/moonrailgun/chinese-address-generator/blob/master/data/level4.txt"

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_entry toneBlue
class node_levels123,node_level1,node_level2,node_level3,node_level4,node_full,node_random toneAmber
class node_data3,node_data4 toneMint
class node_caller toneIndigo
```

## Components

### Public API

- [Package entry](https://github.com/moonrailgun/chinese-address-generator/blob/master/index.js): `index.js`

### Address generation

- [Levels 1–3](https://github.com/moonrailgun/chinese-address-generator/blob/master/generator.js): `generator.js`
- [Level 1](https://github.com/moonrailgun/chinese-address-generator/blob/master/generator.js): `generator.js`
- [Level 2](https://github.com/moonrailgun/chinese-address-generator/blob/master/generator.js): `generator.js`
- [Level 3](https://github.com/moonrailgun/chinese-address-generator/blob/master/generator.js): `generator.js`
- [Level 4](https://github.com/moonrailgun/chinese-address-generator/blob/master/generator4.js): `generator4.js`
- [Full address](https://github.com/moonrailgun/chinese-address-generator/blob/master/generator4.js): `generator4.js`
- [Random helpers](https://github.com/moonrailgun/chinese-address-generator/blob/master/utils.js): `utils.js`

### Address data

- [Level 3 dataset](https://github.com/moonrailgun/chinese-address-generator/blob/master/data/level3.json): `data/level3.json`
- [Level 4 dataset](https://github.com/moonrailgun/chinese-address-generator/blob/master/data/level4.txt): `data/level4.txt`

### Other components

- **Library caller**

## Connections

- Library caller → Package entry: loads package
- Package entry → Levels 1–3: exports
- Library caller → Level 1: requests
- Library caller → Level 2: requests
- Library caller → Level 3: requests
- Library caller → Level 4: requests
- Library caller → Full address: requests
- Levels 1–3 → Level 3 dataset: reads
- Levels 1–3 → Random helpers: calls
- Level 4 → Levels 1–3: calls level 3
- Level 4 → Level 4 dataset: reads
- Level 4 → Random helpers: calls
- Full address → Level 4: calls
- Full address → Random helpers: calls
