@teambit/objects 0.0.702 → 0.0.704
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/objects/object-list-to-graph.d.ts +3 -3
- package/dist/objects/object-list-to-graph.js +3 -13
- package/dist/objects/object-list-to-graph.js.map +1 -1
- package/dist/objects/object-list.d.ts +23 -0
- package/dist/objects/object-list.js +58 -12
- package/dist/objects/object-list.js.map +1 -1
- package/dist/objects/repository.d.ts +22 -3
- package/dist/objects/repository.js +99 -32
- package/dist/objects/repository.js.map +1 -1
- package/dist/objects/repository.spec.js +115 -0
- package/dist/objects/repository.spec.js.map +1 -1
- package/objects/object-list-to-graph.ts +7 -10
- package/objects/object-list.ts +51 -14
- package/objects/repository.spec.ts +102 -0
- package/objects/repository.ts +85 -23
- package/package.json +26 -27
- /package/dist/{preview-1790958601962.js → preview-1790967211144.js} +0 -0
|
@@ -2,10 +2,10 @@ import { Graph, Node, Edge } from '@teambit/graph.cleargraph';
|
|
|
2
2
|
import type { ComponentID } from '@teambit/component-id';
|
|
3
3
|
import type { ObjectList } from './object-list';
|
|
4
4
|
import type { BitObjectList } from './bit-object-list';
|
|
5
|
-
import { Dependency } from '@teambit/graph';
|
|
6
5
|
type BitIdNode = Node<ComponentID>;
|
|
7
|
-
type
|
|
8
|
-
|
|
6
|
+
type DependencyType = 'runtime' | 'dev' | 'peer';
|
|
7
|
+
type DependencyEdge = Edge<DependencyType>;
|
|
8
|
+
export declare class IdGraph extends Graph<ComponentID, DependencyType> {
|
|
9
9
|
constructor(nodes?: BitIdNode[], edges?: DependencyEdge[]);
|
|
10
10
|
}
|
|
11
11
|
export declare function objectListToGraph(objectList: ObjectList): Promise<IdGraph>;
|
|
@@ -27,13 +27,6 @@ function _component() {
|
|
|
27
27
|
};
|
|
28
28
|
return data;
|
|
29
29
|
}
|
|
30
|
-
function _graph2() {
|
|
31
|
-
const data = require("@teambit/graph");
|
|
32
|
-
_graph2 = function () {
|
|
33
|
-
return data;
|
|
34
|
-
};
|
|
35
|
-
return data;
|
|
36
|
-
}
|
|
37
30
|
class IdGraph extends _graph().Graph {
|
|
38
31
|
constructor(nodes = [], edges = []) {
|
|
39
32
|
super(nodes, edges);
|
|
@@ -77,12 +70,9 @@ async function bitObjectListToGraph(bitObjectsList) {
|
|
|
77
70
|
nodes.push(new (_graph().Node)(depIdStr, depId));
|
|
78
71
|
edges.push(new (_graph().Edge)(idStr, depIdStr, edge));
|
|
79
72
|
};
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
dependencies.forEach(depId => addDep(depId, runTime));
|
|
84
|
-
[...devDependencies, ...extensionDependencies].forEach(depId => addDep(depId, dev));
|
|
85
|
-
peerDependencies.forEach(depId => addDep(depId, peer));
|
|
73
|
+
dependencies.forEach(depId => addDep(depId, 'runtime'));
|
|
74
|
+
[...devDependencies, ...extensionDependencies].forEach(depId => addDep(depId, 'dev'));
|
|
75
|
+
peerDependencies.forEach(depId => addDep(depId, 'peer'));
|
|
86
76
|
});
|
|
87
77
|
}));
|
|
88
78
|
const uniqNodes = (0, _lodash().uniqBy)(nodes, 'id');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_graph","data","require","_lodash","_component","
|
|
1
|
+
{"version":3,"names":["_graph","data","require","_lodash","_component","IdGraph","Graph","constructor","nodes","edges","exports","objectListToGraph","objectList","bitObjectsList","toBitObjects","bitObjectListToGraph","exportMetadata","getExportMetadata","components","getComponents","versions","getVersions","Promise","all","map","component","compFromMetadata","exportVersions","find","c","id","isEqualWithoutVersion","toComponentId","startFrom","head","versionsInfo","getAllVersionsInfo","modelComponent","versionObjects","throws","forEach","versionInfo","changeVersion","tag","ref","toString","idStr","push","Node","version","dependencies","devDependencies","peerDependencies","extensionDependencies","depsIdsGroupedByType","addDep","depId","edge","depIdStr","Edge","uniqNodes","uniqBy","idGraph"],"sources":["object-list-to-graph.ts"],"sourcesContent":["import { Graph, Node, Edge } from '@teambit/graph.cleargraph';\nimport { uniqBy } from 'lodash';\nimport type { ComponentID } from '@teambit/component-id';\nimport type { ObjectList } from './object-list';\nimport type { BitObjectList } from './bit-object-list';\nimport { getAllVersionsInfo } from '@teambit/component.snap-distance';\n\ntype BitIdNode = Node<ComponentID>;\ntype DependencyType = 'runtime' | 'dev' | 'peer';\ntype DependencyEdge = Edge<DependencyType>;\n\nexport class IdGraph extends Graph<ComponentID, DependencyType> {\n constructor(nodes: BitIdNode[] = [], edges: DependencyEdge[] = []) {\n super(nodes, edges);\n }\n}\n\nexport async function objectListToGraph(objectList: ObjectList): Promise<IdGraph> {\n const bitObjectsList = await objectList.toBitObjects();\n\n return bitObjectListToGraph(bitObjectsList);\n}\n\nexport async function bitObjectListToGraph(bitObjectsList: BitObjectList): Promise<IdGraph> {\n const exportMetadata = bitObjectsList.getExportMetadata();\n const components = bitObjectsList.getComponents();\n const versions = bitObjectsList.getVersions();\n const nodes: BitIdNode[] = [];\n const edges: DependencyEdge[] = [];\n await Promise.all(\n components.map(async (component) => {\n const compFromMetadata = exportMetadata?.exportVersions.find((c) =>\n c.id.isEqualWithoutVersion(component.toComponentId())\n );\n const startFrom = compFromMetadata?.head;\n const versionsInfo = await getAllVersionsInfo({\n modelComponent: component,\n versionObjects: versions,\n startFrom,\n throws: false,\n });\n versionsInfo.forEach((versionInfo) => {\n const id = component.toComponentId().changeVersion(versionInfo.tag || versionInfo.ref.toString());\n const idStr = id.toString();\n nodes.push(new Node(idStr, id));\n if (!versionInfo.version) {\n return;\n }\n const { dependencies, devDependencies, peerDependencies, extensionDependencies } =\n versionInfo.version.depsIdsGroupedByType;\n const addDep = (depId: ComponentID, edge: DependencyType) => {\n const depIdStr = depId.toString();\n nodes.push(new Node(depIdStr, depId));\n edges.push(new Edge(idStr, depIdStr, edge));\n };\n dependencies.forEach((depId) => addDep(depId, 'runtime'));\n [...devDependencies, ...extensionDependencies].forEach((depId) => addDep(depId, 'dev'));\n peerDependencies.forEach((depId) => addDep(depId, 'peer'));\n });\n })\n );\n const uniqNodes = uniqBy(nodes, 'id');\n const idGraph = new IdGraph(uniqNodes, edges);\n\n return idGraph;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -13,6 +13,19 @@ export declare const FETCH_FORMAT_OBJECT_LIST = "ObjectList";
|
|
|
13
13
|
* Stream.Readable that operates with objectMode, while each 'data' event emits one ObjectItem object.
|
|
14
14
|
*/
|
|
15
15
|
export type ObjectItemsStream = Readable;
|
|
16
|
+
/**
|
|
17
|
+
* compressed buffer of an object (as stored on the filesystem) and the size of its inflated content.
|
|
18
|
+
*/
|
|
19
|
+
export type CompressedObject = {
|
|
20
|
+
buffer: Buffer;
|
|
21
|
+
inflatedSize: number;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* hash => compressed object
|
|
25
|
+
*/
|
|
26
|
+
export type RawObjectsMap = Map<BitObject, CompressedObject & {
|
|
27
|
+
ref: Ref;
|
|
28
|
+
}>;
|
|
16
29
|
export declare class ObjectList {
|
|
17
30
|
objects: ObjectItem[];
|
|
18
31
|
constructor(objects?: ObjectItem[]);
|
|
@@ -46,6 +59,16 @@ export declare class ObjectList {
|
|
|
46
59
|
static combineScopeAndHash(objectItem: ObjectItem): string;
|
|
47
60
|
addIfNotExist(objectItems: ObjectItem[]): void;
|
|
48
61
|
toBitObjects(throwForUnknownTypes?: boolean): Promise<BitObjectList>;
|
|
62
|
+
/**
|
|
63
|
+
* same as `toBitObjects`, but also returns the original compressed buffers of the Source objects (files/artifacts)
|
|
64
|
+
* whose content matches their ref. Sources are immutable, so these buffers can be written to the filesystem as is,
|
|
65
|
+
* saving the costly re-compression. (significant for components with thousands of files).
|
|
66
|
+
*/
|
|
67
|
+
toBitObjectsWithRawSources(): Promise<{
|
|
68
|
+
bitObjectList: BitObjectList;
|
|
69
|
+
rawSources: RawObjectsMap;
|
|
70
|
+
}>;
|
|
71
|
+
private parseObjects;
|
|
49
72
|
static fromBitObjects(bitObjects: BitObject[]): Promise<ObjectList>;
|
|
50
73
|
addScopeName(scopeName: string): void;
|
|
51
74
|
splitByScopeName(): {
|
|
@@ -111,6 +111,14 @@ const FETCH_FORMAT_OBJECT_LIST = exports.FETCH_FORMAT_OBJECT_LIST = 'ObjectList'
|
|
|
111
111
|
* Stream.Readable that operates with objectMode, while each 'data' event emits one ObjectItem object.
|
|
112
112
|
*/
|
|
113
113
|
|
|
114
|
+
/**
|
|
115
|
+
* compressed buffer of an object (as stored on the filesystem) and the size of its inflated content.
|
|
116
|
+
*/
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* hash => compressed object
|
|
120
|
+
*/
|
|
121
|
+
|
|
114
122
|
class ObjectList {
|
|
115
123
|
constructor(objects = []) {
|
|
116
124
|
this.objects = objects;
|
|
@@ -187,7 +195,11 @@ class ObjectList {
|
|
|
187
195
|
extract.on('finish', () => {
|
|
188
196
|
resolve(objects);
|
|
189
197
|
});
|
|
190
|
-
|
|
198
|
+
|
|
199
|
+
// unlike `pipe`, it rejects when the input stream fails or the extractor fails (e.g. a truncated tar).
|
|
200
|
+
(0, _stream().pipeline)(packStream, extract, err => {
|
|
201
|
+
if (err) reject(err);
|
|
202
|
+
});
|
|
191
203
|
});
|
|
192
204
|
return new ObjectList(objectItems);
|
|
193
205
|
}
|
|
@@ -319,18 +331,48 @@ class ObjectList {
|
|
|
319
331
|
return `${scope}${objectItem.ref.hash}`;
|
|
320
332
|
}
|
|
321
333
|
addIfNotExist(objectItems) {
|
|
334
|
+
const existing = new Set(this.objects.map(object => ObjectList.combineScopeAndHash(object)));
|
|
322
335
|
objectItems.forEach(objectItem => {
|
|
323
|
-
const
|
|
324
|
-
if (
|
|
325
|
-
|
|
326
|
-
|
|
336
|
+
const key = ObjectList.combineScopeAndHash(objectItem);
|
|
337
|
+
if (existing.has(key)) return;
|
|
338
|
+
existing.add(key);
|
|
339
|
+
this.objects.push(objectItem);
|
|
327
340
|
});
|
|
328
341
|
}
|
|
329
342
|
async toBitObjects(throwForUnknownTypes = false) {
|
|
343
|
+
const {
|
|
344
|
+
bitObjectList
|
|
345
|
+
} = await this.parseObjects(throwForUnknownTypes);
|
|
346
|
+
return bitObjectList;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* same as `toBitObjects`, but also returns the original compressed buffers of the Source objects (files/artifacts)
|
|
351
|
+
* whose content matches their ref. Sources are immutable, so these buffers can be written to the filesystem as is,
|
|
352
|
+
* saving the costly re-compression. (significant for components with thousands of files).
|
|
353
|
+
*/
|
|
354
|
+
async toBitObjectsWithRawSources() {
|
|
355
|
+
return this.parseObjects(false, true);
|
|
356
|
+
}
|
|
357
|
+
async parseObjects(throwForUnknownTypes, collectRawSources = false) {
|
|
330
358
|
const concurrency = (0, _harmonyModules().concurrentIOLimit)();
|
|
359
|
+
const rawSources = new Map();
|
|
331
360
|
const bitObjects = await (0, _toolboxPromise().pMapPool)(this.objects, async object => {
|
|
332
361
|
try {
|
|
333
|
-
|
|
362
|
+
const {
|
|
363
|
+
object: bitObject,
|
|
364
|
+
inflatedSize
|
|
365
|
+
} = await _object().default.parseObjectWithSize(object.buffer);
|
|
366
|
+
if (collectRawSources && bitObject.getType() === 'Source') {
|
|
367
|
+
if (bitObject.hash().isEqual(object.ref)) {
|
|
368
|
+
rawSources.set(bitObject, {
|
|
369
|
+
buffer: object.buffer,
|
|
370
|
+
inflatedSize,
|
|
371
|
+
ref: object.ref
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return bitObject;
|
|
334
376
|
} catch (err) {
|
|
335
377
|
if (throwForUnknownTypes || !(err instanceof _legacy2().UnknownObjectType)) {
|
|
336
378
|
throw err;
|
|
@@ -341,7 +383,10 @@ class ObjectList {
|
|
|
341
383
|
}, {
|
|
342
384
|
concurrency
|
|
343
385
|
});
|
|
344
|
-
return
|
|
386
|
+
return {
|
|
387
|
+
bitObjectList: new (_bitObjectList().BitObjectList)((0, _lodash().compact)(bitObjects)),
|
|
388
|
+
rawSources
|
|
389
|
+
};
|
|
345
390
|
}
|
|
346
391
|
static async fromBitObjects(bitObjects) {
|
|
347
392
|
const concurrency = (0, _harmonyModules().concurrentIOLimit)();
|
|
@@ -361,6 +406,7 @@ class ObjectList {
|
|
|
361
406
|
}
|
|
362
407
|
splitByScopeName() {
|
|
363
408
|
const objectListPerScope = {};
|
|
409
|
+
const added = new Set();
|
|
364
410
|
this.objects.forEach(obj => {
|
|
365
411
|
if (obj.type === _models().ExportMetadata.name) {
|
|
366
412
|
return; // no scope for this type. it's general for all export data from all scopes
|
|
@@ -368,11 +414,11 @@ class ObjectList {
|
|
|
368
414
|
if (!obj.scope) {
|
|
369
415
|
throw new Error(`ObjectList: unable to split by scopeName, the scopeName is missing for ${obj.ref.hash}`);
|
|
370
416
|
}
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
417
|
+
const key = ObjectList.combineScopeAndHash(obj);
|
|
418
|
+
if (added.has(key)) return;
|
|
419
|
+
added.add(key);
|
|
420
|
+
if (!objectListPerScope[obj.scope]) objectListPerScope[obj.scope] = new ObjectList();
|
|
421
|
+
objectListPerScope[obj.scope].objects.push(obj);
|
|
376
422
|
});
|
|
377
423
|
return objectListPerScope;
|
|
378
424
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_tarStream","data","_interopRequireDefault","require","_toolboxPromise","_lodash","_stream","_crypto","_object","_bitObjectList","_ref","_legacy","_harmonyModules","_models","_legacy2","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","TAR_STREAM_ERROR_FILENAME","OBJECT_LIST_CURRENT_SCHEMA","TAR_STREAM_START_FILENAME","TAR_STREAM_END_FILENAME","FETCH_FORMAT_OBJECT_LIST","exports","ObjectList","constructor","objects","count","getSha1Hash","hash","crypto","createHash","obj","update","Uint8Array","buffer","digest","mergeMultipleInstances","objectLists","objectList","objList","mergeObjectList","addIfNotExist","fromJsonString","jsonStr","jsonParsed","JSON","parse","Array","isArray","Error","ref","Ref","Buffer","from","toJsonString","stringify","toTar","pack","tarStream","entry","name","combineScopeAndHash","finalize","toReadableStream","Readable","fromTar","packStream","extract","objectItems","Promise","resolve","reject","on","header","stream","next","chunk","extractScopeAndHash","concat","err","resume","pipe","fromTarToObjectStream","passThrough","PassThrough","objectMode","startData","endData","allData","emit","toString","logger","debug","write","schema","end","pipeline","error","fromObjectStreamToTar","readable","scopeName","startFile","numOfFiles","endFile","errorMessage","message","fromReadableStream","nameSplit","split","hasScope","scope","undefined","objectItem","exists","find","object","isEqual","toBitObjects","throwForUnknownTypes","concurrency","concurrentIOLimit","bitObjects","pMapPool","BitObject","parseObject","UnknownObjectType","type","BitObjectList","compact","fromBitObjects","compress","getType","addScopeName","splitByScopeName","objectListPerScope","ExportMetadata","toConsoleLog","console","log","map","join"],"sources":["object-list.ts"],"sourcesContent":["import tarStream from 'tar-stream';\nimport { pMapPool } from '@teambit/toolbox.promise.map-pool';\nimport { compact } from 'lodash';\nimport { Readable, PassThrough, pipeline } from 'stream';\nimport crypto from 'crypto';\nimport BitObject from './object';\nimport { BitObjectList } from './bit-object-list';\nimport Ref from './ref';\nimport { logger } from '@teambit/legacy.logger';\nimport { concurrentIOLimit } from '@teambit/harmony.modules.concurrency';\nimport { ExportMetadata } from '../models';\nimport { UnknownObjectType } from '@teambit/legacy.scope';\n\n/**\n * when error occurred during streaming between HTTP server and client, there is no good way to\n * indicate this other than sending a new file with a special name and the error message.\n */\nconst TAR_STREAM_ERROR_FILENAME = '.BIT.ERROR';\n/**\n * schema 1.0.0 - added the start and end file with basic info\n */\nconst OBJECT_LIST_CURRENT_SCHEMA = '1.0.0';\nconst TAR_STREAM_START_FILENAME = '.BIT.START';\nconst TAR_STREAM_END_FILENAME = '.BIT.END';\n\ntype StartFile = {\n schema: string;\n scopeName: string;\n};\ntype EndFile = {\n numOfFiles: number;\n scopeName: string;\n};\n\nexport type ObjectItem = {\n ref: Ref;\n buffer: Buffer; // zlib deflated BitObject\n type?: string; // for future use. e.g. to be able to export only Component/Version types but not Source/Artifact, etc.\n scope?: string; // used for the export process\n};\n\nexport const FETCH_FORMAT_OBJECT_LIST = 'ObjectList';\n\n/**\n * Stream.Readable that operates with objectMode, while each 'data' event emits one ObjectItem object.\n */\nexport type ObjectItemsStream = Readable;\n\nexport class ObjectList {\n constructor(public objects: ObjectItem[] = []) {}\n\n count() {\n return this.objects.length;\n }\n\n /**\n * Generates a SHA1 hash from all object buffers.\n * Used to identify duplicate export requests during retries.\n * Performance wise, it's not too bad. ~98ms for 150 components on CircleCI.\n */\n getSha1Hash(): string {\n const hash = crypto.createHash('sha1');\n for (const obj of this.objects) {\n hash.update(new Uint8Array(obj.buffer));\n }\n return hash.digest('hex');\n }\n\n static mergeMultipleInstances(objectLists: ObjectList[]): ObjectList {\n const objectList = new ObjectList();\n objectLists.forEach((objList) => objectList.mergeObjectList(objList));\n return objectList;\n }\n mergeObjectList(objectList: ObjectList) {\n this.addIfNotExist(objectList.objects);\n }\n static fromJsonString(jsonStr: string): ObjectList {\n const jsonParsed = JSON.parse(jsonStr);\n if (!Array.isArray(jsonParsed)) {\n throw new Error(`fromJsonString expect an array, got ${typeof jsonParsed}`);\n }\n jsonParsed.forEach((obj) => {\n obj.ref = new Ref(obj.ref.hash);\n obj.buffer = Buffer.from(obj.buffer);\n });\n return new ObjectList(jsonParsed);\n }\n toJsonString(): string {\n return JSON.stringify(this.objects);\n }\n toTar(): NodeJS.ReadableStream {\n const pack = tarStream.pack();\n this.objects.forEach((obj) => {\n pack.entry({ name: ObjectList.combineScopeAndHash(obj) }, obj.buffer);\n });\n pack.finalize();\n return pack;\n }\n toReadableStream(): ObjectItemsStream {\n return Readable.from(this.objects);\n }\n static async fromTar(packStream: NodeJS.ReadableStream): Promise<ObjectList> {\n const extract = tarStream.extract();\n const objectItems: ObjectItem[] = await new Promise((resolve, reject) => {\n const objects: ObjectItem[] = [];\n extract.on('entry', (header, stream, next) => {\n const data: Buffer[] = [];\n stream.on('data', (chunk) => {\n data.push(chunk);\n });\n stream.on('end', () => {\n objects.push({\n ...ObjectList.extractScopeAndHash(header.name),\n buffer: Buffer.concat(data as unknown as Uint8Array[]),\n });\n next(); // ready for next entry\n });\n stream.on('error', (err) => reject(err));\n\n stream.resume(); // just auto drain the stream\n });\n\n extract.on('finish', () => {\n resolve(objects);\n });\n\n packStream.pipe(extract);\n });\n return new ObjectList(objectItems);\n }\n\n static fromTarToObjectStream(packStream: NodeJS.ReadableStream): ObjectItemsStream {\n const passThrough = new PassThrough({ objectMode: true });\n const extract = tarStream.extract();\n let startData: StartFile | undefined;\n let endData: EndFile | undefined;\n extract.on('entry', (header, stream, next) => {\n const data: Buffer[] = [];\n stream.on('data', (chunk) => {\n data.push(chunk);\n });\n stream.on('end', () => {\n const allData = Buffer.concat(data as unknown as Uint8Array[]);\n if (header.name === TAR_STREAM_ERROR_FILENAME) {\n passThrough.emit('error', new Error(allData.toString()));\n return;\n }\n if (header.name === TAR_STREAM_START_FILENAME) {\n startData = JSON.parse(allData.toString());\n logger.debug('fromTarToObjectStream, start getting data', startData);\n next();\n return;\n }\n if (header.name === TAR_STREAM_END_FILENAME) {\n endData = JSON.parse(allData.toString());\n logger.debug('fromTarToObjectStream, finished getting data', endData);\n next();\n return;\n }\n passThrough.write({ ...ObjectList.extractScopeAndHash(header.name), buffer: allData });\n next(); // ready for next entry\n });\n stream.on('error', (err) => {\n passThrough.emit('error', err);\n });\n\n stream.resume(); // just auto drain the stream\n });\n\n // not sure if needed\n extract.on('error', (err) => {\n passThrough.emit('error', err);\n });\n\n extract.on('finish', () => {\n if (startData?.schema === OBJECT_LIST_CURRENT_SCHEMA && !endData) {\n // wasn't able to find a better way to indicate whether the server aborted the request\n // see https://github.com/node-fetch/node-fetch/issues/1117\n passThrough.emit(\n 'error',\n new Error(`server terminated the stream unexpectedly (metadata: ${JSON.stringify(startData)})`)\n );\n }\n passThrough.end();\n });\n pipeline(packStream, extract, (err) => {\n if (err) {\n logger.error('fromTarToObjectStream, pipeline', err);\n passThrough.emit('error', err);\n } else {\n logger.debug('fromTarToObjectStream, pipeline is completed');\n }\n });\n\n return passThrough;\n }\n\n static fromObjectStreamToTar(readable: Readable, scopeName: string) {\n const pack = tarStream.pack();\n const startFile: StartFile = { schema: OBJECT_LIST_CURRENT_SCHEMA, scopeName };\n logger.debug('fromObjectStreamToTar, start sending data', startFile);\n pack.entry({ name: TAR_STREAM_START_FILENAME }, JSON.stringify(startFile));\n let numOfFiles = 0;\n readable.on('data', (obj: ObjectItem) => {\n numOfFiles += 1;\n pack.entry({ name: ObjectList.combineScopeAndHash(obj) }, obj.buffer);\n });\n readable.on('end', () => {\n const endFile: EndFile = { numOfFiles, scopeName };\n logger.debug('fromObjectStreamToTar, finished sending data', endFile);\n pack.entry({ name: TAR_STREAM_END_FILENAME }, JSON.stringify(endFile));\n pack.finalize();\n });\n readable.on('error', (err) => {\n const errorMessage = err.message || `unexpected error (${err.name})`;\n logger.error(`ObjectList.fromObjectStreamToTar, streaming an error as a file`, err);\n pack.entry({ name: TAR_STREAM_ERROR_FILENAME }, errorMessage);\n pack.finalize();\n });\n return pack;\n }\n\n static async fromReadableStream(readable: ObjectItemsStream): Promise<ObjectList> {\n const objectItems: ObjectItem[] = [];\n for await (const obj of readable) {\n objectItems.push(obj);\n }\n return new ObjectList(objectItems);\n }\n\n /**\n * the opposite of this.combineScopeAndHash\n */\n static extractScopeAndHash(name: string): { scope?: string; ref: Ref } {\n const nameSplit = name.split('/');\n const hasScope = nameSplit.length > 1;\n return {\n scope: hasScope ? nameSplit[0] : undefined,\n ref: new Ref(hasScope ? nameSplit[1] : nameSplit[0]),\n };\n }\n /**\n * the opposite of this.extractScopeAndHash\n */\n static combineScopeAndHash(objectItem: ObjectItem): string {\n const scope = objectItem.scope ? `${objectItem.scope}/` : '';\n return `${scope}${objectItem.ref.hash}`;\n }\n\n addIfNotExist(objectItems: ObjectItem[]) {\n objectItems.forEach((objectItem) => {\n const exists = this.objects.find(\n (object) => object.ref.isEqual(objectItem.ref) && object.scope === objectItem.scope\n );\n if (!exists) {\n this.objects.push(objectItem);\n }\n });\n }\n\n async toBitObjects(throwForUnknownTypes = false): Promise<BitObjectList> {\n const concurrency = concurrentIOLimit();\n const bitObjects = await pMapPool(\n this.objects,\n async (object) => {\n try {\n return await BitObject.parseObject(object.buffer);\n } catch (err) {\n if (throwForUnknownTypes || !(err instanceof UnknownObjectType)) {\n throw err;\n }\n logger.error(\n `toBitObjects, unable to parse object of type ${err.type}, ignoring it. please update your bit version`\n );\n return null;\n }\n },\n { concurrency }\n );\n return new BitObjectList(compact(bitObjects));\n }\n\n static async fromBitObjects(bitObjects: BitObject[]): Promise<ObjectList> {\n const concurrency = concurrentIOLimit();\n const objectItems = await pMapPool(\n bitObjects,\n async (obj) => ({\n ref: obj.hash(),\n buffer: await obj.compress(),\n type: obj.getType(),\n }),\n { concurrency }\n );\n return new ObjectList(objectItems);\n }\n\n addScopeName(scopeName: string) {\n this.objects.forEach((object) => {\n object.scope = scopeName;\n });\n }\n\n splitByScopeName(): { [scopeName: string]: ObjectList } {\n const objectListPerScope: { [scopeName: string]: ObjectList } = {};\n this.objects.forEach((obj) => {\n if (obj.type === ExportMetadata.name) {\n return; // no scope for this type. it's general for all export data from all scopes\n }\n if (!obj.scope) {\n throw new Error(`ObjectList: unable to split by scopeName, the scopeName is missing for ${obj.ref.hash}`);\n }\n if (objectListPerScope[obj.scope]) {\n objectListPerScope[obj.scope].addIfNotExist([obj]);\n } else {\n objectListPerScope[obj.scope] = new ObjectList([obj]);\n }\n });\n return objectListPerScope;\n }\n\n /**\n * helps debugging\n */\n toConsoleLog() {\n console.log(this.objects.map((o) => o.ref.hash).join('\\n')); // eslint-disable-line no-console\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_tarStream","data","_interopRequireDefault","require","_toolboxPromise","_lodash","_stream","_crypto","_object","_bitObjectList","_ref","_legacy","_harmonyModules","_models","_legacy2","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","TAR_STREAM_ERROR_FILENAME","OBJECT_LIST_CURRENT_SCHEMA","TAR_STREAM_START_FILENAME","TAR_STREAM_END_FILENAME","FETCH_FORMAT_OBJECT_LIST","exports","ObjectList","constructor","objects","count","getSha1Hash","hash","crypto","createHash","obj","update","Uint8Array","buffer","digest","mergeMultipleInstances","objectLists","objectList","objList","mergeObjectList","addIfNotExist","fromJsonString","jsonStr","jsonParsed","JSON","parse","Array","isArray","Error","ref","Ref","Buffer","from","toJsonString","stringify","toTar","pack","tarStream","entry","name","combineScopeAndHash","finalize","toReadableStream","Readable","fromTar","packStream","extract","objectItems","Promise","resolve","reject","on","header","stream","next","chunk","extractScopeAndHash","concat","err","resume","pipeline","fromTarToObjectStream","passThrough","PassThrough","objectMode","startData","endData","allData","emit","toString","logger","debug","write","schema","end","error","fromObjectStreamToTar","readable","scopeName","startFile","numOfFiles","endFile","errorMessage","message","fromReadableStream","nameSplit","split","hasScope","scope","undefined","objectItem","existing","Set","map","object","key","has","add","toBitObjects","throwForUnknownTypes","bitObjectList","parseObjects","toBitObjectsWithRawSources","collectRawSources","concurrency","concurrentIOLimit","rawSources","Map","bitObjects","pMapPool","bitObject","inflatedSize","BitObject","parseObjectWithSize","getType","isEqual","set","UnknownObjectType","type","BitObjectList","compact","fromBitObjects","compress","addScopeName","splitByScopeName","objectListPerScope","added","ExportMetadata","toConsoleLog","console","log","join"],"sources":["object-list.ts"],"sourcesContent":["import tarStream from 'tar-stream';\nimport { pMapPool } from '@teambit/toolbox.promise.map-pool';\nimport { compact } from 'lodash';\nimport { Readable, PassThrough, pipeline } from 'stream';\nimport crypto from 'crypto';\nimport BitObject from './object';\nimport { BitObjectList } from './bit-object-list';\nimport Ref from './ref';\nimport { logger } from '@teambit/legacy.logger';\nimport { concurrentIOLimit } from '@teambit/harmony.modules.concurrency';\nimport { ExportMetadata } from '../models';\nimport { UnknownObjectType } from '@teambit/legacy.scope';\n\n/**\n * when error occurred during streaming between HTTP server and client, there is no good way to\n * indicate this other than sending a new file with a special name and the error message.\n */\nconst TAR_STREAM_ERROR_FILENAME = '.BIT.ERROR';\n/**\n * schema 1.0.0 - added the start and end file with basic info\n */\nconst OBJECT_LIST_CURRENT_SCHEMA = '1.0.0';\nconst TAR_STREAM_START_FILENAME = '.BIT.START';\nconst TAR_STREAM_END_FILENAME = '.BIT.END';\n\ntype StartFile = {\n schema: string;\n scopeName: string;\n};\ntype EndFile = {\n numOfFiles: number;\n scopeName: string;\n};\n\nexport type ObjectItem = {\n ref: Ref;\n buffer: Buffer; // zlib deflated BitObject\n type?: string; // for future use. e.g. to be able to export only Component/Version types but not Source/Artifact, etc.\n scope?: string; // used for the export process\n};\n\nexport const FETCH_FORMAT_OBJECT_LIST = 'ObjectList';\n\n/**\n * Stream.Readable that operates with objectMode, while each 'data' event emits one ObjectItem object.\n */\nexport type ObjectItemsStream = Readable;\n\n/**\n * compressed buffer of an object (as stored on the filesystem) and the size of its inflated content.\n */\nexport type CompressedObject = { buffer: Buffer; inflatedSize: number };\n\n/**\n * hash => compressed object\n */\nexport type RawObjectsMap = Map<BitObject, CompressedObject & { ref: Ref }>;\n\nexport class ObjectList {\n constructor(public objects: ObjectItem[] = []) {}\n\n count() {\n return this.objects.length;\n }\n\n /**\n * Generates a SHA1 hash from all object buffers.\n * Used to identify duplicate export requests during retries.\n * Performance wise, it's not too bad. ~98ms for 150 components on CircleCI.\n */\n getSha1Hash(): string {\n const hash = crypto.createHash('sha1');\n for (const obj of this.objects) {\n hash.update(new Uint8Array(obj.buffer));\n }\n return hash.digest('hex');\n }\n\n static mergeMultipleInstances(objectLists: ObjectList[]): ObjectList {\n const objectList = new ObjectList();\n objectLists.forEach((objList) => objectList.mergeObjectList(objList));\n return objectList;\n }\n mergeObjectList(objectList: ObjectList) {\n this.addIfNotExist(objectList.objects);\n }\n static fromJsonString(jsonStr: string): ObjectList {\n const jsonParsed = JSON.parse(jsonStr);\n if (!Array.isArray(jsonParsed)) {\n throw new Error(`fromJsonString expect an array, got ${typeof jsonParsed}`);\n }\n jsonParsed.forEach((obj) => {\n obj.ref = new Ref(obj.ref.hash);\n obj.buffer = Buffer.from(obj.buffer);\n });\n return new ObjectList(jsonParsed);\n }\n toJsonString(): string {\n return JSON.stringify(this.objects);\n }\n toTar(): NodeJS.ReadableStream {\n const pack = tarStream.pack();\n this.objects.forEach((obj) => {\n pack.entry({ name: ObjectList.combineScopeAndHash(obj) }, obj.buffer);\n });\n pack.finalize();\n return pack;\n }\n toReadableStream(): ObjectItemsStream {\n return Readable.from(this.objects);\n }\n static async fromTar(packStream: NodeJS.ReadableStream): Promise<ObjectList> {\n const extract = tarStream.extract();\n const objectItems: ObjectItem[] = await new Promise((resolve, reject) => {\n const objects: ObjectItem[] = [];\n extract.on('entry', (header, stream, next) => {\n const data: Buffer[] = [];\n stream.on('data', (chunk) => {\n data.push(chunk);\n });\n stream.on('end', () => {\n objects.push({\n ...ObjectList.extractScopeAndHash(header.name),\n buffer: Buffer.concat(data as unknown as Uint8Array[]),\n });\n next(); // ready for next entry\n });\n stream.on('error', (err) => reject(err));\n\n stream.resume(); // just auto drain the stream\n });\n\n extract.on('finish', () => {\n resolve(objects);\n });\n\n // unlike `pipe`, it rejects when the input stream fails or the extractor fails (e.g. a truncated tar).\n pipeline(packStream, extract, (err) => {\n if (err) reject(err);\n });\n });\n return new ObjectList(objectItems);\n }\n\n static fromTarToObjectStream(packStream: NodeJS.ReadableStream): ObjectItemsStream {\n const passThrough = new PassThrough({ objectMode: true });\n const extract = tarStream.extract();\n let startData: StartFile | undefined;\n let endData: EndFile | undefined;\n extract.on('entry', (header, stream, next) => {\n const data: Buffer[] = [];\n stream.on('data', (chunk) => {\n data.push(chunk);\n });\n stream.on('end', () => {\n const allData = Buffer.concat(data as unknown as Uint8Array[]);\n if (header.name === TAR_STREAM_ERROR_FILENAME) {\n passThrough.emit('error', new Error(allData.toString()));\n return;\n }\n if (header.name === TAR_STREAM_START_FILENAME) {\n startData = JSON.parse(allData.toString());\n logger.debug('fromTarToObjectStream, start getting data', startData);\n next();\n return;\n }\n if (header.name === TAR_STREAM_END_FILENAME) {\n endData = JSON.parse(allData.toString());\n logger.debug('fromTarToObjectStream, finished getting data', endData);\n next();\n return;\n }\n passThrough.write({ ...ObjectList.extractScopeAndHash(header.name), buffer: allData });\n next(); // ready for next entry\n });\n stream.on('error', (err) => {\n passThrough.emit('error', err);\n });\n\n stream.resume(); // just auto drain the stream\n });\n\n // not sure if needed\n extract.on('error', (err) => {\n passThrough.emit('error', err);\n });\n\n extract.on('finish', () => {\n if (startData?.schema === OBJECT_LIST_CURRENT_SCHEMA && !endData) {\n // wasn't able to find a better way to indicate whether the server aborted the request\n // see https://github.com/node-fetch/node-fetch/issues/1117\n passThrough.emit(\n 'error',\n new Error(`server terminated the stream unexpectedly (metadata: ${JSON.stringify(startData)})`)\n );\n }\n passThrough.end();\n });\n pipeline(packStream, extract, (err) => {\n if (err) {\n logger.error('fromTarToObjectStream, pipeline', err);\n passThrough.emit('error', err);\n } else {\n logger.debug('fromTarToObjectStream, pipeline is completed');\n }\n });\n\n return passThrough;\n }\n\n static fromObjectStreamToTar(readable: Readable, scopeName: string) {\n const pack = tarStream.pack();\n const startFile: StartFile = { schema: OBJECT_LIST_CURRENT_SCHEMA, scopeName };\n logger.debug('fromObjectStreamToTar, start sending data', startFile);\n pack.entry({ name: TAR_STREAM_START_FILENAME }, JSON.stringify(startFile));\n let numOfFiles = 0;\n readable.on('data', (obj: ObjectItem) => {\n numOfFiles += 1;\n pack.entry({ name: ObjectList.combineScopeAndHash(obj) }, obj.buffer);\n });\n readable.on('end', () => {\n const endFile: EndFile = { numOfFiles, scopeName };\n logger.debug('fromObjectStreamToTar, finished sending data', endFile);\n pack.entry({ name: TAR_STREAM_END_FILENAME }, JSON.stringify(endFile));\n pack.finalize();\n });\n readable.on('error', (err) => {\n const errorMessage = err.message || `unexpected error (${err.name})`;\n logger.error(`ObjectList.fromObjectStreamToTar, streaming an error as a file`, err);\n pack.entry({ name: TAR_STREAM_ERROR_FILENAME }, errorMessage);\n pack.finalize();\n });\n return pack;\n }\n\n static async fromReadableStream(readable: ObjectItemsStream): Promise<ObjectList> {\n const objectItems: ObjectItem[] = [];\n for await (const obj of readable) {\n objectItems.push(obj);\n }\n return new ObjectList(objectItems);\n }\n\n /**\n * the opposite of this.combineScopeAndHash\n */\n static extractScopeAndHash(name: string): { scope?: string; ref: Ref } {\n const nameSplit = name.split('/');\n const hasScope = nameSplit.length > 1;\n return {\n scope: hasScope ? nameSplit[0] : undefined,\n ref: new Ref(hasScope ? nameSplit[1] : nameSplit[0]),\n };\n }\n /**\n * the opposite of this.extractScopeAndHash\n */\n static combineScopeAndHash(objectItem: ObjectItem): string {\n const scope = objectItem.scope ? `${objectItem.scope}/` : '';\n return `${scope}${objectItem.ref.hash}`;\n }\n\n addIfNotExist(objectItems: ObjectItem[]) {\n const existing = new Set(this.objects.map((object) => ObjectList.combineScopeAndHash(object)));\n objectItems.forEach((objectItem) => {\n const key = ObjectList.combineScopeAndHash(objectItem);\n if (existing.has(key)) return;\n existing.add(key);\n this.objects.push(objectItem);\n });\n }\n\n async toBitObjects(throwForUnknownTypes = false): Promise<BitObjectList> {\n const { bitObjectList } = await this.parseObjects(throwForUnknownTypes);\n return bitObjectList;\n }\n\n /**\n * same as `toBitObjects`, but also returns the original compressed buffers of the Source objects (files/artifacts)\n * whose content matches their ref. Sources are immutable, so these buffers can be written to the filesystem as is,\n * saving the costly re-compression. (significant for components with thousands of files).\n */\n async toBitObjectsWithRawSources(): Promise<{ bitObjectList: BitObjectList; rawSources: RawObjectsMap }> {\n return this.parseObjects(false, true);\n }\n\n private async parseObjects(\n throwForUnknownTypes: boolean,\n collectRawSources = false\n ): Promise<{ bitObjectList: BitObjectList; rawSources: RawObjectsMap }> {\n const concurrency = concurrentIOLimit();\n const rawSources: RawObjectsMap = new Map();\n const bitObjects = await pMapPool(\n this.objects,\n async (object) => {\n try {\n const { object: bitObject, inflatedSize } = await BitObject.parseObjectWithSize(object.buffer);\n if (collectRawSources && bitObject.getType() === 'Source') {\n if (bitObject.hash().isEqual(object.ref)) {\n rawSources.set(bitObject, { buffer: object.buffer, inflatedSize, ref: object.ref });\n }\n }\n return bitObject;\n } catch (err) {\n if (throwForUnknownTypes || !(err instanceof UnknownObjectType)) {\n throw err;\n }\n logger.error(\n `toBitObjects, unable to parse object of type ${err.type}, ignoring it. please update your bit version`\n );\n return null;\n }\n },\n { concurrency }\n );\n return { bitObjectList: new BitObjectList(compact(bitObjects)), rawSources };\n }\n\n static async fromBitObjects(bitObjects: BitObject[]): Promise<ObjectList> {\n const concurrency = concurrentIOLimit();\n const objectItems = await pMapPool(\n bitObjects,\n async (obj) => ({\n ref: obj.hash(),\n buffer: await obj.compress(),\n type: obj.getType(),\n }),\n { concurrency }\n );\n return new ObjectList(objectItems);\n }\n\n addScopeName(scopeName: string) {\n this.objects.forEach((object) => {\n object.scope = scopeName;\n });\n }\n\n splitByScopeName(): { [scopeName: string]: ObjectList } {\n const objectListPerScope: { [scopeName: string]: ObjectList } = {};\n const added = new Set<string>();\n this.objects.forEach((obj) => {\n if (obj.type === ExportMetadata.name) {\n return; // no scope for this type. it's general for all export data from all scopes\n }\n if (!obj.scope) {\n throw new Error(`ObjectList: unable to split by scopeName, the scopeName is missing for ${obj.ref.hash}`);\n }\n const key = ObjectList.combineScopeAndHash(obj);\n if (added.has(key)) return;\n added.add(key);\n if (!objectListPerScope[obj.scope]) objectListPerScope[obj.scope] = new ObjectList();\n objectListPerScope[obj.scope].objects.push(obj);\n });\n return objectListPerScope;\n }\n\n /**\n * helps debugging\n */\n toConsoleLog() {\n console.log(this.objects.map((o) => o.ref.hash).join('\\n')); // eslint-disable-line no-console\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -6,12 +6,16 @@ import { UnmergedComponents, RemoteLanes } from '@teambit/legacy.scope';
|
|
|
6
6
|
import type { IndexType } from './scope-index';
|
|
7
7
|
import { ScopeIndex } from './scope-index';
|
|
8
8
|
import BitObject from './object';
|
|
9
|
-
import type { ObjectItem } from './object-list';
|
|
9
|
+
import type { ObjectItem, RawObjectsMap, CompressedObject } from './object-list';
|
|
10
10
|
import { ObjectList } from './object-list';
|
|
11
11
|
import BitRawObject from './raw-object';
|
|
12
12
|
import Ref from './ref';
|
|
13
13
|
import type { InMemoryCache } from '@teambit/harmony.modules.in-memory-cache';
|
|
14
14
|
type ContentTransformer = (content: Buffer) => Buffer;
|
|
15
|
+
type ObjectChownOptions = {
|
|
16
|
+
uid: number;
|
|
17
|
+
gid: number;
|
|
18
|
+
} | null;
|
|
15
19
|
/** `mtimeMs` lets a caller tell an object that has been here a while from one just written */
|
|
16
20
|
export type ObjectWithType = {
|
|
17
21
|
ref: Ref;
|
|
@@ -201,7 +205,7 @@ export default class Repository {
|
|
|
201
205
|
/**
|
|
202
206
|
* write all objects to the FS and index the components/lanes/symlink objects
|
|
203
207
|
*/
|
|
204
|
-
writeObjectsToTheFS(objects: BitObject[]): Promise<void>;
|
|
208
|
+
writeObjectsToTheFS(objects: BitObject[], rawObjects?: RawObjectsMap): Promise<void>;
|
|
205
209
|
/**
|
|
206
210
|
* do not call this method directly. always call this.removeObject() and once done with all objects,
|
|
207
211
|
* call this.persist()
|
|
@@ -212,9 +216,24 @@ export default class Repository {
|
|
|
212
216
|
* this method doesn't write to scopeIndex. so using this method for ModelComponent or
|
|
213
217
|
* Symlink makes the index outdated.
|
|
214
218
|
*/
|
|
215
|
-
_writeOne(object: BitObject
|
|
219
|
+
_writeOne(object: BitObject, raw?: CompressedObject & {
|
|
220
|
+
ref: Ref;
|
|
221
|
+
}, chownOptions?: ObjectChownOptions): Promise<void>;
|
|
216
222
|
writeObjectsToPendingDir(objectList: ObjectList, pendingDir: PathOsBasedAbsolute): Promise<void>;
|
|
217
223
|
readObjectsFromPendingDir(pendingDir: PathOsBasedAbsolute): Promise<ObjectList>;
|
|
224
|
+
/**
|
|
225
|
+
* the owner to set on written object files. `null` when the scope has no group (or it can't be resolved), in which
|
|
226
|
+
* case the owner of an existing file is kept.
|
|
227
|
+
*/
|
|
228
|
+
private getChownOptions;
|
|
229
|
+
/**
|
|
230
|
+
* writes the file atomically (tmp file + rename), the same way `writeFile` of legacy.utils does with write-file-atomic,
|
|
231
|
+
* including keeping the mode (and owner, when no chown is given) of an existing file and ignoring the same chown/chmod
|
|
232
|
+
* errors. it's called for every object, so it saves the fs calls write-file-atomic and `ensureDir` do on every write
|
|
233
|
+
* (realpath, stat of the dir, exit handlers). the parent dir is created only when the first write fails with ENOENT.
|
|
234
|
+
* the tmp file is a dotfile, which `listRefs()` ignores in case it's left behind.
|
|
235
|
+
*/
|
|
236
|
+
private writeObjectFile;
|
|
218
237
|
private hashPath;
|
|
219
238
|
}
|
|
220
239
|
export {};
|