Skip to main content

Development Guide

This guide will help you understand the development workflow of flywave.gl.

Development Environment Setup

System Requirements

  • Node.js: >=22.15.0
  • pnpm: >=9.0.0 (recommended)

Installing Dependencies

After cloning the repository, run the following command to install dependencies:

pnpm install

This will install all required packages and set up the pnpm workspace.

Development Workflow

Starting the Development Server

Start the development server for the example project:

pnpm start

This command will start the development server and watch for file changes.

Building the Project

To build the entire project:

pnpm run build

This will build all packages in the correct order.

Running Tests

To run all tests:

pnpm test

To run tests in watch mode:

pnpm test:watch

Project Structure

The flywave.gl project follows a monorepo structure:

flywave.gl/
├── @flywave/
│ ├── mapview/ # Core map rendering engine
│ ├── terrain-datasource/ # Terrain data handling
│ ├── geojson-datasource/ # GeoJSON data source
│ ├── 3dtile-datasource/ # 3D Tiles data source
│ ├── vectortile-datasource/ # Vector tile data source
│ ├── draw-controls/ # Drawing tools and controls
│ ├── map-controls/ # Map interaction controls
│ └── inspector/ # Debugging and inspection tools
├── docs/ # Documentation
├── examples/ # Example projects
└── scripts/ # Utility scripts

Package Development

Creating a New Package

To create a new package:

  1. Create a new directory under @flywave/
  2. Initialize the package with pnpm init
  3. Add necessary dependencies
  4. Update the workspace configuration in pnpm-workspace.yaml

Package Dependencies

Packages can depend on other packages within the monorepo. Specify dependencies in the package's package.json:

{
"dependencies": {
"@flywave/mapview": "workspace:*",
"@flywave/terrain-datasource": "workspace:*"
}
}

Code Quality

Linting

Run ESLint to check code quality:

pnpm run lint

Formatting

Format code with Prettier:

pnpm run format

Type Checking

Perform TypeScript type checking:

pnpm run typecheck

Git Workflow

Branching Strategy

  • main: Production-ready code
  • develop: Development branch
  • feature/: Feature branches
  • hotfix/: Hotfix branches

Commit Messages

Follow the conventional commit format:

<type>(<scope>): <subject>

<body>

<footer>

Types include:

  • feat: New feature
  • fix: Bug fix
  • docs: Documentation changes
  • style: Code style changes
  • refactor: Code refactoring
  • test: Test additions or updates
  • chore: Maintenance tasks

Pull Requests

  1. Create a feature branch from develop
  2. Make your changes
  3. Write tests if applicable
  4. Update documentation
  5. Submit a pull request to develop

Release Process

Versioning

flywave.gl follows semantic versioning (SemVer):

  • MAJOR: Breaking changes
  • MINOR: New features
  • PATCH: Bug fixes

Publishing

To publish a new version:

  1. Update version numbers in package.json files
  2. Create a release branch
  3. Run the build process
  4. Publish to npm registry
  5. Create a GitHub release

Testing

Test Structure

Tests are organized in __tests__ directories within each package.

Writing Tests

Use Jest for unit tests:

import { MapView } from '../src/MapView';

describe('MapView', () => {
it('should create a new instance', () => {
const mapView = new MapView();
expect(mapView).toBeInstanceOf(MapView);
});
});

Test Coverage

Aim for at least 80% test coverage for new features.

Documentation

Updating Documentation

Documentation is located in the docs/ directory. Update relevant files when making changes.

API Documentation

API documentation is generated from JSDoc comments in the source code.

Continuous Integration

CI Pipeline

The CI pipeline runs on every pull request and includes:

  • Code linting
  • Type checking
  • Unit tests
  • Build verification

Deployment

Documentation is automatically deployed to the website on successful merges to main.