@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
|
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 =
|
221
|
-
const edges =
|
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":"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","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
|
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 =
|
195
|
-
|
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.
|
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.
|
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.
|
30
|
+
"@teambit/cli": "0.0.1139",
|
31
31
|
"@teambit/legacy.utils": "0.0.19",
|
32
|
-
"@teambit/harmony.modules.get-basic-log": "0.0.
|
33
|
-
"@teambit/component.snap-distance": "0.0.
|
34
|
-
"@teambit/config-store": "0.0.
|
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.
|
38
|
+
"@teambit/legacy.scope": "0.0.42",
|
39
39
|
"@teambit/toolbox.crypto.sha1": "0.0.7",
|
40
|
-
"@teambit/component.sources": "0.0.
|
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.
|
44
|
-
"@teambit/legacy.consumer-config": "0.0.
|
45
|
-
"@teambit/legacy.extension-data": "0.0.
|
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.
|
50
|
-
"@teambit/graph": "1.0.
|
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",
|
File without changes
|