airbridge-react-native-sdk
Version:
Airbridge SDK for React Native
137 lines • 4.01 kB
JavaScript
import { check } from './check';
import { compute } from './compute';
import { create } from './create';
import { extract } from './extract';
export const createJSONObject = (object) => {
if (!check.object(object)) {
return undefined;
}
return create.object.fromEntries(extract.entries(object).map(([key, value]) => {
if (!check.string(key)) {
return undefined;
}
if (!check.string(value)
&& !check.number(value)
&& !check.boolean(value)
&& !check.array(value)
&& !check.object(value)
&& !check.null(value)) {
return undefined;
}
if (check.array(value)) {
return compute.defined(createJSONArray(value), array => {
return [key, array];
});
}
if (check.object(value)) {
return compute.defined(createJSONObject(value), object => {
return [key, object];
});
}
return [key, value];
}).filter(value => check.defined(value)));
};
export const createJSONArray = (array) => {
if (!check.array(array)) {
return undefined;
}
return array.map((value) => {
if (!check.string(value)
&& !check.number(value)
&& !check.boolean(value)
&& !check.array(value)
&& !check.object(value)
&& !check.null(value)) {
return undefined;
}
if (check.array(value)) {
return createJSONArray(value);
}
if (check.object(value)) {
return createJSONObject(value);
}
return value;
}).filter(value => check.defined(value));
};
export const createJSONElement = (element) => {
if (!check.string(element)
&& !check.number(element)
&& !check.boolean(element)
&& !check.array(element)
&& !check.object(element)
&& !check.null(element)) {
return undefined;
}
if (check.array(element)) {
return createJSONArray(element);
}
if (check.object(element)) {
return createJSONObject(element);
}
return element;
};
export const checkJSONObject = (object) => {
if (!check.object(object)) {
return false;
}
for (const [key, value] of extract.entries(object)) {
if (!check.string(key)) {
return false;
}
if (!check.string(value)
&& !check.number(value)
&& !check.boolean(value)
&& !check.array(value)
&& !check.object(value)
&& !check.null(value)) {
return false;
}
if (check.array(value) && !checkJSONArray(value)) {
return false;
}
if (check.object(value) && !checkJSONObject(value)) {
return false;
}
}
return true;
};
export const checkJSONArray = (array) => {
if (!check.array(array)) {
return false;
}
for (const value of array) {
if (!check.string(value)
&& !check.number(value)
&& !check.boolean(value)
&& !check.array(value)
&& !check.object(value)
&& !check.null(value)) {
return false;
}
if (check.array(value) && !checkJSONArray(value)) {
return false;
}
if (check.object(value) && !checkJSONObject(value)) {
return false;
}
}
return true;
};
export const checkJSONElement = (element) => {
if (!check.string(element)
&& !check.number(element)
&& !check.boolean(element)
&& !check.array(element)
&& !check.object(element)
&& !check.null(element)) {
return false;
}
if (check.array(element) && !checkJSONArray(element)) {
return false;
}
if (check.object(element) && !checkJSONObject(element)) {
return false;
}
return true;
};
//# sourceMappingURL=json.js.map