piral-cli
Version:
The standard CLI for creating and building a Piral instance or a Pilet.
74 lines • 2.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getPiletSpecMeta = getPiletSpecMeta;
const fs_1 = require("fs");
const hash_1 = require("./hash");
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 isUrl = /^https?:\/\//;
function getDependencies(deps, basePath) {
try {
const depMap = JSON.parse(deps);
if (depMap && typeof depMap === 'object') {
return Object.keys(depMap).reduce((obj, depName) => {
const depUrl = depMap[depName];
if (typeof depUrl === 'string') {
const url = isUrl.test(depUrl) ? depUrl : `${basePath}${depUrl}`;
obj[depName] = url;
}
return obj;
}, {});
}
}
catch { }
return {};
}
function getPiletSpecMeta(target, basePath) {
if ((0, fs_1.existsSync)(target) && (0, fs_1.statSync)(target).isFile()) {
const content = (0, fs_1.readFileSync)(target, 'utf8');
if (checkV1.test(content)) {
// uses single argument; requireRef (required)
const [, requireRef] = checkV1.exec(content);
return {
spec: 'v1',
requireRef,
integrity: (0, hash_1.computeIntegrity)(content),
};
}
else if (checkV2.test(content)) {
// uses two arguments; requireRef and dependencies as JSON (required)
const [, requireRef, plainDependencies] = checkV2.exec(content);
return {
spec: 'v2',
requireRef,
dependencies: getDependencies(plainDependencies, basePath),
};
}
else if (checkV3.test(content)) {
// uses two arguments; requireRef and dependencies as JSON (required)
const [, requireRef, plainDependencies] = checkV3.exec(content);
return {
spec: 'v3',
requireRef,
dependencies: getDependencies(plainDependencies, basePath),
};
}
else if (content.includes('"Container initialization failed as it has already been initialized with a different share scope"') &&
/^var [A-Za-z0-9_]+;/.test(content)) {
return {
spec: 'mf',
};
}
else {
// uses no arguments
return {
spec: 'v0',
hash: (0, hash_1.computeHash)(content),
noCache: true,
};
}
}
return {};
}
//# sourceMappingURL=spec.js.map