Merge pull request #28199 from overleaf/td-ar-script-runner-lint

Add ESLint rule to require Script Runner for scripts in web

GitOrigin-RevId: 94d5dac806e4c5480b7ed95cf8484a2d13ac8294
This commit is contained in:
Tim Down
2025-09-04 11:18:28 +01:00
committed by Copybot
parent 3b67025398
commit 5375d3967b
3 changed files with 113 additions and 3 deletions

View File

@@ -228,7 +228,7 @@ module.exports = {
},
{
// Backend scripts specific rules
files: ['**/scripts/**/*.js'],
files: ['**/scripts/**/*.{js,mjs}'],
rules: {
'no-restricted-syntax': [
'error',
@@ -256,6 +256,113 @@ module.exports = {
],
},
},
{
// Insist on using Script Runner for new scripts. Old scripts should be
// converted to use Script Runner in future, but are excluded for now
rules: {
'@overleaf/require-script-runner': 'error',
},
files: ['**/scripts/**/*.mjs'], // ESM only
excludedFiles: [
'modules/admin-roles/scripts/import_admin_role_assignments.mjs',
'modules/admin-roles/scripts/remove_admin_role_from_user.mjs',
'modules/admin-roles/scripts/remove_admin_roles_from_non_admins.mjs',
'modules/admin-roles/scripts/utils.mjs',
'modules/institutions/scripts/apply_policy_to_institution.mjs',
'modules/server-ce-scripts/scripts/change-compile-timeout.mjs',
'modules/server-ce-scripts/scripts/check-mongodb.mjs',
'modules/server-ce-scripts/scripts/check-redis.mjs',
'modules/server-ce-scripts/scripts/check-texlive-images.mjs',
'modules/server-ce-scripts/scripts/create-user.mjs',
'modules/server-ce-scripts/scripts/delete-user.mjs',
'modules/server-ce-scripts/scripts/export-user-projects.mjs',
'modules/server-ce-scripts/scripts/migrate-user-emails.mjs',
'modules/server-ce-scripts/scripts/rename-tag.mjs',
'modules/server-ce-scripts/scripts/transfer-all-projects-to-user.mjs',
'modules/server-ce-scripts/scripts/upgrade-user-features.mjs',
'modules/subscriptions/scripts/backfill_user_last_trial.mjs',
'scripts/add_feature_override.mjs',
'scripts/add_subscription_members_csv.mjs',
'scripts/analytics/helpers/GoogleBigQueryHelper.mjs',
'scripts/attach_dangling_comments_to_doc.mjs',
'scripts/back_fill_doc_rev.mjs',
'scripts/backfill_mixpanel_user_properties.mjs',
'scripts/backfill_project_image_name.mjs',
'scripts/backfill_project_invites_token_hmac.mjs',
'scripts/backfill_user_properties.mjs',
'scripts/backfill_users_sso_attribute.mjs',
'scripts/bench_bcrypt.mjs',
'scripts/check_institution_users.mjs',
'scripts/check_overleafModuleImports.mjs',
'scripts/check_saml_emails.mjs',
'scripts/clear_feedback_collection.mjs',
'scripts/clear_sessions_set_must_reconfirm.mjs',
'scripts/count_files_in_projects.mjs',
'scripts/count_project_size.mjs',
'scripts/create_oauth_personal_access_token.mjs',
'scripts/create_project.mjs',
'scripts/deactivate_projects.mjs',
'scripts/delete-duplicate-splittest-versions/delete_test_dupes.mjs',
'scripts/delete-orphaned-docs/delete-orphaned-docs.mjs',
'scripts/delete_dangling_comments.mjs',
'scripts/delete_orphaned_chat_threads.mjs',
'scripts/delete_orphaned_data_helper.mjs',
'scripts/delete_subscriptions.mjs',
'scripts/e2e_test_setup.mjs',
'scripts/ensure_affiliations.mjs',
'scripts/esm-check-migration.mjs',
'scripts/example/script_for_migration.mjs',
'scripts/fix_collaborator_refs_null.mjs',
'scripts/fix_comment_id.mjs',
'scripts/helpers/chunkArray.mjs',
'scripts/helpers/env_variable_helper.mjs',
'scripts/inst_table.mjs',
'scripts/invalidate_tokens.mjs',
'scripts/ip_matcher_ranges.mjs',
'scripts/learn/checkSanitize/checkSanitizeOptions.mjs',
'scripts/learn/checkSanitize/scrape.mjs',
'scripts/lezer-latex/benchmark.mjs',
'scripts/lezer-latex/print-tree.mjs',
'scripts/lezer-latex/random.mjs',
'scripts/lezer-latex/run.mjs',
'scripts/lezer-latex/test-incremental-parser.mjs',
'scripts/mark_migration.mjs',
'scripts/marketing-exports/error-assistant-export.mjs',
'scripts/marketing-exports/export.mjs',
'scripts/marketing-exports/linked-papers-users.mjs',
'scripts/marketing-exports/papers-export.mjs',
'scripts/marketing-exports/writefull-export.mjs',
'scripts/oauth/upgrade_token_scopes.mjs',
'scripts/plan-prices/plans.mjs',
'scripts/process_lapsed_reconfirmations.mjs',
'scripts/purge_non_logged_in_sessions.mjs',
'scripts/recurly/generate_recurly_prices.mjs',
'scripts/recurly/get_paypal_accounts_csv.mjs',
'scripts/recurly/recurly_prices.mjs',
'scripts/recurly/resync_recurly_state_single_subscription.mjs',
'scripts/recurly/resync_subscriptions.mjs',
'scripts/recurly/set_manually_collected_subscriptions.mjs',
'scripts/refresh_features.mjs',
'scripts/regenerate_duplicate_referral_ids.mjs',
'scripts/remove_deleted_users_from_token_access_refs.mjs',
'scripts/remove_email.mjs',
'scripts/remove_user_enrollment.mjs',
'scripts/sso_id_migration_check.mjs',
'scripts/stress_test.mjs',
'scripts/suspend_users.mjs',
'scripts/sync-user-entitlements/sync-user-entitlements.mjs',
'scripts/update_project_image_name.mjs',
'scripts/user-export/fs.mjs',
'scripts/user-export/http.mjs',
'scripts/user-export/observer.mjs',
'scripts/user-export/options.mjs',
'scripts/user-export/project.mjs',
'scripts/user-export/scrubber.mjs',
'scripts/user-export/stream.mjs',
'scripts/user-export/user.mjs',
'scripts/validate-data-of-model.mjs',
],
},
{
// Cypress specific rules
files: [

View File

@@ -48,7 +48,7 @@ function parseArgs() {
}
function usage() {
console.log(`Usage: find_dangling_comments.mjs [OPTS]
console.log(`Usage: check_docs.mjs [OPTS]
Options:
@@ -205,7 +205,7 @@ async function findDanglingThreadIds(projectId, docs) {
return []
}
const rooms = await db.rooms.find(
const rooms = db.rooms.find(
{ project_id: new ObjectId(projectId), thread_id: { $exists: true } },
{ readPreference: READ_PREFERENCE_SECONDARY }
)

View File

@@ -1,3 +1,6 @@
/* eslint-disable @overleaf/require-script-runner */
// This *is* ScriptRunner.
import { ScriptLog } from '../../app/src/models/ScriptLog.mjs'
import Settings from '@overleaf/settings'