From a2c4498694ec7740abcdb5c467bd70113afbd165 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Sat, 12 Oct 2024 21:35:49 +0800 Subject: [PATCH] style: NapProto --- src/core/proto/NapProto.ts | 57 +++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/src/core/proto/NapProto.ts b/src/core/proto/NapProto.ts index 94f1082d..0d87fff7 100644 --- a/src/core/proto/NapProto.ts +++ b/src/core/proto/NapProto.ts @@ -1,5 +1,5 @@ -import {MessageType, RepeatType, ScalarType} from '@protobuf-ts/runtime'; -import {PartialFieldInfo} from "@protobuf-ts/runtime/build/types/reflection-info"; +import { MessageType, RepeatType, ScalarType } from '@protobuf-ts/runtime'; +import { PartialFieldInfo } from "@protobuf-ts/runtime/build/types/reflection-info"; type LowerCamelCase = CamelCaseHelper; @@ -9,23 +9,23 @@ type CamelCaseHelper< IsFirstChar extends boolean > = S extends `${infer F}${infer R}` ? F extends '_' - ? CamelCaseHelper - : F extends `${number}` - ? `${F}${CamelCaseHelper}` - : CapNext extends true - ? `${Uppercase}${CamelCaseHelper}` - : IsFirstChar extends true - ? `${Lowercase}${CamelCaseHelper}` - : `${F}${CamelCaseHelper}` + ? CamelCaseHelper + : F extends `${number}` + ? `${F}${CamelCaseHelper}` + : CapNext extends true + ? `${Uppercase}${CamelCaseHelper}` + : IsFirstChar extends true + ? `${Lowercase}${CamelCaseHelper}` + : `${F}${CamelCaseHelper}` : ''; type ScalarTypeToTsType = T extends ScalarType.DOUBLE | ScalarType.FLOAT | ScalarType.INT32 | ScalarType.FIXED32 | ScalarType.UINT32 | ScalarType.SFIXED32 | ScalarType.SINT32 ? number : - T extends ScalarType.INT64 | ScalarType.UINT64 | ScalarType.FIXED64 | ScalarType.SFIXED64 | ScalarType.SINT64 ? bigint : - T extends ScalarType.BOOL ? boolean : - T extends ScalarType.STRING ? string : - T extends ScalarType.BYTES ? Uint8Array : - never; + T extends ScalarType.INT64 | ScalarType.UINT64 | ScalarType.FIXED64 | ScalarType.SFIXED64 | ScalarType.SINT64 ? bigint : + T extends ScalarType.BOOL ? boolean : + T extends ScalarType.STRING ? string : + T extends ScalarType.BYTES ? Uint8Array : + never; interface BaseProtoFieldType { kind: 'scalar' | 'message'; @@ -55,25 +55,25 @@ function ProtoField ProtoMessageType, O extends boolean = false, R extends O extends true ? false : boolean = false>(no: number, type: T, repeated?: R, optional?: O): MessageProtoFieldType; function ProtoField(no: number, type: ScalarType | (() => ProtoMessageType), repeated?: boolean, optional?: boolean): ProtoFieldType { if (typeof type === 'function') { - return {kind: 'message', no: no, type: type, repeated: repeated ?? false, optional: optional ?? false}; + return { kind: 'message', no: no, type: type, repeated: repeated ?? false, optional: optional ?? false }; } else { - return {kind: 'scalar', no: no, type: type, repeated: repeated ?? false, optional: optional ?? false}; + return { kind: 'scalar', no: no, type: type, repeated: repeated ?? false, optional: optional ?? false }; } } type ProtoFieldReturnType = T extends ScalarProtoFieldType ? ScalarTypeToTsType : T extends MessageProtoFieldType - ? ProtoStructType> - : never; + ? ProtoStructType> + : never; type RequiredFieldsType = { [K in keyof T as T[K] extends { optional: true } | MessageProtoFieldType ? never : LowerCamelCase] : T[K] extends { repeated: true } - ? ProtoFieldReturnType[] - : ProtoFieldReturnType + ? ProtoFieldReturnType[] + : ProtoFieldReturnType }; type OptionalFieldsType = { @@ -81,8 +81,8 @@ type OptionalFieldsType = { optional: true } | MessageProtoFieldType ? LowerCamelCase : never]?: T[K] extends { repeated: true } - ? ProtoFieldReturnType[] - : ProtoFieldReturnType + ? ProtoFieldReturnType[] + : ProtoFieldReturnType }; type ProtoStructType = RequiredFieldsType & OptionalFieldsType; @@ -99,17 +99,18 @@ class NapProtoMsg { this._field = Object.keys(fields).map(key => { const field = fields[key]; if (field.kind === 'scalar') { + const repeatType = field.repeated + ? [ScalarType.STRING, ScalarType.BYTES].includes(field.type) + ? RepeatType.UNPACKED + : RepeatType.PACKED + : RepeatType.NO; return { no: field.no, name: key, kind: 'scalar', T: field.type, opt: field.optional, - repeat: field.repeated - ? [ScalarType.STRING, ScalarType.BYTES].includes(field.type) - ? RepeatType.UNPACKED - : RepeatType.PACKED - : RepeatType.NO, + repeat: repeatType, }; } else if (field.kind === 'message') { const rt = NapProtoMsgCache.get(field.type()) ?? (() => {