{"version":3,"file":"node.mjs","sources":["../../../../../../src/components/ivue-tree/store/node.ts"],"sourcesContent":["import { reactive } from 'vue';\r\nimport { hasOwn } from '@vue/shared';\r\nimport { markNodeData } from '../utils';\r\nimport { throwError } from '../../../utils/error';\r\n\r\n// type\r\nimport type { TreeNodeData, TreeNodeOptions } from '../types/tree';\r\nimport type TreeStore from './tree-store';\r\nimport type { TreeKey, FakeNode } from '../types/tree';\r\nimport type {\r\n  TreeNodeChildState,\r\n  TreeNodeLoadedDefaultProps,\r\n} from '../types/node';\r\nimport { NODE_KEY } from '../utils';\r\n\r\n// 节点id\r\nlet nodeIdSeed = 0;\r\n\r\n/**\r\n * 获取 data tree数据 中的属性\r\n * label 指定节点标签为节点对象的某个属性值\r\n * @type {string, function(data, node)}\r\n *\r\n * children\t指定子树为节点对象的某个属性值\r\n * @type {string}\r\n *\r\n * disabled 指定节点选择框是否禁用为节点对象的某个属性值\r\n * @type {string, function(data, node)}\r\n *\r\n * isLeaf 指定节点是否为叶子节点，仅在指定了 lazy 属性的情况下生效\r\n * @type {string, function(data, node)}\r\n *\r\n * class 自定义节点类名\r\n *\r\n * @type {string, function(data, node)}\r\n */\r\nconst getPropsFromData = (node: Node, prop: string): any => {\r\n  const props = node.store.props;\r\n  const data = node.data || {};\r\n\r\n  // 获取 tree 配置选项的属性\r\n  const config = props[prop];\r\n\r\n  // function\r\n  if (typeof config === 'function') {\r\n    return config(data, node);\r\n  }\r\n  // string\r\n  else if (typeof config === 'string') {\r\n    return data[config];\r\n  }\r\n  // undefined\r\n  else if (typeof config === 'undefined') {\r\n    const dataProp = data[prop];\r\n\r\n    return dataProp === undefined ? '' : dataProp;\r\n  }\r\n};\r\n\r\n// 获取子节点状态\r\nconst getChildState = (node: Node[]): TreeNodeChildState => {\r\n  let all = true;\r\n  let none = true;\r\n  let allWithoutDisable = true;\r\n\r\n  for (let i = 0; i < node.length; i++) {\r\n    const nodeData = node[i];\r\n\r\n    // 没有选中 || 是不确定状态\r\n    if (nodeData.checked !== true || nodeData.indeterminate) {\r\n      all = false;\r\n\r\n      // 没有禁用\r\n      if (!nodeData.disabled) {\r\n        allWithoutDisable = false;\r\n      }\r\n    }\r\n\r\n    // 选中 || 是不确定状态\r\n    if (nodeData.checked !== false || nodeData.indeterminate) {\r\n      none = false;\r\n    }\r\n  }\r\n\r\n  return {\r\n    all,\r\n    none,\r\n    allWithoutDisable,\r\n    half: !all && !none,\r\n  };\r\n};\r\n\r\n// 重新初始化多选\r\nconst reInitChecked = (node: Node): void => {\r\n  // 没有子节点 || 加载中\r\n  if (node.childNodes.length === 0 || node.loading) {\r\n    return;\r\n  }\r\n\r\n  // 获取子节点状态\r\n  const { all, none, half } = getChildState(node.childNodes);\r\n\r\n  // 选中所有多选\r\n  if (all) {\r\n    node.checked = true;\r\n    node.indeterminate = false;\r\n  }\r\n  // 多选不确定的状态\r\n  else if (half) {\r\n    node.checked = false;\r\n    node.indeterminate = true;\r\n  }\r\n  // 没有选择\r\n  else if (none) {\r\n    node.checked = false;\r\n    node.indeterminate = false;\r\n  }\r\n\r\n  const parent = node.parent;\r\n\r\n  // 层级只有一个\r\n  if (!parent || parent.level === 0) {\r\n    return;\r\n  }\r\n\r\n  // 继续递归\r\n  if (!node.store.checkBoxStrictly) {\r\n    reInitChecked(parent);\r\n  }\r\n};\r\n\r\n// tree 节点对象\r\nclass Node {\r\n  // tree 节点数据对象\r\n  data: TreeNodeData;\r\n  // tree 存储数据对象\r\n  store: TreeStore;\r\n  // 当前节点id\r\n  id: number;\r\n  // 子节点数组\r\n  childNodes: Node[];\r\n  // 当前节点层级\r\n  level: number;\r\n  // 父节点\r\n  parent: Node;\r\n  // 是否显示节点\r\n  visible: boolean;\r\n  // 节点是否展开\r\n  expanded: boolean;\r\n  // 是否是当前点击的节点\r\n  isCurrent: boolean;\r\n  // 节点是否可以获取焦点\r\n  canFocus: boolean;\r\n  // 是否是叶子节点\r\n  isLeaf: boolean;\r\n  // 是否是叶子节点\r\n  isLeafByUser: boolean;\r\n  // 是否加载完成\r\n  loaded: boolean;\r\n  // 加载中\r\n  loading: boolean;\r\n  // 是否选中\r\n  checked: boolean;\r\n  // 多选不确定状态\r\n  indeterminate: boolean;\r\n\r\n  constructor(options: TreeNodeOptions) {\r\n    // tree 节点数据对象\r\n    this.data = null;\r\n    // 当前节点id\r\n    this.id = nodeIdSeed++;\r\n    // 是否显示节点\r\n    this.visible = true;\r\n    // 父节点\r\n    this.parent = null;\r\n    // 节点是否展开\r\n    this.expanded = false;\r\n    // 是否是当前点击的节点\r\n    this.isCurrent = false;\r\n    // 节点是否可以获取焦点\r\n    this.canFocus = false;\r\n    // 是否选中\r\n    this.checked = false;\r\n    // 多选不确定状态\r\n    this.indeterminate = false;\r\n\r\n    // 将外部值赋值给属性\r\n    for (const name in options) {\r\n      // 检测是否属性是否拥有\r\n      if (hasOwn(options, name)) {\r\n        // 赋值给当前 class 属性\r\n        this[name] = options[name];\r\n      }\r\n    }\r\n\r\n    // 子节点\r\n    this.childNodes = [];\r\n    // 当前节点层级\r\n    this.level = 0;\r\n    // 是否加载完成\r\n    this.loaded = false;\r\n    // 加载中\r\n    this.loading = false;\r\n\r\n    // 有父节点\r\n    if (this.parent) {\r\n      this.level = this.parent.level + 1;\r\n    }\r\n  }\r\n\r\n  // 获取key\r\n  get key(): TreeKey {\r\n    // tree 存储数据对象的 key 属性\r\n    const nodeKey = this.store.key;\r\n\r\n    // 有数据\r\n    if (this.data) {\r\n      // 获取 data 中对应 key 属性的值\r\n      return this.data[nodeKey];\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  // 标题\r\n  get label(): string {\r\n    return getPropsFromData(this, 'label');\r\n  }\r\n\r\n  // 是否禁用\r\n  get disabled(): boolean {\r\n    return getPropsFromData(this, 'disabled');\r\n  }\r\n\r\n  // 下一个兄弟节点\r\n  get nextSibling(): Node | null {\r\n    const parent = this.parent;\r\n\r\n    // 有父节点\r\n    if (parent) {\r\n      // 子节点是否有当前节点\r\n      const index = parent.childNodes.indexOf(this);\r\n\r\n      if (index) {\r\n        return parent.childNodes[index + 1];\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  // 上一个兄弟节点\r\n  get prevSibling(): Node | null {\r\n    const parent = this.parent;\r\n\r\n    if (parent) {\r\n      const index = parent.childNodes.indexOf(this);\r\n\r\n      if (index > -1) {\r\n        return index > 0 ? parent.childNodes[index - 1] : null;\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  // 初始化数据\r\n  initialize() {\r\n    const store = this.store;\r\n\r\n    // 没有 tree 存储数据对象\r\n    if (!store) {\r\n      throwError('ivue-tree', '[Node]store is required!');\r\n    }\r\n\r\n    // 注册节点\r\n    store.registerNode(this);\r\n\r\n    // 是否是叶子节点\r\n    const props = store.props;\r\n    if (props && typeof props.isLeaf !== 'undefined') {\r\n      // 指定节点是否为叶子节点\r\n      const isLeaf = getPropsFromData(this, 'isLeaf');\r\n\r\n      // boolean\r\n      if (typeof isLeaf === 'boolean') {\r\n        this.isLeafByUser = isLeaf;\r\n      }\r\n    }\r\n\r\n    // 不是懒加载子节点 && 有数据\r\n    if (store.lazy !== true && this.data) {\r\n      this.setData(this.data);\r\n\r\n      // 展开全部子节点\r\n      if (store.defaultExpandAll) {\r\n        this.expanded = true;\r\n        this.canFocus = true;\r\n      }\r\n    }\r\n    // 是懒加载子节点 && 展开全部子节点\r\n    else if (this.level > 0 && store.lazy && store.defaultExpandAll) {\r\n      this.expand();\r\n    }\r\n\r\n    // data 不是数组\r\n    if (!Array.isArray(this.data)) {\r\n      markNodeData(this, this.data);\r\n    }\r\n\r\n    // 没有数据\r\n    if (!this.data) {\r\n      return;\r\n    }\r\n\r\n    // 默认展开的节点的 keys 数组\r\n    const defaultExpandedKeys = store.defaultExpandedKeys;\r\n    // 每个树节点用来作为唯一标识的属性，整棵树应该是唯一的\r\n    const key = store.key;\r\n\r\n    // 展开对应的节点\r\n    if (key && defaultExpandedKeys && defaultExpandedKeys.includes(this.key)) {\r\n      this.expand(null, store.autoExpandParent);\r\n    }\r\n\r\n    // 设置当前节点\r\n    if (\r\n      key &&\r\n      store.currentNodeKey !== undefined &&\r\n      // 获取key === 当前点击节点的key\r\n      this.key === store.currentNodeKey\r\n    ) {\r\n      store.currentNode = this;\r\n      store.currentNode.isCurrent = true;\r\n    }\r\n\r\n    // 有懒加载 初始化默认勾选节点\r\n    if (store.lazy) {\r\n      store.initDefaultCheckedNode(this);\r\n    }\r\n\r\n    // 更新叶子节点状态\r\n    this.updateLeafState();\r\n\r\n    // 有父节点 && 有节点层级 || 展开节点 设置可以获取焦点\r\n    if (this.parent && (this.level === 1 || this.parent.expanded === true)) {\r\n      this.canFocus = true;\r\n    }\r\n  }\r\n\r\n  // 设置数据\r\n  setData(data: TreeNodeData): void {\r\n    // 不是数组\r\n    if (!Array.isArray(data)) {\r\n      markNodeData(this, data);\r\n    }\r\n\r\n    // tree 节点数据对象\r\n    this.data = data;\r\n    // 子节点\r\n    this.childNodes = [];\r\n\r\n    let children;\r\n\r\n    // 当前节点层级为父级\r\n    if (this.level === 0 && Array.isArray(this.data)) {\r\n      children = this.data;\r\n    } else {\r\n      children = getPropsFromData(this, 'children') || [];\r\n    }\r\n\r\n    // 循环 tree 配置选项 的 children属性\r\n    for (let i = 0; i < children.length; i++) {\r\n      this.insertChild({ data: children[i] });\r\n    }\r\n  }\r\n\r\n  // 插入 children 数据\r\n  insertChild(child?: FakeNode | Node, index?: number, batch?: boolean): void {\r\n    // 没有数据\r\n    if (!child) {\r\n      throwError('ivue-tree', 'insertChild error: child is required');\r\n    }\r\n\r\n    // 不是 tree 节点对象\r\n    if (!(child instanceof Node)) {\r\n      // 是否是批量插入 children\r\n      if (!batch) {\r\n        const children = this.getChildren(true);\r\n\r\n        // 判断一个数组是否包含一个指定的值\r\n        if (!children.includes(child.data)) {\r\n          // 没有index\r\n          if (typeof index === 'undefined' || index < 0) {\r\n            children.push(child.data);\r\n          }\r\n          // 在数组中添加新数据\r\n          else {\r\n            children.splice(index, 0, child.data);\r\n          }\r\n        }\r\n      }\r\n\r\n      // 插入对象\r\n      Object.assign(child, {\r\n        // 父节点\r\n        parent: this,\r\n        // tree 存储数据对象\r\n        store: this.store,\r\n      });\r\n\r\n      // child 设置为 reactive 深度监听数据\r\n      child = reactive(new Node(child as TreeNodeOptions));\r\n\r\n      if (child instanceof Node) {\r\n        child.initialize();\r\n      }\r\n    }\r\n\r\n    // 增加当前节点层级\r\n    (child as Node).level = this.level + 1;\r\n\r\n    // 没有下标\r\n    if (typeof index === 'undefined' || index < 0) {\r\n      // 子节点\r\n      this.childNodes.push(child as Node);\r\n    }\r\n    // 插入子节点\r\n    else {\r\n      this.childNodes.splice(index, 0, child as Node);\r\n    }\r\n  }\r\n\r\n  // 获取 children 属性 子树为节点对象的某个属性值\r\n  getChildren(init = false): TreeNodeData | TreeNodeData[] {\r\n    // 当前 children 为父级\r\n    if (this.level === 0) {\r\n      return this.data;\r\n    }\r\n\r\n    // 没有 tree 节点数据对象\r\n    const data = this.data;\r\n    if (!data) {\r\n      return null;\r\n    }\r\n\r\n    // tree 配置选项\r\n    const props = this.store.props;\r\n\r\n    let children = 'children';\r\n\r\n    // 有配置选项\r\n    if (props) {\r\n      // 设置是使用用户自定义的 children 属性 还是默认 children\r\n      children = props.children || 'children';\r\n    }\r\n\r\n    // 没有 children 属性\r\n    if (data[children] === undefined) {\r\n      data[children] = null;\r\n    }\r\n\r\n    // 没有数据初始化 children 属性\r\n    if (init && !data[children]) {\r\n      data[children] = [];\r\n    }\r\n\r\n    return data[children];\r\n  }\r\n\r\n  // 收起节点\r\n  collapse(): void {\r\n    this.expanded = false;\r\n\r\n    // 设置焦点为不可获取\r\n    this.childNodes.forEach((item) => {\r\n      item.canFocus = false;\r\n    });\r\n  }\r\n\r\n  // 展开节点\r\n  expand(callback?: () => void, expandParent?: boolean): void {\r\n    const done = (): void => {\r\n      // 展开父级\r\n      if (expandParent) {\r\n        let parent = this.parent;\r\n\r\n        // 设置对应的父级属性\r\n        while (parent.level > 0) {\r\n          parent.expanded = true;\r\n\r\n          // 指向上一级的父节点\r\n          parent = parent.parent;\r\n        }\r\n      }\r\n\r\n      // 展开节点\r\n      this.expanded = true;\r\n\r\n      // 有回调函数\r\n      if (callback) {\r\n        callback();\r\n      }\r\n\r\n      // 子节点数组全部都可以获取焦点\r\n      this.childNodes.forEach((item) => {\r\n        item.canFocus = true;\r\n      });\r\n    };\r\n\r\n    if (this.shouldLoadData()) {\r\n      this.loadData((data) => {\r\n        if (Array.isArray(data)) {\r\n          // 多选选中\r\n          if (this.checked) {\r\n            this.setChecked(true, true);\r\n          }\r\n          // 在显示复选框的情况下，是否严格的遵循父子不互相关联的做法\r\n          else if (!this.store.checkBoxStrictly) {\r\n            reInitChecked(this);\r\n          }\r\n\r\n          // 展开节点\r\n          done();\r\n        }\r\n      });\r\n    }\r\n\r\n    // 展开节点\r\n    done();\r\n  }\r\n\r\n  // 更新叶子节点状态\r\n  updateLeafState(): void {\r\n    if (\r\n      // 是懒加载节点\r\n      this.store.lazy === true &&\r\n      // 没有加载完成\r\n      this.loaded !== true &&\r\n      // 是否是叶子节点\r\n      typeof this.isLeafByUser !== 'undefined'\r\n    ) {\r\n      // 叶子节点\r\n      this.isLeaf = this.isLeafByUser;\r\n\r\n      return;\r\n    }\r\n\r\n    const childNodes = this.childNodes;\r\n\r\n    if (\r\n      !this.store.lazy ||\r\n      (this.store.lazy === true && this.loaded === true)\r\n    ) {\r\n      // 是叶子节点\r\n      this.isLeaf = !childNodes || childNodes.length === 0;\r\n\r\n      return;\r\n    }\r\n\r\n    // 不是叶子节点\r\n    this.isLeaf = false;\r\n  }\r\n\r\n  // 设置多选\r\n  setChecked(\r\n    value?: boolean | string,\r\n    deep?: boolean,\r\n    recursion?: boolean,\r\n    passValue?: boolean\r\n  ) {\r\n    this.indeterminate = value === 'half';\r\n    // 设置选中\r\n    this.checked = value === true;\r\n\r\n    // 在显示复选框的情况下，是否严格的遵循父子不互相关联的做法\r\n    if (this.store.checkBoxStrictly) {\r\n      return;\r\n    }\r\n\r\n    // 没有加载数据\r\n    if (!this.shouldLoadData()) {\r\n      // 获取子节点状态\r\n      const { all, allWithoutDisable } = getChildState(this.childNodes);\r\n\r\n      // 不是叶子节点 && 没有选中全部 && 全部禁用\r\n      if (!this.isLeaf && !all && allWithoutDisable) {\r\n        this.checked = false;\r\n        value = false;\r\n      }\r\n\r\n      // 深度遍历处理所有子节点\r\n      const handDeepChildNodes = (): void => {\r\n        // 深度遍历\r\n        if (deep) {\r\n          const childNodes = this.childNodes;\r\n          for (let i = 0; i < childNodes.length; i++) {\r\n            const child = childNodes[i];\r\n\r\n            // 是否有外部传入值\r\n            passValue = passValue || value !== false;\r\n\r\n            // 设置选中\r\n            const isCheck = child.disabled ? child.checked : passValue;\r\n\r\n            // 设置子节点选中状态\r\n            child.setChecked(isCheck, deep, true, passValue);\r\n          }\r\n\r\n          const { half, all } = getChildState(childNodes);\r\n\r\n          // 没有选中全部\r\n          if (!all) {\r\n            this.checked = all;\r\n            this.indeterminate = half;\r\n          }\r\n        }\r\n      };\r\n\r\n      // 深度遍历处理所有子节点\r\n      handDeepChildNodes();\r\n    }\r\n\r\n    const parent = this.parent;\r\n    if (!parent || parent.level === 0) return;\r\n\r\n    // 递归\r\n    if (!recursion) {\r\n      reInitChecked(parent);\r\n    }\r\n  }\r\n\r\n  // 显示加载数据\r\n  shouldLoadData(): boolean {\r\n    return this.store.lazy === true && this.store.load && !this.loaded;\r\n  }\r\n\r\n  // 创建子节点\r\n  createChildren(\r\n    array: TreeNodeData[],\r\n    defaultProps: TreeNodeLoadedDefaultProps = {}\r\n  ): void {\r\n    // 插入 children 数据\r\n    array.forEach((item) => {\r\n      this.insertChild(\r\n        Object.assign({ data: item }, defaultProps),\r\n        undefined,\r\n        true\r\n      );\r\n    });\r\n  }\r\n\r\n  // 加载数据\r\n  loadData(\r\n    callback: (node: Node) => void,\r\n    defaultProps: TreeNodeLoadedDefaultProps = {}\r\n  ) {\r\n    if (\r\n      // 是懒加载节点\r\n      this.store.lazy === true &&\r\n      // 有加载方法\r\n      this.store.load &&\r\n      // 没有加载完成\r\n      !this.loaded &&\r\n      // 没有加载中\r\n      (!this.loading || Object.keys(defaultProps).length)\r\n    ) {\r\n      // 加载中\r\n      this.loading = true;\r\n\r\n      // 数据加载完成的回调\r\n      const resolve = (children: TreeNodeData[]) => {\r\n        this.childNodes = [];\r\n\r\n        // 创建子节点\r\n        this.createChildren(children, defaultProps);\r\n\r\n        // 加载完成\r\n        this.loaded = true;\r\n        this.loading = false;\r\n\r\n        // 更新叶子节点状态\r\n        this.updateLeafState();\r\n\r\n        // callback\r\n        if (callback) {\r\n          callback.call(this, children);\r\n        }\r\n      };\r\n\r\n      this.store.load(this, resolve);\r\n    }\r\n    // 普通回调\r\n    else {\r\n      if (callback) {\r\n        callback.call(this);\r\n      }\r\n    }\r\n  }\r\n\r\n  // 删除子节点\r\n  removeChild(child: Node): void {\r\n    // 获取 children 属性 子树为节点对象的某个属性值\r\n    const children = this.getChildren() || [];\r\n\r\n    // 是否有匹配的数据\r\n    const dataIndex = children.indexOf(child.data);\r\n\r\n    // 删除子节点\r\n    if (dataIndex > -1) {\r\n      children.splice(dataIndex, 1);\r\n    }\r\n\r\n    const index = this.childNodes.indexOf(child);\r\n\r\n    if (index > -1) {\r\n      // 注销节点\r\n      this.store && this.store.deregisterNode(child);\r\n\r\n      // 清除子节点父级\r\n      child.parent = null;\r\n\r\n      // 删除对应的节点\r\n      this.childNodes.splice(index, 1);\r\n    }\r\n\r\n    // 更新叶子节点状态\r\n    this.updateLeafState();\r\n  }\r\n\r\n  // 更新子节点\r\n  updateChildren(): void {\r\n    // 新传入的数据\r\n    const newData = (this.getChildren() || []) as TreeNodeData[];\r\n    // 旧的数据\r\n    const oldData = this.childNodes.map((node) => node.data);\r\n\r\n    const newDataMap = {};\r\n    const newNodes = [];\r\n\r\n    newData.forEach((item, index) => {\r\n      // 获取数据的key\r\n      const key = item[NODE_KEY];\r\n\r\n      // 节点是否存在\r\n      const isNodeExists =\r\n        !!key && oldData.findIndex((data) => data[NODE_KEY] === key) >= 0;\r\n      // 更新新数据\r\n      if (isNodeExists) {\r\n        newDataMap[key] = { index, data: item };\r\n      }\r\n      // 插入新数据\r\n      else {\r\n        newNodes.push({ index, data: item });\r\n      }\r\n    });\r\n\r\n    // 不是懒加载子节点\r\n    if (!this.store.lazy) {\r\n      // 删除旧数据的节点\r\n      oldData.forEach((item) => {\r\n        if (!newDataMap[item[NODE_KEY]]) {\r\n          this.removeChildByData(item);\r\n        }\r\n      });\r\n    }\r\n\r\n    // 使用新的节点数据插入 children 数据\r\n    newNodes.forEach(({ index, data }) => {\r\n      this.insertChild({ data }, index);\r\n    });\r\n\r\n    // 更新叶子节点状态\r\n    this.updateLeafState();\r\n  }\r\n\r\n  // 是否包含传入的节点\r\n  contains(target: Node, deep = true): boolean {\r\n    return (this.childNodes || []).some(\r\n      (child) => child === target || (deep && child.contains(target))\r\n    );\r\n  }\r\n\r\n  // 删除节点\r\n  remove(): void {\r\n    const parent = this.parent;\r\n\r\n    if (parent) {\r\n      parent.removeChild(this);\r\n    }\r\n  }\r\n\r\n  // 插入到节点前面\r\n  insertBefore(child: FakeNode | Node, ref: Node): void {\r\n    let index: number;\r\n\r\n    if (ref) {\r\n      index = this.childNodes.indexOf(ref);\r\n    }\r\n\r\n    // 插入 children 数据\r\n    this.insertChild(child, index);\r\n  }\r\n\r\n  // 插入到节点后面\r\n  insertAfter(child: FakeNode | Node, ref: Node): void {\r\n    let index: number;\r\n\r\n    if (ref) {\r\n      index = this.childNodes.indexOf(ref);\r\n\r\n      if (index !== -1) {\r\n        index += 1;\r\n      }\r\n    }\r\n\r\n    // 插入 children 数据\r\n    this.insertChild(child, index);\r\n  }\r\n\r\n  // 删除节点的数据\r\n  removeChildByData(data: TreeNodeData): void {\r\n    let targetNode: Node = null;\r\n\r\n    this.childNodes.forEach((item) => {\r\n      if (item.data === data) {\r\n        targetNode = item;\r\n      }\r\n    });\r\n\r\n    // 删除子节点\r\n    if (targetNode) {\r\n      this.removeChild(targetNode);\r\n    }\r\n  }\r\n}\r\n\r\nexport default Node;\r\n"],"names":["all"],"mappings":"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"}