Commit graph

75 commits

Author SHA1 Message Date
JannikStreek
b4ac96d823
Refactor project structure and introduce workspaces (#6170)
* prototype for structure change - working

* move server.ts

* Revert "move server.ts"

This reverts commit 4cf2e61dc0f0f3f3dea37a8160a2d85e0213ac10.

* adjusted package file

* further cleanup

* add workspace root flag

* fix docker install

* fix loadtest

* fix run
2024-02-19 22:31:27 +01:00
Richard Hansen
da10d42183 Delete top-level package.json
Advantages of a top-level `package.json`:
  * It prevents npm from printing benign warnings about missing
    `package.json` whenever a plugin is installed.
  * Semantically, it is "the right thing to do" if plugins are to be
    installed in the top-level directory. This avoids violating
    assumptions various tools make about `package.json`, which makes
    it more likely that we can easily switch to a new version of npm
    or to an npm alternative.

Disadvantages of a top-level `package.json`:
  * Including a dependency of `ep_etherpad-lite@file:src` in the
    top-level `package.json`, which is required to keep npm from
    deleting the `node_modules/ep_etherpad-lite` symlink each time a
    package is installed, drastically slows down plugin installation
    because npm recursively walks the ep_etherpad-lite dependencies.
  * npm has a horrible dependency hoisting behavior: It moves
    dependencies from `src/node_modules/` to the top-level
    `node_modules/` directory when possible. This causes numerous
    mysterious problems, such as silent failures in `npm outdated` and
    `npm update`, and it breaks plugins that do
    `require('ep_etherpad-lite/node_modules/foo')`.

Right now, with npm v6.x, eliminating the disadvantages is far more
valuable than keeping the advantages. (This might change with npm
v7.x.)

For a long time there was no top-level `package.json` and it worked
fairly well, although users were often confused by npm's benign
warnings. The top-level `package.json` was added because we needed a
place to put ESLint config for the stuff in `bin/` and `tests/`, and
we wanted the advantages listed above. Unfortunately we were unaware
of the disadvantages at the time. The `bin/` and `tests/` directories
were moved under `src/` so we no longer need the top-level
`package.json` for ESLint.

An alternative to a top-level `package.json`: Create
`plugins/package.json` and install all plugins in `plugins/`. If
`plugins/package.json` has a dependency of
`ep_etherpad-lite@file:../src` then plugin installation will still be
slow (npm will still recursively walk the dependencies in
`src/package.json`) but it should avoid npm's nasty dependency
hoisting behavior. To avoid slow plugin installation we could create a
lightweight `etherpad-pluginlib` package that Etherpad plugins would
use to indirectly access Etherpad's internals. As an added bonus, this
intermediate package could become an adaptor that provides a stable
interface to plugins even when Etherpad core rapidly evolves.
2021-02-07 06:24:52 +00:00
John McLear
2ea8ea1275 restructure: move bin/ and tests/ to src/
Also add symlinks from the old `bin/` and `tests/` locations to avoid
breaking scripts and other tools.

Motivations:

  * Scripts and tests no longer have to do dubious things like:

        require('ep_etherpad-lite/node_modules/foo')

    to access packages installed as dependencies in
    `src/package.json`.

  * Plugins can access the backend test helper library in a non-hacky
    way:

        require('ep_etherpad-lite/tests/backend/common')

  * We can delete the top-level `package.json` without breaking our
    ability to lint the files in `bin/` and `tests/`.

    Deleting the top-level `package.json` has downsides: It will cause
    `npm` to print warnings whenever plugins are installed, npm will
    no longer be able to enforce a plugin's peer dependency on
    ep_etherpad-lite, and npm will keep deleting the
    `node_modules/ep_etherpad-lite` symlink that points to `../src`.

    But there are significant upsides to deleting the top-level
    `package.json`: It will drastically speed up plugin installation
    because `npm` doesn't have to recursively walk the dependencies in
    `src/package.json`. Also, deleting the top-level `package.json`
    avoids npm's horrible dependency hoisting behavior (where it moves
    stuff from `src/node_modules/` to the top-level `node_modules/`
    directory). Dependency hoisting causes numerous mysterious
    problems such as silent failures in `npm outdated` and `npm
    update`. Dependency hoisting also breaks plugins that do:

        require('ep_etherpad-lite/node_modules/foo')
