Эх сурвалжийг харах

[monorepo] fix running make lint from root (#33559)

* [monorepo] remove spurious package-name field from buildscript.txt

* [monorepo] align variables/paths across build script variants

* [monorepo] align linting/test setup for jobs/libraries

* [monorepo] fix "make lint/lint_fix" from root

* [wiki-algolia] integrate with yarn workspace

GitOrigin-RevId: a0954f2936d03cd4a69b3f2c8098d9ee2e361993
Jakob Ackermann 1 сар өмнө
parent
commit
6b084424b5
40 өөрчлөгдсөн 1126 нэмэгдсэн , 23 устгасан
  1. 59 0
      libraries/access-token-encryptor/Makefile
  2. 0 1
      libraries/access-token-encryptor/buildscript.txt
  3. 59 0
      libraries/fetch-utils/Makefile
  4. 0 1
      libraries/fetch-utils/buildscript.txt
  5. 59 0
      libraries/logger/Makefile
  6. 0 1
      libraries/logger/buildscript.txt
  7. 59 0
      libraries/metrics/Makefile
  8. 0 1
      libraries/metrics/buildscript.txt
  9. 59 0
      libraries/mongo-utils/Makefile
  10. 0 1
      libraries/mongo-utils/buildscript.txt
  11. 59 0
      libraries/o-error/Makefile
  12. 0 1
      libraries/o-error/buildscript.txt
  13. 59 0
      libraries/object-persistor/Makefile
  14. 0 1
      libraries/object-persistor/buildscript.txt
  15. 59 0
      libraries/overleaf-editor-core/Makefile
  16. 0 1
      libraries/overleaf-editor-core/buildscript.txt
  17. 59 0
      libraries/promise-utils/Makefile
  18. 0 1
      libraries/promise-utils/buildscript.txt
  19. 59 0
      libraries/ranges-tracker/Makefile
  20. 0 1
      libraries/ranges-tracker/buildscript.txt
  21. 59 0
      libraries/redis-wrapper/Makefile
  22. 0 1
      libraries/redis-wrapper/buildscript.txt
  23. 59 0
      libraries/settings/Makefile
  24. 0 1
      libraries/settings/buildscript.txt
  25. 59 0
      libraries/stream-utils/Makefile
  26. 0 1
      libraries/stream-utils/buildscript.txt
  27. 59 0
      libraries/validation-tools/Makefile
  28. 0 1
      libraries/validation-tools/buildscript.txt
  29. 1 0
      package.json
  30. 0 1
      services/chat/buildscript.txt
  31. 0 1
      services/clsi/buildscript.txt
  32. 0 1
      services/docstore/buildscript.txt
  33. 0 1
      services/document-updater/buildscript.txt
  34. 0 1
      services/filestore/buildscript.txt
  35. 0 1
      services/history-v1/buildscript.txt
  36. 0 1
      services/notifications/buildscript.txt
  37. 0 1
      services/project-history/buildscript.txt
  38. 0 1
      services/real-time/buildscript.txt
  39. 5 0
      services/web/Makefile
  40. 294 0
      yarn.lock

+ 59 - 0
libraries/access-token-encryptor/Makefile

@@ -0,0 +1,59 @@
+# Run the test commands in the scope of the monorepo.
+# Eslint and prettier (plus some configs) are on the root.
+RUN_LINTING = ../../bin/run -w /overleaf/libraries/access-token-encryptor monorepo yarn run --silent
+RUN_LINTING_MONOREPO = ../../bin/run monorepo yarn run --silent
+
+WITH_CACHE_FOLDER = \
+	lint \
+	lint_ci \
+	lint_fix \
+	format \
+	format_ci \
+	format_fix \
+	typecheck \
+	typecheck_ci \
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
+../../node_modules/.cache/prettier/:
+	mkdir -p $@
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
+../../node_modules/.cache/eslint/:
+	mkdir -p $@
+
+format:
+	$(RUN_LINTING_MONOREPO) format libraries/access-token-encryptor
+
+format_ci:
+	$(RUN_LINTING_MONOREPO) format libraries/access-token-encryptor
+
+format_fix:
+	$(RUN_LINTING_MONOREPO) format:fix libraries/access-token-encryptor
+
+lint:
+	$(RUN_LINTING) lint
+
+lint_ci:
+	-$(RUN_LINTING) lint --format json --output-file reports/eslint.json
+	sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
+
+lint_fix:
+	$(RUN_LINTING) lint:fix
+
+typecheck:
+	$(RUN_LINTING) types:check
+
+typecheck_ci:
+	$(RUN_LINTING) types:check
+
+test: test_unit
+test_unit:
+ifneq (,$(wildcard test/unit))
+	$(RUN_LINTING) test:unit
+endif
+
+test: test_acceptance
+test_acceptance:
+ifneq (,$(wildcard test/acceptance))
+	$(RUN_LINTING) test:acceptance
+endif

+ 0 - 1
libraries/access-token-encryptor/buildscript.txt

@@ -5,6 +5,5 @@ access-token-encryptor
 --esmock-loader=False
 --is-library=True
 --node-version=24.14.1
---package-name=@overleaf/access-token-encryptor
 --pipeline-owner=32
 --public-repo=False

+ 59 - 0
libraries/fetch-utils/Makefile

@@ -0,0 +1,59 @@
+# Run the test commands in the scope of the monorepo.
+# Eslint and prettier (plus some configs) are on the root.
+RUN_LINTING = ../../bin/run -w /overleaf/libraries/fetch-utils monorepo yarn run --silent
+RUN_LINTING_MONOREPO = ../../bin/run monorepo yarn run --silent
+
+WITH_CACHE_FOLDER = \
+	lint \
+	lint_ci \
+	lint_fix \
+	format \
+	format_ci \
+	format_fix \
+	typecheck \
+	typecheck_ci \
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
+../../node_modules/.cache/prettier/:
+	mkdir -p $@
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
+../../node_modules/.cache/eslint/:
+	mkdir -p $@
+
+format:
+	$(RUN_LINTING_MONOREPO) format libraries/fetch-utils
+
+format_ci:
+	$(RUN_LINTING_MONOREPO) format libraries/fetch-utils
+
+format_fix:
+	$(RUN_LINTING_MONOREPO) format:fix libraries/fetch-utils
+
+lint:
+	$(RUN_LINTING) lint
+
+lint_ci:
+	-$(RUN_LINTING) lint --format json --output-file reports/eslint.json
+	sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
+
+lint_fix:
+	$(RUN_LINTING) lint:fix
+
+typecheck:
+	$(RUN_LINTING) types:check
+
+typecheck_ci:
+	$(RUN_LINTING) types:check
+
+test: test_unit
+test_unit:
+ifneq (,$(wildcard test/unit))
+	$(RUN_LINTING) test:unit
+endif
+
+test: test_acceptance
+test_acceptance:
+ifneq (,$(wildcard test/acceptance))
+	$(RUN_LINTING) test:acceptance
+endif

+ 0 - 1
libraries/fetch-utils/buildscript.txt

@@ -5,6 +5,5 @@ fetch-utils
 --esmock-loader=False
 --is-library=True
 --node-version=24.14.1
---package-name=@overleaf/fetch-utils
 --pipeline-owner=32
 --public-repo=False

+ 59 - 0
libraries/logger/Makefile

@@ -0,0 +1,59 @@
+# Run the test commands in the scope of the monorepo.
+# Eslint and prettier (plus some configs) are on the root.
+RUN_LINTING = ../../bin/run -w /overleaf/libraries/logger monorepo yarn run --silent
+RUN_LINTING_MONOREPO = ../../bin/run monorepo yarn run --silent
+
+WITH_CACHE_FOLDER = \
+	lint \
+	lint_ci \
+	lint_fix \
+	format \
+	format_ci \
+	format_fix \
+	typecheck \
+	typecheck_ci \
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
+../../node_modules/.cache/prettier/:
+	mkdir -p $@
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
+../../node_modules/.cache/eslint/:
+	mkdir -p $@
+
+format:
+	$(RUN_LINTING_MONOREPO) format libraries/logger
+
+format_ci:
+	$(RUN_LINTING_MONOREPO) format libraries/logger
+
+format_fix:
+	$(RUN_LINTING_MONOREPO) format:fix libraries/logger
+
+lint:
+	$(RUN_LINTING) lint
+
+lint_ci:
+	-$(RUN_LINTING) lint --format json --output-file reports/eslint.json
+	sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
+
+lint_fix:
+	$(RUN_LINTING) lint:fix
+
+typecheck:
+	$(RUN_LINTING) types:check
+
+typecheck_ci:
+	$(RUN_LINTING) types:check
+
+test: test_unit
+test_unit:
+ifneq (,$(wildcard test/unit))
+	$(RUN_LINTING) test:unit
+endif
+
+test: test_acceptance
+test_acceptance:
+ifneq (,$(wildcard test/acceptance))
+	$(RUN_LINTING) test:acceptance
+endif

+ 0 - 1
libraries/logger/buildscript.txt

@@ -5,6 +5,5 @@ logger
 --esmock-loader=False
 --is-library=True
 --node-version=24.14.1
---package-name=@overleaf/logger
 --pipeline-owner=32
 --public-repo=False

+ 59 - 0
libraries/metrics/Makefile

@@ -0,0 +1,59 @@
+# Run the test commands in the scope of the monorepo.
+# Eslint and prettier (plus some configs) are on the root.
+RUN_LINTING = ../../bin/run -w /overleaf/libraries/metrics monorepo yarn run --silent
+RUN_LINTING_MONOREPO = ../../bin/run monorepo yarn run --silent
+
+WITH_CACHE_FOLDER = \
+	lint \
+	lint_ci \
+	lint_fix \
+	format \
+	format_ci \
+	format_fix \
+	typecheck \
+	typecheck_ci \
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
+../../node_modules/.cache/prettier/:
+	mkdir -p $@
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
+../../node_modules/.cache/eslint/:
+	mkdir -p $@
+
+format:
+	$(RUN_LINTING_MONOREPO) format libraries/metrics
+
+format_ci:
+	$(RUN_LINTING_MONOREPO) format libraries/metrics
+
+format_fix:
+	$(RUN_LINTING_MONOREPO) format:fix libraries/metrics
+
+lint:
+	$(RUN_LINTING) lint
+
+lint_ci:
+	-$(RUN_LINTING) lint --format json --output-file reports/eslint.json
+	sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
+
+lint_fix:
+	$(RUN_LINTING) lint:fix
+
+typecheck:
+	$(RUN_LINTING) types:check
+
+typecheck_ci:
+	$(RUN_LINTING) types:check
+
+test: test_unit
+test_unit:
+ifneq (,$(wildcard test/unit))
+	$(RUN_LINTING) test:unit
+endif
+
+test: test_acceptance
+test_acceptance:
+ifneq (,$(wildcard test/acceptance))
+	$(RUN_LINTING) test:acceptance
+endif

+ 0 - 1
libraries/metrics/buildscript.txt

@@ -5,6 +5,5 @@ metrics
 --esmock-loader=False
 --is-library=True
 --node-version=24.14.1
---package-name=@overleaf/metrics
 --pipeline-owner=32
 --public-repo=False

+ 59 - 0
libraries/mongo-utils/Makefile

@@ -0,0 +1,59 @@
+# Run the test commands in the scope of the monorepo.
+# Eslint and prettier (plus some configs) are on the root.
+RUN_LINTING = ../../bin/run -w /overleaf/libraries/mongo-utils monorepo yarn run --silent
+RUN_LINTING_MONOREPO = ../../bin/run monorepo yarn run --silent
+
+WITH_CACHE_FOLDER = \
+	lint \
+	lint_ci \
+	lint_fix \
+	format \
+	format_ci \
+	format_fix \
+	typecheck \
+	typecheck_ci \
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
+../../node_modules/.cache/prettier/:
+	mkdir -p $@
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
+../../node_modules/.cache/eslint/:
+	mkdir -p $@
+
+format:
+	$(RUN_LINTING_MONOREPO) format libraries/mongo-utils
+
+format_ci:
+	$(RUN_LINTING_MONOREPO) format libraries/mongo-utils
+
+format_fix:
+	$(RUN_LINTING_MONOREPO) format:fix libraries/mongo-utils
+
+lint:
+	$(RUN_LINTING) lint
+
+lint_ci:
+	-$(RUN_LINTING) lint --format json --output-file reports/eslint.json
+	sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
+
+lint_fix:
+	$(RUN_LINTING) lint:fix
+
+typecheck:
+	$(RUN_LINTING) types:check
+
+typecheck_ci:
+	$(RUN_LINTING) types:check
+
+test: test_unit
+test_unit:
+ifneq (,$(wildcard test/unit))
+	$(RUN_LINTING) test:unit
+endif
+
+test: test_acceptance
+test_acceptance:
+ifneq (,$(wildcard test/acceptance))
+	$(RUN_LINTING) test:acceptance
+endif

+ 0 - 1
libraries/mongo-utils/buildscript.txt

@@ -5,7 +5,6 @@ mongo-utils
 --esmock-loader=False
 --is-library=True
 --node-version=24.14.1
---package-name=@overleaf/mongo-utils
 --pipeline-owner=32
 --public-repo=False
 --tsconfig-no-implicit-any=True

+ 59 - 0
libraries/o-error/Makefile

@@ -0,0 +1,59 @@
+# Run the test commands in the scope of the monorepo.
+# Eslint and prettier (plus some configs) are on the root.
+RUN_LINTING = ../../bin/run -w /overleaf/libraries/o-error monorepo yarn run --silent
+RUN_LINTING_MONOREPO = ../../bin/run monorepo yarn run --silent
+
+WITH_CACHE_FOLDER = \
+	lint \
+	lint_ci \
+	lint_fix \
+	format \
+	format_ci \
+	format_fix \
+	typecheck \
+	typecheck_ci \
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
+../../node_modules/.cache/prettier/:
+	mkdir -p $@
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
+../../node_modules/.cache/eslint/:
+	mkdir -p $@
+
+format:
+	$(RUN_LINTING_MONOREPO) format libraries/o-error
+
+format_ci:
+	$(RUN_LINTING_MONOREPO) format libraries/o-error
+
+format_fix:
+	$(RUN_LINTING_MONOREPO) format:fix libraries/o-error
+
+lint:
+	$(RUN_LINTING) lint
+
+lint_ci:
+	-$(RUN_LINTING) lint --format json --output-file reports/eslint.json
+	sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
+
+lint_fix:
+	$(RUN_LINTING) lint:fix
+
+typecheck:
+	$(RUN_LINTING) types:check
+
+typecheck_ci:
+	$(RUN_LINTING) types:check
+
+test: test_unit
+test_unit:
+ifneq (,$(wildcard test/unit))
+	$(RUN_LINTING) test:unit
+endif
+
+test: test_acceptance
+test_acceptance:
+ifneq (,$(wildcard test/acceptance))
+	$(RUN_LINTING) test:acceptance
+endif

+ 0 - 1
libraries/o-error/buildscript.txt

@@ -5,6 +5,5 @@ o-error
 --esmock-loader=False
 --is-library=True
 --node-version=24.14.1
---package-name=@overleaf/o-error
 --pipeline-owner=32
 --public-repo=False

+ 59 - 0
libraries/object-persistor/Makefile

@@ -0,0 +1,59 @@
+# Run the test commands in the scope of the monorepo.
+# Eslint and prettier (plus some configs) are on the root.
+RUN_LINTING = ../../bin/run -w /overleaf/libraries/object-persistor monorepo yarn run --silent
+RUN_LINTING_MONOREPO = ../../bin/run monorepo yarn run --silent
+
+WITH_CACHE_FOLDER = \
+	lint \
+	lint_ci \
+	lint_fix \
+	format \
+	format_ci \
+	format_fix \
+	typecheck \
+	typecheck_ci \
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
+../../node_modules/.cache/prettier/:
+	mkdir -p $@
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
+../../node_modules/.cache/eslint/:
+	mkdir -p $@
+
+format:
+	$(RUN_LINTING_MONOREPO) format libraries/object-persistor
+
+format_ci:
+	$(RUN_LINTING_MONOREPO) format libraries/object-persistor
+
+format_fix:
+	$(RUN_LINTING_MONOREPO) format:fix libraries/object-persistor
+
+lint:
+	$(RUN_LINTING) lint
+
+lint_ci:
+	-$(RUN_LINTING) lint --format json --output-file reports/eslint.json
+	sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
+
+lint_fix:
+	$(RUN_LINTING) lint:fix
+
+typecheck:
+	$(RUN_LINTING) types:check
+
+typecheck_ci:
+	$(RUN_LINTING) types:check
+
+test: test_unit
+test_unit:
+ifneq (,$(wildcard test/unit))
+	$(RUN_LINTING) test:unit
+endif
+
+test: test_acceptance
+test_acceptance:
+ifneq (,$(wildcard test/acceptance))
+	$(RUN_LINTING) test:acceptance
+endif

+ 0 - 1
libraries/object-persistor/buildscript.txt

@@ -5,7 +5,6 @@ object-persistor
 --esmock-loader=False
 --is-library=True
 --node-version=24.14.1
---package-name=@overleaf/object-persistor
 --pipeline-owner=32
 --public-repo=False
 --tsconfig-no-implicit-any=True

+ 59 - 0
libraries/overleaf-editor-core/Makefile

@@ -0,0 +1,59 @@
+# Run the test commands in the scope of the monorepo.
+# Eslint and prettier (plus some configs) are on the root.
+RUN_LINTING = ../../bin/run -w /overleaf/libraries/overleaf-editor-core monorepo yarn run --silent
+RUN_LINTING_MONOREPO = ../../bin/run monorepo yarn run --silent
+
+WITH_CACHE_FOLDER = \
+	lint \
+	lint_ci \
+	lint_fix \
+	format \
+	format_ci \
+	format_fix \
+	typecheck \
+	typecheck_ci \
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
+../../node_modules/.cache/prettier/:
+	mkdir -p $@
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
+../../node_modules/.cache/eslint/:
+	mkdir -p $@
+
+format:
+	$(RUN_LINTING_MONOREPO) format libraries/overleaf-editor-core
+
+format_ci:
+	$(RUN_LINTING_MONOREPO) format libraries/overleaf-editor-core
+
+format_fix:
+	$(RUN_LINTING_MONOREPO) format:fix libraries/overleaf-editor-core
+
+lint:
+	$(RUN_LINTING) lint
+
+lint_ci:
+	-$(RUN_LINTING) lint --format json --output-file reports/eslint.json
+	sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
+
+lint_fix:
+	$(RUN_LINTING) lint:fix
+
+typecheck:
+	$(RUN_LINTING) types:check
+
+typecheck_ci:
+	$(RUN_LINTING) types:check
+
+test: test_unit
+test_unit:
+ifneq (,$(wildcard test/unit))
+	$(RUN_LINTING) test:unit
+endif
+
+test: test_acceptance
+test_acceptance:
+ifneq (,$(wildcard test/acceptance))
+	$(RUN_LINTING) test:acceptance
+endif

+ 0 - 1
libraries/overleaf-editor-core/buildscript.txt

@@ -5,6 +5,5 @@ overleaf-editor-core
 --esmock-loader=False
 --is-library=True
 --node-version=24.14.1
---package-name=overleaf-editor-core
 --pipeline-owner=44
 --public-repo=False

+ 59 - 0
libraries/promise-utils/Makefile

@@ -0,0 +1,59 @@
+# Run the test commands in the scope of the monorepo.
+# Eslint and prettier (plus some configs) are on the root.
+RUN_LINTING = ../../bin/run -w /overleaf/libraries/promise-utils monorepo yarn run --silent
+RUN_LINTING_MONOREPO = ../../bin/run monorepo yarn run --silent
+
+WITH_CACHE_FOLDER = \
+	lint \
+	lint_ci \
+	lint_fix \
+	format \
+	format_ci \
+	format_fix \
+	typecheck \
+	typecheck_ci \
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
+../../node_modules/.cache/prettier/:
+	mkdir -p $@
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
+../../node_modules/.cache/eslint/:
+	mkdir -p $@
+
+format:
+	$(RUN_LINTING_MONOREPO) format libraries/promise-utils
+
+format_ci:
+	$(RUN_LINTING_MONOREPO) format libraries/promise-utils
+
+format_fix:
+	$(RUN_LINTING_MONOREPO) format:fix libraries/promise-utils
+
+lint:
+	$(RUN_LINTING) lint
+
+lint_ci:
+	-$(RUN_LINTING) lint --format json --output-file reports/eslint.json
+	sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
+
+lint_fix:
+	$(RUN_LINTING) lint:fix
+
+typecheck:
+	$(RUN_LINTING) types:check
+
+typecheck_ci:
+	$(RUN_LINTING) types:check
+
+test: test_unit
+test_unit:
+ifneq (,$(wildcard test/unit))
+	$(RUN_LINTING) test:unit
+endif
+
+test: test_acceptance
+test_acceptance:
+ifneq (,$(wildcard test/acceptance))
+	$(RUN_LINTING) test:acceptance
+endif

+ 0 - 1
libraries/promise-utils/buildscript.txt

@@ -5,6 +5,5 @@ promise-utils
 --esmock-loader=False
 --is-library=True
 --node-version=24.14.1
---package-name=@overleaf/promise-utils
 --pipeline-owner=32
 --public-repo=False

+ 59 - 0
libraries/ranges-tracker/Makefile

@@ -0,0 +1,59 @@
+# Run the test commands in the scope of the monorepo.
+# Eslint and prettier (plus some configs) are on the root.
+RUN_LINTING = ../../bin/run -w /overleaf/libraries/ranges-tracker monorepo yarn run --silent
+RUN_LINTING_MONOREPO = ../../bin/run monorepo yarn run --silent
+
+WITH_CACHE_FOLDER = \
+	lint \
+	lint_ci \
+	lint_fix \
+	format \
+	format_ci \
+	format_fix \
+	typecheck \
+	typecheck_ci \
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
+../../node_modules/.cache/prettier/:
+	mkdir -p $@
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
+../../node_modules/.cache/eslint/:
+	mkdir -p $@
+
+format:
+	$(RUN_LINTING_MONOREPO) format libraries/ranges-tracker
+
+format_ci:
+	$(RUN_LINTING_MONOREPO) format libraries/ranges-tracker
+
+format_fix:
+	$(RUN_LINTING_MONOREPO) format:fix libraries/ranges-tracker
+
+lint:
+	$(RUN_LINTING) lint
+
+lint_ci:
+	-$(RUN_LINTING) lint --format json --output-file reports/eslint.json
+	sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
+
+lint_fix:
+	$(RUN_LINTING) lint:fix
+
+typecheck:
+	$(RUN_LINTING) types:check
+
+typecheck_ci:
+	$(RUN_LINTING) types:check
+
+test: test_unit
+test_unit:
+ifneq (,$(wildcard test/unit))
+	$(RUN_LINTING) test:unit
+endif
+
+test: test_acceptance
+test_acceptance:
+ifneq (,$(wildcard test/acceptance))
+	$(RUN_LINTING) test:acceptance
+endif

+ 0 - 1
libraries/ranges-tracker/buildscript.txt

@@ -5,6 +5,5 @@ ranges-tracker
 --esmock-loader=False
 --is-library=True
 --node-version=24.14.1
---package-name=@overleaf/ranges-tracker
 --pipeline-owner=44
 --public-repo=False

+ 59 - 0
libraries/redis-wrapper/Makefile

@@ -0,0 +1,59 @@
+# Run the test commands in the scope of the monorepo.
+# Eslint and prettier (plus some configs) are on the root.
+RUN_LINTING = ../../bin/run -w /overleaf/libraries/redis-wrapper monorepo yarn run --silent
+RUN_LINTING_MONOREPO = ../../bin/run monorepo yarn run --silent
+
+WITH_CACHE_FOLDER = \
+	lint \
+	lint_ci \
+	lint_fix \
+	format \
+	format_ci \
+	format_fix \
+	typecheck \
+	typecheck_ci \
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
+../../node_modules/.cache/prettier/:
+	mkdir -p $@
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
+../../node_modules/.cache/eslint/:
+	mkdir -p $@
+
+format:
+	$(RUN_LINTING_MONOREPO) format libraries/redis-wrapper
+
+format_ci:
+	$(RUN_LINTING_MONOREPO) format libraries/redis-wrapper
+
+format_fix:
+	$(RUN_LINTING_MONOREPO) format:fix libraries/redis-wrapper
+
+lint:
+	$(RUN_LINTING) lint
+
+lint_ci:
+	-$(RUN_LINTING) lint --format json --output-file reports/eslint.json
+	sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
+
+lint_fix:
+	$(RUN_LINTING) lint:fix
+
+typecheck:
+	$(RUN_LINTING) types:check
+
+typecheck_ci:
+	$(RUN_LINTING) types:check
+
+test: test_unit
+test_unit:
+ifneq (,$(wildcard test/unit))
+	$(RUN_LINTING) test:unit
+endif
+
+test: test_acceptance
+test_acceptance:
+ifneq (,$(wildcard test/acceptance))
+	$(RUN_LINTING) test:acceptance
+endif

+ 0 - 1
libraries/redis-wrapper/buildscript.txt

@@ -5,6 +5,5 @@ redis-wrapper
 --esmock-loader=False
 --is-library=True
 --node-version=24.14.1
---package-name=@overleaf/redis-wrapper
 --pipeline-owner=32
 --public-repo=False

+ 59 - 0
libraries/settings/Makefile

@@ -0,0 +1,59 @@
+# Run the test commands in the scope of the monorepo.
+# Eslint and prettier (plus some configs) are on the root.
+RUN_LINTING = ../../bin/run -w /overleaf/libraries/settings monorepo yarn run --silent
+RUN_LINTING_MONOREPO = ../../bin/run monorepo yarn run --silent
+
+WITH_CACHE_FOLDER = \
+	lint \
+	lint_ci \
+	lint_fix \
+	format \
+	format_ci \
+	format_fix \
+	typecheck \
+	typecheck_ci \
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
+../../node_modules/.cache/prettier/:
+	mkdir -p $@
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
+../../node_modules/.cache/eslint/:
+	mkdir -p $@
+
+format:
+	$(RUN_LINTING_MONOREPO) format libraries/settings
+
+format_ci:
+	$(RUN_LINTING_MONOREPO) format libraries/settings
+
+format_fix:
+	$(RUN_LINTING_MONOREPO) format:fix libraries/settings
+
+lint:
+	$(RUN_LINTING) lint
+
+lint_ci:
+	-$(RUN_LINTING) lint --format json --output-file reports/eslint.json
+	sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
+
+lint_fix:
+	$(RUN_LINTING) lint:fix
+
+typecheck:
+	$(RUN_LINTING) types:check
+
+typecheck_ci:
+	$(RUN_LINTING) types:check
+
+test: test_unit
+test_unit:
+ifneq (,$(wildcard test/unit))
+	$(RUN_LINTING) test:unit
+endif
+
+test: test_acceptance
+test_acceptance:
+ifneq (,$(wildcard test/acceptance))
+	$(RUN_LINTING) test:acceptance
+endif

+ 0 - 1
libraries/settings/buildscript.txt

@@ -5,6 +5,5 @@ settings
 --esmock-loader=False
 --is-library=True
 --node-version=24.14.1
---package-name=@overleaf/settings
 --pipeline-owner=32
 --public-repo=False

+ 59 - 0
libraries/stream-utils/Makefile

@@ -0,0 +1,59 @@
+# Run the test commands in the scope of the monorepo.
+# Eslint and prettier (plus some configs) are on the root.
+RUN_LINTING = ../../bin/run -w /overleaf/libraries/stream-utils monorepo yarn run --silent
+RUN_LINTING_MONOREPO = ../../bin/run monorepo yarn run --silent
+
+WITH_CACHE_FOLDER = \
+	lint \
+	lint_ci \
+	lint_fix \
+	format \
+	format_ci \
+	format_fix \
+	typecheck \
+	typecheck_ci \
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
+../../node_modules/.cache/prettier/:
+	mkdir -p $@
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
+../../node_modules/.cache/eslint/:
+	mkdir -p $@
+
+format:
+	$(RUN_LINTING_MONOREPO) format libraries/stream-utils
+
+format_ci:
+	$(RUN_LINTING_MONOREPO) format libraries/stream-utils
+
+format_fix:
+	$(RUN_LINTING_MONOREPO) format:fix libraries/stream-utils
+
+lint:
+	$(RUN_LINTING) lint
+
+lint_ci:
+	-$(RUN_LINTING) lint --format json --output-file reports/eslint.json
+	sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
+
+lint_fix:
+	$(RUN_LINTING) lint:fix
+
+typecheck:
+	$(RUN_LINTING) types:check
+
+typecheck_ci:
+	$(RUN_LINTING) types:check
+
+test: test_unit
+test_unit:
+ifneq (,$(wildcard test/unit))
+	$(RUN_LINTING) test:unit
+endif
+
+test: test_acceptance
+test_acceptance:
+ifneq (,$(wildcard test/acceptance))
+	$(RUN_LINTING) test:acceptance
+endif

+ 0 - 1
libraries/stream-utils/buildscript.txt

@@ -5,6 +5,5 @@ stream-utils
 --esmock-loader=False
 --is-library=True
 --node-version=24.14.1
---package-name=@overleaf/stream-utils
 --pipeline-owner=32
 --public-repo=False

+ 59 - 0
libraries/validation-tools/Makefile

@@ -0,0 +1,59 @@
+# Run the test commands in the scope of the monorepo.
+# Eslint and prettier (plus some configs) are on the root.
+RUN_LINTING = ../../bin/run -w /overleaf/libraries/validation-tools monorepo yarn run --silent
+RUN_LINTING_MONOREPO = ../../bin/run monorepo yarn run --silent
+
+WITH_CACHE_FOLDER = \
+	lint \
+	lint_ci \
+	lint_fix \
+	format \
+	format_ci \
+	format_fix \
+	typecheck \
+	typecheck_ci \
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/prettier/
+../../node_modules/.cache/prettier/:
+	mkdir -p $@
+
+$(WITH_CACHE_FOLDER): ../../node_modules/.cache/eslint/
+../../node_modules/.cache/eslint/:
+	mkdir -p $@
+
+format:
+	$(RUN_LINTING_MONOREPO) format libraries/validation-tools
+
+format_ci:
+	$(RUN_LINTING_MONOREPO) format libraries/validation-tools
+
+format_fix:
+	$(RUN_LINTING_MONOREPO) format:fix libraries/validation-tools
+
+lint:
+	$(RUN_LINTING) lint
+
+lint_ci:
+	-$(RUN_LINTING) lint --format json --output-file reports/eslint.json
+	sed -i 's_"filePath":"/overleaf_"filePath":"$(MONOREPO)_g' reports/eslint.json
+
+lint_fix:
+	$(RUN_LINTING) lint:fix
+
+typecheck:
+	$(RUN_LINTING) types:check
+
+typecheck_ci:
+	$(RUN_LINTING) types:check
+
+test: test_unit
+test_unit:
+ifneq (,$(wildcard test/unit))
+	$(RUN_LINTING) test:unit
+endif
+
+test: test_acceptance
+test_acceptance:
+ifneq (,$(wildcard test/acceptance))
+	$(RUN_LINTING) test:acceptance
+endif

+ 0 - 1
libraries/validation-tools/buildscript.txt

@@ -5,7 +5,6 @@ validation-tools
 --esmock-loader=False
 --is-library=True
 --node-version=24.14.1
---package-name=@overleaf/validation-tools
 --public-repo=False
 --test-acceptance-vitest=True
 --test-unit-vitest=True

+ 1 - 0
package.json

@@ -196,6 +196,7 @@
   },
   "workspaces": [
     "jobs/mirror-documentation",
+    "jobs/wiki-algolia",
     "libraries/*",
     "server-ce/test",
     "services/analytics",

+ 0 - 1
services/chat/buildscript.txt

@@ -5,6 +5,5 @@ chat
 --env-pass-through=
 --esmock-loader=False
 --node-version=24.14.1
---package-name=@overleaf/chat
 --pipeline-owner=44
 --public-repo=False

+ 0 - 1
services/clsi/buildscript.txt

@@ -5,7 +5,6 @@ clsi
 --env-pass-through=
 --esmock-loader=False
 --node-version=24.14.1
---package-name=@overleaf/clsi
 --pipeline-owner=32
 --public-repo=True
 --test-unit-vitest=True

+ 0 - 1
services/docstore/buildscript.txt

@@ -5,7 +5,6 @@ docstore
 --env-pass-through=
 --esmock-loader=False
 --node-version=24.14.1
---package-name=@overleaf/docstore
 --pipeline-owner=32
 --public-repo=True
 --test-unit-vitest=True

+ 0 - 1
services/document-updater/buildscript.txt

@@ -5,6 +5,5 @@ document-updater
 --env-pass-through=
 --esmock-loader=False
 --node-version=24.14.1
---package-name=@overleaf/document-updater
 --pipeline-owner=44
 --public-repo=True

+ 0 - 1
services/filestore/buildscript.txt

@@ -6,7 +6,6 @@ filestore
 --env-pass-through=
 --esmock-loader=False
 --node-version=24.14.1
---package-name=@overleaf/filestore
 --pipeline-owner=32
 --public-repo=True
 --test-acceptance-shards=SHARD_01_,SHARD_02_,SHARD_03_

+ 0 - 1
services/history-v1/buildscript.txt

@@ -5,7 +5,6 @@ history-v1
 --env-pass-through=
 --esmock-loader=False
 --node-version=24.14.1
---package-name=overleaf-editor
 --pipeline-owner=44
 --public-repo=False
 --tsconfig-extra-includes=backup-deletion-app.mjs,backup-verifier-app.mjs,backup-worker-app.mjs,api/**/*,migrations/**/*,storage/**/*

+ 0 - 1
services/notifications/buildscript.txt

@@ -5,7 +5,6 @@ notifications
 --env-pass-through=
 --esmock-loader=False
 --node-version=24.14.1
---package-name=@overleaf/notifications
 --pipeline-owner=32
 --public-repo=True
 --test-acceptance-vitest=True

+ 0 - 1
services/project-history/buildscript.txt

@@ -5,6 +5,5 @@ project-history
 --env-pass-through=
 --esmock-loader=True
 --node-version=24.14.1
---package-name=@overleaf/project-history
 --pipeline-owner=44
 --public-repo=False

+ 0 - 1
services/real-time/buildscript.txt

@@ -4,7 +4,6 @@ real-time
 --env-pass-through=
 --esmock-loader=False
 --node-version=24.14.1
---package-name=@overleaf/real-time
 --pipeline-owner=32
 --public-repo=False
 --test-unit-vitest=True

+ 5 - 0
services/web/Makefile

@@ -550,6 +550,10 @@ else
 	$(RUN_LINTING) lint
 endif
 
+lint_fix: lint_eslint_fix
+lint_eslint_fix:
+	$(RUN_LINTING) lint:fix
+
 lint: lint_stylelint
 lint_stylelint:
 ifeq ($(CI),true)
@@ -559,6 +563,7 @@ else
 	$(RUN_LINTING) lint:styles
 endif
 
+lint_fix: lint_stylelint_fix
 lint_stylelint_fix:
 	$(RUN_LINTING) lint:styles:fix
 

+ 294 - 0
yarn.lock

@@ -158,6 +158,138 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@algolia/cache-browser-local-storage@npm:4.19.1":
+  version: 4.19.1
+  resolution: "@algolia/cache-browser-local-storage@npm:4.19.1"
+  dependencies:
+    "@algolia/cache-common": "npm:4.19.1"
+  checksum: 10c0/55b8553351186efba46742eafebd4ef3bc26093e45b8afda1741550e63600b5ad95835ebd9a875b571e3f481de0df43925165c7e403f581c1e7c2f2d2525c3b2
+  languageName: node
+  linkType: hard
+
+"@algolia/cache-common@npm:4.19.1":
+  version: 4.19.1
+  resolution: "@algolia/cache-common@npm:4.19.1"
+  checksum: 10c0/33de0609f8c2d499dc559ed75e5101e03de2dc084f72c722d173c7ef64af3ca5e8886f79163676047764101510f2c543286545711b0b2e5ccff2a52dfa962ae7
+  languageName: node
+  linkType: hard
+
+"@algolia/cache-in-memory@npm:4.19.1":
+  version: 4.19.1
+  resolution: "@algolia/cache-in-memory@npm:4.19.1"
+  dependencies:
+    "@algolia/cache-common": "npm:4.19.1"
+  checksum: 10c0/fd8deed75c0cf2d8b983d5957eaf809233cd9caaa661d7b6b80a50ce6cd09a7b339c2f7072916c7afb88b557638f6e4d3194bc8424e38126752602a04bf11ec5
+  languageName: node
+  linkType: hard
+
+"@algolia/client-account@npm:4.19.1":
+  version: 4.19.1
+  resolution: "@algolia/client-account@npm:4.19.1"
+  dependencies:
+    "@algolia/client-common": "npm:4.19.1"
+    "@algolia/client-search": "npm:4.19.1"
+    "@algolia/transporter": "npm:4.19.1"
+  checksum: 10c0/ca809f59ca3118244ce86480cd5060be206c07ad8564f8e5f557a38f165a0f49211058bd7ad31839835180bbbb5cc4a9da0afe8df91569e701e9a9c9ba59e7b4
+  languageName: node
+  linkType: hard
+
+"@algolia/client-analytics@npm:4.19.1":
+  version: 4.19.1
+  resolution: "@algolia/client-analytics@npm:4.19.1"
+  dependencies:
+    "@algolia/client-common": "npm:4.19.1"
+    "@algolia/client-search": "npm:4.19.1"
+    "@algolia/requester-common": "npm:4.19.1"
+    "@algolia/transporter": "npm:4.19.1"
+  checksum: 10c0/a618d252e06cfa6b16f9d3ac887c07d81c4eb84060e51501300fbff0c81c37325d0b847ec99959239b24575c0ceb8409f16fad69b703015271a9f1c7796c88ba
+  languageName: node
+  linkType: hard
+
+"@algolia/client-common@npm:4.19.1":
+  version: 4.19.1
+  resolution: "@algolia/client-common@npm:4.19.1"
+  dependencies:
+    "@algolia/requester-common": "npm:4.19.1"
+    "@algolia/transporter": "npm:4.19.1"
+  checksum: 10c0/17a330c70a32c08b4fc778c309a53e7c1e4a5273555f764fe1952e5a6db334eb5a7d777cd35b00ab510a3e1e6cf239f93b1911d23aa498ef9672d473ee6ab360
+  languageName: node
+  linkType: hard
+
+"@algolia/client-personalization@npm:4.19.1":
+  version: 4.19.1
+  resolution: "@algolia/client-personalization@npm:4.19.1"
+  dependencies:
+    "@algolia/client-common": "npm:4.19.1"
+    "@algolia/requester-common": "npm:4.19.1"
+    "@algolia/transporter": "npm:4.19.1"
+  checksum: 10c0/3691a264568f3ca130c996e34ce1e3006117a940a98bbe3340c4cced8786c1ae4209bf0cd5c178a21f0c3c912d3876c6977b4b76ec44d452666ad5bb90facf6b
+  languageName: node
+  linkType: hard
+
+"@algolia/client-search@npm:4.19.1":
+  version: 4.19.1
+  resolution: "@algolia/client-search@npm:4.19.1"
+  dependencies:
+    "@algolia/client-common": "npm:4.19.1"
+    "@algolia/requester-common": "npm:4.19.1"
+    "@algolia/transporter": "npm:4.19.1"
+  checksum: 10c0/d062ed6ce1359ee513e076afe928241cc932f7ea6a7dc317361aa502fcd2c08d253d9dd25c28ed03afb86c69e37ef1a7b9b4d5926e87278ac2b9ed6e4ee350dd
+  languageName: node
+  linkType: hard
+
+"@algolia/logger-common@npm:4.19.1":
+  version: 4.19.1
+  resolution: "@algolia/logger-common@npm:4.19.1"
+  checksum: 10c0/26b5cfb7116971f73be792be475e743a6ac69f58726fd29376382a7b0d1b4aefeafbcff505a1f780b176e003b955e9a2ee455807eecaed2626418ba5dbc156f1
+  languageName: node
+  linkType: hard
+
+"@algolia/logger-console@npm:4.19.1":
+  version: 4.19.1
+  resolution: "@algolia/logger-console@npm:4.19.1"
+  dependencies:
+    "@algolia/logger-common": "npm:4.19.1"
+  checksum: 10c0/2992eca07ee1d2c527dc1e60eb51bcc90a38769c76ce484c3a294db60b1382ae2b3c9ee7618b04d52b029ca7169ffc69f7aaa4e07a7ce0616e32878cd0c0cd19
+  languageName: node
+  linkType: hard
+
+"@algolia/requester-browser-xhr@npm:4.19.1":
+  version: 4.19.1
+  resolution: "@algolia/requester-browser-xhr@npm:4.19.1"
+  dependencies:
+    "@algolia/requester-common": "npm:4.19.1"
+  checksum: 10c0/98602ad54dc2fdf2c5dce00886cbef2c0b629d9beff147f651821301c63bd49bb27ce9cd4cd2c810a503b7569f245ac910daa2b954a3489d936aa799ff8e5163
+  languageName: node
+  linkType: hard
+
+"@algolia/requester-common@npm:4.19.1":
+  version: 4.19.1
+  resolution: "@algolia/requester-common@npm:4.19.1"
+  checksum: 10c0/d61a765dd23a2c0abc79c786c45bcd26f03f18fd2be1ea5a119105981e1bd15a1f4fe3234d320f421b5b73c8459e1e3f1e5c2afd8dd79bddfdec1282a9a1c5d9
+  languageName: node
+  linkType: hard
+
+"@algolia/requester-node-http@npm:4.19.1":
+  version: 4.19.1
+  resolution: "@algolia/requester-node-http@npm:4.19.1"
+  dependencies:
+    "@algolia/requester-common": "npm:4.19.1"
+  checksum: 10c0/3856f1e7afba99cd218fbcaccd919259f91cbb09c32a294b2f63ba6623e75fdafd4d99e40ea057ec0d2c5a46c92edbf4e07c301d982669ed0729edc7d0f9009a
+  languageName: node
+  linkType: hard
+
+"@algolia/transporter@npm:4.19.1":
+  version: 4.19.1
+  resolution: "@algolia/transporter@npm:4.19.1"
+  dependencies:
+    "@algolia/cache-common": "npm:4.19.1"
+    "@algolia/logger-common": "npm:4.19.1"
+    "@algolia/requester-common": "npm:4.19.1"
+  checksum: 10c0/0d0badfd996b6b42a162e67f13a2e3a1396b7f88fe2136e0e32a2d8adb123a06343537b058903b88f27b0702ce35cd172c3009bc159db79406ead35ad8f25010
+  languageName: node
+  linkType: hard
+
 "@alloc/quick-lru@npm:^5.2.0":
   version: 5.2.0
   resolution: "@alloc/quick-lru@npm:5.2.0"
@@ -12322,6 +12454,15 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@vitest/pretty-format@npm:4.1.8":
+  version: 4.1.8
+  resolution: "@vitest/pretty-format@npm:4.1.8"
+  dependencies:
+    tinyrainbow: "npm:^3.1.0"
+  checksum: 10c0/553c456692a4b9ae13cd116c234c74b4495e0f1a0d5c51ffc3fab8ea085e3550769967e29db79bdac0cf127b1bf88b7f70bfba3dcc72be6bddf834433e30cc91
+  languageName: node
+  linkType: hard
+
 "@vitest/runner@npm:4.1.5":
   version: 4.1.5
   resolution: "@vitest/runner@npm:4.1.5"
@@ -12332,6 +12473,16 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@vitest/runner@npm:4.1.8":
+  version: 4.1.8
+  resolution: "@vitest/runner@npm:4.1.8"
+  dependencies:
+    "@vitest/utils": "npm:4.1.8"
+    pathe: "npm:^2.0.3"
+  checksum: 10c0/706808a4b7b95ea9a9268fc152dd39e15a9a754f37c7990aea167486a9094caa913dae454771ae02c18dccfabd667f8cc38eed33a1307a79d32a89878b5bcce1
+  languageName: node
+  linkType: hard
+
 "@vitest/snapshot@npm:4.1.5":
   version: 4.1.5
   resolution: "@vitest/snapshot@npm:4.1.5"
@@ -12344,6 +12495,18 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@vitest/snapshot@npm:4.1.8":
+  version: 4.1.8
+  resolution: "@vitest/snapshot@npm:4.1.8"
+  dependencies:
+    "@vitest/pretty-format": "npm:4.1.8"
+    "@vitest/utils": "npm:4.1.8"
+    magic-string: "npm:^0.30.21"
+    pathe: "npm:^2.0.3"
+  checksum: 10c0/ba4c32112491d42d24986f921c50ede5edbdb4b7eafa16c72cf8d2c9ecc44121fdb3d9365236747a9841f0d6776affc6457470fcbb082df9dbc28c24792a0c6d
+  languageName: node
+  linkType: hard
+
 "@vitest/spy@npm:4.1.5":
   version: 4.1.5
   resolution: "@vitest/spy@npm:4.1.5"
@@ -12362,6 +12525,17 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@vitest/utils@npm:4.1.8":
+  version: 4.1.8
+  resolution: "@vitest/utils@npm:4.1.8"
+  dependencies:
+    "@vitest/pretty-format": "npm:4.1.8"
+    convert-source-map: "npm:^2.0.0"
+    tinyrainbow: "npm:^3.1.0"
+  checksum: 10c0/acda9d3d640c1ebc81afb358ac30589d7d7d583af81e2d09419f0af9cbe41f3ce0b90527326943bf0da51614be5fc31afcd32259f6beb32b3417999d6ef380f3
+  languageName: node
+  linkType: hard
+
 "@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1":
   version: 1.14.1
   resolution: "@webassemblyjs/ast@npm:1.14.1"
@@ -12878,6 +13052,28 @@ __metadata:
   languageName: node
   linkType: hard
 
+"algoliasearch@npm:4.19.1":
+  version: 4.19.1
+  resolution: "algoliasearch@npm:4.19.1"
+  dependencies:
+    "@algolia/cache-browser-local-storage": "npm:4.19.1"
+    "@algolia/cache-common": "npm:4.19.1"
+    "@algolia/cache-in-memory": "npm:4.19.1"
+    "@algolia/client-account": "npm:4.19.1"
+    "@algolia/client-analytics": "npm:4.19.1"
+    "@algolia/client-common": "npm:4.19.1"
+    "@algolia/client-personalization": "npm:4.19.1"
+    "@algolia/client-search": "npm:4.19.1"
+    "@algolia/logger-common": "npm:4.19.1"
+    "@algolia/logger-console": "npm:4.19.1"
+    "@algolia/requester-browser-xhr": "npm:4.19.1"
+    "@algolia/requester-common": "npm:4.19.1"
+    "@algolia/requester-node-http": "npm:4.19.1"
+    "@algolia/transporter": "npm:4.19.1"
+  checksum: 10c0/f88f08113e0e852daf3613d1cf35d166aafcbd1505c0c8ef4f04e1041cf51240e463b22a900b9fb7b6fb5b4567159c8368a3c794e95c7ea26ae7f83d56069f83
+  languageName: node
+  linkType: hard
+
 "algoliasearch@npm:^3.35.1":
   version: 3.35.1
   resolution: "algoliasearch@npm:3.35.1"
@@ -14622,6 +14818,17 @@ __metadata:
   languageName: node
   linkType: hard
 
+"chai-as-promised@npm:^8.0.2":
+  version: 8.0.2
+  resolution: "chai-as-promised@npm:8.0.2"
+  dependencies:
+    check-error: "npm:^2.1.1"
+  peerDependencies:
+    chai: ">= 2.1.2 < 7"
+  checksum: 10c0/829bcd98c04f0b108b2f7379efd33c668e53fbf0bda8d460dc63c96a709fd5de79909392aa78b4256de16a4d57640641d7affc516111e371d6e9f6aec1cc6c8a
+  languageName: node
+  linkType: hard
+
 "chai-exclude@npm:^2.0.3, chai-exclude@npm:^2.1.1":
   version: 2.1.1
   resolution: "chai-exclude@npm:2.1.1"
@@ -14799,6 +15006,13 @@ __metadata:
   languageName: node
   linkType: hard
 
+"check-error@npm:^2.1.1":
+  version: 2.1.3
+  resolution: "check-error@npm:2.1.3"
+  checksum: 10c0/878e99038fb6476316b74668cd6a498c7e66df3efe48158fa40db80a06ba4258742ac3ee2229c4a2a98c5e73f5dff84eb3e50ceb6b65bbd8f831eafc8338607d
+  languageName: node
+  linkType: hard
+
 "check-types@npm:^11.1.2":
   version: 11.2.3
   resolution: "check-types@npm:11.2.3"
@@ -33980,6 +34194,74 @@ __metadata:
   languageName: node
   linkType: hard
 
+"vitest@npm:^4.0.0":
+  version: 4.1.8
+  resolution: "vitest@npm:4.1.8"
+  dependencies:
+    "@vitest/expect": "npm:4.1.8"
+    "@vitest/mocker": "npm:4.1.8"
+    "@vitest/pretty-format": "npm:4.1.8"
+    "@vitest/runner": "npm:4.1.8"
+    "@vitest/snapshot": "npm:4.1.8"
+    "@vitest/spy": "npm:4.1.8"
+    "@vitest/utils": "npm:4.1.8"
+    es-module-lexer: "npm:^2.0.0"
+    expect-type: "npm:^1.3.0"
+    magic-string: "npm:^0.30.21"
+    obug: "npm:^2.1.1"
+    pathe: "npm:^2.0.3"
+    picomatch: "npm:^4.0.3"
+    std-env: "npm:^4.0.0-rc.1"
+    tinybench: "npm:^2.9.0"
+    tinyexec: "npm:^1.0.2"
+    tinyglobby: "npm:^0.2.15"
+    tinyrainbow: "npm:^3.1.0"
+    vite: "npm:^6.0.0 || ^7.0.0 || ^8.0.0"
+    why-is-node-running: "npm:^2.3.0"
+  peerDependencies:
+    "@edge-runtime/vm": "*"
+    "@opentelemetry/api": ^1.9.0
+    "@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0
+    "@vitest/browser-playwright": 4.1.8
+    "@vitest/browser-preview": 4.1.8
+    "@vitest/browser-webdriverio": 4.1.8
+    "@vitest/coverage-istanbul": 4.1.8
+    "@vitest/coverage-v8": 4.1.8
+    "@vitest/ui": 4.1.8
+    happy-dom: "*"
+    jsdom: "*"
+    vite: ^6.0.0 || ^7.0.0 || ^8.0.0
+  peerDependenciesMeta:
+    "@edge-runtime/vm":
+      optional: true
+    "@opentelemetry/api":
+      optional: true
+    "@types/node":
+      optional: true
+    "@vitest/browser-playwright":
+      optional: true
+    "@vitest/browser-preview":
+      optional: true
+    "@vitest/browser-webdriverio":
+      optional: true
+    "@vitest/coverage-istanbul":
+      optional: true
+    "@vitest/coverage-v8":
+      optional: true
+    "@vitest/ui":
+      optional: true
+    happy-dom:
+      optional: true
+    jsdom:
+      optional: true
+    vite:
+      optional: false
+  bin:
+    vitest: vitest.mjs
+  checksum: 10c0/f459c500f8818c7a2318cd23228b4e5c0b5efb25bf8e5cb7f116c6d26e51482b2f800a8bb19837c0b5f0d05c51519edbf502bc8ceb5bd86868e8facf1d2c498e
+  languageName: node
+  linkType: hard
+
 "void-elements@npm:3.1.0, void-elements@npm:^3.1.0":
   version: 3.1.0
   resolution: "void-elements@npm:3.1.0"
@@ -34512,6 +34794,18 @@ __metadata:
   languageName: node
   linkType: hard
 
+"wiki-algolia@workspace:jobs/wiki-algolia":
+  version: 0.0.0-use.local
+  resolution: "wiki-algolia@workspace:jobs/wiki-algolia"
+  dependencies:
+    algoliasearch: "npm:4.19.1"
+    chai-as-promised: "npm:^8.0.2"
+    lodash: "npm:^4.18.1"
+    sanitize-html: "npm:^2.17.4"
+    vitest: "npm:^4.0.0"
+  languageName: unknown
+  linkType: soft
+
 "wildcard@npm:^1.1.0":
   version: 1.1.2
   resolution: "wildcard@npm:1.1.2"