Remix migration
This commit is contained in:
79
emotion-server.js
Normal file
79
emotion-server.js
Normal file
@ -0,0 +1,79 @@
|
||||
// @emotion/server is known to not work correctly in the Cloudflare Workers environment
|
||||
// See https://github.com/emotion-js/emotion/issues/2446#issuecomment-1372440174
|
||||
|
||||
function createExtractCriticalToChunks(cache) {
|
||||
return function (html) {
|
||||
const RGX = new RegExp(`${cache.key}-([a-zA-Z0-9-_]+)`, "gm");
|
||||
|
||||
const o = { html, styles: [] };
|
||||
let match;
|
||||
const ids = {};
|
||||
while ((match = RGX.exec(html)) !== null) {
|
||||
if (ids[match[1]] === undefined) {
|
||||
ids[match[1]] = true;
|
||||
}
|
||||
}
|
||||
|
||||
const regularCssIds = [];
|
||||
let regularCss = "";
|
||||
|
||||
Object.keys(cache.inserted).forEach((id) => {
|
||||
if (
|
||||
(ids[id] !== undefined ||
|
||||
cache.registered[`${cache.key}-${id}`] === undefined) &&
|
||||
cache.inserted[id] !== true
|
||||
) {
|
||||
if (cache.registered[`${cache.key}-${id}`]) {
|
||||
regularCssIds.push(id);
|
||||
regularCss += cache.inserted[id];
|
||||
} else {
|
||||
o.styles.push({
|
||||
key: `${cache.key}-global`,
|
||||
ids: [id],
|
||||
css: cache.inserted[id],
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
o.styles.push({ key: cache.key, ids: regularCssIds, css: regularCss });
|
||||
|
||||
return o;
|
||||
};
|
||||
}
|
||||
|
||||
function generateStyleTag(cssKey, ids, styles, nonceString) {
|
||||
return `<style data-emotion="${cssKey} ${ids}"${nonceString}>${styles}</style>`;
|
||||
}
|
||||
|
||||
function createConstructStyleTagsFromChunks(cache, nonceString) {
|
||||
return function (criticalData) {
|
||||
let styleTagsString = "";
|
||||
|
||||
criticalData.styles.forEach((item) => {
|
||||
styleTagsString += generateStyleTag(
|
||||
item.key,
|
||||
item.ids.join(" "),
|
||||
item.css,
|
||||
nonceString
|
||||
);
|
||||
});
|
||||
|
||||
return styleTagsString;
|
||||
};
|
||||
}
|
||||
|
||||
export function createEmotionServer(cache) {
|
||||
if (cache.compat !== true) {
|
||||
cache.compat = true;
|
||||
}
|
||||
const nonceString =
|
||||
cache.nonce !== undefined ? ` nonce="${cache.nonce}"` : "";
|
||||
return {
|
||||
extractCriticalToChunks: createExtractCriticalToChunks(cache),
|
||||
constructStyleTagsFromChunks: createConstructStyleTagsFromChunks(
|
||||
cache,
|
||||
nonceString
|
||||
),
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user