import { GeneratedFolder, ProjectUIDL } from '@teleporthq/teleport-types' import uidlSample from '../../../examples/test-samples/project-sample.json' import { createNextProjectGenerator } from '../src' import NextTemplate from '../src/project-template' import { BODY_CODE_TEMPLATE_ATTR, splitBodyCustomCode, wrapBodyCustomCode, } from '../src/body-code/body-code-component' const template = JSON.parse(JSON.stringify(NextTemplate)) as GeneratedFolder const BODY_CODE = [ '', '', '', ].join('\n') const buildUidlWithBodyCode = (body: string | undefined): ProjectUIDL => { const uidl = JSON.parse(JSON.stringify(uidlSample)) as ProjectUIDL uidl.globals.customCode = body === undefined ? undefined : { body } return uidl } const findFile = (folder: GeneratedFolder, folderName: string, fileName: string) => folder.subFolders .find((sub) => sub.name === folderName) ?.files.find((file) => file.name === fileName) describe('body custom code runs after hydration', () => { it('keeps noscript live and makes everything else inert', () => { const { noscript, deferred } = splitBodyCustomCode(BODY_CODE) expect(noscript).toBe('') expect(deferred).not.toContain('`) // a body made only of noscript ships no template at all expect(wrapBodyCustomCode('')).toBe('') }) describe('generated project', () => { const generator = createNextProjectGenerator() it('ships the code inert in _document and the unpacker as an _app sibling', async () => { const output = await generator.generateProject(buildUidlWithBodyCode(BODY_CODE), template) const document = findFile(output, 'pages', '_document') expect(document?.content).toContain(`