@httpc/cli
Version:
httpc cli for building function-based API with minimal code and end-to-end type safety
59 lines (58 loc) • 2.19 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.writeMetadata = void 0;
const promises_1 = __importDefault(require("fs/promises"));
const path_1 = __importDefault(require("path"));
function isCallHidden(call) {
return !!call?.metadata?.["httpc:hidden"];
}
function generateMetadataForFunction() {
return {
access: "write"
};
}
function generateMetadataForPipeline(call) {
return {
access: call.access || undefined,
metadata: filterClientMetadata(call.metadata) || undefined
};
}
function generateMetadata(callTree) {
if (!callTree)
return {};
return Object.fromEntries(Object.entries(callTree).map(([name, call]) => {
if (typeof call === "function") { // a basic function handler
return [name, generateMetadataForFunction()];
}
else if (call && typeof call === "object" && "execute" in call && typeof call["execute"] === "function") {
if (isCallHidden(call)) {
return [name, undefined];
}
else {
return [name, generateMetadataForPipeline(call)];
}
}
else {
return [name, generateMetadata(call)];
}
}));
}
const CLIENT_METADATA_PREFIX = "httpc-client:";
function filterClientMetadata(metadata) {
if (!metadata)
return;
return Object.fromEntries(Object.entries(metadata)
.filter(([key]) => key.startsWith(CLIENT_METADATA_PREFIX))
.map(([key, value]) => [key.substring(CLIENT_METADATA_PREFIX.length), value]));
}
function cleanUndefined(object) {
return Object.fromEntries(Object.entries(object).filter(([, value]) => value !== undefined));
}
async function writeMetadata(object, destination) {
const metadata = generateMetadata(object);
await promises_1.default.writeFile(path_1.default.join(destination, "metadata.json"), JSON.stringify(metadata), "utf-8");
}
exports.writeMetadata = writeMetadata;
;