@turnkey/http
Version:
Typed HTTP client for interacting with Turnkey API
65 lines (63 loc) • 1.93 kB
JavaScript
// We export these values in order so that they can be used to deduplicate
// schema definitions in minified JS code.
// TODO: Parcel isn't deduplicating these values.
const copyValue = "copy";
const convertValue = "convert";
function convert(conversionFn, schema, input) {
if (schema === copyValue) {
return input;
}
if (schema === convertValue) {
return conversionFn(input);
}
if (schema instanceof Array) {
return input.map((v) => convert(conversionFn, schema[0], v));
}
if (schema instanceof Object) {
const output = {};
for (const [key, schemaField] of Object.entries(schema)) {
if (schemaField.derive) {
const v = schemaField.derive(input);
if (v !== undefined) {
input[key] = v;
}
}
if (!(key in input)) {
if (schemaField.required) {
throw new Error(`Missing key: ${key}`);
}
continue;
}
// Fields can be null (rather than missing or `undefined`), e.g. the
// `userHandle` field of the `AuthenticatorAssertionResponse`:
// https://www.w3.org/TR/webauthn/#iface-authenticatorassertionresponse
if (input[key] == null) {
output[key] = null;
continue;
}
output[key] = convert(conversionFn, schemaField.schema, input[key]);
}
return output;
}
}
function derived(schema, derive) {
return {
required: true,
schema,
derive,
};
}
function required(schema) {
return {
required: true,
schema,
};
}
function optional(schema) {
return {
required: false,
schema,
};
}
export { convert, convertValue, copyValue, derived, optional, required };
//# sourceMappingURL=convert.mjs.map