#!/usr/bin/env node /// Usage: oe-npm-cache /// ... 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}).`); })