diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index aac3b93..6871c1b 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -29,22 +29,28 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v6 + - name: Setup Pages uses: actions/configure-pages@v5 + - name: Set up Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: - node-version: '22' + node-version: '24' + - name: Install dependencies run: npm ci + - name: Build app run: npm run build + - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: # Upload the build output path: 'dist' + - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..4bdf9a7 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,23 @@ +name: Check lint, format & types + +on: + pull_request: + branches: [main] + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: '24' + + - name: Install dependencies + run: npm ci + + - name: Run tests + run: npm test diff --git a/package-lock.json b/package-lock.json index cc3fadb..09eed6a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -52,7 +52,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -1512,7 +1511,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -1965,7 +1963,6 @@ "resolved": "https://registry.npmjs.org/preact/-/preact-10.28.4.tgz", "integrity": "sha512-uKFfOHWuSNpRFVTnljsCluEFq57OKT+0QdOiQo8XWnQ/pSvg7OpX5eNOejELXJMWy+BwM2nobz0FkvzmnpCNsQ==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -1986,7 +1983,6 @@ "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-6.6.6.tgz", "integrity": "sha512-EfqZJytnjJldV+YaaqhthU2oXsEf5e+6rDv957p+zxAvNfFLQOPfvBOTncscQ+akzu6Wrl7s3Pa0LjUQmWJsGQ==", "license": "MIT", - "peer": true, "peerDependencies": { "preact": ">=10 || >= 11.0.0-0" } @@ -1997,7 +1993,6 @@ "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -2155,7 +2150,6 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", diff --git a/package.json b/package.json index 8321f41..424a8e3 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,9 @@ "build": "vite build", "preview": "vite preview", "lint": "biome check", - "format": "biome format" + "format": "biome format", + "typecheck": "tsc --noEmit", + "test": "npm run lint && npm run typecheck" }, "keywords": [], "author": "", diff --git a/src/i18n/context.tsx b/src/i18n/context.tsx index ecd0f6b..4a8cfa7 100644 --- a/src/i18n/context.tsx +++ b/src/i18n/context.tsx @@ -25,20 +25,12 @@ const I18nContext = createContext(null) * Each locale is a separate chunk loaded on demand */ async function loadLocale(locale: Locale): Promise { - switch (locale) { - case 'es': - return (await import('./locales/es')).default - case 'fr': - return (await import('./locales/fr')).default - case 'de': - return (await import('./locales/de')).default - case 'sv': - return (await import('./locales/sv')).default - case 'pt': - return (await import('./locales/pt')).default - default: - return en - } + if (locale === DEFAULT_LOCALE) return en + if (!SUPPORTED_LOCALES.includes(locale)) return en + const module: { default: Translations } = await import( + `./locales/${locale}.ts` + ) + return module.default } /** diff --git a/src/i18n/locales/pt.ts b/src/i18n/locales/pt.ts index 398ce26..5a7c8d7 100644 --- a/src/i18n/locales/pt.ts +++ b/src/i18n/locales/pt.ts @@ -64,4 +64,4 @@ const pt: Translations = { toggleTheme: 'Alternar tema', } -export default pt \ No newline at end of file +export default pt