/**
* @fileoverview Utility functions for GitHub operations
* @license Apache-2.0
* @version 3.0.0
* @author Michael Hay <michael.hay@mediumroast.io>
* @copyright 2025 Mediumroast, Inc. All rights reserved.
*/
/**
* Encodes content for GitHub API
* @param {String|Object} content - Content to encode
* @returns {String} Base64 encoded content
*/
const encodeContent = (content) => {
if (typeof content === 'object') {
return Buffer.from(JSON.stringify(content)).toString('base64');
}
return Buffer.from(content || '').toString('base64');
};
/**
* Decodes content from GitHub API
* @param {String} content - Base64 encoded content
* @returns {String} Decoded content
*/
const decodeContent = (content) => {
return Buffer.from(content, 'base64').toString('utf-8');
};
/**
* Safely decodes and parses JSON content
* @param {String} content - Base64 encoded JSON content
* @returns {Object} Parsed JSON object
*/
const decodeJsonContent = (content) => {
try {
return JSON.parse(decodeContent(content));
} catch (err) {
return null;
}
};
/**
* Custom URL encoding for special characters
* @param {String} str - String to encode
* @returns {String} Encoded string
*/
const customEncodeURIComponent = (str) => {
return str.split('').map(char => {
return encodeURIComponent(char).replace(/[!'()*]/g, (c) => {
return '%' + c.charCodeAt(0).toString(16).toUpperCase();
});
}).join('');
};
export {
encodeContent,
decodeContent,
decodeJsonContent,
customEncodeURIComponent
};