scrivito
Version:
Scrivito is a professional, yet easy to use SaaS Enterprise Content Management Service, built for digital agencies and medium to large businesses. It is completely maintenance-free, cost-effective, and has unprecedented performance and security.
85 lines (72 loc) • 2.15 kB
text/typescript
import { getScrivitoVersion, logError } from 'scrivito_sdk/common';
import { setContentStateId } from 'scrivito_sdk/data';
import {
DataRecording,
LoadableData,
generateRecording,
loadRecording,
} from 'scrivito_sdk/loadable';
import { currentObjSpaceId } from 'scrivito_sdk/models';
import { withBatchedUpdates } from 'scrivito_sdk/state';
interface MaybeContentDump {
version: unknown;
}
interface ContentDump {
version: string;
csid: string;
recording: DataRecording;
}
/** dump the content of all provided LoadableData instances */
export function generateContentDump(
data: Array<LoadableData<unknown>>,
contentStateId: string
): string {
return stringify({
version: getScrivitoVersion(),
csid: contentStateId,
recording: generateRecording(data),
});
}
/** load the data from the content dump string into the SDK */
export function loadContentDump(contentDump: string): void {
const parsed = parse(contentDump);
if (!parsed) {
logError('could not preload: parsing dump failed');
return;
}
if (!isContentDumpFromThisVersion(parsed)) {
logError(
'could not preload: ' +
`dump is from version ${String(parsed.version)}` +
`, this is version ${getScrivitoVersion()}`
);
return;
}
withBatchedUpdates(() => {
setContentStateId(currentObjSpaceId(), parsed.csid);
loadRecording(parsed.recording);
});
}
function stringify(contentDump: ContentDump): string {
return JSON.stringify(contentDump);
}
function parse(stringifiedContentDump: string): MaybeContentDump | undefined {
const parsed = parseJsonObject(stringifiedContentDump);
if (parsed && isMaybeContentDump(parsed)) return parsed;
}
function parseJsonObject(text: string): object | undefined {
if (text.charAt(0) !== '{') return;
try {
return JSON.parse(text) as object;
} catch {
return;
}
}
function isMaybeContentDump(parsed: object): parsed is MaybeContentDump {
return !!(parsed as MaybeContentDump).version;
}
function isContentDumpFromThisVersion(
dump: MaybeContentDump
): dump is ContentDump {
return dump.version === getScrivitoVersion();
}