sample-pilet-service
Version:
Piral: Sample pilet feed service.
111 lines • 4.33 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.publishPilet = exports.getLatestPilets = exports.getFiles = void 0;
const path_1 = require("path");
const mime_types_1 = require("mime-types");
const pilets_1 = require("../pilets");
const db_1 = require("../db");
function getDetails(rest) {
const parts = rest.split('/');
if (rest.startsWith('@')) {
const id = parts.splice(0, 2).join('/');
parts.unshift(id);
}
const id = parts.shift();
const version = parts.shift();
const file = parts.pop();
const directory = parts.join('/');
return [id, version, directory, file];
}
const getFiles = () => (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
// (/@:org)?/:name/:version/((*/)?:file)?
const { 0: rest = '' } = req.params;
const [id, version, directory, file] = getDetails(rest);
const pilet = yield (0, db_1.getPilet)(id, version);
if (!pilet) {
res.status(404).send('Pilet not found!');
}
else if (file) {
const path = (0, path_1.join)(directory, file).split(path_1.sep).join('/');
const content = pilet.files[path];
if (content) {
const bufferContent = Buffer.from(pilet.files[path]);
const tenYears = 24 * 60 * 60 * 365 * 10;
res
.header('Cache-Control', `public, max-age=${tenYears}`)
.contentType((0, mime_types_1.lookup)(file) || 'application/octet-stream')
.status(200)
.send(bufferContent);
}
else {
if (file.indexOf('.') !== -1) {
res.status(404).send('File not found!');
}
else {
next();
}
}
}
else {
res.status(200).json({
items: Object.keys(pilet.files),
});
}
});
exports.getFiles = getFiles;
const getLatestPilets = () => (_, res) => __awaiter(void 0, void 0, void 0, function* () {
const items = yield (0, pilets_1.latestPilets)();
return res.json({
items: items.map((_a) => {
var { author: _0, license: _1, description: _2 } = _a, item = __rest(_a, ["author", "license", "description"]);
return item;
}),
});
});
exports.getLatestPilets = getLatestPilets;
const publishPilet = (rootUrl, snapshot) => (req, res) => {
const bb = req.busboy;
if (bb) {
req.pipe(bb);
bb.on('file', (_, file) => (0, pilets_1.storePilet)(file, rootUrl)
.then(snapshot.update)
.then(() => res.status(200).json({
success: true,
}))
.catch((err) => {
var _a;
return res.status(((_a = err.message) === null || _a === void 0 ? void 0 : _a.indexOf('already exists')) !== -1 ? 409 : 400).json({
success: false,
message: err.message,
});
}));
}
else {
res.status(400).json({
success: false,
message: 'Missing file upload.',
});
}
};
exports.publishPilet = publishPilet;
//# sourceMappingURL=pilets.js.map