@nymphjs/client
Version:
Nymph.js - Client
93 lines • 2.92 kB
JavaScript
import Entity from './Entity.js';
export function uniqueStrings(array) {
const obj = {};
for (let i = 0; i < array.length; ++i) {
obj[array[i]] = true;
}
return Object.keys(obj);
}
export function entityConstructorsToClassNames(item) {
if (typeof item === 'function' &&
item.prototype instanceof Entity &&
typeof item.class === 'string') {
// Convert entity classes to strings.
return item.class;
}
else if (Array.isArray(item)) {
// Recurse into lower arrays.
return item.map((entry) => entityConstructorsToClassNames(entry));
}
else if (item instanceof Object) {
let newObj = Object.create(item);
for (let [key, value] of Object.entries(item)) {
newObj[key] = entityConstructorsToClassNames(value);
}
return newObj;
}
// Not an entity or array, just return it.
return item;
}
export function entitiesToReferences(item) {
if (item == null) {
return item;
}
else if (item instanceof Entity &&
typeof item.$toReference === 'function') {
// Convert entities to references.
return item.$toReference();
}
else if (Array.isArray(item)) {
// Recurse into lower arrays.
return item.map((entry) => entitiesToReferences(entry));
}
else if (item instanceof Object) {
let newObj = Object.create(item);
for (let [key, value] of Object.entries(item)) {
newObj[key] = entitiesToReferences(value);
}
return newObj;
}
// Not an entity or array, just return it.
return item;
}
export function referencesToEntities(item, nymph) {
if (item == null) {
return item;
}
else if (Array.isArray(item)) {
// Check if it's a reference.
if (item[0] === 'nymph_entity_reference') {
try {
const EntityClass = nymph.getEntityClass(item[2]);
return EntityClass.factoryReference(item);
}
catch (e) {
return item;
}
}
else {
// Recurse into lower arrays.
return item.map((item) => referencesToEntities(item, nymph));
}
}
else if (Entity && item instanceof Object && !(item instanceof Entity)) {
for (let [key, value] of Object.entries(item)) {
item[key] = referencesToEntities(value, nymph);
}
}
// Not an array, just return it.
return item;
}
export function sortObj(obj) {
// adapted from
// http://am.aurlien.net/post/1221493460/sorting-javascript-objects
const tempArray = Object.keys(obj);
tempArray.sort();
for (let i = 0; i < tempArray.length; i++) {
const temp = obj[tempArray[i]];
delete obj[tempArray[i]];
obj[tempArray[i]] = temp;
}
return obj;
}
//# sourceMappingURL=utils.js.map