{"ScriptPreparationCode":"// Retrieves values from a data structure according to a given spec which are\r\n// then returned within an object keyed according to strings in the spec.\r\nvar inspect = R.curry((spec, obj) =\u003E {\r\n var props = {}\r\n function inspectProps(spec, obj) {\r\n R.forEachObjIndexed((v, k) =\u003E {\r\n var objValue = obj[k]\r\n if (typeof v === \u0022string\u0022) {\r\n props[v] = objValue\r\n } else if (typeof objValue === \u0022object\u0022) {\r\n inspectProps(v, objValue)\r\n }\r\n }, spec)\r\n }\r\n inspectProps(spec, obj)\r\n return props\r\n})\r\n\r\n// Older \u0060inspect\u0060 as originally proposed in:\r\n// https://github.com/ramda/ramda/issues/2038\r\nvar oldInspect = R.curry(function _inspect(spec, obj) {\r\n var props = {}\r\n function inspectProps(spec, obj) {\r\n R.forEachObjIndexed(function _inspectProp(value, key) {\r\n var objValue = obj[key]\r\n if (typeof value === \u0022string\u0022 \u0026\u0026 typeof objValue !== \u0022undefined\u0022) {\r\n props[value] = objValue\r\n } else if (typeof objValue === \u0022object\u0022) {\r\n inspectProps(value, objValue)\r\n }\r\n }, spec)\r\n }\r\n inspectProps(spec, obj)\r\n return props\r\n})\r\n\r\n// -----------------------------------------------------------------------------\r\n\r\nvar trials = [\r\n {\r\n spec: {\r\n a: [{ b: \u0022one\u0022 }],\r\n c: \u0022two\u0022,\r\n d: { e: \u0022three\u0022 },\r\n f: {\r\n g: \u0022four\u0022,\r\n h: [[{ j: \u0022six\u0022 }, { k: \u0022nine\u0022 }]],\r\n },\r\n },\r\n data: {\r\n a: [{ b: 1 }],\r\n c: 2,\r\n d: { e: 3 },\r\n f: {\r\n g: [4],\r\n h: [\r\n { i: 5 },\r\n [{ j: 6, k: 7 }, { j: 8, k: 9 }],\r\n 10,\r\n ],\r\n },\r\n },\r\n expected: { one: 1, two: 2, three: 3, four: [4] },\r\n },\r\n {\r\n spec: { a: [{ b: \u0022foo\u0022 }] },\r\n data: { a: [{ b: 2 }] },\r\n expected: { foo: 2 },\r\n },\r\n {\r\n spec: { a: \u0022foo\u0022 },\r\n data: { a: 1 },\r\n expected: { foo: 1 },\r\n },\r\n {\r\n spec: { a: \u0022foo\u0022 },\r\n data: { a: 1, b: 2 },\r\n expected: { foo: 1 },\r\n },\r\n {\r\n spec: { a: \u0022foo\u0022, b: \u0022bar\u0022 },\r\n data: { a: 1, b: 2 },\r\n expected: { foo: 1, bar: 2 },\r\n },\r\n {\r\n spec: { a: \u0022foo\u0022, b: { c: \u0022bar\u0022 } },\r\n data: { a: 1, b: { c: 3 } },\r\n expected: { foo: 1, bar: 3 },\r\n },\r\n {\r\n spec: { a: \u0022foo\u0022, b: { c: \u0022bar\u0022 } },\r\n data: { a: 1, b: { c: { d: 5 } } },\r\n expected: { foo: 1, bar: { d: 5 } },\r\n },\r\n {\r\n spec: { a: \u0022foo\u0022, b: { c: { d: \u0022bar\u0022 } } },\r\n data: { a: 1, b: { c: { d: 5 } } },\r\n expected: { foo: 1, bar: 5 },\r\n },\r\n]\r\n","TestCases":[{"Name":"Current \u0060inspect\u0060 implementation","Code":"trials.forEach((v, k) =\u003E {\r\n console.assert(R.equals(inspect(v.spec, v.data), v.expected), \u0022\u0060inspect\u0060 went BOOM! on trial \u0022 \u002B k)\r\n})\r\n","IsDeferred":false},{"Name":"Older \u0060inspect\u0060 implementation","Code":"trials.forEach((v, k) =\u003E {\r\n console.assert(R.equals(oldInspect(v.spec, v.data), v.expected), \u0022\u0060inspect\u0060 went BOOM! on trial \u0022 \u002B k)\r\n})\r\n","IsDeferred":false}]}