@teambit/objects 0.0.0-859acf6dda2dd3d32072c1bf3fd75796ba45dc62 → 0.0.0-87722eae60f4d4be4fea8a9a6ebacae673140534
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/models/export-metadata.js +0 -2
- package/dist/models/export-metadata.js.map +1 -1
- package/dist/models/lane.d.ts +3 -3
- package/dist/models/model-component.d.ts +1 -1
- package/dist/models/model-component.js +22 -5
- package/dist/models/model-component.js.map +1 -1
- package/dist/models/scopeMeta.js +0 -3
- package/dist/models/scopeMeta.js.map +1 -1
- package/dist/models/source.d.ts +2 -2
- package/dist/models/source.js +0 -1
- package/dist/models/source.js.map +1 -1
- package/dist/models/symlink.d.ts +1 -1
- package/dist/models/version.js +1 -13
- package/dist/models/version.js.map +1 -1
- package/dist/models/version.spec.js +4 -12
- package/dist/models/version.spec.js.map +1 -1
- package/dist/objects/object-list.d.ts +6 -0
- package/dist/objects/object-list.js +47 -4
- package/dist/objects/object-list.js.map +1 -1
- package/dist/objects/object.js +0 -1
- package/dist/objects/object.js.map +1 -1
- package/dist/objects/raw-object.d.ts +1 -1
- package/dist/objects/raw-object.js +1 -11
- package/dist/objects/raw-object.js.map +1 -1
- package/dist/objects/repository.d.ts +14 -1
- package/dist/objects/repository.js +23 -12
- package/dist/objects/repository.js.map +1 -1
- package/dist/objects/scope-index.js +0 -1
- package/dist/objects/scope-index.js.map +1 -1
- package/models/export-metadata.ts +0 -1
- package/models/model-component.ts +23 -6
- package/models/scopeMeta.ts +0 -2
- package/models/source.ts +0 -1
- package/models/version.spec.ts +4 -12
- package/models/version.ts +1 -15
- package/objects/object-list.ts +53 -5
- package/objects/object.ts +0 -1
- package/objects/raw-object.ts +1 -11
- package/objects/repository.ts +19 -6
- package/objects/scope-index.ts +0 -1
- package/package.json +29 -29
- package/dist/objects/repository-hooks.d.ts +0 -4
- package/dist/objects/repository-hooks.js +0 -56
- package/dist/objects/repository-hooks.js.map +0 -1
- package/objects/repository-hooks.ts +0 -42
- /package/dist/{preview-1753980426297.js → preview-1765229799842.js} +0 -0
package/objects/object-list.ts
CHANGED
|
@@ -2,6 +2,7 @@ import tarStream from 'tar-stream';
|
|
|
2
2
|
import { pMapPool } from '@teambit/toolbox.promise.map-pool';
|
|
3
3
|
import { compact } from 'lodash';
|
|
4
4
|
import { Readable, PassThrough, pipeline } from 'stream';
|
|
5
|
+
import crypto from 'crypto';
|
|
5
6
|
import BitObject from './object';
|
|
6
7
|
import { BitObjectList } from './bit-object-list';
|
|
7
8
|
import Ref from './ref';
|
|
@@ -52,6 +53,19 @@ export class ObjectList {
|
|
|
52
53
|
return this.objects.length;
|
|
53
54
|
}
|
|
54
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Generates a SHA1 hash from all object buffers.
|
|
58
|
+
* Used to identify duplicate export requests during retries.
|
|
59
|
+
* Performance wise, it's not too bad. ~98ms for 150 components on CircleCI.
|
|
60
|
+
*/
|
|
61
|
+
getSha1Hash(): string {
|
|
62
|
+
const hash = crypto.createHash('sha1');
|
|
63
|
+
for (const obj of this.objects) {
|
|
64
|
+
hash.update(new Uint8Array(obj.buffer));
|
|
65
|
+
}
|
|
66
|
+
return hash.digest('hex');
|
|
67
|
+
}
|
|
68
|
+
|
|
55
69
|
static mergeMultipleInstances(objectLists: ObjectList[]): ObjectList {
|
|
56
70
|
const objectList = new ObjectList();
|
|
57
71
|
objectLists.forEach((objList) => objectList.mergeObjectList(objList));
|
|
@@ -120,7 +134,10 @@ export class ObjectList {
|
|
|
120
134
|
const extract = tarStream.extract();
|
|
121
135
|
let startData: StartFile | undefined;
|
|
122
136
|
let endData: EndFile | undefined;
|
|
137
|
+
let entriesReceived = 0;
|
|
138
|
+
|
|
123
139
|
extract.on('entry', (header, stream, next) => {
|
|
140
|
+
entriesReceived += 1;
|
|
124
141
|
const data: Buffer[] = [];
|
|
125
142
|
stream.on('data', (chunk) => {
|
|
126
143
|
data.push(chunk);
|
|
@@ -154,24 +171,40 @@ export class ObjectList {
|
|
|
154
171
|
});
|
|
155
172
|
|
|
156
173
|
// not sure if needed
|
|
157
|
-
extract.on('error', (err) => {
|
|
158
|
-
|
|
174
|
+
extract.on('error', (err: any) => {
|
|
175
|
+
logger.error(`fromTarToObjectStream tar extraction error after receiving ${entriesReceived} entries`, err);
|
|
176
|
+
|
|
177
|
+
// Enhanced error message for tar corruption with entry count
|
|
178
|
+
if (err.message?.includes('invalid tar header') || err.message?.includes('Invalid tar header')) {
|
|
179
|
+
const enhancedError = new Error(
|
|
180
|
+
`Invalid tar header after receiving ${entriesReceived} entries. Possible causes: 1) Server aborted request mid-stream, 2) Network corruption during transfer. Original error: ${err.message}`
|
|
181
|
+
);
|
|
182
|
+
enhancedError.stack = err.stack;
|
|
183
|
+
passThrough.emit('error', enhancedError);
|
|
184
|
+
} else {
|
|
185
|
+
passThrough.emit('error', err);
|
|
186
|
+
}
|
|
159
187
|
});
|
|
160
188
|
|
|
161
189
|
extract.on('finish', () => {
|
|
162
190
|
if (startData?.schema === OBJECT_LIST_CURRENT_SCHEMA && !endData) {
|
|
163
191
|
// wasn't able to find a better way to indicate whether the server aborted the request
|
|
164
192
|
// see https://github.com/node-fetch/node-fetch/issues/1117
|
|
193
|
+
logger.error(
|
|
194
|
+
`fromTarToObjectStream, server terminated the stream unexpectedly. Start: ${JSON.stringify(startData)}, entries received: ${entriesReceived}`
|
|
195
|
+
);
|
|
165
196
|
passThrough.emit(
|
|
166
197
|
'error',
|
|
167
|
-
new Error(
|
|
198
|
+
new Error(
|
|
199
|
+
`server terminated the stream unexpectedly (metadata: ${JSON.stringify(startData)}, entries received: ${entriesReceived})`
|
|
200
|
+
)
|
|
168
201
|
);
|
|
169
202
|
}
|
|
170
203
|
passThrough.end();
|
|
171
204
|
});
|
|
172
205
|
pipeline(packStream, extract, (err) => {
|
|
173
206
|
if (err) {
|
|
174
|
-
logger.error(
|
|
207
|
+
logger.error(`fromTarToObjectStream, pipeline error after ${entriesReceived} entries`, err);
|
|
175
208
|
passThrough.emit('error', err);
|
|
176
209
|
} else {
|
|
177
210
|
logger.debug('fromTarToObjectStream, pipeline is completed');
|
|
@@ -187,19 +220,34 @@ export class ObjectList {
|
|
|
187
220
|
logger.debug('fromObjectStreamToTar, start sending data', startFile);
|
|
188
221
|
pack.entry({ name: TAR_STREAM_START_FILENAME }, JSON.stringify(startFile));
|
|
189
222
|
let numOfFiles = 0;
|
|
223
|
+
let isFinalized = false;
|
|
224
|
+
|
|
190
225
|
readable.on('data', (obj: ObjectItem) => {
|
|
191
226
|
numOfFiles += 1;
|
|
192
227
|
pack.entry({ name: ObjectList.combineScopeAndHash(obj) }, obj.buffer);
|
|
193
228
|
});
|
|
194
229
|
readable.on('end', () => {
|
|
230
|
+
if (isFinalized) {
|
|
231
|
+
logger.warn(`fromObjectStreamToTar (${scopeName}), received 'end' event but pack already finalized`);
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
isFinalized = true;
|
|
195
235
|
const endFile: EndFile = { numOfFiles, scopeName };
|
|
196
236
|
logger.debug('fromObjectStreamToTar, finished sending data', endFile);
|
|
197
237
|
pack.entry({ name: TAR_STREAM_END_FILENAME }, JSON.stringify(endFile));
|
|
198
238
|
pack.finalize();
|
|
199
239
|
});
|
|
200
240
|
readable.on('error', (err) => {
|
|
241
|
+
if (isFinalized) {
|
|
242
|
+
logger.error(
|
|
243
|
+
`ObjectList.fromObjectStreamToTar, received error but pack already finalized. Files sent: ${numOfFiles}`,
|
|
244
|
+
err
|
|
245
|
+
);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
isFinalized = true;
|
|
201
249
|
const errorMessage = err.message || `unexpected error (${err.name})`;
|
|
202
|
-
logger.error(`ObjectList.fromObjectStreamToTar, streaming an error as a file`, err);
|
|
250
|
+
logger.error(`ObjectList.fromObjectStreamToTar, streaming an error as a file after ${numOfFiles} files`, err);
|
|
203
251
|
pack.entry({ name: TAR_STREAM_ERROR_FILENAME }, errorMessage);
|
|
204
252
|
pack.finalize();
|
|
205
253
|
});
|
package/objects/object.ts
CHANGED
package/objects/raw-object.ts
CHANGED
|
@@ -8,7 +8,6 @@ export default class BitRawObject {
|
|
|
8
8
|
headers: string[];
|
|
9
9
|
type: string;
|
|
10
10
|
content: Buffer;
|
|
11
|
-
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
|
|
12
11
|
parsedContent: any;
|
|
13
12
|
_ref: string;
|
|
14
13
|
|
|
@@ -17,7 +16,6 @@ export default class BitRawObject {
|
|
|
17
16
|
ref: string | null | undefined,
|
|
18
17
|
type: string | null | undefined,
|
|
19
18
|
content: Buffer | null | undefined,
|
|
20
|
-
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
|
|
21
19
|
parsedContent: any | null | undefined
|
|
22
20
|
) {
|
|
23
21
|
let headers;
|
|
@@ -72,17 +70,14 @@ export default class BitRawObject {
|
|
|
72
70
|
}
|
|
73
71
|
}
|
|
74
72
|
|
|
75
|
-
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
|
|
76
73
|
set ref(ref: string) {
|
|
77
74
|
this._ref = ref;
|
|
78
75
|
}
|
|
79
76
|
|
|
80
|
-
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
|
|
81
77
|
get ref(): string {
|
|
82
78
|
return this._ref;
|
|
83
79
|
}
|
|
84
80
|
|
|
85
|
-
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
|
|
86
81
|
get id(): string {
|
|
87
82
|
switch (this.type) {
|
|
88
83
|
case 'Version':
|
|
@@ -114,11 +109,7 @@ export default class BitRawObject {
|
|
|
114
109
|
return [];
|
|
115
110
|
}
|
|
116
111
|
|
|
117
|
-
static async fromDeflatedBuffer(
|
|
118
|
-
fileContents: Buffer,
|
|
119
|
-
ref: string | null | undefined
|
|
120
|
-
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
|
|
121
|
-
): Promise<BitObject> {
|
|
112
|
+
static async fromDeflatedBuffer(fileContents: Buffer, ref: string | null | undefined): Promise<BitObject> {
|
|
122
113
|
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
|
|
123
114
|
return inflate(fileContents).then((buffer) => new BitRawObject(buffer, ref));
|
|
124
115
|
}
|
|
@@ -129,7 +120,6 @@ export default class BitRawObject {
|
|
|
129
120
|
* @param {Any} parsedContent
|
|
130
121
|
*/
|
|
131
122
|
toRealObject() {
|
|
132
|
-
// @ts-ignore
|
|
133
123
|
return types[this.type].from(this.parsedContent || this.getParsedContent(), this.headers[1]);
|
|
134
124
|
}
|
|
135
125
|
|
package/objects/repository.ts
CHANGED
|
@@ -10,7 +10,8 @@ import { pMapPool } from '@teambit/toolbox.promise.map-pool';
|
|
|
10
10
|
import { OBJECTS_DIR } from '@teambit/legacy.constants';
|
|
11
11
|
import { logger } from '@teambit/legacy.logger';
|
|
12
12
|
import type { ChownOptions, PathOsBasedAbsolute } from '@teambit/legacy.utils';
|
|
13
|
-
import {
|
|
13
|
+
import { writeFile } from '@teambit/legacy.utils';
|
|
14
|
+
import { glob } from 'glob';
|
|
14
15
|
import { removeEmptyDir } from '@teambit/toolbox.fs.remove-empty-dir';
|
|
15
16
|
import { concurrentIOLimit } from '@teambit/harmony.modules.concurrency';
|
|
16
17
|
import type { Types, ScopeJson } from '@teambit/legacy.scope';
|
|
@@ -22,17 +23,15 @@ import type { ObjectItem } from './object-list';
|
|
|
22
23
|
import { ObjectList } from './object-list';
|
|
23
24
|
import BitRawObject from './raw-object';
|
|
24
25
|
import Ref from './ref';
|
|
25
|
-
import type { ContentTransformer } from './repository-hooks';
|
|
26
|
-
import { onPersist, onRead } from './repository-hooks';
|
|
27
26
|
import type { InMemoryCache } from '@teambit/harmony.modules.in-memory-cache';
|
|
28
27
|
import { getMaxSizeForObjects, createInMemoryCache } from '@teambit/harmony.modules.in-memory-cache';
|
|
29
28
|
import { ScopeMeta, Lane, ModelComponent } from '../models';
|
|
30
29
|
|
|
30
|
+
type ContentTransformer = (content: Buffer) => Buffer;
|
|
31
31
|
const OBJECTS_BACKUP_DIR = `${OBJECTS_DIR}.bak`;
|
|
32
32
|
const TRASH_DIR = 'trash';
|
|
33
33
|
|
|
34
34
|
export default class Repository {
|
|
35
|
-
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
|
|
36
35
|
objects: { [key: string]: BitObject } = {};
|
|
37
36
|
objectsToRemove: Ref[] = [];
|
|
38
37
|
scopeJson: ScopeJson;
|
|
@@ -47,8 +46,8 @@ export default class Repository {
|
|
|
47
46
|
constructor(scopePath: string, scopeJson: ScopeJson) {
|
|
48
47
|
this.scopePath = scopePath;
|
|
49
48
|
this.scopeJson = scopeJson;
|
|
50
|
-
this.onRead =
|
|
51
|
-
this.onPersist =
|
|
49
|
+
this.onRead = (content: Buffer) => Repository.onPostObjectRead?.(content) || content;
|
|
50
|
+
this.onPersist = (content: Buffer) => Repository.onPreObjectPersist?.(content) || content;
|
|
52
51
|
this.cache = createInMemoryCache({ maxSize: getMaxSizeForObjects() });
|
|
53
52
|
}
|
|
54
53
|
|
|
@@ -91,6 +90,20 @@ export default class Repository {
|
|
|
91
90
|
|
|
92
91
|
static onPostObjectsPersist: () => Promise<void>;
|
|
93
92
|
|
|
93
|
+
/**
|
|
94
|
+
* Hook for transforming content before objects are persisted to the filesystem.
|
|
95
|
+
* Note: This function cannot be async because it's used by the synchronous `loadSync` method
|
|
96
|
+
* which needs to maintain sync behavior for compatibility with existing code.
|
|
97
|
+
*/
|
|
98
|
+
static onPreObjectPersist: (content: Buffer) => Buffer;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Hook for transforming content after objects are read from the filesystem.
|
|
102
|
+
* Note: This function cannot be async because it's used by the synchronous `loadSync` method
|
|
103
|
+
* which needs to maintain sync behavior for compatibility with existing code.
|
|
104
|
+
*/
|
|
105
|
+
static onPostObjectRead: (content: Buffer) => Buffer;
|
|
106
|
+
|
|
94
107
|
async reLoadScopeIndex() {
|
|
95
108
|
this.scopeIndex = await this.loadOptionallyCreateScopeIndex();
|
|
96
109
|
}
|
package/objects/scope-index.ts
CHANGED
|
@@ -111,7 +111,6 @@ export class ScopeIndex {
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
getHashes(indexType: IndexType): string[] {
|
|
114
|
-
// @ts-ignore how to tell TS that all this.index.prop are array?
|
|
115
114
|
return this.index[indexType].map((indexItem: IndexItem) => indexItem.hash);
|
|
116
115
|
}
|
|
117
116
|
getHashesByQuery(indexType: IndexType, filter: Function): string[] {
|
package/package.json
CHANGED
|
@@ -1,63 +1,63 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/objects",
|
|
3
|
-
"version": "0.0.0-
|
|
3
|
+
"version": "0.0.0-87722eae60f4d4be4fea8a9a6ebacae673140534",
|
|
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": "
|
|
9
|
+
"version": "87722eae60f4d4be4fea8a9a6ebacae673140534"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@pnpm/dependency-path": "1001.1.
|
|
13
|
-
"@pnpm/lockfile.types": "^1002.0.
|
|
12
|
+
"@pnpm/dependency-path": "1001.1.6",
|
|
13
|
+
"@pnpm/lockfile.types": "^1002.0.5",
|
|
14
14
|
"semver": "7.7.1",
|
|
15
15
|
"lodash": "4.17.21",
|
|
16
16
|
"uuid": "8.3.2",
|
|
17
17
|
"async-mutex": "0.3.1",
|
|
18
18
|
"p-map-series": "2.1.0",
|
|
19
19
|
"tar-stream": "2.2.0",
|
|
20
|
-
"is-relative-path": "2.0.0",
|
|
21
20
|
"fs-extra": "10.0.0",
|
|
21
|
+
"glob": "13.0.0",
|
|
22
22
|
"uid-number": "0.0.6",
|
|
23
23
|
"@teambit/harmony": "0.4.7",
|
|
24
|
-
"@teambit/cli": "0.0.
|
|
24
|
+
"@teambit/cli": "0.0.1290",
|
|
25
25
|
"@teambit/component-id": "1.2.4",
|
|
26
|
-
"@teambit/legacy.utils": "0.0.
|
|
27
|
-
"@teambit/harmony.modules.get-basic-log": "0.0.
|
|
26
|
+
"@teambit/legacy.utils": "0.0.30",
|
|
27
|
+
"@teambit/harmony.modules.get-basic-log": "0.0.91",
|
|
28
28
|
"@teambit/bit-error": "0.0.404",
|
|
29
29
|
"@teambit/component-version": "1.0.4",
|
|
30
|
-
"@teambit/component.snap-distance": "0.0.
|
|
31
|
-
"@teambit/config-store": "0.0.
|
|
30
|
+
"@teambit/component.snap-distance": "0.0.91",
|
|
31
|
+
"@teambit/config-store": "0.0.170",
|
|
32
32
|
"@teambit/lane-id": "0.0.312",
|
|
33
|
-
"@teambit/legacy.cli.error": "0.0.
|
|
34
|
-
"@teambit/legacy.constants": "0.0.
|
|
35
|
-
"@teambit/legacy.logger": "0.0.
|
|
36
|
-
"@teambit/legacy.scope": "0.0.
|
|
37
|
-
"@teambit/toolbox.crypto.sha1": "0.0.
|
|
38
|
-
"@teambit/component.sources": "0.0.
|
|
33
|
+
"@teambit/legacy.cli.error": "0.0.31",
|
|
34
|
+
"@teambit/legacy.constants": "0.0.20",
|
|
35
|
+
"@teambit/legacy.logger": "0.0.31",
|
|
36
|
+
"@teambit/legacy.scope": "0.0.90",
|
|
37
|
+
"@teambit/toolbox.crypto.sha1": "0.0.11",
|
|
38
|
+
"@teambit/component.sources": "0.0.142",
|
|
39
39
|
"@teambit/legacy-bit-id": "1.1.3",
|
|
40
|
-
"@teambit/legacy-component-log": "0.0.
|
|
41
|
-
"@teambit/legacy.consumer-component": "0.0.
|
|
42
|
-
"@teambit/legacy.consumer-config": "0.0.
|
|
43
|
-
"@teambit/legacy.extension-data": "0.0.
|
|
44
|
-
"@teambit/pkg.modules.semver-helper": "0.0.
|
|
40
|
+
"@teambit/legacy-component-log": "0.0.413",
|
|
41
|
+
"@teambit/legacy.consumer-component": "0.0.91",
|
|
42
|
+
"@teambit/legacy.consumer-config": "0.0.90",
|
|
43
|
+
"@teambit/legacy.extension-data": "0.0.92",
|
|
44
|
+
"@teambit/pkg.modules.semver-helper": "0.0.18",
|
|
45
45
|
"@teambit/toolbox.array.duplications-finder": "0.0.3",
|
|
46
46
|
"@teambit/graph.cleargraph": "0.0.11",
|
|
47
|
-
"@teambit/bit.get-bit-version": "0.0.
|
|
48
|
-
"@teambit/semantics.doc-parser": "0.0.
|
|
49
|
-
"@teambit/harmony.modules.concurrency": "0.0.
|
|
50
|
-
"@teambit/toolbox.promise.map-pool": "0.0.
|
|
51
|
-
"@teambit/harmony.modules.in-memory-cache": "0.0.
|
|
52
|
-
"@teambit/toolbox.fs.remove-empty-dir": "0.0.
|
|
53
|
-
"@teambit/graph": "0.0.0-
|
|
47
|
+
"@teambit/bit.get-bit-version": "0.0.11",
|
|
48
|
+
"@teambit/semantics.doc-parser": "0.0.98",
|
|
49
|
+
"@teambit/harmony.modules.concurrency": "0.0.21",
|
|
50
|
+
"@teambit/toolbox.promise.map-pool": "0.0.10",
|
|
51
|
+
"@teambit/harmony.modules.in-memory-cache": "0.0.24",
|
|
52
|
+
"@teambit/toolbox.fs.remove-empty-dir": "0.0.9",
|
|
53
|
+
"@teambit/graph": "0.0.0-bd99e08f4df12bb87883e301c2d192c94b2c1d1e"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@types/semver": "7.5.8",
|
|
57
57
|
"@types/lodash": "4.14.165",
|
|
58
58
|
"@types/uuid": "8.3.4",
|
|
59
59
|
"@types/fs-extra": "9.0.7",
|
|
60
|
-
"@teambit/harmony.envs.core-aspect-env": "0.0.
|
|
60
|
+
"@teambit/harmony.envs.core-aspect-env": "0.0.80"
|
|
61
61
|
},
|
|
62
62
|
"peerDependencies": {
|
|
63
63
|
"chai": "5.2.1",
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { ScopeJson } from '@teambit/legacy.scope';
|
|
2
|
-
export type ContentTransformer = (content: Buffer) => Buffer;
|
|
3
|
-
export declare function onPersist(scopePath: string, scopeJson: ScopeJson): ContentTransformer;
|
|
4
|
-
export declare function onRead(scopePath: string, scopeJson: ScopeJson): ContentTransformer;
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.onPersist = onPersist;
|
|
7
|
-
exports.onRead = onRead;
|
|
8
|
-
function _isRelativePath() {
|
|
9
|
-
const data = _interopRequireDefault(require("is-relative-path"));
|
|
10
|
-
_isRelativePath = function () {
|
|
11
|
-
return data;
|
|
12
|
-
};
|
|
13
|
-
return data;
|
|
14
|
-
}
|
|
15
|
-
function _path() {
|
|
16
|
-
const data = _interopRequireDefault(require("path"));
|
|
17
|
-
_path = function () {
|
|
18
|
-
return data;
|
|
19
|
-
};
|
|
20
|
-
return data;
|
|
21
|
-
}
|
|
22
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
23
|
-
function loadHooks(scopePath, scopeJson) {
|
|
24
|
-
const hooksPath = scopeJson.hooksPath;
|
|
25
|
-
if (hooksPath) {
|
|
26
|
-
const hooksFinalPath = (0, _isRelativePath().default)(hooksPath) ? _path().default.join(scopePath, hooksPath) : hooksPath;
|
|
27
|
-
// eslint-disable-next-line global-require, import/no-dynamic-require
|
|
28
|
-
const hooks = require(hooksFinalPath);
|
|
29
|
-
return hooks;
|
|
30
|
-
}
|
|
31
|
-
return undefined;
|
|
32
|
-
}
|
|
33
|
-
function onPersist(scopePath, scopeJson) {
|
|
34
|
-
const defaultFunc = content => content;
|
|
35
|
-
const hooks = loadHooks(scopePath, scopeJson);
|
|
36
|
-
if (hooks) {
|
|
37
|
-
const onReadFunction = hooks.onPersist;
|
|
38
|
-
if (onReadFunction) {
|
|
39
|
-
return onReadFunction;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return defaultFunc;
|
|
43
|
-
}
|
|
44
|
-
function onRead(scopePath, scopeJson) {
|
|
45
|
-
const defaultFunc = content => content;
|
|
46
|
-
const hooks = loadHooks(scopePath, scopeJson);
|
|
47
|
-
if (hooks) {
|
|
48
|
-
const onReadFunction = hooks.onRead;
|
|
49
|
-
if (onReadFunction) {
|
|
50
|
-
return onReadFunction;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return defaultFunc;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
//# sourceMappingURL=repository-hooks.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_isRelativePath","data","_interopRequireDefault","require","_path","e","__esModule","default","loadHooks","scopePath","scopeJson","hooksPath","hooksFinalPath","isRelative","path","join","hooks","undefined","onPersist","defaultFunc","content","onReadFunction","onRead"],"sources":["repository-hooks.ts"],"sourcesContent":["import isRelative from 'is-relative-path';\nimport path from 'path';\n\nimport type { ScopeJson } from '@teambit/legacy.scope';\n\nexport type ContentTransformer = (content: Buffer) => Buffer;\n\nfunction loadHooks(scopePath: string, scopeJson: ScopeJson): any | undefined {\n const hooksPath = scopeJson.hooksPath;\n if (hooksPath) {\n const hooksFinalPath = isRelative(hooksPath) ? path.join(scopePath, hooksPath) : hooksPath;\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const hooks = require(hooksFinalPath);\n return hooks;\n }\n return undefined;\n}\n\nexport function onPersist(scopePath: string, scopeJson: ScopeJson): ContentTransformer {\n const defaultFunc = (content) => content;\n const hooks = loadHooks(scopePath, scopeJson);\n if (hooks) {\n const onReadFunction = hooks.onPersist;\n if (onReadFunction) {\n return onReadFunction;\n }\n }\n return defaultFunc;\n}\n\nexport function onRead(scopePath: string, scopeJson: ScopeJson): ContentTransformer {\n const defaultFunc = (content) => content;\n\n const hooks = loadHooks(scopePath, scopeJson);\n if (hooks) {\n const onReadFunction = hooks.onRead;\n if (onReadFunction) {\n return onReadFunction;\n }\n }\n return defaultFunc;\n}\n"],"mappings":";;;;;;;AAAA,SAAAA,gBAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,eAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,MAAA;EAAA,MAAAH,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAC,KAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAAwB,SAAAC,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAMxB,SAASG,SAASA,CAACC,SAAiB,EAAEC,SAAoB,EAAmB;EAC3E,MAAMC,SAAS,GAAGD,SAAS,CAACC,SAAS;EACrC,IAAIA,SAAS,EAAE;IACb,MAAMC,cAAc,GAAG,IAAAC,yBAAU,EAACF,SAAS,CAAC,GAAGG,eAAI,CAACC,IAAI,CAACN,SAAS,EAAEE,SAAS,CAAC,GAAGA,SAAS;IAC1F;IACA,MAAMK,KAAK,GAAGb,OAAO,CAACS,cAAc,CAAC;IACrC,OAAOI,KAAK;EACd;EACA,OAAOC,SAAS;AAClB;AAEO,SAASC,SAASA,CAACT,SAAiB,EAAEC,SAAoB,EAAsB;EACrF,MAAMS,WAAW,GAAIC,OAAO,IAAKA,OAAO;EACxC,MAAMJ,KAAK,GAAGR,SAAS,CAACC,SAAS,EAAEC,SAAS,CAAC;EAC7C,IAAIM,KAAK,EAAE;IACT,MAAMK,cAAc,GAAGL,KAAK,CAACE,SAAS;IACtC,IAAIG,cAAc,EAAE;MAClB,OAAOA,cAAc;IACvB;EACF;EACA,OAAOF,WAAW;AACpB;AAEO,SAASG,MAAMA,CAACb,SAAiB,EAAEC,SAAoB,EAAsB;EAClF,MAAMS,WAAW,GAAIC,OAAO,IAAKA,OAAO;EAExC,MAAMJ,KAAK,GAAGR,SAAS,CAACC,SAAS,EAAEC,SAAS,CAAC;EAC7C,IAAIM,KAAK,EAAE;IACT,MAAMK,cAAc,GAAGL,KAAK,CAACM,MAAM;IACnC,IAAID,cAAc,EAAE;MAClB,OAAOA,cAAc;IACvB;EACF;EACA,OAAOF,WAAW;AACpB","ignoreList":[]}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import isRelative from 'is-relative-path';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
|
|
4
|
-
import type { ScopeJson } from '@teambit/legacy.scope';
|
|
5
|
-
|
|
6
|
-
export type ContentTransformer = (content: Buffer) => Buffer;
|
|
7
|
-
|
|
8
|
-
function loadHooks(scopePath: string, scopeJson: ScopeJson): any | undefined {
|
|
9
|
-
const hooksPath = scopeJson.hooksPath;
|
|
10
|
-
if (hooksPath) {
|
|
11
|
-
const hooksFinalPath = isRelative(hooksPath) ? path.join(scopePath, hooksPath) : hooksPath;
|
|
12
|
-
// eslint-disable-next-line global-require, import/no-dynamic-require
|
|
13
|
-
const hooks = require(hooksFinalPath);
|
|
14
|
-
return hooks;
|
|
15
|
-
}
|
|
16
|
-
return undefined;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function onPersist(scopePath: string, scopeJson: ScopeJson): ContentTransformer {
|
|
20
|
-
const defaultFunc = (content) => content;
|
|
21
|
-
const hooks = loadHooks(scopePath, scopeJson);
|
|
22
|
-
if (hooks) {
|
|
23
|
-
const onReadFunction = hooks.onPersist;
|
|
24
|
-
if (onReadFunction) {
|
|
25
|
-
return onReadFunction;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return defaultFunc;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function onRead(scopePath: string, scopeJson: ScopeJson): ContentTransformer {
|
|
32
|
-
const defaultFunc = (content) => content;
|
|
33
|
-
|
|
34
|
-
const hooks = loadHooks(scopePath, scopeJson);
|
|
35
|
-
if (hooks) {
|
|
36
|
-
const onReadFunction = hooks.onRead;
|
|
37
|
-
if (onReadFunction) {
|
|
38
|
-
return onReadFunction;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return defaultFunc;
|
|
42
|
-
}
|
|
File without changes
|