From 31940461c6988abd017bee557c89f92264be5cd3 Mon Sep 17 00:00:00 2001 From: coopops Date: Sun, 19 Jul 2026 14:25:47 +0000 Subject: [PATCH] fix(desktop): remove electron dependency, fix latent typecheck errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit electron был не нужен вообще — тянулся транзитивно только через неиспользуемую devDependency @vue/devtools (нет ни одного импорта в коде). Убрана из desktop/package.json и из onlyBuiltDependencies корня; lockfile пересобран. Это устраняет флап CI: pnpm install изредка валился на сетевой ошибке при скачивании ~200MB бинарника electron (run #745 и run #732 на этом PR), из-за чего typecheck падал до первой TS-проверки. Так как install перестал падать раньше срока, vue-tsc теперь реально доходит до конца и вскрывает предсуществующие баги: - useCapitalProgramDocParams.ts, CapitalProgramDocumentParametersWidget.vue: импорт `CapitalProgramPrivateData` напрямую из 'cooptypes' никогда не работал — тип лежит в Cooperative.Registry, не на верхнем уровне (остальной код capital-расширения уже импортирует так же). Каст результата Object.fromEntries (индексная сигнатура) в интерфейс с именованными полями TS отклоняет как insufficient overlap; вместо unknown-каста — каст в Record (тот же паттерн, что и в соседней createEmptyForm), который затем обычной структурной проверкой присваивается в CapitalProgramPrivateData, т.к. набор из 11 полей совпадает один в один. - CapitalProgramDocumentParametersWidget.vue: legacy draft.activeTab стал optional при переходе на wizardStepKey и больше не записывается читалкой драфта — добавлен фолбэк на дефолт 994, как и в самой readCapitalProgramDocParamsDraft. - CapitalProgramInlineDocumentPreview.vue: querySelectorAll с составным CSS-селектором типизируется как NodeListOf; cleanupEditors использовал узел как HTMLTextAreaElement без сужения (соседняя syncInlineEditors уже делает `as HTMLTextAreaElement` для той же ситуации). - ExtensionInstall.vue: prop schema был типизирован как unknown, хотя передаётся напрямую в ZodForm, которому нужен IExtensionConfigSchema — типизирован точно под фактическое использование. - sdk/queries/paymentMethods/getPaymentMethods.ts: `const name` был без export вопреки конвенции всех остальных query-модулей (Queries.X.Y.name используется для чтения ключа GraphQL-ответа). Co-Authored-By: Claude Sonnet 5 --- .github/workflows/typecheck.yaml | 9 - .../model/useCapitalProgramDocParams.ts | 6 +- ...CapitalProgramDocumentParametersWidget.vue | 8 +- .../CapitalProgramInlineDocumentPreview.vue | 3 +- components/desktop/package.json | 1 - .../ExtensionInstall/ui/ExtensionInstall.vue | 3 +- .../paymentMethods/getPaymentMethods.ts | 2 +- package.json | 1 - pnpm-lock.yaml | 376 +----------------- 9 files changed, 15 insertions(+), 394 deletions(-) diff --git a/.github/workflows/typecheck.yaml b/.github/workflows/typecheck.yaml index dd160f79944..c1aaf754c6e 100644 --- a/.github/workflows/typecheck.yaml +++ b/.github/workflows/typecheck.yaml @@ -24,15 +24,6 @@ on: branches: [dev] workflow_call: -# electron — транзитивный devDependency (@vue/devtools-electron, только для -# desktop-приложения devtools вне браузера) попадает в onlyBuiltDependencies -# и на `pnpm install` качает ~200MB бинарник с github releases. Здесь он не -# запускается и не нужен — а его скачивание изредка валит install сетевым -# таймаутом/TLS-обрывом, из-за чего весь typecheck падает до первой TS- -# проверки (см. run #745, PR #154 — desktop job упал на install, не на tsc). -env: - ELECTRON_SKIP_BINARY_DOWNLOAD: "1" - # Новый push в PR-ветку отменяет ещё бегущий typecheck по той же ветке — # иначе 30-минутные прогоны копятся очередью. Группа по head_ref (исходная # ветка PR), для workflow_call fallback на ref. Отмена только своих же diff --git a/components/desktop/extensions/capital/features/Onboarding/model/useCapitalProgramDocParams.ts b/components/desktop/extensions/capital/features/Onboarding/model/useCapitalProgramDocParams.ts index 4e6411624c6..a613634ad56 100644 --- a/components/desktop/extensions/capital/features/Onboarding/model/useCapitalProgramDocParams.ts +++ b/components/desktop/extensions/capital/features/Onboarding/model/useCapitalProgramDocParams.ts @@ -1,6 +1,6 @@ import { computed, reactive, ref } from 'vue'; import { useQuasar } from 'quasar'; -import type { CapitalProgramPrivateData } from 'cooptypes'; +import type { Cooperative } from 'cooptypes'; import { useSystemStore } from 'src/entities/System/model'; import { useSessionStore } from 'src/entities/Session'; import { api as documentApi } from 'src/shared/lib/document/api'; @@ -80,10 +80,10 @@ export function useCapitalProgramDocParams(options?: { onSaved?: (hash: string) wizardStepKey.value = draft.wizardStepKey ?? DOC_WIZARD_STEP_GENERATOR; } - function getPreviewPayload(): CapitalProgramPrivateData { + function getPreviewPayload(): Cooperative.Registry.CapitalProgramPrivateData { return Object.fromEntries( ALL_DOC_FIELDS.map((key) => [key, String(form[key] ?? '').trim() || PREVIEW_PLACEHOLDER]), - ) as CapitalProgramPrivateData; + ) as Record; } function getMissingCount(registryId: number): number { diff --git a/components/desktop/extensions/capital/features/Onboarding/ui/CapitalProgramDocumentParametersWidget.vue b/components/desktop/extensions/capital/features/Onboarding/ui/CapitalProgramDocumentParametersWidget.vue index 77aa20be394..20e8a6bd80e 100644 --- a/components/desktop/extensions/capital/features/Onboarding/ui/CapitalProgramDocumentParametersWidget.vue +++ b/components/desktop/extensions/capital/features/Onboarding/ui/CapitalProgramDocumentParametersWidget.vue @@ -55,7 +55,7 @@ BaseCard.capital-doc-params(title='Параметры документов ЦП