UNPKG

sample-pilet-service

Version:

Piral: Sample pilet feed service.

176 lines 6.5 kB
"use strict"; 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