@mui/internal-docs-infra
Version:
MUI Infra - internal documentation creation tools.
39 lines (37 loc) • 999 B
JavaScript
import LZString from 'lz-string';
/**
* Compress object for CodeSandbox API
*/
function compress(object) {
return LZString.compressToBase64(JSON.stringify(object)).replace(/\+/g, '-') // Convert '+' to '-'
.replace(/\//g, '_') // Convert '/' to '_'
.replace(/=+$/, ''); // Remove ending '='
}
/**
* Utility function for creating CodeSandbox demos
* Returns the configuration that can be used with openWithForm
*/
export function createCodeSandbox({
flattenedFiles,
rootFile
}) {
// Convert flattened files to string format
const files = {};
Object.entries(flattenedFiles).forEach(([filePath, fileData]) => {
files[filePath] = {
content: fileData.source
};
});
const parameters = compress({
files
});
// ref: https://codesandbox.io/docs/learn/browser-sandboxes/cli-api#supported-parameters
const formData = {
parameters,
query: `file=${rootFile}`
};
return {
url: 'https://codesandbox.io/api/v1/sandboxes/define',
formData
};
}