Files
site-builder/craft/scripts/e2e-preview-assets-entry.ts
T

47 lines
3.1 KiB
TypeScript
Raw Normal View History

// Bundled (esbuild, node) by scripts/e2e-preview-assets.mjs: a version-history snapshot whose header, body and
// design carry uploads exactly as the AssetPicker stores them (the same-origin panel proxy URL), turned into the
// Preview document by the REAL buildSnapshotPreviewHtml (the same export + absolute-URL step as TopBar's Preview),
// plus the published body for the backend publish check.
import { editorProxyUrl } from '../src/sitesmith/editor-asset-urls';
import { buildSnapshotPreviewHtml, type Snapshot } from '../src/utils/history-restore';
import { exportBodyHtml } from '../src/utils/html-export';
import { flattenTreeForCraft } from '../src/utils/craft-tree';
import { inlinePreviewAssets, collectPreviewAssetUrls } from '../src/utils/preview-assets';
export const SITE_ID = 7;
export const FILES = ['1700000000_aa11bb22_hero.png', '1700000001_bb22cc33_logo+v2.png', 'my photo.png', 'café.png', 'poster.png', 'fav.png'];
export const OTHER_SITE_FILE = 'other-site.png';
const U = (i: number) => editorProxyUrl(SITE_ID, FILES[i]);
const n = (type: string, props: Record<string, unknown>, nodes?: any[]) => ({ type: { resolvedName: type }, props, ...(nodes ? { nodes } : {}) });
const state = (tree: any) => JSON.stringify(flattenTreeForCraft(tree).nodes);
const header = state(n('Container', { node_id: 'ROOT', tag: 'div' }, [
n('Navbar', { node_id: 'nav', logoType: 'image', logoImage: U(1), logoUrl: '/', links: [{ text: 'Home', href: '/' }] }),
]));
const page = state(n('Container', { node_id: 'ROOT', tag: 'div' }, [
n('BackgroundSection', { node_id: 'bg', bgImage: U(0), overlayOpacity: 0.2 }, [n('Heading', { node_id: 'h', text: 'Hello', level: 'h1' })]),
n('ImageBlock', { node_id: 'i1', src: U(0), alt: 'plain' }),
n('ImageBlock', { node_id: 'i2', src: U(1), alt: 'plus' }),
n('ImageBlock', { node_id: 'i3', src: U(2), alt: 'space' }),
n('ImageBlock', { node_id: 'i4', src: U(3), alt: 'unicode' }),
n('Container', { node_id: 'c', tag: 'div', style: { minHeight: '60px', backgroundImage: `url(${U(0)})` } }),
n('HtmlBlock', { node_id: 'html', code:
`<img id="rich" src="${U(0)}" alt="rich"><img id="srcset" alt="srcset" src="${U(2)}" srcset="${U(0)} 1x, ${U(3)} 2x">`
+ `<video id="vid" poster="${U(4)}" width="40" height="30"></video>`
+ `<a id="lnk" href="${U(0)}">full size</a>`
+ `<img id="other" alt="other" src="${editorProxyUrl(8, OTHER_SITE_FILE)}">` }),
n('ImageBlock', { node_id: 'i5', src: editorProxyUrl(SITE_ID, 'does-not-exist.png'), alt: 'missing' }),
]));
export const SNAPSHOT: Snapshot = {
pages_craft_state: [{ id: 'p1', name: 'Home', slug: 'index', craftState: page }],
header_craft_state: header,
footer_craft_state: null,
design: { favicon: U(5) },
} as unknown as Snapshot;
/** The Preview document as origin/main hands it to the sandboxed tab (proxy URLs made absolute on `origin`). */
export function previewHtml(origin: string): string { return buildSnapshotPreviewHtml(SNAPSHOT, 0, origin); }
/** The page body Save/Publish sends (no Preview step involved). */
export function publishBody(): string { return exportBodyHtml(header).html + exportBodyHtml(page).html; }
export { inlinePreviewAssets, collectPreviewAssetUrls };