[0C1-6][@ant] fix(generate-schema): принимать резолверы с @Resolver() без параметра — устраняет регрессию генерации schema.gql, где терялось 40 из 48 резолверов и десятки input-типов (LoginInput, ResetKeyInput, GenerateDocumentInput, весь блок AnnualGeneralMeeting*Input)
Корневая причина: discoverResolverClasses отфильтровывал по `Reflect.getMetadata(RESOLVER_TYPE_METADATA, exp) === undefined`. Декоратор @Resolver() без аргумента выставляет метаданные через Nest-овский SetMetadata(RESOLVER_TYPE_METADATA, undefined) — defineMetadata реально выполнен, но getMetadata возвращает undefined, неотличимо от «не устанавливалось». В результате ровно те резолверы, что имеют @Resolver() без параметра, проваливались через фильтр (AuthResolver, MeetResolver, DocumentResolver, GenerationResolver, и т.п. — почти весь capital-extension и половина application/). Фикс: использовать Reflect.hasMetadata, который корректно различает defined-as-undefined от undefined-by-absence. Теперь подхватываются все 48 резолверов (было 8). Регенерированы schema.gql, zeus/index.ts, zeus/const.ts в обоих копиях (controller-local и sdk). SDK typecheck чист; desktop vue-tsc чист (единственная ошибка в PaymentCard — pre-existing, не из этого фикса). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+893
-162
File diff suppressed because it is too large
Load Diff
@@ -76,7 +76,11 @@ async function discoverResolverClasses(srcRoot: string): Promise<ResolverCtor[]>
|
||||
if (seen.has(exp)) {
|
||||
continue;
|
||||
}
|
||||
if (Reflect.getMetadata(RESOLVER_TYPE_METADATA, exp) === undefined) {
|
||||
// Важно: используем hasMetadata, а не getMetadata. Для @Resolver() без параметра
|
||||
// Nest делает SetMetadata(RESOLVER_TYPE_METADATA, undefined) — defineMetadata
|
||||
// реально проставлен, но getMetadata возвращает undefined и неотличим от «не объявлен».
|
||||
// hasMetadata это различает и принимает оба случая: @Resolver(() => X) и @Resolver().
|
||||
if (!Reflect.hasMetadata(RESOLVER_TYPE_METADATA, exp)) {
|
||||
continue;
|
||||
}
|
||||
seen.add(exp);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+16899
-27
File diff suppressed because it is too large
Load Diff
@@ -1809,7 +1809,8 @@ export const AllTypesProps: Record<string,any> = {
|
||||
},
|
||||
WebPushSubscriptionKeysInput:{
|
||||
|
||||
}
|
||||
},
|
||||
ID: `scalar.ID` as const
|
||||
}
|
||||
|
||||
export const ReturnTypes: Record<string,any> = {
|
||||
@@ -2308,6 +2309,10 @@ export const ReturnTypes: Record<string,any> = {
|
||||
cycle_id:"String",
|
||||
description:"String",
|
||||
estimate:"Float",
|
||||
fact:"Float",
|
||||
fact_by_contributor:"CapitalIssueContributorFact",
|
||||
fact_committed:"Float",
|
||||
fact_uncommitted:"Float",
|
||||
id:"String",
|
||||
issue_hash:"String",
|
||||
linked_git_commits:"CapitalIssueLinkedGitCommit",
|
||||
@@ -2319,11 +2324,7 @@ export const ReturnTypes: Record<string,any> = {
|
||||
sort_order:"Int",
|
||||
status:"IssueStatus",
|
||||
submaster:"String",
|
||||
title:"String",
|
||||
fact:"Float",
|
||||
fact_committed:"Float",
|
||||
fact_uncommitted:"Float",
|
||||
fact_by_contributor:"CapitalIssueContributorFact"
|
||||
title:"String"
|
||||
},
|
||||
CapitalIssueContributorFact:{
|
||||
contributor_hash:"String",
|
||||
@@ -2343,10 +2344,10 @@ export const ReturnTypes: Record<string,any> = {
|
||||
can_change_status:"Boolean",
|
||||
can_complete_requirement:"Boolean",
|
||||
can_create_requirement:"Boolean",
|
||||
can_edit_requirement:"Boolean",
|
||||
can_delete_issue:"Boolean",
|
||||
can_delete_requirement:"Boolean",
|
||||
can_edit_issue:"Boolean",
|
||||
can_edit_requirement:"Boolean",
|
||||
can_move_issue:"Boolean",
|
||||
can_set_done:"Boolean",
|
||||
can_set_estimate:"Boolean",
|
||||
@@ -2493,10 +2494,10 @@ export const ReturnTypes: Record<string,any> = {
|
||||
can_change_project_status:"Boolean",
|
||||
can_complete_requirement:"Boolean",
|
||||
can_create_requirement:"Boolean",
|
||||
can_edit_requirement:"Boolean",
|
||||
can_delete_project:"Boolean",
|
||||
can_delete_requirement:"Boolean",
|
||||
can_edit_project:"Boolean",
|
||||
can_edit_requirement:"Boolean",
|
||||
can_manage_authors:"Boolean",
|
||||
can_manage_issues:"Boolean",
|
||||
can_set_master:"Boolean",
|
||||
@@ -4062,7 +4063,8 @@ export const ReturnTypes: Record<string,any> = {
|
||||
updatedAt:"DateTime",
|
||||
userAgent:"String",
|
||||
username:"String"
|
||||
}
|
||||
},
|
||||
ID: `scalar.ID` as const
|
||||
}
|
||||
|
||||
export const Ops = {
|
||||
|
||||
+2262
-873
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user