Przeglądaj źródła

re-organize exports

Yuki Takei 1 rok temu
rodzic
commit
4e3ea33fdb

+ 11 - 1
packages/presentation/package.json

@@ -13,6 +13,17 @@
     "dist"
   ],
   "type": "module",
+  "exports": {
+    "./dist/client": {
+      "import": "./dist/client/index.js"
+    },
+    "./dist/services": {
+      "import": "./dist/services/index.js"
+    },
+    "./dist/style.css": {
+      "import": "./dist/style.css"
+    }
+  },
   "scripts": {
     "build": "vite build",
     "clean": "shx rm -rf dist",
@@ -47,7 +58,6 @@
     "unist-util-visit": "^4.0.0"
   },
   "peerDependencies": {
-    "@marp-team/marpit": "*",
     "next": "^14",
     "react": "^18.2.0",
     "react-dom": "^18.2.0"

+ 0 - 0
packages/presentation/src/components/GrowiSlides.tsx → packages/presentation/src/client/components/GrowiSlides.tsx


+ 0 - 0
packages/presentation/src/components/MarpSlides.tsx → packages/presentation/src/client/components/MarpSlides.tsx


+ 0 - 0
packages/presentation/src/components/Presentation.global.scss → packages/presentation/src/client/components/Presentation.global.scss


+ 0 - 0
packages/presentation/src/components/Presentation.module.scss → packages/presentation/src/client/components/Presentation.module.scss


+ 3 - 3
packages/presentation/src/components/Presentation.tsx → packages/presentation/src/client/components/Presentation.tsx

@@ -2,8 +2,8 @@ import React, { useEffect } from 'react';
 
 import Reveal from 'reveal.js';
 
+import { parseSlideFrontmatterInMarkdown } from '../../services';
 import type { PresentationOptions } from '../consts';
-import { parseSlideFrontmatterInMarkdown } from '../services/parse-slide-frontmatter';
 
 import { Slides } from './Slides';
 
@@ -42,8 +42,8 @@ export const Presentation = (props: PresentationProps): JSX.Element => {
   const { options, isEnabledMarp, children } = props;
   const { revealOptions } = options;
 
-  const [marp] = parseSlideFrontmatterInMarkdown(children);
-  const hasMarpFlag = isEnabledMarp && marp;
+  const parseFrontmatterResult = parseSlideFrontmatterInMarkdown(children);
+  const hasMarpFlag = isEnabledMarp && parseFrontmatterResult?.marp;
 
   useEffect(() => {
     if (children == null) {

+ 0 - 0
packages/presentation/src/components/RichSlideSection.tsx → packages/presentation/src/client/components/RichSlideSection.tsx


+ 0 - 0
packages/presentation/src/components/Slides.module.scss → packages/presentation/src/client/components/Slides.module.scss


+ 0 - 0
packages/presentation/src/components/Slides.tsx → packages/presentation/src/client/components/Slides.tsx


+ 0 - 0
packages/presentation/src/consts/index.ts → packages/presentation/src/client/consts/index.ts


+ 0 - 1
packages/presentation/src/index.ts → packages/presentation/src/client/index.ts

@@ -1,3 +1,2 @@
 export * from './components/Presentation';
 export * from './components/Slides';
-export * from './services/parse-slide-frontmatter';

+ 0 - 0
packages/presentation/src/services/growi-marpit.ts → packages/presentation/src/client/services/growi-marpit.ts


+ 0 - 0
packages/presentation/src/services/renderer/extract-sections.ts → packages/presentation/src/client/services/renderer/extract-sections.ts


+ 1 - 0
packages/presentation/src/services/index.ts

@@ -0,0 +1 @@
+export * from './parse-slide-frontmatter';

+ 35 - 10
packages/presentation/src/services/parse-slide-frontmatter.ts

@@ -4,10 +4,15 @@ import remarkStringify from 'remark-stringify';
 import { unified } from 'unified';
 
 
-const parseSlideFrontmatter = (frontmatter: string): [boolean, boolean] => {
+type ParseResult = {
+  marp: boolean | undefined,
+  slide: boolean | undefined,
+}
 
-  let marp = false;
-  let slide = false;
+const parseSlideFrontmatter = (frontmatter: string): ParseResult => {
+
+  let marp;
+  let slide;
 
   const lines = frontmatter.split('\n');
   lines.forEach((line) => {
@@ -20,24 +25,44 @@ const parseSlideFrontmatter = (frontmatter: string): [boolean, boolean] => {
     }
   });
 
-  return [marp, slide];
+  return { marp, slide };
 };
 
-export const parseSlideFrontmatterInMarkdown = (markdown?: string): [boolean, boolean] => {
 
-  let marp = false;
-  let slide = false;
+export type UseSlide = {
+  marp?: boolean,
+}
+
+/**
+ * Frontmatter parser for slide
+ * @param markdown Markdwon document
+ * @returns An UseSlide instance. If the markdown does not contain neither "marp" or "slide" attribute in frontmatter, it returns undefined.
+ */
+export const parseSlideFrontmatterInMarkdown = async(markdown?: string): Promise<UseSlide | undefined> => {
 
-  unified()
+  let result: ParseResult | undefined;
+
+  await unified()
     .use(remarkParse)
     .use(remarkStringify)
     .use(remarkFrontmatter, ['yaml'])
     .use(() => ((obj) => {
       if (obj.children[0]?.type === 'yaml') {
-        [marp, slide] = parseSlideFrontmatter(obj.children[0]?.value as string);
+        result = parseSlideFrontmatter(obj.children[0]?.value as string);
       }
     }))
     .process(markdown as string);
 
-  return [marp, slide];
+  if (result == null) {
+    return;
+  }
+
+  const { marp, slide } = result;
+
+  if (!marp && !slide) {
+    return;
+  }
+
+  return { marp };
+
 };

+ 12 - 1
packages/presentation/vite.config.ts

@@ -1,4 +1,7 @@
+import path from 'path';
+
 import react from '@vitejs/plugin-react';
+import glob from 'glob';
 import { nodeExternals } from 'rollup-plugin-node-externals';
 import { defineConfig } from 'vite';
 import dts from 'vite-plugin-dts';
@@ -20,9 +23,17 @@ export default defineConfig({
     outDir: 'dist',
     sourcemap: true,
     lib: {
-      entry: 'src/index.ts',
+      entry: glob.sync(path.resolve(__dirname, 'src/**/*.ts'), {
+        ignore: '**/*.spec.ts',
+      }),
       name: 'presentation-libs',
       formats: ['es'],
     },
+    rollupOptions: {
+      output: {
+        preserveModules: true,
+        preserveModulesRoot: 'src',
+      },
+    },
   },
 });