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;
|
||||
}
|
||||
|
||||
function getMaskedData(node, ancestors) {
|
||||
let masked = { ...node.data };
|
||||
function getMaskedData(node, ancestors, mask = {}) {
|
||||
var foo = Object.assign(
|
||||
{},
|
||||
...(ancestors.map((ancestor) => (ancestor?.data?.interp || {}))),
|
||||
node?.data?.interp || {},
|
||||
mask
|
||||
);
|
||||
|
||||
for (let i = ancestors.length - 1; i >= 0; i--) {
|
||||
const ancestor = ancestors[i];
|
||||
if (ancestor.data && ancestor.data.interp) {
|
||||
masked.interp = { ...ancestor.data.interp, ...masked.interp };
|
||||
}
|
||||
}
|
||||
|
||||
return masked;
|
||||
return foo;
|
||||
}
|
||||
|
||||
function interpolateNode(node, ancestors) {
|
||||
|
@ -33,11 +31,11 @@ function interpolateNode(node, ancestors) {
|
|||
if (typeof node.properties[key] === 'string') {
|
||||
node.properties[key] = interpolateString(
|
||||
node.properties[key],
|
||||
data.interp
|
||||
data
|
||||
);
|
||||
} else if (Array.isArray(node.properties[key])) {
|
||||
node.properties[key] = node.properties[key].map(
|
||||
(value) => interpolateString(value, data.interp)
|
||||
(value) => interpolateString(value, data)
|
||||
);
|
||||
}
|
||||
else {
|
||||
|
@ -47,7 +45,7 @@ function interpolateNode(node, ancestors) {
|
|||
}
|
||||
|
||||
if (node.type === 'text' && node.value) {
|
||||
node.value = interpolateString(node.value, data.interp);
|
||||
node.value = interpolateString(node.value, data);
|
||||
}
|
||||
|
||||
return node;
|
||||
|
|
|
@ -56,7 +56,7 @@ describe("interpolate()", () => {
|
|||
const node = { data: { interp: { test: 'value' } } };
|
||||
const ancestors = [{ data: { interp: { parentValue: 'parent' } } }];
|
||||
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