@blinkk/editor
Version:
Structured content editor with live previews.
93 lines • 3.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DeepWalk = void 0;
const dataType_1 = require("@blinkk/selective-edit/dist/src/utility/dataType");
class DeepWalk {
constructor(config) {
this.config = config || {};
}
async walk(value, transformValue) {
if (dataType_1.DataType.isArray(value)) {
return await this.walkArray(value, transformValue);
}
return await this.walkRecord(value, transformValue);
}
walkSync(value, transformValue) {
if (dataType_1.DataType.isArray(value)) {
return this.walkArraySync(value, transformValue);
}
return this.walkRecordSync(value, transformValue);
}
async walkArray(originalValue, transformValue) {
const newValue = [];
for (let value of originalValue) {
if (dataType_1.DataType.isObject(value)) {
// Clean in depth before testing for walking.
value = await this.walkRecord(value, transformValue);
}
else if (dataType_1.DataType.isArray(value)) {
value = await this.walkArray(value, transformValue);
}
else {
value = await transformValue(value);
}
newValue.push(value);
}
return newValue;
}
walkArraySync(originalValue, transformValue) {
const newValue = [];
for (let value of originalValue) {
if (dataType_1.DataType.isObject(value)) {
// Clean in depth before testing for walking.
value = this.walkRecordSync(value, transformValue);
}
else if (dataType_1.DataType.isArray(value)) {
value = this.walkArraySync(value, transformValue);
}
else {
value = transformValue(value);
}
newValue.push(value);
}
return newValue;
}
async walkRecord(originalValue, transformValue) {
const newValue = {};
// eslint-disable-next-line prefer-const
for (let [key, value] of Object.entries(originalValue)) {
if (dataType_1.DataType.isObject(value)) {
// Clean in depth before testing for walking.
value = await this.walkRecord(value, transformValue);
}
else if (dataType_1.DataType.isArray(value)) {
value = await this.walkArray(value, transformValue);
}
else {
value = await transformValue(value);
}
newValue[key] = value;
}
return newValue;
}
walkRecordSync(originalValue, transformValue) {
const newValue = {};
// eslint-disable-next-line prefer-const
for (let [key, value] of Object.entries(originalValue)) {
if (dataType_1.DataType.isObject(value)) {
// Clean in depth before testing for walking.
value = this.walkRecordSync(value, transformValue);
}
else if (dataType_1.DataType.isArray(value)) {
value = this.walkArraySync(value, transformValue);
}
else {
value = transformValue(value);
}
newValue[key] = value;
}
return newValue;
}
}
exports.DeepWalk = DeepWalk;
//# sourceMappingURL=deepWalk.js.map