From 6e45e9f8b69106d4ff648b57f28a8d5d65f68610 Mon Sep 17 00:00:00 2001 From: johnnyjoy Date: Tue, 22 Jul 2025 21:25:57 +0800 Subject: [PATCH] refactor: deprecate old filter --- proto/api/v1/memo_service.proto | 4 - proto/gen/api/v1/memo_service.pb.go | 18 +- proto/gen/openapi.yaml | 14 -- server/router/api/v1/memo_service.go | 7 - server/router/api/v1/memo_service_filter.go | 167 ------------------ .../ActionButton/AddMemoRelationPopover.tsx | 4 +- .../PagedMemoList/PagedMemoList.tsx | 4 +- web/src/pages/Archived.tsx | 20 +-- web/src/pages/Home.tsx | 35 ++-- web/src/pages/UserProfile.tsx | 20 +-- web/src/types/proto/api/v1/memo_service.ts | 18 -- .../types/proto/google/protobuf/descriptor.ts | 139 ++------------- 12 files changed, 51 insertions(+), 399 deletions(-) diff --git a/proto/api/v1/memo_service.proto b/proto/api/v1/memo_service.proto index 6ad8c666a..ce39885d1 100644 --- a/proto/api/v1/memo_service.proto +++ b/proto/api/v1/memo_service.proto @@ -310,10 +310,6 @@ message ListMemosRequest { // Optional. If true, show deleted memos in the response. bool show_deleted = 7 [(google.api.field_behavior) = OPTIONAL]; - - // [Deprecated] Old filter contains some specific conditions to filter memos. - // Format: "creator == 'users/{user}' && visibilities == ['PUBLIC', 'PROTECTED']" - string old_filter = 8; } message ListMemosResponse { diff --git a/proto/gen/api/v1/memo_service.pb.go b/proto/gen/api/v1/memo_service.pb.go index f83796dbb..8ce53fddb 100644 --- a/proto/gen/api/v1/memo_service.pb.go +++ b/proto/gen/api/v1/memo_service.pb.go @@ -575,10 +575,7 @@ type ListMemosRequest struct { // Refer to `Shortcut.filter`. Filter string `protobuf:"bytes,6,opt,name=filter,proto3" json:"filter,omitempty"` // Optional. If true, show deleted memos in the response. - ShowDeleted bool `protobuf:"varint,7,opt,name=show_deleted,json=showDeleted,proto3" json:"show_deleted,omitempty"` - // [Deprecated] Old filter contains some specific conditions to filter memos. - // Format: "creator == 'users/{user}' && visibilities == ['PUBLIC', 'PROTECTED']" - OldFilter string `protobuf:"bytes,8,opt,name=old_filter,json=oldFilter,proto3" json:"old_filter,omitempty"` + ShowDeleted bool `protobuf:"varint,7,opt,name=show_deleted,json=showDeleted,proto3" json:"show_deleted,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -662,13 +659,6 @@ func (x *ListMemosRequest) GetShowDeleted() bool { return false } -func (x *ListMemosRequest) GetOldFilter() string { - if x != nil { - return x.OldFilter - } - return "" -} - type ListMemosResponse struct { state protoimpl.MessageState `protogen:"open.v1"` // The list of memos. @@ -2074,7 +2064,7 @@ const file_api_v1_memo_service_proto_rawDesc = "" + "\amemo_id\x18\x02 \x01(\tB\x03\xe0A\x01R\x06memoId\x12(\n" + "\rvalidate_only\x18\x03 \x01(\bB\x03\xe0A\x01R\fvalidateOnly\x12\"\n" + "\n" + - "request_id\x18\x04 \x01(\tB\x03\xe0A\x01R\trequestId\"\xbf\x02\n" + + "request_id\x18\x04 \x01(\tB\x03\xe0A\x01R\trequestId\"\xa0\x02\n" + "\x10ListMemosRequest\x121\n" + "\x06parent\x18\x01 \x01(\tB\x19\xe0A\x01\xfaA\x13\n" + "\x11memos.api.v1/UserR\x06parent\x12 \n" + @@ -2084,9 +2074,7 @@ const file_api_v1_memo_service_proto_rawDesc = "" + "\x05state\x18\x04 \x01(\x0e2\x13.memos.api.v1.StateB\x03\xe0A\x01R\x05state\x12\x1e\n" + "\border_by\x18\x05 \x01(\tB\x03\xe0A\x01R\aorderBy\x12\x1b\n" + "\x06filter\x18\x06 \x01(\tB\x03\xe0A\x01R\x06filter\x12&\n" + - "\fshow_deleted\x18\a \x01(\bB\x03\xe0A\x01R\vshowDeleted\x12\x1d\n" + - "\n" + - "old_filter\x18\b \x01(\tR\toldFilter\"\x84\x01\n" + + "\fshow_deleted\x18\a \x01(\bB\x03\xe0A\x01R\vshowDeleted\"\x84\x01\n" + "\x11ListMemosResponse\x12(\n" + "\x05memos\x18\x01 \x03(\v2\x12.memos.api.v1.MemoR\x05memos\x12&\n" + "\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\x12\x1d\n" + diff --git a/proto/gen/openapi.yaml b/proto/gen/openapi.yaml index dceaf9192..fdaeea45d 100644 --- a/proto/gen/openapi.yaml +++ b/proto/gen/openapi.yaml @@ -680,13 +680,6 @@ paths: description: Optional. If true, show deleted memos in the response. schema: type: boolean - - name: oldFilter - in: query - description: |- - [Deprecated] Old filter contains some specific conditions to filter memos. - Format: "creator == 'users/{user}' && visibilities == ['PUBLIC', 'PROTECTED']" - schema: - type: string responses: "200": description: OK @@ -1667,13 +1660,6 @@ paths: description: Optional. If true, show deleted memos in the response. schema: type: boolean - - name: oldFilter - in: query - description: |- - [Deprecated] Old filter contains some specific conditions to filter memos. - Format: "creator == 'users/{user}' && visibilities == ['PUBLIC', 'PROTECTED']" - schema: - type: string responses: "200": description: OK diff --git a/server/router/api/v1/memo_service.go b/server/router/api/v1/memo_service.go index 2b0d36f51..b27443a37 100644 --- a/server/router/api/v1/memo_service.go +++ b/server/router/api/v1/memo_service.go @@ -99,13 +99,6 @@ func (s *APIV1Service) ListMemos(ctx context.Context, request *v1pb.ListMemosReq // Exclude comments by default. ExcludeComments: true, } - // Handle deprecated old_filter for backward compatibility - if request.OldFilter != "" && request.Filter == "" { - //nolint:staticcheck // SA1019: Using deprecated field for backward compatibility - if err := s.buildMemoFindWithFilter(ctx, memoFind, request.OldFilter); err != nil { - return nil, status.Errorf(codes.InvalidArgument, "failed to build find memos with filter: %v", err) - } - } if request.Parent != "" && request.Parent != "users/-" { userID, err := ExtractUserIDFromName(request.Parent) if err != nil { diff --git a/server/router/api/v1/memo_service_filter.go b/server/router/api/v1/memo_service_filter.go index b4f261f73..b7b1f993d 100644 --- a/server/router/api/v1/memo_service_filter.go +++ b/server/router/api/v1/memo_service_filter.go @@ -1,168 +1 @@ package v1 - -import ( - "context" - - "github.com/google/cel-go/cel" - "github.com/pkg/errors" - exprv1 "google.golang.org/genproto/googleapis/api/expr/v1alpha1" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - - "github.com/usememos/memos/store" -) - -func (s *APIV1Service) buildMemoFindWithFilter(ctx context.Context, find *store.FindMemo, filter string) error { - if find.PayloadFind == nil { - find.PayloadFind = &store.FindMemoPayload{} - } - if filter != "" { - filterExpr, err := parseMemoFilter(filter) - if err != nil { - return status.Errorf(codes.InvalidArgument, "invalid filter: %v", err) - } - if len(filterExpr.ContentSearch) > 0 { - find.ContentSearch = filterExpr.ContentSearch - } - if filterExpr.TagSearch != nil { - if find.PayloadFind == nil { - find.PayloadFind = &store.FindMemoPayload{} - } - find.PayloadFind.TagSearch = filterExpr.TagSearch - } - if filterExpr.DisplayTimeAfter != nil { - workspaceMemoRelatedSetting, err := s.Store.GetWorkspaceMemoRelatedSetting(ctx) - if err != nil { - return status.Errorf(codes.Internal, "failed to get workspace memo related setting") - } - if workspaceMemoRelatedSetting.DisplayWithUpdateTime { - find.UpdatedTsAfter = filterExpr.DisplayTimeAfter - } else { - find.CreatedTsAfter = filterExpr.DisplayTimeAfter - } - } - if filterExpr.DisplayTimeBefore != nil { - workspaceMemoRelatedSetting, err := s.Store.GetWorkspaceMemoRelatedSetting(ctx) - if err != nil { - return status.Errorf(codes.Internal, "failed to get workspace memo related setting") - } - if workspaceMemoRelatedSetting.DisplayWithUpdateTime { - find.UpdatedTsBefore = filterExpr.DisplayTimeBefore - } else { - find.CreatedTsBefore = filterExpr.DisplayTimeBefore - } - } - if filterExpr.Pinned { - pinned := true - find.Pinned = &pinned - } - if filterExpr.HasLink { - find.PayloadFind.HasLink = true - } - if filterExpr.HasTaskList { - find.PayloadFind.HasTaskList = true - } - if filterExpr.HasCode { - find.PayloadFind.HasCode = true - } - if filterExpr.HasIncompleteTasks { - find.PayloadFind.HasIncompleteTasks = true - } - } - return nil -} - -// MemoFilterCELAttributes are the CEL attributes. -var MemoFilterCELAttributes = []cel.EnvOption{ - cel.Variable("content_search", cel.ListType(cel.StringType)), - cel.Variable("tag_search", cel.ListType(cel.StringType)), - cel.Variable("display_time_before", cel.IntType), - cel.Variable("display_time_after", cel.IntType), - cel.Variable("pinned", cel.BoolType), - cel.Variable("has_link", cel.BoolType), - cel.Variable("has_task_list", cel.BoolType), - cel.Variable("has_code", cel.BoolType), - cel.Variable("has_incomplete_tasks", cel.BoolType), -} - -type MemoFilter struct { - ContentSearch []string - TagSearch []string - DisplayTimeBefore *int64 - DisplayTimeAfter *int64 - Pinned bool - HasLink bool - HasTaskList bool - HasCode bool - HasIncompleteTasks bool -} - -func parseMemoFilter(expression string) (*MemoFilter, error) { - e, err := cel.NewEnv(MemoFilterCELAttributes...) - if err != nil { - return nil, err - } - ast, issues := e.Compile(expression) - if issues != nil { - return nil, errors.Errorf("found issue %v", issues) - } - filter := &MemoFilter{} - parsedExpr, err := cel.AstToParsedExpr(ast) - if err != nil { - return nil, err - } - callExpr := parsedExpr.GetExpr().GetCallExpr() - findMemoField(callExpr, filter) - return filter, nil -} - -func findMemoField(callExpr *exprv1.Expr_Call, filter *MemoFilter) { - if len(callExpr.Args) == 2 { - idExpr := callExpr.Args[0].GetIdentExpr() - if idExpr != nil { - if idExpr.Name == "content_search" { - contentSearch := []string{} - for _, expr := range callExpr.Args[1].GetListExpr().GetElements() { - value := expr.GetConstExpr().GetStringValue() - contentSearch = append(contentSearch, value) - } - filter.ContentSearch = contentSearch - } else if idExpr.Name == "tag_search" { - tagSearch := []string{} - for _, expr := range callExpr.Args[1].GetListExpr().GetElements() { - value := expr.GetConstExpr().GetStringValue() - tagSearch = append(tagSearch, value) - } - filter.TagSearch = tagSearch - } else if idExpr.Name == "display_time_before" { - displayTimeBefore := callExpr.Args[1].GetConstExpr().GetInt64Value() - filter.DisplayTimeBefore = &displayTimeBefore - } else if idExpr.Name == "display_time_after" { - displayTimeAfter := callExpr.Args[1].GetConstExpr().GetInt64Value() - filter.DisplayTimeAfter = &displayTimeAfter - } else if idExpr.Name == "pinned" { - value := callExpr.Args[1].GetConstExpr().GetBoolValue() - filter.Pinned = value - } else if idExpr.Name == "has_link" { - value := callExpr.Args[1].GetConstExpr().GetBoolValue() - filter.HasLink = value - } else if idExpr.Name == "has_task_list" { - value := callExpr.Args[1].GetConstExpr().GetBoolValue() - filter.HasTaskList = value - } else if idExpr.Name == "has_code" { - value := callExpr.Args[1].GetConstExpr().GetBoolValue() - filter.HasCode = value - } else if idExpr.Name == "has_incomplete_tasks" { - value := callExpr.Args[1].GetConstExpr().GetBoolValue() - filter.HasIncompleteTasks = value - } - return - } - } - for _, arg := range callExpr.Args { - callExpr := arg.GetCallExpr() - if callExpr != nil { - findMemoField(callExpr, filter) - } - } -} diff --git a/web/src/components/MemoEditor/ActionButton/AddMemoRelationPopover.tsx b/web/src/components/MemoEditor/ActionButton/AddMemoRelationPopover.tsx index 9c7f409ed..43757da10 100644 --- a/web/src/components/MemoEditor/ActionButton/AddMemoRelationPopover.tsx +++ b/web/src/components/MemoEditor/ActionButton/AddMemoRelationPopover.tsx @@ -48,12 +48,12 @@ const AddMemoRelationPopover = (props: Props) => { try { const conditions = []; if (searchText) { - conditions.push(`content_search == [${JSON.stringify(searchText)}]`); + conditions.push(`content.contains("${searchText}")`); } const { memos } = await memoServiceClient.listMemos({ parent: user.name, + filter: conditions.length > 0 ? conditions.join(" AND ") : undefined, pageSize: DEFAULT_LIST_MEMOS_PAGE_SIZE, - oldFilter: conditions.length > 0 ? conditions.join(" && ") : undefined, }); setFetchedMemos(memos); } catch (error: any) { diff --git a/web/src/components/PagedMemoList/PagedMemoList.tsx b/web/src/components/PagedMemoList/PagedMemoList.tsx index 30db9a4e2..4ad774224 100644 --- a/web/src/components/PagedMemoList/PagedMemoList.tsx +++ b/web/src/components/PagedMemoList/PagedMemoList.tsx @@ -22,7 +22,6 @@ interface Props { state?: State; orderBy?: string; filter?: string; - oldFilter?: string; pageSize?: number; } @@ -53,7 +52,6 @@ const PagedMemoList = observer((props: Props) => { state: props.state || State.NORMAL, orderBy: props.orderBy || "display_time desc", filter: props.filter || "", - oldFilter: props.oldFilter || "", pageSize: props.pageSize || DEFAULT_LIST_MEMOS_PAGE_SIZE, pageToken, }); @@ -103,7 +101,7 @@ const PagedMemoList = observer((props: Props) => { // Initial load and reload when props change useEffect(() => { refreshList(); - }, [props.owner, props.state, props.orderBy, props.filter, props.oldFilter, props.pageSize]); + }, [props.owner, props.state, props.orderBy, props.filter, props.pageSize]); // Auto-fetch more content when list changes and page isn't full useEffect(() => { diff --git a/web/src/pages/Archived.tsx b/web/src/pages/Archived.tsx index edbe63d30..7d8561a92 100644 --- a/web/src/pages/Archived.tsx +++ b/web/src/pages/Archived.tsx @@ -12,25 +12,17 @@ import { Memo } from "@/types/proto/api/v1/memo_service"; const Archived = observer(() => { const user = useCurrentUser(); - const memoListFilter = useMemo(() => { + const memoFitler = useMemo(() => { const conditions = []; - const contentSearch: string[] = []; - const tagSearch: string[] = []; for (const filter of memoFilterStore.filters) { if (filter.factor === "contentSearch") { - contentSearch.push(`"${filter.value}"`); + conditions.push(`content.contains("${filter.value}")`); } else if (filter.factor === "tagSearch") { - tagSearch.push(`"${filter.value}"`); + conditions.push(`tag in ["${filter.value}"]`); } } - if (contentSearch.length > 0) { - conditions.push(`content_search == [${contentSearch.join(", ")}]`); - } - if (tagSearch.length > 0) { - conditions.push(`tag_search == [${tagSearch.join(", ")}]`); - } - return conditions.join(" && "); - }, [user, memoFilterStore.filters]); + return conditions.length > 0 ? conditions.join(" && ") : undefined; + }, [memoFilterStore.filters]); return ( { owner={user.name} state={State.ARCHIVED} orderBy={viewStore.state.orderByTimeAsc ? "display_time asc" : "display_time desc"} - oldFilter={memoListFilter} + filter={memoFitler} /> ); }); diff --git a/web/src/pages/Home.tsx b/web/src/pages/Home.tsx index 5c346d330..e5b3176df 100644 --- a/web/src/pages/Home.tsx +++ b/web/src/pages/Home.tsx @@ -20,39 +20,33 @@ const Home = observer(() => { const user = useCurrentUser(); const selectedShortcut = userStore.state.shortcuts.find((shortcut) => getShortcutId(shortcut.name) === memoFilterStore.shortcut); - const memoListFilter = useMemo(() => { + const memoFilter = useMemo(() => { const conditions = []; - const contentSearch: string[] = []; - const tagSearch: string[] = []; + if (selectedShortcut?.filter) { + conditions.push(selectedShortcut.filter); + } for (const filter of memoFilterStore.filters) { if (filter.factor === "contentSearch") { - contentSearch.push(`"${filter.value}"`); + conditions.push(`content.contains("${filter.value}")`); } else if (filter.factor === "tagSearch") { - tagSearch.push(`"${filter.value}"`); + conditions.push(`tag in ["${filter.value}"]`); } else if (filter.factor === "pinned") { - conditions.push(`pinned == true`); + conditions.push(`pinned`); } else if (filter.factor === "property.hasLink") { - conditions.push(`has_link == true`); + conditions.push(`has_link`); } else if (filter.factor === "property.hasTaskList") { - conditions.push(`has_task_list == true`); + conditions.push(`has_task_list`); } else if (filter.factor === "property.hasCode") { - conditions.push(`has_code == true`); + conditions.push(`has_code`); } else if (filter.factor === "displayTime") { const filterDate = new Date(filter.value); const filterUtcTimestamp = filterDate.getTime() + filterDate.getTimezoneOffset() * 60 * 1000; const timestampAfter = filterUtcTimestamp / 1000; - conditions.push(`display_time_after == ${timestampAfter}`); - conditions.push(`display_time_before == ${timestampAfter + 60 * 60 * 24}`); + conditions.push(`created_ts >= ${timestampAfter} AND created_ts < ${timestampAfter + 60 * 60 * 24}`); } } - if (contentSearch.length > 0) { - conditions.push(`content_search == [${contentSearch.join(", ")}]`); - } - if (tagSearch.length > 0) { - conditions.push(`tag_search == [${tagSearch.join(", ")}]`); - } - return conditions.join(" && "); - }, [user, memoFilterStore.filters, viewStore.state.orderByTimeAsc]); + return conditions.length > 0 ? conditions.join(" && ") : undefined; + }, [memoFilterStore.filters, selectedShortcut?.filter]); return (
@@ -69,8 +63,7 @@ const Home = observer(() => { } owner={user.name} orderBy={viewStore.state.orderByTimeAsc ? "display_time asc" : "display_time desc"} - filter={selectedShortcut?.filter || ""} - oldFilter={memoListFilter} + filter={memoFilter} />
); diff --git a/web/src/pages/UserProfile.tsx b/web/src/pages/UserProfile.tsx index f60671e97..549346ed0 100644 --- a/web/src/pages/UserProfile.tsx +++ b/web/src/pages/UserProfile.tsx @@ -41,28 +41,20 @@ const UserProfile = observer(() => { }); }, [params.username]); - const memoListFilter = useMemo(() => { + const memoFilter = useMemo(() => { if (!user) { - return ""; + return undefined; } const conditions = []; - const contentSearch: string[] = []; - const tagSearch: string[] = []; for (const filter of memoFilterStore.filters) { if (filter.factor === "contentSearch") { - contentSearch.push(`"${filter.value}"`); + conditions.push(`content.contains("${filter.value}")`); } else if (filter.factor === "tagSearch") { - tagSearch.push(`"${filter.value}"`); + conditions.push(`tag in ["${filter.value}"]`); } } - if (contentSearch.length > 0) { - conditions.push(`content_search == [${contentSearch.join(", ")}]`); - } - if (tagSearch.length > 0) { - conditions.push(`tag_search == [${tagSearch.join(", ")}]`); - } - return conditions.join(" && "); + return conditions.length > 0 ? conditions.join(" && ") : undefined; }, [user, memoFilterStore.filters]); const handleCopyProfileLink = () => { @@ -110,7 +102,7 @@ const UserProfile = observer(() => { } owner={user.name} orderBy={viewStore.state.orderByTimeAsc ? "display_time asc" : "display_time desc"} - oldFilter={memoListFilter} + filter={memoFilter} /> ) : ( diff --git a/web/src/types/proto/api/v1/memo_service.ts b/web/src/types/proto/api/v1/memo_service.ts index 7696035ff..4d4120e94 100644 --- a/web/src/types/proto/api/v1/memo_service.ts +++ b/web/src/types/proto/api/v1/memo_service.ts @@ -212,11 +212,6 @@ export interface ListMemosRequest { filter: string; /** Optional. If true, show deleted memos in the response. */ showDeleted: boolean; - /** - * [Deprecated] Old filter contains some specific conditions to filter memos. - * Format: "creator == 'users/{user}' && visibilities == ['PUBLIC', 'PROTECTED']" - */ - oldFilter: string; } export interface ListMemosResponse { @@ -1103,7 +1098,6 @@ function createBaseListMemosRequest(): ListMemosRequest { orderBy: "", filter: "", showDeleted: false, - oldFilter: "", }; } @@ -1130,9 +1124,6 @@ export const ListMemosRequest: MessageFns = { if (message.showDeleted !== false) { writer.uint32(56).bool(message.showDeleted); } - if (message.oldFilter !== "") { - writer.uint32(66).string(message.oldFilter); - } return writer; }, @@ -1199,14 +1190,6 @@ export const ListMemosRequest: MessageFns = { message.showDeleted = reader.bool(); continue; } - case 8: { - if (tag !== 66) { - break; - } - - message.oldFilter = reader.string(); - continue; - } } if ((tag & 7) === 4 || tag === 0) { break; @@ -1228,7 +1211,6 @@ export const ListMemosRequest: MessageFns = { message.orderBy = object.orderBy ?? ""; message.filter = object.filter ?? ""; message.showDeleted = object.showDeleted ?? false; - message.oldFilter = object.oldFilter ?? ""; return message; }, }; diff --git a/web/src/types/proto/google/protobuf/descriptor.ts b/web/src/types/proto/google/protobuf/descriptor.ts index 89514564e..9f55f0344 100644 --- a/web/src/types/proto/google/protobuf/descriptor.ts +++ b/web/src/types/proto/google/protobuf/descriptor.ts @@ -35,7 +35,7 @@ export enum Edition { EDITION_2024 = "EDITION_2024", /** * EDITION_1_TEST_ONLY - Placeholder editions for testing feature resolution. These should not be - * used or relied on outside of tests. + * used or relyed on outside of tests. */ EDITION_1_TEST_ONLY = "EDITION_1_TEST_ONLY", EDITION_2_TEST_ONLY = "EDITION_2_TEST_ONLY", @@ -177,19 +177,11 @@ export interface FileDescriptorProto { * The supported values are "proto2", "proto3", and "editions". * * If `edition` is present, this value must be "editions". - * WARNING: This field should only be used by protobuf plugins or special - * cases like the proto compiler. Other uses are discouraged and - * developers should rely on the protoreflect APIs for their client language. */ syntax?: | string | undefined; - /** - * The edition of the proto file. - * WARNING: This field should only be used by protobuf plugins or special - * cases like the proto compiler. Other uses are discouraged and - * developers should rely on the protoreflect APIs for their client language. - */ + /** The edition of the proto file. */ edition?: Edition | undefined; } @@ -836,12 +828,7 @@ export interface FileOptions { rubyPackage?: | string | undefined; - /** - * Any features defined in the specific edition. - * WARNING: This field should only be used by protobuf plugins or special - * cases like the proto compiler. Other uses are discouraged and - * developers should rely on the protoreflect APIs for their client language. - */ + /** Any features defined in the specific edition. */ features?: | FeatureSet | undefined; @@ -979,12 +966,7 @@ export interface MessageOptions { deprecatedLegacyJsonFieldConflicts?: | boolean | undefined; - /** - * Any features defined in the specific edition. - * WARNING: This field should only be used by protobuf plugins or special - * cases like the proto compiler. Other uses are discouraged and - * developers should rely on the protoreflect APIs for their client language. - */ + /** Any features defined in the specific edition. */ features?: | FeatureSet | undefined; @@ -994,13 +976,12 @@ export interface MessageOptions { export interface FieldOptions { /** - * NOTE: ctype is deprecated. Use `features.(pb.cpp).string_type` instead. * The ctype option instructs the C++ code generator to use a different * representation of the field than it normally would. See the specific * options below. This option is only implemented to support use of * [ctype=CORD] and [ctype=STRING] (the default) on non-repeated fields of - * type "bytes" in the open source release. - * TODO: make ctype actually deprecated. + * type "bytes" in the open source release -- sorry, we'll try to include + * other types in a future version! */ ctype?: | FieldOptions_CType @@ -1089,12 +1070,7 @@ export interface FieldOptions { retention?: FieldOptions_OptionRetention | undefined; targets: FieldOptions_OptionTargetType[]; editionDefaults: FieldOptions_EditionDefault[]; - /** - * Any features defined in the specific edition. - * WARNING: This field should only be used by protobuf plugins or special - * cases like the proto compiler. Other uses are discouraged and - * developers should rely on the protoreflect APIs for their client language. - */ + /** Any features defined in the specific edition. */ features?: FeatureSet | undefined; featureSupport?: | FieldOptions_FeatureSupport @@ -1193,7 +1169,11 @@ export function fieldOptions_JSTypeToNumber(object: FieldOptions_JSType): number } } -/** If set to RETENTION_SOURCE, the option will be omitted from the binary. */ +/** + * If set to RETENTION_SOURCE, the option will be omitted from the binary. + * Note: as of January 2023, support for this is in progress and does not yet + * have an effect (b/264593489). + */ export enum FieldOptions_OptionRetention { RETENTION_UNKNOWN = "RETENTION_UNKNOWN", RETENTION_RUNTIME = "RETENTION_RUNTIME", @@ -1236,7 +1216,8 @@ export function fieldOptions_OptionRetentionToNumber(object: FieldOptions_Option /** * This indicates the types of entities that the field may apply to when used * as an option. If it is unset, then the field may be freely used as an - * option on any kind of entity. + * option on any kind of entity. Note: as of January 2023, support for this is + * in progress and does not yet have an effect (b/264593489). */ export enum FieldOptions_OptionTargetType { TARGET_TYPE_UNKNOWN = "TARGET_TYPE_UNKNOWN", @@ -1360,12 +1341,7 @@ export interface FieldOptions_FeatureSupport { } export interface OneofOptions { - /** - * Any features defined in the specific edition. - * WARNING: This field should only be used by protobuf plugins or special - * cases like the proto compiler. Other uses are discouraged and - * developers should rely on the protoreflect APIs for their client language. - */ + /** Any features defined in the specific edition. */ features?: | FeatureSet | undefined; @@ -1403,12 +1379,7 @@ export interface EnumOptions { deprecatedLegacyJsonFieldConflicts?: | boolean | undefined; - /** - * Any features defined in the specific edition. - * WARNING: This field should only be used by protobuf plugins or special - * cases like the proto compiler. Other uses are discouraged and - * developers should rely on the protoreflect APIs for their client language. - */ + /** Any features defined in the specific edition. */ features?: | FeatureSet | undefined; @@ -1426,12 +1397,7 @@ export interface EnumValueOptions { deprecated?: | boolean | undefined; - /** - * Any features defined in the specific edition. - * WARNING: This field should only be used by protobuf plugins or special - * cases like the proto compiler. Other uses are discouraged and - * developers should rely on the protoreflect APIs for their client language. - */ + /** Any features defined in the specific edition. */ features?: | FeatureSet | undefined; @@ -1452,12 +1418,7 @@ export interface EnumValueOptions { } export interface ServiceOptions { - /** - * Any features defined in the specific edition. - * WARNING: This field should only be used by protobuf plugins or special - * cases like the proto compiler. Other uses are discouraged and - * developers should rely on the protoreflect APIs for their client language. - */ + /** Any features defined in the specific edition. */ features?: | FeatureSet | undefined; @@ -1485,12 +1446,7 @@ export interface MethodOptions { idempotencyLevel?: | MethodOptions_IdempotencyLevel | undefined; - /** - * Any features defined in the specific edition. - * WARNING: This field should only be used by protobuf plugins or special - * cases like the proto compiler. Other uses are discouraged and - * developers should rely on the protoreflect APIs for their client language. - */ + /** Any features defined in the specific edition. */ features?: | FeatureSet | undefined; @@ -1593,7 +1549,6 @@ export interface FeatureSet { utf8Validation?: FeatureSet_Utf8Validation | undefined; messageEncoding?: FeatureSet_MessageEncoding | undefined; jsonFormat?: FeatureSet_JsonFormat | undefined; - enforceNamingStyle?: FeatureSet_EnforceNamingStyle | undefined; } export enum FeatureSet_FieldPresence { @@ -1836,45 +1791,6 @@ export function featureSet_JsonFormatToNumber(object: FeatureSet_JsonFormat): nu } } -export enum FeatureSet_EnforceNamingStyle { - ENFORCE_NAMING_STYLE_UNKNOWN = "ENFORCE_NAMING_STYLE_UNKNOWN", - STYLE2024 = "STYLE2024", - STYLE_LEGACY = "STYLE_LEGACY", - UNRECOGNIZED = "UNRECOGNIZED", -} - -export function featureSet_EnforceNamingStyleFromJSON(object: any): FeatureSet_EnforceNamingStyle { - switch (object) { - case 0: - case "ENFORCE_NAMING_STYLE_UNKNOWN": - return FeatureSet_EnforceNamingStyle.ENFORCE_NAMING_STYLE_UNKNOWN; - case 1: - case "STYLE2024": - return FeatureSet_EnforceNamingStyle.STYLE2024; - case 2: - case "STYLE_LEGACY": - return FeatureSet_EnforceNamingStyle.STYLE_LEGACY; - case -1: - case "UNRECOGNIZED": - default: - return FeatureSet_EnforceNamingStyle.UNRECOGNIZED; - } -} - -export function featureSet_EnforceNamingStyleToNumber(object: FeatureSet_EnforceNamingStyle): number { - switch (object) { - case FeatureSet_EnforceNamingStyle.ENFORCE_NAMING_STYLE_UNKNOWN: - return 0; - case FeatureSet_EnforceNamingStyle.STYLE2024: - return 1; - case FeatureSet_EnforceNamingStyle.STYLE_LEGACY: - return 2; - case FeatureSet_EnforceNamingStyle.UNRECOGNIZED: - default: - return -1; - } -} - /** * A compiled specification for the defaults of a set of features. These * messages are generated from FeatureSet extensions and can be used to seed @@ -4998,7 +4914,6 @@ function createBaseFeatureSet(): FeatureSet { utf8Validation: FeatureSet_Utf8Validation.UTF8_VALIDATION_UNKNOWN, messageEncoding: FeatureSet_MessageEncoding.MESSAGE_ENCODING_UNKNOWN, jsonFormat: FeatureSet_JsonFormat.JSON_FORMAT_UNKNOWN, - enforceNamingStyle: FeatureSet_EnforceNamingStyle.ENFORCE_NAMING_STYLE_UNKNOWN, }; } @@ -5033,12 +4948,6 @@ export const FeatureSet: MessageFns = { if (message.jsonFormat !== undefined && message.jsonFormat !== FeatureSet_JsonFormat.JSON_FORMAT_UNKNOWN) { writer.uint32(48).int32(featureSet_JsonFormatToNumber(message.jsonFormat)); } - if ( - message.enforceNamingStyle !== undefined && - message.enforceNamingStyle !== FeatureSet_EnforceNamingStyle.ENFORCE_NAMING_STYLE_UNKNOWN - ) { - writer.uint32(56).int32(featureSet_EnforceNamingStyleToNumber(message.enforceNamingStyle)); - } return writer; }, @@ -5097,14 +5006,6 @@ export const FeatureSet: MessageFns = { message.jsonFormat = featureSet_JsonFormatFromJSON(reader.int32()); continue; } - case 7: { - if (tag !== 56) { - break; - } - - message.enforceNamingStyle = featureSet_EnforceNamingStyleFromJSON(reader.int32()); - continue; - } } if ((tag & 7) === 4 || tag === 0) { break; @@ -5126,8 +5027,6 @@ export const FeatureSet: MessageFns = { message.utf8Validation = object.utf8Validation ?? FeatureSet_Utf8Validation.UTF8_VALIDATION_UNKNOWN; message.messageEncoding = object.messageEncoding ?? FeatureSet_MessageEncoding.MESSAGE_ENCODING_UNKNOWN; message.jsonFormat = object.jsonFormat ?? FeatureSet_JsonFormat.JSON_FORMAT_UNKNOWN; - message.enforceNamingStyle = object.enforceNamingStyle ?? - FeatureSet_EnforceNamingStyle.ENFORCE_NAMING_STYLE_UNKNOWN; return message; }, };