## Summary - **Cloudflare R2 Migration**: - Migrated `static.ermnvldmr.com` asset storage to Cloudflare R2 bucket `com-ermnvldmr-static` (location `WEUR`). - Added support for `COM_ERMNVLDMR_STATIC_PUBLIC_URL` fallback in `@ermnvldmr/cli` to properly format public asset URLs for non-dotted bucket names. - Relocated public CA cert to `/dev/ssl/certs/ErmnvldmrDevelopmentRootCA.pem` and updated `REMOTE_ROOT_CA_URL` references in `@ermnvldmr/rsbuild-config` and `ensure-dev-certs.mjs`. - Configured R2 CORS policies using wildcards (`https://*.ermnvldmr.com`, `https://ermnvldmr.com`, `https://localhost.ermnvldmr.com*`, `http://localhost*`, `https://direct.yandex.ru`, `https://*.direct.yandex.ru`, `https://localhost.yandex.ru*`). - Enforced minimum TLS 1.2 on zone `ermnvldmr.com`. - Updated encrypted `.env.dev` and GitHub secrets in both `deytenit/ermnvldmr.com` and `deytenit/apex.ermnvldmr.com`. - **Multi-locale SSG Support**: - Added `NormalModuleReplacementPlugin` to SSR runner in `@ermnvldmr/ssg` for automatic `.en.mdx` -> `.${locale}.mdx` substitution during Russian builds. - Added page metadata extraction (`getPageOptions`) in `@ermnvldmr/ssg` for pre-rendered `<title>` and `<meta name="description">` tags. - Added unit test suite for `createPage` and updated `services/www` build scripts (`build:all`, `build:en`, `build:ru`, `dev:en`, `dev:ru`).
88 lines
3.2 KiB
JSON
88 lines
3.2 KiB
JSON
{
|
|
"name": "@ermnvldmr/www",
|
|
"version": "1.0.0",
|
|
"description": "www.ermnvldmr.com website",
|
|
"type": "module",
|
|
"scripts": {
|
|
"cli": "ermnvldmr-cli",
|
|
"sync:static": "pnpm cli sync:static",
|
|
"dev": "rsbuild dev",
|
|
"dev:en": "LOCALE=en rsbuild dev",
|
|
"dev:ru": "LOCALE=ru rsbuild dev",
|
|
"build": "pnpm run build:all",
|
|
"build:en": "LOCALE=en rsbuild build",
|
|
"build:ru": "LOCALE=ru rsbuild build",
|
|
"build:all": "pnpm run build:en && pnpm run build:ru",
|
|
"build:analyze": "RSDOCTOR=true rsbuild build",
|
|
"preview": "rsbuild preview",
|
|
"lint": "eslint src \"content/**/*.mdx\" --max-warnings 0",
|
|
"format": "prettier --write .",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"test:coverage": "vitest run --coverage",
|
|
"test:storybook": "test-storybook --coverage --config-dir .config/storybook",
|
|
"test:storybook:ci": "concurrently -k -s first -n \"SB,TEST\" -c \"magenta,blue\" \"http-server storybook-static --port 6006 --silent\" \"wait-on tcp:127.0.0.1:6006 && pnpm run test:storybook\"",
|
|
"check": "pnpm run lint && pnpm run typecheck && pnpm run test",
|
|
"clean": "rm -rf dist .turbo node_modules coverage storybook-static",
|
|
"storybook": "storybook dev -p 6006 -c .config/storybook",
|
|
"storybook:preview": "http-server storybook-static --port 6006",
|
|
"build-storybook": "storybook build -c .config/storybook"
|
|
},
|
|
"dependencies": {
|
|
"@ermnvldmr/i18n": "workspace:*",
|
|
"@ermnvldmr/kits": "workspace:*",
|
|
"@ermnvldmr/ssg": "workspace:*",
|
|
"@ermnvldmr/stl": "workspace:*",
|
|
"@ermnvldmr/ui": "workspace:*",
|
|
"lucide-react": "^0.503.0",
|
|
"react": "^19.1.0",
|
|
"react-dom": "^19.1.0",
|
|
"tailwindcss": "^4.1.4"
|
|
},
|
|
"devDependencies": {
|
|
"@ermnvldmr/cli": "workspace:*",
|
|
"@ermnvldmr/eslint-config": "workspace:*",
|
|
"@ermnvldmr/rsbuild-config": "workspace:*",
|
|
"@ermnvldmr/storybook-config": "workspace:*",
|
|
"@rsbuild/core": "^1.2.11",
|
|
"@rsbuild/plugin-babel": "^1.1.0",
|
|
"@rsbuild/plugin-mdx": "^1.1.1",
|
|
"@rsdoctor/rspack-plugin": "^1.5.3",
|
|
"@storybook/addon-a11y": "^8.6.15",
|
|
"@storybook/addon-coverage": "^3.0.0",
|
|
"@storybook/addon-essentials": "^8.6.15",
|
|
"@storybook/addon-interactions": "^8.6.15",
|
|
"@storybook/addon-themes": "^8.6.15",
|
|
"@storybook/react": "^8.6.15",
|
|
"@storybook/react-vite": "^8.6.15",
|
|
"@storybook/test": "^8.6.15",
|
|
"@storybook/test-runner": "^0.19.1",
|
|
"@tailwindcss/postcss": "^4.1.18",
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
"@testing-library/react": "^16.3.1",
|
|
"@testing-library/user-event": "^14.6.1",
|
|
"@types/node": "*",
|
|
"@types/react": "^19.1.2",
|
|
"@types/react-dom": "^19.1.2",
|
|
"@vitest/coverage-v8": "^4.0.18",
|
|
"babel-plugin-istanbul": "^7.0.1",
|
|
"concurrently": "^9.1.2",
|
|
"eslint": "^9.25.1",
|
|
"http-server": "^14.1.1",
|
|
"jsdom": "^28.0.0",
|
|
"playwright": "^1.57.0",
|
|
"postcss": "^8.5.23",
|
|
"prettier": "^3.5.3",
|
|
"prettier-plugin-tailwindcss": "^0.6.11",
|
|
"remark-frontmatter": "^5.0.0",
|
|
"remark-mdx-frontmatter": "^5.2.0",
|
|
"storybook": "^8.6.17",
|
|
"storybook-react-rsbuild": "^1.0.3",
|
|
"ts-node": "^10.9.2",
|
|
"typescript": "^5.8.3",
|
|
"vitest": "^4.1.11",
|
|
"wait-on": "^8.0.3"
|
|
}
|
|
}
|