@teambit/objects 0.0.363 → 0.0.364

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.
@@ -56,10 +56,10 @@ export default class Lane extends BitObject {
56
56
  changeScope(scope: string): void;
57
57
  refs(): Ref[];
58
58
  validateBeforePersisting(str: string): void;
59
- toObject(): import("lodash").Dictionary<string | boolean | string[] | Log | {
59
+ toObject(): import("lodash").Dictionary<string | boolean | string[] | {
60
60
  scope: string;
61
61
  name: string;
62
- } | {
62
+ } | Log | {
63
63
  isDeleted?: true | undefined;
64
64
  id: {
65
65
  scope: string;
@@ -146,21 +146,30 @@ class VersionHistory extends _objects().BitObject {
146
146
  if (!item) return {
147
147
  missing: [start.toString()]
148
148
  };
149
- const allHashes = [item.hash.toString()];
149
+ const hashSet = new Set();
150
+ const allHashes = [];
150
151
  const missing = [];
151
- const addHashesRecursively = ver => {
152
- ver.parents.forEach(parent => {
153
- if (allHashes.includes(parent.toString())) return;
152
+
153
+ // Use iterative approach with a stack to avoid stack overflow on deep histories
154
+ const stack = [item];
155
+ hashSet.add(item.hash.toString());
156
+ while (stack.length > 0) {
157
+ const ver = stack.pop();
158
+ const verHash = ver.hash.toString();
159
+ allHashes.push(verHash);
160
+ for (const parent of ver.parents) {
161
+ const parentHash = parent.toString();
162
+ if (hashSet.has(parentHash)) continue;
154
163
  const parentVer = this.getVersionData(parent);
155
164
  if (!parentVer) {
156
- missing.push(parent.toString());
157
- return;
165
+ missing.push(parentHash);
166
+ continue;
158
167
  }
159
- allHashes.push(parent.toString());
160
- if (parentVer.parents.length) addHashesRecursively(parentVer);
161
- });
162
- };
163
- addHashesRecursively(item);
168
+ // Mark as processed before pushing to prevent duplicate stack entries
169
+ hashSet.add(parentHash);
170
+ stack.push(parentVer);
171
+ }
172
+ }
164
173
  return {
165
174
  found: allHashes,
166
175
  missing
@@ -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","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 type 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":[]}
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","hashSet","Set","allHashes","stack","add","ver","pop","verHash","push","parent","parentHash","has","parentVer","found","isRefPartOfHistory","startFrom","searchFor","includes","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 type 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 hashSet = new Set<string>();\n const allHashes: string[] = [];\n const missing: string[] = [];\n\n // Use iterative approach with a stack to avoid stack overflow on deep histories\n const stack: VersionParents[] = [item];\n hashSet.add(item.hash.toString());\n\n while (stack.length > 0) {\n const ver = stack.pop()!;\n const verHash = ver.hash.toString();\n allHashes.push(verHash);\n\n for (const parent of ver.parents) {\n const parentHash = parent.toString();\n if (hashSet.has(parentHash)) continue;\n const parentVer = this.getVersionData(parent);\n if (!parentVer) {\n missing.push(parentHash);\n continue;\n }\n // Mark as processed before pushing to prevent duplicate stack entries\n hashSet.add(parentHash);\n stack.push(parentVer);\n }\n }\n\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":[]}
@@ -187,12 +187,12 @@ export default class Version extends BitObject {
187
187
  static depEdgeFromArray(depEdgeArr: string[]): DepEdge;
188
188
  static flattenedEdgeToSource(flattenedEdges?: DepEdge[]): Source | undefined;
189
189
  static dependenciesGraphToSource(dependenciesGraph?: DependenciesGraph): Source | undefined;
190
- toObject(): import("lodash").Dictionary<string | boolean | Record<string, any> | string[] | Record<string, any>[] | Doclet[] | {
190
+ toObject(): import("lodash").Dictionary<string | boolean | Record<string, any> | string[] | Record<string, any>[] | ComponentOverridesData | {
191
191
  file: any;
192
192
  relativePath: any;
193
193
  name: any;
194
194
  test: any;
195
- }[] | import("@teambit/component-id").ComponentIdObj[] | {
195
+ }[] | Doclet[] | import("@teambit/component-id").ComponentIdObj[] | {
196
196
  extensionId: ComponentID | import("@teambit/component-id").ComponentIdObj | undefined;
197
197
  config: {
198
198
  [key: string]: any;
@@ -209,7 +209,7 @@ export default class Version extends BitObject {
209
209
  [key: string]: string;
210
210
  } | {
211
211
  [key: string]: string;
212
- } | ComponentOverridesData | Log[] | VersionOrigin | {
212
+ } | Log[] | VersionOrigin | {
213
213
  message: string;
214
214
  date: string;
215
215
  username: string | undefined;
@@ -116,21 +116,33 @@ export default class VersionHistory extends BitObject {
116
116
  getAllHashesFrom(start: Ref): { found?: string[]; missing?: string[] } {
117
117
  const item = this.getVersionData(start);
118
118
  if (!item) return { missing: [start.toString()] };
119
- const allHashes: string[] = [item.hash.toString()];
119
+ const hashSet = new Set<string>();
120
+ const allHashes: string[] = [];
120
121
  const missing: string[] = [];
121
- const addHashesRecursively = (ver: VersionParents) => {
122
- ver.parents.forEach((parent) => {
123
- if (allHashes.includes(parent.toString())) return;
122
+
123
+ // Use iterative approach with a stack to avoid stack overflow on deep histories
124
+ const stack: VersionParents[] = [item];
125
+ hashSet.add(item.hash.toString());
126
+
127
+ while (stack.length > 0) {
128
+ const ver = stack.pop()!;
129
+ const verHash = ver.hash.toString();
130
+ allHashes.push(verHash);
131
+
132
+ for (const parent of ver.parents) {
133
+ const parentHash = parent.toString();
134
+ if (hashSet.has(parentHash)) continue;
124
135
  const parentVer = this.getVersionData(parent);
125
136
  if (!parentVer) {
126
- missing.push(parent.toString());
127
- return;
137
+ missing.push(parentHash);
138
+ continue;
128
139
  }
129
- allHashes.push(parent.toString());
130
- if (parentVer.parents.length) addHashesRecursively(parentVer);
131
- });
132
- };
133
- addHashesRecursively(item);
140
+ // Mark as processed before pushing to prevent duplicate stack entries
141
+ hashSet.add(parentHash);
142
+ stack.push(parentVer);
143
+ }
144
+ }
145
+
134
146
  return { found: allHashes, missing };
135
147
  }
136
148
 
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/objects",
3
- "version": "0.0.363",
3
+ "version": "0.0.364",
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.363"
9
+ "version": "0.0.364"
10
10
  },
11
11
  "dependencies": {
12
12
  "lodash": "4.17.21",
@@ -21,13 +21,10 @@
21
21
  "semver": "7.7.1",
22
22
  "uuid": "8.3.2",
23
23
  "@teambit/harmony": "0.4.7",
24
- "@teambit/cli": "0.0.1295",
25
24
  "@teambit/component-id": "1.2.4",
26
- "@teambit/component.snap-distance": "0.0.95",
27
25
  "@teambit/graph.cleargraph": "0.0.11",
28
26
  "@teambit/harmony.modules.concurrency": "0.0.23",
29
27
  "@teambit/legacy.logger": "0.0.33",
30
- "@teambit/legacy.scope": "0.0.94",
31
28
  "@teambit/toolbox.promise.map-pool": "0.0.12",
32
29
  "@teambit/legacy.constants": "0.0.22",
33
30
  "@teambit/legacy.utils": "0.0.32",
@@ -37,20 +34,23 @@
37
34
  "@teambit/harmony.modules.in-memory-cache": "0.0.26",
38
35
  "@teambit/toolbox.fs.remove-empty-dir": "0.0.11",
39
36
  "@teambit/lane-id": "0.0.312",
40
- "@teambit/harmony.modules.get-basic-log": "0.0.95",
41
- "@teambit/config-store": "0.0.175",
42
37
  "@teambit/legacy.cli.error": "0.0.33",
43
- "@teambit/component.sources": "0.0.146",
44
38
  "@teambit/legacy-bit-id": "1.1.3",
45
39
  "@teambit/legacy-component-log": "0.0.415",
46
- "@teambit/legacy.consumer-component": "0.0.95",
47
- "@teambit/legacy.consumer-config": "0.0.94",
48
- "@teambit/legacy.extension-data": "0.0.96",
49
40
  "@teambit/pkg.modules.semver-helper": "0.0.20",
50
41
  "@teambit/toolbox.array.duplications-finder": "0.0.3",
51
42
  "@teambit/bit.get-bit-version": "0.0.13",
52
- "@teambit/semantics.doc-parser": "0.0.102",
53
- "@teambit/graph": "1.0.856"
43
+ "@teambit/cli": "0.0.1296",
44
+ "@teambit/component.snap-distance": "0.0.96",
45
+ "@teambit/graph": "1.0.857",
46
+ "@teambit/legacy.scope": "0.0.95",
47
+ "@teambit/harmony.modules.get-basic-log": "0.0.96",
48
+ "@teambit/config-store": "0.0.176",
49
+ "@teambit/component.sources": "0.0.147",
50
+ "@teambit/legacy.consumer-component": "0.0.96",
51
+ "@teambit/legacy.consumer-config": "0.0.95",
52
+ "@teambit/legacy.extension-data": "0.0.97",
53
+ "@teambit/semantics.doc-parser": "0.0.103"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@types/lodash": "4.14.165",