sample-pilet-service
Version:
Piral: Sample pilet feed service.
176 lines • 6.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractPiletMetadata = extractPiletMetadata;
exports.getPiletDefinition = getPiletDefinition;
const path_1 = require("path");
const author_1 = require("./author");
const untar_1 = require("./untar");
const hash_1 = require("./hash");
const packageRoot = 'package/';
const checkV1 = /^\/\/\s*@pilet\s+v:1\s*\(([A-Za-z0-9\_\:\-]+)\)/;
const checkV2 = /^\/\/\s*@pilet\s+v:2\s*(?:\(([A-Za-z0-9\_\:\-]+),\s*(.*)\))?/;
const checkV3 = /^\/\/\s*@pilet\s+v:3\s*(?:\(([A-Za-z0-9\_\:\-]+),\s*(.*)\))?/;
const checkVx = /^\/\/\s*@pilet\s+v:x\s*(?:\((.*)\))?/;
let iter = 1;
function getPackageJson(files) {
const fileName = `${packageRoot}package.json`;
const fileContent = files[fileName];
const content = fileContent.toString('utf8');
return JSON.parse(content);
}
function getContent(path, files) {
const content = path && files[path];
return content && content.toString('utf8');
}
function getPiletMainPath(data, files) {
const paths = [
data.main,
`dist/${data.main}`,
`${data.main}/index.js`,
`dist/${data.main}/index.js`,
'index.js',
'dist/index.js',
];
return paths.map((filePath) => `${packageRoot}${filePath}`).filter((filePath) => !!files[filePath])[0];
}
function getDependencies(deps, rootUrl, name, version) {
try {
const depMap = JSON.parse(deps);
if (depMap && typeof depMap === 'object') {
if (Object.keys(depMap).every((m) => typeof depMap[m] === 'string')) {
const updateDepMapUrls = (obj, key, upDatedValue) => {
obj[key] = upDatedValue;
};
Object.keys(depMap).forEach((k) => updateDepMapUrls(depMap, k, evalDep(depMap[k], rootUrl, name, version)));
return depMap;
}
}
}
catch (_a) { }
return {};
}
function evalDep(dependency, rootUrl, name, version) {
if (dependency.includes(rootUrl)) {
return dependency;
}
return `${rootUrl}/files/${name}/${version}/${dependency}`;
}
function extractPiletMetadata(data, main, file, files, rootUrl) {
const name = data.name;
const version = data.preview ? `${data.version}-pre.${iter++}` : data.version;
const author = (0, author_1.formatAuthor)(data.author);
const license = {
type: data.license || 'ISC',
text: getContent(`${packageRoot}LICENSE`, files) || '',
};
if (checkV1.test(main)) {
// uses single argument; requireRef (required)
const [, requireRef] = checkV1.exec(main);
return {
name,
version,
type: 'v1',
requireRef,
description: data.description,
custom: data.custom,
author,
integrity: (0, hash_1.computeIntegrity)(main),
link: `${rootUrl}/files/${name}/${version}/${file}`,
license,
};
}
else if (checkV2.test(main)) {
// uses two arguments; requireRef and dependencies as JSON (required)
const [, requireRef, plainDependencies] = checkV2.exec(main);
return {
name,
version,
type: 'v2',
requireRef,
description: data.description || '',
integrity: (0, hash_1.computeIntegrity)(main),
author: (0, author_1.formatAuthor)(data.author),
custom: data.custom,
dependencies: getDependencies(plainDependencies, rootUrl, name, version),
link: `${rootUrl}/files/${name}/${version}/${file}`,
license,
};
}
else if (checkV3.test(main)) {
// uses two arguments; requireRef and dependencies as JSON (required)
const [, requireRef, plainDependencies] = checkV3.exec(main);
return {
name,
version,
type: 'v3',
requireRef,
description: data.description || '',
integrity: (0, hash_1.computeIntegrity)(main),
author: (0, author_1.formatAuthor)(data.author),
custom: data.custom,
dependencies: getDependencies(plainDependencies, rootUrl, name, version),
link: `${rootUrl}/files/${name}/${version}/${file}`,
license,
};
}
else if (main.includes('"Container initialization failed as it has already been initialized with a different share scope"') &&
/^var [A-Za-z0-9_]+;/.test(main)) {
return {
name,
version,
type: 'mf',
description: data.description || '',
integrity: (0, hash_1.computeIntegrity)(main),
author: (0, author_1.formatAuthor)(data.author),
custom: data.custom,
link: `${rootUrl}/files/${name}/${version}/${file}`,
license,
};
}
else if (checkVx.test(main)) {
// uses single argument; spec identifier (optional)
const [, spec] = checkVx.exec(main);
return {
name,
version,
type: `vx`,
spec,
description: data.description || '',
integrity: (0, hash_1.computeIntegrity)(main),
author: (0, author_1.formatAuthor)(data.author),
custom: data.custom,
link: `${rootUrl}/files/${name}/${version}/${file}`,
license,
};
}
else {
return {
name,
version,
type: 'v0',
description: data.description,
custom: data.custom,
author,
hash: (0, hash_1.computeHash)(main),
link: `${rootUrl}/files/${name}/${version}/${file}`,
license,
};
}
}
function getPiletDefinition(stream, rootUrl) {
return (0, untar_1.untar)(stream).then((files) => {
const data = getPackageJson(files);
const path = getPiletMainPath(data, files);
const root = (0, path_1.dirname)(path);
const file = (0, path_1.basename)(path);
const main = getContent(path, files);
const meta = extractPiletMetadata(data, main, file, files, rootUrl);
return {
meta,
files: Object.fromEntries(Object.entries(files)
.filter(([name]) => name.startsWith(`${root}/`))
.map(([name, buffer]) => [name.substring(root.length + 1), buffer])),
};
});
}
//# sourceMappingURL=pilet.js.map