_document.page.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import React from 'react';
  2. import fs from 'fs';
  3. import Document, {
  4. DocumentContext, DocumentInitialProps,
  5. Html, Head, Main, NextScript,
  6. } from 'next/document';
  7. import { resolveFromRoot } from '~/utils/project-dir-utils';
  8. interface GrowiDocumentProps {
  9. pluginsManifest: any;
  10. }
  11. declare type GrowiDocumentInitialProps = DocumentInitialProps & GrowiDocumentProps;
  12. async function importPluginsManifest(): Promise<any> {
  13. const customManifestStr: string = await fs.readFileSync(resolveFromRoot('tmp/plugins/weseek/growi-plugin-jstest/dist/manifest.json'), 'utf-8');
  14. return {
  15. 'growi-plugin-jstest': JSON.parse(customManifestStr),
  16. };
  17. }
  18. class GrowiDocument extends Document<GrowiDocumentProps> {
  19. static override async getInitialProps(ctx: DocumentContext): Promise<GrowiDocumentInitialProps> {
  20. const initialProps: DocumentInitialProps = await Document.getInitialProps(ctx);
  21. const pluginsManifest: any = await importPluginsManifest();
  22. return { ...initialProps, pluginsManifest };
  23. }
  24. override render(): JSX.Element {
  25. const { pluginsManifest } = this.props;
  26. return (
  27. <Html>
  28. <Head>
  29. {/*
  30. {renderScriptTagsByGroup('basis')}
  31. {renderStyleTagsByGroup('basis')}
  32. */}
  33. <script type="module" src={`/plugins/weseek/growi-plugin-jstest/dist/${pluginsManifest['growi-plugin-jstest']['index.html'].file}`} />
  34. </Head>
  35. <body>
  36. <Main />
  37. <NextScript />
  38. </body>
  39. </Html>
  40. );
  41. }
  42. }
  43. export default GrowiDocument;