rescript-lang / rescript-lang/experimental-rescript-webapi

Simplify package module/type structure

Open
#237 0 comments 0 reactions 3 assignees View on GitHub

@jderochervlk is already working on this.

Since Apr 18, 2026.

Dominant language
ReScript
Stars
40
Forks
11
Avg merge
3d 12h
Merged PRs (30d)
12

Description

Summary

Pre-alpha breaking cleanup to simplify the package structure and make the public surface more consistent.

This issue tracks the refactor to:

  • rename root *API type-holder modules to *Types
  • keep the existing folder structure for concrete modules
  • export the primary concrete type as t
  • selectively re-export additional public helper types from the concrete module that uses them
  • remove unrelated open usage
  • remove trivial primitive aliases like string, bool, unit, and low-value callback aliases where they do not add meaning
  • remove window and navigator from Global without deleting Global
  • shift access toward owner modules such as Window, Navigator, History, Storage, Performance, and similar modules
  • avoid introducing any new include directives as part of the simplification

Out Of Scope

  • contributor docs
  • code-generation conventions
  • deleting Global
  • flattening the folder structure

Execution Order

  • #239 must land first
  • #238, #240, #241, and #243 can run in parallel after #239
  • #242 is the final integration pass

Linked Issues

  • #239 Shared groundwork for package simplification
  • #238 Simplify DOM, event, and observer module surfaces
  • #240 Simplify fetch, file, canvas, URL, and socket module surfaces
  • #241 Move runtime capability access away from Global window and navigator
  • #243 Simplify media and device module surfaces
  • #242 Final integration for package simplification

Acceptance Criteria

  • No root src/*API.res type-holder files remain; they are replaced by src/*Types.res.
  • The existing folder structure remains in place.
  • Each concrete module exports its main type as t.
  • Concrete modules selectively re-export secondary public types only where justified.
  • Unrelated open usage is removed.
  • No new include directives are introduced by this refactor.
  • Trivial primitive aliases are removed instead of being renamed or moved.
  • Global.window and Global.navigator are removed.
  • Source and tests stop depending on Global.window and Global.navigator.
  • The package passes npm run build and npm test after integration.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.