@mui/internal-docs-infra
Version:
MUI Infra - internal documentation creation tools.
47 lines (44 loc) • 1.3 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
/**
* Utility function for creating CodeSandbox demos
* Returns the configuration that can be used with openWithForm
*/
// @ts-ignore
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 '='
}
/**
* Create CodeSandbox for use with openWithForm
*/
export function createCodeSandbox(_ref) {
var flattenedFiles = _ref.flattenedFiles,
rootFile = _ref.rootFile;
// Convert flattened files to string format
var files = {};
Object.entries(flattenedFiles).forEach(function (_ref2) {
var _ref3 = _slicedToArray(_ref2, 2),
filePath = _ref3[0],
fileData = _ref3[1];
files[filePath] = {
content: fileData.source
};
});
var parameters = compress({
files: files
});
// ref: https://codesandbox.io/docs/learn/browser-sandboxes/cli-api#supported-parameters
var formData = {
parameters: parameters,
query: "file=".concat(rootFile)
};
return {
url: 'https://codesandbox.io/api/v1/sandboxes/define',
formData: formData
};
}