forked from harish2704/npm-offline-registry
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.js
80 lines (62 loc) · 2.39 KB
/
utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
var path = require('path');
var fs = require('fs');
var config = require( __dirname + '/./config' );
var Promise = require('bluebird');
var _exec = Promise.promisify( require('child_process').exec );
var REGISTRY_NAME = config.REGISTRY_NAME;
var LOCAL_REGISTRY = config.LOCAL_REGISTRY;
function exec( cmd, envVars ){
return _exec( cmd, { env: envVars });
}
exports.exec = exec;
function fileExists( fname ){
return new Promise( function( resolve ){
fs.exists( fname, function(exists){
resolve( exists );
});
});
}
exports.fileExists = fileExists;
var readFile = Promise.promisify( fs.readFile );
exports.readFile = readFile;
exports.patchData = function ( data ){
Object.keys(data.versions).forEach( function( v ){
var val = data.versions[v];
var protocal = 'http://';
if( val.dist.tarball.indexOf( 'https:' ) !== false ){
protocal = 'https://';
}
val.dist.tarball = val.dist.tarball.replace( protocal + REGISTRY_NAME, LOCAL_REGISTRY );
});
};
var fetchAndCacheMetadataCmd =[
'mkdir -p $packageCacheDir',
'wget -nv "http://$REGISTRY_NAME/$packageName" -O $cacheFile || { wgetExitStatus=$? && rm $cacheFile; exit $wgetExitStatus ; }'
].join( ';' );
var fetchAndCacheTarballCmd = [
'mkdir -p $packageTarballDir',
'wget -nv $tarballUrl -O $tarballPath || { wgetExitStatus=$? && rm $tarballPath; exit $wgetExitStatus ; }',
'cd $packageTarballDir; tar -xzf package.tgz package/package.json',
].join( ';' );
exports.fetchAndCacheMetadata = function ( packageName, cacheFile ){
var packageCacheDir = path.dirname( cacheFile );
//handle slash in scoped package name but do not convert @
packageName = encodeURIComponent(packageName).replace(/^%40/, '@');
return exec( fetchAndCacheMetadataCmd, {
packageCacheDir: packageCacheDir,
REGISTRY_NAME: REGISTRY_NAME,
packageName: packageName,
cacheFile: cacheFile,
});
};
exports.fetchAndCacheTarball = function ( packageName, version, tarballPath ){
//handle slash in scoped package name but do not convert @
packageName = encodeURIComponent(packageName).replace(/^%40/, '@');
var tarballUrl = 'http://' + REGISTRY_NAME + '/' + packageName + '/-/' + packageName + '-' + version + '.tgz';
var packageTarballDir = path.dirname( tarballPath );
return exec( fetchAndCacheTarballCmd, {
packageTarballDir: packageTarballDir,
tarballUrl: tarballUrl,
tarballPath: tarballPath,
});
};