@jupyterlab/services
Version:
Client APIs for the Jupyter services REST APIs
58 lines (54 loc) • 1.43 kB
text/typescript
// Copyright (c) Jupyter Development Team.
// Distributed under the terms of the Modified BSD License.
/**
* Validate a property as being on an object, and optionally
* of a given type and among a given set of values.
*/
export function validateProperty(
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
object: any,
name: string,
typeName?: string,
values: any[] = []
): void {
if (!object.hasOwnProperty(name)) {
throw Error(`Missing property '${name}'`);
}
const value = object[name];
if (typeName !== void 0) {
let valid = true;
switch (typeName) {
case 'array':
valid = Array.isArray(value);
break;
case 'object':
valid = typeof value !== 'undefined';
break;
default:
valid = typeof value === typeName;
}
if (!valid) {
throw new Error(`Property '${name}' is not of type '${typeName}'`);
}
if (values.length > 0) {
let valid = true;
switch (typeName) {
case 'string':
case 'number':
case 'boolean':
valid = values.includes(value);
break;
default:
valid = values.findIndex(v => v === value) >= 0;
break;
}
if (!valid) {
throw new Error(
`Property '${name}' is not one of the valid values ${JSON.stringify(
values
)}`
);
}
}
}
}