Open
Description
Hey!
In 2020 TypeScript started to be a standard (exclude flow
in fb internals 😄 ) for every project, It helps use to:
- Speedup development (autocompletion, easy to know how to implement drivers by interfaces/abstract classes)
- Protect errors
- Generate true compatibility code for matrix of compatibility versions of Node.JS platform
Before We start
- Performance should not be affected
- BC should be done as deprecated notice, next code removal
- Dont break exists typings if they provided (merge to interfaces?)
High level iteration plan:
Scope
Due to the fact, that cube.js is not a small project, it's expected to have a plan, How to move it to TypeScript.
It's not possible to move module with dependency on another module that doesn't have typings. It's why dependency tree is useful to detect "core" modules.
Guide
- Generate declarations for every package automatically (1-2 base packages, it's needed to write driver on TypeScript)
- Introduce first driver fully on top of TS
- Move packages from 1st step to TS
- Move all packages to TS
Scope
Isolated packages
- cubejs-cli
Frontend packages
- cubejs-client-core
- cubejs-client-ngx
- cubejs-client-react
- cubejs-client-vue
- cubejs-client-ws-transport (feat(@cubejs-client/ws-transport): Move to TypeScript #1293)
Backend packages (base only)
- cubejs-api-gateway ( feat(@cubejs-backend/api-gateway): Migrate to TS #1474)
- cubejs-query-orchestrator (Feat: Moving cubejs-query-orchestrator to TypeScript (only d.ts generation) #1092)
- cubejs-schema-compiler
- cubejs-server-core
- cubejs-server
- cubejs-serverless
- cubejs-serverless-aws
- cubejs-serverless-google
Drivers
- cubejs-athena-driver
- cubejs-bigquery-driver (feat(bigquery-driver): Migrate to TypeScript & Streaming support #2818)
- cubejs-cubestore-driver
- cubejs-dremio-driver
- cubejs-druid-driver (new one, fully on TS) (Feature: Introduce DruidDriver #1099)
- cubejs-elasticsearch-driver
- cubejs-hive-driver
- cubejs-jdbc-driver (blocked, fully outdated)
- cubejs-mongobi-driver
- cubejs-mssql-driver
- cubejs-mysql-driver
- cubejs-oracle-driver
- cubejs-postgres-driver
- cubejs-prestodb-driver
- cubejs-sqlite-driver
- cubejs-snowflake-driver
Non code
- ESLint (support typescript)
- Docs (a little bit of examples, how to debug?)
- Tests
Thanks