Skip to content
Snippets Groups Projects
  • Chocobozzz's avatar
    3a499263
    Migrate server to ESM · 3a499263
    Chocobozzz authored
    Sorry for the very big commit that may lead to git log issues and merge
    conflicts, but it's a major step forward:
    
     * Server can be faster at startup because imports() are async and we can
       easily lazy import big modules
     * Angular doesn't seem to support ES import (with .js extension), so we
       had to correctly organize peertube into a monorepo:
        * Use yarn workspace feature
        * Use typescript reference projects for dependencies
        * Shared projects have been moved into "packages", each one is now a
          node module (with a dedicated package.json/tsconfig.json)
        * server/tools have been moved into apps/ and is now a dedicated app
          bundled and published on NPM so users don't have to build peertube
          cli tools manually
        * server/tests have been moved into packages/ so we don't compile
          them every time we want to run the server
     * Use isolatedModule option:
       * Had to move from const enum to const
         (https://www.typescriptlang.org/docs/handbook/enums.html#objects-vs-enums)
       * Had to explictely specify "type" imports when used in decorators
     * Prefer tsx (that uses esbuild under the hood) instead of ts-node to
       load typescript files (tests with mocha or scripts):
         * To reduce test complexity as esbuild doesn't support decorator
           metadata, we only test server files that do not import server
           models
         * We still build tests files into js files for a faster CI
     * Remove unmaintained peertube CLI import script
     * Removed some barrels to speed up execution (less imports)
    3a499263
    History
    Migrate server to ESM
    Chocobozzz authored
    Sorry for the very big commit that may lead to git log issues and merge
    conflicts, but it's a major step forward:
    
     * Server can be faster at startup because imports() are async and we can
       easily lazy import big modules
     * Angular doesn't seem to support ES import (with .js extension), so we
       had to correctly organize peertube into a monorepo:
        * Use yarn workspace feature
        * Use typescript reference projects for dependencies
        * Shared projects have been moved into "packages", each one is now a
          node module (with a dedicated package.json/tsconfig.json)
        * server/tools have been moved into apps/ and is now a dedicated app
          bundled and published on NPM so users don't have to build peertube
          cli tools manually
        * server/tests have been moved into packages/ so we don't compile
          them every time we want to run the server
     * Use isolatedModule option:
       * Had to move from const enum to const
         (https://www.typescriptlang.org/docs/handbook/enums.html#objects-vs-enums)
       * Had to explictely specify "type" imports when used in decorators
     * Prefer tsx (that uses esbuild under the hood) instead of ts-node to
       load typescript files (tests with mocha or scripts):
         * To reduce test complexity as esbuild doesn't support decorator
           metadata, we only test server files that do not import server
           models
         * We still build tests files into js files for a faster CI
     * Remove unmaintained peertube CLI import script
     * Removed some barrels to speed up execution (less imports)