{"version":3,"file":"breeze-client-mixin-get-entity-graph.mjs","sources":["../../src/mixin-get-entity-graph.ts","../../src/breeze-client-mixin-get-entity-graph.ts"],"sourcesContent":["//#region Copyright, Version, and Description\r\n/*\r\n * Copyright 2015-2021 IdeaBlade, Inc.  All Rights Reserved.\r\n * Use, reproduction, distribution, and modification of this code is subject to the terms and\r\n * conditions of the IdeaBlade Breeze license, available at http://www.breezejs.com/license\r\n *\r\n * Author: Ward Bell\r\n * Version: 0.9.5 - Steve Schmitt - convert to TypeScript, migrate to breeze-client repo, add HasEntityGraph and mixinEntityGraph\r\n * Version: 0.9.4 - Marcel Good - fix UMD module name\r\n * --------------------------------------------------------------------------------\r\n * Adds getEntityGraph method to Breeze EntityManager prototype.\r\n * Call   mixinEntityGraph(EntityManager)   to apply the mixin in a tree-shaking-resistant way.\r\n * Then   (manager as any).getEntityGraph(entity, \"child\");\r\n *\r\n * Depends on Breeze which it patches\r\n *\r\n * For discussion, see:\r\n * http://www.breezejs.com/documentation/getentitygraph\r\n *\r\n * For example usage, see:\r\n * https://github.com/Breeze/breeze.js.samples/tree/master/net/DocCode/DocCode/tests/getEntityGraphTests.js\r\n */\r\n//#endregion\r\nimport { Entity, EntityManager, EntityQuery, EntityState, EntityType, ExpandClause } from 'breeze-client';\r\n\r\ninterface EntityGroup {\r\n  _entities: (Entity | null)[];\r\n  _indexMap: { [index: string]: number };\r\n}\r\n\r\n// module augmentation failed to build with ng-packagr, so we have a separate interface\r\nexport interface HasEntityGraph extends EntityManager {\r\n  /**\r\n  Get related entities of root entity (or root entities) as specified by expand.\r\n  @example\r\n      var graph = breeze.EntityManager.getEntityGraph(customer, 'Orders.OrderDetails');\r\n      // graph will be the customer, all of its orders and their details even if deleted.\r\n  @method getEntityGraph\r\n  @param roots {Entity|Array of Entity} The root entity or root entities.\r\n  @param expand {String|Array of String|Object} an expand string, a query expand clause, or array of string paths\r\n  @return {Array of Entity} root entities and their related entities, including deleted entities. Duplicates are removed and entity order is indeterminate.\r\n  **/\r\n  getEntityGraph(roots: Entity | Array<Entity>, expand: string | Array<string> | ExpandClause): Array<Entity>;\r\n\r\n  /**\r\n  Execute query locally and return both the query results and their related entities as specified by the optional expand parameter or the query's expand clause.\r\n  @example\r\n      var query = breeze.EntityQuery.from('Customers')\r\n                  .where('CompanyName', 'startsWith', 'Alfred')\r\n                  .expand('Orders.OrderDetails');\r\n      var graph = manager.getEntityGraph(query);\r\n      // graph will be the 'Alfred' customers, their orders and their details even if deleted.\r\n  @method getEntityGraph\r\n  @param query {EntityQuery} A query to be executed against the manager's local cache.\r\n  @param [expand] {String|Array of String|Object} an expand string, a query expand clause, or array of string paths\r\n  @return {Array of Entity} local queried root entities and their related entities, including deleted entities. Duplicates are removed and entity order is indeterminate.\r\n  **/\r\n  getEntityGraph(query: EntityQuery, expand: string | Array<string> | ExpandClause): Array<Entity>;\r\n\r\n}\r\n\r\nexport function mixinEntityGraph(emclass: { new(): EntityManager }) {\r\n  const proto = EntityManager.prototype;\r\n\r\n  if (!(proto as any).getEntityGraph) {\r\n    (proto as any).getEntityGraph = getEntityGraph;\r\n  }\r\n}\r\n\r\nmixinEntityGraph(EntityManager);\r\n\r\n\r\nfunction getEntityGraph(roots: Entity | Array<Entity> | EntityQuery, expand: string | Array<string> | ExpandClause) {\r\n  if (roots instanceof EntityQuery) {\r\n    let newRoots = this.executeQueryLocally(roots);\r\n    return getEntityGraphCore(newRoots, expand || roots.expandClause);\r\n  } else {\r\n    return getEntityGraphCore(roots, expand);\r\n  }\r\n}\r\n\r\nfunction getEntityGraphCore(root: Entity | Array<Entity>, expand: string | Array<string> | ExpandClause) {\r\n  let entityGroupMap: { [index: string]: EntityGroup };\r\n  let graph = [] as Array<Entity>;\r\n  let rootType: EntityType;\r\n  let roots = Array.isArray(root) ? root : [root];\r\n  addToGraph(roots);     // removes dups & nulls\r\n  roots = graph.slice(); // copy of de-duped roots\r\n  if (roots.length) {\r\n    getRootInfo();\r\n    getExpand();\r\n    buildGraph();\r\n  }\r\n  return graph;\r\n\r\n  function addToGraph(entities: Array<Entity>) {\r\n    entities.forEach(function (entity) {\r\n      if (entity && graph.indexOf(entity) < 0) {\r\n        graph.push(entity);\r\n      }\r\n    });\r\n  }\r\n\r\n  function getRootInfo() {\r\n    let compatTypes: Array<EntityType>;\r\n\r\n    roots.forEach(function (root, ix) {\r\n      let aspect;\r\n      if (!root || !(aspect = root.entityAspect)) {\r\n        throw getRootErr(ix, 'is not an entity');\r\n      }\r\n      if (aspect.entityState === EntityState.Detached) {\r\n        throw getRootErr(ix, 'is a detached entity');\r\n      }\r\n\r\n      let em = aspect.entityManager;\r\n      if (entityGroupMap) {\r\n        if (entityGroupMap !== em._entityGroupMap) {\r\n          throw getRootErr(ix, \"has a different 'EntityManager' than other roots\");\r\n        }\r\n      } else {\r\n        entityGroupMap = em._entityGroupMap;\r\n      }\r\n      getRootType(root, ix);\r\n\r\n    });\r\n\r\n    function getRootErr(ix: number, msg: string) {\r\n      return new Error(\"'getEntityGraph' root[\" + ix + \"] \" + msg);\r\n    }\r\n\r\n    function getRootType(root: Entity, ix: number) {\r\n      let thisType = root.entityType;\r\n      if (!rootType) {\r\n        rootType = thisType;\r\n        return;\r\n      } else if (rootType === thisType) {\r\n        return;\r\n      }\r\n      // Types differs. Look for closest common base type\r\n      // does thisType derive from current rootType?\r\n      let baseType = rootType;\r\n      do {\r\n        compatTypes = compatTypes || baseType.getSelfAndSubtypes();\r\n        if (compatTypes.indexOf(thisType) > -1) {\r\n          rootType = baseType;\r\n          return;\r\n        }\r\n        baseType = baseType.baseEntityType;\r\n        compatTypes = null;\r\n      } while (baseType);\r\n\r\n      // does current rootType derives from thisType?\r\n      baseType = thisType;\r\n      do {\r\n        compatTypes = baseType.getSelfAndSubtypes();\r\n        if (compatTypes.indexOf(rootType) > -1) {\r\n          rootType = baseType;\r\n          return;\r\n        }\r\n        baseType = baseType.baseEntityType;\r\n      } while (baseType);\r\n\r\n      throw getRootErr(ix, \"is not EntityType-compatible with other roots\");\r\n    }\r\n  }\r\n\r\n  function getExpand() {\r\n    try {\r\n      if (!expand) {\r\n        expand = [];\r\n      } else if (typeof expand === 'string') {\r\n        // tricky because Breeze expandClause not exposed publically\r\n        expand = new EntityQuery().expand(expand).expandClause;\r\n      }\r\n      if (expand instanceof ExpandClause && expand.propertyPaths) { // expand clause\r\n        expand = expand.propertyPaths;\r\n      } else if (Array.isArray(expand)) {\r\n        if (!expand.every(function (elem) { return typeof elem === 'string'; })) {\r\n          throw '';\r\n        }\r\n      } else {\r\n        throw '';\r\n      }\r\n    } catch (_) {\r\n      throw new Error(\r\n        \"expand must be an expand string, array of string paths, or a query expand clause\");\r\n    }\r\n  }\r\n\r\n  function buildGraph() {\r\n    if (expand && expand instanceof Array && expand.length) {\r\n      let fns = expand.map(makePathFn);\r\n      fns.forEach(function (fn) { fn(roots); });\r\n    }\r\n  }\r\n\r\n  // Make function to get entities along a single expand path\r\n  // such as 'Orders.OrderDetails.Product'\r\n  function makePathFn(path: string) {\r\n    let fns = [] as Array<Function>,\r\n      segments = path.split('.'),\r\n      type = rootType;\r\n\r\n    for (let i = 0, slen = segments.length; i < slen; i++) {\r\n      let f = makePathSegmentFn(type, segments[i]);\r\n      type = (f as any).navType;\r\n      fns.push(f);\r\n    }\r\n\r\n    return function pathFn(entities: Array<Entity>) {\r\n      for (let j = 0, flen = fns.length; j < flen; j++) {\r\n        let elen = entities.length;\r\n        if (elen === 0) { return; } // nothing left to explore\r\n        // fn to get related entities for this path segment\r\n        let fn = fns[j];\r\n        // get entities related by this path segment\r\n        let related = [] as Array<Entity>;\r\n        for (let k = 0; k < elen; k++) {\r\n          related = related.concat(fn(entities[k]));\r\n        }\r\n        addToGraph(related);\r\n        if (j >= flen - 1) { return; } // no more path segments\r\n\r\n        // reset entities to deduped related entities\r\n        entities = [];\r\n        for (let l = 0, rlen = related.length; l < rlen; l++) {\r\n          let r = related[l];\r\n          if (entities.indexOf(r) < 0) { entities.push(r); }\r\n        }\r\n      }\r\n    };\r\n  }\r\n\r\n  // Make function to get entities along a single expand path segment\r\n  // such as the 'OrderDetails' in the 'Orders.OrderDetails.Product' path\r\n  function makePathSegmentFn(baseType: EntityType, segment: string) {\r\n    let baseTypeName: string, fn = undefined, navType;\r\n    try {\r\n      baseTypeName = baseType.name;\r\n      let nav = baseType.getNavigationProperty(segment);\r\n      let fkName = nav.foreignKeyNames[0];\r\n      if (!nav) {\r\n        throw new Error(segment + \" is not a navigation property of \" + baseTypeName);\r\n      }\r\n      navType = nav.entityType;\r\n      // add derived types\r\n      let navTypes = navType.getSelfAndSubtypes();\r\n      let grps = [] as Array<EntityGroup>; // non-empty groups for these types\r\n      navTypes.forEach(function (t) {\r\n        let grp = entityGroupMap[t.name];\r\n        if (grp && grp._entities.length > 0) {\r\n          grps.push(grp);\r\n        }\r\n      });\r\n      let grpCount = grps.length;\r\n      if (grpCount === 0) {\r\n        // no related entities in cache\r\n        fn = function () { return [] as Array<Entity>; };\r\n      } else if (fkName) {\r\n        fn = function (entity: Entity) {\r\n          let val = null;\r\n          try {\r\n            let keyValue = entity.getProperty(fkName);\r\n            for (let i = 0; i < grpCount; i += 1) {\r\n              val = grps[i]._entities[grps[i]._indexMap[keyValue]];\r\n              if (val) { break; }\r\n            }\r\n          } catch (e) { rethrow(e); }\r\n          return val;\r\n        };\r\n      } else {\r\n        fkName = nav.inverse ?\r\n          nav.inverse.foreignKeyNames[0] :\r\n          nav.invForeignKeyNames[0];\r\n        if (!fkName) { throw new Error(\"No inverse keys\"); }\r\n        fn = function (entity: Entity) {\r\n          let vals = [] as Array<Entity>;\r\n          try {\r\n            let keyValue = entity.entityAspect.getKey().values[0];\r\n            grps.forEach(function (grp) {\r\n              vals = vals.concat(grp._entities.filter(function (en) {\r\n                return en && en.getProperty(fkName) === keyValue;\r\n              }));\r\n            });\r\n          } catch (e) { rethrow(e); }\r\n          return vals;\r\n        };\r\n      }\r\n      (fn as any).navType = navType;\r\n      (fn as any).path = segment;\r\n\r\n    } catch (err) { rethrow(err); }\r\n    return fn;\r\n\r\n    function rethrow(e: Error) {\r\n      let typeName = baseTypeName || baseType;\r\n      let error = new Error(\"'getEntityGraph' can't expand '\" + segment + \"' for \" + typeName);\r\n      (error as any).innerError = e;\r\n      throw error;\r\n    }\r\n  }\r\n}\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './mixin-get-entity-graph';\n"],"names":[],"mappings":"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"}