UNPKG

@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
"use strict"; 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;