Files
mlugg 0a889b2ab1 Update @actions/cache to 4.0.2
Version 3 of `@actions/cache` is now deprecated, and can cause runs to
fail; see https://github.com/actions/toolkit/blob/main/packages/cache/README.md.

I have no fucking clue why this was considered a major release; it's
explicitly documented as being entirely backwards-compatible. SemVer be
damned, amirite?
2025-03-10 17:01:15 +00:00

45 lines
1.7 KiB
JavaScript

import { reflectionScalarDefault } from "./reflection-scalar-default";
import { MESSAGE_TYPE } from './message-type-contract';
/**
* Creates an instance of the generic message, using the field
* information.
*/
export function reflectionCreate(type) {
/**
* This ternary can be removed in the next major version.
* The `Object.create()` code path utilizes a new `messagePrototype`
* property on the `IMessageType` which has this same `MESSAGE_TYPE`
* non-enumerable property on it. Doing it this way means that we only
* pay the cost of `Object.defineProperty()` once per `IMessageType`
* class of once per "instance". The falsy code path is only provided
* for backwards compatibility in cases where the runtime library is
* updated without also updating the generated code.
*/
const msg = type.messagePrototype
? Object.create(type.messagePrototype)
: Object.defineProperty({}, MESSAGE_TYPE, { value: type });
for (let field of type.fields) {
let name = field.localName;
if (field.opt)
continue;
if (field.oneof)
msg[field.oneof] = { oneofKind: undefined };
else if (field.repeat)
msg[name] = [];
else
switch (field.kind) {
case "scalar":
msg[name] = reflectionScalarDefault(field.T, field.L);
break;
case "enum":
// we require 0 to be default value for all enums
msg[name] = 0;
break;
case "map":
msg[name] = {};
break;
}
}
return msg;
}