2021-02-04 17:15:08 -05:00
Richard Hansen
759e2aaec3 lint: Use node config for tests/frontend/travis, tests/ratelimit
The files in these directories contain test drivers, not tests.
2021-02-01 19:52:24 +00:00
John McLear
0cc8405e9c Bump minimum required Node.js version to 10.17.0
This makes it possible to use fs.promises.
2021-01-30 17:00:40 -05:00
Richard Hansen
b02ab430fe Bump eslint-config-etherpad to 1.0.24 2021-01-29 01:10:58 -05:00
Richard Hansen
794dfb1863 lint: Bump eslint-config-etherpad and install its new deps 2020-12-17 22:18:29 +00:00
Richard Hansen
fc234d0088 lint: Bump eslint and eslint-config-etherpad versions 2020-12-16 22:09:48 +00:00
Richard Hansen
2fdac836d0 lint: Bump eslint-config-etherpad to 1.0.13
Also bump eslint to 7.14.0.
2020-11-27 06:25:43 +00:00
Richard Hansen
98967735d5 lint: Bump eslint-config-etherpad to 1.0.11 2020-11-25 13:09:14 -05:00
Richard Hansen
a78d6605b7 lint: Configure ESLint 2020-11-24 20:06:12 +00:00
Egil Moeller
1239ce7f28 The Big Renaming - etherpad is now an NPM module 2012-02-26 13:07:51 +01:00
Egil Moeller
e994b5b2b1 Oups, bad format 2012-02-24 15:33:20 +01:00
Egil Moeller
b4b0026068 Added the basic parts for a plugin loader 2012-02-24 13:42:36 +01:00
Chad Weider
1063a3d036 Account for more spaces and Windows paths. This fixes #456. 2012-02-16 14:19:16 -08:00
Chad Weider
2931382a10 Update require-kernel, which fixes #451. 2012-02-15 13:35:16 -08:00
booo
edfdb775fe package.json: upgrade clean-css package 2012-02-07 16:59:19 +01:00
Peter 'Pita' Martischka
dfa857d606 Updated ueberDB 2012-02-06 17:29:27 +01:00
Chad Weider
b5ddba8741 Update require-kernel, it includes a patch for relative paths. 2012-02-05 16:59:40 -08:00
Peter 'Pita' Martischka
fc0cbdb55c Updated uglify-js, that might fixes #389 2012-02-02 12:24:13 +01:00
booo
0c723c2686 remove joose dependency 2012-01-30 15:59:13 +01:00
booo
f7089bba20 package.json: update log4js version (0.4.1) 2012-01-28 12:55:11 +01:00
Peter 'Pita' Martischka
d370a5b76f Improved npm and node version checks 2012-01-26 12:55:54 +01:00
booo
87b11045e1 fix issue #281? 2012-01-25 22:00:08 +01:00
Chad Weider
62e0a8f26c Use require-kernel for require functionality. 2012-01-22 09:54:28 -08:00
Peter 'Pita' Martischka
ada09f3e6b Added a jshint binary 2012-01-22 14:56:08 +01:00
Peter 'Pita' Martischka
ddf1cd345c Update package.json 2011-12-14 21:36:33 +01:00
Peter 'Pita' Martischka
d41ba6f5f7 updated ueberDB 2011-12-10 18:04:19 +01:00
Peter 'Pita' Martischka
22fd5ae33d updated ueberDB 2011-12-10 12:37:51 +01:00
Peter 'Pita' Martischka
bfbdac10d3 fixed #250 2011-12-04 17:09:31 +01:00
Peter 'Pita' Martischka
5c56e62d67 Changed all error handling to async-stacktrace style + fixed import/export on unix 2011-12-04 16:50:02 +01:00
Peter 'Pita' Martischka
7296913cb0 fixed merge confilicts 2011-11-25 16:56:08 -08:00
Lorenzo Gil Sanchez
4e5e5edc8e Add jsdom as a dependency to be able to parse HTML in the server 2011-11-16 17:39:33 +01:00
Peter 'Pita' Martischka
5f12744446 update ueberDB 2011-11-12 17:32:30 -08:00
Peter 'Pita' Martischka
08fbc3c3bc Updated all dependencies 2011-11-12 16:46:26 -08:00
John McLear
2cc7dcb751 Update package.json 2011-10-26 20:13:10 +02:00
Peter 'Pita' Martischka
f571ed3554 updated ueberDB 2011-08-23 18:15:03 +01:00
Peter 'Pita' Martischka
8ec71a3225 updated version to 1.0.0 2011-08-22 13:25:42 +01:00
Peter 'Pita' Martischka
124bc4be03 updated dependencies 2011-08-21 20:13:53 +01:00
Peter 'Pita' Martischka
c365bc9522 updated ueberDB 2011-08-19 23:23:18 +01:00
Peter 'Pita' Martischka
a34e482a8a changed ep-lite etherpad-lite in package.json 2011-08-17 17:49:38 +01:00
Peter 'Pita' Martischka
95b1ac9393 removed sqlite dependency and made dirty the default db 2011-08-17 12:30:35 +01:00
Peter 'Pita' Martischka
2b266ee82a updated socket.io 2011-08-13 20:06:38 +01:00
Peter 'Pita' Martischka
53cdd893af added a buildForWindows script 2011-08-11 22:00:52 +01:00
Peter 'Pita' Martischka
af9c09a93a updated dependencies, including socket.io and ueberDB 2011-08-08 20:19:16 +01:00
Peter 'Pita' Martischka
33b5dcff2b updated ueberDB to 0.0.13 2011-08-02 17:17:02 +01:00
Peter 'Pita' Martischka
b30849c2f2 Installed log4js as logging framework 2011-07-31 18:25:51 +01:00
Peter 'Pita' Martischka
95ead807e9 updated ueberDB 2011-07-31 15:06:09 +01:00
Peter 'Pita' Martischka
8a68007649 Added contributor 2011-07-30 12:52:51 +01:00
Peter 'Pita' Martischka
5238eeae8a updated ueberDB 2011-07-29 16:46:43 +01:00