docs: сделать проверку типов frontend release gate и убрать известное ограничение
bundle_ui запускает `pnpm run typecheck` перед сборкой bundle. И наличие шага, и его порядок закреплены приёмкой — вместе с требованием vue-tsc версии 3 и выше и с запретом снова совмещать сборку и проверку в build:prod. Из docs/02 убран раздел «Известное ограничение: проверка типов frontend почти ничего не проверяет» и заменён описанием действующего контракта. Прогноз в нём был близок, но неточен: ошибок оказалось 142, а не ~155, и класс DefaultRow/ PeerVo на Element Plus 2.3 не существовал вовсе — он появился вместе с обновлением Element Plus. docs/04 получил описание модели отображения (третий слой рядом с типизированной моделью и сырым YAML) и раздел о том, что страница Hysteria теперь read-only на всех уровнях, а не только визуально. docs/11: команды проверки frontend и dev doctor в раздел запуска, семь новых пунктов приёмки.
This commit is contained in:
@@ -187,6 +187,34 @@ run_fix20_acceptance_subset() {
|
||||
log_step "Acceptance: bootstrap peer can pass auth smoke"
|
||||
grep -q 'quota := int64(-1)' apps/dao/sqlite.go || fail "acceptance: bootstrap peer quota must be unlimited (-1), otherwise install auth smoke fails"
|
||||
|
||||
log_step "Acceptance: frontend type checking is a release gate"
|
||||
# Проверка типов SFC-шаблонов была фикцией: vue-tsc 0.35 не находил ничего, а
|
||||
# на современном том же коде — 142 ошибки. Инвариант обязан жить в сборке, а
|
||||
# не в намерении.
|
||||
"$BUN_BIN" -e '
|
||||
const pkg = require("./apps/frontend/package.json");
|
||||
const scripts = pkg.scripts || {};
|
||||
if (!scripts.typecheck || !scripts.typecheck.includes("vue-tsc")) {
|
||||
throw new Error("apps/frontend: скрипт typecheck должен запускать vue-tsc");
|
||||
}
|
||||
if (scripts["build:prod"].includes("vue-tsc")) {
|
||||
throw new Error("build:prod снова совмещает сборку и проверку типов: ошибка типов обнаружится только после production bundle");
|
||||
}
|
||||
const major = Number((pkg.devDependencies["vue-tsc"] || "").replace(/^\D*/, "").split(".")[0]);
|
||||
if (!Number.isInteger(major) || major < 3) {
|
||||
throw new Error("vue-tsc должен быть версии 3 и выше: 0.x проверку шаблонов не выполняет");
|
||||
}
|
||||
' || fail "acceptance: контракт проверки типов frontend нарушен"
|
||||
grep -q '"\$PNPM_BIN" run typecheck' tools/build/lib/package.sh \
|
||||
|| fail "acceptance: сборка не запускает проверку типов frontend"
|
||||
"$BUN_BIN" -e '
|
||||
const source = require("node:fs").readFileSync("tools/build/lib/package.sh", "utf8");
|
||||
const check = source.indexOf("run typecheck");
|
||||
const build = source.indexOf("run build:prod");
|
||||
if (check < 0 || build < 0) throw new Error("не найдены шаги typecheck/build:prod");
|
||||
if (check > build) throw new Error("проверка типов идёт после сборки bundle");
|
||||
' || fail "acceptance: проверка типов обязана предшествовать сборке bundle"
|
||||
|
||||
log_step "Acceptance: local SVG icons are rendered from an in-repo sprite"
|
||||
# vite-plugin-svg-icons убран: он не обновлялся с 2022 года и тянул svgo 2.8,
|
||||
# postcss 5.2.18 и image-size 0.5.5, у последней advisory прямо сообщает
|
||||
|
||||
Reference in New Issue
Block a user