"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ReplaceAction = void 0;
const action_1 = require("../action");
/**
* ReplaceAction to replace child node with code.
* @extends BaseAction
*/
class ReplaceAction extends action_1.BaseAction {
/**
* Create a ReplaceAction
* @param {T} node
* @param {string|string[]} selectors - name of child nodes
* @param {ReplaceOptions} options
* @param options.adapter - adapter to parse the node
*/
constructor(node, selectors, options) {
super(node, options.with, { adapter: options.adapter });
this.selectors = Array.isArray(selectors) ? selectors : Array(selectors);
this.type = "replace";
}
/**
* Calculate the begin and end positions.
* @protected
*/
calculatePositions() {
this.start = Math.min(...this.selectors.map((selector) => this.adapter.childNodeRange(this.node, selector).start));
this.end = Math.max(...this.selectors.map((selector) => this.adapter.childNodeRange(this.node, selector).end));
}
/**
* The rewritten source code.
* @returns {string} rewritten code.
*/
get newCode() {
return this.rewrittenSource();
}
}
exports.ReplaceAction = ReplaceAction;