@golemio/cli
Version:
Collection of executables intended for use with Golemio services and modules
108 lines • 4.9 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.printCommandHelp = exports.uploadFile = exports.generateAsyncApiConfig = void 0;
const bundler_1 = __importDefault(require("@asyncapi/bundler"));
const identity_1 = require("@azure/identity");
const storage_blob_1 = require("@azure/storage-blob");
const fast_glob_1 = __importDefault(require("fast-glob"));
const fs_1 = __importStar(require("fs"));
const gluegun_1 = require("gluegun");
const path_1 = __importDefault(require("path"));
const generateAsyncApiConfig = async (oasHeaderFilePath, oasFilesGlob, oasMergedOutputFilePath) => {
try {
let mergeInput = [];
for (const pathEntry of fast_glob_1.default.sync(oasFilesGlob, { absolute: true })) {
mergeInput.push(pathEntry);
}
//accepts last path in an array as header
if (oasHeaderFilePath) {
mergeInput.push(oasHeaderFilePath);
}
const document = await (0, bundler_1.default)(mergeInput, {
xOrigin: true,
});
const outFilePath = path_1.default.resolve(process.cwd(), oasMergedOutputFilePath);
if (document.yml()) {
(0, fs_1.writeFileSync)(outFilePath, document.yml());
}
return {
isError: false,
message: "Successfully generated asyncapi file at " + path_1.default.relative(process.cwd(), outFilePath),
};
}
catch (error) {
return { isError: true, message: `${error.message}` };
}
};
exports.generateAsyncApiConfig = generateAsyncApiConfig;
const uploadFile = async (input, output) => {
try {
const util = require("util");
const exec = util.promisify(require("child_process").exec);
const file = `${output}/index.html`;
const cliCommand = createAsyncapiCliCommand(input, output);
await exec(cliCommand);
const credentials = new identity_1.ClientSecretCredential(process.env.AZURE_BLOB_TENANT_ID, process.env.AZURE_BLOB_CLIENT_ID, process.env.AZURE_BLOB_CLIENT_SECRET);
const blobServiceClient = new storage_blob_1.BlobServiceClient(`https://${process.env.AZURE_BLOB_ACCOUNT}.blob.core.windows.net`, credentials);
const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_BLOB_CONTAINER_NAME);
const blobClient = containerClient.getBlockBlobClient(file);
const filePath = path_1.default.resolve(process.cwd(), file);
const fileToBeUploaded = await fs_1.default.readFileSync(filePath);
const options = {
blobHTTPHeaders: { blobContentType: "text/html" },
};
await blobClient.uploadData(fileToBeUploaded, options);
return { isError: false, message: `File ${file} uploaded.` };
}
catch (error) {
return { isError: true, message: `${error.message}` };
}
};
exports.uploadFile = uploadFile;
/**
* Create command for asyncapi cli
* @param input
* @param output
* @returns
*/
const createAsyncapiCliCommand = (input, output) => {
// eslint-disable-next-line max-len
return `asyncapi generate fromTemplate ${input} @asyncapi/html-template@2.3.14 --output ${output} -p singleFile=true --no-interactive --force-write`;
};
/**
* Print command help for swagger
*/
const printCommandHelp = () => {
gluegun_1.print.info(gluegun_1.print.colors.blue("\ngolemio asyncapi (asp)"));
gluegun_1.print.info(" Commands\n");
gluegun_1.print.info(" generate \t\t Generate asyncapi documentation from multiple inputs");
gluegun_1.print.info(" upload \t\t Build and upload asyncapi documentation to Azure Blob Storage");
};
exports.printCommandHelp = printCommandHelp;
//# sourceMappingURL=asyncapi.utils.js.map