From 565232d49cc382bb7f8a77c2a89d8073e7bf79d9 Mon Sep 17 00:00:00 2001 From: purocean Date: Sun, 31 Jan 2021 15:31:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=8D=A2=20plantuml=20=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron-builder.json | 3 +- package.json | 2 +- src/helper.ts | 1 + src/server/constant.ts | 5 ++- src/server/plantuml.ts | 18 +++++++-- yarn.lock | 89 +++++++++++++++++++++++++----------------- 6 files changed, 73 insertions(+), 45 deletions(-) create mode 100644 src/helper.ts diff --git a/electron-builder.json b/electron-builder.json index 11730193..f469c1ca 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -7,8 +7,7 @@ "bin/**/*", "help/**/*", "dist/resources/**/*", - "node_modules/node-plantuml/**/*", - "node_modules/node-nailgun-server/**/*" + "node_modules/plantuml-pipe/**/*" ], "files": [ "./bin/**", diff --git a/package.json b/package.json index 15463427..ecc10158 100644 --- a/package.json +++ b/package.json @@ -26,9 +26,9 @@ "koa-static": "^4.0.2", "mime": "^2.2.0", "natural-orderby": "^2.0.0", - "node-plantuml": "^0.6.2", "node-pty": "^0.9.0", "opn": "^5.3.0", + "plantuml-pipe": "^1.3.5", "request": "^2.88.0", "safe-buffer": "^5.1.2", "socket.io": "^2.4.0", diff --git a/src/helper.ts b/src/helper.ts new file mode 100644 index 00000000..b7617898 --- /dev/null +++ b/src/helper.ts @@ -0,0 +1 @@ +export const convertAppPath = (path: string) => path.replace('app.asar', 'app.asar.unpacked') diff --git a/src/server/constant.ts b/src/server/constant.ts index 0b685d22..1123e599 100644 --- a/src/server/constant.ts +++ b/src/server/constant.ts @@ -2,6 +2,7 @@ import * as path from 'path' import * as os from 'os' import * as yargs from 'yargs' import { isWsl, toWslPath, getWinHomePath } from './wsl' +import { convertAppPath } from '../helper' const homedir = isWsl ? toWslPath(getWinHomePath()) : os.homedir() @@ -14,5 +15,5 @@ export const STATIC_DIR = path.join(__dirname, '../../frontend/dist') export const HELP_DIR = path.join(__dirname, '../../help') export const ASSETS_DIR = path.join(__dirname, '../assets') -export const BIN_DIR = path.join(__dirname, '../../bin').replace('app.asar', 'app.asar.unpacked') -export const RESOURCES_DIR = path.join(__dirname, '../resources').replace('app.asar', 'app.asar.unpacked') +export const BIN_DIR = convertAppPath(path.join(__dirname, '../../bin')) +export const RESOURCES_DIR = convertAppPath(path.join(__dirname, '../resources')) diff --git a/src/server/plantuml.ts b/src/server/plantuml.ts index 9adc48b7..308e3a38 100644 --- a/src/server/plantuml.ts +++ b/src/server/plantuml.ts @@ -1,13 +1,23 @@ -import config from './config' import * as request from 'request' -const plantuml = require('node-plantuml') +import { PlantUmlPipe } from 'plantuml-pipe' +import { addDefaultsToOptions } from 'plantuml-pipe/dist/plantuml_pipe_options' +import config from './config' +import { convertAppPath } from '../helper' const generate = (data: any) => { const api = config.get('plantuml-api', 'local') if (api === 'local') { - const gen = plantuml.generate(data, {format: 'png', charset: 'UTF-8'}); - return gen.out + const puml = new PlantUmlPipe({ + outputFormat: 'png', + plantUmlArgs: [ '-charset', 'UTF-8' ], + jarPath: convertAppPath(addDefaultsToOptions({}).jarPath) + }) + + puml.in.write(data) + puml.in.end() + + return puml.out } else { return request(api.replace('{data}', encodeURIComponent(data))) } diff --git a/yarn.lock b/yarn.lock index 3659eb54..237cbbd9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -424,6 +424,13 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +binary-split@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/binary-split/-/binary-split-1.0.5.tgz#e1ec5645b65d7de6b1a73352d1165b57c6fb14f6" + integrity sha512-AQ5fcBrUU5hoIafkEvNKqxT+2xbqlSqAXef6IdCQr5wpHu9E7NGM6rTAlYJYbtxvAvjfx8nJkBy6rNlbPPI+Pw== + dependencies: + through2 "^2.0.3" + blob@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" @@ -661,11 +668,6 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.8.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - component-bind@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" @@ -1923,30 +1925,6 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -node-nailgun-client@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/node-nailgun-client/-/node-nailgun-client-0.1.2.tgz#c8ee2f8226664020192e4936cacaadf9aa13ae29" - integrity sha512-OC611lR0fsDUSptwnhBf8d3sj4DZ5fiRKfS2QaGPe0kR3Dt9YoZr1MY7utK0scFPTbXuQdSBBbeoKYVbME1q5g== - dependencies: - commander "^2.8.1" - -node-nailgun-server@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/node-nailgun-server/-/node-nailgun-server-0.1.4.tgz#80cbf1af37611030c60aa88be72d657994df50d4" - integrity sha512-e0Hbh6XPb/7GqATJ45BePaUEO5AwR7InRW/pGeMKHH1cqPMBFCeqdBNfvi+bkVLnsbYOOQE+pAek9nmNoD8sYw== - dependencies: - commander "^2.8.1" - -node-plantuml@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/node-plantuml/-/node-plantuml-0.6.2.tgz#cf159fe5bc028a54d5181e2410309266d1fde617" - integrity sha512-4/nf/gBvKVm4+EbBgFQZf0n8N3jfAA7mRExs3NfgujSsaouktZwYkUzBUqUR8nRzIWDmJ4hA1QiWOjpEArTiZQ== - dependencies: - commander "^2.8.1" - node-nailgun-client "^0.1.0" - node-nailgun-server "^0.1.3" - plantuml-encoder "^1.2.5" - node-pty@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-0.9.0.tgz#8f9bcc0d1c5b970a3184ffd533d862c7eb6590a6" @@ -2123,10 +2101,13 @@ pkg-up@^3.0.1: dependencies: find-up "^3.0.0" -plantuml-encoder@^1.2.5: - version "1.4.0" - resolved "https://registry.yarnpkg.com/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz#7899302cf785de956bf1a167e15420feee5975f7" - integrity sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g== +plantuml-pipe@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/plantuml-pipe/-/plantuml-pipe-1.3.5.tgz#5b84b8fd1862bc4f28ecd7529ed2dc9ca4456d35" + integrity sha512-KsZ1KUXBaEmr0pdQGq+LEhe6SSIxC0bMxZ1XY3sbqBZxieJWEi4+x9YX4cH/cVGtcw0NjrfEg8BP6Wsyn/K9cQ== + dependencies: + binary-split "^1.0.5" + split2 "^3.2.2" prepend-http@^2.0.0: version "2.0.0" @@ -2214,7 +2195,7 @@ read-config-file@6.0.0: json5 "^2.1.2" lazy-val "^1.0.4" -readable-stream@^2.2.2: +readable-stream@^2.2.2, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -2227,6 +2208,15 @@ readable-stream@^2.2.2: string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^3.0.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + registry-auth-token@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479" @@ -2316,7 +2306,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.2: +safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -2488,6 +2478,13 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== +split2@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + sprintf-js@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" @@ -2541,6 +2538,13 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -2615,6 +2619,14 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" +through2@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + to-array@0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" @@ -2783,7 +2795,7 @@ utf8-byte-length@^1.0.1: resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -2875,6 +2887,11 @@ xmlhttprequest-ssl@~1.5.4: resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"