Просмотр исходного кода

Merge pull request #29659 from overleaf/revert-29656-revert-29521-ar-models-es-conversion

Revert "Revert "[web] Convert models and self-referential test files to ESM ""

GitOrigin-RevId: f64000ae31d298b075a8722dfc51f294c71bc021
Andrew Rumble 8 месяцев назад
Родитель
Сommit
394c60f2cf
100 измененных файлов с 231 добавлено и 245 удалено
  1. 1 1
      services/web/app/src/Features/Authentication/AuthenticationController.mjs
  2. 3 3
      services/web/app/src/Features/Authentication/AuthenticationManager.mjs
  3. 1 1
      services/web/app/src/Features/Authorization/AuthorizationManager.mjs
  4. 1 1
      services/web/app/src/Features/Captcha/CaptchaMiddleware.mjs
  5. 1 1
      services/web/app/src/Features/Collaborators/CollaboratorsEmailHandler.mjs
  6. 1 1
      services/web/app/src/Features/Collaborators/CollaboratorsGetter.mjs
  7. 1 1
      services/web/app/src/Features/Collaborators/CollaboratorsHandler.mjs
  8. 1 1
      services/web/app/src/Features/Collaborators/CollaboratorsInviteController.mjs
  9. 1 1
      services/web/app/src/Features/Collaborators/CollaboratorsInviteGetter.mjs
  10. 1 1
      services/web/app/src/Features/Collaborators/CollaboratorsInviteHandler.mjs
  11. 1 1
      services/web/app/src/Features/Collaborators/OwnershipTransferHandler.mjs
  12. 4 4
      services/web/app/src/Features/Cooldown/CooldownManager.mjs
  13. 1 1
      services/web/app/src/Features/Cooldown/CooldownMiddleware.mjs
  14. 1 1
      services/web/app/src/Features/FileStore/FileStoreHandler.mjs
  15. 1 1
      services/web/app/src/Features/GlobalMetrics/GlobalMetricsManager.mjs
  16. 1 1
      services/web/app/src/Features/Helpers/AuthorizationHelper.mjs
  17. 2 2
      services/web/app/src/Features/Helpers/DiffHelper.mjs
  18. 4 2
      services/web/app/src/Features/Helpers/EmailHelper.mjs
  19. 1 1
      services/web/app/src/Features/InactiveData/InactiveProjectManager.mjs
  20. 2 2
      services/web/app/src/Features/Institutions/InstitutionsManager.mjs
  21. 1 1
      services/web/app/src/Features/LinkedFiles/LinkedFilesHandler.mjs
  22. 1 1
      services/web/app/src/Features/OnboardingDataCollection/OnboardingDataCollectionManager.mjs
  23. 1 1
      services/web/app/src/Features/PasswordReset/PasswordResetController.mjs
  24. 1 1
      services/web/app/src/Features/PasswordReset/PasswordResetHandler.mjs
  25. 1 5
      services/web/app/src/Features/Project/IterablePath.mjs
  26. 1 1
      services/web/app/src/Features/Project/ProjectAuditLogHandler.mjs
  27. 1 1
      services/web/app/src/Features/Project/ProjectCollabratecDetailsHandler.mjs
  28. 3 2
      services/web/app/src/Features/Project/ProjectController.mjs
  29. 3 3
      services/web/app/src/Features/Project/ProjectCreationHandler.mjs
  30. 3 3
      services/web/app/src/Features/Project/ProjectDeleter.mjs
  31. 1 1
      services/web/app/src/Features/Project/ProjectDetailsHandler.mjs
  32. 2 2
      services/web/app/src/Features/Project/ProjectDuplicator.mjs
  33. 1 1
      services/web/app/src/Features/Project/ProjectEntityHandler.mjs
  34. 4 4
      services/web/app/src/Features/Project/ProjectEntityMongoUpdateHandler.mjs
  35. 3 3
      services/web/app/src/Features/Project/ProjectEntityUpdateHandler.mjs
  36. 2 2
      services/web/app/src/Features/Project/ProjectGetter.mjs
  37. 1 1
      services/web/app/src/Features/Project/ProjectHistoryHandler.mjs
  38. 3 3
      services/web/app/src/Features/Project/ProjectListController.mjs
  39. 1 1
      services/web/app/src/Features/Project/ProjectLocator.mjs
  40. 1 1
      services/web/app/src/Features/Project/ProjectOptionsHandler.mjs
  41. 1 1
      services/web/app/src/Features/Project/ProjectUpdateHandler.mjs
  42. 1 1
      services/web/app/src/Features/Referal/ReferalAllocator.mjs
  43. 1 1
      services/web/app/src/Features/Referal/ReferalFeatures.mjs
  44. 1 1
      services/web/app/src/Features/Referal/ReferalHandler.mjs
  45. 1 1
      services/web/app/src/Features/SamlLog/SamlLogHandler.mjs
  46. 5 5
      services/web/app/src/Features/Security/OneTimeTokenHandler.mjs
  47. 1 1
      services/web/app/src/Features/SplitTests/SplitTestHandler.mjs
  48. 1 1
      services/web/app/src/Features/SplitTests/SplitTestManager.mjs
  49. 1 1
      services/web/app/src/Features/Subscription/FeaturesUpdater.mjs
  50. 1 1
      services/web/app/src/Features/Subscription/PaymentProviderEntities.mjs
  51. 2 2
      services/web/app/src/Features/Subscription/SubscriptionController.mjs
  52. 1 1
      services/web/app/src/Features/Subscription/SubscriptionGroupController.mjs
  53. 4 4
      services/web/app/src/Features/Subscription/SubscriptionGroupHandler.mjs
  54. 2 2
      services/web/app/src/Features/Subscription/SubscriptionHandler.mjs
  55. 6 6
      services/web/app/src/Features/Subscription/SubscriptionHelper.mjs
  56. 3 3
      services/web/app/src/Features/Subscription/SubscriptionLocator.mjs
  57. 3 3
      services/web/app/src/Features/Subscription/SubscriptionUpdater.mjs
  58. 1 1
      services/web/app/src/Features/Subscription/SubscriptionViewModelBuilder.mjs
  59. 2 2
      services/web/app/src/Features/Subscription/TeamInvitesController.mjs
  60. 3 3
      services/web/app/src/Features/Subscription/TeamInvitesHandler.mjs
  61. 1 1
      services/web/app/src/Features/Subscription/UserFeaturesUpdater.mjs
  62. 1 1
      services/web/app/src/Features/Survey/SurveyCache.mjs
  63. 1 1
      services/web/app/src/Features/Survey/SurveyManager.mjs
  64. 1 1
      services/web/app/src/Features/SystemMessages/SystemMessageManager.mjs
  65. 1 1
      services/web/app/src/Features/Tags/TagsHandler.mjs
  66. 1 1
      services/web/app/src/Features/Templates/TemplatesManager.mjs
  67. 1 1
      services/web/app/src/Features/ThirdPartyDataStore/TpdsProjectFlusher.mjs
  68. 1 1
      services/web/app/src/Features/ThirdPartyDataStore/TpdsUpdateHandler.mjs
  69. 1 1
      services/web/app/src/Features/TokenAccess/TokenAccessHandler.mjs
  70. 1 1
      services/web/app/src/Features/Uploads/ProjectUploadManager.mjs
  71. 1 1
      services/web/app/src/Features/User/SAMLIdentityManager.mjs
  72. 1 1
      services/web/app/src/Features/User/ThirdPartyIdentityManager.mjs
  73. 1 1
      services/web/app/src/Features/User/UserAuditLogHandler.mjs
  74. 2 2
      services/web/app/src/Features/User/UserController.mjs
  75. 1 1
      services/web/app/src/Features/User/UserCreator.mjs
  76. 4 4
      services/web/app/src/Features/User/UserDeleter.mjs
  77. 2 2
      services/web/app/src/Features/User/UserEmailsConfirmationHandler.mjs
  78. 1 1
      services/web/app/src/Features/User/UserEmailsController.mjs
  79. 1 1
      services/web/app/src/Features/User/UserGetter.mjs
  80. 3 3
      services/web/app/src/Features/User/UserRegistrationHandler.mjs
  81. 1 1
      services/web/app/src/Features/User/UserUpdater.mjs
  82. 2 2
      services/web/app/src/Features/UserMembership/UserMembershipController.mjs
  83. 3 3
      services/web/app/src/Features/UserMembership/UserMembershipHandler.mjs
  84. 3 3
      services/web/app/src/Features/UserMembership/UserMembershipsHandler.mjs
  85. 7 5
      services/web/app/src/models/DeletedProject.mjs
  86. 4 6
      services/web/app/src/models/DeletedSubscription.mjs
  87. 4 6
      services/web/app/src/models/DeletedUser.mjs
  88. 0 14
      services/web/app/src/models/Doc.js
  89. 12 0
      services/web/app/src/models/Doc.mjs
  90. 2 2
      services/web/app/src/models/DocSnapshot.mjs
  91. 3 4
      services/web/app/src/models/Feedback.mjs
  92. 3 4
      services/web/app/src/models/File.mjs
  93. 0 21
      services/web/app/src/models/Folder.js
  94. 20 0
      services/web/app/src/models/Folder.mjs
  95. 0 19
      services/web/app/src/models/GlobalMetric.js
  96. 18 0
      services/web/app/src/models/GlobalMetric.mjs
  97. 3 4
      services/web/app/src/models/GroupAuditLogEntry.mjs
  98. 3 4
      services/web/app/src/models/GroupPolicy.mjs
  99. 7 8
      services/web/app/src/models/Institution.mjs
  100. 3 5
      services/web/app/src/models/OauthAccessToken.mjs

+ 1 - 1
services/web/app/src/Features/Authentication/AuthenticationController.mjs

@@ -24,7 +24,7 @@ import AdminAuthorizationHelper from '../Helpers/AdminAuthorizationHelper.mjs'
 import Modules from '../../infrastructure/Modules.js'
 import Modules from '../../infrastructure/Modules.js'
 import { expressify, promisify } from '@overleaf/promise-utils'
 import { expressify, promisify } from '@overleaf/promise-utils'
 import { handleAuthenticateErrors } from './AuthenticationErrors.js'
 import { handleAuthenticateErrors } from './AuthenticationErrors.js'
-import EmailHelper from '../Helpers/EmailHelper.js'
+import EmailHelper from '../Helpers/EmailHelper.mjs'
 
 
 const { hasAdminAccess } = AdminAuthorizationHelper
 const { hasAdminAccess } = AdminAuthorizationHelper
 
 

+ 3 - 3
services/web/app/src/Features/Authentication/AuthenticationManager.mjs

@@ -1,8 +1,8 @@
 import Settings from '@overleaf/settings'
 import Settings from '@overleaf/settings'
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import { db, ObjectId } from '../../infrastructure/mongodb.js'
 import { db, ObjectId } from '../../infrastructure/mongodb.js'
 import bcrypt from 'bcrypt'
 import bcrypt from 'bcrypt'
