"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.transformThis2Context = void 0;
const tslib_1 = require("tslib");
const generator_1 = tslib_1.__importDefault(require("@babel/generator"));
const lowcode_code_generator_1 = tslib_1.__importDefault(require("@alilc/lowcode-code-generator"));
const { parseExpressionConvertThis2Context } = lowcode_code_generator_1.default.utils.expressionParser;
/**
 * 将所有的 this.xxx 替换为 __$$context.xxx
 * @param expr
 */
function transformThis2Context(expr, scope, { ignoreRootScope = false } = {}) {
    var _a;
    if (ignoreRootScope && scope.parent == null) {
        return typeof expr === 'string' ? expr : (0, generator_1.default)(expr).code;
    }
    // 下面这种字符串替换的方式虽然简单直接，但是对于复杂场景会误匹配，故后期改成了解析 AST 然后修改 AST 最后再重新生成代码的方式
    // return expr
    //   .replace(/\bthis\.item\./g, () => 'item.')
    //   .replace(/\bthis\.index\./g, () => 'index.')
    //   .replace(/\bthis\./g, () => '__$$context.');
    return parseExpressionConvertThis2Context(expr, '__$$context', ((_a = scope.bindings) === null || _a === void 0 ? void 0 : _a.getAllBindings()) || []);
}
exports.transformThis2Context = transformThis2Context;
//# sourceMappingURL=transformThis2Context.js.map