@teambit/objects 0.0.68 → 0.0.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -50,7 +50,7 @@ export default class VersionHistory extends BitObject {
50
50
  getAncestor(numOfGenerationsToGoBack: number, ref: Ref): Ref;
51
51
  getGraph(modelComponent?: ModelComponent, laneHeads?: {
52
52
  [hash: string]: string[];
53
- }, shortHash?: boolean): VersionHistoryGraph;
53
+ }, shortHash?: boolean, limitVersions?: number): VersionHistoryGraph;
54
54
  get compId(): ComponentID;
55
55
  static create(name: string, scope: string, versions: VersionParents[]): VersionHistory;
56
56
  static parse(contents: string): VersionHistory;
@@ -204,10 +204,12 @@ class VersionHistory extends _objects().BitObject {
204
204
  const parent = versionData.parents[0];
205
205
  return this.getAncestor(numOfGenerationsToGoBack - 1, parent);
206
206
  }
207
- getGraph(modelComponent, laneHeads, shortHash = false) {
207
+ getGraph(modelComponent, laneHeads, shortHash = false, limitVersions) {
208
208
  const refToStr = ref => shortHash ? ref.toShortString() : ref.toString();
209
209
  const graph = new (_graph().Graph)();
210
- const allHashes = this.versions.map(v => (0, _lodash().compact)([v.hash, ...v.parents, ...(v.squashed || []), v.unrelated])).flat();
210
+ const allVersions = limitVersions ? [...this.versions].slice(-limitVersions) : this.versions;
211
+ const allHashes = allVersions.map(v => (0, _lodash().compact)([v.hash, ...v.parents, ...(v.squashed || []), v.unrelated])).flat();
212
+ const allHashesUniq = (0, _lodash().uniqBy)(allHashes, 'hash');
211
213
  const getMetadata = ref => {
212
214
  if (!modelComponent || !laneHeads) return undefined;
213
215
  const tag = modelComponent.getTagOfRefIfExists(ref);
@@ -217,8 +219,8 @@ class VersionHistory extends _objects().BitObject {
217
219
  pointers
218
220
  };
219
221
  };
220
- const nodes = allHashes.map(v => new (_graph().Node)(refToStr(v), getMetadata(v) || refToStr(v)));
221
- const edges = this.versions.map(v => {
222
+ const nodes = allHashesUniq.map(v => new (_graph().Node)(refToStr(v), getMetadata(v) || refToStr(v)));
223
+ const edges = allVersions.map(v => {
222
224
  const verEdges = v.parents.map(p => new (_graph().Edge)(refToStr(v.hash), refToStr(p), 'parent'));
223
225
  if (v.unrelated) verEdges.push(new (_graph().Edge)(refToStr(v.hash), refToStr(v.unrelated), 'unrelated'));
224
226
  if (v.squashed) {
@@ -1 +1 @@
1
- {"version":3,"names":["_graph","data","require","_componentId","_bitError","_lodash","_legacy","_ref","_interopRequireDefault","_objects","_component","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","VersionHistory","BitObject","constructor","props","name","scope","versionsObj","versionParentsToObject","versions","graphCompleteRefs","values","reduce","acc","version","hash","id","fromId","toObject","map","v","toString","parents","p","unrelated","squashed","undefined","pretty","args","getStringifyArgs","JSON","stringify","toBuffer","Buffer","from","getVersionData","ref","hasHash","Boolean","addFromVersionsObjects","forEach","exists","head","previousParents","versionData","getVersionParentsFromVersion","isEmpty","length","getAllHashesFrom","start","item","missing","allHashes","addHashesRecursively","ver","parent","includes","parentVer","push","found","isRefPartOfHistory","startFrom","searchFor","isGraphCompleteSince","isComplete","hasChanged","getAllHashesAsString","keys","merge","versionHistory","existingHashes","incomingHashes","hashesInExistingOnly","difference","versionsDataOnExistingOnly","filter","newVersions","getAncestor","numOfGenerationsToGoBack","errorMsg","compId","BitError","getGraph","modelComponent","laneHeads","shortHash","refToStr","toShortString","graph","Graph","compact","flat","getMetadata","tag","getTagOfRefIfExists","pointers","nodes","Node","edges","verEdges","Edge","s","find","isEqual","setNodes","setEdges","ComponentID","fromObject","create","parse","contents","parsed","Ref","exports","versionParentsToGraph","uniqBy"],"sources":["version-history.ts"],"sourcesContent":["import { Graph, Edge, Node } from '@teambit/graph.cleargraph';\nimport { ComponentID } from '@teambit/component-id';\nimport { BitError } from '@teambit/bit-error';\nimport { compact, difference, uniqBy } from 'lodash';\nimport { getStringifyArgs } from '@teambit/legacy.utils';\nimport Ref from '../objects/ref';\nimport { BitObject } from '../objects';\nimport type Version from './version';\nimport { getVersionParentsFromVersion } from '@teambit/component.snap-distance';\nimport ModelComponent from './model-component';\n\nexport type VersionParents = {\n hash: Ref;\n parents: Ref[];\n unrelated?: Ref;\n squashed?: Ref[];\n};\n\nexport type VersionHistoryGraph = Graph<string | HashMetadata, string>;\n\ntype VersionHistoryProps = {\n name: string;\n scope: string;\n versions: VersionParents[];\n graphCompleteRefs?: string[];\n};\n\ntype HashMetadata = {\n tag?: string;\n pointers?: string[];\n};\n\nexport default class VersionHistory extends BitObject {\n name: string;\n scope: string;\n private versionsObj: { [hash: string]: VersionParents };\n graphCompleteRefs: string[];\n hasChanged = false; // whether the version history has changed since the last persist\n constructor(props: VersionHistoryProps) {\n super();\n this.name = props.name;\n this.scope = props.scope;\n this.versionsObj = this.versionParentsToObject(props.versions);\n this.graphCompleteRefs = props.graphCompleteRefs || [];\n }\n\n get versions() {\n return Object.values(this.versionsObj);\n }\n\n private versionParentsToObject(versions: VersionParents[]) {\n return versions.reduce((acc, version) => {\n acc[version.hash.hash] = version;\n return acc;\n }, {});\n }\n\n id() {\n return `${this.scope}/${this.name}:${VersionHistory.name}`;\n }\n\n static fromId(name: string, scope: string) {\n return new VersionHistory({ scope, name, versions: [] });\n }\n\n toObject(): Record<string, any> {\n return {\n name: this.name,\n scope: this.scope,\n versions: this.versions.map((v) => ({\n hash: v.hash.toString(),\n parents: v.parents.map((p) => p.toString()),\n unrelated: v.unrelated?.toString(),\n squashed: v.squashed ? v.squashed.map((p) => p.toString()) : undefined,\n })),\n graphCompleteRefs: this.graphCompleteRefs,\n };\n }\n\n toString(pretty: boolean): string {\n const args = getStringifyArgs(pretty);\n return JSON.stringify(this.toObject(), ...args);\n }\n\n toBuffer(pretty): Buffer {\n return Buffer.from(this.toString(pretty));\n }\n\n getVersionData(ref: Ref): VersionParents | undefined {\n return this.versionsObj[ref.toString()];\n }\n\n hasHash(ref: Ref) {\n return Boolean(this.getVersionData(ref));\n }\n\n addFromVersionsObjects(versions: Version[]) {\n versions.forEach((version) => {\n const exists = this.getVersionData(version.hash());\n if (exists) {\n // just in case the parents got updated as a result of a merge/squash\n exists.parents = version.parents;\n exists.unrelated = version.unrelated?.head;\n exists.squashed = version.squashed?.previousParents;\n } else {\n const versionData = getVersionParentsFromVersion(version);\n this.versionsObj[version.hash().hash] = versionData;\n }\n });\n }\n\n isEmpty() {\n return !this.versions.length;\n }\n\n getAllHashesFrom(start: Ref): { found?: string[]; missing?: string[] } {\n const item = this.getVersionData(start);\n if (!item) return { missing: [start.toString()] };\n const allHashes: string[] = [item.hash.toString()];\n const missing: string[] = [];\n const addHashesRecursively = (ver: VersionParents) => {\n ver.parents.forEach((parent) => {\n if (allHashes.includes(parent.toString())) return;\n const parentVer = this.getVersionData(parent);\n if (!parentVer) {\n missing.push(parent.toString());\n return;\n }\n allHashes.push(parent.toString());\n if (parentVer.parents.length) addHashesRecursively(parentVer);\n });\n };\n addHashesRecursively(item);\n return { found: allHashes, missing };\n }\n\n isRefPartOfHistory(startFrom: Ref, searchFor: Ref) {\n const { found } = this.getAllHashesFrom(startFrom);\n return found?.includes(searchFor.toString());\n }\n\n isGraphCompleteSince(ref: Ref) {\n if (this.graphCompleteRefs.includes(ref.toString())) return true;\n const { missing } = this.getAllHashesFrom(ref);\n const isComplete = !missing || !missing.length;\n if (isComplete) {\n this.graphCompleteRefs.push(ref.toString());\n this.hasChanged = true;\n }\n return isComplete;\n }\n\n getAllHashesAsString(): string[] {\n return Object.keys(this.versionsObj);\n }\n\n merge(versionHistory: VersionHistory) {\n const existingHashes = this.getAllHashesAsString();\n const incomingHashes = versionHistory.getAllHashesAsString();\n const hashesInExistingOnly = difference(existingHashes, incomingHashes);\n const versionsDataOnExistingOnly = this.versions.filter((v) => hashesInExistingOnly.includes(v.hash.toString()));\n const newVersions = [...versionHistory.versions, ...versionsDataOnExistingOnly];\n this.versionsObj = this.versionParentsToObject(newVersions);\n }\n\n getAncestor(numOfGenerationsToGoBack: number, ref: Ref): Ref {\n const errorMsg = `unable to get an older parent of ${this.compId.toString()}`;\n const versionData = this.getVersionData(ref);\n if (!versionData)\n throw new BitError(`${errorMsg}, version \"${ref.toString()}\" was not found in the version history`);\n if (numOfGenerationsToGoBack === 0) return versionData.hash;\n if (!versionData.parents.length) throw new BitError(`${errorMsg}, version \"${ref.toString()}\" has no parents`);\n const parent = versionData.parents[0];\n return this.getAncestor(numOfGenerationsToGoBack - 1, parent);\n }\n\n getGraph(\n modelComponent?: ModelComponent,\n laneHeads?: { [hash: string]: string[] },\n shortHash = false\n ): VersionHistoryGraph {\n const refToStr = (ref: Ref) => (shortHash ? ref.toShortString() : ref.toString());\n const graph = new Graph<string | HashMetadata, string>();\n const allHashes = this.versions\n .map((v) => compact([v.hash, ...v.parents, ...(v.squashed || []), v.unrelated]))\n .flat();\n\n const getMetadata = (ref: Ref): HashMetadata | undefined => {\n if (!modelComponent || !laneHeads) return undefined;\n const tag = modelComponent.getTagOfRefIfExists(ref);\n const pointers = laneHeads[ref.toString()];\n return { tag, pointers };\n };\n const nodes = allHashes.map((v) => new Node(refToStr(v), getMetadata(v) || refToStr(v)));\n const edges = this.versions\n .map((v) => {\n const verEdges = v.parents.map((p) => new Edge(refToStr(v.hash), refToStr(p), 'parent'));\n if (v.unrelated) verEdges.push(new Edge(refToStr(v.hash), refToStr(v.unrelated), 'unrelated'));\n if (v.squashed) {\n const squashed = v.squashed.filter((s) => !v.parents.find((p) => p.isEqual(s)));\n squashed.map((p) => verEdges.push(new Edge(refToStr(v.hash), refToStr(p), 'squashed')));\n }\n return verEdges;\n })\n .flat();\n graph.setNodes(nodes);\n graph.setEdges(edges);\n return graph;\n }\n\n get compId() {\n return ComponentID.fromObject({ scope: this.scope, name: this.name });\n }\n\n static create(name: string, scope: string, versions: VersionParents[]) {\n return new VersionHistory({\n name,\n scope,\n versions,\n });\n }\n\n static parse(contents: string): VersionHistory {\n const parsed = JSON.parse(contents);\n const props: VersionHistoryProps = {\n name: parsed.name,\n scope: parsed.scope,\n versions: parsed.versions.map((ver) => ({\n hash: Ref.from(ver.hash),\n parents: ver.parents.map((p) => Ref.from(p)),\n unrelated: ver.unrelated ? Ref.from(ver.unrelated) : undefined,\n squashed: ver.squashed ? ver.squashed.map((p) => Ref.from(p)) : undefined,\n })),\n graphCompleteRefs: parsed.graphCompleteRefs,\n };\n return new VersionHistory(props);\n }\n}\n\nexport function versionParentsToGraph(versions: VersionParents[]): Graph<string, string> {\n const refToStr = (ref: Ref) => ref.toString();\n const graph = new Graph<string, string>();\n const allHashes = uniqBy(\n versions\n .map((v) => {\n return compact([v.hash, ...v.parents, ...(v.squashed || []), v.unrelated]);\n })\n .flat(),\n 'hash'\n );\n const nodes = allHashes.map((v) => new Node(refToStr(v), refToStr(v)));\n const edges = versions\n .map((v) => {\n const verEdges = v.parents.map((p) => new Edge(refToStr(v.hash), refToStr(p), 'parent'));\n if (v.unrelated) verEdges.push(new Edge(refToStr(v.hash), refToStr(v.unrelated), 'unrelated'));\n if (v.squashed) {\n const squashed = v.squashed.filter((s) => !v.parents.find((p) => p.isEqual(s)));\n squashed.map((p) => verEdges.push(new Edge(refToStr(v.hash), refToStr(p), 'squashed')));\n }\n return verEdges;\n })\n .flat();\n graph.setNodes(nodes);\n graph.setEdges(edges);\n return graph;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_graph","data","require","_componentId","_bitError","_lodash","_legacy","_ref","_interopRequireDefault","_objects","_component","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","VersionHistory","BitObject","constructor","props","name","scope","versionsObj","versionParentsToObject","versions","graphCompleteRefs","values","reduce","acc","version","hash","id","fromId","toObject","map","v","toString","parents","p","unrelated","squashed","undefined","pretty","args","getStringifyArgs","JSON","stringify","toBuffer","Buffer","from","getVersionData","ref","hasHash","Boolean","addFromVersionsObjects","forEach","exists","head","previousParents","versionData","getVersionParentsFromVersion","isEmpty","length","getAllHashesFrom","start","item","missing","allHashes","addHashesRecursively","ver","parent","includes","parentVer","push","found","isRefPartOfHistory","startFrom","searchFor","isGraphCompleteSince","isComplete","hasChanged","getAllHashesAsString","keys","merge","versionHistory","existingHashes","incomingHashes","hashesInExistingOnly","difference","versionsDataOnExistingOnly","filter","newVersions","getAncestor","numOfGenerationsToGoBack","errorMsg","compId","BitError","getGraph","modelComponent","laneHeads","shortHash","limitVersions","refToStr","toShortString","graph","Graph","allVersions","slice","compact","flat","allHashesUniq","uniqBy","getMetadata","tag","getTagOfRefIfExists","pointers","nodes","Node","edges","verEdges","Edge","s","find","isEqual","setNodes","setEdges","ComponentID","fromObject","create","parse","contents","parsed","Ref","exports","versionParentsToGraph"],"sources":["version-history.ts"],"sourcesContent":["import { Graph, Edge, Node } from '@teambit/graph.cleargraph';\nimport { ComponentID } from '@teambit/component-id';\nimport { BitError } from '@teambit/bit-error';\nimport { compact, difference, uniqBy } from 'lodash';\nimport { getStringifyArgs } from '@teambit/legacy.utils';\nimport Ref from '../objects/ref';\nimport { BitObject } from '../objects';\nimport type Version from './version';\nimport { getVersionParentsFromVersion } from '@teambit/component.snap-distance';\nimport ModelComponent from './model-component';\n\nexport type VersionParents = {\n hash: Ref;\n parents: Ref[];\n unrelated?: Ref;\n squashed?: Ref[];\n};\n\nexport type VersionHistoryGraph = Graph<string | HashMetadata, string>;\n\ntype VersionHistoryProps = {\n name: string;\n scope: string;\n versions: VersionParents[];\n graphCompleteRefs?: string[];\n};\n\ntype HashMetadata = {\n tag?: string;\n pointers?: string[];\n};\n\nexport default class VersionHistory extends BitObject {\n name: string;\n scope: string;\n private versionsObj: { [hash: string]: VersionParents };\n graphCompleteRefs: string[];\n hasChanged = false; // whether the version history has changed since the last persist\n constructor(props: VersionHistoryProps) {\n super();\n this.name = props.name;\n this.scope = props.scope;\n this.versionsObj = this.versionParentsToObject(props.versions);\n this.graphCompleteRefs = props.graphCompleteRefs || [];\n }\n\n get versions() {\n return Object.values(this.versionsObj);\n }\n\n private versionParentsToObject(versions: VersionParents[]) {\n return versions.reduce((acc, version) => {\n acc[version.hash.hash] = version;\n return acc;\n }, {});\n }\n\n id() {\n return `${this.scope}/${this.name}:${VersionHistory.name}`;\n }\n\n static fromId(name: string, scope: string) {\n return new VersionHistory({ scope, name, versions: [] });\n }\n\n toObject(): Record<string, any> {\n return {\n name: this.name,\n scope: this.scope,\n versions: this.versions.map((v) => ({\n hash: v.hash.toString(),\n parents: v.parents.map((p) => p.toString()),\n unrelated: v.unrelated?.toString(),\n squashed: v.squashed ? v.squashed.map((p) => p.toString()) : undefined,\n })),\n graphCompleteRefs: this.graphCompleteRefs,\n };\n }\n\n toString(pretty: boolean): string {\n const args = getStringifyArgs(pretty);\n return JSON.stringify(this.toObject(), ...args);\n }\n\n toBuffer(pretty): Buffer {\n return Buffer.from(this.toString(pretty));\n }\n\n getVersionData(ref: Ref): VersionParents | undefined {\n return this.versionsObj[ref.toString()];\n }\n\n hasHash(ref: Ref) {\n return Boolean(this.getVersionData(ref));\n }\n\n addFromVersionsObjects(versions: Version[]) {\n versions.forEach((version) => {\n const exists = this.getVersionData(version.hash());\n if (exists) {\n // just in case the parents got updated as a result of a merge/squash\n exists.parents = version.parents;\n exists.unrelated = version.unrelated?.head;\n exists.squashed = version.squashed?.previousParents;\n } else {\n const versionData = getVersionParentsFromVersion(version);\n this.versionsObj[version.hash().hash] = versionData;\n }\n });\n }\n\n isEmpty() {\n return !this.versions.length;\n }\n\n getAllHashesFrom(start: Ref): { found?: string[]; missing?: string[] } {\n const item = this.getVersionData(start);\n if (!item) return { missing: [start.toString()] };\n const allHashes: string[] = [item.hash.toString()];\n const missing: string[] = [];\n const addHashesRecursively = (ver: VersionParents) => {\n ver.parents.forEach((parent) => {\n if (allHashes.includes(parent.toString())) return;\n const parentVer = this.getVersionData(parent);\n if (!parentVer) {\n missing.push(parent.toString());\n return;\n }\n allHashes.push(parent.toString());\n if (parentVer.parents.length) addHashesRecursively(parentVer);\n });\n };\n addHashesRecursively(item);\n return { found: allHashes, missing };\n }\n\n isRefPartOfHistory(startFrom: Ref, searchFor: Ref) {\n const { found } = this.getAllHashesFrom(startFrom);\n return found?.includes(searchFor.toString());\n }\n\n isGraphCompleteSince(ref: Ref) {\n if (this.graphCompleteRefs.includes(ref.toString())) return true;\n const { missing } = this.getAllHashesFrom(ref);\n const isComplete = !missing || !missing.length;\n if (isComplete) {\n this.graphCompleteRefs.push(ref.toString());\n this.hasChanged = true;\n }\n return isComplete;\n }\n\n getAllHashesAsString(): string[] {\n return Object.keys(this.versionsObj);\n }\n\n merge(versionHistory: VersionHistory) {\n const existingHashes = this.getAllHashesAsString();\n const incomingHashes = versionHistory.getAllHashesAsString();\n const hashesInExistingOnly = difference(existingHashes, incomingHashes);\n const versionsDataOnExistingOnly = this.versions.filter((v) => hashesInExistingOnly.includes(v.hash.toString()));\n const newVersions = [...versionHistory.versions, ...versionsDataOnExistingOnly];\n this.versionsObj = this.versionParentsToObject(newVersions);\n }\n\n getAncestor(numOfGenerationsToGoBack: number, ref: Ref): Ref {\n const errorMsg = `unable to get an older parent of ${this.compId.toString()}`;\n const versionData = this.getVersionData(ref);\n if (!versionData)\n throw new BitError(`${errorMsg}, version \"${ref.toString()}\" was not found in the version history`);\n if (numOfGenerationsToGoBack === 0) return versionData.hash;\n if (!versionData.parents.length) throw new BitError(`${errorMsg}, version \"${ref.toString()}\" has no parents`);\n const parent = versionData.parents[0];\n return this.getAncestor(numOfGenerationsToGoBack - 1, parent);\n }\n\n getGraph(\n modelComponent?: ModelComponent,\n laneHeads?: { [hash: string]: string[] },\n shortHash = false,\n limitVersions?: number\n ): VersionHistoryGraph {\n const refToStr = (ref: Ref) => (shortHash ? ref.toShortString() : ref.toString());\n const graph = new Graph<string | HashMetadata, string>();\n const allVersions = limitVersions ? [...this.versions].slice(-limitVersions) : this.versions;\n const allHashes = allVersions\n .map((v) => compact([v.hash, ...v.parents, ...(v.squashed || []), v.unrelated]))\n .flat();\n\n const allHashesUniq = uniqBy(allHashes, 'hash');\n\n const getMetadata = (ref: Ref): HashMetadata | undefined => {\n if (!modelComponent || !laneHeads) return undefined;\n const tag = modelComponent.getTagOfRefIfExists(ref);\n const pointers = laneHeads[ref.toString()];\n return { tag, pointers };\n };\n const nodes = allHashesUniq.map((v) => new Node(refToStr(v), getMetadata(v) || refToStr(v)));\n\n const edges = allVersions\n .map((v) => {\n const verEdges = v.parents.map((p) => new Edge(refToStr(v.hash), refToStr(p), 'parent'));\n if (v.unrelated) verEdges.push(new Edge(refToStr(v.hash), refToStr(v.unrelated), 'unrelated'));\n if (v.squashed) {\n const squashed = v.squashed.filter((s) => !v.parents.find((p) => p.isEqual(s)));\n squashed.map((p) => verEdges.push(new Edge(refToStr(v.hash), refToStr(p), 'squashed')));\n }\n return verEdges;\n })\n .flat();\n graph.setNodes(nodes);\n graph.setEdges(edges);\n return graph;\n }\n\n get compId() {\n return ComponentID.fromObject({ scope: this.scope, name: this.name });\n }\n\n static create(name: string, scope: string, versions: VersionParents[]) {\n return new VersionHistory({\n name,\n scope,\n versions,\n });\n }\n\n static parse(contents: string): VersionHistory {\n const parsed = JSON.parse(contents);\n const props: VersionHistoryProps = {\n name: parsed.name,\n scope: parsed.scope,\n versions: parsed.versions.map((ver) => ({\n hash: Ref.from(ver.hash),\n parents: ver.parents.map((p) => Ref.from(p)),\n unrelated: ver.unrelated ? Ref.from(ver.unrelated) : undefined,\n squashed: ver.squashed ? ver.squashed.map((p) => Ref.from(p)) : undefined,\n })),\n graphCompleteRefs: parsed.graphCompleteRefs,\n };\n return new VersionHistory(props);\n }\n}\n\nexport function versionParentsToGraph(versions: VersionParents[]): Graph<string, string> {\n const refToStr = (ref: Ref) => ref.toString();\n const graph = new Graph<string, string>();\n const allHashes = uniqBy(\n versions\n .map((v) => {\n return compact([v.hash, ...v.parents, ...(v.squashed || []), v.unrelated]);\n })\n .flat(),\n 'hash'\n );\n const nodes = allHashes.map((v) => new Node(refToStr(v), refToStr(v)));\n const edges = versions\n .map((v) => {\n const verEdges = v.parents.map((p) => new Edge(refToStr(v.hash), refToStr(p), 'parent'));\n if (v.unrelated) verEdges.push(new Edge(refToStr(v.hash), refToStr(v.unrelated), 'unrelated'));\n if (v.squashed) {\n const squashed = v.squashed.filter((s) => !v.parents.find((p) => p.isEqual(s)));\n squashed.map((p) => verEdges.push(new Edge(refToStr(v.hash), refToStr(p), 'squashed')));\n }\n return verEdges;\n })\n .flat();\n graph.setNodes(nodes);\n graph.setEdges(edges);\n return graph;\n}\n"],"mappings":";;;;;;;AAAA,SAAAA,OAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,MAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAE,aAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,YAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,UAAA;EAAA,MAAAH,IAAA,GAAAC,OAAA;EAAAE,SAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,QAAA;EAAA,MAAAJ,IAAA,GAAAC,OAAA;EAAAG,OAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAK,QAAA;EAAA,MAAAL,IAAA,GAAAC,OAAA;EAAAI,OAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAM,KAAA;EAAA,MAAAN,IAAA,GAAAO,sBAAA,CAAAN,OAAA;EAAAK,IAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAQ,SAAA;EAAA,MAAAR,IAAA,GAAAC,OAAA;EAAAO,QAAA,YAAAA,CAAA;IAAA,OAAAR,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAS,WAAA;EAAA,MAAAT,IAAA,GAAAC,OAAA;EAAAQ,UAAA,YAAAA,CAAA;IAAA,OAAAT,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAgF,SAAAO,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,gBAAAH,CAAA,EAAAI,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAE,cAAA,CAAAF,CAAA,MAAAJ,CAAA,GAAAO,MAAA,CAAAC,cAAA,CAAAR,CAAA,EAAAI,CAAA,IAAAK,KAAA,EAAAJ,CAAA,EAAAK,UAAA,MAAAC,YAAA,MAAAC,QAAA,UAAAZ,CAAA,CAAAI,CAAA,IAAAC,CAAA,EAAAL,CAAA;AAAA,SAAAM,eAAAD,CAAA,QAAAQ,CAAA,GAAAC,YAAA,CAAAT,CAAA,uCAAAQ,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAT,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAL,CAAA,GAAAK,CAAA,CAAAU,MAAA,CAAAC,WAAA,kBAAAhB,CAAA,QAAAa,CAAA,GAAAb,CAAA,CAAAiB,IAAA,CAAAZ,CAAA,EAAAD,CAAA,uCAAAS,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAAd,CAAA,GAAAe,MAAA,GAAAC,MAAA,EAAAf,CAAA;AAwBjE,MAAMgB,cAAc,SAASC,oBAAS,CAAC;EAKhC;EACpBC,WAAWA,CAACC,KAA0B,EAAE;IACtC,KAAK,CAAC,CAAC;IAACrB,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,qBAFG,KAAK;IAGhB,IAAI,CAACsB,IAAI,GAAGD,KAAK,CAACC,IAAI;IACtB,IAAI,CAACC,KAAK,GAAGF,KAAK,CAACE,KAAK;IACxB,IAAI,CAACC,WAAW,GAAG,IAAI,CAACC,sBAAsB,CAACJ,KAAK,CAACK,QAAQ,CAAC;IAC9D,IAAI,CAACC,iBAAiB,GAAGN,KAAK,CAACM,iBAAiB,IAAI,EAAE;EACxD;EAEA,IAAID,QAAQA,CAAA,EAAG;IACb,OAAOtB,MAAM,CAACwB,MAAM,CAAC,IAAI,CAACJ,WAAW,CAAC;EACxC;EAEQC,sBAAsBA,CAACC,QAA0B,EAAE;IACzD,OAAOA,QAAQ,CAACG,MAAM,CAAC,CAACC,GAAG,EAAEC,OAAO,KAAK;MACvCD,GAAG,CAACC,OAAO,CAACC,IAAI,CAACA,IAAI,CAAC,GAAGD,OAAO;MAChC,OAAOD,GAAG;IACZ,CAAC,EAAE,CAAC,CAAC,CAAC;EACR;EAEAG,EAAEA,CAAA,EAAG;IACH,OAAO,GAAG,IAAI,CAACV,KAAK,IAAI,IAAI,CAACD,IAAI,IAAIJ,cAAc,CAACI,IAAI,EAAE;EAC5D;EAEA,OAAOY,MAAMA,CAACZ,IAAY,EAAEC,KAAa,EAAE;IACzC,OAAO,IAAIL,cAAc,CAAC;MAAEK,KAAK;MAAED,IAAI;MAAEI,QAAQ,EAAE;IAAG,CAAC,CAAC;EAC1D;EAEAS,QAAQA,CAAA,EAAwB;IAC9B,OAAO;MACLb,IAAI,EAAE,IAAI,CAACA,IAAI;MACfC,KAAK,EAAE,IAAI,CAACA,KAAK;MACjBG,QAAQ,EAAE,IAAI,CAACA,QAAQ,CAACU,GAAG,CAAEC,CAAC,KAAM;QAClCL,IAAI,EAAEK,CAAC,CAACL,IAAI,CAACM,QAAQ,CAAC,CAAC;QACvBC,OAAO,EAAEF,CAAC,CAACE,OAAO,CAACH,GAAG,CAAEI,CAAC,IAAKA,CAAC,CAACF,QAAQ,CAAC,CAAC,CAAC;QAC3CG,SAAS,EAAEJ,CAAC,CAACI,SAAS,EAAEH,QAAQ,CAAC,CAAC;QAClCI,QAAQ,EAAEL,CAAC,CAACK,QAAQ,GAAGL,CAAC,CAACK,QAAQ,CAACN,GAAG,CAAEI,CAAC,IAAKA,CAAC,CAACF,QAAQ,CAAC,CAAC,CAAC,GAAGK;MAC/D,CAAC,CAAC,CAAC;MACHhB,iBAAiB,EAAE,IAAI,CAACA;IAC1B,CAAC;EACH;EAEAW,QAAQA,CAACM,MAAe,EAAU;IAChC,MAAMC,IAAI,GAAG,IAAAC,0BAAgB,EAACF,MAAM,CAAC;IACrC,OAAOG,IAAI,CAACC,SAAS,CAAC,IAAI,CAACb,QAAQ,CAAC,CAAC,EAAE,GAAGU,IAAI,CAAC;EACjD;EAEAI,QAAQA,CAACL,MAAM,EAAU;IACvB,OAAOM,MAAM,CAACC,IAAI,CAAC,IAAI,CAACb,QAAQ,CAACM,MAAM,CAAC,CAAC;EAC3C;EAEAQ,cAAcA,CAACC,GAAQ,EAA8B;IACnD,OAAO,IAAI,CAAC7B,WAAW,CAAC6B,GAAG,CAACf,QAAQ,CAAC,CAAC,CAAC;EACzC;EAEAgB,OAAOA,CAACD,GAAQ,EAAE;IAChB,OAAOE,OAAO,CAAC,IAAI,CAACH,cAAc,CAACC,GAAG,CAAC,CAAC;EAC1C;EAEAG,sBAAsBA,CAAC9B,QAAmB,EAAE;IAC1CA,QAAQ,CAAC+B,OAAO,CAAE1B,OAAO,IAAK;MAC5B,MAAM2B,MAAM,GAAG,IAAI,CAACN,cAAc,CAACrB,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;MAClD,IAAI0B,MAAM,EAAE;QACV;QACAA,MAAM,CAACnB,OAAO,GAAGR,OAAO,CAACQ,OAAO;QAChCmB,MAAM,CAACjB,SAAS,GAAGV,OAAO,CAACU,SAAS,EAAEkB,IAAI;QAC1CD,MAAM,CAAChB,QAAQ,GAAGX,OAAO,CAACW,QAAQ,EAAEkB,eAAe;MACrD,CAAC,MAAM;QACL,MAAMC,WAAW,GAAG,IAAAC,yCAA4B,EAAC/B,OAAO,CAAC;QACzD,IAAI,CAACP,WAAW,CAACO,OAAO,CAACC,IAAI,CAAC,CAAC,CAACA,IAAI,CAAC,GAAG6B,WAAW;MACrD;IACF,CAAC,CAAC;EACJ;EAEAE,OAAOA,CAAA,EAAG;IACR,OAAO,CAAC,IAAI,CAACrC,QAAQ,CAACsC,MAAM;EAC9B;EAEAC,gBAAgBA,CAACC,KAAU,EAA4C;IACrE,MAAMC,IAAI,GAAG,IAAI,CAACf,cAAc,CAACc,KAAK,CAAC;IACvC,IAAI,CAACC,IAAI,EAAE,OAAO;MAAEC,OAAO,EAAE,CAACF,KAAK,CAAC5B,QAAQ,CAAC,CAAC;IAAE,CAAC;IACjD,MAAM+B,SAAmB,GAAG,CAACF,IAAI,CAACnC,IAAI,CAACM,QAAQ,CAAC,CAAC,CAAC;IAClD,MAAM8B,OAAiB,GAAG,EAAE;IAC5B,MAAME,oBAAoB,GAAIC,GAAmB,IAAK;MACpDA,GAAG,CAAChC,OAAO,CAACkB,OAAO,CAAEe,MAAM,IAAK;QAC9B,IAAIH,SAAS,CAACI,QAAQ,CAACD,MAAM,CAAClC,QAAQ,CAAC,CAAC,CAAC,EAAE;QAC3C,MAAMoC,SAAS,GAAG,IAAI,CAACtB,cAAc,CAACoB,MAAM,CAAC;QAC7C,IAAI,CAACE,SAAS,EAAE;UACdN,OAAO,CAACO,IAAI,CAACH,MAAM,CAAClC,QAAQ,CAAC,CAAC,CAAC;UAC/B;QACF;QACA+B,SAAS,CAACM,IAAI,CAACH,MAAM,CAAClC,QAAQ,CAAC,CAAC,CAAC;QACjC,IAAIoC,SAAS,CAACnC,OAAO,CAACyB,MAAM,EAAEM,oBAAoB,CAACI,SAAS,CAAC;MAC/D,CAAC,CAAC;IACJ,CAAC;IACDJ,oBAAoB,CAACH,IAAI,CAAC;IAC1B,OAAO;MAAES,KAAK,EAAEP,SAAS;MAAED;IAAQ,CAAC;EACtC;EAEAS,kBAAkBA,CAACC,SAAc,EAAEC,SAAc,EAAE;IACjD,MAAM;MAAEH;IAAM,CAAC,GAAG,IAAI,CAACX,gBAAgB,CAACa,SAAS,CAAC;IAClD,OAAOF,KAAK,EAAEH,QAAQ,CAACM,SAAS,CAACzC,QAAQ,CAAC,CAAC,CAAC;EAC9C;EAEA0C,oBAAoBA,CAAC3B,GAAQ,EAAE;IAC7B,IAAI,IAAI,CAAC1B,iBAAiB,CAAC8C,QAAQ,CAACpB,GAAG,CAACf,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI;IAChE,MAAM;MAAE8B;IAAQ,CAAC,GAAG,IAAI,CAACH,gBAAgB,CAACZ,GAAG,CAAC;IAC9C,MAAM4B,UAAU,GAAG,CAACb,OAAO,IAAI,CAACA,OAAO,CAACJ,MAAM;IAC9C,IAAIiB,UAAU,EAAE;MACd,IAAI,CAACtD,iBAAiB,CAACgD,IAAI,CAACtB,GAAG,CAACf,QAAQ,CAAC,CAAC,CAAC;MAC3C,IAAI,CAAC4C,UAAU,GAAG,IAAI;IACxB;IACA,OAAOD,UAAU;EACnB;EAEAE,oBAAoBA,CAAA,EAAa;IAC/B,OAAO/E,MAAM,CAACgF,IAAI,CAAC,IAAI,CAAC5D,WAAW,CAAC;EACtC;EAEA6D,KAAKA,CAACC,cAA8B,EAAE;IACpC,MAAMC,cAAc,GAAG,IAAI,CAACJ,oBAAoB,CAAC,CAAC;IAClD,MAAMK,cAAc,GAAGF,cAAc,CAACH,oBAAoB,CAAC,CAAC;IAC5D,MAAMM,oBAAoB,GAAG,IAAAC,oBAAU,EAACH,cAAc,EAAEC,cAAc,CAAC;IACvE,MAAMG,0BAA0B,GAAG,IAAI,CAACjE,QAAQ,CAACkE,MAAM,CAAEvD,CAAC,IAAKoD,oBAAoB,CAAChB,QAAQ,CAACpC,CAAC,CAACL,IAAI,CAACM,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChH,MAAMuD,WAAW,GAAG,CAAC,GAAGP,cAAc,CAAC5D,QAAQ,EAAE,GAAGiE,0BAA0B,CAAC;IAC/E,IAAI,CAACnE,WAAW,GAAG,IAAI,CAACC,sBAAsB,CAACoE,WAAW,CAAC;EAC7D;EAEAC,WAAWA,CAACC,wBAAgC,EAAE1C,GAAQ,EAAO;IAC3D,MAAM2C,QAAQ,GAAG,oCAAoC,IAAI,CAACC,MAAM,CAAC3D,QAAQ,CAAC,CAAC,EAAE;IAC7E,MAAMuB,WAAW,GAAG,IAAI,CAACT,cAAc,CAACC,GAAG,CAAC;IAC5C,IAAI,CAACQ,WAAW,EACd,MAAM,KAAIqC,oBAAQ,EAAC,GAAGF,QAAQ,cAAc3C,GAAG,CAACf,QAAQ,CAAC,CAAC,wCAAwC,CAAC;IACrG,IAAIyD,wBAAwB,KAAK,CAAC,EAAE,OAAOlC,WAAW,CAAC7B,IAAI;IAC3D,IAAI,CAAC6B,WAAW,CAACtB,OAAO,CAACyB,MAAM,EAAE,MAAM,KAAIkC,oBAAQ,EAAC,GAAGF,QAAQ,cAAc3C,GAAG,CAACf,QAAQ,CAAC,CAAC,kBAAkB,CAAC;IAC9G,MAAMkC,MAAM,GAAGX,WAAW,CAACtB,OAAO,CAAC,CAAC,CAAC;IACrC,OAAO,IAAI,CAACuD,WAAW,CAACC,wBAAwB,GAAG,CAAC,EAAEvB,MAAM,CAAC;EAC/D;EAEA2B,QAAQA,CACNC,cAA+B,EAC/BC,SAAwC,EACxCC,SAAS,GAAG,KAAK,EACjBC,aAAsB,EACD;IACrB,MAAMC,QAAQ,GAAInD,GAAQ,IAAMiD,SAAS,GAAGjD,GAAG,CAACoD,aAAa,CAAC,CAAC,GAAGpD,GAAG,CAACf,QAAQ,CAAC,CAAE;IACjF,MAAMoE,KAAK,GAAG,KAAIC,cAAK,EAAgC,CAAC;IACxD,MAAMC,WAAW,GAAGL,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC7E,QAAQ,CAAC,CAACmF,KAAK,CAAC,CAACN,aAAa,CAAC,GAAG,IAAI,CAAC7E,QAAQ;IAC5F,MAAM2C,SAAS,GAAGuC,WAAW,CAC1BxE,GAAG,CAAEC,CAAC,IAAK,IAAAyE,iBAAO,EAAC,CAACzE,CAAC,CAACL,IAAI,EAAE,GAAGK,CAAC,CAACE,OAAO,EAAE,IAAIF,CAAC,CAACK,QAAQ,IAAI,EAAE,CAAC,EAAEL,CAAC,CAACI,SAAS,CAAC,CAAC,CAAC,CAC/EsE,IAAI,CAAC,CAAC;IAET,MAAMC,aAAa,GAAG,IAAAC,gBAAM,EAAC5C,SAAS,EAAE,MAAM,CAAC;IAE/C,MAAM6C,WAAW,GAAI7D,GAAQ,IAA+B;MAC1D,IAAI,CAAC+C,cAAc,IAAI,CAACC,SAAS,EAAE,OAAO1D,SAAS;MACnD,MAAMwE,GAAG,GAAGf,cAAc,CAACgB,mBAAmB,CAAC/D,GAAG,CAAC;MACnD,MAAMgE,QAAQ,GAAGhB,SAAS,CAAChD,GAAG,CAACf,QAAQ,CAAC,CAAC,CAAC;MAC1C,OAAO;QAAE6E,GAAG;QAAEE;MAAS,CAAC;IAC1B,CAAC;IACD,MAAMC,KAAK,GAAGN,aAAa,CAAC5E,GAAG,CAAEC,CAAC,IAAK,KAAIkF,aAAI,EAACf,QAAQ,CAACnE,CAAC,CAAC,EAAE6E,WAAW,CAAC7E,CAAC,CAAC,IAAImE,QAAQ,CAACnE,CAAC,CAAC,CAAC,CAAC;IAE5F,MAAMmF,KAAK,GAAGZ,WAAW,CACtBxE,GAAG,CAAEC,CAAC,IAAK;MACV,MAAMoF,QAAQ,GAAGpF,CAAC,CAACE,OAAO,CAACH,GAAG,CAAEI,CAAC,IAAK,KAAIkF,aAAI,EAAClB,QAAQ,CAACnE,CAAC,CAACL,IAAI,CAAC,EAAEwE,QAAQ,CAAChE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;MACxF,IAAIH,CAAC,CAACI,SAAS,EAAEgF,QAAQ,CAAC9C,IAAI,CAAC,KAAI+C,aAAI,EAAClB,QAAQ,CAACnE,CAAC,CAACL,IAAI,CAAC,EAAEwE,QAAQ,CAACnE,CAAC,CAACI,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC;MAC9F,IAAIJ,CAAC,CAACK,QAAQ,EAAE;QACd,MAAMA,QAAQ,GAAGL,CAAC,CAACK,QAAQ,CAACkD,MAAM,CAAE+B,CAAC,IAAK,CAACtF,CAAC,CAACE,OAAO,CAACqF,IAAI,CAAEpF,CAAC,IAAKA,CAAC,CAACqF,OAAO,CAACF,CAAC,CAAC,CAAC,CAAC;QAC/EjF,QAAQ,CAACN,GAAG,CAAEI,CAAC,IAAKiF,QAAQ,CAAC9C,IAAI,CAAC,KAAI+C,aAAI,EAAClB,QAAQ,CAACnE,CAAC,CAACL,IAAI,CAAC,EAAEwE,QAAQ,CAAChE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;MACzF;MACA,OAAOiF,QAAQ;IACjB,CAAC,CAAC,CACDV,IAAI,CAAC,CAAC;IACTL,KAAK,CAACoB,QAAQ,CAACR,KAAK,CAAC;IACrBZ,KAAK,CAACqB,QAAQ,CAACP,KAAK,CAAC;IACrB,OAAOd,KAAK;EACd;EAEA,IAAIT,MAAMA,CAAA,EAAG;IACX,OAAO+B,0BAAW,CAACC,UAAU,CAAC;MAAE1G,KAAK,EAAE,IAAI,CAACA,KAAK;MAAED,IAAI,EAAE,IAAI,CAACA;IAAK,CAAC,CAAC;EACvE;EAEA,OAAO4G,MAAMA,CAAC5G,IAAY,EAAEC,KAAa,EAAEG,QAA0B,EAAE;IACrE,OAAO,IAAIR,cAAc,CAAC;MACxBI,IAAI;MACJC,KAAK;MACLG;IACF,CAAC,CAAC;EACJ;EAEA,OAAOyG,KAAKA,CAACC,QAAgB,EAAkB;IAC7C,MAAMC,MAAM,GAAGtF,IAAI,CAACoF,KAAK,CAACC,QAAQ,CAAC;IACnC,MAAM/G,KAA0B,GAAG;MACjCC,IAAI,EAAE+G,MAAM,CAAC/G,IAAI;MACjBC,KAAK,EAAE8G,MAAM,CAAC9G,KAAK;MACnBG,QAAQ,EAAE2G,MAAM,CAAC3G,QAAQ,CAACU,GAAG,CAAEmC,GAAG,KAAM;QACtCvC,IAAI,EAAEsG,cAAG,CAACnF,IAAI,CAACoB,GAAG,CAACvC,IAAI,CAAC;QACxBO,OAAO,EAAEgC,GAAG,CAAChC,OAAO,CAACH,GAAG,CAAEI,CAAC,IAAK8F,cAAG,CAACnF,IAAI,CAACX,CAAC,CAAC,CAAC;QAC5CC,SAAS,EAAE8B,GAAG,CAAC9B,SAAS,GAAG6F,cAAG,CAACnF,IAAI,CAACoB,GAAG,CAAC9B,SAAS,CAAC,GAAGE,SAAS;QAC9DD,QAAQ,EAAE6B,GAAG,CAAC7B,QAAQ,GAAG6B,GAAG,CAAC7B,QAAQ,CAACN,GAAG,CAAEI,CAAC,IAAK8F,cAAG,CAACnF,IAAI,CAACX,CAAC,CAAC,CAAC,GAAGG;MAClE,CAAC,CAAC,CAAC;MACHhB,iBAAiB,EAAE0G,MAAM,CAAC1G;IAC5B,CAAC;IACD,OAAO,IAAIT,cAAc,CAACG,KAAK,CAAC;EAClC;AACF;AAACkH,OAAA,CAAAxI,OAAA,GAAAmB,cAAA;AAEM,SAASsH,qBAAqBA,CAAC9G,QAA0B,EAAyB;EACvF,MAAM8E,QAAQ,GAAInD,GAAQ,IAAKA,GAAG,CAACf,QAAQ,CAAC,CAAC;EAC7C,MAAMoE,KAAK,GAAG,KAAIC,cAAK,EAAiB,CAAC;EACzC,MAAMtC,SAAS,GAAG,IAAA4C,gBAAM,EACtBvF,QAAQ,CACLU,GAAG,CAAEC,CAAC,IAAK;IACV,OAAO,IAAAyE,iBAAO,EAAC,CAACzE,CAAC,CAACL,IAAI,EAAE,GAAGK,CAAC,CAACE,OAAO,EAAE,IAAIF,CAAC,CAACK,QAAQ,IAAI,EAAE,CAAC,EAAEL,CAAC,CAACI,SAAS,CAAC,CAAC;EAC5E,CAAC,CAAC,CACDsE,IAAI,CAAC,CAAC,EACT,MACF,CAAC;EACD,MAAMO,KAAK,GAAGjD,SAAS,CAACjC,GAAG,CAAEC,CAAC,IAAK,KAAIkF,aAAI,EAACf,QAAQ,CAACnE,CAAC,CAAC,EAAEmE,QAAQ,CAACnE,CAAC,CAAC,CAAC,CAAC;EACtE,MAAMmF,KAAK,GAAG9F,QAAQ,CACnBU,GAAG,CAAEC,CAAC,IAAK;IACV,MAAMoF,QAAQ,GAAGpF,CAAC,CAACE,OAAO,CAACH,GAAG,CAAEI,CAAC,IAAK,KAAIkF,aAAI,EAAClB,QAAQ,CAACnE,CAAC,CAACL,IAAI,CAAC,EAAEwE,QAAQ,CAAChE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxF,IAAIH,CAAC,CAACI,SAAS,EAAEgF,QAAQ,CAAC9C,IAAI,CAAC,KAAI+C,aAAI,EAAClB,QAAQ,CAACnE,CAAC,CAACL,IAAI,CAAC,EAAEwE,QAAQ,CAACnE,CAAC,CAACI,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC;IAC9F,IAAIJ,CAAC,CAACK,QAAQ,EAAE;MACd,MAAMA,QAAQ,GAAGL,CAAC,CAACK,QAAQ,CAACkD,MAAM,CAAE+B,CAAC,IAAK,CAACtF,CAAC,CAACE,OAAO,CAACqF,IAAI,CAAEpF,CAAC,IAAKA,CAAC,CAACqF,OAAO,CAACF,CAAC,CAAC,CAAC,CAAC;MAC/EjF,QAAQ,CAACN,GAAG,CAAEI,CAAC,IAAKiF,QAAQ,CAAC9C,IAAI,CAAC,KAAI+C,aAAI,EAAClB,QAAQ,CAACnE,CAAC,CAACL,IAAI,CAAC,EAAEwE,QAAQ,CAAChE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACzF;IACA,OAAOiF,QAAQ;EACjB,CAAC,CAAC,CACDV,IAAI,CAAC,CAAC;EACTL,KAAK,CAACoB,QAAQ,CAACR,KAAK,CAAC;EACrBZ,KAAK,CAACqB,QAAQ,CAACP,KAAK,CAAC;EACrB,OAAOd,KAAK;AACd","ignoreList":[]}
@@ -177,22 +177,27 @@ export default class VersionHistory extends BitObject {
177
177
  getGraph(
178
178
  modelComponent?: ModelComponent,
179
179
  laneHeads?: { [hash: string]: string[] },
180
- shortHash = false
180
+ shortHash = false,
181
+ limitVersions?: number
181
182
  ): VersionHistoryGraph {
182
183
  const refToStr = (ref: Ref) => (shortHash ? ref.toShortString() : ref.toString());
183
184
  const graph = new Graph<string | HashMetadata, string>();
184
- const allHashes = this.versions
185
+ const allVersions = limitVersions ? [...this.versions].slice(-limitVersions) : this.versions;
186
+ const allHashes = allVersions
185
187
  .map((v) => compact([v.hash, ...v.parents, ...(v.squashed || []), v.unrelated]))
186
188
  .flat();
187
189
 
190
+ const allHashesUniq = uniqBy(allHashes, 'hash');
191
+
188
192
  const getMetadata = (ref: Ref): HashMetadata | undefined => {
189
193
  if (!modelComponent || !laneHeads) return undefined;
190
194
  const tag = modelComponent.getTagOfRefIfExists(ref);
191
195
  const pointers = laneHeads[ref.toString()];
192
196
  return { tag, pointers };
193
197
  };
194
- const nodes = allHashes.map((v) => new Node(refToStr(v), getMetadata(v) || refToStr(v)));
195
- const edges = this.versions
198
+ const nodes = allHashesUniq.map((v) => new Node(refToStr(v), getMetadata(v) || refToStr(v)));
199
+
200
+ const edges = allVersions
196
201
  .map((v) => {
197
202
  const verEdges = v.parents.map((p) => new Edge(refToStr(v.hash), refToStr(p), 'parent'));
198
203
  if (v.unrelated) verEdges.push(new Edge(refToStr(v.hash), refToStr(v.unrelated), 'unrelated'));
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/objects",
3
- "version": "0.0.68",
3
+ "version": "0.0.69",
4
4
  "homepage": "https://bit.cloud/teambit/scope/objects",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.scope",
8
8
  "name": "objects",
9
- "version": "0.0.68"
9
+ "version": "0.0.69"
10
10
  },
11
11
  "dependencies": {
12
12
  "@pnpm/dependency-path": "900.0.0",
@@ -27,27 +27,27 @@
27
27
  "@teambit/lane-id": "0.0.312",
28
28
  "@teambit/legacy-bit-id": "1.1.2",
29
29
  "@teambit/graph.cleargraph": "0.0.11",
30
- "@teambit/cli": "0.0.1138",
30
+ "@teambit/cli": "0.0.1139",
31
31
  "@teambit/legacy.utils": "0.0.19",
32
- "@teambit/harmony.modules.get-basic-log": "0.0.42",
33
- "@teambit/component.snap-distance": "0.0.42",
34
- "@teambit/config-store": "0.0.18",
32
+ "@teambit/harmony.modules.get-basic-log": "0.0.43",
33
+ "@teambit/component.snap-distance": "0.0.43",
34
+ "@teambit/config-store": "0.0.19",
35
35
  "@teambit/legacy.cli.error": "0.0.16",
36
36
  "@teambit/legacy.constants": "0.0.11",
37
37
  "@teambit/legacy.logger": "0.0.16",
38
- "@teambit/legacy.scope": "0.0.41",
38
+ "@teambit/legacy.scope": "0.0.42",
39
39
  "@teambit/toolbox.crypto.sha1": "0.0.7",
40
- "@teambit/component.sources": "0.0.93",
40
+ "@teambit/component.sources": "0.0.94",
41
41
  "@teambit/harmony.modules.feature-toggle": "0.0.19",
42
42
  "@teambit/legacy-component-log": "0.0.407",
43
- "@teambit/legacy.consumer-component": "0.0.42",
44
- "@teambit/legacy.consumer-config": "0.0.41",
45
- "@teambit/legacy.extension-data": "0.0.43",
43
+ "@teambit/legacy.consumer-component": "0.0.43",
44
+ "@teambit/legacy.consumer-config": "0.0.42",
45
+ "@teambit/legacy.extension-data": "0.0.44",
46
46
  "@teambit/pkg.modules.semver-helper": "0.0.8",
47
47
  "@teambit/toolbox.array.duplications-finder": "0.0.3",
48
48
  "@teambit/bit.get-bit-version": "0.0.5",
49
- "@teambit/semantics.doc-parser": "0.0.49",
50
- "@teambit/graph": "1.0.561",
49
+ "@teambit/semantics.doc-parser": "0.0.50",
50
+ "@teambit/graph": "1.0.562",
51
51
  "@teambit/harmony.modules.concurrency": "0.0.12",
52
52
  "@teambit/toolbox.promise.map-pool": "0.0.6",
53
53
  "@teambit/harmony.modules.in-memory-cache": "0.0.13",