json-tots
Version:
Template of Templates, a.k.a Template Should Eat Itself
37 lines (36 loc) • 1.69 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
/* eslint-disable camelcase */
var jp = require('jsonpath');
var runPolicy = function runPolicy(keyPolicy, template, document) {
var upwards = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 2;
return function (_ref) {
var _context;
var path = _ref.path,
tag = _ref.tag,
source = _ref.source,
templatePath = _ref.templatePath,
tagPath = _ref.tagPath;
var parentNodePath = jp.paths(template, path).pop();
var _parentNodePath$slice = (0, _slice["default"])(parentNodePath).call(parentNodePath, -upwards),
_parentNodePath$slice2 = (0, _slicedToArray2["default"])(_parentNodePath$slice, 2),
parent = _parentNodePath$slice2[0],
child = _parentNodePath$slice2[1];
var newPath = keyPolicy(parent, child, tagPath, document);
// transplant under new path
templatePath = jp.stringify((0, _concat["default"])(_context = (0, _slice["default"])(parentNodePath).call(parentNodePath, 0, -upwards)).call(_context, [newPath]));
jp.value(template, templatePath, jp.value(template, path));
// unset original path
jp.value(template, path, undefined);
return {
template: template,
templatePath: templatePath
};
};
};
module.exports = {
runPolicy: runPolicy
};