"use strict"; // Copyright 2021-2024 Buf Technologies, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. Object.defineProperty(exports, "__esModule", { value: true }); exports.reifyWkt = void 0; const scalar_js_1 = require("../scalar.js"); /** * @deprecated please use reifyWkt from @bufbuild/protoplugin/ecmascript instead * * Reifies a given DescMessage into a more concrete object representing its * respective well-known type. The returned object will contain properties * representing the WKT's defined fields. * * Useful during code generation when immediate access to a particular field * is needed without having to search the object's typename and DescField list. * * Returns undefined if the WKT cannot be completely constructed via the * DescMessage. */ function reifyWkt(message) { switch (message.typeName) { case "google.protobuf.Any": { const typeUrl = message.fields.find((f) => f.number == 1 && f.fieldKind == "scalar" && f.scalar === scalar_js_1.ScalarType.STRING); const value = message.fields.find((f) => f.number == 2 && f.fieldKind == "scalar" && f.scalar === scalar_js_1.ScalarType.BYTES); if (typeUrl && value) { return { typeName: message.typeName, typeUrl, value, }; } break; } case "google.protobuf.Timestamp": { const seconds = message.fields.find((f) => f.number == 1 && f.fieldKind == "scalar" && f.scalar === scalar_js_1.ScalarType.INT64); const nanos = message.fields.find((f) => f.number == 2 && f.fieldKind == "scalar" && f.scalar === scalar_js_1.ScalarType.INT32); if (seconds && nanos) { return { typeName: message.typeName, seconds, nanos, }; } break; } case "google.protobuf.Duration": { const seconds = message.fields.find((f) => f.number == 1 && f.fieldKind == "scalar" && f.scalar === scalar_js_1.ScalarType.INT64); const nanos = message.fields.find((f) => f.number == 2 && f.fieldKind == "scalar" && f.scalar === scalar_js_1.ScalarType.INT32); if (seconds && nanos) { return { typeName: message.typeName, seconds, nanos, }; } break; } case "google.protobuf.Struct": { const fields = message.fields.find((f) => f.number == 1 && !f.repeated); if ((fields === null || fields === void 0 ? void 0 : fields.fieldKind) !== "map" || fields.mapValue.kind !== "message" || fields.mapValue.message.typeName !== "google.protobuf.Value") { break; } return { typeName: message.typeName, fields }; } case "google.protobuf.Value": { const kind = message.oneofs.find((o) => o.name === "kind"); const nullValue = message.fields.find((f) => f.number == 1 && f.oneof === kind); if ((nullValue === null || nullValue === void 0 ? void 0 : nullValue.fieldKind) !== "enum" || nullValue.enum.typeName !== "google.protobuf.NullValue") { return undefined; } const numberValue = message.fields.find((f) => f.number == 2 && f.fieldKind == "scalar" && f.scalar === scalar_js_1.ScalarType.DOUBLE && f.oneof === kind); const stringValue = message.fields.find((f) => f.number == 3 && f.fieldKind == "scalar" && f.scalar === scalar_js_1.ScalarType.STRING && f.oneof === kind); const boolValue = message.fields.find((f) => f.number == 4 && f.fieldKind == "scalar" && f.scalar === scalar_js_1.ScalarType.BOOL && f.oneof === kind); const structValue = message.fields.find((f) => f.number == 5 && f.oneof === kind); if ((structValue === null || structValue === void 0 ? void 0 : structValue.fieldKind) !== "message" || structValue.message.typeName !== "google.protobuf.Struct") { return undefined; } const listValue = message.fields.find((f) => f.number == 6 && f.oneof === kind); if ((listValue === null || listValue === void 0 ? void 0 : listValue.fieldKind) !== "message" || listValue.message.typeName !== "google.protobuf.ListValue") { return undefined; } if (kind && numberValue && stringValue && boolValue) { return { typeName: message.typeName, kind, nullValue, numberValue, stringValue, boolValue, structValue, listValue, }; } break; } case "google.protobuf.ListValue": { const values = message.fields.find((f) => f.number == 1 && f.repeated); if ((values === null || values === void 0 ? void 0 : values.fieldKind) != "message" || values.message.typeName !== "google.protobuf.Value") { break; } return { typeName: message.typeName, values }; } case "google.protobuf.FieldMask": { const paths = message.fields.find((f) => f.number == 1 && f.fieldKind == "scalar" && f.scalar === scalar_js_1.ScalarType.STRING && f.repeated); if (paths) { return { typeName: message.typeName, paths }; } break; } case "google.protobuf.DoubleValue": case "google.protobuf.FloatValue": case "google.protobuf.Int64Value": case "google.protobuf.UInt64Value": case "google.protobuf.Int32Value": case "google.protobuf.UInt32Value": case "google.protobuf.BoolValue": case "google.protobuf.StringValue": case "google.protobuf.BytesValue": { const value = message.fields.find((f) => f.number == 1 && f.name == "value"); if (!value) { break; } if (value.fieldKind !== "scalar") { break; } return { typeName: message.typeName, value }; } } return undefined; } exports.reifyWkt = reifyWkt;