Răsfoiți Sursa

Merge pull request #6604 from weseek/feat/plantuml

feat: PlantUML with remark-simple-plantuml
Yuki Takei 3 ani în urmă
părinte
comite
0f4b8ef8fe

+ 1 - 0
packages/app/package.json

@@ -56,6 +56,7 @@
     "string-width": "5.0.0 or above exports only ESM."
     "string-width": "5.0.0 or above exports only ESM."
   },
   },
   "dependencies": {
   "dependencies": {
+    "@akebifiky/remark-simple-plantuml": "^1.0.2",
     "@aws-sdk/client-s3": "^3.58.0",
     "@aws-sdk/client-s3": "^3.58.0",
     "@aws-sdk/s3-request-presigner": "^3.58.0",
     "@aws-sdk/s3-request-presigner": "^3.58.0",
     "@browser-bunyan/console-formatted-stream": "^1.8.0",
     "@browser-bunyan/console-formatted-stream": "^1.8.0",

+ 8 - 14
packages/app/resource/locales/en_US/sandbox-diagrams.md

@@ -29,6 +29,7 @@ See [PlantUML](http://plantuml.com/).
 
 
 ## Sequence diagram
 ## Sequence diagram
 
 
+``` plantuml
 @startuml
 @startuml
 skinparam sequenceArrowThickness 2
 skinparam sequenceArrowThickness 2
 skinparam roundcorner 20
 skinparam roundcorner 20
@@ -58,13 +59,12 @@ A --> User: Done
 deactivate A
 deactivate A
 
 
 @enduml
 @enduml
-
-<!-- Reset PlantUML -->
-<div class="clearfix"></div>
+```
 
 
 
 
 ## Class diagram
 ## Class diagram
 
 
+``` plantuml
 @startuml
 @startuml
 
 
 class BaseClass
 class BaseClass
@@ -86,13 +86,11 @@ namespace net.foo {
 BaseClass <|-- net.unused.Person
 BaseClass <|-- net.unused.Person
 
 
 @enduml
 @enduml
-
-<!-- Reset PlantUML -->
-<div class="clearfix"></div>
+```
 
 
 
 
 ## Component diagram
 ## Component diagram
-
+``` plantuml
 @startuml
 @startuml
 
 
 package "Some Group" {
 package "Some Group" {
@@ -125,14 +123,12 @@ database "MySql" {
 [Folder 3] --> [Frame 4]
 [Folder 3] --> [Frame 4]
 
 
 @enduml
 @enduml
-
-<!-- Reset PlantUML -->
-<div class="clearfix"></div>
+```
 
 
 
 
 ## State diagram
 ## State diagram
 
 
-
+``` plantuml
 @startuml
 @startuml
 scale 600 width
 scale 600 width
 
 
@@ -153,9 +149,7 @@ State3 --> [*] : Succeeded / Save Result
 State3 --> [*] : Aborted
 State3 --> [*] : Aborted
 
 
 @enduml
 @enduml
-
-<!-- Reset PlantUML -->
-<div class="clearfix"></div>
+```
 
 
 
 
 # :pencil: blockdiag
 # :pencil: blockdiag

+ 8 - 15
packages/app/resource/locales/ja_JP/sandbox-diagrams.md

@@ -28,7 +28,7 @@ See [diagrams.net](https://diagrams.net)
 See [PlantUML](http://plantuml.com/).
 See [PlantUML](http://plantuml.com/).
 
 
 ## シーケンス図
 ## シーケンス図
-
+``` plantuml
 @startuml
 @startuml
 skinparam sequenceArrowThickness 2
 skinparam sequenceArrowThickness 2
 skinparam roundcorner 20
 skinparam roundcorner 20
@@ -58,13 +58,11 @@ A --> User: Done
 deactivate A
 deactivate A
 
 
 @enduml
 @enduml
-
-<!-- Reset PlantUML -->
-<div class="clearfix"></div>
+```
 
 
 
 
 ## クラス図
 ## クラス図
-
+``` plantuml
 @startuml
 @startuml
 
 
 class BaseClass
 class BaseClass
@@ -86,13 +84,11 @@ namespace net.foo {
 BaseClass <|-- net.unused.Person
 BaseClass <|-- net.unused.Person
 
 
 @enduml
 @enduml
-
-<!-- Reset PlantUML -->
-<div class="clearfix"></div>
+```
 
 
 
 
 ## コンポーネント図
 ## コンポーネント図
-
+``` plantuml
 @startuml
 @startuml
 
 
 package "Some Group" {
 package "Some Group" {
@@ -125,14 +121,12 @@ database "MySql" {
 [Folder 3] --> [Frame 4]
 [Folder 3] --> [Frame 4]
 
 
 @enduml
 @enduml
-
-<!-- Reset PlantUML -->
-<div class="clearfix"></div>
+```
 
 
 
 
 ## ステート図
 ## ステート図
 
 
-
+``` plantuml
 @startuml
 @startuml
 scale 600 width
 scale 600 width
 
 
@@ -153,9 +147,8 @@ State3 --> [*] : Succeeded / Save Result
 State3 --> [*] : Aborted
 State3 --> [*] : Aborted
 
 
 @enduml
 @enduml
+```
 
 
-<!-- Reset PlantUML -->
-<div class="clearfix"></div>
 
 
 # :pencil: blockdiag
 # :pencil: blockdiag
 
 

+ 8 - 14
packages/app/resource/locales/zh_CN/sandbox-diagrams.md

@@ -29,6 +29,7 @@ See [PlantUML](http://plantuml.com/).
 
 
 ## Sequence diagram
 ## Sequence diagram
 
 
+``` plantuml
 @startuml
 @startuml
 skinparam sequenceArrowThickness 2
 skinparam sequenceArrowThickness 2
 skinparam roundcorner 20
 skinparam roundcorner 20
@@ -58,13 +59,12 @@ A --> User: Done
 deactivate A
 deactivate A
 
 
 @enduml
 @enduml
-
-<!-- Reset PlantUML -->
-<div class="clearfix"></div>
+```
 
 
 
 
 ## Class diagram
 ## Class diagram
 
 
+``` plantuml
 @startuml
 @startuml
 
 
 class BaseClass
 class BaseClass
@@ -86,13 +86,11 @@ namespace net.foo {
 BaseClass <|-- net.unused.Person
 BaseClass <|-- net.unused.Person
 
 
 @enduml
 @enduml
-
-<!-- Reset PlantUML -->
-<div class="clearfix"></div>
+```
 
 
 
 
 ## Component diagram
 ## Component diagram
-
+``` plantuml
 @startuml
 @startuml
 
 
 package "Some Group" {
 package "Some Group" {
@@ -125,14 +123,12 @@ database "MySql" {
 [Folder 3] --> [Frame 4]
 [Folder 3] --> [Frame 4]
 
 
 @enduml
 @enduml
-
-<!-- Reset PlantUML -->
-<div class="clearfix"></div>
+```
 
 
 
 
 ## State diagram
 ## State diagram
 
 
-
+``` plantuml
 @startuml
 @startuml
 scale 600 width
 scale 600 width
 
 
@@ -153,9 +149,7 @@ State3 --> [*] : Succeeded / Save Result
 State3 --> [*] : Aborted
 State3 --> [*] : Aborted
 
 
 @enduml
 @enduml
-
-<!-- Reset PlantUML -->
-<div class="clearfix"></div>
+```
 
 
 
 
 # :pencil: blockdiag
 # :pencil: blockdiag

+ 12 - 0
packages/app/src/services/renderer/remark-plugins/plantuml.ts

@@ -0,0 +1,12 @@
+import plantuml from '@akebifiky/remark-simple-plantuml';
+import { Plugin } from 'unified';
+
+type PlantUMLPluginParams = {
+  baseUrl?: string,
+}
+
+export const remarkPlugin: Plugin<[PlantUMLPluginParams]> = (options) => {
+  const baseUrl = options.baseUrl ?? 'https://www.plantuml.com/plantuml/svg';
+
+  return plantuml.bind(this)({ baseUrl });
+};

+ 4 - 0
packages/app/src/services/renderer/renderer.tsx

@@ -33,6 +33,7 @@ import * as keywordHighlighter from './rehype-plugins/keyword-highlighter';
 import { relativeLinks } from './rehype-plugins/relative-links';
 import { relativeLinks } from './rehype-plugins/relative-links';
 import { relativeLinksByPukiwikiLikeLinker } from './rehype-plugins/relative-links-by-pukiwiki-like-linker';
 import { relativeLinksByPukiwikiLikeLinker } from './rehype-plugins/relative-links-by-pukiwiki-like-linker';
 import * as toc from './rehype-plugins/relocate-toc';
 import * as toc from './rehype-plugins/relocate-toc';
+import * as plantuml from './remark-plugins/plantuml';
 import { pukiwikiLikeLinker } from './remark-plugins/pukiwiki-like-linker';
 import { pukiwikiLikeLinker } from './remark-plugins/pukiwiki-like-linker';
 import * as xsvToTable from './remark-plugins/xsv-to-table';
 import * as xsvToTable from './remark-plugins/xsv-to-table';
 
 
@@ -318,6 +319,7 @@ export const generateViewOptions = (
   // add remark plugins
   // add remark plugins
   remarkPlugins.push(
   remarkPlugins.push(
     math,
     math,
+    [plantuml.remarkPlugin, { baseUrl: config.plantumlUri }],
     xsvToTable.remarkPlugin,
     xsvToTable.remarkPlugin,
     lsxGrowiPlugin.remarkPlugin,
     lsxGrowiPlugin.remarkPlugin,
   );
   );
@@ -394,6 +396,7 @@ export const generateSimpleViewOptions = (config: RendererConfig, pagePath: stri
   // add remark plugins
   // add remark plugins
   remarkPlugins.push(
   remarkPlugins.push(
     math,
     math,
+    [plantuml.remarkPlugin, { baseUrl: config.plantumlUri }],
     xsvToTable.remarkPlugin,
     xsvToTable.remarkPlugin,
     lsxGrowiPlugin.remarkPlugin,
     lsxGrowiPlugin.remarkPlugin,
   );
   );
@@ -429,6 +432,7 @@ export const generatePreviewOptions = (config: RendererConfig, pagePath: string)
   // add remark plugins
   // add remark plugins
   remarkPlugins.push(
   remarkPlugins.push(
     math,
     math,
+    [plantuml.remarkPlugin, { baseUrl: config.plantumlUri }],
     xsvToTable.remarkPlugin,
     xsvToTable.remarkPlugin,
     lsxGrowiPlugin.remarkPlugin,
     lsxGrowiPlugin.remarkPlugin,
   );
   );

+ 18 - 1
yarn.lock

@@ -2,6 +2,14 @@
 # yarn lockfile v1
 # yarn lockfile v1
 
 
 
 
+"@akebifiky/remark-simple-plantuml@^1.0.2":
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/@akebifiky/remark-simple-plantuml/-/remark-simple-plantuml-1.0.2.tgz#c353e4be4e5338b0165f1d6060da4960c325bad5"
+  integrity sha512-y5rWgQvU+DMpLKx1KlXCsgUeqVooqQm1S3hePLF9iecZy6YhKRybznFdvAvoAoiV2GoGhObQDHnneAl93llIcg==
+  dependencies:
+    plantuml-encoder "^1.4.0"
+    unist-util-visit "^2.0.2"
+
 "@alienfast/i18next-loader@^1.1.4":
 "@alienfast/i18next-loader@^1.1.4":
   version "1.1.4"
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/@alienfast/i18next-loader/-/i18next-loader-1.1.4.tgz#213a6cd77222900a61b1635a212051193bcd5d1f"
   resolved "https://registry.yarnpkg.com/@alienfast/i18next-loader/-/i18next-loader-1.1.4.tgz#213a6cd77222900a61b1635a212051193bcd5d1f"
@@ -17726,7 +17734,7 @@ pkg-dir@^5.0.0:
   dependencies:
   dependencies:
     find-up "^5.0.0"
     find-up "^5.0.0"
 
 
-plantuml-encoder@^1.2.5:
+plantuml-encoder@^1.2.5, plantuml-encoder@^1.4.0:
   version "1.4.0"
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz#7899302cf785de956bf1a167e15420feee5975f7"
   resolved "https://registry.yarnpkg.com/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz#7899302cf785de956bf1a167e15420feee5975f7"
   integrity sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g==
   integrity sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g==
@@ -23868,6 +23876,15 @@ unist-util-visit@^1.1.0:
   dependencies:
   dependencies:
     unist-util-visit-parents "^2.0.0"
     unist-util-visit-parents "^2.0.0"
 
 
+unist-util-visit@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c"
+  integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==
+  dependencies:
+    "@types/unist" "^2.0.0"
+    unist-util-is "^4.0.0"
+    unist-util-visit-parents "^3.0.0"
+
 unist-util-visit@^3.0.0:
 unist-util-visit@^3.0.0:
   version "3.1.0"
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-3.1.0.tgz#9420d285e1aee938c7d9acbafc8e160186dbaf7b"
   resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-3.1.0.tgz#9420d285e1aee938c7d9acbafc8e160186dbaf7b"