дообновил библиотеки
Gitea Actions Demo / build_and_push (push) Successful in 3m1s
Details
Gitea Actions Demo / build_and_push (push) Successful in 3m1s
Details
This commit is contained in:
parent
9cfceb688c
commit
9955f0d09a
|
|
@ -2,10 +2,33 @@
|
||||||
|
|
||||||
## Task State
|
## Task State
|
||||||
|
|
||||||
- task_id: TASK-DEPS-UPDATE-W2c
|
- task_id: TASK-DEPS-UPDATE (PARENT)
|
||||||
- status: success
|
- status: success (CLOSED)
|
||||||
- parent_task: TASK-DEPS-UPDATE (safe dependency update; Storybook 8 EXCLUDED as high-risk)
|
- parent_task: —
|
||||||
- summary: W2b DONE + Architect-verified (TS 5.8.3, vue-tsc 2.2.12). Now W2c: vite 4→5 + @vitejs/plugin-vue 4→5.
|
- summary: **All waves W0a→W3 done and Architect-verified.** Final stack: vue 3.5.42, pinia 3.0.4, TS 5.8.3, vue-tsc 2.2.12, vite 5.4.21, eslint 9.39.5, typescript-eslint 8.69.0, node:22 (Docker). lint 0 errors, build green, docker build green.
|
||||||
|
- next task: create a NEW task_id when starting the next feature.
|
||||||
|
|
||||||
|
## W3 acceptance criteria
|
||||||
|
|
||||||
|
- `eslint` 9.x + `typescript-eslint` 8.x in yarn.lock; legacy `@typescript-eslint/eslint-plugin@6` + `@typescript-eslint/parser@6` removed (superseded by the `typescript-eslint` 8 meta-package); NO other package moved to a new major
|
||||||
|
- `yarn lint` 0 errors + `yarn build` green
|
||||||
|
- `eslint.config.mjs` adjustments minimal and documented (flat config already in use — migration should be trivial)
|
||||||
|
- Memory Bank: status `success` + Success Report
|
||||||
|
|
||||||
|
## W3 notes for the Coder
|
||||||
|
|
||||||
|
- Current state: `eslint@8.57.1` (flat config works on 8.57), `typescript-eslint@7.18.0`, legacy `@typescript-eslint/eslint-plugin@^6.11.0` + `@typescript-eslint/parser@^6.11.0` still in package.json (redundant with the meta-package but currently unused by eslint.config.mjs).
|
||||||
|
- Target: `yarn add -D eslint@^9 typescript-eslint@^8`, then `yarn remove @typescript-eslint/eslint-plugin @typescript-eslint/parser` ONLY if eslint.config.mjs does not import them directly (check first).
|
||||||
|
- eslint 9 removes some legacy config options — if `eslint.config.mjs` breaks, apply the minimal migration (documented).
|
||||||
|
- `eslint-plugin-prettier`/`@vue/eslint-config-prettier` are NOT part of W3 — leave versions as-is.
|
||||||
|
|
||||||
|
## W2d acceptance criteria
|
||||||
|
|
||||||
|
- `package.json`: no `storybook`/`@storybook/*`/`eslint-plugin-storybook` deps, no `storybook`/`build-storybook` scripts
|
||||||
|
- yarn.lock: no `@storybook/vue3-vite` entry, no nested `@vitejs/plugin-vue@4` install
|
||||||
|
- `yarn lint` 0 errors + `yarn build` green
|
||||||
|
- `eslint.config.mjs` — no references to storybook plugin (verify; add minimal fix if present)
|
||||||
|
- Memory Bank: status `success` + Success Report (removed list, install-size delta if measurable)
|
||||||
|
|
||||||
## W2b acceptance criteria
|
## W2b acceptance criteria
|
||||||
|
|
||||||
|
|
@ -26,7 +49,10 @@
|
||||||
- **W2b (success, Architect-verified)**: `typescript` 5.4.5→**5.8.3** (`typescript@5.8` in package.json, pinned no-caret to keep the lock honest on 5.8.x) + `vue-tsc` 1.8.27→**2.2.12** (`^2`). Type-only fixes: `File | undefined` in `PreferencesHeader.vue` + `WorkoutUpload.vue` (TS 5.8 `Blob.bytes`).
|
- **W2b (success, Architect-verified)**: `typescript` 5.4.5→**5.8.3** (`typescript@5.8` in package.json, pinned no-caret to keep the lock honest on 5.8.x) + `vue-tsc` 1.8.27→**2.2.12** (`^2`). Type-only fixes: `File | undefined` in `PreferencesHeader.vue` + `WorkoutUpload.vue` (TS 5.8 `Blob.bytes`).
|
||||||
- **W2c (success, Coder-verified)**: `vite` 4.5.14→**5.4.21** + `@vitejs/plugin-vue` 4.6.2→**5.2.4** (package.json: only these 2 lines). No `vite.config.ts` changes needed; no sass legacy-API warnings appeared; CJS Node API deprecation warning observed (documented, not fixed).
|
- **W2c (success, Coder-verified)**: `vite` 4.5.14→**5.4.21** + `@vitejs/plugin-vue` 4.6.2→**5.2.4** (package.json: only these 2 lines). No `vite.config.ts` changes needed; no sass legacy-API warnings appeared; CJS Node API deprecation warning observed (documented, not fixed).
|
||||||
- **sass**: deferred — latest 1.x requires node ≥20.19; revisit only if the environment's node is upgraded.
|
- **sass**: deferred — latest 1.x requires node ≥20.19; revisit only if the environment's node is upgraded.
|
||||||
- **W3 (planned)**: Tooling majors: `eslint` 8→9 + `typescript-eslint` 6→8 (flat config `eslint.config.mjs` may need small adjustments), `prettier` minor. Storybook stays on 7.
|
- **W2c-FIX (in_progress)**: Dockerfile → yarn (`COPY yarn.lock`, `yarn install --frozen-lockfile`) to align with dev workflow and unblock the Docker build broken by the stale `package-lock.json` + npm strict peer validation.
|
||||||
|
- **W2c-FIX (success, Coder-verified)**: Dockerfile switched to yarn (`COPY package.json yarn.lock ./` + `RUN yarn install --frozen-lockfile`). Full `docker build` verified green.
|
||||||
|
- **W2d (success, Coder-verified)**: Removed all 9 dead Storybook deps (`storybook`, 7× `@storybook/*`, `eslint-plugin-storybook`) + the `storybook`/`build-storybook` scripts. No `eslint.config.mjs` references existed (verified — untouched). yarn.lock: zero `@storybook/*`/`storybook` entries, no nested `@vitejs/plugin-vue@4` (only `@vitejs/plugin-vue@^5` → 5.2.4). Lint 0 errors, build green.
|
||||||
|
- **W3 (planned)**: Tooling majors: `eslint` 8→9 + `typescript-eslint` 6→8 (flat config `eslint.config.mjs` may need small adjustments), `prettier` minor. Storybook handled by W2d.
|
||||||
|
|
||||||
## W2a acceptance criteria
|
## W2a acceptance criteria
|
||||||
|
|
||||||
|
|
@ -252,7 +278,7 @@ TS 5.8 + vue-tsc 2 surfaced errors in the two file-upload pages. The legacy `let
|
||||||
### Versions (package.json → resolved in yarn.lock)
|
### Versions (package.json → resolved in yarn.lock)
|
||||||
|
|
||||||
| package | old | new |
|
| package | old | new |
|
||||||
| ---------------------- | ---------------------------- | ----------------------- |
|
| -------------------- | ------------------------- | ----------------- |
|
||||||
| `vite` | `^4.4.6` (4.5.14 in lock) | `^5` → **5.4.21** |
|
| `vite` | `^4.4.6` (4.5.14 in lock) | `^5` → **5.4.21** |
|
||||||
| `@vitejs/plugin-vue` | `^4.2.3` (4.6.2 in lock) | `^5` → **5.2.4** |
|
| `@vitejs/plugin-vue` | `^4.2.3` (4.6.2 in lock) | `^5` → **5.2.4** |
|
||||||
|
|
||||||
|
|
@ -279,6 +305,120 @@ TS 5.8 + vue-tsc 2 surfaced errors in the two file-upload pages. The legacy `let
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## ✅ CODER SUCCESS REPORT (W2c-FIX)
|
||||||
|
|
||||||
|
### Changes made (single file, 2 lines)
|
||||||
|
|
||||||
|
- `Dockerfile`:
|
||||||
|
- Line 18: `COPY package.json package-lock.json ./` → `COPY package.json yarn.lock ./`
|
||||||
|
- Line 25: `RUN npm install` → `RUN yarn install --frozen-lockfile`
|
||||||
|
- No other files touched: `package.json`, `yarn.lock`, `package-lock.json` (left in repo per task rules), `src/`, `nginx.conf`, `run.sh` all unchanged (verified via `git status --porcelain` — only `Dockerfile` modified).
|
||||||
|
- No explicit `yarn install -g yarn@1` line needed: `docker run --rm node:18 yarn --version` → **1.22.22** (yarn 1.x ships out of the box with the `node:18` base image).
|
||||||
|
|
||||||
|
### Why this fixes the Docker build
|
||||||
|
|
||||||
|
The W2c wave moved `vite`/`@vitejs/plugin-vue` to 5 in `yarn.lock`, but the Dockerfile installed via **npm** against the stale `package-lock.json`. npm ≥7 strictly validates peer deps and hard-fails on `@storybook/vue3-vite@7.6.20` → `@vitejs/plugin-vue@^4.0.0` vs root `^5` (ERESOLVE). yarn 1 does not enforce peer-dep installation and resolves the conflict via a nested `@vitejs/plugin-vue@4.6.2` install for storybook (already present as a separate lock entry from W2c). Installing from the current `yarn.lock` with `--frozen-lockfile` makes the Docker build use the same, verified resolution as the local dev workflow.
|
||||||
|
|
||||||
|
### Local verification
|
||||||
|
|
||||||
|
- `yarn install --frozen-lockfile` → clean ("Already up-to-date", exit 0; the pre-existing `package-lock.json found` warning is informational only — removal of that file is explicitly out of scope for this task).
|
||||||
|
- `yarn lint` → **0 errors** (prettier clean, eslint `--fix` clean).
|
||||||
|
- `yarn build` → **green**: `vue-tsc --noEmit` 0 errors, `vite build` v5.4.21 OK (~6.4s).
|
||||||
|
- No `node_modules`-dependent drift: `git status` confirms lockfiles untouched by the verification runs.
|
||||||
|
|
||||||
|
### Docker verification (performed)
|
||||||
|
|
||||||
|
- `docker build -t strava-frontend-w2cfix .` → **GREEN** (exit 0, image exported). Full 13-step pipeline completed: `yarn install --frozen-lockfile` inside the image succeeded (no ERESOLVE), `npm run build` (= `vue-tsc --noEmit && vite build`) succeeded, nginx setup + `run.sh` chmod steps completed.
|
||||||
|
|
||||||
|
### Left for later
|
||||||
|
|
||||||
|
- `package-lock.json` remains in the repo (yarn warns about it at install time) — removal is a separate Architect decision, out of scope here.
|
||||||
|
- Storybook 7 ↔ vite 5 peer conflict is now only a _warning-level_ concern (nested resolution); the clean fix remains W2d (Storybook 7 → 8).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ CODER SUCCESS REPORT (W2d)
|
||||||
|
|
||||||
|
### Removed (package.json only, verified via `git diff`)
|
||||||
|
|
||||||
|
- devDependencies (9): `storybook`, `@storybook/addon-essentials`, `@storybook/addon-interactions`, `@storybook/addon-links`, `@storybook/blocks`, `@storybook/testing-library`, `@storybook/vue3`, `@storybook/vue3-vite`, `eslint-plugin-storybook`.
|
||||||
|
- scripts (2): `"storybook"`, `"build-storybook"`.
|
||||||
|
- `eslint.config.mjs`: checked — contains NO references to `eslint-plugin-storybook` or any storybook config (flat config only wires `globals`, `typescript-eslint`, `eslint-plugin-vue`). Not touched.
|
||||||
|
- No other files touched: `src/`, `vite.config.ts`, `tailwind.config.js`, `package-lock.json`, `nginx.conf`, i18n locales all unchanged.
|
||||||
|
|
||||||
|
### Method
|
||||||
|
|
||||||
|
- `yarn remove storybook @storybook/addon-essentials @storybook/addon-interactions @storybook/addon-links @storybook/blocks @storybook/testing-library @storybook/vue3 @storybook/vue3-vite eslint-plugin-storybook` (lockfile regenerated automatically), then manual 2-line script removal from `package.json`.
|
||||||
|
|
||||||
|
### yarn.lock cleanliness (verified via grep)
|
||||||
|
|
||||||
|
- `grep -c storybook yarn.lock` → **0** (no `@storybook/*`, no `storybook`, no `eslint-plugin-storybook` entries).
|
||||||
|
- No nested `@vitejs/plugin-vue@4.x` install: the only plugin-vue entry is `@vitejs/plugin-vue@^5` → 5.2.4. The storybook peer conflict is gone at the root, not just warned away.
|
||||||
|
- Transitive leftovers (e.g. `@storybook/csf` copies) are also gone — the whole subtree pruned.
|
||||||
|
|
||||||
|
### Verification
|
||||||
|
|
||||||
|
- Baseline (before removal): `yarn lint` 0 errors, `yarn build` green (vue-tsc 0 errors, vite 5.4.21, 1396 modules).
|
||||||
|
- After removal: `yarn install` clean; `yarn lint` → **0 errors** (prettier all unchanged, eslint clean); `yarn build` → **green** (vue-tsc --noEmit 0 errors, vite build ~6.3s, 1396 modules).
|
||||||
|
- No hidden dependency on storybook code/configs surfaced (rule 8 not triggered — nothing to escalate).
|
||||||
|
- `docker build` not re-run (optional per task; W2c-FIX was green and this change only shrinks the tree — `yarn install --frozen-lockfile` inside the image gets an even smaller, conflict-free set).
|
||||||
|
|
||||||
|
### Left for later
|
||||||
|
|
||||||
|
- `package-lock.json` remains stale in the repo (still references the storybook suite) — removal/refresh is a separate Architect decision (unchanged here per task rule 7).
|
||||||
|
- W3 (eslint 8→9, typescript-eslint →8, prettier minor) — Architect delegates.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ CODER SUCCESS REPORT (W3 — FINAL wave)
|
||||||
|
|
||||||
|
### Verified outcome
|
||||||
|
|
||||||
|
- `yarn lint` → **0 errors** (eslint 9.39.5, prettier pass all unchanged).
|
||||||
|
- `yarn build` → **green** (vue-tsc 2.2.12 --noEmit 0 errors, vite 5.4.21 build ~5.3s, 1396 modules).
|
||||||
|
- `docker build --pull --no-cache` → **green** (image `strava-frontend-w3` built on `node:22`).
|
||||||
|
- Baseline before the wave: lint 0 errors + build green (re-verified at wave start).
|
||||||
|
|
||||||
|
### Version moves (verified via `git diff package.json` + `yarn.lock`)
|
||||||
|
|
||||||
|
| Package | Old | New |
|
||||||
|
| ---------------------------------------- | ---------------- | ----------------------------------------------- |
|
||||||
|
| `eslint` (dev) | ^8.57.0 (8.57.1) | **^9** → resolved **9.39.5** |
|
||||||
|
| `typescript-eslint` (dev) | ^7.6.0 (7.18.0) | **^8** → resolved **8.69.0** |
|
||||||
|
| `@typescript-eslint/eslint-plugin` (dev) | ^6.11.0 | **REMOVED** (superseded by the v8 meta-package) |
|
||||||
|
| `@typescript-eslint/parser` (dev) | ^6.11.0 | **REMOVED** (superseded by the v8 meta-package) |
|
||||||
|
| `Dockerfile` base | `node:18` | **`node:22`** (see node-requirement below) |
|
||||||
|
|
||||||
|
- NO other package moved to a new major (verified in yarn.lock: vue 3.5.42, pinia 3, TS 5.8.3, vue-tsc 2.2.12, vite 5.4.21, sass 1.69.5, prettier 3.9.6, eslint-plugin-vue 9.33.0 — all unchanged from W2 state).
|
||||||
|
- `eslint-plugin-prettier` / `@vue/eslint-config-prettier` untouched per task rule 7.
|
||||||
|
- Note: yarn v1 re-resolved the remaining `^` ranges during the lockfile regen; only `@vue/eslint-config-typescript`'s nested legacy `@typescript-eslint/*@6.21.0` subtree remains (peer warnings only — that package is NOT imported by `eslint.config.mjs`, behavior unchanged).
|
||||||
|
|
||||||
|
### eslint.config.mjs
|
||||||
|
|
||||||
|
- **Zero changes required** — flat config from eslint 8.57 works as-is on eslint 9.39.5 + typescript-eslint 8.69.0:
|
||||||
|
- `import tseslintPkg from "typescript-eslint"` (CJS default import) → `tseslint.configs.recommended` (3 blocks, already spread individually) + `tseslintPkg.parser` — API unchanged in v8.
|
||||||
|
- No `name` additions needed on config blocks (eslint 9 did not reject the anonymous blocks in this setup).
|
||||||
|
- Legacy `@typescript-eslint/eslint-plugin` / `@typescript-eslint/parser` were confirmed NOT imported — hence removed.
|
||||||
|
|
||||||
|
### Why Dockerfile node 18 → 22 (documented scope addition)
|
||||||
|
|
||||||
|
- The new tree resolves `@typescript-eslint/parser@8.69.0 → minimatch@^10 → brace-expansion@^5`, whose `engines` is `node "20 || >=22"`; on node 18 `yarn install` (and `yarn install --frozen-lockfile` in the image) fails the engine check. `eslint-visitor-keys@5` (engines `^20.19 || ^22.13 || >=24`) appeared the same way.
|
||||||
|
- Node 18 is EOL since 2025-04-30; node 22 is the LTS choice. Local dev verified on node **22.14.0** (`~/.nvm/versions/node/v22.14.0`).
|
||||||
|
- `yarn install --frozen-lockfile` inside the new `node:22` image: clean (verified by full `docker build`).
|
||||||
|
|
||||||
|
### Method / notes
|
||||||
|
|
||||||
|
- `yarn add -D eslint@^9 typescript-eslint@^8` + `yarn remove @typescript-eslint/eslint-plugin @typescript-eslint/parser` (executed on node 22).
|
||||||
|
- One environment quirk (dev machine, not repo state): a stale nested `node_modules/typescript-eslint/node_modules/@typescript-eslint/*@7.18.0` survived the major bump (yarn v1 does not prune nested duplicates) and caused a transient `addCandidateTSConfigRootDir is not a function`; resolved by a clean `node_modules` reinstall — lockfile unchanged, no repo impact.
|
||||||
|
|
||||||
|
### Left for later
|
||||||
|
|
||||||
|
- `package-lock.json` still stale in the repo (unchanged here, per W2d decision — separate Architect call).
|
||||||
|
- `sass` still 1.69.5 (node-20.19 requirement) — revisit only if node baseline moves further.
|
||||||
|
- W3 was the FINAL wave → TASK-DEPS-UPDATE can be closed by the Architect.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## History
|
## History
|
||||||
|
|
||||||
### W1 escalation (2025, commit e79722d)
|
### W1 escalation (2025, commit e79722d)
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,29 @@
|
||||||
- Warnings: CJS Node API deprecation (vite 5, expected, documented, not fixed); NO sass legacy-API warnings appeared (sass 1.69.5 untouched, per task rule).
|
- Warnings: CJS Node API deprecation (vite 5, expected, documented, not fixed); NO sass legacy-API warnings appeared (sass 1.69.5 untouched, per task rule).
|
||||||
- Verified: baseline green before update; after update `yarn lint` 0 errors, `yarn build` green (vue-tsc 0 errors, vite 5.4.21 build ~6.5s, 1396 modules); `yarn dev` smoke-check OK (VITE v5.4.21 ready 372 ms; `GET /`, `/src/main.ts`, `/src/App.vue`, `/src/pages/workouts/Feed.vue` all 200; server stopped after check).
|
- Verified: baseline green before update; after update `yarn lint` 0 errors, `yarn build` green (vue-tsc 0 errors, vite 5.4.21 build ~6.5s, 1396 modules); `yarn dev` smoke-check OK (VITE v5.4.21 ready 372 ms; `GET /`, `/src/main.ts`, `/src/App.vue`, `/src/pages/workouts/Feed.vue` all 200; server stopped after check).
|
||||||
|
|
||||||
|
### 2026-09-05 — TASK-DEPS-UPDATE-W2c-FIX: Dockerfile switched to yarn (uncommitted)
|
||||||
|
|
||||||
|
- `Dockerfile` only (2 lines): `COPY package.json package-lock.json ./` → `COPY package.json yarn.lock ./`; `RUN npm install` → `RUN yarn install --frozen-lockfile`. Root cause fixed: the Docker build ran `npm install` against a stale `package-lock.json` while dev uses yarn; npm's strict peer validation failed on `@storybook/vue3-vite@7.6.20` → `@vitejs/plugin-vue@^4` vs root `^5`. yarn 1 resolves this via a nested plugin-vue 4.6.2 for storybook (existing separate lock entry).
|
||||||
|
- `node:18` base image ships yarn 1.22.22 out of the box (verified via `docker run --rm node:18 yarn --version`) — no `npm i -g yarn@1` line added.
|
||||||
|
- `package-lock.json` intentionally left in the repo (removal = separate decision, out of scope).
|
||||||
|
- Verified: `yarn install --frozen-lockfile` clean locally (lockfiles untouched per `git status`); `yarn lint` 0 errors; `yarn build` green (vue-tsc 0 errors, vite 5.4.21 ~6.4s); **full `docker build` green** (image `strava-frontend-w2cfix` built: yarn install + npm run build + nginx steps all OK).
|
||||||
|
|
||||||
|
### 2026-09-05 — TASK-DEPS-UPDATE-W2d: dead Storybook deps removed (uncommitted)
|
||||||
|
|
||||||
|
- `yarn remove` of 9 packages: `storybook`, `@storybook/addon-essentials`, `@storybook/addon-interactions`, `@storybook/addon-links`, `@storybook/blocks`, `@storybook/testing-library`, `@storybook/vue3`, `@storybook/vue3-vite`, `eslint-plugin-storybook` + manual removal of the 2 scripts (`storybook`, `build-storybook`) from `package.json`.
|
||||||
|
- `eslint.config.mjs` verified: zero storybook references — untouched.
|
||||||
|
- `yarn.lock` pruned: `grep -c storybook` → 0; nested `@vitejs/plugin-vue@4.6.2` (storybook peer-conflict workaround) gone — only `@vitejs/plugin-vue@^5` → 5.2.4 remains.
|
||||||
|
- Baseline green before removal; after: `yarn install` clean, `yarn lint` 0 errors, `yarn build` green (vue-tsc 0 errors, vite 5.4.21 ~6.3s, 1396 modules).
|
||||||
|
- No `src/` changes; `package-lock.json` left stale (separate decision).
|
||||||
|
|
||||||
|
### 2026-09-05 — TASK-DEPS-UPDATE-W3 (FINAL): eslint 8→9 + typescript-eslint 7→8 (uncommitted)
|
||||||
|
|
||||||
|
- `package.json` devDeps: `eslint` ^8.57.0→**^9** (resolved 9.39.5), `typescript-eslint` ^7.6.0→**^8** (resolved 8.69.0); REMOVED `@typescript-eslint/eslint-plugin@^6.11.0` + `@typescript-eslint/parser@^6.11.0` (not imported by `eslint.config.mjs` — verified). No other package moved to a new major (lock checked: vue 3.5.42, pinia 3, TS 5.8.3, vue-tsc 2.2.12, vite 5.4.21, sass 1.69.5).
|
||||||
|
- `eslint.config.mjs`: **unchanged** — flat config (CJS default-import of the `typescript-eslint` meta-package, `configs.recommended` spread, `tseslintPkg.parser`) works as-is on eslint 9 / typescript-eslint 8.
|
||||||
|
- `Dockerfile`: base image `node:18` → `node:22` (transitive `brace-expansion@5.0.9` / `eslint-visitor-keys@5` engines require node ≥20; node 18 EOL). Local dev verified on node 22.14.0.
|
||||||
|
- Verified: baseline green at wave start; after — `yarn lint` 0 errors, `yarn build` green (vue-tsc 0 errors, vite 5.4.21 ~5.3s), `docker build --pull --no-cache` green (image `strava-frontend-w3`, `yarn install --frozen-lockfile` clean inside image).
|
||||||
|
- No `src/` changes; `vite.config.ts`, i18n, HOST/keys untouched. W3 = FINAL wave → TASK-DEPS-UPDATE ready to close.
|
||||||
|
|
||||||
## Left to build
|
## Left to build
|
||||||
|
|
||||||
- (empty — filled as tasks are created)
|
- (empty — filled as tasks are created)
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
|
|
||||||
## Stack
|
## Stack
|
||||||
|
|
||||||
- **Vue 3** (3.5) + **TypeScript** 5.4 (strict mode, `noEmit`)
|
- **Vue 3** (3.5) + **TypeScript** 5.8 (strict mode, `noEmit`)
|
||||||
- **Vite** 4 (dev server, bundler) with `@vitejs/plugin-vue` and `@intlify/unplugin-vue-i18n/vite`
|
- **Vite** 5 (dev server, bundler) with `@vitejs/plugin-vue` 5 and `@intlify/unplugin-vue-i18n/vite`
|
||||||
- **Pinia** 3 — state management (options-style stores; vue ≥3.3 required)
|
- **Pinia** 3 — state management (options-style stores; vue ≥3.3 required)
|
||||||
- **vue-router** 4 — history-mode routing
|
- **vue-router** 4 — history-mode routing
|
||||||
- **vue-i18n** 9 — i18n (composition mode, default/fallback `ru`)
|
- **vue-i18n** 9 — i18n (composition mode, default/fallback `ru`)
|
||||||
|
|
@ -13,15 +13,13 @@
|
||||||
- **Axios** 1.6 — HTTP client
|
- **Axios** 1.6 — HTTP client
|
||||||
- **Chart.js** 4 + `vue-chartjs` 5 (+ zoom/geo/adapter-moment plugins) — charts
|
- **Chart.js** 4 + `vue-chartjs` 5 (+ zoom/geo/adapter-moment plugins) — charts
|
||||||
- **vue-yandex-maps** — Yandex Maps integration
|
- **vue-yandex-maps** — Yandex Maps integration
|
||||||
- **@vueuse/core**, **vue-moment**, **flag-icons**, **ionicons**, **medium-editor**, **epic-spinners**, `register-service-worker` (PWA), `@gtm-support/vue-gtm` (analytics)
|
|
||||||
- **Storybook** 7 — component dev environment
|
|
||||||
|
|
||||||
## Tooling
|
## Tooling
|
||||||
|
|
||||||
- **ESLint** 9 flat config (`eslint.config.mjs`) with `vue`, `typescript-eslint`, `prettier` plugins
|
- **ESLint** 9 flat config (`eslint.config.mjs`) with `vue`, `typescript-eslint` 8, `prettier` plugins
|
||||||
- **Prettier** 3 — formatting
|
- **Prettier** 3 — formatting
|
||||||
- **Husky** + **lint-staged** — pre-commit lint of `src/**/*.{ts,js,vue}`
|
- **Husky** + **lint-staged** — pre-commit lint of `src/**/*.{ts,js,vue}`
|
||||||
- **vue-tsc** — type checking at build
|
- **vue-tsc** 2 — type checking at build
|
||||||
|
|
||||||
## Scripts (`package.json`)
|
## Scripts (`package.json`)
|
||||||
|
|
||||||
|
|
@ -29,14 +27,14 @@
|
||||||
- `yarn build` — `vue-tsc --noEmit && vite build`
|
- `yarn build` — `vue-tsc --noEmit && vite build`
|
||||||
- `yarn lint` — eslint --fix over src
|
- `yarn lint` — eslint --fix over src
|
||||||
- `yarn format` — prettier --write
|
- `yarn format` — prettier --write
|
||||||
- `yarn storybook` / `yarn build-storybook`
|
|
||||||
- `yarn build:ci` / `yarn start:ci` — CI build + static serve
|
- `yarn build:ci` / `yarn start:ci` — CI build + static serve
|
||||||
|
|
||||||
## Environment
|
## Environment
|
||||||
|
|
||||||
- API host is a hardcoded constant `HOST` in `src/main.ts` (no `.env`-driven base URL). Yandex Maps API key and GTM keys are hardcoded / env-driven (`VITE_APP_GTM_ENABLED`, `VITE_APP_GTM_KEY`).
|
- API host is a hardcoded constant `HOST` in `src/main.ts` (no `.env`-driven base URL). Yandex Maps API key and GTM keys are hardcoded / env-driven (`VITE_APP_GTM_ENABLED`, `VITE_APP_GTM_KEY`).
|
||||||
- Locales: `br, cn, es, gb, ir, ru` (default `ru`).
|
- Locales: `br, cn, es, gb, ir, ru` (default `ru`).
|
||||||
- Deploy: Dockerfile + `nginx.conf`; `run.sh` local runner.
|
- Deploy: Dockerfile (**node:22**, `yarn install --frozen-lockfile`) + `nginx.conf`; `run.sh` local runner.
|
||||||
|
- Dev environment requires **Node ≥18.19** (vite 5); Docker uses node:22 (eslint 9 transitives need ≥20).
|
||||||
|
|
||||||
## Constraints
|
## Constraints
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
### STAGE 1: Build ----------------------------------------------------------------------------------------------------
|
### STAGE 1: Build ----------------------------------------------------------------------------------------------------
|
||||||
### STAGE 1: Build ----------------------------------------------------------------------------------------------------
|
### STAGE 1: Build ----------------------------------------------------------------------------------------------------
|
||||||
FROM node:18
|
FROM node:22
|
||||||
|
|
||||||
ARG VERSION
|
ARG VERSION
|
||||||
ARG BUILD
|
ARG BUILD
|
||||||
|
|
@ -15,14 +15,14 @@ RUN rm -rf /usr/share/nginx/html/
|
||||||
RUN mkdir -p /usr/share/nginx/html
|
RUN mkdir -p /usr/share/nginx/html
|
||||||
WORKDIR /data
|
WORKDIR /data
|
||||||
|
|
||||||
COPY package.json package-lock.json ./
|
COPY package.json yarn.lock ./
|
||||||
|
|
||||||
|
|
||||||
ARG VERSION
|
ARG VERSION
|
||||||
ARG BUILD
|
ARG BUILD
|
||||||
ARG TARGETENV
|
ARG TARGETENV
|
||||||
ARG CURLOPT_SSL_VERIFYPEER=FALSE
|
ARG CURLOPT_SSL_VERIFYPEER=FALSE
|
||||||
RUN npm install
|
RUN yarn install --frozen-lockfile
|
||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
|
|
|
||||||
19
package.json
19
package.json
|
|
@ -11,9 +11,7 @@
|
||||||
"prelint": "npm run format",
|
"prelint": "npm run format",
|
||||||
"lint": "eslint \"./src/**/*.{ts,js,vue}\" --fix",
|
"lint": "eslint \"./src/**/*.{ts,js,vue}\" --fix",
|
||||||
"format": "prettier --write .",
|
"format": "prettier --write .",
|
||||||
"preview": "vite preview",
|
"preview": "vite preview"
|
||||||
"storybook": "storybook dev -p 6006",
|
|
||||||
"build-storybook": "storybook build"
|
|
||||||
},
|
},
|
||||||
"lint-staged": {
|
"lint-staged": {
|
||||||
"./src/**/*.{ts,js,vue}": [
|
"./src/**/*.{ts,js,vue}": [
|
||||||
|
|
@ -48,35 +46,24 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.0.0",
|
"@eslint/js": "^9.0.0",
|
||||||
"@intlify/unplugin-vue-i18n": "^1.5.0",
|
"@intlify/unplugin-vue-i18n": "^1.5.0",
|
||||||
"@storybook/addon-essentials": "^7.4.6",
|
|
||||||
"@storybook/addon-interactions": "^7.4.6",
|
|
||||||
"@storybook/addon-links": "^7.4.6",
|
|
||||||
"@storybook/blocks": "^7.4.6",
|
|
||||||
"@storybook/testing-library": "^0.2.2",
|
|
||||||
"@storybook/vue3": "^7.4.6",
|
|
||||||
"@storybook/vue3-vite": "^7.4.6",
|
|
||||||
"@types/medium-editor": "^5.0.5",
|
"@types/medium-editor": "^5.0.5",
|
||||||
"@types/node": "^20.9.0",
|
"@types/node": "^20.9.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^6.11.0",
|
|
||||||
"@typescript-eslint/parser": "^6.11.0",
|
|
||||||
"@vitejs/plugin-vue": "^5",
|
"@vitejs/plugin-vue": "^5",
|
||||||
"@vue/eslint-config-prettier": "^8.0.0",
|
"@vue/eslint-config-prettier": "^8.0.0",
|
||||||
"@vue/eslint-config-typescript": "^12.0.0",
|
"@vue/eslint-config-typescript": "^12.0.0",
|
||||||
"autoprefixer": "^10.4.13",
|
"autoprefixer": "^10.4.13",
|
||||||
"eslint": "^8.57.0",
|
"eslint": "^9",
|
||||||
"eslint-plugin-prettier": "^5.0.1",
|
"eslint-plugin-prettier": "^5.0.1",
|
||||||
"eslint-plugin-react": "^7.34.1",
|
"eslint-plugin-react": "^7.34.1",
|
||||||
"eslint-plugin-storybook": "^0.6.15",
|
|
||||||
"eslint-plugin-vue": "^9.25.0",
|
"eslint-plugin-vue": "^9.25.0",
|
||||||
"globals": "^15.0.0",
|
"globals": "^15.0.0",
|
||||||
"husky": "^8.0.1",
|
"husky": "^8.0.1",
|
||||||
"lint-staged": "^15.1.0",
|
"lint-staged": "^15.1.0",
|
||||||
"postcss": "^8.4.21",
|
"postcss": "^8.4.21",
|
||||||
"prettier": "^3.1.0",
|
"prettier": "^3.1.0",
|
||||||
"storybook": "^7.4.6",
|
|
||||||
"tailwindcss": "^3.4.0",
|
"tailwindcss": "^3.4.0",
|
||||||
"typescript": "5.8",
|
"typescript": "5.8",
|
||||||
"typescript-eslint": "^7.6.0",
|
"typescript-eslint": "^8",
|
||||||
"vite": "^5",
|
"vite": "^5",
|
||||||
"vue-eslint-parser": "^9.3.2",
|
"vue-eslint-parser": "^9.3.2",
|
||||||
"vue-tsc": "^2"
|
"vue-tsc": "^2"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue