@teambit/objects 0.0.735 → 0.0.737

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.
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ export { BitObject, BitRawObject, Ref, Repository } from './objects';
3
3
  export type { ObjectWithType, ObjectsWithType } from './objects';
4
4
  export { ComponentLog, ScopeListItem, AddVersionOpts, ComponentProps, VERSION_ZERO } from './models/model-component';
5
5
  export { ComponentItem, IndexType, LaneItem } from './objects/scope-index';
6
- export { ObjectItem, ObjectList, ObjectItemsStream } from './objects/object-list';
6
+ export { ObjectItem, ObjectList, ObjectItemsStream, RawObjectsMap } from './objects/object-list';
7
7
  export { BitObjectList } from './objects/bit-object-list';
8
8
  export { LaneComponent, Log as LaneLog, LaneReadmeComponent } from './models/lane';
9
9
  export { DependenciesGraph, type PackagesMap, type PackageAttributes, type DependencyEdge, type DependencyNeighbour, } from './models/dependencies-graph';
package/dist/index.js CHANGED
@@ -177,6 +177,12 @@ Object.defineProperty(exports, "ObjectsReadableGenerator", {
177
177
  return _objectsReadableGenerator().ObjectsReadableGenerator;
178
178
  }
179
179
  });
180
+ Object.defineProperty(exports, "RawObjectsMap", {
181
+ enumerable: true,
182
+ get: function () {
183
+ return _objectList().RawObjectsMap;
184
+ }
185
+ });
180
186
  Object.defineProperty(exports, "Ref", {
181
187
  enumerable: true,
182
188
  get: function () {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_models","data","require","_objects","_modelComponent","_scopeIndex","_objectList","_bitObjectList","_lane","_dependenciesGraph","_version","_objectsReadableGenerator","_versionHistory","_laneHistory","_objectListToGraph","_objects2","_default","exports","default","ObjectsAspect"],"sources":["index.ts"],"sourcesContent":["export {\n ModelComponent,\n ScopeMeta,\n Source,\n Version,\n Symlink,\n Lane,\n ExportMetadata,\n VersionHistory,\n LaneHistory,\n} from './models';\nexport { BitObject, BitRawObject, Ref, Repository } from './objects';\nexport type { ObjectWithType, ObjectsWithType } from './objects';\nexport { ComponentLog, ScopeListItem, AddVersionOpts, ComponentProps, VERSION_ZERO } from './models/model-component';\nexport { ComponentItem, IndexType, LaneItem } from './objects/scope-index';\nexport { ObjectItem, ObjectList, ObjectItemsStream } from './objects/object-list';\nexport { BitObjectList } from './objects/bit-object-list';\nexport { LaneComponent, Log as LaneLog, LaneReadmeComponent } from './models/lane';\nexport {\n DependenciesGraph,\n type PackagesMap,\n type PackageAttributes,\n type DependencyEdge,\n type DependencyNeighbour,\n} from './models/dependencies-graph';\nexport { DepEdge, DepEdgeType, SourceFileModel, Log, ObjectsLoader } from './models/version';\nexport { ComponentWithCollectOptions, ObjectsReadableGenerator } from './objects/objects-readable-generator';\nexport { ScopeIndex } from './objects/scope-index';\nexport { VersionHistoryGraph } from './models/version-history';\nexport { VersionParents, versionParentsToGraph } from './models/version-history';\nexport { HistoryItem } from './models/lane-history';\nexport { IdGraph, objectListToGraph, bitObjectListToGraph } from './objects/object-list-to-graph';\n\nimport { ObjectsAspect } from './objects.aspect';\n\nexport type { ObjectsMain } from './objects.main.runtime';\nexport default ObjectsAspect;\nexport { ObjectsAspect };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAAA,QAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,OAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAWA,SAAAE,SAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,QAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAG,gBAAA;EAAA,MAAAH,IAAA,GAAAC,OAAA;EAAAE,eAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,YAAA;EAAA,MAAAJ,IAAA,GAAAC,OAAA;EAAAG,WAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAK,YAAA;EAAA,MAAAL,IAAA,GAAAC,OAAA;EAAAI,WAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAM,eAAA;EAAA,MAAAN,IAAA,GAAAC,OAAA;EAAAK,cAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAO,MAAA;EAAA,MAAAP,IAAA,GAAAC,OAAA;EAAAM,KAAA,YAAAA,CAAA;IAAA,OAAAP,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAQ,mBAAA;EAAA,MAAAR,IAAA,GAAAC,OAAA;EAAAO,kBAAA,YAAAA,CAAA;IAAA,OAAAR,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAOA,SAAAS,SAAA;EAAA,MAAAT,IAAA,GAAAC,OAAA;EAAAQ,QAAA,YAAAA,CAAA;IAAA,OAAAT,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAU,0BAAA;EAAA,MAAAV,IAAA,GAAAC,OAAA;EAAAS,yBAAA,YAAAA,CAAA;IAAA,OAAAV,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAW,gBAAA;EAAA,MAAAX,IAAA,GAAAC,OAAA;EAAAU,eAAA,YAAAA,CAAA;IAAA,OAAAX,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAY,aAAA;EAAA,MAAAZ,IAAA,GAAAC,OAAA;EAAAW,YAAA,YAAAA,CAAA;IAAA,OAAAZ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAa,mBAAA;EAAA,MAAAb,IAAA,GAAAC,OAAA;EAAAY,kBAAA,YAAAA,CAAA;IAAA,OAAAb,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAc,UAAA;EAAA,MAAAd,IAAA,GAAAC,OAAA;EAAAa,SAAA,YAAAA,CAAA;IAAA,OAAAd,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAiD,IAAAe,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAGlCC,yBAAa","ignoreList":[]}
1
+ {"version":3,"names":["_models","data","require","_objects","_modelComponent","_scopeIndex","_objectList","_bitObjectList","_lane","_dependenciesGraph","_version","_objectsReadableGenerator","_versionHistory","_laneHistory","_objectListToGraph","_objects2","_default","exports","default","ObjectsAspect"],"sources":["index.ts"],"sourcesContent":["export {\n ModelComponent,\n ScopeMeta,\n Source,\n Version,\n Symlink,\n Lane,\n ExportMetadata,\n VersionHistory,\n LaneHistory,\n} from './models';\nexport { BitObject, BitRawObject, Ref, Repository } from './objects';\nexport type { ObjectWithType, ObjectsWithType } from './objects';\nexport { ComponentLog, ScopeListItem, AddVersionOpts, ComponentProps, VERSION_ZERO } from './models/model-component';\nexport { ComponentItem, IndexType, LaneItem } from './objects/scope-index';\nexport { ObjectItem, ObjectList, ObjectItemsStream, RawObjectsMap } from './objects/object-list';\nexport { BitObjectList } from './objects/bit-object-list';\nexport { LaneComponent, Log as LaneLog, LaneReadmeComponent } from './models/lane';\nexport {\n DependenciesGraph,\n type PackagesMap,\n type PackageAttributes,\n type DependencyEdge,\n type DependencyNeighbour,\n} from './models/dependencies-graph';\nexport { DepEdge, DepEdgeType, SourceFileModel, Log, ObjectsLoader } from './models/version';\nexport { ComponentWithCollectOptions, ObjectsReadableGenerator } from './objects/objects-readable-generator';\nexport { ScopeIndex } from './objects/scope-index';\nexport { VersionHistoryGraph } from './models/version-history';\nexport { VersionParents, versionParentsToGraph } from './models/version-history';\nexport { HistoryItem } from './models/lane-history';\nexport { IdGraph, objectListToGraph, bitObjectListToGraph } from './objects/object-list-to-graph';\n\nimport { ObjectsAspect } from './objects.aspect';\n\nexport type { ObjectsMain } from './objects.main.runtime';\nexport default ObjectsAspect;\nexport { ObjectsAspect };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAAA,QAAA;EAAA,MAAAC,IAAA,GAAAC,OAAA;EAAAF,OAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAWA,SAAAE,SAAA;EAAA,MAAAF,IAAA,GAAAC,OAAA;EAAAC,QAAA,YAAAA,CAAA;IAAA,OAAAF,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAG,gBAAA;EAAA,MAAAH,IAAA,GAAAC,OAAA;EAAAE,eAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,YAAA;EAAA,MAAAJ,IAAA,GAAAC,OAAA;EAAAG,WAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAK,YAAA;EAAA,MAAAL,IAAA,GAAAC,OAAA;EAAAI,WAAA,YAAAA,CAAA;IAAA,OAAAL,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAM,eAAA;EAAA,MAAAN,IAAA,GAAAC,OAAA;EAAAK,cAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAO,MAAA;EAAA,MAAAP,IAAA,GAAAC,OAAA;EAAAM,KAAA,YAAAA,CAAA;IAAA,OAAAP,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAQ,mBAAA;EAAA,MAAAR,IAAA,GAAAC,OAAA;EAAAO,kBAAA,YAAAA,CAAA;IAAA,OAAAR,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAOA,SAAAS,SAAA;EAAA,MAAAT,IAAA,GAAAC,OAAA;EAAAQ,QAAA,YAAAA,CAAA;IAAA,OAAAT,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAU,0BAAA;EAAA,MAAAV,IAAA,GAAAC,OAAA;EAAAS,yBAAA,YAAAA,CAAA;IAAA,OAAAV,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAW,gBAAA;EAAA,MAAAX,IAAA,GAAAC,OAAA;EAAAU,eAAA,YAAAA,CAAA;IAAA,OAAAX,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAY,aAAA;EAAA,MAAAZ,IAAA,GAAAC,OAAA;EAAAW,YAAA,YAAAA,CAAA;IAAA,OAAAZ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAa,mBAAA;EAAA,MAAAb,IAAA,GAAAC,OAAA;EAAAY,kBAAA,YAAAA,CAAA;IAAA,OAAAb,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAc,UAAA;EAAA,MAAAd,IAAA,GAAAC,OAAA;EAAAa,SAAA,YAAAA,CAAA;IAAA,OAAAd,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAiD,IAAAe,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAGlCC,yBAAa","ignoreList":[]}
@@ -67,8 +67,11 @@ export declare const VERSION_ZERO = "0.0.0";
67
67
  export default class Component extends BitObject {
68
68
  scope: string;
69
69
  name: string;
70
- versions: Versions;
71
- orphanedVersions: Versions;
70
+ /**
71
+ * read-only from outside, so every write goes through a method of this class, which drops the tags index.
72
+ */
73
+ readonly versions: Readonly<Versions>;
74
+ readonly orphanedVersions: Readonly<Versions>;
72
75
  lang: string;
73
76
  /**
74
77
  * @deprecated moved to the Version object inside teambit/deprecation aspect
@@ -105,12 +108,15 @@ export default class Component extends BitObject {
105
108
  detachedHeads: DetachedHeads;
106
109
  private divergeData?;
107
110
  private _populateVersionHistoryMutex?;
108
- private lastFoundTag?;
109
111
  constructor(props: ComponentProps);
110
112
  private get populateVersionHistoryMutex();
113
+ private get writableVersions();
114
+ private get writableOrphanedVersions();
111
115
  get versionArray(): Ref[];
112
116
  setVersion(tag: string, ref: Ref): void;
113
117
  setOrphanedVersion(tag: string, ref: Ref): void;
118
+ clearOrphanedVersions(): void;
119
+ moveVersionToOrphaned(tag: string): void;
114
120
  getRef(version: string): Ref | null;
115
121
  getHeadStr(): string | null;
116
122
  getHead(): Ref | undefined;
@@ -193,6 +193,23 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
193
193
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
194
194
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
195
195
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
196
+ /**
197
+ * the tag of each hash. a later tag of the same hash overrides an earlier one, so pass the maps by ascending
198
+ * precedence. within a map the newest tag wins, as tags keep insertion order.
199
+ */
200
+ function indexTagsByHash(...versionsMaps) {
201
+ const tagsByHash = new Map();
202
+ for (const versions of versionsMaps) {
203
+ for (const tag in versions) tagsByHash.set(versions[tag].toString(), tag);
204
+ }
205
+ return tagsByHash;
206
+ }
207
+
208
+ /**
209
+ * the index of `getTagOfRefIfExists` per component, built on demand. kept off the component itself, so it's not
210
+ * serialized with it (e.g. by `bit cat-scope --json`).
211
+ */
212
+ const tagsByHashIndex = new WeakMap();
196
213
  const VERSION_ZERO = exports.VERSION_ZERO = '0.0.0';
197
214
 
198
215
  /**
@@ -205,6 +222,9 @@ class Component extends _objects().BitObject {
205
222
  super();
206
223
  _defineProperty(this, "scope", void 0);
207
224
  _defineProperty(this, "name", void 0);
225
+ /**
226
+ * read-only from outside, so every write goes through a method of this class, which drops the tags index.
227
+ */
208
228
  _defineProperty(this, "versions", void 0);
209
229
  _defineProperty(this, "orphanedVersions", void 0);
210
230
  _defineProperty(this, "lang", void 0);
@@ -246,7 +266,6 @@ class Component extends _objects().BitObject {
246
266
  _defineProperty(this, "detachedHeads", void 0);
247
267
  _defineProperty(this, "divergeData", void 0);
248
268
  _defineProperty(this, "_populateVersionHistoryMutex", void 0);
249
- _defineProperty(this, "lastFoundTag", void 0);
250
269
  if (!props.name) throw new TypeError('Model Component constructor expects to get a name parameter');
251
270
  if (!props.scope) {
252
271
  throw new (_legacy6().BitIdCompIdError)(props.name);
@@ -270,18 +289,36 @@ class Component extends _objects().BitObject {
270
289
  }
271
290
  return this._populateVersionHistoryMutex;
272
291
  }
292
+ get writableVersions() {
293
+ return this.versions;
294
+ }
295
+ get writableOrphanedVersions() {
296
+ return this.orphanedVersions;
297
+ }
273
298
  get versionArray() {
274
299
  return Object.values(this.versions);
275
300
  }
276
301
  setVersion(tag, ref) {
277
- this.versions[tag] = ref;
278
- delete this.orphanedVersions[tag]; // just in case it's there.
302
+ this.writableVersions[tag] = ref;
303
+ delete this.writableOrphanedVersions[tag]; // just in case it's there.
304
+ tagsByHashIndex.delete(this);
279
305
  }
280
306
  setOrphanedVersion(tag, ref) {
281
307
  if (this.versions[tag]) {
282
308
  throw new Error(`unable to save orphanedVersion "${tag}" for "${this.id()}" because this tag is already part of the versions prop`);
283
309
  }
284
- this.orphanedVersions[tag] = ref;
310
+ this.writableOrphanedVersions[tag] = ref;
311
+ tagsByHashIndex.delete(this);
312
+ }
313
+ clearOrphanedVersions() {
314
+ Object.keys(this.orphanedVersions).forEach(tag => delete this.writableOrphanedVersions[tag]);
315
+ tagsByHashIndex.delete(this);
316
+ }
317
+ moveVersionToOrphaned(tag) {
318
+ const ref = this.versions[tag];
319
+ if (!ref) throw new Error(`moveVersionToOrphaned failed finding version ${tag} of ${this.id()}`);
320
+ delete this.writableVersions[tag];
321
+ this.setOrphanedVersion(tag, ref);
285
322
  }
286
323
  getRef(version) {
287
324
  if ((0, _componentVersion().isTag)(version)) {
@@ -715,18 +752,14 @@ class Component extends _objects().BitObject {
715
752
  }));
716
753
  }
717
754
  getTagOfRefIfExists(ref) {
718
- // the same ref (usually the head) is looked up many times per command, and each scan has to list all the tags.
719
- // the last hit is re-checked against the current versions, so it can't go stale when versions change. only hits
720
- // in `versions` are remembered, so they keep their precedence over orphaned versions.
721
- if (this.lastFoundTag && this.versions[this.lastFoundTag]?.isEqual(ref)) return this.lastFoundTag;
722
- // search from the newest tag. tags are kept in insertion order and the head is usually the latest one.
723
- const findIn = versions => (0, _lodash().findLastKey)(versions, versionRef => versionRef.isEqual(ref));
724
- const tag = findIn(this.versions);
725
- if (tag) {
726
- this.lastFoundTag = tag;
727
- return tag;
728
- }
729
- return findIn(this.orphanedVersions);
755
+ // called for every version of a history walk, so it's a lookup in an index rather than a scan of all the tags.
756
+ // a tag in `versions` takes precedence over an orphaned one.
757
+ let tagsByHash = tagsByHashIndex.get(this);
758
+ if (!tagsByHash) {
759
+ tagsByHash = indexTagsByHash(this.orphanedVersions, this.versions);
760
+ tagsByHashIndex.set(this, tagsByHash);
761
+ }
762
+ return tagsByHash.get(ref.toString());
730
763
  }
731
764
  getTag(version) {
732
765
  if ((0, _componentVersion().isTag)(version)) return version;
@@ -1026,7 +1059,8 @@ consider using --ignore-missing-artifacts flag if you're sure the artifacts are
1026
1059
  removeVersion(version) {
1027
1060
  const objectRef = this.getRef(version);
1028
1061
  if (!objectRef) throw new Error(`removeVersion failed finding version ${version}`);
1029
- delete this.versions[version];
1062
+ delete this.writableVersions[version];
1063
+ tagsByHashIndex.delete(this);
1030
1064
  if (this.state.versions && this.state.versions[version]) delete this.state.versions[version];
1031
1065
  return objectRef;
1032
1066
  }