@verdaccio/tarball 12.0.0-next-7.13 → 12.0.0-next-7.14
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/CHANGELOG.md +10 -0
- package/build/getTarballDetails.d.ts +7 -0
- package/build/getTarballDetails.js +30 -0
- package/build/getTarballDetails.js.map +1 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +13 -0
- package/build/index.js.map +1 -1
- package/package.json +8 -6
- package/src/getTarballDetails.ts +34 -0
- package/src/index.ts +1 -0
- package/tests/assets/tarball.tar +0 -0
- package/tests/assets/tarball.tgz +0 -0
- package/tests/getTarballDetails.spec.ts +37 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## 12.0.0-next-7.14
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 253cc13: feat: add tarball details for published packages
|
|
8
|
+
- Updated dependencies [b0946b2]
|
|
9
|
+
- @verdaccio/url@12.0.0-next-7.14
|
|
10
|
+
- @verdaccio/core@7.0.0-next-7.14
|
|
11
|
+
- @verdaccio/utils@7.0.0-next-7.14
|
|
12
|
+
|
|
3
13
|
## 12.0.0-next-7.13
|
|
4
14
|
|
|
5
15
|
### Patch Changes
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getTarballDetails = getTarballDetails;
|
|
7
|
+
var _gunzipMaybe = _interopRequireDefault(require("gunzip-maybe"));
|
|
8
|
+
var tarStream = _interopRequireWildcard(require("tar-stream"));
|
|
9
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
10
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
+
async function getTarballDetails(readable) {
|
|
13
|
+
let fileCount = 0;
|
|
14
|
+
let unpackedSize = 0;
|
|
15
|
+
const unpack = tarStream.extract();
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
readable.pipe((0, _gunzipMaybe.default)()).pipe(unpack).on('entry', (header, stream, next) => {
|
|
18
|
+
fileCount++;
|
|
19
|
+
unpackedSize += Number(header.size);
|
|
20
|
+
stream.resume(); // important to ensure that "entry" events keep firing
|
|
21
|
+
next();
|
|
22
|
+
}).on('finish', () => {
|
|
23
|
+
resolve({
|
|
24
|
+
fileCount,
|
|
25
|
+
unpackedSize
|
|
26
|
+
});
|
|
27
|
+
}).on('error', reject);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=getTarballDetails.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getTarballDetails.js","names":["_gunzipMaybe","_interopRequireDefault","require","tarStream","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","getTarballDetails","readable","fileCount","unpackedSize","unpack","extract","Promise","resolve","reject","pipe","gunzipMaybe","on","header","stream","next","Number","size","resume"],"sources":["../src/getTarballDetails.ts"],"sourcesContent":["import gunzipMaybe from 'gunzip-maybe';\nimport { Readable } from 'stream';\nimport * as tarStream from 'tar-stream';\n\nexport type TarballDetails = {\n fileCount: number;\n unpackedSize: number; // in bytes\n};\n\nexport async function getTarballDetails(readable: Readable): Promise<TarballDetails> {\n let fileCount = 0;\n let unpackedSize = 0;\n\n const unpack = tarStream.extract();\n\n return new Promise((resolve, reject) => {\n readable\n .pipe(gunzipMaybe())\n .pipe(unpack)\n .on('entry', (header, stream, next) => {\n fileCount++;\n unpackedSize += Number(header.size);\n stream.resume(); // important to ensure that \"entry\" events keep firing\n next();\n })\n .on('finish', () => {\n resolve({\n fileCount,\n unpackedSize,\n });\n })\n .on('error', reject);\n });\n}\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,SAAA,GAAAC,uBAAA,CAAAF,OAAA;AAAwC,SAAAG,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAF,wBAAAE,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAAb,uBAAAyB,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAhB,UAAA,GAAAgB,GAAA,KAAAf,OAAA,EAAAe,GAAA;AAOjC,eAAeC,iBAAiBA,CAACC,QAAkB,EAA2B;EACnF,IAAIC,SAAS,GAAG,CAAC;EACjB,IAAIC,YAAY,GAAG,CAAC;EAEpB,MAAMC,MAAM,GAAG5B,SAAS,CAAC6B,OAAO,CAAC,CAAC;EAElC,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtCP,QAAQ,CACLQ,IAAI,CAAC,IAAAC,oBAAW,EAAC,CAAC,CAAC,CACnBD,IAAI,CAACL,MAAM,CAAC,CACZO,EAAE,CAAC,OAAO,EAAE,CAACC,MAAM,EAAEC,MAAM,EAAEC,IAAI,KAAK;MACrCZ,SAAS,EAAE;MACXC,YAAY,IAAIY,MAAM,CAACH,MAAM,CAACI,IAAI,CAAC;MACnCH,MAAM,CAACI,MAAM,CAAC,CAAC,CAAC,CAAC;MACjBH,IAAI,CAAC,CAAC;IACR,CAAC,CAAC,CACDH,EAAE,CAAC,QAAQ,EAAE,MAAM;MAClBJ,OAAO,CAAC;QACNL,SAAS;QACTC;MACF,CAAC,CAAC;IACJ,CAAC,CAAC,CACDQ,EAAE,CAAC,OAAO,EAAEH,MAAM,CAAC;EACxB,CAAC,CAAC;AACJ"}
|
package/build/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RequestOptions } from '@verdaccio/url';
|
|
2
2
|
export { convertDistRemoteToLocalTarballUrls, convertDistVersionToLocalTarballsUrl, } from './convertDistRemoteToLocalTarballUrls';
|
|
3
3
|
export { extractTarballFromUrl, getLocalRegistryTarballUri } from './getLocalRegistryTarballUri';
|
|
4
|
+
export { TarballDetails, getTarballDetails } from './getTarballDetails';
|
|
4
5
|
export { RequestOptions };
|
package/build/index.js
CHANGED
|
@@ -9,6 +9,12 @@ Object.defineProperty(exports, "RequestOptions", {
|
|
|
9
9
|
return _url.RequestOptions;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
+
Object.defineProperty(exports, "TarballDetails", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _getTarballDetails.TarballDetails;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
12
18
|
Object.defineProperty(exports, "convertDistRemoteToLocalTarballUrls", {
|
|
13
19
|
enumerable: true,
|
|
14
20
|
get: function () {
|
|
@@ -33,7 +39,14 @@ Object.defineProperty(exports, "getLocalRegistryTarballUri", {
|
|
|
33
39
|
return _getLocalRegistryTarballUri.getLocalRegistryTarballUri;
|
|
34
40
|
}
|
|
35
41
|
});
|
|
42
|
+
Object.defineProperty(exports, "getTarballDetails", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function () {
|
|
45
|
+
return _getTarballDetails.getTarballDetails;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
36
48
|
var _url = require("@verdaccio/url");
|
|
37
49
|
var _convertDistRemoteToLocalTarballUrls = require("./convertDistRemoteToLocalTarballUrls");
|
|
38
50
|
var _getLocalRegistryTarballUri = require("./getLocalRegistryTarballUri");
|
|
51
|
+
var _getTarballDetails = require("./getTarballDetails");
|
|
39
52
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_url","require","_convertDistRemoteToLocalTarballUrls","_getLocalRegistryTarballUri"],"sources":["../src/index.ts"],"sourcesContent":["import { RequestOptions } from '@verdaccio/url';\n\nexport {\n convertDistRemoteToLocalTarballUrls,\n convertDistVersionToLocalTarballsUrl,\n} from './convertDistRemoteToLocalTarballUrls';\nexport { extractTarballFromUrl, getLocalRegistryTarballUri } from './getLocalRegistryTarballUri';\n\nexport { RequestOptions };\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["_url","require","_convertDistRemoteToLocalTarballUrls","_getLocalRegistryTarballUri","_getTarballDetails"],"sources":["../src/index.ts"],"sourcesContent":["import { RequestOptions } from '@verdaccio/url';\n\nexport {\n convertDistRemoteToLocalTarballUrls,\n convertDistVersionToLocalTarballsUrl,\n} from './convertDistRemoteToLocalTarballUrls';\nexport { extractTarballFromUrl, getLocalRegistryTarballUri } from './getLocalRegistryTarballUri';\nexport { TarballDetails, getTarballDetails } from './getTarballDetails';\n\nexport { RequestOptions };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AAEA,IAAAC,oCAAA,GAAAD,OAAA;AAIA,IAAAE,2BAAA,GAAAF,OAAA;AACA,IAAAG,kBAAA,GAAAH,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdaccio/tarball",
|
|
3
|
-
"version": "12.0.0-next-7.
|
|
3
|
+
"version": "12.0.0-next-7.14",
|
|
4
4
|
"description": "tarball utilities resolver",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"private",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"repository": {
|
|
25
25
|
"type": "https",
|
|
26
26
|
"url": "https://github.com/verdaccio/verdaccio",
|
|
27
|
-
"directory": "packages/core/
|
|
27
|
+
"directory": "packages/core/tarball"
|
|
28
28
|
},
|
|
29
29
|
"bugs": {
|
|
30
30
|
"url": "https://github.com/verdaccio/verdaccio/issues"
|
|
@@ -33,11 +33,13 @@
|
|
|
33
33
|
"access": "public"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
+
"@verdaccio/core": "7.0.0-next-7.14",
|
|
37
|
+
"@verdaccio/url": "12.0.0-next-7.14",
|
|
38
|
+
"@verdaccio/utils": "7.0.0-next-7.14",
|
|
36
39
|
"debug": "4.3.4",
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"lodash": "4.17.21"
|
|
40
|
+
"gunzip-maybe": "^1.4.2",
|
|
41
|
+
"lodash": "4.17.21",
|
|
42
|
+
"tar-stream": "^3.1.7"
|
|
41
43
|
},
|
|
42
44
|
"devDependencies": {
|
|
43
45
|
"@verdaccio/types": "12.0.0-next.2",
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import gunzipMaybe from 'gunzip-maybe';
|
|
2
|
+
import { Readable } from 'stream';
|
|
3
|
+
import * as tarStream from 'tar-stream';
|
|
4
|
+
|
|
5
|
+
export type TarballDetails = {
|
|
6
|
+
fileCount: number;
|
|
7
|
+
unpackedSize: number; // in bytes
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export async function getTarballDetails(readable: Readable): Promise<TarballDetails> {
|
|
11
|
+
let fileCount = 0;
|
|
12
|
+
let unpackedSize = 0;
|
|
13
|
+
|
|
14
|
+
const unpack = tarStream.extract();
|
|
15
|
+
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
readable
|
|
18
|
+
.pipe(gunzipMaybe())
|
|
19
|
+
.pipe(unpack)
|
|
20
|
+
.on('entry', (header, stream, next) => {
|
|
21
|
+
fileCount++;
|
|
22
|
+
unpackedSize += Number(header.size);
|
|
23
|
+
stream.resume(); // important to ensure that "entry" events keep firing
|
|
24
|
+
next();
|
|
25
|
+
})
|
|
26
|
+
.on('finish', () => {
|
|
27
|
+
resolve({
|
|
28
|
+
fileCount,
|
|
29
|
+
unpackedSize,
|
|
30
|
+
});
|
|
31
|
+
})
|
|
32
|
+
.on('error', reject);
|
|
33
|
+
});
|
|
34
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -5,5 +5,6 @@ export {
|
|
|
5
5
|
convertDistVersionToLocalTarballsUrl,
|
|
6
6
|
} from './convertDistRemoteToLocalTarballUrls';
|
|
7
7
|
export { extractTarballFromUrl, getLocalRegistryTarballUri } from './getLocalRegistryTarballUri';
|
|
8
|
+
export { TarballDetails, getTarballDetails } from './getTarballDetails';
|
|
8
9
|
|
|
9
10
|
export { RequestOptions };
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { Readable } from 'stream';
|
|
4
|
+
|
|
5
|
+
import { getTarballDetails } from '../src/getTarballDetails.ts';
|
|
6
|
+
|
|
7
|
+
const getFilePath = (filename: string): string => {
|
|
8
|
+
return path.resolve(__dirname, `assets/${filename}`);
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const getFileBuffer = async (filename: string): Promise<Buffer> => {
|
|
12
|
+
return fs.promises.readFile(getFilePath(filename));
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
describe('getTarballDetails', () => {
|
|
16
|
+
test('should return stats of tarball (gzipped)', async () => {
|
|
17
|
+
const buffer = await getFileBuffer('tarball.tgz');
|
|
18
|
+
const readable = Readable.from(buffer);
|
|
19
|
+
const details = await getTarballDetails(readable);
|
|
20
|
+
expect(details.fileCount).toBe(2);
|
|
21
|
+
expect(details.unpackedSize).toBe(1280);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test('should return stats of tarball (uncompressed)', async () => {
|
|
25
|
+
const buffer = await getFileBuffer('tarball.tar');
|
|
26
|
+
const readable = Readable.from(buffer);
|
|
27
|
+
const details = await getTarballDetails(readable);
|
|
28
|
+
expect(details.fileCount).toBe(2);
|
|
29
|
+
expect(details.unpackedSize).toBe(1280);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test('should throw an error if the buffer is corrupt', async () => {
|
|
33
|
+
const corruptBuffer = Buffer.from('this is not a tarball');
|
|
34
|
+
const readable = Readable.from(corruptBuffer);
|
|
35
|
+
await expect(getTarballDetails(readable)).rejects.toThrow();
|
|
36
|
+
});
|
|
37
|
+
});
|