MCPcopy Create free account
hub / github.com/CommE2E/comm / convertObject

Function convertObject

lib/utils/conversion-utils.js:100–195  ·  view source on GitHub ↗
(
  validator: TType<I>,
  input: I,
  typesToConvert: $ReadOnlyArray<TType<T>>,
  conversionFunction: T => T,
  options?: ?ConvertObjectOptions,
)

Source from the content-addressed store, hash-verified

98 +dontValidateInput?: ?boolean,
99};
100function convertObject<T, I>(
101 validator: TType<I>,
102 input: I,
103 typesToConvert: $ReadOnlyArray<TType<T>>,
104 conversionFunction: T => T,
105 options?: ?ConvertObjectOptions,
106): I {
107 if (input === null || input === undefined) {
108 return input;
109 }
110 const dontValidateInput = options?.dontValidateInput;
111
112 // While they should be the same runtime object,
113 // `tValidator` is `TType<T>` and `validator` is `TType<I>`.
114 // Having them have different types allows us to use `assertWithValidator`
115 // to change `input` flow type
116 const tValidator = typesToConvert[typesToConvert.indexOf(validator)];
117 if (tValidator && tValidator.is(input)) {
118 const tInput = assertWithValidator(input, tValidator);
119 const converted = conversionFunction(tInput);
120 return assertWithValidator(converted, validator);
121 }
122
123 if (validator.meta.kind === 'maybe' || validator.meta.kind === 'subtype') {
124 return convertObject(
125 validator.meta.type,
126 input,
127 typesToConvert,
128 conversionFunction,
129 options,
130 );
131 }
132 if (validator.meta.kind === 'interface' && typeof input === 'object') {
133 const recastValidator: TInterface<typeof input> = (validator: any);
134 const result: { [string]: mixed } = {};
135 for (const key in input) {
136 const innerValidator = recastValidator.meta.props[key];
137 result[key] = convertObject(
138 innerValidator,
139 input[key],
140 typesToConvert,
141 conversionFunction,
142 options,
143 );
144 }
145 if (dontValidateInput) {
146 return (result: any);
147 } else {
148 return assertWithValidator(result, recastValidator);
149 }
150 }
151 if (validator.meta.kind === 'union') {
152 for (const innerValidator of validator.meta.types) {
153 if (innerValidator.is(input)) {
154 return convertObject(
155 innerValidator,
156 input,
157 typesToConvert,

Callers 4

sanitizeInputFunction · 0.90
extractIDsFromPayloadFunction · 0.85

Calls 2

assertWithValidatorFunction · 0.90
conversionFunctionFunction · 0.85

Tested by

no test coverage detected