Open Desplandis opened 2 months ago
On the documentation matter, do JSDoc
and TypeDoc
share a documentation generated format or will we need need a temporary template (for the duration of the migration) that supports both generated documentations ?
:+1: :+1: In addition to migrating to typescript, it will force us to clean the codebase, improve the doc and separate public and private API. A long but necessary process.
I'm wondering what's the better way to do it:
Also, we should consider api-extractor instead of ts-doc
, see this remark - no strong opinion for me yet.
This issue is a feature proposal. Feel free to upvote (with :+1: ), comment and provide your use-cases if you're interested by this feature.
Context
The
iTowns
codebase is currently written inJavascript
, withJSDoc
comments providing a loose form of type-checking that isn't enforced (but in practice used by the LSP of our code editors). This lack of type safety has led to side-effects creeping into the project, making maintenance and debugging more challenging and causing unpredictable behavior in certain areas of the code.This proposal outlines a migration path to
TypeScript
, which will enforce type safety, simplify the refactoring of complex or difficult-to-maintain parts of the code, and enable developers to take full advantage of modern tooling and best practices.Description of the proposal
This proposal details the steps for migrating
iTowns
fromJavaScript
toTypeScript
. The migration will follow a systematic, bottom-to-top approach, beginning with simpler, independent modules before tackling more complex and interdependent ones.Along the way, we will take the opportunity to refactor key components to improve clarity and maintainability. These refactorings will be addressed through separate proposals and pull requests.
This issue will primarily serve as a tracker for the migration process and a space to discuss each phase of the migration (see tracking section below).
Implementation
Tooling
The migration will necessitate some changes on our tooling:
ESLint
configuration to supportTypeScript
, integrating the@typescript-eslint
plugin. We should ensure that bothJavaScript
andTypeScript
code follow a unified set of rules, withTypeScript
as a superset ofJavaScript
.babel
andwebpack
config to supportTypeScript
as input (this should be relatively easy).JSDoc
toTypedoc
for documentation, asJSDoc
does not supportTypeScript
, andTypedoc
will provide stricter type-driven documentation.Code migration
The migration process will be gradual, but the following steps could serve as a good start:
Extent
module: splitExtent
into two sub-modules—one for geographic extents and one for tiled extents. This refactor is long due, as these modules currently contribute to at least 25% of all type issues and need a cleaner structure for proper typing.TypeScript
. We could either let them as if, or follow the Three.js convention for loaders (i.e. converting them to classes inheriting Three.Loader) and use a globalThree.LoadingManager
to share loaders between layers (and maybe facilitate Draco loader setup). Those are not however the most fragile parts ofiTowns
(except the vector parsers which depends on a lot of dependencies).Along the way
We could on our migration path rework certain parts of
iTowns
, those are some thoughts for now and they have not yet been formalized.Potential Problems
JSDoc
toTypedoc
will likely require rewriting parts of our current documentation, asTypeDoc
enforces stricter rules. Moreover, this shift could lead to significant changes in the layout and structure of the generated HTML documentation.iTowns
).Documentation
green
nodes are modules without dependencies,blue
ones with dependencies andred
ones with circular dependencies.Tracking list
The tracking list will be written from our discussions, as a list of pair (Migration step, reference to issue and/or PR).
Final note
Feel free to extend and refine each of these points.
I will open a test PR on this subject to further explore the logistics of the migration and identify any overlooked aspects or missing steps.