Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Bulk reformats. `git config blame.ignoreRevsFile .git-blame-ignore-revs`
68dc0914d70d63eec885d513faf9ae80c35a8ec9 # prettier + CSS comment fix
2 changes: 1 addition & 1 deletion .github/FUNDING.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
# options. We do not run a GitHub Sponsors / Patreon / Ko-fi page —
# we're a Swiss Verein, not an individual maintainer.

custom: ["https://revamp-it.ch/get-involved/donate"]
custom: ['https://revamp-it.ch/get-involved/donate']
6 changes: 3 additions & 3 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: 🐛 Bug Report
description: Create a report to help us fix a bug
title: "[Bug]: "
labels: ["bug", "needs-triage"]
title: '[Bug]: '
labels: ['bug', 'needs-triage']
body:
- type: markdown
attributes:
Expand Down Expand Up @@ -84,4 +84,4 @@ body:
attributes:
label: Additional Context
description: Add any other context about the problem here
placeholder: Any additional information that might help us understand the issue
placeholder: Any additional information that might help us understand the issue
6 changes: 3 additions & 3 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: ✨ Feature Request
description: Suggest an idea for RevampIT
title: "[Feature]: "
labels: ["enhancement", "needs-triage"]
title: '[Feature]: '
labels: ['enhancement', 'needs-triage']
body:
- type: markdown
attributes:
Expand Down Expand Up @@ -74,4 +74,4 @@ body:
options:
- label: I'd be willing to implement this feature myself
- label: I'd be willing to help with testing
- label: I'd be willing to help with documentation
- label: I'd be willing to help with documentation
70 changes: 35 additions & 35 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,76 +1,76 @@
version: 2
updates:
# JavaScript/TypeScript dependencies (npm)
- package-ecosystem: "npm"
directory: "/"
- package-ecosystem: 'npm'
directory: '/'
schedule:
interval: "weekly"
day: "monday"
interval: 'weekly'
day: 'monday'
open-pull-requests-limit: 10
# tiptap's packages share one version and break TypeScript's command
# augmentation when bumped separately — they must move as one PR.
groups:
tiptap:
patterns:
- "@tiptap/*"
- '@tiptap/*'
# react-dom and the @types packages peer-pin react's major — a half-bump
# (react without react-dom, or code types split) cannot even npm ci.
react:
patterns:
- "react"
- "react-dom"
- "@types/react"
- "@types/react-dom"
- 'react'
- 'react-dom'
- '@types/react'
- '@types/react-dom'
# eslint-config-next is version-locked to next; a half-bump breaks lint.
next:
patterns:
- "next"
- "eslint-config-next"
- 'next'
- 'eslint-config-next'
# @auth/pg-adapter peer-depends on next-auth — the pair that produced the
# 2026-08 advisories must move together or neither installs.
next-auth:
patterns:
- "next-auth"
- "@auth/*"
- 'next-auth'
- '@auth/*'
# Tailwind v4 splits the engine from the PostCSS plugin; they share a
# version and a config format.
tailwind:
patterns:
- "tailwindcss"
- "@tailwindcss/*"
- "postcss"
- 'tailwindcss'
- '@tailwindcss/*'
- 'postcss'
eslint:
patterns:
- "eslint"
- "@eslint/*"
- "eslint-plugin-*"
- 'eslint'
- '@eslint/*'
- 'eslint-plugin-*'
jest:
patterns:
- "jest"
- "jest-environment-*"
- "@types/jest"
- "@testing-library/*"
- 'jest'
- 'jest-environment-*'
- '@types/jest'
- '@testing-library/*'
ignore:
# @types/node must track the RUNTIME major, not the newest release. CI
# (ci.yml NODE_VERSION) and the self-host deploy both pin Node 20, so a
# major bump types APIs production does not have — it also fails `verify`.
# Raise this deliberately when the runtime moves. (PR #356 closed for this.)
- dependency-name: "@types/node"
update-types: ["version-update:semver-major"]
- dependency-name: '@types/node'
update-types: ['version-update:semver-major']
commit-message:
prefix: "deps"
prefix: 'deps'
labels:
- "dependencies"
- "security"
- 'dependencies'
- 'security'

# GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: "weekly"
day: "monday"
interval: 'weekly'
day: 'monday'
commit-message:
prefix: "ci"
prefix: 'ci'
labels:
- "ci"
- "dependencies"
- 'ci'
- 'dependencies'
31 changes: 31 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Build output and vendored trees — formatting these is noise.
node_modules
.next
dist
build
out
coverage
.turbo
.vercel
*.min.js
*.min.css

# Generated during a build, so it is absent locally and present in CI — which
# makes a clean local --check no evidence at all. Contentlayer's output also
# uses import assertions, which prettier's parser rejects outright.
.contentlayer
.astro
.svelte-kit
storybook-static
test-results
playwright-report

# Lockfiles are generated; prettier would rewrite them wholesale.
package-lock.json
pnpm-lock.yaml
yarn.lock

# Markdown is deliberately out of scope for now. Prettier rewraps prose, which
# is where it is most opinionated and least useful, and it would bury the real
# diff. Remove this line when you want docs formatted too.
*.md
9 changes: 9 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"semi": true,
"singleQuote": true,
"printWidth": 100,
"tabWidth": 2,
"trailingComma": "all",
"arrowParens": "always",
"endOfLine": "lf"
}
42 changes: 23 additions & 19 deletions __mocks__/next-intl.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,40 +7,44 @@
* mock this module locally with jest.mock('next-intl', ...).
*/

const useTranslations = (_namespace) => (key, _params) => key
const useTranslations = (_namespace) => (key, _params) => key;

const useLocale = () => 'de'
const useLocale = () => 'de';

const useMessages = () => ({})
const useMessages = () => ({});

const useFormatter = () => ({
dateTime: (date) => String(date),
number: (n) => String(n),
relativeTime: (date) => String(date),
list: (items) => items.join(', '),
})
});

const NextIntlClientProvider = ({ children }) => children
const NextIntlClientProvider = ({ children }) => children;

const getTranslations = async (_namespace) => (key, _params) => key
const getTranslations = async (_namespace) => (key, _params) => key;

const getMessages = async () => ({})
const getMessages = async () => ({});

const getLocale = async () => 'de'
const getLocale = async () => 'de';

const defineRouting = (config) => config
const defineRouting = (config) => config;

const createNavigation = (_routing) => {
const Link = ({ href, children, className, ...props }) => {
const React = require('react')
return React.createElement('a', { href: typeof href === 'string' ? href : href?.pathname ?? '#', className, ...props }, children)
}
const redirect = jest.fn()
const usePathname = () => '/'
const useRouter = () => ({ push: jest.fn(), replace: jest.fn(), refresh: jest.fn() })
const getPathname = ({ href }) => (typeof href === 'string' ? href : href?.pathname ?? '/')
return { Link, redirect, usePathname, useRouter, getPathname }
}
const React = require('react');
return React.createElement(
'a',
{ href: typeof href === 'string' ? href : (href?.pathname ?? '#'), className, ...props },
children,
);
};
const redirect = jest.fn();
const usePathname = () => '/';
const useRouter = () => ({ push: jest.fn(), replace: jest.fn(), refresh: jest.fn() });
const getPathname = ({ href }) => (typeof href === 'string' ? href : (href?.pathname ?? '/'));
return { Link, redirect, usePathname, useRouter, getPathname };
};

module.exports = {
useTranslations,
Expand All @@ -53,4 +57,4 @@ module.exports = {
getLocale,
defineRouting,
createNavigation,
}
};
Loading