From 8b6d4df652fd78c05889a9f86311dd63dae0e76f Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Tue, 15 Jul 2025 22:30:18 +0100 Subject: [PATCH 1/6] migrate generateRandomName to TS --- ...{generateRandomName.js => generateRandomName.ts} | 4 ++-- package-lock.json | 13 +++++++++++++ package.json | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) rename client/utils/{generateRandomName.js => generateRandomName.ts} (82%) diff --git a/client/utils/generateRandomName.js b/client/utils/generateRandomName.ts similarity index 82% rename from client/utils/generateRandomName.js rename to client/utils/generateRandomName.ts index 70da438fc7..d9b71bfe09 100644 --- a/client/utils/generateRandomName.js +++ b/client/utils/generateRandomName.ts @@ -1,6 +1,6 @@ import friendlyWords from 'friendly-words'; -export function generateProjectName() { +export function generateProjectName(): string { const adj = friendlyWords.predicates[ Math.floor(Math.random() * friendlyWords.predicates.length) @@ -12,7 +12,7 @@ export function generateProjectName() { return `${adj} ${obj}`; } -export function generateCollectionName() { +export function generateCollectionName(): string { const adj = friendlyWords.predicates[ Math.floor(Math.random() * friendlyWords.predicates.length) diff --git a/package-lock.json b/package-lock.json index 37b9814a0d..182fda130e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -153,6 +153,7 @@ "@svgr/webpack": "^6.2.1", "@testing-library/jest-dom": "^5.15.0", "@testing-library/react": "^12.1.2", + "@types/friendly-words": "^1.2.2", "@types/jest": "^29.5.14", "@types/node": "^16.18.126", "@types/react": "^16.14.0", @@ -14473,6 +14474,12 @@ "integrity": "sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==", "dev": true }, + "node_modules/@types/friendly-words": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/friendly-words/-/friendly-words-1.2.2.tgz", + "integrity": "sha512-8Gr82MHnVM0CAf8r0iXBI5r3OSZydew3tzNCB6TaeEXmWUED8gkInwHh4+IWdyG5JwQBPfEsQmNvTSxbjM3deQ==", + "dev": true + }, "node_modules/@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", @@ -50716,6 +50723,12 @@ "integrity": "sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==", "dev": true }, + "@types/friendly-words": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/friendly-words/-/friendly-words-1.2.2.tgz", + "integrity": "sha512-8Gr82MHnVM0CAf8r0iXBI5r3OSZydew3tzNCB6TaeEXmWUED8gkInwHh4+IWdyG5JwQBPfEsQmNvTSxbjM3deQ==", + "dev": true + }, "@types/graceful-fs": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", diff --git a/package.json b/package.json index 2742412c4b..52bb24207a 100644 --- a/package.json +++ b/package.json @@ -114,6 +114,7 @@ "@svgr/webpack": "^6.2.1", "@testing-library/jest-dom": "^5.15.0", "@testing-library/react": "^12.1.2", + "@types/friendly-words": "^1.2.2", "@types/jest": "^29.5.14", "@types/node": "^16.18.126", "@types/react": "^16.14.0", From 3ff98eda853abe7acc9531e7037043f68b21b35d Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Tue, 15 Jul 2025 22:33:40 +0100 Subject: [PATCH 2/6] attempt to update eslint to allow auto importing ts js files --- .eslintrc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.eslintrc b/.eslintrc index 0f6a27cf72..ca9c0acf70 100644 --- a/.eslintrc +++ b/.eslintrc @@ -16,6 +16,16 @@ "import/no-unresolved": 0, "import/no-named-as-default": 0, "import/no-named-as-default-member": 0, + "import/extensions": [ // override airbnb setting to allow imports of js, jsx, ts, and tsx files to auto-resolve instead of error + "error", + "ignorePackages", + { + "js": "never", + "jsx": "never", + "ts": "never", + "tsx": "never" + } + ], "comma-dangle": 0, // not sure why airbnb turned this on. gross! "indent": 0, "no-console": 0, @@ -72,6 +82,11 @@ ], "settings": { "import/parser": "@babel/eslint-parser", + "import/resolver": { + "node": { + "extensions": [".js", ".jsx", ".ts", ".tsx"] + } + }, "import/resolve": { "moduleDirectory": ["node_modules"] } From 79d9a4bd6eddd4aa4d06e107b975a6b613211879 Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Tue, 15 Jul 2025 22:54:01 +0100 Subject: [PATCH 3/6] removed unused util --- client/utils/isSecurePage.js | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 client/utils/isSecurePage.js diff --git a/client/utils/isSecurePage.js b/client/utils/isSecurePage.js deleted file mode 100644 index e9e54ebe71..0000000000 --- a/client/utils/isSecurePage.js +++ /dev/null @@ -1,3 +0,0 @@ -const isSecurePage = () => window.location.protocol === 'https:'; - -export default isSecurePage; From 4e606e541e7aeec62a832670afa6e142b1d0a078 Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Tue, 15 Jul 2025 23:02:14 +0100 Subject: [PATCH 4/6] add jsdocs for generateRandomName instead of tests --- client/utils/generateRandomName.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/client/utils/generateRandomName.ts b/client/utils/generateRandomName.ts index d9b71bfe09..453f768c05 100644 --- a/client/utils/generateRandomName.ts +++ b/client/utils/generateRandomName.ts @@ -1,5 +1,10 @@ import friendlyWords from 'friendly-words'; +/** + * Generates a random friendly project name composed of an adjective and an object. + * @example + * generateProjectName(); // "brave mountain" + */ export function generateProjectName(): string { const adj = friendlyWords.predicates[ @@ -12,6 +17,11 @@ export function generateProjectName(): string { return `${adj} ${obj}`; } +/** + * Generates a random friendly collection name using an adjective. + * @example + * generateCollectionName(); // "My clever collection" + */ export function generateCollectionName(): string { const adj = friendlyWords.predicates[ From 6d842b5fd63d116c7efcf07956d113858d570b0c Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Wed, 16 Jul 2025 19:56:16 +0100 Subject: [PATCH 5/6] resolve ts import issue by mocking function implementation --- client/modules/IDE/components/Header/Nav.unit.test.jsx | 5 ++++- package.json | 8 ++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/client/modules/IDE/components/Header/Nav.unit.test.jsx b/client/modules/IDE/components/Header/Nav.unit.test.jsx index a15df02f4f..29fd6cc2ab 100644 --- a/client/modules/IDE/components/Header/Nav.unit.test.jsx +++ b/client/modules/IDE/components/Header/Nav.unit.test.jsx @@ -4,7 +4,10 @@ import { reduxRender } from '../../../../test-utils'; import Nav from './Nav'; -jest.mock('../../../../utils/generateRandomName'); +jest.mock('../../../../utils/generateRandomName', () => ({ + generateProjectName: () => 'test project name', + generateCollectionName: () => 'My clever collection' +})); // mock Menubar jest.mock( diff --git a/package.json b/package.json index 52bb24207a..4083811ab6 100644 --- a/package.json +++ b/package.json @@ -49,12 +49,16 @@ "/server/jest.setup.js" ], "testMatch": [ - "/server/**/*.test.(js|jsx)" + "/server/**/*.test.(js|jsx|ts|tsx)" ] }, { "displayName": "client", "testEnvironment": "jsdom", + "transform": { + "^.+\\.[jt]sx?$": "babel-jest" + }, + "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], "setupFilesAfterEnv": [ "/client/jest.setup.js" ], @@ -63,7 +67,7 @@ "\\.(css|less|scss)$": "/client/__mocks__/styleMock.js" }, "testMatch": [ - "/client/**/*.test.(js|jsx)" + "/client/**/*.test.(js|jsx|ts|tsx)" ] } ] From e1c7be88905c226b6ac4ac73cbecd2a0ec8d6983 Mon Sep 17 00:00:00 2001 From: Claire Peng Date: Wed, 16 Jul 2025 19:58:38 +0100 Subject: [PATCH 6/6] resolve properly by updating mock --- client/modules/IDE/components/Header/Nav.unit.test.jsx | 5 +---- .../{generateRandomName.js => generateRandomName.ts} | 0 2 files changed, 1 insertion(+), 4 deletions(-) rename client/utils/__mocks__/{generateRandomName.js => generateRandomName.ts} (100%) diff --git a/client/modules/IDE/components/Header/Nav.unit.test.jsx b/client/modules/IDE/components/Header/Nav.unit.test.jsx index 29fd6cc2ab..a15df02f4f 100644 --- a/client/modules/IDE/components/Header/Nav.unit.test.jsx +++ b/client/modules/IDE/components/Header/Nav.unit.test.jsx @@ -4,10 +4,7 @@ import { reduxRender } from '../../../../test-utils'; import Nav from './Nav'; -jest.mock('../../../../utils/generateRandomName', () => ({ - generateProjectName: () => 'test project name', - generateCollectionName: () => 'My clever collection' -})); +jest.mock('../../../../utils/generateRandomName'); // mock Menubar jest.mock( diff --git a/client/utils/__mocks__/generateRandomName.js b/client/utils/__mocks__/generateRandomName.ts similarity index 100% rename from client/utils/__mocks__/generateRandomName.js rename to client/utils/__mocks__/generateRandomName.ts