From b37922cfb2932f00d1e8b340f4799ff24a2af0f2 Mon Sep 17 00:00:00 2001 From: Bart Bakker Date: Mon, 8 Feb 2021 18:23:43 +0000 Subject: [PATCH] Fix `currentFileInfo` and `index` properties on nodes (#3602) These fields are accessed by other tools such as parcel (for resolving local asset URLs). As per 257efdd6884268af27beaceda467fd3a4aea5e08 the behavior with (at least) parcel for relative paths in sub-directries changed. Prior to that commit (last release 3.12.2) assets were resolved relative to the less module that contains the `url(..)`. From release 3.13.0 parcel resolves assets relative to the root less module, because no `currentFileInfo` is available. This is caused by tree nodes setting their prototype to an instance of `Node`. This leaves the `self` reference in `Node`s constructor pointing to the prototype, not the actual instance the data is set on. Replacing this with properties defined on `Node`s prototype fixes this. --- packages/less/src/less/tree/node.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/less/src/less/tree/node.js b/packages/less/src/less/tree/node.js index dcfd17bf3..b40e30da9 100644 --- a/packages/less/src/less/tree/node.js +++ b/packages/less/src/less/tree/node.js @@ -11,15 +11,14 @@ class Node { this.nodeVisible = undefined; this.rootNode = null; this.parsed = null; + } - const self = this; - Object.defineProperty(this, 'currentFileInfo', { - get: function() { return self.fileInfo(); } - }); - Object.defineProperty(this, 'index', { - get: function() { return self.getIndex(); } - }); + get currentFileInfo() { + return this.fileInfo(); + } + get index() { + return this.getIndex(); } setParent(nodes, parent) {