diff --git a/javascript-modules-engine-java/src/main/java/org/jahia/modules/javascript/modules/engine/js/server/RenderHelper.java b/javascript-modules-engine-java/src/main/java/org/jahia/modules/javascript/modules/engine/js/server/RenderHelper.java
index 08da5727..ee49fef9 100644
--- a/javascript-modules-engine-java/src/main/java/org/jahia/modules/javascript/modules/engine/js/server/RenderHelper.java
+++ b/javascript-modules-engine-java/src/main/java/org/jahia/modules/javascript/modules/engine/js/server/RenderHelper.java
@@ -69,12 +69,6 @@ public class RenderHelper {
private JCRTemplate jcrTemplate;
private RenderService renderService;
- public ProxyObject transformToJsNode(JCRNodeWrapper node, boolean includeChildren, boolean includeDescendants,
- boolean includeAllTranslations) throws RepositoryException {
- return recursiveProxyMap(
- JSNodeMapper.toJSNode(node, includeChildren, includeDescendants, includeAllTranslations));
- }
-
/**
* Get the render parameters for the given resource
*
diff --git a/javascript-modules-engine-java/src/main/java/org/jahia/modules/javascript/modules/engine/jsengine/JSNodeMapper.java b/javascript-modules-engine-java/src/main/java/org/jahia/modules/javascript/modules/engine/jsengine/JSNodeMapper.java
index 28a6098e..80bfc783 100644
--- a/javascript-modules-engine-java/src/main/java/org/jahia/modules/javascript/modules/engine/jsengine/JSNodeMapper.java
+++ b/javascript-modules-engine-java/src/main/java/org/jahia/modules/javascript/modules/engine/jsengine/JSNodeMapper.java
@@ -1,156 +1,40 @@
package org.jahia.modules.javascript.modules.engine.jsengine;
-import org.jahia.services.content.JCRNodeIteratorWrapper;
import org.jahia.services.content.JCRNodeWrapper;
-import org.jahia.services.content.JCRPropertyWrapperImpl;
import org.jahia.services.content.JCRSessionWrapper;
-import org.jahia.services.content.nodetypes.ExtendedNodeType;
import org.jahia.services.content.nodetypes.ExtendedPropertyDefinition;
import org.jahia.services.render.RenderContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import pl.touk.throwing.ThrowingFunction;
import javax.jcr.*;
import java.util.*;
import java.util.stream.Collectors;
/**
- * Mapper able to transform a JCR Node into future JS object to be used in HBS templates for example
- * HBS template does not allow to call functions on JS objects, helpers are required for that.
- * In order to simplify the reading of nodes infos (mixins, properties, etc) we transform the JCR Node into a Map, this way
- * it will be easier to read in HBS templates.
+ * Maps JSON structures into virtual JCR nodes. This is used by userland code
+ * through the <Render> component:
+ * <Render content={{ nodeType: "nt:thing", properties: { foo: "bar" } }} />.
*/
public class JSNodeMapper {
- private static final Logger logger = LoggerFactory.getLogger(JSNodeMapper.class);
-
- private static final List IGNORED_I18N_PROPERTIES = Arrays.asList("jcr:lastModifiedBy", "jcr:language",
- "jcr:predecessors", "jcr:baseVersion", "jcr:uuid", "jcr:lastModified", "jcr:isCheckedOut",
- "jcr:primaryType", "jcr:versionHistory");
- private static final List IGNORED_PROPERTIES = Arrays.asList("jcr:predecessors", "jcr:baseVersion", "jcr:versionHistory");
-
- /**
- * Transform a JCR Node into a JS readable data (Map is used on Java side)
- *
- * @param node the node to transform
- * @param includeChildren should we recurse on children ?
- * @param includeDescendants should we recurse on all descendants tree ?
- * @param includeAllTranslations should we generate all i18n properties ?
- * true: will generate all i18n properties (stored under i18nProperties)
- * false: will generate only i18n properties related to current session locale (stored under properties like non-i18n props)
- * @return the JS Node
- * @throws RepositoryException in case something bad happens related to JCR
- */
- public static Map toJSNode(JCRNodeWrapper node, boolean includeChildren, boolean includeDescendants, boolean includeAllTranslations) throws RepositoryException {
- Map jsNode = new HashMap<>();
- jsNode.put("name", node.getName());
- try {
- jsNode.put("parent", node.getParent().getPath());
- } catch (RepositoryException e) {
- // could happen in case parent is not published for example.
- }
-
- jsNode.put("path", node.getPath());
- jsNode.put("uuid", node.getIdentifier());
- jsNode.put("nodeType", node.getPrimaryNodeTypeName());
-
- // handle mixins
- List jsMixins = new ArrayList<>();
- ExtendedNodeType[] mixins = node.getMixinNodeTypes();
- for (int i = 0; i < mixins.length; i++) {
- jsMixins.add(mixins[i].getName());
- }
- jsNode.put("mixins", jsMixins);
-
- // handle properties
- if (includeAllTranslations) {
- jsNode.put("properties", toJSNodeProperties(node, false, IGNORED_PROPERTIES));
-
- Map jsI18nProperties = new HashMap<>();
- NodeIterator i18nNodeIterator = node.getI18Ns();
- while (i18nNodeIterator.hasNext()) {
- Node i18nNode = i18nNodeIterator.nextNode();
- jsI18nProperties.put(i18nNode.getProperty("jcr:language").getString(),
- toJSNodeProperties(i18nNode, false, IGNORED_I18N_PROPERTIES));
- }
- jsNode.put("i18nProperties", jsI18nProperties);
- } else {
- jsNode.put("properties", toJSNodeProperties(node, true, IGNORED_PROPERTIES));
- }
-
- // handle children
- if (includeChildren || includeDescendants) {
- List