@sigi/ssr
Version:
Server side rendering support for sigi framework
45 lines • 1.88 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import { GLOBAL_KEY_SYMBOL, RETRY_KEY_SYMBOL } from '@sigi/core';
import serialize from 'serialize-javascript';
const ScriptId = 'sigi-persisted-data';
export class StateToPersist {
constructor(dataToPersist, actionsToRetry) {
this.dataToPersist = dataToPersist;
this.actionsToRetry = actionsToRetry;
}
extractToScriptString(withScriptTag = true) {
if (this.dataToPersist == null) {
return '';
}
const contentScript = this.serialize();
return withScriptTag ? `<script id="${ScriptId}">${contentScript}</script>` : contentScript;
}
renderToJSX() {
if (this.dataToPersist == null) {
return null;
}
return _jsx("script", { id: ScriptId, dangerouslySetInnerHTML: { __html: this.serialize() } });
}
renderToDocument(doc) {
if (this.dataToPersist == null) {
return doc;
}
const endBodyPosition = doc.indexOf('</body>');
if (endBodyPosition === -1) {
return doc;
}
return doc.substr(0, endBodyPosition) + this.extractToScriptString() + doc.substring(endBodyPosition);
}
extractToJSONScriptString() {
if (this.dataToPersist == null) {
return '';
}
const stateContent = serialize(this.dataToPersist, { isJSON: true });
return `<script id="${GLOBAL_KEY_SYMBOL}" type="application/json">${stateContent}</script><script id="${RETRY_KEY_SYMBOL}" type="application/json">${JSON.stringify(this.actionsToRetry)}</script>`;
}
serialize() {
const content = serialize(this.dataToPersist, { isJSON: true });
return `window['${GLOBAL_KEY_SYMBOL}']=${content};window['${RETRY_KEY_SYMBOL}']=${JSON.stringify(this.actionsToRetry)}`;
}
}
//# sourceMappingURL=state-to-persist.js.map