From 1b03597fa7a8a564a85162a5ba422c9ea7d777b7 Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Sat, 6 Sep 2025 20:45:03 +0100 Subject: [PATCH 01/16] tsconfig: add tsconfig for server --- server/tsconfig.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 server/tsconfig.json diff --git a/server/tsconfig.json b/server/tsconfig.json new file mode 100644 index 0000000000..3cd303094b --- /dev/null +++ b/server/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "target": "ES2022", + "module": "commonjs", + "lib": ["ES2022"], + "types": ["node"], + }, + "include": ["./**/*"], + "exclude": ["../node_modules", "../client"] +} From 97c4487de6a483c60be7db8ecbfeb9b7377c973a Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Sat, 6 Sep 2025 20:46:03 +0100 Subject: [PATCH 02/16] add typecheck:server command and add server-check to main typecheck --- client/tsconfig.json | 2 ++ package.json | 5 +++-- tsconfig.json | 4 ++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/client/tsconfig.json b/client/tsconfig.json index 0bc03b38de..9e63548a60 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -6,4 +6,6 @@ "lib": ["DOM", "ESNext"], "jsx": "react", }, + "include": ["./**/*"], + "exclude": ["../node_modules", "../server"] } \ No newline at end of file diff --git a/package.json b/package.json index f21f1c3c12..989ef2a75c 100644 --- a/package.json +++ b/package.json @@ -27,8 +27,9 @@ "storybook:build:css": "sass client/styles/main.scss client/styles/storybook.css", "storybook": "npm run storybook:build:css && storybook dev -p 6006", "build-storybook": "storybook build", - "typecheck": "npm run typecheck:client", - "typecheck:client": "npx tsc --noEmit -p ./client/tsconfig.json" + "typecheck": "npm run typecheck:client && npm run typecheck:server", + "typecheck:client": "npx tsc --noEmit -p ./client/tsconfig.json", + "typecheck:server": "npx tsc --noEmit -p ./server/tsconfig.json" }, "husky": { "hooks": { diff --git a/tsconfig.json b/tsconfig.json index bcb601b012..97fe81b722 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "files": [], "references": [ - { "path": "client" }, - // { "path": "server" } + { "path": "./client" }, + { "path": "./server" } ], } \ No newline at end of file From 359c58cfffc95c6b5493e63cfea0a5fde94b58ff Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Sat, 6 Sep 2025 20:49:03 +0100 Subject: [PATCH 03/16] server/utils/generateFileSystemSafeName.js: migrate to ts, no-verify --- ...enerateFileSystemSafeName.js => generateFileSystemSafeName.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename server/utils/{generateFileSystemSafeName.js => generateFileSystemSafeName.ts} (100%) diff --git a/server/utils/generateFileSystemSafeName.js b/server/utils/generateFileSystemSafeName.ts similarity index 100% rename from server/utils/generateFileSystemSafeName.js rename to server/utils/generateFileSystemSafeName.ts From 85b947231f2ed80859e6c497b6f891a46f48fff7 Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Sat, 6 Sep 2025 20:49:32 +0100 Subject: [PATCH 04/16] server/utils/generateFileSystemSafeName: add types to params --- server/utils/generateFileSystemSafeName.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/utils/generateFileSystemSafeName.ts b/server/utils/generateFileSystemSafeName.ts index db835979a7..c50233e546 100644 --- a/server/utils/generateFileSystemSafeName.ts +++ b/server/utils/generateFileSystemSafeName.ts @@ -5,7 +5,7 @@ * @param {String} string * @param {String} replacer (optional) character to replace invalid characters */ -function generateFileSystemSafeName(string, replacer) { +function generateFileSystemSafeName(string: string, replacer: string) { // from here https://serverfault.com/a/242134 const INVALID_CHARS_REGEX = /[*/?:\\<>|"\u0000-\u001F]/g; // eslint-disable-line const slug = string.replace(INVALID_CHARS_REGEX, replacer || ''); From 4a98bbbd9fa195a5bab0ba5451b55480322f4bc7 Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Sat, 6 Sep 2025 21:13:26 +0100 Subject: [PATCH 05/16] index.js: update babel/register to resolve both js and ts files --- index.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 73d3c51857..0bc460ad45 100644 --- a/index.js +++ b/index.js @@ -1,11 +1,14 @@ if (process.env.NODE_ENV === 'production') { - process.env.webpackAssets = JSON.stringify(require('./dist/static/manifest.json')); + process.env.webpackAssets = JSON.stringify( + require('./dist/static/manifest.json') + ); require('./dist/server.bundle.js'); require('./dist/previewServer.bundle.js'); } else { let parsed = require('dotenv').config(); require('@babel/register')({ - presets: ["@babel/preset-env"] + extensions: ['.js', '.jsx', '.ts', '.tsx'], + presets: ['@babel/preset-env', '@babel/preset-typescript'] }); require('regenerator-runtime/runtime'); //// in development, let .env values override those in the environment already (i.e. in docker-compose.yml) From cf3350096c741e39b83c920b1027192856a86648 Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Sat, 6 Sep 2025 21:14:32 +0100 Subject: [PATCH 06/16] nodemon.json: update to hot-reload on ts file changes --- nodemon.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nodemon.json b/nodemon.json index 033d1eeda3..6ae614aedc 100644 --- a/nodemon.json +++ b/nodemon.json @@ -12,5 +12,5 @@ "env": { "NODE_ENV": "development" }, - "ext": "js json" + "ext": "js ts json" } \ No newline at end of file From e12ad57e249786599099cda65d213d8cb19c6bb0 Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Sat, 6 Sep 2025 21:20:55 +0100 Subject: [PATCH 07/16] utils/generateFileSystemSafeName: update to named export --- server/controllers/project.controller.js | 2 +- server/utils/generateFileSystemSafeName.ts | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/server/controllers/project.controller.js b/server/controllers/project.controller.js index b1e167969b..18611eafb5 100644 --- a/server/controllers/project.controller.js +++ b/server/controllers/project.controller.js @@ -9,7 +9,7 @@ import slugify from 'slugify'; import Project from '../models/project'; import User from '../models/user'; import { resolvePathToFile } from '../utils/filePath'; -import generateFileSystemSafeName from '../utils/generateFileSystemSafeName'; +import { generateFileSystemSafeName } from '../utils/generateFileSystemSafeName'; export { default as createProject, diff --git a/server/utils/generateFileSystemSafeName.ts b/server/utils/generateFileSystemSafeName.ts index c50233e546..ba300034a2 100644 --- a/server/utils/generateFileSystemSafeName.ts +++ b/server/utils/generateFileSystemSafeName.ts @@ -5,12 +5,10 @@ * @param {String} string * @param {String} replacer (optional) character to replace invalid characters */ -function generateFileSystemSafeName(string: string, replacer: string) { +export function generateFileSystemSafeName(string: string, replacer: string) { // from here https://serverfault.com/a/242134 const INVALID_CHARS_REGEX = /[*/?:\\<>|"\u0000-\u001F]/g; // eslint-disable-line const slug = string.replace(INVALID_CHARS_REGEX, replacer || ''); return slug; } - -export default generateFileSystemSafeName; From 5210f5cca2f3e2e920569e65ef6bcf0236acb35d Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Sat, 6 Sep 2025 21:28:06 +0100 Subject: [PATCH 08/16] webpack: update examples and server config files to auto-resolve ts extensions --- webpack/config.examples.js | 6 +++--- webpack/config.server.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/webpack/config.examples.js b/webpack/config.examples.js index d36959c8ac..2826810abc 100644 --- a/webpack/config.examples.js +++ b/webpack/config.examples.js @@ -16,7 +16,7 @@ module.exports = [ resolve: { extensions: ['*', '.js', '.jsx', '.ts', '.tsx'], - modules: ['client', 'node_modules'] + modules: ['server', 'client', 'node_modules'] }, module: { @@ -46,7 +46,7 @@ module.exports = [ resolve: { extensions: ['*', '.js', '.jsx', '.ts', '.tsx'], - modules: ['client', 'node_modules'] + modules: ['server', 'client', 'node_modules'] }, module: { @@ -76,7 +76,7 @@ module.exports = [ resolve: { extensions: ['*', '.js', '.jsx', '.ts', '.tsx'], - modules: ['client', 'node_modules'] + modules: ['server', 'client', 'node_modules'] }, module: { diff --git a/webpack/config.server.js b/webpack/config.server.js index a4b58ea5ab..0ca72f435d 100644 --- a/webpack/config.server.js +++ b/webpack/config.server.js @@ -29,7 +29,7 @@ module.exports = { resolve: { extensions: ['*', '.js', '.jsx', '.ts', '.tsx'], - modules: ['client', 'node_modules'] + modules: ['server', 'client', 'node_modules'] }, module: { From 6b5ab9867ad354335174431413a2dae5a3297c35 Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Sat, 6 Sep 2025 21:29:39 +0100 Subject: [PATCH 09/16] webpack: update client-dev and client-prod config to auto-resolve server folder ts extensions after client folder --- webpack/config.dev.js | 2 +- webpack/config.prod.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/webpack/config.dev.js b/webpack/config.dev.js index 0475ddc327..85533fd7ae 100644 --- a/webpack/config.dev.js +++ b/webpack/config.dev.js @@ -30,7 +30,7 @@ module.exports = { }, resolve: { extensions: ['.js', '.jsx', '.ts', '.tsx'], - modules: ['client', 'node_modules'], + modules: ['client', 'server', 'node_modules'], fallback: { os: require.resolve('os-browserify/browser') } diff --git a/webpack/config.prod.js b/webpack/config.prod.js index 269d64b9bd..e125c621c5 100644 --- a/webpack/config.prod.js +++ b/webpack/config.prod.js @@ -36,7 +36,7 @@ module.exports = { resolve: { extensions: ['.js', '.jsx', '.ts', '.tsx'], - modules: ['client', 'node_modules'], + modules: ['client', 'server', 'node_modules'], fallback: { os: require.resolve('os-browserify/browser') } From 9fb10e5c7195886dc6f0046dcab502e80539e077 Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Sat, 6 Sep 2025 21:40:27 +0100 Subject: [PATCH 10/16] server/views/previewIndex: update to ts --- server/views/{previewIndex.js => previewIndex.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename server/views/{previewIndex.js => previewIndex.ts} (100%) diff --git a/server/views/previewIndex.js b/server/views/previewIndex.ts similarity index 100% rename from server/views/previewIndex.js rename to server/views/previewIndex.ts From 1757455573e0fc83ec5b357dc72fd3deb24b0b4f Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Sat, 6 Sep 2025 21:43:36 +0100 Subject: [PATCH 11/16] server/views/previewIndex: update to named export --- server/previewServer.js | 2 +- server/views/previewIndex.ts | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/server/previewServer.js b/server/previewServer.js index 8160e9a1ab..e46c8a454a 100644 --- a/server/previewServer.js +++ b/server/previewServer.js @@ -8,7 +8,7 @@ import webpackHotMiddleware from '@gatsbyjs/webpack-hot-middleware'; import config from '../webpack/config.dev'; import embedRoutes from './routes/embed.routes'; import assetRoutes from './routes/asset.routes'; -import renderPreviewIndex from './views/previewIndex'; +import { renderPreviewIndex } from './views/previewIndex'; const app = new Express(); diff --git a/server/views/previewIndex.ts b/server/views/previewIndex.ts index 60cb6e15b4..f3de4df4d5 100644 --- a/server/views/previewIndex.ts +++ b/server/views/previewIndex.ts @@ -1,4 +1,4 @@ -function renderPreviewIndex() { +export function renderPreviewIndex() { const assetsManifest = process.env.webpackAssets && JSON.parse(process.env.webpackAssets); return ` @@ -34,5 +34,3 @@ function renderPreviewIndex() { `; } - -export default renderPreviewIndex; From 0663d24a0b9bba7b8481ee078a76ace19cbcd38e Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Mon, 8 Sep 2025 01:19:58 +0100 Subject: [PATCH 12/16] server/views/index: update to ts, no-verify --- server/views/{index.js => index.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename server/views/{index.js => index.ts} (100%) diff --git a/server/views/index.js b/server/views/index.ts similarity index 100% rename from server/views/index.js rename to server/views/index.ts From 38409a64781d218e41cca6cb802cce7ef078ee4b Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Mon, 8 Sep 2025 01:23:16 +0100 Subject: [PATCH 13/16] views/index: update to named export and add types --- server/routes/server.routes.js | 2 +- server/views/index.ts | 105 +++++++++++++++++++++++++-------- 2 files changed, 81 insertions(+), 26 deletions(-) diff --git a/server/routes/server.routes.js b/server/routes/server.routes.js index 83b155a151..b6aeeca286 100644 --- a/server/routes/server.routes.js +++ b/server/routes/server.routes.js @@ -1,5 +1,5 @@ import { Router } from 'express'; -import sendHtml, { renderIndex, renderProjectIndex } from '../views/index'; +import { sendHtml, renderIndex, renderProjectIndex } from '../views/index'; import { userExists } from '../controllers/user.controller'; import { projectExists, diff --git a/server/views/index.ts b/server/views/index.ts index e1c78d3437..57656e256a 100644 --- a/server/views/index.ts +++ b/server/views/index.ts @@ -1,7 +1,9 @@ +import { Request, Response } from 'express'; import get404Sketch from './404Page'; export function renderIndex() { - const assetsManifest = process.env.webpackAssets && JSON.parse(process.env.webpackAssets); + const assetsManifest = + process.env.webpackAssets && JSON.parse(process.env.webpackAssets); return ` @@ -11,7 +13,11 @@ export function renderIndex() { p5.js Web Editor - ${process.env.NODE_ENV === 'production' ? `` : ''} + ${ + process.env.NODE_ENV === 'production' + ? `` + : '' + } @@ -25,16 +31,34 @@ export function renderIndex() { window.process.env.API_URL = '${process.env.API_URL}'; window.process.env.NODE_ENV = '${process.env.NODE_ENV}'; window.process.env.S3_BUCKET = '${process.env.S3_BUCKET}'; - window.process.env.S3_BUCKET_URL_BASE = ${process.env.S3_BUCKET_URL_BASE ? `'${process.env.S3_BUCKET_URL_BASE}'` : undefined}; + window.process.env.S3_BUCKET_URL_BASE = ${ + process.env.S3_BUCKET_URL_BASE + ? `'${process.env.S3_BUCKET_URL_BASE}'` + : undefined + }; window.process.env.AWS_REGION = '${process.env.AWS_REGION}'; - window.process.env.FORCE_TO_HTTPS = ${process.env.FORCE_TO_HTTPS === 'false' ? false : undefined}; + window.process.env.FORCE_TO_HTTPS = ${ + process.env.FORCE_TO_HTTPS === 'false' ? false : undefined + }; window.process.env.CLIENT = true; - window.process.env.LOGIN_ENABLED = ${process.env.LOGIN_ENABLED === 'false' ? false : true}; - window.process.env.EXAMPLES_ENABLED = ${process.env.EXAMPLES_ENABLED === 'false' ? false : true}; - window.process.env.UI_ACCESS_TOKEN_ENABLED = ${process.env.UI_ACCESS_TOKEN_ENABLED === 'false' ? false : true}; - window.process.env.UI_COLLECTIONS_ENABLED = ${process.env.UI_COLLECTIONS_ENABLED === 'false' ? false : true}; - window.process.env.UPLOAD_LIMIT = ${process.env.UPLOAD_LIMIT ? `${process.env.UPLOAD_LIMIT}` : undefined}; - window.process.env.TRANSLATIONS_ENABLED = ${process.env.TRANSLATIONS_ENABLED === 'true' ? true : false}; + window.process.env.LOGIN_ENABLED = ${ + process.env.LOGIN_ENABLED !== 'false' + }; + window.process.env.EXAMPLES_ENABLED = ${ + process.env.EXAMPLES_ENABLED !== 'false' + }; + window.process.env.UI_ACCESS_TOKEN_ENABLED = ${ + process.env.UI_ACCESS_TOKEN_ENABLED !== 'false' + }; + window.process.env.UI_COLLECTIONS_ENABLED = ${ + process.env.UI_COLLECTIONS_ENABLED !== 'false' + }; + window.process.env.UPLOAD_LIMIT = ${ + process.env.UPLOAD_LIMIT ? `${process.env.UPLOAD_LIMIT}` : undefined + }; + window.process.env.TRANSLATIONS_ENABLED = ${ + process.env.TRANSLATIONS_ENABLED === 'true' + }; window.process.env.PREVIEW_URL = '${process.env.PREVIEW_URL}'; window.process.env.GA_MEASUREMENT_ID='${process.env.GA_MEASUREMENT_ID}'; @@ -42,14 +66,19 @@ export function renderIndex() {
- + `; } -export function renderProjectIndex(username, projectName) { - const assetsManifest = process.env.webpackAssets && JSON.parse(process.env.webpackAssets); +export function renderProjectIndex(username: string, projectName: string) { + const assetsManifest = + process.env.webpackAssets && JSON.parse(process.env.webpackAssets); return ` @@ -59,7 +88,11 @@ export function renderProjectIndex(username, projectName) { ${`${projectName} by ${username} -`}p5.js Web Editor - ${process.env.NODE_ENV === 'production' ? `` : ''} + ${ + process.env.NODE_ENV === 'production' + ? `` + : '' + } @@ -73,16 +106,34 @@ export function renderProjectIndex(username, projectName) { window.process.env.API_URL = '${process.env.API_URL}'; window.process.env.NODE_ENV = '${process.env.NODE_ENV}'; window.process.env.S3_BUCKET = '${process.env.S3_BUCKET}'; - window.process.env.S3_BUCKET_URL_BASE = ${process.env.S3_BUCKET_URL_BASE ? `'${process.env.S3_BUCKET_URL_BASE}'` : undefined}; + window.process.env.S3_BUCKET_URL_BASE = ${ + process.env.S3_BUCKET_URL_BASE + ? `'${process.env.S3_BUCKET_URL_BASE}'` + : undefined + }; window.process.env.AWS_REGION = '${process.env.AWS_REGION}'; - window.process.env.FORCE_TO_HTTPS = ${process.env.FORCE_TO_HTTPS === 'false' ? false : undefined}; + window.process.env.FORCE_TO_HTTPS = ${ + process.env.FORCE_TO_HTTPS === 'false' ? false : undefined + }; window.process.env.CLIENT = true; - window.process.env.LOGIN_ENABLED = ${process.env.LOGIN_ENABLED === 'false' ? false : true}; - window.process.env.EXAMPLES_ENABLED = ${process.env.EXAMPLES_ENABLED === 'false' ? false : true}; - window.process.env.UI_ACCESS_TOKEN_ENABLED = ${process.env.UI_ACCESS_TOKEN_ENABLED === 'false' ? false : true}; - window.process.env.UI_COLLECTIONS_ENABLED = ${process.env.UI_COLLECTIONS_ENABLED === 'false' ? false : true}; - window.process.env.UPLOAD_LIMIT = ${process.env.UPLOAD_LIMIT ? `${process.env.UPLOAD_LIMIT}` : undefined}; - window.process.env.TRANSLATIONS_ENABLED = ${process.env.TRANSLATIONS_ENABLED === 'true' ? true : false}; + window.process.env.LOGIN_ENABLED = ${ + process.env.LOGIN_ENABLED !== 'false' + }; + window.process.env.EXAMPLES_ENABLED = ${ + process.env.EXAMPLES_ENABLED !== 'false' + }; + window.process.env.UI_ACCESS_TOKEN_ENABLED = ${ + process.env.UI_ACCESS_TOKEN_ENABLED !== 'false' + }; + window.process.env.UI_COLLECTIONS_ENABLED = ${ + process.env.UI_COLLECTIONS_ENABLED !== 'false' + }; + window.process.env.UPLOAD_LIMIT = ${ + process.env.UPLOAD_LIMIT ? `${process.env.UPLOAD_LIMIT}` : undefined + }; + window.process.env.TRANSLATIONS_ENABLED = ${ + process.env.TRANSLATIONS_ENABLED === 'true' + }; window.process.env.PREVIEW_URL = '${process.env.PREVIEW_URL}'; window.process.env.GA_MEASUREMENT_ID='${process.env.GA_MEASUREMENT_ID}'; @@ -90,7 +141,11 @@ export function renderProjectIndex(username, projectName) {
- + `; @@ -102,7 +157,7 @@ export function renderProjectIndex(username, projectName) { * @param {import('express').e.Response} res * @param {boolean} [exists] */ -export default async function sendHtml(req, res, exists = true) { +export async function sendHtml(req: Request, res: Response, exists = true) { if (!exists) { res.status(404); const html = await get404Sketch(); @@ -110,4 +165,4 @@ export default async function sendHtml(req, res, exists = true) { } else { res.send(renderIndex()); } -}; +} From c69579da9fca204c1ee15babcb3483e91617fedf Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Mon, 8 Sep 2025 02:10:44 +0100 Subject: [PATCH 14/16] update jest config to resolve ts files in server with babel --- package.json | 9 +++++++++ server/tsconfig.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 989ef2a75c..4d9812862b 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,15 @@ { "displayName": "server", "testEnvironment": "node", + "transform": { + "^.+\\.[jt]sx?$": "babel-jest" + }, + "moduleFileExtensions": [ + "ts", + "js", + "json", + "node" + ], "setupFilesAfterEnv": [ "/server/jest.setup.js" ], diff --git a/server/tsconfig.json b/server/tsconfig.json index 3cd303094b..95fc0ce283 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -4,7 +4,7 @@ "target": "ES2022", "module": "commonjs", "lib": ["ES2022"], - "types": ["node"], + "types": ["node", "jest"], }, "include": ["./**/*"], "exclude": ["../node_modules", "../client"] From 914963a494784d15bdb1ab42c28e0f4f3ccaf70d Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Mon, 15 Sep 2025 20:01:50 +0100 Subject: [PATCH 15/16] generateFileSystemSafeName: update variable name for string --- server/utils/generateFileSystemSafeName.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/server/utils/generateFileSystemSafeName.ts b/server/utils/generateFileSystemSafeName.ts index ba300034a2..153db4a779 100644 --- a/server/utils/generateFileSystemSafeName.ts +++ b/server/utils/generateFileSystemSafeName.ts @@ -1,14 +1,17 @@ /** - * generate file system safe string for a given string + * generate file system safe string for a given name * that can be used as a valid file name * in all operating systems - * @param {String} string + * @param {String} originalName * @param {String} replacer (optional) character to replace invalid characters */ -export function generateFileSystemSafeName(string: string, replacer: string) { +export function generateFileSystemSafeName( + originalName: string, + replacer: string +) { // from here https://serverfault.com/a/242134 const INVALID_CHARS_REGEX = /[*/?:\\<>|"\u0000-\u001F]/g; // eslint-disable-line - const slug = string.replace(INVALID_CHARS_REGEX, replacer || ''); + const slug = originalName.replace(INVALID_CHARS_REGEX, replacer || ''); return slug; } From a6adfec51b49704620abb6a7a25842ee32d91f63 Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Mon, 15 Sep 2025 20:16:52 +0100 Subject: [PATCH 16/16] tsconfig: address comma dangle --- server/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/tsconfig.json b/server/tsconfig.json index 95fc0ce283..e13979599c 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -4,7 +4,7 @@ "target": "ES2022", "module": "commonjs", "lib": ["ES2022"], - "types": ["node", "jest"], + "types": ["node", "jest"] }, "include": ["./**/*"], "exclude": ["../node_modules", "../client"]