mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-06-03 14:19:52 +00:00
nodejs-oe-cache-native: initial checkin
This implements an 'npm cache add' like functionality but allows to specify the key of the data and sets metadata which are required to find the data. It is used to cache information as done during 'npm install'. Keyformat and metadata are nodejs version specific. Signed-off-by: Enrico Scholz <enrico.scholz@sigma-chemnitz.de> Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
@@ -0,0 +1,77 @@
|
|||||||
|
#!/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}).`);
|
||||||
|
})
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
DESCRIPTION = "OE helper for manipulating npm cache"
|
||||||
|
LICENSE = "Apache-2.0"
|
||||||
|
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
|
||||||
|
|
||||||
|
SRC_URI = "\
|
||||||
|
file://oe-npm-cache \
|
||||||
|
"
|
||||||
|
|
||||||
|
inherit native
|
||||||
|
|
||||||
|
B = "${WORKDIR}/build"
|
||||||
|
|
||||||
|
do_configure() {
|
||||||
|
sed -e 's!@@libdir@@!${libdir}!g' < '${WORKDIR}/oe-npm-cache' > '${B}/oe-npm-cache'
|
||||||
|
}
|
||||||
|
|
||||||
|
do_install() {
|
||||||
|
install -D -p -m 0755 ${B}/oe-npm-cache ${D}${bindir}/oe-npm-cache
|
||||||
|
}
|
||||||
|
|
||||||
|
RDEPENDS:${PN} = "nodejs-native"
|
||||||
Reference in New Issue
Block a user