Add better tests and change the way data masking works.
parent
c0b3478b00
commit
f12afb753a
|
@ -12,17 +12,15 @@ export function interpolate(node, rootData, options = {}) {
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getMaskedData(node, ancestors) {
|
function getMaskedData(node, ancestors, mask = {}) {
|
||||||
let masked = { ...node.data };
|
var foo = Object.assign(
|
||||||
|
{},
|
||||||
|
...(ancestors.map((ancestor) => (ancestor?.data?.interp || {}))),
|
||||||
|
node?.data?.interp || {},
|
||||||
|
mask
|
||||||
|
);
|
||||||
|
|
||||||
for (let i = ancestors.length - 1; i >= 0; i--) {
|
return foo;
|
||||||
const ancestor = ancestors[i];
|
|
||||||
if (ancestor.data && ancestor.data.interp) {
|
|
||||||
masked.interp = { ...ancestor.data.interp, ...masked.interp };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return masked;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function interpolateNode(node, ancestors) {
|
function interpolateNode(node, ancestors) {
|
||||||
|
@ -33,11 +31,11 @@ function interpolateNode(node, ancestors) {
|
||||||
if (typeof node.properties[key] === 'string') {
|
if (typeof node.properties[key] === 'string') {
|
||||||
node.properties[key] = interpolateString(
|
node.properties[key] = interpolateString(
|
||||||
node.properties[key],
|
node.properties[key],
|
||||||
data.interp
|
data
|
||||||
);
|
);
|
||||||
} else if (Array.isArray(node.properties[key])) {
|
} else if (Array.isArray(node.properties[key])) {
|
||||||
node.properties[key] = node.properties[key].map(
|
node.properties[key] = node.properties[key].map(
|
||||||
(value) => interpolateString(value, data.interp)
|
(value) => interpolateString(value, data)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -47,7 +45,7 @@ function interpolateNode(node, ancestors) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (node.type === 'text' && node.value) {
|
if (node.type === 'text' && node.value) {
|
||||||
node.value = interpolateString(node.value, data.interp);
|
node.value = interpolateString(node.value, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
|
|
|
@ -56,7 +56,7 @@ describe("interpolate()", () => {
|
||||||
const node = { data: { interp: { test: 'value' } } };
|
const node = { data: { interp: { test: 'value' } } };
|
||||||
const ancestors = [{ data: { interp: { parentValue: 'parent' } } }];
|
const ancestors = [{ data: { interp: { parentValue: 'parent' } } }];
|
||||||
const maskedData = __testExports.getMaskedData(node, ancestors);
|
const maskedData = __testExports.getMaskedData(node, ancestors);
|
||||||
expect(maskedData.interp).toEqual({ parentValue: 'parent', test: 'value' });
|
expect(maskedData).toEqual({ parentValue: 'parent', test: 'value' });
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -191,3 +191,68 @@ describe("interpolate()", () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("getMaskedData()", () => {
|
||||||
|
it("should import", () => {
|
||||||
|
expect(__testExports.getMaskedData).toBeDefined();
|
||||||
|
})
|
||||||
|
|
||||||
|
it("should shadow ancestor data with current node data", () => {
|
||||||
|
const maskedData = __testExports.getMaskedData(
|
||||||
|
{
|
||||||
|
data: { interp: { foo: "child" } },
|
||||||
|
},
|
||||||
|
// Give a list of ancestors.
|
||||||
|
[
|
||||||
|
{ data: { interp: { foo: "root" } } },
|
||||||
|
{ data: { interp: { foo: "parent" } } },
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(maskedData).toEqual({foo: "child"})
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should shadow ancestor data with current node data", () => {
|
||||||
|
const maskedData = __testExports.getMaskedData(
|
||||||
|
{
|
||||||
|
data: { interp: { foo: "child" } },
|
||||||
|
},
|
||||||
|
// Give a list of ancestors.
|
||||||
|
[
|
||||||
|
{ data: { interp: { foo: "root" } } },
|
||||||
|
{ data: { interp: { foo: "parent" } } },
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(maskedData).toEqual({foo: "child"})
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should shadow earlier ancestors with later ancestor data", () => {
|
||||||
|
const maskedData = __testExports.getMaskedData(
|
||||||
|
{
|
||||||
|
data: { interp: {} },
|
||||||
|
},
|
||||||
|
// Give a list of ancestors.
|
||||||
|
[
|
||||||
|
{ data: { interp: { foo: "root" } } },
|
||||||
|
{ data: { interp: { foo: "parent" } } },
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(maskedData).toEqual({foo: "parent"})
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should shadow earlier ancestors without current data", () => {
|
||||||
|
const maskedData = __testExports.getMaskedData(
|
||||||
|
{ data: {} },
|
||||||
|
// Give a list of ancestors.
|
||||||
|
[
|
||||||
|
{ data: { interp: { foo: "root" } } },
|
||||||
|
{ data: { interp: { foo: "parent" } } },
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(maskedData).toEqual({foo: "parent"})
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
Loading…
Reference in New Issue