|
@@ -1,15 +1,12 @@
|
|
|
import React from 'react';
|
|
import React from 'react';
|
|
|
|
|
|
|
|
-import fs from 'fs';
|
|
|
|
|
-import path from 'path';
|
|
|
|
|
-
|
|
|
|
|
import Document, {
|
|
import Document, {
|
|
|
DocumentContext, DocumentInitialProps,
|
|
DocumentContext, DocumentInitialProps,
|
|
|
Html, Head, Main, NextScript,
|
|
Html, Head, Main, NextScript,
|
|
|
} from 'next/document';
|
|
} from 'next/document';
|
|
|
|
|
|
|
|
|
|
+import { ActivatePluginService, GrowiPluginManifestEntries } from '~/client/services/activate-plugin';
|
|
|
import { GrowiPlugin, GrowiPluginResourceType } from '~/interfaces/plugin';
|
|
import { GrowiPlugin, GrowiPluginResourceType } from '~/interfaces/plugin';
|
|
|
-import { resolveFromRoot } from '~/utils/project-dir-utils';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// FIXME: dummy data
|
|
// FIXME: dummy data
|
|
@@ -30,24 +27,38 @@ const growiPluginsExample: GrowiPlugin[] = [
|
|
|
// ------------------
|
|
// ------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
-type GrowiPluginManifestEntries = [growiPlugin: GrowiPlugin, manifest: any][];
|
|
|
|
|
-
|
|
|
|
|
-interface GrowiDocumentProps {
|
|
|
|
|
|
|
+type HeadersForGrowiPluginProps = {
|
|
|
pluginManifestEntries: GrowiPluginManifestEntries;
|
|
pluginManifestEntries: GrowiPluginManifestEntries;
|
|
|
}
|
|
}
|
|
|
-declare type GrowiDocumentInitialProps = DocumentInitialProps & GrowiDocumentProps;
|
|
|
|
|
|
|
|
|
|
-async function retrievePluginManifests(growiPlugins: GrowiPlugin[]): Promise<GrowiPluginManifestEntries> {
|
|
|
|
|
- const entries: GrowiPluginManifestEntries = [];
|
|
|
|
|
|
|
+const HeadersForGrowiPlugin = (props: HeadersForGrowiPluginProps): JSX.Element => {
|
|
|
|
|
+ const { pluginManifestEntries } = props;
|
|
|
|
|
+
|
|
|
|
|
+ return (
|
|
|
|
|
+ <>
|
|
|
|
|
+ { pluginManifestEntries.map(([growiPlugin, manifest]) => {
|
|
|
|
|
+ // type: script
|
|
|
|
|
+ if (growiPlugin.meta.types.includes(GrowiPluginResourceType.Script)) {
|
|
|
|
|
+ return (
|
|
|
|
|
+ <>
|
|
|
|
|
+ <link rel="stylesheet" key={`link_${growiPlugin.installedPath}`}
|
|
|
|
|
+ href={`/plugins/${growiPlugin.installedPath}/dist/${manifest['client-entry.tsx'].css}`} />
|
|
|
|
|
+ {/* eslint-disable-next-line @next/next/no-sync-scripts */ }
|
|
|
|
|
+ <script type="module" key={`script_${growiPlugin.installedPath}`}
|
|
|
|
|
+ src={`/plugins/${growiPlugin.installedPath}/dist/${manifest['client-entry.tsx'].file}`} />
|
|
|
|
|
+ </>
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ return <></>;
|
|
|
|
|
+ }) }
|
|
|
|
|
+ </>
|
|
|
|
|
+ );
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
- growiPlugins.forEach(async(growiPlugin) => {
|
|
|
|
|
- const manifestPath = resolveFromRoot(path.join('tmp/plugins', growiPlugin.installedPath, 'dist/manifest.json'));
|
|
|
|
|
- const customManifestStr: string = await fs.readFileSync(manifestPath, 'utf-8');
|
|
|
|
|
- entries.push([growiPlugin, JSON.parse(customManifestStr)]);
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- return entries;
|
|
|
|
|
|
|
+interface GrowiDocumentProps {
|
|
|
|
|
+ pluginManifestEntries: GrowiPluginManifestEntries;
|
|
|
}
|
|
}
|
|
|
|
|
+declare type GrowiDocumentInitialProps = DocumentInitialProps & GrowiDocumentProps;
|
|
|
|
|
|
|
|
class GrowiDocument extends Document<GrowiDocumentProps> {
|
|
class GrowiDocument extends Document<GrowiDocumentProps> {
|
|
|
|
|
|
|
@@ -55,8 +66,8 @@ class GrowiDocument extends Document<GrowiDocumentProps> {
|
|
|
const initialProps: DocumentInitialProps = await Document.getInitialProps(ctx);
|
|
const initialProps: DocumentInitialProps = await Document.getInitialProps(ctx);
|
|
|
|
|
|
|
|
// TODO: load GrowiPlugin documents from DB
|
|
// TODO: load GrowiPlugin documents from DB
|
|
|
- // const pluginManifestEntries: GrowiPluginManifestEntries = await retrievePluginManifests(growiPluginsExample);
|
|
|
|
|
- const pluginManifestEntries: GrowiPluginManifestEntries = await retrievePluginManifests([]);
|
|
|
|
|
|
|
+ // const pluginManifestEntries: GrowiPluginManifestEntries = await ActivatePluginService.retrievePluginManifests(growiPluginsExample);
|
|
|
|
|
+ const pluginManifestEntries: GrowiPluginManifestEntries = await ActivatePluginService.retrievePluginManifests([]);
|
|
|
|
|
|
|
|
return { ...initialProps, pluginManifestEntries };
|
|
return { ...initialProps, pluginManifestEntries };
|
|
|
}
|
|
}
|
|
@@ -72,17 +83,7 @@ class GrowiDocument extends Document<GrowiDocumentProps> {
|
|
|
{renderScriptTagsByGroup('basis')}
|
|
{renderScriptTagsByGroup('basis')}
|
|
|
{renderStyleTagsByGroup('basis')}
|
|
{renderStyleTagsByGroup('basis')}
|
|
|
*/}
|
|
*/}
|
|
|
- { pluginManifestEntries.map(([growiPlugin, manifest]) => (
|
|
|
|
|
- growiPlugin.meta.types.includes(GrowiPluginResourceType.Script) && (
|
|
|
|
|
- <>
|
|
|
|
|
- <link rel="stylesheet" key={`link_${growiPlugin.installedPath}`}
|
|
|
|
|
- href={`/plugins/${growiPlugin.installedPath}/dist/${manifest['client-entry.tsx'].css}`} />
|
|
|
|
|
- {/* eslint-disable-next-line @next/next/no-sync-scripts */ }
|
|
|
|
|
- <script type="module" key={`script_${growiPlugin.installedPath}`}
|
|
|
|
|
- src={`/plugins/${growiPlugin.installedPath}/dist/${manifest['client-entry.tsx'].file}`} />
|
|
|
|
|
- </>
|
|
|
|
|
- )
|
|
|
|
|
- )) }
|
|
|
|
|
|
|
+ <HeadersForGrowiPlugin pluginManifestEntries={pluginManifestEntries} />
|
|
|
</Head>
|
|
</Head>
|
|
|
<body>
|
|
<body>
|
|
|
<Main />
|
|
<Main />
|