-import EmailHelper from '../Helpers/EmailHelper.js'
+import EmailHelper from '../Helpers/EmailHelper.mjs'
 
 
 import {
 import {
   InvalidEmailError,
   InvalidEmailError,
@@ -16,7 +16,7 @@ import { callbackify, callbackifyMultiResult } from '@overleaf/promise-utils'
 import HaveIBeenPwned from './HaveIBeenPwned.mjs'
 import HaveIBeenPwned from './HaveIBeenPwned.mjs'
 import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
 import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
-import DiffHelper from '../Helpers/DiffHelper.js'
+import DiffHelper from '../Helpers/DiffHelper.mjs'
 import Metrics from '@overleaf/metrics'
 import Metrics from '@overleaf/metrics'
 
 
 const BCRYPT_ROUNDS = Settings.security.bcryptRounds || 12
 const BCRYPT_ROUNDS = Settings.security.bcryptRounds || 12

+ 1 - 1
services/web/app/src/Features/Authorization/AuthorizationManager.mjs

@@ -4,7 +4,7 @@ import Features from '../../infrastructure/Features.js'
 import CollaboratorsGetter from '../Collaborators/CollaboratorsGetter.mjs'
 import CollaboratorsGetter from '../Collaborators/CollaboratorsGetter.mjs'
 import CollaboratorsHandler from '../Collaborators/CollaboratorsHandler.mjs'
 import CollaboratorsHandler from '../Collaborators/CollaboratorsHandler.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import PrivilegeLevels from './PrivilegeLevels.js'
 import PrivilegeLevels from './PrivilegeLevels.js'
 import TokenAccessHandler from '../TokenAccess/TokenAccessHandler.mjs'
 import TokenAccessHandler from '../TokenAccess/TokenAccessHandler.mjs'
 import PublicAccessLevels from './PublicAccessLevels.mjs'
 import PublicAccessLevels from './PublicAccessLevels.mjs'

+ 1 - 1
services/web/app/src/Features/Captcha/CaptchaMiddleware.mjs

@@ -6,7 +6,7 @@ import OError from '@overleaf/o-error'
 import DeviceHistory from './DeviceHistory.mjs'
 import DeviceHistory from './DeviceHistory.mjs'
 import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import AuthenticationController from '../Authentication/AuthenticationController.mjs'
 import { expressify } from '@overleaf/promise-utils'
 import { expressify } from '@overleaf/promise-utils'
-import EmailsHelper from '../Helpers/EmailHelper.js'
+import EmailsHelper from '../Helpers/EmailHelper.mjs'
 
 
 function respondInvalidCaptcha(req, res) {
 function respondInvalidCaptcha(req, res) {
   res.status(400).json({
   res.status(400).json({

+ 1 - 1
services/web/app/src/Features/Collaborators/CollaboratorsEmailHandler.mjs

@@ -1,5 +1,5 @@
 import { callbackify } from 'node:util'
 import { callbackify } from 'node:util'
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
 import Settings from '@overleaf/settings'
 import Settings from '@overleaf/settings'
 
 

+ 1 - 1
services/web/app/src/Features/Collaborators/CollaboratorsGetter.mjs

@@ -4,7 +4,7 @@ import { callbackify } from 'node:util'
 import pLimit from 'p-limit'
 import pLimit from 'p-limit'
 import mongodb from 'mongodb-legacy'
 import mongodb from 'mongodb-legacy'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import PublicAccessLevels from '../Authorization/PublicAccessLevels.mjs'
 import PublicAccessLevels from '../Authorization/PublicAccessLevels.mjs'

+ 1 - 1
services/web/app/src/Features/Collaborators/CollaboratorsHandler.mjs

@@ -1,6 +1,6 @@
 import { callbackify } from 'node:util'
 import { callbackify } from 'node:util'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 import ContactManager from '../Contacts/ContactManager.mjs'
 import ContactManager from '../Contacts/ContactManager.mjs'

+ 1 - 1
services/web/app/src/Features/Collaborators/CollaboratorsInviteController.mjs

@@ -6,7 +6,7 @@ import CollaboratorsInviteHandler from './CollaboratorsInviteHandler.mjs'
 import CollaboratorsInviteGetter from './CollaboratorsInviteGetter.mjs'
 import CollaboratorsInviteGetter from './CollaboratorsInviteGetter.mjs'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 import Settings from '@overleaf/settings'
 import Settings from '@overleaf/settings'
-import EmailHelper from '../Helpers/EmailHelper.js'
+import EmailHelper from '../Helpers/EmailHelper.mjs'
 import EditorRealTimeController from '../Editor/EditorRealTimeController.mjs'
 import EditorRealTimeController from '../Editor/EditorRealTimeController.mjs'
 import AnalyticsManager from '../Analytics/AnalyticsManager.mjs'
 import AnalyticsManager from '../Analytics/AnalyticsManager.mjs'
 import SessionManager from '../Authentication/SessionManager.mjs'
 import SessionManager from '../Authentication/SessionManager.mjs'

+ 1 - 1
services/web/app/src/Features/Collaborators/CollaboratorsInviteGetter.mjs

@@ -1,5 +1,5 @@
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
-import { ProjectInvite } from '../../models/ProjectInvite.js'
+import { ProjectInvite } from '../../models/ProjectInvite.mjs'
 import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
 import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
 import CollaboratorsInviteHelper from './CollaboratorsInviteHelper.mjs'
 import CollaboratorsInviteHelper from './CollaboratorsInviteHelper.mjs'
 
 

+ 1 - 1
services/web/app/src/Features/Collaborators/CollaboratorsInviteHandler.mjs

@@ -1,5 +1,5 @@
 import { callbackify } from 'node:util'
 import { callbackify } from 'node:util'
-import { ProjectInvite } from '../../models/ProjectInvite.js'
+import { ProjectInvite } from '../../models/ProjectInvite.mjs'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 import CollaboratorsEmailHandler from './CollaboratorsEmailHandler.mjs'
 import CollaboratorsEmailHandler from './CollaboratorsEmailHandler.mjs'
 import CollaboratorsHandler from './CollaboratorsHandler.mjs'
 import CollaboratorsHandler from './CollaboratorsHandler.mjs'

+ 1 - 1
services/web/app/src/Features/Collaborators/OwnershipTransferHandler.mjs

@@ -1,5 +1,5 @@
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import CollaboratorsHandler from './CollaboratorsHandler.mjs'
 import CollaboratorsHandler from './CollaboratorsHandler.mjs'

+ 4 - 4
services/web/app/src/Features/Cooldown/CooldownManager.js → services/web/app/src/Features/Cooldown/CooldownManager.mjs

@@ -1,7 +1,7 @@
-const RedisWrapper = require('../../infrastructure/RedisWrapper')
+import RedisWrapper from '../../infrastructure/RedisWrapper.js'
+import logger from '@overleaf/logger'
+import { promisify } from '@overleaf/promise-utils'
 const rclient = RedisWrapper.client('cooldown')
 const rclient = RedisWrapper.client('cooldown')
-const logger = require('@overleaf/logger')
-const { promisify } = require('@overleaf/promise-utils')
 
 
 const COOLDOWN_IN_SECONDS = 60 * 10
 const COOLDOWN_IN_SECONDS = 60 * 10
 
 
@@ -45,4 +45,4 @@ CooldownManager.promises = {
   isProjectOnCooldown: promisify(CooldownManager.isProjectOnCooldown),
   isProjectOnCooldown: promisify(CooldownManager.isProjectOnCooldown),
 }
 }
 
 
-module.exports = CooldownManager
+export default CooldownManager

+ 1 - 1
services/web/app/src/Features/Cooldown/CooldownMiddleware.mjs

@@ -10,7 +10,7 @@
  * DS207: Consider shorter variations of null checks
  * DS207: Consider shorter variations of null checks
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  */
  */
-import CooldownManager from './CooldownManager.js'
+import CooldownManager from './CooldownManager.mjs'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 
 
 let CooldownMiddleware
 let CooldownMiddleware

+ 1 - 1
services/web/app/src/Features/FileStore/FileStoreHandler.mjs

@@ -4,7 +4,7 @@ import Async from 'async'
 import FileHashManager from './FileHashManager.mjs'
 import FileHashManager from './FileHashManager.mjs'
 import HistoryManager from '../History/HistoryManager.mjs'
 import HistoryManager from '../History/HistoryManager.mjs'
 import ProjectDetailsHandler from '../Project/ProjectDetailsHandler.mjs'
 import ProjectDetailsHandler from '../Project/ProjectDetailsHandler.mjs'
-import { File } from '../../models/File.js'
+import { File } from '../../models/File.mjs'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
 import { promisifyAll } from '@overleaf/promise-utils'
 import { promisifyAll } from '@overleaf/promise-utils'
 import Modules from '../../infrastructure/Modules.js'
 import Modules from '../../infrastructure/Modules.js'

+ 1 - 1
services/web/app/src/Features/GlobalMetrics/GlobalMetricsManager.mjs

@@ -1,4 +1,4 @@
-import { GlobalMetric } from '../../models/GlobalMetric.js'
+import { GlobalMetric } from '../../models/GlobalMetric.mjs'
 /**
 /**
  * A Generic collection used to track metrics shared across the entirety of the application
  * A Generic collection used to track metrics shared across the entirety of the application
  * examples:
  * examples:

+ 1 - 1
services/web/app/src/Features/Helpers/AuthorizationHelper.mjs

@@ -1,4 +1,4 @@
-import { UserSchema } from '../../models/User.js'
+import { UserSchema } from '../../models/User.mjs'
 
 
 export default {
 export default {
   hasAnyStaffAccess,
   hasAnyStaffAccess,

+ 2 - 2
services/web/app/src/Features/Helpers/DiffHelper.js → services/web/app/src/Features/Helpers/DiffHelper.mjs

@@ -17,7 +17,7 @@ function _calculateRatio(matches, length) {
  * corresponding (approximatey) to the overlap between the strings.
  * corresponding (approximatey) to the overlap between the strings.
  * Identical strings produce 1.0, completely different strings produce 0.0
  * Identical strings produce 1.0, completely different strings produce 0.0
  * */
  * */
-function stringSimilarity(a, b) {
+export function stringSimilarity(a, b) {
   if (
   if (
     typeof a !== 'string' ||
     typeof a !== 'string' ||
     typeof b !== 'string' ||
     typeof b !== 'string' ||
@@ -50,6 +50,6 @@ function stringSimilarity(a, b) {
   return _calculateRatio(matches, a.length + b.length)
   return _calculateRatio(matches, a.length + b.length)
 }
 }
 
 
-module.exports = {
+export default {
   stringSimilarity,
   stringSimilarity,
 }
 }

+ 4 - 2
services/web/app/src/Features/Helpers/EmailHelper.js → services/web/app/src/Features/Helpers/EmailHelper.mjs

@@ -1,4 +1,6 @@
-const { parseOneAddress } = require('email-addresses')
+import emailAddresses from 'email-addresses'
+
+const { parseOneAddress } = emailAddresses
 
 
 // available for frontend in https://github.com/overleaf/internal/blob/19d432c70b173752ee7c6d8978dd6be16b042921/services/web/frontend/js/shared/utils/email.tsx#L4
 // available for frontend in https://github.com/overleaf/internal/blob/19d432c70b173752ee7c6d8978dd6be16b042921/services/web/frontend/js/shared/utils/email.tsx#L4
 const EMAIL_REGEXP =
 const EMAIL_REGEXP =
@@ -36,7 +38,7 @@ function parseEmail(email, parseRfcAddress = false) {
   return matched[0]
   return matched[0]
 }
 }
 
 
-module.exports = {
+export default {
   getDomain,
   getDomain,
   parseEmail,
   parseEmail,
 }
 }

+ 1 - 1
services/web/app/src/Features/InactiveData/InactiveProjectManager.mjs

@@ -4,7 +4,7 @@ import DocstoreManager from '../Docstore/DocstoreManager.mjs'
 import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectUpdateHandler from '../Project/ProjectUpdateHandler.mjs'
 import ProjectUpdateHandler from '../Project/ProjectUpdateHandler.mjs'
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import Modules from '../../infrastructure/Modules.js'
 import Modules from '../../infrastructure/Modules.js'
 import { READ_PREFERENCE_SECONDARY } from '../../infrastructure/mongodb.js'
 import { READ_PREFERENCE_SECONDARY } from '../../infrastructure/mongodb.js'
 import { callbackifyAll } from '@overleaf/promise-utils'
 import { callbackifyAll } from '@overleaf/promise-utils'

+ 2 - 2
services/web/app/src/Features/Institutions/InstitutionsManager.mjs

@@ -10,8 +10,8 @@ import UserGetter from '../User/UserGetter.mjs'
 import NotificationsBuilder from '../Notifications/NotificationsBuilder.mjs'
 import NotificationsBuilder from '../Notifications/NotificationsBuilder.mjs'
 import NotificationsHandler from '../Notifications/NotificationsHandler.mjs'
 import NotificationsHandler from '../Notifications/NotificationsHandler.mjs'
 import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
 import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
-import { Institution } from '../../models/Institution.js'
-import { Subscription } from '../../models/Subscription.js'
+import { Institution } from '../../models/Institution.mjs'
+import { Subscription } from '../../models/Subscription.mjs'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
 
 
 const { ObjectId } = mongodb
 const { ObjectId } = mongodb

+ 1 - 1
services/web/app/src/Features/LinkedFiles/LinkedFilesHandler.mjs

@@ -1,7 +1,7 @@
 import FileWriter from '../../infrastructure/FileWriter.js'
 import FileWriter from '../../infrastructure/FileWriter.js'
 import EditorController from '../Editor/EditorController.mjs'
 import EditorController from '../Editor/EditorController.mjs'
 import ProjectLocator from '../Project/ProjectLocator.mjs'
 import ProjectLocator from '../Project/ProjectLocator.mjs'
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import LinkedFilesErrors from './LinkedFilesErrors.mjs'
 import LinkedFilesErrors from './LinkedFilesErrors.mjs'
 import { callbackifyAll } from '@overleaf/promise-utils'
 import { callbackifyAll } from '@overleaf/promise-utils'

+ 1 - 1
services/web/app/src/Features/OnboardingDataCollection/OnboardingDataCollectionManager.mjs

@@ -1,4 +1,4 @@
-import OnboardingDataCollectionModel from '../../models/OnboardingDataCollection.js'
+import OnboardingDataCollectionModel from '../../models/OnboardingDataCollection.mjs'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
 
 
 const { OnboardingDataCollection, OnboardingDataCollectionSchema } =
 const { OnboardingDataCollection, OnboardingDataCollectionSchema } =

+ 1 - 1
services/web/app/src/Features/PasswordReset/PasswordResetController.mjs

@@ -6,7 +6,7 @@ import UserGetter from '../User/UserGetter.mjs'
 import UserUpdater from '../User/UserUpdater.mjs'
 import UserUpdater from '../User/UserUpdater.mjs'
 import UserSessionsManager from '../User/UserSessionsManager.mjs'
 import UserSessionsManager from '../User/UserSessionsManager.mjs'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
-import EmailsHelper from '../Helpers/EmailHelper.js'
+import EmailsHelper from '../Helpers/EmailHelper.mjs'
 import { expressify } from '@overleaf/promise-utils'
 import { expressify } from '@overleaf/promise-utils'
 import { z, validateReq } from '../../infrastructure/Validation.js'
 import { z, validateReq } from '../../infrastructure/Validation.js'
 
 

+ 1 - 1
services/web/app/src/Features/PasswordReset/PasswordResetHandler.mjs

@@ -1,7 +1,7 @@
 import settings from '@overleaf/settings'
 import settings from '@overleaf/settings'
 import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
 import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import UserGetter from '../User/UserGetter.mjs'
-import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.js'
+import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
 import AuthenticationManager from '../Authentication/AuthenticationManager.mjs'
 import AuthenticationManager from '../Authentication/AuthenticationManager.mjs'
 import { callbackify, promisify } from 'node:util'
 import { callbackify, promisify } from 'node:util'

+ 1 - 5
services/web/app/src/Features/Project/IterablePath.js → services/web/app/src/Features/Project/IterablePath.mjs

@@ -3,13 +3,9 @@
  * `folder.folders` or `folder.fileRefs` are missing it returns an
  * `folder.folders` or `folder.fileRefs` are missing it returns an
  * empty array.
  * empty array.
  */
  */
-function iterablePaths(folder, field) {
+export function iterablePaths(folder, field) {
   if (!folder) {
   if (!folder) {
     return []
     return []
   }
   }
   return folder[field] || []
   return folder[field] || []
 }
 }
-
-module.exports = {
-  iterablePaths,
-}

+ 1 - 1
services/web/app/src/Features/Project/ProjectAuditLogHandler.mjs

@@ -1,5 +1,5 @@
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
-import { ProjectAuditLogEntry } from '../../models/ProjectAuditLogEntry.js'
+import { ProjectAuditLogEntry } from '../../models/ProjectAuditLogEntry.mjs'
 import { callbackify } from '@overleaf/promise-utils'
 import { callbackify } from '@overleaf/promise-utils'
 import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
 import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
 
 

+ 1 - 1
services/web/app/src/Features/Project/ProjectCollabratecDetailsHandler.mjs

@@ -1,6 +1,6 @@
 import mongodb from 'mongodb-legacy'
 import mongodb from 'mongodb-legacy'
 
 
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import { callbackifyAll } from '@overleaf/promise-utils'
 import { callbackifyAll } from '@overleaf/promise-utils'
 
 
 const { ObjectId } = mongodb
 const { ObjectId } = mongodb

+ 3 - 2
services/web/app/src/Features/Project/ProjectController.mjs

@@ -12,9 +12,9 @@ import ProjectCreationHandler from './ProjectCreationHandler.mjs'
 import EditorController from '../Editor/EditorController.mjs'
 import EditorController from '../Editor/EditorController.mjs'
 import ProjectHelper from './ProjectHelper.mjs'
 import ProjectHelper from './ProjectHelper.mjs'
 import metrics from '@overleaf/metrics'
 import metrics from '@overleaf/metrics'
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
 import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
-import { isPaidSubscription } from '../Subscription/SubscriptionHelper.js'
+import SubscriptionHelper from '../Subscription/SubscriptionHelper.mjs'
 import LimitationsManager from '../Subscription/LimitationsManager.mjs'
 import LimitationsManager from '../Subscription/LimitationsManager.mjs'
 import Settings from '@overleaf/settings'
 import Settings from '@overleaf/settings'
 import AuthorizationManager from '../Authorization/AuthorizationManager.mjs'
 import AuthorizationManager from '../Authorization/AuthorizationManager.mjs'
@@ -52,6 +52,7 @@ import SubscriptionController from '../Subscription/SubscriptionController.mjs'
 import { formatCurrency } from '../../util/currency.js'
 import { formatCurrency } from '../../util/currency.js'
 import UserSettingsHelper from './UserSettingsHelper.mjs'
 import UserSettingsHelper from './UserSettingsHelper.mjs'
 
 
+const { isPaidSubscription } = SubscriptionHelper
 const { hasAdminAccess } = AdminAuthorizationHelper
 const { hasAdminAccess } = AdminAuthorizationHelper
 const { ObjectId } = mongodb
 const { ObjectId } = mongodb
 /**
 /**

+ 3 - 3
services/web/app/src/Features/Project/ProjectCreationHandler.mjs

@@ -3,12 +3,12 @@ import metrics from '@overleaf/metrics'
 import Settings from '@overleaf/settings'
 import Settings from '@overleaf/settings'
 import mongodb from 'mongodb-legacy'
 import mongodb from 'mongodb-legacy'
 import Features from '../../infrastructure/Features.js'
 import Features from '../../infrastructure/Features.js'
-import { Project } from '../../models/Project.js'
-import { Folder } from '../../models/Folder.js'
+import { Project } from '../../models/Project.mjs'
+import { Folder } from '../../models/Folder.mjs'
 import ProjectEntityUpdateHandler from './ProjectEntityUpdateHandler.mjs'
 import ProjectEntityUpdateHandler from './ProjectEntityUpdateHandler.mjs'
 import ProjectDetailsHandler from './ProjectDetailsHandler.mjs'
 import ProjectDetailsHandler from './ProjectDetailsHandler.mjs'
 import HistoryManager from '../History/HistoryManager.mjs'
 import HistoryManager from '../History/HistoryManager.mjs'
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import fs from 'node:fs'
 import fs from 'node:fs'
 import path from 'node:path'
 import path from 'node:path'
 import { callbackify } from 'node:util'
 import { callbackify } from 'node:util'

+ 3 - 3
services/web/app/src/Features/Project/ProjectDeleter.mjs

@@ -6,9 +6,9 @@ import {
 } from '../../infrastructure/mongodb.js'
 } from '../../infrastructure/mongodb.js'
 import Modules from '../../infrastructure/Modules.js'
 import Modules from '../../infrastructure/Modules.js'
 import { callbackify } from 'node:util'
 import { callbackify } from 'node:util'
-import { Project } from '../../models/Project.js'
-import { DeletedProject } from '../../models/DeletedProject.js'
-import { ProjectAuditLogEntry } from '../../models/ProjectAuditLogEntry.js'
+import { Project } from '../../models/Project.mjs'
+import { DeletedProject } from '../../models/DeletedProject.mjs'
+import { ProjectAuditLogEntry } from '../../models/ProjectAuditLogEntry.mjs'
 import Errors from '../Errors/Errors.js'
 import Errors from '../Errors/Errors.js'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 import Settings from '@overleaf/settings'
 import Settings from '@overleaf/settings'

+ 1 - 1
services/web/app/src/Features/Project/ProjectDetailsHandler.mjs

@@ -1,7 +1,7 @@
 import _ from 'lodash'
 import _ from 'lodash'
 import ProjectGetter from './ProjectGetter.mjs'
 import ProjectGetter from './ProjectGetter.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import UserGetter from '../User/UserGetter.mjs'
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 import TpdsUpdateSender from '../ThirdPartyDataStore/TpdsUpdateSender.mjs'
 import TpdsUpdateSender from '../ThirdPartyDataStore/TpdsUpdateSender.mjs'
 import PublicAccessLevels from '../Authorization/PublicAccessLevels.mjs'
 import PublicAccessLevels from '../Authorization/PublicAccessLevels.mjs'

+ 2 - 2
services/web/app/src/Features/Project/ProjectDuplicator.mjs

@@ -3,8 +3,8 @@ import Path from 'node:path'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
 import { promiseMapWithLimit } from '@overleaf/promise-utils'
 import { promiseMapWithLimit } from '@overleaf/promise-utils'
-import { Doc } from '../../models/Doc.js'
-import { File } from '../../models/File.js'
+import { Doc } from '../../models/Doc.mjs'
+import { File } from '../../models/File.mjs'
 import DocstoreManager from '../Docstore/DocstoreManager.mjs'
 import DocstoreManager from '../Docstore/DocstoreManager.mjs'
 import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import HistoryManager from '../History/HistoryManager.mjs'
 import HistoryManager from '../History/HistoryManager.mjs'

+ 1 - 1
services/web/app/src/Features/Project/ProjectEntityHandler.mjs

@@ -4,7 +4,7 @@ import Errors from '../Errors/Errors.js'
 import ProjectGetter from './ProjectGetter.mjs'
 import ProjectGetter from './ProjectGetter.mjs'
 import { callbackifyAll } from '@overleaf/promise-utils'
 import { callbackifyAll } from '@overleaf/promise-utils'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
-import { iterablePaths } from './IterablePath.js'
+import { iterablePaths } from './IterablePath.mjs'
 
 
 async function getAllDocs(projectId) {
 async function getAllDocs(projectId) {
   // We get the path and name info from the project, and the lines and
   // We get the path and name info from the project, and the lines and

+ 4 - 4
services/web/app/src/Features/Project/ProjectEntityMongoUpdateHandler.mjs

@@ -5,17 +5,17 @@ import path from 'node:path'
 import mongodb from 'mongodb-legacy'
 import mongodb from 'mongodb-legacy'
 import Settings from '@overleaf/settings'
 import Settings from '@overleaf/settings'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
-import CooldownManager from '../Cooldown/CooldownManager.js'
+import CooldownManager from '../Cooldown/CooldownManager.mjs'
 import Errors from '../Errors/Errors.js'
 import Errors from '../Errors/Errors.js'
-import { Folder } from '../../models/Folder.js'
+import { Folder } from '../../models/Folder.mjs'
 import LockManager from '../../infrastructure/LockManager.js'
 import LockManager from '../../infrastructure/LockManager.js'
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import ProjectEntityHandler from './ProjectEntityHandler.mjs'
 import ProjectEntityHandler from './ProjectEntityHandler.mjs'
 import ProjectGetter from './ProjectGetter.mjs'
 import ProjectGetter from './ProjectGetter.mjs'
 import ProjectLocator from './ProjectLocator.mjs'
 import ProjectLocator from './ProjectLocator.mjs'
 import FolderStructureBuilder from './FolderStructureBuilder.mjs'
 import FolderStructureBuilder from './FolderStructureBuilder.mjs'
 import SafePath from './SafePath.mjs'
 import SafePath from './SafePath.mjs'
-import { iterablePaths } from './IterablePath.js'
+import { iterablePaths } from './IterablePath.mjs'
 
 
 const { ObjectId } = mongodb
 const { ObjectId } = mongodb
 
 

+ 3 - 3
services/web/app/src/Features/Project/ProjectEntityUpdateHandler.mjs

@@ -4,13 +4,13 @@ import logger from '@overleaf/logger'
 import Settings from '@overleaf/settings'
 import Settings from '@overleaf/settings'
 import Path from 'node:path'
 import Path from 'node:path'
 import fs from 'node:fs'
 import fs from 'node:fs'
-import { Doc } from '../../models/Doc.js'
+import { Doc } from '../../models/Doc.mjs'
 import DocstoreManager from '../Docstore/DocstoreManager.mjs'
 import DocstoreManager from '../Docstore/DocstoreManager.mjs'
 import DocumentUpdaterHandler from '../../Features/DocumentUpdater/DocumentUpdaterHandler.mjs'
 import DocumentUpdaterHandler from '../../Features/DocumentUpdater/DocumentUpdaterHandler.mjs'
 import Errors from '../Errors/Errors.js'
 import Errors from '../Errors/Errors.js'
 import FileStoreHandler from '../FileStore/FileStoreHandler.mjs'
 import FileStoreHandler from '../FileStore/FileStoreHandler.mjs'
 import LockManager from '../../infrastructure/LockManager.js'
 import LockManager from '../../infrastructure/LockManager.js'
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import ProjectEntityHandler from './ProjectEntityHandler.mjs'
 import ProjectEntityHandler from './ProjectEntityHandler.mjs'
 import ProjectGetter from './ProjectGetter.mjs'
 import ProjectGetter from './ProjectGetter.mjs'
 import ProjectLocator from './ProjectLocator.mjs'
 import ProjectLocator from './ProjectLocator.mjs'
@@ -22,7 +22,7 @@ import TpdsUpdateSender from '../ThirdPartyDataStore/TpdsUpdateSender.mjs'
 import FileWriter from '../../infrastructure/FileWriter.js'
 import FileWriter from '../../infrastructure/FileWriter.js'
 import EditorRealTimeController from '../Editor/EditorRealTimeController.mjs'
 import EditorRealTimeController from '../Editor/EditorRealTimeController.mjs'
 import { callbackifyMultiResult, callbackify } from '@overleaf/promise-utils'
 import { callbackifyMultiResult, callbackify } from '@overleaf/promise-utils'
-import { iterablePaths } from './IterablePath.js'
+import { iterablePaths } from './IterablePath.mjs'
 
 
 const LOCK_NAMESPACE = 'sequentialProjectStructureUpdateLock'
 const LOCK_NAMESPACE = 'sequentialProjectStructureUpdateLock'
 const VALID_ROOT_DOC_EXTENSIONS = Settings.validRootDocExtensions
 const VALID_ROOT_DOC_EXTENSIONS = Settings.validRootDocExtensions

+ 2 - 2
services/web/app/src/Features/Project/ProjectGetter.mjs

@@ -1,9 +1,9 @@
 import { db } from '../../infrastructure/mongodb.js'
 import { db } from '../../infrastructure/mongodb.js'
 import { normalizeQuery } from '../Helpers/Mongo.js'
 import { normalizeQuery } from '../Helpers/Mongo.js'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import LockManager from '../../infrastructure/LockManager.js'
 import LockManager from '../../infrastructure/LockManager.js'
-import { DeletedProject } from '../../models/DeletedProject.js'
+import { DeletedProject } from '../../models/DeletedProject.mjs'
 import { callbackifyAll } from '@overleaf/promise-utils'
 import { callbackifyAll } from '@overleaf/promise-utils'
 import ProjectEntityMongoUpdateHandler from './ProjectEntityMongoUpdateHandler.mjs'
 import ProjectEntityMongoUpdateHandler from './ProjectEntityMongoUpdateHandler.mjs'
 import CollaboratorsGetter from '../Collaborators/CollaboratorsGetter.mjs'
 import CollaboratorsGetter from '../Collaborators/CollaboratorsGetter.mjs'

+ 1 - 1
services/web/app/src/Features/Project/ProjectHistoryHandler.mjs

@@ -1,4 +1,4 @@
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import ProjectDetailsHandler from './ProjectDetailsHandler.mjs'
 import ProjectDetailsHandler from './ProjectDetailsHandler.mjs'
 import HistoryManager from '../History/HistoryManager.mjs'
 import HistoryManager from '../History/HistoryManager.mjs'
 import ProjectEntityUpdateHandler from './ProjectEntityUpdateHandler.mjs'
 import ProjectEntityUpdateHandler from './ProjectEntityUpdateHandler.mjs'

+ 3 - 3
services/web/app/src/Features/Project/ProjectListController.mjs

@@ -19,7 +19,7 @@ import SubscriptionViewModelBuilder from '../Subscription/SubscriptionViewModelB
 import NotificationsHandler from '../Notifications/NotificationsHandler.mjs'
 import NotificationsHandler from '../Notifications/NotificationsHandler.mjs'
 import Modules from '../../infrastructure/Modules.js'
 import Modules from '../../infrastructure/Modules.js'
 import { OError, V1ConnectionError } from '../Errors/Errors.js'
 import { OError, V1ConnectionError } from '../Errors/Errors.js'
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import UserPrimaryEmailCheckHandler from '../User/UserPrimaryEmailCheckHandler.mjs'
 import UserPrimaryEmailCheckHandler from '../User/UserPrimaryEmailCheckHandler.mjs'
 import UserController from '../User/UserController.mjs'
 import UserController from '../User/UserController.mjs'
 import NotificationsBuilder from '../Notifications/NotificationsBuilder.mjs'
 import NotificationsBuilder from '../Notifications/NotificationsBuilder.mjs'
@@ -27,10 +27,10 @@ import GeoIpLookup from '../../infrastructure/GeoIpLookup.mjs'
 import SplitTestHandler from '../SplitTests/SplitTestHandler.mjs'
 import SplitTestHandler from '../SplitTests/SplitTestHandler.mjs'
 import SplitTestSessionHandler from '../SplitTests/SplitTestSessionHandler.mjs'
 import SplitTestSessionHandler from '../SplitTests/SplitTestSessionHandler.mjs'
 import TutorialHandler from '../Tutorial/TutorialHandler.mjs'
 import TutorialHandler from '../Tutorial/TutorialHandler.mjs'
-import SubscriptionHelper from '../Subscription/SubscriptionHelper.js'
+import SubscriptionHelper from '../Subscription/SubscriptionHelper.mjs'
 import PermissionsManager from '../Authorization/PermissionsManager.mjs'
 import PermissionsManager from '../Authorization/PermissionsManager.mjs'
 import AnalyticsManager from '../Analytics/AnalyticsManager.mjs'
 import AnalyticsManager from '../Analytics/AnalyticsManager.mjs'
-import { OnboardingDataCollection } from '../../models/OnboardingDataCollection.js'
+import { OnboardingDataCollection } from '../../models/OnboardingDataCollection.mjs'
 import UserSettingsHelper from './UserSettingsHelper.mjs'
 import UserSettingsHelper from './UserSettingsHelper.mjs'
 
 
 /**
 /**

+ 1 - 1
services/web/app/src/Features/Project/ProjectLocator.mjs

@@ -5,7 +5,7 @@ import async from 'async'
 import ProjectGetter from './ProjectGetter.mjs'
 import ProjectGetter from './ProjectGetter.mjs'
 import Errors from '../Errors/Errors.js'
 import Errors from '../Errors/Errors.js'
 import { promisifyMultiResult } from '@overleaf/promise-utils'
 import { promisifyMultiResult } from '@overleaf/promise-utils'
-import { iterablePaths } from './IterablePath.js'
+import { iterablePaths } from './IterablePath.mjs'
 
 
 /**
 /**
  * @param project
  * @param project

+ 1 - 1
services/web/app/src/Features/Project/ProjectOptionsHandler.mjs

@@ -1,4 +1,4 @@
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import settings from '@overleaf/settings'
 import settings from '@overleaf/settings'
 import { callbackify } from 'node:util'
 import { callbackify } from 'node:util'
 import { db, ObjectId } from '../../infrastructure/mongodb.js'
 import { db, ObjectId } from '../../infrastructure/mongodb.js'

+ 1 - 1
services/web/app/src/Features/Project/ProjectUpdateHandler.mjs

@@ -1,4 +1,4 @@
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import { callbackify } from 'node:util'
 import { callbackify } from 'node:util'
 
 
 const ProjectUpdateHandler = {
 const ProjectUpdateHandler = {

+ 1 - 1
services/web/app/src/Features/Referal/ReferalAllocator.mjs

@@ -1,5 +1,5 @@
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import FeaturesUpdater from '../Subscription/FeaturesUpdater.mjs'
 import FeaturesUpdater from '../Subscription/FeaturesUpdater.mjs'
 import { callbackify } from '@overleaf/promise-utils'
 import { callbackify } from '@overleaf/promise-utils'
 
 

+ 1 - 1
services/web/app/src/Features/Referal/ReferalFeatures.mjs

@@ -1,6 +1,6 @@
 import _ from 'lodash'
 import _ from 'lodash'
 import { callbackify } from 'node:util'
 import { callbackify } from 'node:util'
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import Settings from '@overleaf/settings'
 import Settings from '@overleaf/settings'
 
 
 const ReferalFeatures = {
 const ReferalFeatures = {

+ 1 - 1
services/web/app/src/Features/Referal/ReferalHandler.mjs

@@ -1,5 +1,5 @@
 import { callbackify } from '@overleaf/promise-utils'
 import { callbackify } from '@overleaf/promise-utils'
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 
 
 async function getReferedUsers(userId) {
 async function getReferedUsers(userId) {
   const projection = { refered_users: 1, refered_user_count: 1 }
   const projection = { refered_users: 1, refered_user_count: 1 }

+ 1 - 1
services/web/app/src/Features/SamlLog/SamlLogHandler.mjs

@@ -1,4 +1,4 @@
-import { SamlLog } from '../../models/SamlLog.js'
+import { SamlLog } from '../../models/SamlLog.mjs'
 import SessionManager from '../Authentication/SessionManager.mjs'
 import SessionManager from '../Authentication/SessionManager.mjs'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 import loggerSerializers from '@overleaf/logger/serializers.js'
 import loggerSerializers from '@overleaf/logger/serializers.js'

+ 5 - 5
services/web/app/src/Features/Security/OneTimeTokenHandler.js → services/web/app/src/Features/Security/OneTimeTokenHandler.mjs

@@ -1,7 +1,7 @@
-const crypto = require('crypto')
-const { db } = require('../../infrastructure/mongodb')
-const Errors = require('../Errors/Errors')
-const { callbackify } = require('util')
+import crypto from 'node:crypto'
+import { db } from '../../infrastructure/mongodb.js'
+import Errors from '../Errors/Errors.js'
+import { callbackify } from 'node:util'
 
 
 const ONE_HOUR_IN_S = 60 * 60
 const ONE_HOUR_IN_S = 60 * 60
 
 
@@ -119,4 +119,4 @@ const OneTimeTokenHandler = {
   },
   },
 }
 }
 
 
-module.exports = OneTimeTokenHandler
+export default OneTimeTokenHandler

+ 1 - 1
services/web/app/src/Features/SplitTests/SplitTestHandler.mjs

@@ -6,7 +6,7 @@ import crypto from 'node:crypto'
 import _ from 'lodash'
 import _ from 'lodash'
 import { callbackify } from 'node:util'
 import { callbackify } from 'node:util'
 import SplitTestCache from './SplitTestCache.mjs'
 import SplitTestCache from './SplitTestCache.mjs'
-import { SplitTest } from '../../models/SplitTest.js'
+import { SplitTest } from '../../models/SplitTest.mjs'
 import UserAnalyticsIdCache from '../Analytics/UserAnalyticsIdCache.mjs'
 import UserAnalyticsIdCache from '../Analytics/UserAnalyticsIdCache.mjs'
 import Features from '../../infrastructure/Features.js'
 import Features from '../../infrastructure/Features.js'
 import SplitTestUtils from './SplitTestUtils.mjs'
 import SplitTestUtils from './SplitTestUtils.mjs'

+ 1 - 1
services/web/app/src/Features/SplitTests/SplitTestManager.mjs

@@ -1,4 +1,4 @@
-import { SplitTest } from '../../models/SplitTest.js'
+import { SplitTest } from '../../models/SplitTest.mjs'
 import SplitTestUtils from './SplitTestUtils.mjs'
 import SplitTestUtils from './SplitTestUtils.mjs'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
 import _ from 'lodash'
 import _ from 'lodash'

+ 1 - 1
services/web/app/src/Features/Subscription/FeaturesUpdater.mjs

@@ -3,7 +3,7 @@ import { callbackify } from 'node:util'
 import { callbackifyMultiResult } from '@overleaf/promise-utils'
 import { callbackifyMultiResult } from '@overleaf/promise-utils'
 import PlansLocator from './PlansLocator.mjs'
 import PlansLocator from './PlansLocator.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
-import SubscriptionHelper from './SubscriptionHelper.js'
+import SubscriptionHelper from './SubscriptionHelper.mjs'
 import UserFeaturesUpdater from './UserFeaturesUpdater.mjs'
 import UserFeaturesUpdater from './UserFeaturesUpdater.mjs'
 import FeaturesHelper from './FeaturesHelper.mjs'
 import FeaturesHelper from './FeaturesHelper.mjs'
 import Settings from '@overleaf/settings'
 import Settings from '@overleaf/settings'

+ 1 - 1
services/web/app/src/Features/Subscription/PaymentProviderEntities.mjs

@@ -20,7 +20,7 @@ import OError from '@overleaf/o-error'
 
 
 import { DuplicateAddOnError, AddOnNotPresentError } from './Errors.js'
 import { DuplicateAddOnError, AddOnNotPresentError } from './Errors.js'
 import PlansLocator from './PlansLocator.mjs'
 import PlansLocator from './PlansLocator.mjs'
-import SubscriptionHelper from './SubscriptionHelper.js'
+import SubscriptionHelper from './SubscriptionHelper.mjs'
 import { AI_ADD_ON_CODE, isStandaloneAiAddOnPlanCode } from './AiHelper.js'
 import { AI_ADD_ON_CODE, isStandaloneAiAddOnPlanCode } from './AiHelper.js'
 export const MEMBERS_LIMIT_ADD_ON_CODE = 'additional-license'
 export const MEMBERS_LIMIT_ADD_ON_CODE = 'additional-license'
 
 

+ 2 - 2
services/web/app/src/Features/Subscription/SubscriptionController.mjs

@@ -2,7 +2,7 @@
 
 
 import SessionManager from '../Authentication/SessionManager.mjs'
 import SessionManager from '../Authentication/SessionManager.mjs'
 import SubscriptionHandler from './SubscriptionHandler.mjs'
 import SubscriptionHandler from './SubscriptionHandler.mjs'
-import SubscriptionHelper from './SubscriptionHelper.js'
+import SubscriptionHelper from './SubscriptionHelper.mjs'
 import SubscriptionViewModelBuilder from './SubscriptionViewModelBuilder.mjs'
 import SubscriptionViewModelBuilder from './SubscriptionViewModelBuilder.mjs'
 import LimitationsManager from './LimitationsManager.mjs'
 import LimitationsManager from './LimitationsManager.mjs'
 import RecurlyWrapper from './RecurlyWrapper.mjs'
 import RecurlyWrapper from './RecurlyWrapper.mjs'
@@ -28,7 +28,7 @@ import {
   subscriptionChangeIsAiAssistUpgrade,
   subscriptionChangeIsAiAssistUpgrade,
 } from './AiHelper.js'
 } from './AiHelper.js'
 import PlansLocator from './PlansLocator.mjs'
 import PlansLocator from './PlansLocator.mjs'
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import PermissionsManager from '../Authorization/PermissionsManager.mjs'
 import PermissionsManager from '../Authorization/PermissionsManager.mjs'
 import { sanitizeSessionUserForFrontEnd } from '../../infrastructure/FrontEndUser.mjs'
 import { sanitizeSessionUserForFrontEnd } from '../../infrastructure/FrontEndUser.mjs'

+ 1 - 1
services/web/app/src/Features/Subscription/SubscriptionGroupController.mjs

@@ -8,7 +8,7 @@ import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
 import { expressify } from '@overleaf/promise-utils'
 import { expressify } from '@overleaf/promise-utils'
 import Modules from '../../infrastructure/Modules.js'
 import Modules from '../../infrastructure/Modules.js'
 import UserGetter from '../User/UserGetter.mjs'
 import UserGetter from '../User/UserGetter.mjs'
-import { Subscription } from '../../models/Subscription.js'
+import { Subscription } from '../../models/Subscription.mjs'
 import { z, validateReq } from '../../infrastructure/Validation.js'
 import { z, validateReq } from '../../infrastructure/Validation.js'
 import { isProfessionalGroupPlan } from './PlansHelper.mjs'
 import { isProfessionalGroupPlan } from './PlansHelper.mjs'
 import {
 import {

+ 4 - 4
services/web/app/src/Features/Subscription/SubscriptionGroupHandler.mjs

@@ -4,9 +4,9 @@ import OError from '@overleaf/o-error'
 import SubscriptionUpdater from './SubscriptionUpdater.mjs'
 import SubscriptionUpdater from './SubscriptionUpdater.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
 import SubscriptionController from './SubscriptionController.mjs'
 import SubscriptionController from './SubscriptionController.mjs'
-import SubscriptionHelper from './SubscriptionHelper.js'
-import { Subscription } from '../../models/Subscription.js'
-import { User } from '../../models/User.js'
+import SubscriptionHelper from './SubscriptionHelper.mjs'
+import { Subscription } from '../../models/Subscription.mjs'
+import { User } from '../../models/User.mjs'
 import PlansLocator from './PlansLocator.mjs'
 import PlansLocator from './PlansLocator.mjs'
 import TeamInvitesHandler from './TeamInvitesHandler.mjs'
 import TeamInvitesHandler from './TeamInvitesHandler.mjs'
 import GroupPlansData from './GroupPlansData.js'
 import GroupPlansData from './GroupPlansData.js'
@@ -19,7 +19,7 @@ import {
   HasPastDueInvoiceError,
   HasPastDueInvoiceError,
   HasNoAdditionalLicenseWhenManuallyCollectedError,
   HasNoAdditionalLicenseWhenManuallyCollectedError,
 } from './Errors.js'
 } from './Errors.js'
-import EmailHelper from '../Helpers/EmailHelper.js'
+import EmailHelper from '../Helpers/EmailHelper.mjs'
 import { InvalidEmailError } from '../Errors/Errors.js'
 import { InvalidEmailError } from '../Errors/Errors.js'
 
 
 const MEMBERS_LIMIT_ADD_ON_CODE =
 const MEMBERS_LIMIT_ADD_ON_CODE =

+ 2 - 2
services/web/app/src/Features/Subscription/SubscriptionHandler.mjs

@@ -3,9 +3,9 @@
 import RecurlyWrapper from './RecurlyWrapper.mjs'
 import RecurlyWrapper from './RecurlyWrapper.mjs'
 
 
 import RecurlyClient from './RecurlyClient.mjs'
 import RecurlyClient from './RecurlyClient.mjs'
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
-import SubscriptionHelper from './SubscriptionHelper.js'
+import SubscriptionHelper from './SubscriptionHelper.mjs'
 import SubscriptionUpdater from './SubscriptionUpdater.mjs'
 import SubscriptionUpdater from './SubscriptionUpdater.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
 import LimitationsManager from './LimitationsManager.mjs'
 import LimitationsManager from './LimitationsManager.mjs'

+ 6 - 6
services/web/app/src/Features/Subscription/SubscriptionHelper.js → services/web/app/src/Features/Subscription/SubscriptionHelper.mjs

@@ -1,10 +1,10 @@
 // @ts-check
 // @ts-check
 
 
-const Settings = require('@overleaf/settings')
-const { formatCurrency } = require('../../util/currency')
-const GroupPlansData = require('./GroupPlansData')
-const { isStandaloneAiAddOnPlanCode } = require('./AiHelper')
-const { Subscription } = require('../../models/Subscription')
+import Settings from '@overleaf/settings'
+import { formatCurrency } from '../../util/currency.js'
+import GroupPlansData from './GroupPlansData.js'
+import { isStandaloneAiAddOnPlanCode } from './AiHelper.js'
+import { Subscription } from '../../models/Subscription.mjs'
 
 
 const MILLISECONDS = 1_000
 const MILLISECONDS = 1_000
 /**
 /**
@@ -253,7 +253,7 @@ function getStripeCustomerAdminUrl(customerId, service) {
   return `${baseUrl}/customers/${customerId}`
   return `${baseUrl}/customers/${customerId}`
 }
 }
 
 
-module.exports = {
+export default {
   shouldPlanChangeAtTermEnd,
   shouldPlanChangeAtTermEnd,
   generateInitialLocalizedGroupPrice,
   generateInitialLocalizedGroupPrice,
   isPaidSubscription,
   isPaidSubscription,

+ 3 - 3
services/web/app/src/Features/Subscription/SubscriptionLocator.mjs

@@ -4,9 +4,9 @@
 
 
 import { callbackifyAll } from '@overleaf/promise-utils'
 import { callbackifyAll } from '@overleaf/promise-utils'
 
 
-import { Subscription } from '../../models/Subscription.js'
-import SubscriptionHelper from './SubscriptionHelper.js'
-import { DeletedSubscription } from '../../models/DeletedSubscription.js'
+import { Subscription } from '../../models/Subscription.mjs'
+import SubscriptionHelper from './SubscriptionHelper.mjs'
+import { DeletedSubscription } from '../../models/DeletedSubscription.mjs'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 import { AI_ADD_ON_CODE, isStandaloneAiAddOnPlanCode } from './AiHelper.js'
 import { AI_ADD_ON_CODE, isStandaloneAiAddOnPlanCode } from './AiHelper.js'
 import './GroupPlansData.js' // make sure dynamic group plans are loaded
 import './GroupPlansData.js' // make sure dynamic group plans are loaded

+ 3 - 3
services/web/app/src/Features/Subscription/SubscriptionUpdater.mjs

@@ -1,18 +1,18 @@
 import { db, ObjectId } from '../../infrastructure/mongodb.js'
 import { db, ObjectId } from '../../infrastructure/mongodb.js'
 import { callbackify } from '@overleaf/promise-utils'
 import { callbackify } from '@overleaf/promise-utils'
-import { Subscription } from '../../models/Subscription.js'
+import { Subscription } from '../../models/Subscription.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
 import PlansLocator from './PlansLocator.mjs'
 import PlansLocator from './PlansLocator.mjs'
 import FeaturesUpdater from './FeaturesUpdater.mjs'
 import FeaturesUpdater from './FeaturesUpdater.mjs'
 import FeaturesHelper from './FeaturesHelper.mjs'
 import FeaturesHelper from './FeaturesHelper.mjs'
 import AnalyticsManager from '../Analytics/AnalyticsManager.mjs'
 import AnalyticsManager from '../Analytics/AnalyticsManager.mjs'
-import { DeletedSubscription } from '../../models/DeletedSubscription.js'
+import { DeletedSubscription } from '../../models/DeletedSubscription.mjs'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 import Features from '../../infrastructure/Features.js'
 import Features from '../../infrastructure/Features.js'
 import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
 import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
 import UserUpdater from '../User/UserUpdater.mjs'
 import UserUpdater from '../User/UserUpdater.mjs'
 import AccountMappingHelper from '../Analytics/AccountMappingHelper.mjs'
 import AccountMappingHelper from '../Analytics/AccountMappingHelper.mjs'
-import { SSOConfig } from '../../models/SSOConfig.js'
+import { SSOConfig } from '../../models/SSOConfig.mjs'
 import mongoose from '../../infrastructure/Mongoose.js'
 import mongoose from '../../infrastructure/Mongoose.js'
 import Modules from '../../infrastructure/Modules.js'
 import Modules from '../../infrastructure/Modules.js'
 
 

+ 1 - 1
services/web/app/src/Features/Subscription/SubscriptionViewModelBuilder.mjs

@@ -12,7 +12,7 @@ import PublishersGetter from '../Publishers/PublishersGetter.mjs'
 import sanitizeHtml from 'sanitize-html'
 import sanitizeHtml from 'sanitize-html'
 import _ from 'lodash'
 import _ from 'lodash'
 import async from 'async'
 import async from 'async'
-import SubscriptionHelper from './SubscriptionHelper.js'
+import SubscriptionHelper from './SubscriptionHelper.mjs'
 import { callbackify } from '@overleaf/promise-utils'
 import { callbackify } from '@overleaf/promise-utils'
 import { V1ConnectionError } from '../Errors/Errors.js'
 import { V1ConnectionError } from '../Errors/Errors.js'
 import FeaturesHelper from './FeaturesHelper.mjs'
 import FeaturesHelper from './FeaturesHelper.mjs'

+ 2 - 2
services/web/app/src/Features/Subscription/TeamInvitesController.mjs

@@ -4,9 +4,9 @@ import OError from '@overleaf/o-error'
 import TeamInvitesHandler from './TeamInvitesHandler.mjs'
 import TeamInvitesHandler from './TeamInvitesHandler.mjs'
 import SessionManager from '../Authentication/SessionManager.mjs'
 import SessionManager from '../Authentication/SessionManager.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
-import SubscriptionHelper from './SubscriptionHelper.js'
+import SubscriptionHelper from './SubscriptionHelper.mjs'
 import ErrorController from '../Errors/ErrorController.mjs'
 import ErrorController from '../Errors/ErrorController.mjs'
-import EmailHelper from '../Helpers/EmailHelper.js'
+import EmailHelper from '../Helpers/EmailHelper.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import { expressify } from '@overleaf/promise-utils'
 import { expressify } from '@overleaf/promise-utils'
 import HttpErrorHandler from '../Errors/HttpErrorHandler.mjs'
 import HttpErrorHandler from '../Errors/HttpErrorHandler.mjs'

+ 3 - 3
services/web/app/src/Features/Subscription/TeamInvitesHandler.mjs

@@ -3,14 +3,14 @@ import crypto from 'node:crypto'
 import settings from '@overleaf/settings'
 import settings from '@overleaf/settings'
 import Modules from '../../infrastructure/Modules.js'
 import Modules from '../../infrastructure/Modules.js'
 import mongodb from 'mongodb-legacy'
 import mongodb from 'mongodb-legacy'
-import { Subscription } from '../../models/Subscription.js'
-import { SSOConfig } from '../../models/SSOConfig.js'
+import { Subscription } from '../../models/Subscription.mjs'
+import { SSOConfig } from '../../models/SSOConfig.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
 import SubscriptionLocator from './SubscriptionLocator.mjs'
 import SubscriptionUpdater from './SubscriptionUpdater.mjs'
 import SubscriptionUpdater from './SubscriptionUpdater.mjs'
 import LimitationsManager from './LimitationsManager.mjs'
 import LimitationsManager from './LimitationsManager.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
-import EmailHelper from '../Helpers/EmailHelper.js'
+import EmailHelper from '../Helpers/EmailHelper.mjs'
 import Errors from '../Errors/Errors.js'
 import Errors from '../Errors/Errors.js'
 import { callbackify, callbackifyMultiResult } from '@overleaf/promise-utils'
 import { callbackify, callbackifyMultiResult } from '@overleaf/promise-utils'
 import NotificationsBuilder from '../Notifications/NotificationsBuilder.mjs'
 import NotificationsBuilder from '../Notifications/NotificationsBuilder.mjs'

+ 1 - 1
services/web/app/src/Features/Subscription/UserFeaturesUpdater.mjs

@@ -1,4 +1,4 @@
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import { callbackify } from 'node:util'
 import { callbackify } from 'node:util'
 import Settings from '@overleaf/settings'
 import Settings from '@overleaf/settings'
 
 

+ 1 - 1
services/web/app/src/Features/Survey/SurveyCache.mjs

@@ -1,5 +1,5 @@
 import SurveyManager from './SurveyManager.mjs'
 import SurveyManager from './SurveyManager.mjs'
-import { Survey } from '../../models/Survey.js'
+import { Survey } from '../../models/Survey.mjs'
 import { CacheLoader } from 'cache-flow'
 import { CacheLoader } from 'cache-flow'
 
 
 class SurveyCache extends CacheLoader {
 class SurveyCache extends CacheLoader {

+ 1 - 1
services/web/app/src/Features/Survey/SurveyManager.mjs

@@ -1,4 +1,4 @@
-import { Survey } from '../../models/Survey.js'
+import { Survey } from '../../models/Survey.mjs'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
 
 
 async function getSurvey() {
 async function getSurvey() {

+ 1 - 1
services/web/app/src/Features/SystemMessages/SystemMessageManager.mjs

@@ -1,4 +1,4 @@
-import { SystemMessage } from '../../models/SystemMessage.js'
+import { SystemMessage } from '../../models/SystemMessage.mjs'
 import { addRequiredCleanupHandlerBeforeDrainingConnections } from '../../infrastructure/GracefulShutdown.js'
 import { addRequiredCleanupHandlerBeforeDrainingConnections } from '../../infrastructure/GracefulShutdown.js'
 import { callbackifyAll } from '@overleaf/promise-utils'
 import { callbackifyAll } from '@overleaf/promise-utils'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'

+ 1 - 1
services/web/app/src/Features/Tags/TagsHandler.mjs

@@ -1,4 +1,4 @@
-import { Tag } from '../../models/Tag.js'
+import { Tag } from '../../models/Tag.mjs'
 import { callbackify } from '@overleaf/promise-utils'
 import { callbackify } from '@overleaf/promise-utils'
 
 
 const MAX_TAG_LENGTH = 50
 const MAX_TAG_LENGTH = 50

+ 1 - 1
services/web/app/src/Features/Templates/TemplatesManager.mjs

@@ -1,4 +1,4 @@
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import ProjectDetailsHandler from '../Project/ProjectDetailsHandler.mjs'
 import ProjectDetailsHandler from '../Project/ProjectDetailsHandler.mjs'
 import ProjectOptionsHandlerModule from '../Project/ProjectOptionsHandler.mjs'
 import ProjectOptionsHandlerModule from '../Project/ProjectOptionsHandler.mjs'
 import ProjectRootDocManagerModule from '../Project/ProjectRootDocManager.mjs'
 import ProjectRootDocManagerModule from '../Project/ProjectRootDocManager.mjs'

+ 1 - 1
services/web/app/src/Features/ThirdPartyDataStore/TpdsProjectFlusher.mjs

@@ -3,7 +3,7 @@ import logger from '@overleaf/logger'
 import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectEntityHandler from '../Project/ProjectEntityHandler.mjs'
 import ProjectEntityHandler from '../Project/ProjectEntityHandler.mjs'
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import TpdsUpdateSender from './TpdsUpdateSender.mjs'
 import TpdsUpdateSender from './TpdsUpdateSender.mjs'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
 
 

+ 1 - 1
services/web/app/src/Features/ThirdPartyDataStore/TpdsUpdateHandler.mjs

@@ -8,7 +8,7 @@ import ProjectGetter from '../Project/ProjectGetter.mjs'
 import ProjectHelper from '../Project/ProjectHelper.mjs'
 import ProjectHelper from '../Project/ProjectHelper.mjs'
 import ProjectRootDocManager from '../Project/ProjectRootDocManager.mjs'
 import ProjectRootDocManager from '../Project/ProjectRootDocManager.mjs'
 import FileTypeManager from '../Uploads/FileTypeManager.mjs'
 import FileTypeManager from '../Uploads/FileTypeManager.mjs'
-import CooldownManager from '../Cooldown/CooldownManager.js'
+import CooldownManager from '../Cooldown/CooldownManager.mjs'
 import Errors from '../Errors/Errors.js'
 import Errors from '../Errors/Errors.js'
 import Modules from '../../infrastructure/Modules.js'
 import Modules from '../../infrastructure/Modules.js'
 
 

+ 1 - 1
services/web/app/src/Features/TokenAccess/TokenAccessHandler.mjs

@@ -1,4 +1,4 @@
-import { Project } from '../../models/Project.js'
+import { Project } from '../../models/Project.mjs'
 import PublicAccessLevels from '../Authorization/PublicAccessLevels.mjs'
 import PublicAccessLevels from '../Authorization/PublicAccessLevels.mjs'
 import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
 import PrivilegeLevels from '../Authorization/PrivilegeLevels.js'
 import mongodb from 'mongodb-legacy'
 import mongodb from 'mongodb-legacy'

+ 1 - 1
services/web/app/src/Features/Uploads/ProjectUploadManager.mjs

@@ -2,7 +2,7 @@ import Path from 'node:path'
 import fs from 'node:fs'
 import fs from 'node:fs'
 import { callbackify } from 'node:util'
 import { callbackify } from 'node:util'
 import ArchiveManager from './ArchiveManager.mjs'
 import ArchiveManager from './ArchiveManager.mjs'
-import { Doc } from '../../models/Doc.js'
+import { Doc } from '../../models/Doc.mjs'
 import DocstoreManager from '../Docstore/DocstoreManager.mjs'
 import DocstoreManager from '../Docstore/DocstoreManager.mjs'
 import DocumentHelper from '../Documents/DocumentHelper.mjs'
 import DocumentHelper from '../Documents/DocumentHelper.mjs'
 import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'
 import DocumentUpdaterHandler from '../DocumentUpdater/DocumentUpdaterHandler.mjs'

+ 1 - 1
services/web/app/src/Features/User/SAMLIdentityManager.mjs

@@ -9,7 +9,7 @@ import UserAuditLogHandler from '../User/UserAuditLogHandler.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import UserUpdater from '../User/UserUpdater.mjs'
 import UserUpdater from '../User/UserUpdater.mjs'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import { promiseMapWithLimit } from '@overleaf/promise-utils'
 import { promiseMapWithLimit } from '@overleaf/promise-utils'
 
 
 const { ObjectId } = mongodb
 const { ObjectId } = mongodb

+ 1 - 1
services/web/app/src/Features/User/ThirdPartyIdentityManager.mjs

@@ -5,7 +5,7 @@ import Errors from '../Errors/Errors.js'
 import _ from 'lodash'
 import _ from 'lodash'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 import settings from '@overleaf/settings'
 import settings from '@overleaf/settings'
-import { User } from '../../../../app/src/models/User.js'
+import { User } from '../../../../app/src/models/User.mjs'
 import { callbackify } from '@overleaf/promise-utils'
 import { callbackify } from '@overleaf/promise-utils'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
 
 

+ 1 - 1
services/web/app/src/Features/User/UserAuditLogHandler.mjs

@@ -1,6 +1,6 @@
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
-import { UserAuditLogEntry } from '../../models/UserAuditLogEntry.js'
+import { UserAuditLogEntry } from '../../models/UserAuditLogEntry.mjs'
 import { callbackify } from 'node:util'
 import { callbackify } from 'node:util'
 import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
 import SubscriptionLocator from '../Subscription/SubscriptionLocator.mjs'
 
 

+ 2 - 2
services/web/app/src/Features/User/UserController.mjs

@@ -1,7 +1,7 @@
 import UserHandler from './UserHandler.mjs'
 import UserHandler from './UserHandler.mjs'
 import UserDeleter from './UserDeleter.mjs'
 import UserDeleter from './UserDeleter.mjs'
 import UserGetter from './UserGetter.mjs'
 import UserGetter from './UserGetter.mjs'
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import NewsletterManager from '../Newsletter/NewsletterManager.mjs'
 import NewsletterManager from '../Newsletter/NewsletterManager.mjs'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 import metrics from '@overleaf/metrics'
 import metrics from '@overleaf/metrics'
@@ -21,7 +21,7 @@ import { promisify } from 'node:util'
 import { expressify } from '@overleaf/promise-utils'
 import { expressify } from '@overleaf/promise-utils'
 import { acceptsJson } from '../../infrastructure/RequestContentTypeDetection.js'
 import { acceptsJson } from '../../infrastructure/RequestContentTypeDetection.js'
 import Modules from '../../infrastructure/Modules.js'
 import Modules from '../../infrastructure/Modules.js'
-import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.js'
+import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.mjs'
 
 
 async function _sendSecurityAlertClearedSessions(user) {
 async function _sendSecurityAlertClearedSessions(user) {
   const emailOptions = {
   const emailOptions = {

+ 1 - 1
services/web/app/src/Features/User/UserCreator.mjs

@@ -2,7 +2,7 @@ import logger from '@overleaf/logger'
 import util from 'node:util'
 import util from 'node:util'
 import { AffiliationError } from '../Errors/Errors.js'
 import { AffiliationError } from '../Errors/Errors.js'
 import Features from '../../infrastructure/Features.js'
 import Features from '../../infrastructure/Features.js'
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import UserDeleter from './UserDeleter.mjs'
 import UserDeleter from './UserDeleter.mjs'
 import UserGetter from './UserGetter.mjs'
 import UserGetter from './UserGetter.mjs'
 import UserUpdater from './UserUpdater.mjs'
 import UserUpdater from './UserUpdater.mjs'

+ 4 - 4
services/web/app/src/Features/User/UserDeleter.mjs

@@ -1,10 +1,10 @@
 import { callbackify } from 'node:util'
 import { callbackify } from 'node:util'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 import Settings from '@overleaf/settings'
 import Settings from '@overleaf/settings'
-import { User } from '../../models/User.js'
-import { DeletedUser } from '../../models/DeletedUser.js'
-import { UserAuditLogEntry } from '../../models/UserAuditLogEntry.js'
-import { Feedback } from '../../models/Feedback.js'
+import { User } from '../../models/User.mjs'
+import { DeletedUser } from '../../models/DeletedUser.mjs'
+import { UserAuditLogEntry } from '../../models/UserAuditLogEntry.mjs'
+import { Feedback } from '../../models/Feedback.mjs'
 import NewsletterManager from '../Newsletter/NewsletterManager.mjs'
 import NewsletterManager from '../Newsletter/NewsletterManager.mjs'
 import ProjectDeleter from '../Project/ProjectDeleter.mjs'
 import ProjectDeleter from '../Project/ProjectDeleter.mjs'
 import SubscriptionHandler from '../Subscription/SubscriptionHandler.mjs'
 import SubscriptionHandler from '../Subscription/SubscriptionHandler.mjs'

+ 2 - 2
services/web/app/src/Features/User/UserEmailsConfirmationHandler.mjs

@@ -1,6 +1,6 @@
-import EmailHelper from '../Helpers/EmailHelper.js'
+import EmailHelper from '../Helpers/EmailHelper.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
-import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.js'
+import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.mjs'
 import settings from '@overleaf/settings'
 import settings from '@overleaf/settings'
 import Errors from '../Errors/Errors.js'
 import Errors from '../Errors/Errors.js'
 import UserUpdater from './UserUpdater.mjs'
 import UserUpdater from './UserUpdater.mjs'

+ 1 - 1
services/web/app/src/Features/User/UserEmailsController.mjs

@@ -6,7 +6,7 @@ import UserGetter from './UserGetter.mjs'
 import UserUpdater from './UserUpdater.mjs'
 import UserUpdater from './UserUpdater.mjs'
 import UserSessionsManager from './UserSessionsManager.mjs'
 import UserSessionsManager from './UserSessionsManager.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
-import EmailHelper from '../Helpers/EmailHelper.js'
+import EmailHelper from '../Helpers/EmailHelper.mjs'
 import UserEmailsConfirmationHandler from './UserEmailsConfirmationHandler.mjs'
 import UserEmailsConfirmationHandler from './UserEmailsConfirmationHandler.mjs'
 import InstitutionsAPI from '../Institutions/InstitutionsAPI.mjs'
 import InstitutionsAPI from '../Institutions/InstitutionsAPI.mjs'
 import Errors from '../Errors/Errors.js'
 import Errors from '../Errors/Errors.js'

+ 1 - 1
services/web/app/src/Features/User/UserGetter.mjs

@@ -6,7 +6,7 @@ import InstitutionsAPI from '../Institutions/InstitutionsAPI.mjs'
 import InstitutionsHelper from '../Institutions/InstitutionsHelper.mjs'
 import InstitutionsHelper from '../Institutions/InstitutionsHelper.mjs'
 import Errors from '../Errors/Errors.js'
 import Errors from '../Errors/Errors.js'
 import Features from '../../infrastructure/Features.js'
 import Features from '../../infrastructure/Features.js'
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import { normalizeQuery, normalizeMultiQuery } from '../Helpers/Mongo.js'
 import { normalizeQuery, normalizeMultiQuery } from '../Helpers/Mongo.js'
 import Modules from '../../infrastructure/Modules.js'
 import Modules from '../../infrastructure/Modules.js'
 import FeaturesHelper from '../Subscription/FeaturesHelper.mjs'
 import FeaturesHelper from '../Subscription/FeaturesHelper.mjs'

+ 3 - 3
services/web/app/src/Features/User/UserRegistrationHandler.mjs

@@ -1,4 +1,4 @@
-import { User } from '../../models/User.js'
+import { User } from '../../models/User.mjs'
 import UserCreator from './UserCreator.mjs'
 import UserCreator from './UserCreator.mjs'
 import UserGetter from './UserGetter.mjs'
 import UserGetter from './UserGetter.mjs'
 import AuthenticationManager from '../Authentication/AuthenticationManager.mjs'
 import AuthenticationManager from '../Authentication/AuthenticationManager.mjs'
@@ -6,9 +6,9 @@ import NewsletterManager from '../Newsletter/NewsletterManager.mjs'
 import logger from '@overleaf/logger'
 import logger from '@overleaf/logger'
 import crypto from 'node:crypto'
 import crypto from 'node:crypto'
 import EmailHandler from '../Email/EmailHandler.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
-import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.js'
+import OneTimeTokenHandler from '../Security/OneTimeTokenHandler.mjs'
 import settings from '@overleaf/settings'
 import settings from '@overleaf/settings'
-import EmailHelper from '../Helpers/EmailHelper.js'
+import EmailHelper from '../Helpers/EmailHelper.mjs'
 import { callbackify, callbackifyMultiResult } from '@overleaf/promise-utils'
 import { callbackify, callbackifyMultiResult } from '@overleaf/promise-utils'
 import OError from '@overleaf/o-error'
 import OError from '@overleaf/o-error'
 
 

+ 1 - 1
services/web/app/src/Features/User/UserUpdater.mjs

@@ -8,7 +8,7 @@ import InstitutionsAPI from '../Institutions/InstitutionsAPI.mjs'
 import Features from '../../infrastructure/Features.js'
 import Features from '../../infrastructure/Features.js'
 import FeaturesUpdater from '../Subscription/FeaturesUpdater.mjs'
 import FeaturesUpdater from '../Subscription/FeaturesUpdater.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
 import EmailHandler from '../Email/EmailHandler.mjs'
-import EmailHelper from '../Helpers/EmailHelper.js'
+import EmailHelper from '../Helpers/EmailHelper.mjs'
 import Errors from '../Errors/Errors.js'
 import Errors from '../Errors/Errors.js'
 import NewsletterManager from '../Newsletter/NewsletterManager.mjs'
 import NewsletterManager from '../Newsletter/NewsletterManager.mjs'
 import UserAuditLogHandler from './UserAuditLogHandler.mjs'
 import UserAuditLogHandler from './UserAuditLogHandler.mjs'

+ 2 - 2
services/web/app/src/Features/UserMembership/UserMembershipController.mjs

@@ -1,10 +1,10 @@
 import SessionManager from '../Authentication/SessionManager.mjs'
 import SessionManager from '../Authentication/SessionManager.mjs'
 import UserMembershipHandler from './UserMembershipHandler.mjs'
 import UserMembershipHandler from './UserMembershipHandler.mjs'
 import Errors from '../Errors/Errors.js'
 import Errors from '../Errors/Errors.js'
-import EmailHelper from '../Helpers/EmailHelper.js'
+import EmailHelper from '../Helpers/EmailHelper.mjs'
 import { csvAttachment } from '../../infrastructure/Response.js'
 import { csvAttachment } from '../../infrastructure/Response.js'
 import UserMembershipErrors from './UserMembershipErrors.mjs'
 import UserMembershipErrors from './UserMembershipErrors.mjs'
-import { SSOConfig } from '../../models/SSOConfig.js'
+import { SSOConfig } from '../../models/SSOConfig.mjs'
 import { Parser as CSVParser } from 'json2csv'
 import { Parser as CSVParser } from 'json2csv'
 import { expressify } from '@overleaf/promise-utils'
 import { expressify } from '@overleaf/promise-utils'
 import PlansLocator from '../Subscription/PlansLocator.mjs'
 import PlansLocator from '../Subscription/PlansLocator.mjs'

+ 3 - 3
services/web/app/src/Features/UserMembership/UserMembershipHandler.mjs

@@ -1,8 +1,8 @@
 import mongodb from 'mongodb-legacy'
 import mongodb from 'mongodb-legacy'
 import { callbackify } from '@overleaf/promise-utils'
 import { callbackify } from '@overleaf/promise-utils'
-import { Institution } from '../../models/Institution.js'
-import { Subscription } from '../../models/Subscription.js'
-import { Publisher } from '../../models/Publisher.js'
+import { Institution } from '../../models/Institution.mjs'
+import { Subscription } from '../../models/Subscription.mjs'
+import { Publisher } from '../../models/Publisher.mjs'
 import UserMembershipViewModel from './UserMembershipViewModel.mjs'
 import UserMembershipViewModel from './UserMembershipViewModel.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import UserGetter from '../User/UserGetter.mjs'
 import UserMembershipErrors from './UserMembershipErrors.mjs'
 import UserMembershipErrors from './UserMembershipErrors.mjs'

+ 3 - 3
services/web/app/src/Features/UserMembership/UserMembershipsHandler.mjs

@@ -13,9 +13,9 @@ import async from 'async'
 
 
 import { promisifyAll } from '@overleaf/promise-utils'
 import { promisifyAll } from '@overleaf/promise-utils'
 import UserMembershipEntityConfigs from './UserMembershipEntityConfigs.mjs'
 import UserMembershipEntityConfigs from './UserMembershipEntityConfigs.mjs'
-import InstitutionModel from '../../models/Institution.js'
-import SubscriptionModel from '../../models/Subscription.js'
-import PublisherModel from '../../models/Publisher.js'
+import * as InstitutionModel from '../../models/Institution.mjs'
+import * as SubscriptionModel from '../../models/Subscription.mjs'
+import * as PublisherModel from '../../models/Publisher.mjs'
 
 
 const EntityModels = {
 const EntityModels = {
   Institution: InstitutionModel.Institution,
   Institution: InstitutionModel.Institution,

+ 7 - 5
services/web/app/src/models/DeletedProject.js → services/web/app/src/models/DeletedProject.mjs

@@ -1,10 +1,10 @@
-const mongoose = require('../infrastructure/Mongoose')
-const { ProjectSchema } = require('./Project')
+import mongoose from '../infrastructure/Mongoose.js'
+import { ProjectSchema } from './Project.mjs'
 
 
 const { Schema } = mongoose
 const { Schema } = mongoose
 const { ObjectId } = Schema
 const { ObjectId } = Schema
 
 
-const DeleterDataSchema = new Schema({
+export const DeleterDataSchema = new Schema({
   deleterId: { type: ObjectId, ref: 'User' },
   deleterId: { type: ObjectId, ref: 'User' },
   deleterIpAddress: { type: String },
   deleterIpAddress: { type: String },
   deletedAt: { type: Date },
   deletedAt: { type: Date },
@@ -30,5 +30,7 @@ const DeletedProjectSchema = new Schema(
   { collection: 'deletedProjects', minimize: false }
   { collection: 'deletedProjects', minimize: false }
 )
 )
 
 
-exports.DeletedProject = mongoose.model('DeletedProject', DeletedProjectSchema)
-exports.DeletedProjectSchema = DeletedProjectSchema
+export const DeletedProject = mongoose.model(
+  'DeletedProject',
+  DeletedProjectSchema
+)

+ 4 - 6
services/web/app/src/models/DeletedSubscription.js → services/web/app/src/models/DeletedSubscription.mjs

@@ -1,10 +1,10 @@
-const mongoose = require('../infrastructure/Mongoose')
-const { SubscriptionSchema } = require('./Subscription')
+import mongoose from '../infrastructure/Mongoose.js'
+import { SubscriptionSchema } from './Subscription.mjs'
 
 
 const { Schema } = mongoose
 const { Schema } = mongoose
 const { ObjectId } = Schema
 const { ObjectId } = Schema
 
 
-const DeleterDataSchema = new Schema(
+export const DeleterDataSchema = new Schema(
   {
   {
     deleterId: { type: ObjectId, ref: 'User' },
     deleterId: { type: ObjectId, ref: 'User' },
     deleterIpAddress: { type: String },
     deleterIpAddress: { type: String },
@@ -26,9 +26,7 @@ const DeletedSubscriptionSchema = new Schema(
   { collection: 'deletedSubscriptions', minimize: false }
   { collection: 'deletedSubscriptions', minimize: false }
 )
 )
 
 
-exports.DeletedSubscription = mongoose.model(
+export const DeletedSubscription = mongoose.model(
   'DeletedSubscription',
   'DeletedSubscription',
   DeletedSubscriptionSchema
   DeletedSubscriptionSchema
 )
 )
-
-exports.DeletedSubscriptionSchema = DeletedSubscriptionSchema

+ 4 - 6
services/web/app/src/models/DeletedUser.js → services/web/app/src/models/DeletedUser.mjs

@@ -1,5 +1,5 @@
-const mongoose = require('../infrastructure/Mongoose')
-const { UserSchema } = require('./User')
+import mongoose from '../infrastructure/Mongoose.js'
+import { UserSchema } from './User.mjs'
 
 
 const { Schema } = mongoose
 const { Schema } = mongoose
 const { ObjectId } = Schema
 const { ObjectId } = Schema
@@ -18,7 +18,7 @@ const DeleterDataSchema = new Schema({
   deletedUserOverleafId: { type: Number },
   deletedUserOverleafId: { type: Number },
 })
 })
 
 
-const DeletedUserSchema = new Schema(
+export const DeletedUserSchema = new Schema(
   {
   {
     deleterData: DeleterDataSchema,
     deleterData: DeleterDataSchema,
     user: UserSchema,
     user: UserSchema,
@@ -26,6 +26,4 @@ const DeletedUserSchema = new Schema(
   { collection: 'deletedUsers', minimize: false }
   { collection: 'deletedUsers', minimize: false }
 )
 )
 
 
-exports.DeletedUser = mongoose.model('DeletedUser', DeletedUserSchema)
-
-exports.DeletedUserSchema = DeletedUserSchema
+export const DeletedUser = mongoose.model('DeletedUser', DeletedUserSchema)

+ 0 - 14
services/web/app/src/models/Doc.js

@@ -1,14 +0,0 @@
-const mongoose = require('../infrastructure/Mongoose')
-
-const { Schema } = mongoose
-
-const DocSchema = new Schema(
-  {
-    name: { type: String, default: 'new doc' },
-  },
-  { minimize: false }
-)
-
-exports.Doc = mongoose.model('Doc', DocSchema)
-
-exports.DocSchema = DocSchema

+ 12 - 0
services/web/app/src/models/Doc.mjs

@@ -0,0 +1,12 @@
+import mongoose from '../infrastructure/Mongoose.js'
+
+const { Schema } = mongoose
+
+export const DocSchema = new Schema(
+  {
+    name: { type: String, default: 'new doc' },
+  },
+  { minimize: false }
+)
+
+export const Doc = mongoose.model('Doc', DocSchema)

+ 2 - 2
services/web/app/src/models/DocSnapshot.js → services/web/app/src/models/DocSnapshot.mjs

@@ -1,4 +1,4 @@
-const mongoose = require('../infrastructure/Mongoose')
+import mongoose from '../infrastructure/Mongoose.js'
 
 
 const { Schema } = mongoose
 const { Schema } = mongoose
 
 
@@ -15,4 +15,4 @@ const DocSnapshotSchema = new Schema(
   { collection: 'docSnapshots', minimize: false }
   { collection: 'docSnapshots', minimize: false }
 )
 )
 
 
-exports.DocSnapshot = mongoose.model('DocSnapshot', DocSnapshotSchema)
+export const DocSnapshot = mongoose.model('DocSnapshot', DocSnapshotSchema)

+ 3 - 4
services/web/app/src/models/Feedback.js → services/web/app/src/models/Feedback.mjs

@@ -1,8 +1,8 @@
-const mongoose = require('../infrastructure/Mongoose')
+import mongoose from '../infrastructure/Mongoose.js'
 const { Schema } = mongoose
 const { Schema } = mongoose
 const { ObjectId } = Schema
 const { ObjectId } = Schema
 
 
-const FeedbackSchema = new Schema(
+export const FeedbackSchema = new Schema(
   {
   {
     userId: {
     userId: {
       type: ObjectId,
       type: ObjectId,
@@ -20,5 +20,4 @@ const FeedbackSchema = new Schema(
   { minimize: false }
   { minimize: false }
 )
 )
 
 
-exports.Feedback = mongoose.model('Feedback', FeedbackSchema)
-exports.FeedbackSchema = FeedbackSchema
+export const Feedback = mongoose.model('Feedback', FeedbackSchema)

+ 3 - 4
services/web/app/src/models/File.js → services/web/app/src/models/File.mjs

@@ -1,8 +1,8 @@
-const mongoose = require('../infrastructure/Mongoose')
+import mongoose from '../infrastructure/Mongoose.js'
 
 
 const { Schema } = mongoose
 const { Schema } = mongoose
 
 
-const FileSchema = new Schema(
+export const FileSchema = new Schema(
   {
   {
     name: {
     name: {
       type: String,
       type: String,
@@ -23,5 +23,4 @@ const FileSchema = new Schema(
   { minimize: false }
   { minimize: false }
 )
 )
 
 
-exports.File = mongoose.model('File', FileSchema)
-exports.FileSchema = FileSchema
+export const File = mongoose.model('File', FileSchema)

+ 0 - 21
services/web/app/src/models/Folder.js

@@ -1,21 +0,0 @@
-const mongoose = require('../infrastructure/Mongoose')
-const { DocSchema } = require('./Doc')
-const { FileSchema } = require('./File')
-
-const { Schema } = mongoose
-
-const FolderSchema = new Schema(
-  {
-    name: { type: String, default: 'new folder' },
-  },
-  { minimize: false }
-)
-
-FolderSchema.add({
-  docs: [DocSchema],
-  fileRefs: [FileSchema],
-  folders: [FolderSchema],
-})
-
-exports.Folder = mongoose.model('Folder', FolderSchema)
-exports.FolderSchema = FolderSchema

+ 20 - 0
services/web/app/src/models/Folder.mjs

@@ -0,0 +1,20 @@
+import mongoose from '../infrastructure/Mongoose.js'
+import { DocSchema } from './Doc.mjs'
+import { FileSchema } from './File.mjs'
+
+const { Schema } = mongoose
+
+export const FolderSchema = new Schema(
+  {
+    name: { type: String, default: 'new folder' },
+  },
+  { minimize: false }
+)
+
+FolderSchema.add({
+  docs: [DocSchema],
+  fileRefs: [FileSchema],
+  folders: [FolderSchema],
+})
+
+export const Folder = mongoose.model('Folder', FolderSchema)

+ 0 - 19
services/web/app/src/models/GlobalMetric.js

@@ -1,19 +0,0 @@
-const mongoose = require('../infrastructure/Mongoose')
-const { Schema } = mongoose
-
-const GlobalMetricSchema = new Schema(
-  {
-    _id: { type: String, required: true },
-    value: {
-      type: Number,
-      default: 0,
-    },
-  },
-  {
-    collection: 'globalMetrics',
-    minimize: false,
-  }
-)
-
-exports.GlobalMetric = mongoose.model('GlobalMetric', GlobalMetricSchema)
-exports.GlobalMetricSchema = GlobalMetricSchema

+ 18 - 0
services/web/app/src/models/GlobalMetric.mjs

@@ -0,0 +1,18 @@
+import mongoose from '../infrastructure/Mongoose.js'
+const { Schema } = mongoose
+
+export const GlobalMetricSchema = new Schema(
+  {
+    _id: { type: String, required: true },
+    value: {
+      type: Number,
+      default: 0,
+    },
+  },
+  {
+    collection: 'globalMetrics',
+    minimize: false,
+  }
+)
+
+export const GlobalMetric = mongoose.model('GlobalMetric', GlobalMetricSchema)

+ 3 - 4
services/web/app/src/models/GroupAuditLogEntry.js → services/web/app/src/models/GroupAuditLogEntry.mjs

@@ -1,7 +1,7 @@
-const mongoose = require('../infrastructure/Mongoose')
+import mongoose from '../infrastructure/Mongoose.js'
 const { Schema } = mongoose
 const { Schema } = mongoose
 
 
-const GroupAuditLogEntrySchema = new Schema(
+export const GroupAuditLogEntrySchema = new Schema(
   {
   {
     groupId: { type: Schema.Types.ObjectId, index: true },
     groupId: { type: Schema.Types.ObjectId, index: true },
     info: { type: Object },
     info: { type: Object },
@@ -16,8 +16,7 @@ const GroupAuditLogEntrySchema = new Schema(
   }
   }
 )
 )
 
 
-exports.GroupAuditLogEntry = mongoose.model(
+export const GroupAuditLogEntry = mongoose.model(
   'GroupAuditLogEntry',
   'GroupAuditLogEntry',
   GroupAuditLogEntrySchema
   GroupAuditLogEntrySchema
 )
 )
-exports.GroupAuditLogEntrySchema = GroupAuditLogEntrySchema

+ 3 - 4
services/web/app/src/models/GroupPolicy.js → services/web/app/src/models/GroupPolicy.mjs

@@ -1,8 +1,8 @@
-const mongoose = require('../infrastructure/Mongoose')
+import mongoose from '../infrastructure/Mongoose.js'
 
 
 const { Schema } = mongoose
 const { Schema } = mongoose
 
 
-const GroupPolicySchema = new Schema(
+export const GroupPolicySchema = new Schema(
   {
   {
     // User can't delete their own account
     // User can't delete their own account
     userCannotDeleteOwnAccount: Boolean,
     userCannotDeleteOwnAccount: Boolean,
@@ -34,5 +34,4 @@ const GroupPolicySchema = new Schema(
   { minimize: false }
   { minimize: false }
 )
 )
 
 
-exports.GroupPolicy = mongoose.model('GroupPolicy', GroupPolicySchema)
-exports.GroupPolicySchema = GroupPolicySchema
+export const GroupPolicy = mongoose.model('GroupPolicy', GroupPolicySchema)

+ 7 - 8
services/web/app/src/models/Institution.js → services/web/app/src/models/Institution.mjs

@@ -1,12 +1,12 @@
-const mongoose = require('../infrastructure/Mongoose')
+import mongoose from '../infrastructure/Mongoose.js'
+import settings from '@overleaf/settings'
+import logger from '@overleaf/logger'
+import { promisify } from '@overleaf/promise-utils'
+import { fetchJson } from '@overleaf/fetch-utils'
 const { Schema } = mongoose
 const { Schema } = mongoose
 const { ObjectId } = Schema
 const { ObjectId } = Schema
-const settings = require('@overleaf/settings')
-const logger = require('@overleaf/logger')
-const { promisify } = require('@overleaf/promise-utils')
-const { fetchJson } = require('@overleaf/fetch-utils')
 
 
-const InstitutionSchema = new Schema(
+export const InstitutionSchema = new Schema(
   {
   {
     v1Id: { type: Number, required: true },
     v1Id: { type: Number, required: true },
     managerIds: [{ type: ObjectId, ref: 'User' }],
     managerIds: [{ type: ObjectId, ref: 'User' }],
@@ -45,5 +45,4 @@ InstitutionSchema.method(
   promisify(InstitutionSchema.methods.fetchV1Data)
   promisify(InstitutionSchema.methods.fetchV1Data)
 )
 )
 
 
-exports.Institution = mongoose.model('Institution', InstitutionSchema)
-exports.InstitutionSchema = InstitutionSchema
+export const Institution = mongoose.model('Institution', InstitutionSchema)

+ 3 - 5
services/web/app/src/models/OauthAccessToken.js → services/web/app/src/models/OauthAccessToken.mjs

@@ -1,9 +1,9 @@
-const mongoose = require('../infrastructure/Mongoose')
+import mongoose from '../infrastructure/Mongoose.js'
 
 
 const { Schema } = mongoose
 const { Schema } = mongoose
 const { ObjectId } = Schema
 const { ObjectId } = Schema
 
 
-const OauthAccessTokenSchema = new Schema(
+export const OauthAccessTokenSchema = new Schema(
   {
   {
     accessToken: String,
     accessToken: String,
     accessTokenPartial: String,
     accessTokenPartial: String,
@@ -24,9 +24,7 @@ const OauthAccessTokenSchema = new Schema(
   }
   }
 )
 )
 
 
-exports.OauthAccessToken = mongoose.model(
+export const OauthAccessToken = mongoose.model(
   'OauthAccessToken',
   'OauthAccessToken',
   OauthAccessTokenSchema
   OauthAccessTokenSchema
 )
 )
-
-exports.OauthAccessTokenSchema = OauthAccessTokenSchema

Некоторые файлы не были показаны из-за большого количества измененных файлов