{"version":3,"file":"array.mjs","sources":["../../../../packages/util/array/array.service.ts","../../../../packages/util/array/array.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\nimport { YunzaiConfigService, YunzaiUtilArrayConfig } from '@yelon/util/config';\n\nimport { NzTreeNode } from 'ng-zorro-antd/core/tree';\n\nimport {\n  ArrayServiceArrToTreeNodeOptions,\n  ArrayServiceArrToTreeOptions,\n  ArrayServiceGetKeysByTreeNodeOptions,\n  ArrayServiceGroupByResult,\n  ArrayServiceTreeToArrOptions\n} from './array-type.service';\n\n@Injectable({ providedIn: 'root' })\nexport class ArrayService {\n  private c: YunzaiUtilArrayConfig;\n\n  constructor(cog: YunzaiConfigService) {\n    this.c = cog.merge('utilArray', {\n      deepMapName: 'deep',\n      parentMapName: 'parent',\n      idMapName: 'id',\n      parentIdMapName: 'parent_id',\n      childrenMapName: 'children',\n      titleMapName: 'title',\n      checkedMapname: 'checked',\n      selectedMapname: 'selected',\n      expandedMapname: 'expanded',\n      disabledMapname: 'disabled'\n    })!;\n  }\n\n  /**\n   * Convert tree structure to array structure\n   *\n   * 将树结构转换成数组结构\n   */\n  treeToArr<T extends object = any>(tree: readonly T[], options?: ArrayServiceTreeToArrOptions<T>): T[] {\n    const opt = {\n      deepMapName: this.c.deepMapName,\n      parentMapName: this.c.parentMapName,\n      childrenMapName: this.c.childrenMapName,\n      clearChildren: true,\n      cb: null,\n      ...options\n    } as ArrayServiceTreeToArrOptions;\n    const result: Array<Record<string, any>> = [];\n    const inFn = (list: ReadonlyArray<Record<string, any>>, parent: T | null, deep: number = 0): void => {\n      for (const i of list) {\n        i[opt.deepMapName!] = deep;\n        i[opt.parentMapName!] = parent;\n        if (opt.cb) {\n          opt.cb(i, parent, deep);\n        }\n        result.push(i);\n        const children = i[opt.childrenMapName!];\n        if (children != null && Array.isArray(children) && children.length > 0) {\n          inFn(children, i as T, deep + 1);\n        }\n        if (opt.clearChildren) {\n          delete i[opt.childrenMapName!];\n        }\n      }\n    };\n    inFn(tree, null);\n    return result as T[];\n  }\n\n  /**\n   * Convert array structure to tree structure\n   *\n   * 数组转换成树数据\n   */\n  arrToTree<T extends object = any>(arr: readonly T[], options?: ArrayServiceArrToTreeOptions<T>): T[] {\n    if (!Array.isArray(arr) || arr.length === 0) {\n      return [];\n    }\n\n    const opt = {\n      idMapName: this.c.idMapName,\n      parentIdMapName: this.c.parentIdMapName,\n      childrenMapName: this.c.childrenMapName,\n      cb: null,\n      ...options\n    } as ArrayServiceArrToTreeOptions<T>;\n    const tree: T[] = [];\n    const childrenOf: Record<string, T[]> = {};\n    let rootPid = opt.rootParentIdValue;\n    const arrType = arr as ReadonlyArray<Record<string, any>>;\n    if (!rootPid) {\n      const pids = arrType.map(i => i[opt.parentIdMapName!]);\n      const emptyPid = pids.findIndex(w => w == null);\n      rootPid = emptyPid !== -1 ? pids[emptyPid] : pids.sort()[0];\n    }\n    for (const item of arrType) {\n      const id = item[opt.idMapName!];\n      const pid = item[opt.parentIdMapName!];\n      childrenOf[id] = childrenOf[id] || [];\n      item[opt.childrenMapName!] = childrenOf[id];\n      if (opt.cb) {\n        opt.cb(item as T);\n      }\n      if (pid !== rootPid) {\n        childrenOf[pid] = childrenOf[pid] || [];\n        childrenOf[pid].push(item as T);\n      } else {\n        tree.push(item as T);\n      }\n    }\n    return tree;\n  }\n\n  /**\n   * 数组转换成 `nz-tree` 数据源，通过 `options` 转化项名，也可以使用 `options.cb` 更高级决定数据项\n   */\n  arrToTreeNode<T extends object = any>(arr: readonly T[], options?: ArrayServiceArrToTreeNodeOptions): NzTreeNode[] {\n    const opt = {\n      idMapName: this.c.idMapName,\n      parentIdMapName: this.c.parentIdMapName,\n      titleMapName: this.c.titleMapName,\n      isLeafMapName: 'isLeaf',\n      checkedMapname: this.c.checkedMapname,\n      selectedMapname: this.c.selectedMapname,\n      expandedMapname: this.c.expandedMapname,\n      disabledMapname: this.c.disabledMapname,\n      cb: null,\n      ...options\n    } as ArrayServiceArrToTreeNodeOptions<T>;\n    const tree = this.arrToTree<T>(arr, {\n      idMapName: opt.idMapName,\n      parentIdMapName: opt.parentIdMapName,\n      childrenMapName: 'children'\n    });\n    this.visitTree<T>(tree, (item: Record<string, any>, parent, deep) => {\n      item.key = item[opt.idMapName!];\n      item.title = item[opt.titleMapName!];\n      item.checked = item[opt.checkedMapname!];\n      item.selected = item[opt.selectedMapname!];\n      item.expanded = item[opt.expandedMapname!];\n      item.disabled = item[opt.disabledMapname!];\n      if (item[opt.isLeafMapName!] == null) {\n        item.isLeaf = item.children.length === 0;\n      } else {\n        item.isLeaf = item[opt.isLeafMapName!];\n      }\n      if (opt.cb) {\n        opt.cb(item as any, parent, deep);\n      }\n    });\n    return tree.map(node => new NzTreeNode(node as any));\n  }\n\n  /**\n   * 递归访问整个树\n   */\n  visitTree<T extends object = any>(\n    tree: readonly T[],\n    cb: (item: T, parent: T | null, deep: number) => void,\n    options?: {\n      /** 子项名，默认：`'children'` */\n      childrenMapName?: string;\n    }\n  ): void {\n    options = {\n      childrenMapName: this.c.childrenMapName,\n      ...options\n    };\n    const inFn = (data: readonly T[], parent: T | null, deep: number): void => {\n      for (const item of data) {\n        cb(item, parent, deep);\n        const childrenVal = (item as Record<string, any>)[options!.childrenMapName!];\n        if (Array.isArray(childrenVal) && childrenVal.length > 0) {\n          inFn(childrenVal, item, deep + 1);\n        }\n      }\n    };\n    inFn(tree, null, 1);\n  }\n\n  /**\n   * Return the value of the first tree value in the tree where predicate is true, and `undefined` otherwise\n   *\n   * 根据条件返回树的第一个值，否则返回 `undefined`\n   */\n  findTree<T extends object = any>(\n    tree: readonly T[],\n    predicate: (item: T) => boolean,\n    options?: {\n      /** 子项名，默认：`'children'` */\n      childrenMapName?: string;\n    }\n  ): T | undefined {\n    let res: T | undefined;\n    this.visitTree<T>(\n      tree,\n      item => {\n        if (res === undefined && predicate(item)) {\n          res = item;\n        }\n      },\n      options\n    );\n    return res;\n  }\n\n  /**\n   * 获取所有已经选中的 `key` 值\n   */\n  getKeysByTreeNode(tree: NzTreeNode[], options?: ArrayServiceGetKeysByTreeNodeOptions): any[] {\n    const opt = {\n      includeHalfChecked: true,\n      ...options\n    } as ArrayServiceGetKeysByTreeNodeOptions;\n    const keys: any[] = [];\n    this.visitTree<NzTreeNode>(tree, (item, parent, deep) => {\n      if (item.isChecked || (opt.includeHalfChecked && item.isHalfChecked)) {\n        keys.push(opt.cb ? opt.cb(item, parent, deep) : opt.keyMapName ? item.origin[opt.keyMapName] : item.key);\n      }\n    });\n    return keys;\n  }\n  private baseFlat(array: any[], depth: number, result: any[] = []): any[] {\n    let index = -1;\n    while (++index < array.length) {\n      const value = array[index];\n      if (depth > 0 && Array.isArray(value)) {\n        if (depth > 1) {\n          this.baseFlat(value, depth - 1, result);\n        } else {\n          let pushIndex = -1;\n          const offset = result.length;\n\n          while (++pushIndex < value.length) {\n            result[offset + pushIndex] = value[pushIndex];\n          }\n        }\n      } else {\n        result[result.length] = value;\n      }\n    }\n    return result;\n  }\n  /**\n   * Recursively flattens array\n   *\n   * 递归扁平数组\n   * ```ts\n   * srv.flat([1, [2, 3, [4, 5, [6]]]]) => [1,2,3,4,5,6]\n   * srv.flat([1, [2, 3, [4, 5, [6]]]], 1) => [1,2,3,[4, 5, [6]]]\n   * ```\n   */\n  flat<T>(array: readonly T[], depth: number = 1 / 0): T[] {\n    return Array.isArray(array) ? this.baseFlat(array as any[], depth) : (array as T[]);\n  }\n  /**\n   * Group the array\n   *\n   * 对数组进行分组\n   * ```ts\n   * srv.groupBy([6.1, 4.2, 6.3], Math.floor) => {\"4\":[4.2],\"6\":[6.1,6.3]}\n   * srv.groupBy(['one', 'two', 'three'], v => v.length) => {\"3\":[\"one\",\"two\"],\"5\":[\"three\"]}\n   * ```\n   */\n  groupBy<T>(array: readonly T[], iteratee: (value: T) => string | number): ArrayServiceGroupByResult {\n    if (!Array.isArray(array)) {\n      return {};\n    }\n    return array.reduce((result, value) => {\n      const key = iteratee(value);\n      if (Object.prototype.hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        result[key] = [value];\n      }\n      return result;\n    }, {} as ArrayServiceGroupByResult);\n  }\n  /**\n   * Creates a duplicate-free version of an array\n   *\n   * 创建去重后的数组\n   * ```ts\n   * uniq([1, 2, 2, 3, 1]) => [1,2,3]\n   * uniq([{ a: 1 }, { a: 1 }, { a: 2 }], 'a') => [{\"a\":1},{\"a\":2}]\n   * uniq([{ a: 1 }, { a: 1 }, { a: 2 }], i => (i.a === 1 ? 'a' : 'b')) => [{\"a\":1},{\"a\":2}]\n   * ```\n   */\n  uniq<T>(array: readonly T[], predicate?: string | ((value: T) => string | number | boolean)): T[] {\n    return Array.from(\n      array\n        .reduce((map, value) => {\n          const key = predicate\n            ? typeof predicate === 'string'\n              ? (value as any)[predicate]\n              : predicate!(value)\n            : value;\n          if (!map.has(key)) {\n            map.set(key, value);\n          }\n          return map;\n        }, new Map<string | number | boolean, T>())\n        .values()\n    );\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}