@danielsimonjr/sciengjs 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -3
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/assets/index_bg.wasm +0 -0
- package/assets/licenses/MIT-viz-js.txt +21 -0
- package/dist/assets.d.ts +12 -0
- package/dist/assets.js +63 -0
- package/dist/assets.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.js +10 -10
- package/dist/config.js.map +1 -1
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/dist/errors.d.ts +6 -0
- package/dist/errors.js +15 -0
- package/dist/errors.js.map +1 -1
- package/dist/graph/backend-png.d.ts +6 -1
- package/dist/graph/backend-png.js +25 -7
- package/dist/graph/backend-png.js.map +1 -1
- package/dist/mermaid/backend-png.d.ts +6 -0
- package/dist/mermaid/backend-png.js +13 -0
- package/dist/mermaid/backend-png.js.map +1 -0
- package/dist/mermaid/backend-svg.d.ts +3 -0
- package/dist/mermaid/backend-svg.js +8 -0
- package/dist/mermaid/backend-svg.js.map +1 -0
- package/dist/mermaid/class.d.ts +37 -0
- package/dist/mermaid/class.js +190 -0
- package/dist/mermaid/class.js.map +1 -0
- package/dist/mermaid/common.d.ts +43 -0
- package/dist/mermaid/common.js +112 -0
- package/dist/mermaid/common.js.map +1 -0
- package/dist/mermaid/index.d.ts +10 -0
- package/dist/mermaid/index.js +11 -0
- package/dist/mermaid/index.js.map +1 -0
- package/dist/mermaid/render.d.ts +10 -0
- package/dist/mermaid/render.js +24 -0
- package/dist/mermaid/render.js.map +1 -0
- package/dist/mermaid/sequence-layout.d.ts +6 -0
- package/dist/mermaid/sequence-layout.js +268 -0
- package/dist/mermaid/sequence-layout.js.map +1 -0
- package/dist/mermaid/sequence.d.ts +62 -0
- package/dist/mermaid/sequence.js +199 -0
- package/dist/mermaid/sequence.js.map +1 -0
- package/dist/mermaid/state.d.ts +24 -0
- package/dist/mermaid/state.js +132 -0
- package/dist/mermaid/state.js.map +1 -0
- package/dist/pairs.js +2 -2
- package/dist/pairs.js.map +1 -1
- package/dist/raster/index.d.ts +6 -0
- package/dist/raster/index.js +13 -7
- package/dist/raster/index.js.map +1 -1
- package/dist/registry.js +2 -0
- package/dist/registry.js.map +1 -1
- package/dist/version.d.ts +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/dist/worker/entry.js +2 -2
- package/dist/worker/entry.js.map +1 -1
- package/dist/worker/protocol.d.ts +2 -0
- package/package.json +6 -2
package/README.md
CHANGED
|
@@ -10,14 +10,16 @@ sciengjs turns diagram source into images on your own machine. It sends no sourc
|
|
|
10
10
|
|
|
11
11
|
## What this release does
|
|
12
12
|
|
|
13
|
-
Release 0.
|
|
13
|
+
Release 0.2.0 holds two input types: **Graphviz DOT** and **Mermaid** (class, state and sequence diagrams).
|
|
14
14
|
|
|
15
15
|
| Input | Output | Engine |
|
|
16
16
|
|---|---|---|
|
|
17
17
|
| DOT | SVG | Graphviz 16.1.0, compiled to WASM (`@viz-js/viz`) |
|
|
18
18
|
| DOT | PNG | Graphviz, then resvg compiled to WASM (`@resvg/resvg-wasm`), with a bundled font |
|
|
19
|
+
| Mermaid (class, state, sequence) | SVG | The engine's own parsers and layouts. Class and state diagrams go through Graphviz. |
|
|
20
|
+
| Mermaid (class, state, sequence) | PNG | The same SVG, then resvg compiled to WASM (`@resvg/resvg-wasm`), with a bundled font |
|
|
19
21
|
|
|
20
|
-
- **No network.** The DOT
|
|
22
|
+
- **No network.** The DOT and Mermaid paths make no network request.
|
|
21
23
|
- **Unsafe attributes are removed.** The engine removes each `image` and `stylesheet` attribute before the layout and gives a warning for each one. A DOT file cannot make the engine or a browser fetch a file or a URL. A `URL` attribute stays as a link in the SVG.
|
|
22
24
|
- **The same text on every machine.** PNG text uses the bundled Liberation Serif font, not the fonts of the host. The engine gives a warning when the drawing asks for bold, italic or a character that the font does not have.
|
|
23
25
|
- **Limits.** Each render has a time limit, a source size limit and a heap limit. A PNG has a pixel limit of 1024 MB.
|
|
@@ -112,6 +114,7 @@ Each render takes an optional configuration as its second argument. An environme
|
|
|
112
114
|
| `maxSourceBytes` | `SCIENG_MAX_SOURCE_BYTES` | 10485760 (10 MiB) |
|
|
113
115
|
| `maxMemoryMb` | `SCIENG_MAX_MEMORY_MB` | 2048 |
|
|
114
116
|
| `rasterFont` | `SCIENG_RASTER_FONT` | the bundled Liberation Serif |
|
|
117
|
+
| `assetsUrl` | `SCIENG_ASSETS_URL` | the `assets/` folder of the package, which holds the font and `index_bg.wasm`. A `file:` URL with a host other than `localhost` rejects with `E_CONFIG`. |
|
|
115
118
|
| `allowNetwork` | `SCIENG_ALLOW_NETWORK` | `tex-bundles` (the DOT path makes no request) |
|
|
116
119
|
|
|
117
120
|
`SCIENG_CONFIG` names a JSON configuration file. `loadConfig` returns the resolved configuration.
|
|
@@ -136,6 +139,19 @@ const png = await svgToPng(svg, { scale: 1, maxMemoryMb: 512 });
|
|
|
136
139
|
|
|
137
140
|
A subpath call runs in the calling thread, without the worker and its limits. Use `render` for input that you do not trust.
|
|
138
141
|
|
|
142
|
+
## Mermaid
|
|
143
|
+
|
|
144
|
+
The `mermaid` input draws class, state and sequence diagrams without a browser. A line outside the grammar rejects the render with `E_INPUT`, and the message names the line. Set `lenient` to `true` to skip such a line and get a warning instead.
|
|
145
|
+
|
|
146
|
+
```js
|
|
147
|
+
import { render } from "@danielsimonjr/sciengjs";
|
|
148
|
+
|
|
149
|
+
const source = "sequenceDiagram\nAlice->>Bob: Hello Bob\nBob-->>Alice: Hi Alice";
|
|
150
|
+
const { bytes, warnings } = await render({ type: "mermaid", source, format: "svg" }, {});
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Other Mermaid diagram types reject with `E_UNSUPPORTED`.
|
|
154
|
+
|
|
139
155
|
## Roadmap
|
|
140
156
|
|
|
141
157
|
The [build plan](docs/superpowers/plans/2026-11-01-scieng-engine-build.md) gives the order of the increments. Each increment adds one input type, its tests and one release. The [design](docs/superpowers/specs/2026-11-01-scieng-engine-design.md) gives the API, the stages, the security controls and the licence of each engine.
|
|
@@ -143,7 +159,7 @@ The [build plan](docs/superpowers/plans/2026-11-01-scieng-engine-build.md) gives
|
|
|
143
159
|
| Input type | Stage | Status |
|
|
144
160
|
|---|---|---|
|
|
145
161
|
| DOT | graph, raster | released in 0.1.0 |
|
|
146
|
-
| Mermaid | mermaid, browser | planned |
|
|
162
|
+
| Mermaid | graph, mermaid, browser | class, state and sequence: released in 0.2.0; other types: planned |
|
|
147
163
|
| LaTeX math | math (MathJax) | planned |
|
|
148
164
|
| TikZ, circuitikz, LaTeX | tex (an own WASM build of `tex.web`) | trial builds pass |
|
|
149
165
|
| Plots | plot | planned |
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -26,7 +26,7 @@ Version: each row gives the version that the engine pins.
|
|
|
26
26
|
|
|
27
27
|
### Graphviz (EPL-2.0)
|
|
28
28
|
|
|
29
|
-
The Eclipse Public License 2.0 applies to Graphviz. The wrapper `@viz-js/viz
|
|
29
|
+
The Eclipse Public License 2.0 applies to Graphviz. The MIT licence applies to the wrapper `@viz-js/viz`. The package does not ship a Graphviz licence file. The licence text of Graphviz is in `assets/licenses/EPL-2.0.txt`. The MIT licence text of the wrapper is in `assets/licenses/MIT-viz-js.txt`, copied from the tag `release-viz-3.31.0` of the source repository https://github.com/mdaines/viz-js. The npm package does not ship this file.
|
|
30
30
|
|
|
31
31
|
### OpenCascade (LGPL-2.1)
|
|
32
32
|
|
|
Binary file
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Michael Daines
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/assets.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Relative path of the bundled Liberation Serif font inside the assets folder. */
|
|
2
|
+
export declare const BUNDLED_FONT_FILE = "fonts/LiberationSerif-Regular.ttf";
|
|
3
|
+
/** File name of the bundled resvg WebAssembly module inside the assets folder. */
|
|
4
|
+
export declare const RESVG_WASM_FILE = "index_bg.wasm";
|
|
5
|
+
/** Validates a raw assets-folder URL syntactically and returns its href with a trailing slash. */
|
|
6
|
+
export declare function checkAssetsUrl(value: unknown, label: string): string;
|
|
7
|
+
/** Resolves a relative file under the assets folder URL to an OS path. */
|
|
8
|
+
export declare function assetFile(assetsUrl: string, file: string): string;
|
|
9
|
+
/** Resolves the OS path of the bundled font inside the assets folder. */
|
|
10
|
+
export declare function bundledFontPathIn(assetsUrl: string): string;
|
|
11
|
+
/** Reads an asset file from the assets folder and returns its bytes. */
|
|
12
|
+
export declare function readAsset(assetsUrl: string, file: string): Uint8Array;
|
package/dist/assets.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { RenderError } from "./errors.js";
|
|
4
|
+
/** Relative path of the bundled Liberation Serif font inside the assets folder. */
|
|
5
|
+
export const BUNDLED_FONT_FILE = "fonts/LiberationSerif-Regular.ttf";
|
|
6
|
+
/** File name of the bundled resvg WebAssembly module inside the assets folder. */
|
|
7
|
+
export const RESVG_WASM_FILE = "index_bg.wasm";
|
|
8
|
+
/** Validates a raw assets-folder URL syntactically and returns its href with a trailing slash. */
|
|
9
|
+
export function checkAssetsUrl(value, label) {
|
|
10
|
+
if (typeof value !== "string") {
|
|
11
|
+
throw new RenderError("E_CONFIG", label + " must be a string holding a file: URL, but got " + typeof value);
|
|
12
|
+
}
|
|
13
|
+
let url;
|
|
14
|
+
try {
|
|
15
|
+
url = new URL(value);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
throw new RenderError("E_CONFIG", label + " is not a valid URL: " + JSON.stringify(value));
|
|
19
|
+
}
|
|
20
|
+
if (url.protocol !== "file:") {
|
|
21
|
+
throw new RenderError("E_CONFIG", label + " must be a file: URL, but got protocol " + url.protocol);
|
|
22
|
+
}
|
|
23
|
+
// The URL parser maps the host localhost to an empty host. Any other host names a network share on Windows.
|
|
24
|
+
if (url.hostname !== "") {
|
|
25
|
+
throw new RenderError("E_CONFIG", label + " must be a file: URL with no host or with the host localhost: " + JSON.stringify(value));
|
|
26
|
+
}
|
|
27
|
+
if (/[?#]/.test(value)) {
|
|
28
|
+
throw new RenderError("E_CONFIG", label + " must be a folder URL with no query and no fragment: " + JSON.stringify(value));
|
|
29
|
+
}
|
|
30
|
+
if (/%2F|%5C/i.test(url.pathname)) {
|
|
31
|
+
throw new RenderError("E_CONFIG", label + " must not hold an encoded slash or backslash in its path: " + JSON.stringify(value));
|
|
32
|
+
}
|
|
33
|
+
if (!url.pathname.endsWith("/"))
|
|
34
|
+
url.pathname += "/";
|
|
35
|
+
return url.href;
|
|
36
|
+
}
|
|
37
|
+
/** Resolves a relative file under the assets folder URL to an OS path. */
|
|
38
|
+
export function assetFile(assetsUrl, file) {
|
|
39
|
+
const base = checkAssetsUrl(assetsUrl, "assetsUrl");
|
|
40
|
+
try {
|
|
41
|
+
return fileURLToPath(new URL(file, base));
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
45
|
+
throw new RenderError("E_CONFIG", "assetsUrl cannot be opened as a folder on this system: " + JSON.stringify(assetsUrl) + ": " + message);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Resolves the OS path of the bundled font inside the assets folder. */
|
|
49
|
+
export function bundledFontPathIn(assetsUrl) {
|
|
50
|
+
return assetFile(assetsUrl, BUNDLED_FONT_FILE);
|
|
51
|
+
}
|
|
52
|
+
/** Reads an asset file from the assets folder and returns its bytes. */
|
|
53
|
+
export function readAsset(assetsUrl, file) {
|
|
54
|
+
const path = assetFile(assetsUrl, file);
|
|
55
|
+
try {
|
|
56
|
+
return readFileSync(path);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
60
|
+
throw new RenderError("E_STAGE_MISSING", file + " cannot be read: " + path + ": " + message);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export interface SciengConfig {
|
|
|
10
10
|
maxSourceBytes: number;
|
|
11
11
|
maxMemoryMb: number;
|
|
12
12
|
allowNetwork: NetworkPolicy;
|
|
13
|
+
/** The folder URL that holds the fonts folder and the resvg WASM file. */
|
|
14
|
+
assetsUrl: string;
|
|
13
15
|
/** Path of a TrueType or OpenType file that the raster stage uses in place of the bundled font. */
|
|
14
16
|
rasterFont?: string;
|
|
15
17
|
}
|
|
@@ -21,6 +23,8 @@ export interface ConfigDeps {
|
|
|
21
23
|
readFile: (filePath: string) => Promise<string>;
|
|
22
24
|
engineVersion: string;
|
|
23
25
|
}
|
|
26
|
+
/** The assets folder of the package, resolved relative to this file. */
|
|
27
|
+
export declare const DEFAULT_ASSETS_URL: string;
|
|
24
28
|
/**
|
|
25
29
|
* Resolves the configuration. Precedence: call option, then environment, then file, then default.
|
|
26
30
|
* Any unreadable or invalid source rejects with E_CONFIG. The loader never falls back to defaults for the source.
|
package/dist/config.js
CHANGED
|
@@ -2,6 +2,10 @@ import { homedir as osHomedir } from "node:os";
|
|
|
2
2
|
import { readFile as fsReadFile } from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { RenderError } from "./errors.js";
|
|
5
|
+
import { ENGINE_VERSION } from "./version.js";
|
|
6
|
+
import { checkAssetsUrl } from "./assets.js";
|
|
7
|
+
/** The assets folder of the package, resolved relative to this file. */
|
|
8
|
+
export const DEFAULT_ASSETS_URL = new URL("../assets/", import.meta.url).href;
|
|
5
9
|
const ENV = {
|
|
6
10
|
configFile: "SCIENG_CONFIG",
|
|
7
11
|
browser: "SCIENG_BROWSER",
|
|
@@ -11,21 +15,13 @@ const ENV = {
|
|
|
11
15
|
maxSourceBytes: "SCIENG_MAX_SOURCE_BYTES",
|
|
12
16
|
maxMemoryMb: "SCIENG_MAX_MEMORY_MB",
|
|
13
17
|
allowNetwork: "SCIENG_ALLOW_NETWORK",
|
|
18
|
+
assetsUrl: "SCIENG_ASSETS_URL",
|
|
14
19
|
rasterFont: "SCIENG_RASTER_FONT",
|
|
15
20
|
};
|
|
16
21
|
const RELEASE_URL_BASE = "https://github.com/danielsimonjr/sciengjs/releases/download";
|
|
17
22
|
const NETWORK_POLICIES = ["none", "tex-bundles", "tex-bundles,images"];
|
|
18
23
|
const CONFIG_FILE_NAME = "config.json";
|
|
19
24
|
const APP_FOLDER = "scieng";
|
|
20
|
-
/** Reads the engine version from the package file one folder above `src` or `dist`. */
|
|
21
|
-
async function readEngineVersion() {
|
|
22
|
-
const text = await fsReadFile(new URL("../package.json", import.meta.url), "utf8");
|
|
23
|
-
const version = JSON.parse(text).version;
|
|
24
|
-
if (typeof version !== "string") {
|
|
25
|
-
throw new RenderError("E_CONFIG", "package.json has no version string");
|
|
26
|
-
}
|
|
27
|
-
return version;
|
|
28
|
-
}
|
|
29
25
|
/** The platform folder for configuration. A missing platform variable fails loudly. */
|
|
30
26
|
function configBaseDir(d) {
|
|
31
27
|
if (d.platform === "win32")
|
|
@@ -60,6 +56,7 @@ function defaults(engineVersion) {
|
|
|
60
56
|
maxSourceBytes: 10485760,
|
|
61
57
|
maxMemoryMb: 2048,
|
|
62
58
|
allowNetwork: "tex-bundles",
|
|
59
|
+
assetsUrl: DEFAULT_ASSETS_URL,
|
|
63
60
|
};
|
|
64
61
|
}
|
|
65
62
|
function defaultConfigPath(d) {
|
|
@@ -91,6 +88,8 @@ function checkValue(key, value, source) {
|
|
|
91
88
|
return fail(`must be one of ${NETWORK_POLICIES.join(", ")}`);
|
|
92
89
|
}
|
|
93
90
|
return value;
|
|
91
|
+
case "assetsUrl":
|
|
92
|
+
return checkAssetsUrl(value, `${source}: ${key}`);
|
|
94
93
|
}
|
|
95
94
|
}
|
|
96
95
|
/** Converts an environment text to a value of the key. Numbers must be whole and positive. */
|
|
@@ -111,6 +110,7 @@ const ENV_KEYS = {
|
|
|
111
110
|
maxSourceBytes: ENV.maxSourceBytes,
|
|
112
111
|
maxMemoryMb: ENV.maxMemoryMb,
|
|
113
112
|
allowNetwork: ENV.allowNetwork,
|
|
113
|
+
assetsUrl: ENV.assetsUrl,
|
|
114
114
|
rasterFont: ENV.rasterFont,
|
|
115
115
|
};
|
|
116
116
|
/** Reads the config file. A missing file is fine only at the default path. */
|
|
@@ -152,7 +152,7 @@ export async function loadConfig(options = {}, deps = {}) {
|
|
|
152
152
|
platform: process.platform,
|
|
153
153
|
homedir: osHomedir(),
|
|
154
154
|
readFile: (p) => fsReadFile(p, "utf8"),
|
|
155
|
-
engineVersion:
|
|
155
|
+
engineVersion: ENGINE_VERSION,
|
|
156
156
|
...deps,
|
|
157
157
|
};
|
|
158
158
|
const explicitPath = nonEmpty(d.env[ENV.configFile]);
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core.js
CHANGED
|
@@ -57,7 +57,7 @@ export async function renderWithRegistry(req, options, registry, configDeps) {
|
|
|
57
57
|
format: req.format,
|
|
58
58
|
source: req.source,
|
|
59
59
|
options: (req.options ?? {}),
|
|
60
|
-
settings: { maxMemoryMb: cfg.maxMemoryMb, rasterFont: cfg.rasterFont },
|
|
60
|
+
settings: { maxMemoryMb: cfg.maxMemoryMb, rasterFont: cfg.rasterFont, assetsUrl: cfg.assetsUrl },
|
|
61
61
|
},
|
|
62
62
|
}, { timeoutMs: cfg.timeoutMs, maxMemoryMb: cfg.maxMemoryMb });
|
|
63
63
|
return {
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsC,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAiB,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAiG,MAAM,YAAY,CAAC;AAE5K,2CAA2C;AAC3C,MAAM,IAAI,GAAiC;IACzC,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,iBAAiB;IACtB,IAAI,EAAE,0BAA0B;IAChC,EAAE,EAAE,8BAA8B;IAClC,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,WAAW;CACjB,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAElC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAkB,EAClB,OAA8B,EAC9B,QAAkB,EAClB,UAAgC;IAEhC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAElD,IAAI,CAAE,WAAiC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,WAAW,CAAC,SAAS,EAAE,uBAAuB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,CAAE,cAAoC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,WAAW,CAAC,SAAS,EAAE,0BAA0B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,WAAW,CAAC,eAAe,EAAE,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,MAAM,0BAA0B,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,QAAQ,GAAI,kBAAwC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9E,IAAI,QAAQ,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,IAAI,WAAW,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,wBAAwB,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,WAAW,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,wBAAwB,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;IACnH,IAAI,WAAW,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;QACrC,MAAM,IAAI,WAAW,CAAC,SAAS,EAAE,aAAa,WAAW,wBAAwB,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;IACzG,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,WAAW,CAAC,eAAe,EAAE,MAAM,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,MAAM,mCAAmC,CAAC,CAAC;IAC7G,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1D,MAAM,IAAI,WAAW,CAAC,iBAAiB,EAAE,yEAAyE,CAAC,CAAC;IACtH,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,WAAW,CAC3B;QACE,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE;YACP,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAkB;YAC7C,QAAQ,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -16,3 +16,9 @@ export declare class RenderError extends Error {
|
|
|
16
16
|
readonly column: number | undefined;
|
|
17
17
|
constructor(code: RenderErrorCode, message: string, position?: RenderErrorPosition);
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Whether the value is a render error, decided structurally instead of by class identity.
|
|
21
|
+
* A bundle can hold more than one copy of the errors module, so an error from another copy
|
|
22
|
+
* fails `instanceof RenderError`. The check matches the name and the code instead.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isRenderError(value: unknown): value is RenderError;
|
package/dist/errors.js
CHANGED
|
@@ -22,4 +22,19 @@ export class RenderError extends Error {
|
|
|
22
22
|
this.column = position.column;
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Whether the value is a render error, decided structurally instead of by class identity.
|
|
27
|
+
* A bundle can hold more than one copy of the errors module, so an error from another copy
|
|
28
|
+
* fails `instanceof RenderError`. The check matches the name and the code instead.
|
|
29
|
+
*/
|
|
30
|
+
export function isRenderError(value) {
|
|
31
|
+
if (!(value instanceof Error) || value.name !== "RenderError") {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
const code = value.code;
|
|
35
|
+
if (typeof code !== "string") {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return RENDER_ERROR_CODES.includes(code);
|
|
39
|
+
}
|
|
25
40
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,SAAS;IACT,eAAe;IACf,SAAS;IACT,WAAW;IACX,iBAAiB;IACjB,UAAU;IACV,aAAa;IACb,YAAY;CACJ,CAAC;AAaX,wDAAwD;AACxD,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,CAAkB;IACtB,IAAI,CAAqB;IACzB,MAAM,CAAqB;IAEpC,YAAY,IAAqB,EAAE,OAAe,EAAE,QAAQ,GAAwB,EAAE;QACpF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAChC,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,SAAS;IACT,eAAe;IACf,SAAS;IACT,WAAW;IACX,iBAAiB;IACjB,UAAU;IACV,aAAa;IACb,YAAY;CACJ,CAAC;AAaX,wDAAwD;AACxD,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,IAAI,CAAkB;IACtB,IAAI,CAAqB;IACzB,MAAM,CAAqB;IAEpC,YAAY,IAAqB,EAAE,OAAe,EAAE,QAAQ,GAAwB,EAAE;QACpF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAChC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAI,KAA4B,CAAC,IAAI,CAAC;IAChD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAQ,kBAAwC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { BackendOutput, WorkerJob } from "../worker/protocol.ts";
|
|
2
|
-
/** Renders dot to png: the SVG of the graph, then the PNG of that SVG at the option scale. */
|
|
2
|
+
/** Renders dot to png: the SVG of the graph, then the PNG of that SVG at the option scale. The bundled font comes from the assets folder named in the settings. */
|
|
3
3
|
export declare function render(request: WorkerJob["request"]): Promise<BackendOutput>;
|
|
4
4
|
/** Renders dot to png with the bundled font at the given path. The path is a parameter so that a test can name a missing or invalid bundled font. */
|
|
5
5
|
export declare function renderPng(request: WorkerJob["request"], bundledFontPath: string): Promise<BackendOutput>;
|
|
6
|
+
/**
|
|
7
|
+
* Rasterizes one SVG document to PNG at scale 1. The font follows render: the rasterFont setting when set,
|
|
8
|
+
* else the bundled font in the assets folder. The Mermaid PNG backend uses this function.
|
|
9
|
+
*/
|
|
10
|
+
export declare function svgDocumentToPng(svg: string, request: WorkerJob["request"]): Promise<BackendOutput>;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
|
-
import { fileURLToPath } from "node:url";
|
|
3
2
|
import { RenderError } from "../errors.js";
|
|
3
|
+
import { bundledFontPathIn } from "../assets.js";
|
|
4
4
|
import { dotSourceText, dotToSvg } from "./dot.js";
|
|
5
5
|
import { isFontFile, svgToPng } from "../raster/index.js";
|
|
6
6
|
import { rasterWarnings } from "../raster/warnings.js";
|
|
7
|
-
const BUNDLED_FONT_PATH = fileURLToPath(new URL("../../assets/fonts/LiberationSerif-Regular.ttf", import.meta.url));
|
|
8
7
|
function readFont(path, bundled) {
|
|
9
8
|
let bytes;
|
|
10
9
|
try {
|
|
@@ -22,9 +21,14 @@ function readFont(path, bundled) {
|
|
|
22
21
|
}
|
|
23
22
|
return bytes;
|
|
24
23
|
}
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
/** Reads the font of a render: the rasterFont setting when set, else the bundled font at the given path. */
|
|
25
|
+
function fontOf(settings, bundledFontPath) {
|
|
26
|
+
const rasterFont = settings.rasterFont;
|
|
27
|
+
return readFont(rasterFont ?? bundledFontPath, rasterFont === undefined);
|
|
28
|
+
}
|
|
29
|
+
/** Renders dot to png: the SVG of the graph, then the PNG of that SVG at the option scale. The bundled font comes from the assets folder named in the settings. */
|
|
30
|
+
export async function render(request) {
|
|
31
|
+
return renderPng(request, bundledFontPathIn(request.settings.assetsUrl));
|
|
28
32
|
}
|
|
29
33
|
/** Renders dot to png with the bundled font at the given path. The path is a parameter so that a test can name a missing or invalid bundled font. */
|
|
30
34
|
export async function renderPng(request, bundledFontPath) {
|
|
@@ -44,14 +48,28 @@ export async function renderPng(request, bundledFontPath) {
|
|
|
44
48
|
throw new RenderError("E_INPUT", "option scale must be a finite number greater than 0");
|
|
45
49
|
}
|
|
46
50
|
}
|
|
47
|
-
const
|
|
48
|
-
const font = readFont(rasterFont ?? bundledFontPath, rasterFont === undefined);
|
|
51
|
+
const font = fontOf(request.settings, bundledFontPath);
|
|
49
52
|
const dot = await dotToSvg(dotSourceText(request.source));
|
|
50
53
|
const bytes = await svgToPng(dot.svg, {
|
|
51
54
|
scale,
|
|
52
55
|
maxMemoryMb: request.settings.maxMemoryMb,
|
|
53
56
|
font,
|
|
57
|
+
assetsUrl: request.settings.assetsUrl,
|
|
54
58
|
});
|
|
55
59
|
return { bytes, warnings: [...dot.warnings, ...rasterWarnings(dot.svg, font)] };
|
|
56
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Rasterizes one SVG document to PNG at scale 1. The font follows render: the rasterFont setting when set,
|
|
63
|
+
* else the bundled font in the assets folder. The Mermaid PNG backend uses this function.
|
|
64
|
+
*/
|
|
65
|
+
export async function svgDocumentToPng(svg, request) {
|
|
66
|
+
const font = fontOf(request.settings, bundledFontPathIn(request.settings.assetsUrl));
|
|
67
|
+
const bytes = await svgToPng(svg, {
|
|
68
|
+
scale: 1,
|
|
69
|
+
maxMemoryMb: request.settings.maxMemoryMb,
|
|
70
|
+
font,
|
|
71
|
+
assetsUrl: request.settings.assetsUrl,
|
|
72
|
+
});
|
|
73
|
+
return { bytes, warnings: rasterWarnings(svg, font) };
|
|
74
|
+
}
|
|
57
75
|
//# sourceMappingURL=backend-png.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend-png.js","sourceRoot":"","sources":["../../src/graph/backend-png.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"backend-png.js","sourceRoot":"","sources":["../../src/graph/backend-png.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { BackendOutput, WorkerJob } from "../worker/protocol.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Renders one Mermaid source to PNG: the SVG of the diagram, then the PNG of that SVG.
|
|
4
|
+
* The worker calls this function for the mermaid:png pair.
|
|
5
|
+
*/
|
|
6
|
+
export declare function render(request: WorkerJob["request"]): Promise<BackendOutput>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { svgDocumentToPng } from "../graph/backend-png.js";
|
|
2
|
+
import { sourceText } from "./common.js";
|
|
3
|
+
import { renderMermaidSvg } from "./render.js";
|
|
4
|
+
/**
|
|
5
|
+
* Renders one Mermaid source to PNG: the SVG of the diagram, then the PNG of that SVG.
|
|
6
|
+
* The worker calls this function for the mermaid:png pair.
|
|
7
|
+
*/
|
|
8
|
+
export async function render(request) {
|
|
9
|
+
const svg = await renderMermaidSvg(sourceText(request.source), request.options);
|
|
10
|
+
const png = await svgDocumentToPng(svg.svg, request);
|
|
11
|
+
return { bytes: png.bytes, warnings: [...svg.warnings, ...(png.warnings ?? [])] };
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=backend-png.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-png.js","sourceRoot":"","sources":["../../src/mermaid/backend-png.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAA6B;IACxD,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAChF,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrD,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AACpF,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { sourceText } from "./common.js";
|
|
2
|
+
import { renderMermaidSvg } from "./render.js";
|
|
3
|
+
/** Renders one Mermaid source to SVG. The worker calls this function for the mermaid:svg pair. */
|
|
4
|
+
export async function render(request) {
|
|
5
|
+
const result = await renderMermaidSvg(sourceText(request.source), request.options);
|
|
6
|
+
return { bytes: new TextEncoder().encode(result.svg), warnings: result.warnings };
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=backend-svg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-svg.js","sourceRoot":"","sources":["../../src/mermaid/backend-svg.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAA6B;IACxD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACnF,OAAO,EAAE,KAAK,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;AACpF,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type Source } from "./common.ts";
|
|
2
|
+
/** The shape at one end of a class relation: none, an open arrow, a triangle, or a diamond that is filled or open. */
|
|
3
|
+
export type Marker = "none" | "arrow" | "triangle" | "diamond" | "filled-diamond";
|
|
4
|
+
/** The line style of a class relation and the marker at each end. The tail is the end at the first class. */
|
|
5
|
+
export interface ClassArrow {
|
|
6
|
+
dashed: boolean;
|
|
7
|
+
tail: Marker;
|
|
8
|
+
head: Marker;
|
|
9
|
+
}
|
|
10
|
+
/** One class of the diagram: its name, its generic parameter, its members and the line that declares it. */
|
|
11
|
+
export interface ClassDef {
|
|
12
|
+
name: string;
|
|
13
|
+
generic: string | undefined;
|
|
14
|
+
members: string[];
|
|
15
|
+
line: number;
|
|
16
|
+
}
|
|
17
|
+
/** One relation between two classes. It holds the arrow, the cardinality at each end, the label and the source line. */
|
|
18
|
+
export interface ClassRelation {
|
|
19
|
+
from: string;
|
|
20
|
+
to: string;
|
|
21
|
+
token: string;
|
|
22
|
+
arrow: ClassArrow;
|
|
23
|
+
fromCardinality: string | undefined;
|
|
24
|
+
toCardinality: string | undefined;
|
|
25
|
+
label: string | undefined;
|
|
26
|
+
line: number;
|
|
27
|
+
}
|
|
28
|
+
/** A parsed class diagram: its direction, its classes and its relations. */
|
|
29
|
+
export interface ClassModel {
|
|
30
|
+
direction: "TB" | "BT" | "LR" | "RL";
|
|
31
|
+
classes: ClassDef[];
|
|
32
|
+
relations: ClassRelation[];
|
|
33
|
+
}
|
|
34
|
+
/** Parses the content lines of a class diagram. A line outside the grammar rejects with E_INPUT. In lenient mode the line is skipped and a warning names it. */
|
|
35
|
+
export declare function parseClassDiagram(src: Source): ClassModel;
|
|
36
|
+
/** Builds the DOT source of a parsed class diagram. Each class is a record node. */
|
|
37
|
+
export declare function classToDot(model: ClassModel): string;
|