61 lines
No EOL
1.9 KiB
JavaScript
61 lines
No EOL
1.9 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.stringifyTheme = stringifyTheme;
|
|
var _deepmerge = require("@mui/utils/deepmerge");
|
|
/* eslint-disable import/prefer-default-export */
|
|
|
|
function isSerializable(val) {
|
|
return (0, _deepmerge.isPlainObject)(val) || typeof val === 'undefined' || typeof val === 'string' || typeof val === 'boolean' || typeof val === 'number' || Array.isArray(val);
|
|
}
|
|
|
|
/**
|
|
* `baseTheme` usually comes from `createTheme()` or `extendTheme()`.
|
|
*
|
|
* This function is intended to be used with zero-runtime CSS-in-JS like Pigment CSS
|
|
* For example, in a Next.js project:
|
|
*
|
|
* ```js
|
|
* // next.config.js
|
|
* const { extendTheme } = require('@mui/material/styles');
|
|
*
|
|
* const theme = extendTheme();
|
|
* // `.toRuntimeSource` is Pigment CSS specific to create a theme that is available at runtime.
|
|
* theme.toRuntimeSource = stringifyTheme;
|
|
*
|
|
* module.exports = withPigment({
|
|
* theme,
|
|
* });
|
|
* ```
|
|
*/
|
|
function stringifyTheme(baseTheme = {}) {
|
|
const serializableTheme = {
|
|
...baseTheme
|
|
};
|
|
function serializeTheme(object) {
|
|
const array = Object.entries(object);
|
|
// eslint-disable-next-line no-plusplus
|
|
for (let index = 0; index < array.length; index++) {
|
|
const [key, value] = array[index];
|
|
if (!isSerializable(value) || key.startsWith('unstable_')) {
|
|
delete object[key];
|
|
} else if ((0, _deepmerge.isPlainObject)(value)) {
|
|
object[key] = {
|
|
...value
|
|
};
|
|
serializeTheme(object[key]);
|
|
}
|
|
}
|
|
}
|
|
serializeTheme(serializableTheme);
|
|
return `import { unstable_createBreakpoints as createBreakpoints, createTransitions } from '@mui/material/styles';
|
|
|
|
const theme = ${JSON.stringify(serializableTheme, null, 2)};
|
|
|
|
theme.breakpoints = createBreakpoints(theme.breakpoints || {});
|
|
theme.transitions = createTransitions(theme.transitions || {});
|
|
|
|
export default theme;`;
|
|
} |