93 lines
2 KiB
JavaScript
93 lines
2 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/* eslint no-shadow: ["error", { "allow": ["name"] }] */
|
|
|
|
import { JSON_NUMBER } from "resource://devtools/client/shared/components/reps/reps/constants.mjs";
|
|
|
|
/**
|
|
* Implementation of the default data provider. A provider is state less
|
|
* object responsible for transformation data (usually a state) to
|
|
* a structure that can be directly consumed by the tree-view component.
|
|
*/
|
|
const ObjectProvider = {
|
|
getChildren(object) {
|
|
const children = [];
|
|
|
|
if (object instanceof ObjectProperty) {
|
|
object = object.value;
|
|
}
|
|
|
|
if (!object) {
|
|
return [];
|
|
}
|
|
|
|
if (object?.type === JSON_NUMBER) {
|
|
return [];
|
|
}
|
|
|
|
if (typeof object == "string") {
|
|
return [];
|
|
}
|
|
|
|
for (const prop in object) {
|
|
try {
|
|
children.push(new ObjectProperty(prop, object[prop]));
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
}
|
|
return children;
|
|
},
|
|
|
|
hasChildren(object) {
|
|
if (object instanceof ObjectProperty) {
|
|
object = object.value;
|
|
}
|
|
|
|
if (!object) {
|
|
return false;
|
|
}
|
|
|
|
if (object.type === JSON_NUMBER) {
|
|
return false;
|
|
}
|
|
|
|
if (typeof object == "string") {
|
|
return false;
|
|
}
|
|
|
|
if (typeof object !== "object") {
|
|
return false;
|
|
}
|
|
|
|
return !!Object.keys(object).length;
|
|
},
|
|
|
|
getLabel(object) {
|
|
return object instanceof ObjectProperty ? object.name : null;
|
|
},
|
|
|
|
getValue(object) {
|
|
return object instanceof ObjectProperty ? object.value : null;
|
|
},
|
|
|
|
getKey(object) {
|
|
return object instanceof ObjectProperty ? object.name : null;
|
|
},
|
|
|
|
getType(object) {
|
|
return object instanceof ObjectProperty
|
|
? typeof object.value
|
|
: typeof object;
|
|
},
|
|
};
|
|
|
|
function ObjectProperty(name, value) {
|
|
this.name = name;
|
|
this.value = value;
|
|
}
|
|
|
|
// Exports from this module
|
|
export { ObjectProperty, ObjectProvider };
|