78 lines
1.7 KiB
JavaScript
Executable File
78 lines
1.7 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
/// Usage: oe-npm-cache <cache-dir> <type> <key> <file-name>
|
|
/// <type> ... meta - metainformation about package
|
|
/// tgz - tarball
|
|
|
|
const process = require("node:process");
|
|
|
|
module.paths.unshift("@@libdir@@/node_modules/npm/node_modules");
|
|
|
|
const cacache = require('cacache')
|
|
const fs = require('fs')
|
|
|
|
// argv[0] is 'node', argv[1] is this script
|
|
const cache_dir = process.argv[2]
|
|
const type = process.argv[3]
|
|
const key = process.argv[4]
|
|
const file = process.argv[5]
|
|
|
|
const data = fs.readFileSync(file)
|
|
|
|
// metadata content is highly nodejs dependent; when cache entries are not
|
|
// found, place debug statements in 'make-fetch-happen/lib/cache/policy.js'
|
|
// (CachePolicy::satisfies())
|
|
const xlate = {
|
|
'meta': {
|
|
'key_prefix': 'make-fetch-happen:request-cache:',
|
|
'metadata': function() {
|
|
return {
|
|
time: Date.now(),
|
|
url: key,
|
|
reqHeaders: {
|
|
'accept': 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*',
|
|
},
|
|
resHeaders: {
|
|
"content-type": "application/json",
|
|
"status": 200,
|
|
},
|
|
options: {
|
|
compress: true,
|
|
}
|
|
};
|
|
},
|
|
},
|
|
|
|
'tgz': {
|
|
'key_prefix': 'make-fetch-happen:request-cache:',
|
|
'metadata': function() {
|
|
return {
|
|
time: Date.now(),
|
|
url: key,
|
|
reqHeaders: {
|
|
'accept': '*/*',
|
|
},
|
|
resHeaders: {
|
|
"content-type": "application/octet-stream",
|
|
"status": 200,
|
|
},
|
|
options: {
|
|
compress: true,
|
|
},
|
|
};
|
|
},
|
|
},
|
|
};
|
|
|
|
const info = xlate[type];
|
|
let opts = {}
|
|
|
|
if (info.metadata) {
|
|
opts['metadata'] = info.metadata();
|
|
}
|
|
|
|
cacache.put(cache_dir, info.key_prefix + key, data, opts)
|
|
.then(integrity => {
|
|
console.log(`Saved content of ${key} (${file}).`);
|
|
})
|