astro-lilypond 0.5.1 → 0.5.2
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 +12 -7
- package/components/LilyPond.astro +11 -11
- package/dist/execLilyPond.d.ts +18 -0
- package/dist/execLilyPond.d.ts.map +1 -0
- package/dist/execLilyPond.js +58 -0
- package/dist/execLilyPond.js.map +1 -0
- package/dist/index.d.ts +8 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -15
- package/dist/index.js.map +1 -1
- package/dist/plugins/index.d.ts +5 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +4 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/rehype.d.ts +6 -0
- package/dist/plugins/rehype.d.ts.map +1 -0
- package/dist/{rehype-plugin.js → plugins/rehype.js} +9 -8
- package/dist/plugins/rehype.js.map +1 -0
- package/dist/plugins/remark.d.ts +6 -0
- package/dist/plugins/remark.d.ts.map +1 -0
- package/dist/{remark-plugin.js → plugins/remark.js} +6 -6
- package/dist/plugins/remark.js.map +1 -0
- package/dist/plugins/satteri.d.ts +5 -0
- package/dist/plugins/satteri.d.ts.map +1 -0
- package/dist/{satteri-plugin.js → plugins/satteri.js} +5 -4
- package/dist/plugins/satteri.js.map +1 -0
- package/dist/plugins/types.d.ts +8 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +2 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/readOutputFile.d.ts +10 -0
- package/dist/readOutputFile.d.ts.map +1 -0
- package/dist/readOutputFile.js +42 -0
- package/dist/readOutputFile.js.map +1 -0
- package/dist/render.d.ts +6 -0
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +16 -82
- package/dist/render.js.map +1 -1
- package/dist/utils/includePathsFor.d.ts +7 -0
- package/dist/utils/includePathsFor.d.ts.map +1 -0
- package/dist/utils/includePathsFor.js +14 -0
- package/dist/utils/includePathsFor.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/isLilypondLang.d.ts +3 -0
- package/dist/utils/isLilypondLang.d.ts.map +1 -0
- package/dist/utils/isLilypondLang.js +5 -0
- package/dist/utils/isLilypondLang.js.map +1 -0
- package/dist/utils/prependVersion.d.ts +6 -0
- package/dist/utils/prependVersion.d.ts.map +1 -0
- package/dist/utils/prependVersion.js +10 -0
- package/dist/utils/prependVersion.js.map +1 -0
- package/dist/utils/renderToHtml.d.ts +5 -0
- package/dist/utils/renderToHtml.d.ts.map +1 -0
- package/dist/utils/renderToHtml.js +12 -0
- package/dist/utils/renderToHtml.js.map +1 -0
- package/dist/utils/sourceNameFor.d.ts +7 -0
- package/dist/utils/sourceNameFor.d.ts.map +1 -0
- package/dist/utils/sourceNameFor.js +14 -0
- package/dist/utils/sourceNameFor.js.map +1 -0
- package/package.json +2 -2
- package/dist/rehype-plugin.d.ts +0 -6
- package/dist/rehype-plugin.d.ts.map +0 -1
- package/dist/rehype-plugin.js.map +0 -1
- package/dist/remark-plugin.d.ts +0 -6
- package/dist/remark-plugin.d.ts.map +0 -1
- package/dist/remark-plugin.js.map +0 -1
- package/dist/satteri-plugin.d.ts +0 -5
- package/dist/satteri-plugin.d.ts.map +0 -1
- package/dist/satteri-plugin.js.map +0 -1
- package/dist/util.d.ts +0 -31
- package/dist/util.d.ts.map +0 -1
- package/dist/util.js +0 -50
- package/dist/util.js.map +0 -1
package/README.md
CHANGED
|
@@ -4,25 +4,24 @@ An [Astro](https://astro.build) integration for rendering [LilyPond](https://lil
|
|
|
4
4
|
|
|
5
5
|
- Render LilyPond via Markdown or with a `<LilyPond>` component
|
|
6
6
|
- Works with both `unified()` and `satteri()` Markdown processors
|
|
7
|
+
- Zero runtime JavaScript!
|
|
7
8
|
- Supports all LilyPond syntax
|
|
8
9
|
|
|
9
10
|
Docs: https://lilypond.ky.fyi
|
|
10
11
|
|
|
11
12
|
## Quick Start
|
|
12
13
|
|
|
13
|
-
###
|
|
14
|
+
### 1. Install LilyPond
|
|
14
15
|
|
|
15
16
|
Install the LilyPond binary directly from [lilypond.org](https://lilypond.org/download.html) or with `brew install lilypond` (Mac) or `apt install lilypond` (Linux).
|
|
16
17
|
|
|
17
|
-
###
|
|
18
|
-
|
|
19
|
-
#### 1. Install `astro-lilypond`
|
|
18
|
+
### 2. Install `astro-lilypond`
|
|
20
19
|
|
|
21
20
|
```sh
|
|
22
21
|
pnpm add astro-lilypond
|
|
23
22
|
```
|
|
24
23
|
|
|
25
|
-
|
|
24
|
+
### 3. Add the integration to your Astro config
|
|
26
25
|
|
|
27
26
|
```js
|
|
28
27
|
// astro.config.mjs
|
|
@@ -34,9 +33,9 @@ export default defineConfig({
|
|
|
34
33
|
});
|
|
35
34
|
```
|
|
36
35
|
|
|
37
|
-
|
|
36
|
+
### 4. Write your music
|
|
38
37
|
|
|
39
|
-
Write LilyPond code within fenced code blocks with the `lilypond` or `
|
|
38
|
+
Write LilyPond code within fenced code blocks with the `lilypond`, `ly`, or `ily` language tag.
|
|
40
39
|
|
|
41
40
|
````md
|
|
42
41
|
```lilypond
|
|
@@ -45,3 +44,9 @@ Write LilyPond code within fenced code blocks with the `lilypond` or `ly` langua
|
|
|
45
44
|
````
|
|
46
45
|
|
|
47
46
|
Your score will be built to `.svg` or `.png` and display alongside the rest of your content.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
For more info, refer to the docs: https://lilypond.ky.fyi
|
|
51
|
+
|
|
52
|
+
Happy notating!
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
---
|
|
2
2
|
const HTML_ENTITIES: Record<string, string> = {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
"&": "&",
|
|
4
|
+
"<": "<",
|
|
5
|
+
">": ">",
|
|
6
|
+
'"': """,
|
|
7
|
+
"'": "'",
|
|
8
8
|
};
|
|
9
9
|
|
|
10
10
|
function escapeHtml(text: unknown): string {
|
|
11
|
-
|
|
11
|
+
return String(text).replace(/[&<>"']/g, (c) => HTML_ENTITIES[c] ?? c);
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
interface Props {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
content: string;
|
|
16
|
+
class?: string | undefined;
|
|
17
|
+
style?: string | undefined;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
const { content, class: className, style } = Astro.props;
|
|
21
21
|
|
|
22
22
|
let html = content;
|
|
23
23
|
if (className)
|
|
24
|
-
|
|
24
|
+
html = html.replace('class="lilypond"', `class="lilypond ${className}"`);
|
|
25
25
|
if (style)
|
|
26
|
-
|
|
26
|
+
html = html.replace(/<(svg|img)\b/, `<$1 style="${escapeHtml(style)}"`);
|
|
27
27
|
---
|
|
28
28
|
|
|
29
29
|
<Fragment set:html={html} />
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Format } from "./render.js";
|
|
2
|
+
export interface ExecLilypondOptions {
|
|
3
|
+
binaryPath: string;
|
|
4
|
+
format: Format;
|
|
5
|
+
resolution: number;
|
|
6
|
+
crop: boolean;
|
|
7
|
+
includePaths: string[];
|
|
8
|
+
timeout: number;
|
|
9
|
+
inputPath: string;
|
|
10
|
+
outputBase: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Invokes the `lilypond` binary against an already-written input file.
|
|
14
|
+
* Resolves once compilation succeeds (surfacing any stderr warnings to the
|
|
15
|
+
* build output); throws a normalized Error on a non-zero exit or timeout.
|
|
16
|
+
*/
|
|
17
|
+
export declare function execLilyPond(options: ExecLilypondOptions): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=execLilyPond.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execLilyPond.d.ts","sourceRoot":"","sources":["../src/execLilyPond.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAM1C,MAAM,WAAW,mBAAmB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CACjC,OAAO,EAAE,mBAAmB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAgEf"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
const execFileAsync = promisify(execFile);
|
|
4
|
+
const MAX_BUFFER = 16 * 1024 * 1024; // 16 MiB
|
|
5
|
+
/**
|
|
6
|
+
* Invokes the `lilypond` binary against an already-written input file.
|
|
7
|
+
* Resolves once compilation succeeds (surfacing any stderr warnings to the
|
|
8
|
+
* build output); throws a normalized Error on a non-zero exit or timeout.
|
|
9
|
+
*/
|
|
10
|
+
export async function execLilyPond(options) {
|
|
11
|
+
const { binaryPath, format, resolution, crop, includePaths, timeout, inputPath, outputBase, } = options;
|
|
12
|
+
const args = [
|
|
13
|
+
// Render the correct format
|
|
14
|
+
`--format=${format}`,
|
|
15
|
+
// Define defaults — these can be overridden with the appropriate flags
|
|
16
|
+
// inside of individual .ly files
|
|
17
|
+
// Disable point-and-click behavior on SVGs when clicking noteheads
|
|
18
|
+
"--define-default=no-point-and-click",
|
|
19
|
+
// Use the `cairo` backend for graphics rendering; faster than the default `ps` backend
|
|
20
|
+
// https://lilypond.org/doc/v2.26/Documentation/usage/advanced-command_002dline-options-for-lilypond
|
|
21
|
+
"--define-default=backend=cairo",
|
|
22
|
+
// Resolution for generating PNGs (set in DPI)
|
|
23
|
+
`--define-default=resolution=${resolution}`,
|
|
24
|
+
// Set cropping
|
|
25
|
+
`--define-default=crop=${crop ? "#t" : "#f"}`,
|
|
26
|
+
// If the LilyPond file imports from others via \include, make sure those files are included
|
|
27
|
+
...includePaths.map((p) => `--include=${p}`),
|
|
28
|
+
"--output",
|
|
29
|
+
outputBase,
|
|
30
|
+
inputPath,
|
|
31
|
+
];
|
|
32
|
+
// LilyPond writes its progress log, (and any warnings/errors) to stderr,
|
|
33
|
+
// even on success. surface it in the build output so it's visible,
|
|
34
|
+
// but let the exit code (not stderr content) decide pass/fail.
|
|
35
|
+
let stderr;
|
|
36
|
+
try {
|
|
37
|
+
({ stderr } = await execFileAsync(binaryPath, args, {
|
|
38
|
+
signal: AbortSignal.timeout(timeout),
|
|
39
|
+
maxBuffer: MAX_BUFFER,
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
if (err &&
|
|
44
|
+
typeof err === "object" &&
|
|
45
|
+
err.name === "AbortError") {
|
|
46
|
+
throw new Error(`lilypond timed out after ${timeout}ms`);
|
|
47
|
+
}
|
|
48
|
+
const errStderr = err && typeof err === "object" && "stderr" in err
|
|
49
|
+
? String(err.stderr)
|
|
50
|
+
: undefined;
|
|
51
|
+
if (errStderr)
|
|
52
|
+
process.stderr.write(errStderr);
|
|
53
|
+
throw new Error(errStderr || (err instanceof Error ? err.message : String(err)));
|
|
54
|
+
}
|
|
55
|
+
if (stderr)
|
|
56
|
+
process.stderr.write(stderr);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=execLilyPond.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execLilyPond.js","sourceRoot":"","sources":["../src/execLilyPond.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,SAAS;AAa9C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,OAA4B;IAE5B,MAAM,EACL,UAAU,EACV,MAAM,EACN,UAAU,EACV,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,SAAS,EACT,UAAU,GACV,GAAG,OAAO,CAAC;IAEZ,MAAM,IAAI,GAAG;QACZ,4BAA4B;QAC5B,YAAY,MAAM,EAAE;QAEpB,uEAAuE;QACvE,iCAAiC;QAEjC,mEAAmE;QACnE,qCAAqC;QACrC,uFAAuF;QACvF,oGAAoG;QACpG,gCAAgC;QAChC,8CAA8C;QAC9C,+BAA+B,UAAU,EAAE;QAC3C,eAAe;QACf,yBAAyB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;QAE7C,4FAA4F;QAC5F,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;QAE5C,UAAU;QACV,UAAU;QACV,SAAS;KACT,CAAC;IAEF,yEAAyE;IACzE,mEAAmE;IACnE,+DAA+D;IAC/D,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACJ,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE;YACnD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;YACpC,SAAS,EAAE,UAAU;SACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IACC,GAAG;YACH,OAAO,GAAG,KAAK,QAAQ;YACtB,GAAyB,CAAC,IAAI,KAAK,YAAY,EAC/C,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,4BAA4B,OAAO,IAAI,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,SAAS,GACd,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,IAAI,GAAG;YAChD,CAAC,CAAC,MAAM,CAAE,GAA2B,CAAC,MAAM,CAAC;YAC7C,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,SAAS;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,IAAI,KAAK,CACd,SAAS,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAC/D,CAAC;IACH,CAAC;IACD,IAAI,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AstroIntegration } from "astro";
|
|
2
|
-
import type
|
|
3
|
-
export type { LilypondPluginOptions };
|
|
4
|
-
export interface LilypondOptions extends
|
|
2
|
+
import { type PluginOptions } from "./plugins/index.js";
|
|
3
|
+
export type { PluginOptions as LilypondPluginOptions };
|
|
4
|
+
export interface LilypondOptions extends PluginOptions {
|
|
5
5
|
/**
|
|
6
6
|
* LilyPond version string to prepend automatically to every block that
|
|
7
7
|
* doesn't already declare `\version`. Example: `"2.24.0"`.
|
|
@@ -24,6 +24,11 @@ export interface LilypondOptions extends LilypondPluginOptions {
|
|
|
24
24
|
* Crop the output tightly to the content bounding box. Defaults to `true`.
|
|
25
25
|
*/
|
|
26
26
|
crop?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Milliseconds to wait for a single `lilypond` invocation before
|
|
29
|
+
* aborting it. Defaults to `60000` (60s).
|
|
30
|
+
*/
|
|
31
|
+
timeout?: number;
|
|
27
32
|
}
|
|
28
33
|
export default function lilypond(options?: LilypondOptions): AstroIntegration;
|
|
29
34
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EACN,KAAK,aAAa,EAIlB,MAAM,oBAAoB,CAAC;AAa5B,YAAY,EAAE,aAAa,IAAI,qBAAqB,EAAE,CAAC;AAEvD,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACrD;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AA2BD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAC/B,OAAO,GAAE,eAAoB,GAC3B,gBAAgB,CAsGlB"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { execFile } from "child_process";
|
|
2
|
-
import { promisify } from "util";
|
|
3
|
-
import {
|
|
4
|
-
import { rehypeLilypondPlugin } from "./rehype-plugin.js";
|
|
5
|
-
import { satteriLilypondPlugin } from "./satteri-plugin.js";
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import { rehypePlugin, remarkPlugin, satteriPlugin, } from "./plugins/index.js";
|
|
6
4
|
import { defaultOptions, render } from "./render.js";
|
|
7
|
-
import { includePathsFor, prependVersion, renderToHtml, sourceNameFor } from "./
|
|
5
|
+
import { includePathsFor, prependVersion, renderToHtml, sourceNameFor, } from "./utils/index.js";
|
|
8
6
|
const execFileAsync = promisify(execFile);
|
|
9
7
|
const LY_EXTENSIONS = [".ly", ".lilypond", ".ily"];
|
|
10
8
|
function lyFilePlugin(options) {
|
|
@@ -12,18 +10,23 @@ function lyFilePlugin(options) {
|
|
|
12
10
|
name: "vite-plugin-astro-lilypond-ly",
|
|
13
11
|
enforce: "pre",
|
|
14
12
|
async transform(source, id) {
|
|
15
|
-
if (!LY_EXTENSIONS.some(ext => id.endsWith(ext)))
|
|
13
|
+
if (!LY_EXTENSIONS.some((ext) => id.endsWith(ext)))
|
|
16
14
|
return;
|
|
17
|
-
const src = options.version
|
|
15
|
+
const src = options.version
|
|
16
|
+
? prependVersion(source, options.version)
|
|
17
|
+
: source;
|
|
18
18
|
const format = options.format ?? defaultOptions.format;
|
|
19
19
|
const buf = await render(src, {
|
|
20
20
|
format,
|
|
21
21
|
resolution: options.resolution,
|
|
22
22
|
crop: options.crop,
|
|
23
|
+
timeout: options.timeout,
|
|
23
24
|
includePaths: includePathsFor(id),
|
|
24
25
|
sourceName: sourceNameFor(id),
|
|
25
26
|
});
|
|
26
|
-
return {
|
|
27
|
+
return {
|
|
28
|
+
code: `export default ${JSON.stringify(renderToHtml(buf, format))}`,
|
|
29
|
+
};
|
|
27
30
|
},
|
|
28
31
|
};
|
|
29
32
|
}
|
|
@@ -54,7 +57,7 @@ export default function lilypond(options = {}) {
|
|
|
54
57
|
...existingOptions,
|
|
55
58
|
mdastPlugins: [
|
|
56
59
|
...(existingOptions.mdastPlugins ?? []),
|
|
57
|
-
|
|
60
|
+
satteriPlugin(options),
|
|
58
61
|
],
|
|
59
62
|
}),
|
|
60
63
|
},
|
|
@@ -75,11 +78,11 @@ export default function lilypond(options = {}) {
|
|
|
75
78
|
...existingOptions,
|
|
76
79
|
remarkPlugins: [
|
|
77
80
|
...(existingOptions.remarkPlugins ?? []),
|
|
78
|
-
[
|
|
81
|
+
[remarkPlugin, options],
|
|
79
82
|
],
|
|
80
83
|
rehypePlugins: [
|
|
81
84
|
...(existingOptions.rehypePlugins ?? []),
|
|
82
|
-
[
|
|
85
|
+
[rehypePlugin, options],
|
|
83
86
|
],
|
|
84
87
|
}),
|
|
85
88
|
},
|
|
@@ -95,9 +98,7 @@ export default function lilypond(options = {}) {
|
|
|
95
98
|
"astro:config:done": ({ injectTypes }) => {
|
|
96
99
|
injectTypes({
|
|
97
100
|
filename: "ly-types.d.ts",
|
|
98
|
-
content: LY_EXTENSIONS
|
|
99
|
-
.map(ext => `declare module "*${ext}" {\n const html: string;\n export default html;\n}`)
|
|
100
|
-
.join("\n"),
|
|
101
|
+
content: LY_EXTENSIONS.map((ext) => `declare module "*${ext}" {\n const html: string;\n export default html;\n}`).join("\n"),
|
|
101
102
|
});
|
|
102
103
|
},
|
|
103
104
|
},
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PluginOptions } from "./types.js";
|
|
2
|
+
export type RehypePluginOptions = PluginOptions;
|
|
3
|
+
export declare function rehypePlugin(options?: RehypePluginOptions): (tree: any, file?: {
|
|
4
|
+
path?: string;
|
|
5
|
+
}) => Promise<void>;
|
|
6
|
+
//# sourceMappingURL=rehype.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rehype.d.ts","sourceRoot":"","sources":["../../src/plugins/rehype.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQhD,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAIhD,wBAAgB,YAAY,CAC3B,OAAO,GAAE,mBAAwB,GAE/B,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAyDxD"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { visit } from "unist-util-visit";
|
|
2
|
-
import { defaultOptions, render } from "
|
|
3
|
-
import { includePathsFor, isLilypondLang, prependVersion, renderToHtml, sourceNameFor, } from "
|
|
2
|
+
import { defaultOptions, render } from "../render.js";
|
|
3
|
+
import { includePathsFor, isLilypondLang, prependVersion, renderToHtml, sourceNameFor, } from "../utils/index.js";
|
|
4
4
|
// Typed loosely so it's assignable to both RehypePlugin and the unified
|
|
5
5
|
// Plugin generic regardless of which @types/hast version the host project pins.
|
|
6
|
-
|
|
7
|
-
export function rehypeLilypondPlugin(options = {}) {
|
|
6
|
+
export function rehypePlugin(options = {}) {
|
|
8
7
|
return async (tree, file) => {
|
|
9
8
|
const promises = [];
|
|
10
9
|
const includePaths = includePathsFor(file?.path);
|
|
@@ -21,7 +20,9 @@ export function rehypeLilypondPlugin(options = {}) {
|
|
|
21
20
|
const cls = codeNode.properties?.className;
|
|
22
21
|
if (!Array.isArray(cls))
|
|
23
22
|
return;
|
|
24
|
-
const lang = cls
|
|
23
|
+
const lang = cls
|
|
24
|
+
.find((c) => c.startsWith("language-"))
|
|
25
|
+
?.slice("language-".length);
|
|
25
26
|
if (!isLilypondLang(lang))
|
|
26
27
|
return;
|
|
27
28
|
const raw = codeNode.children
|
|
@@ -36,10 +37,10 @@ export function rehypeLilypondPlugin(options = {}) {
|
|
|
36
37
|
format,
|
|
37
38
|
resolution: options.resolution,
|
|
38
39
|
crop: options.crop,
|
|
40
|
+
timeout: options.timeout,
|
|
39
41
|
includePaths,
|
|
40
42
|
sourceName,
|
|
41
|
-
})
|
|
42
|
-
.then((buf) => {
|
|
43
|
+
}).then((buf) => {
|
|
43
44
|
const rawNode = {
|
|
44
45
|
type: "raw",
|
|
45
46
|
value: renderToHtml(buf, format),
|
|
@@ -51,4 +52,4 @@ export function rehypeLilypondPlugin(options = {}) {
|
|
|
51
52
|
await Promise.all(promises);
|
|
52
53
|
};
|
|
53
54
|
}
|
|
54
|
-
//# sourceMappingURL=rehype
|
|
55
|
+
//# sourceMappingURL=rehype.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rehype.js","sourceRoot":"","sources":["../../src/plugins/rehype.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Root } from "mdast";
|
|
2
|
+
import type { Plugin } from "unified";
|
|
3
|
+
import type { PluginOptions } from "./types.js";
|
|
4
|
+
export type RemarkPluginOptions = PluginOptions;
|
|
5
|
+
export declare const remarkPlugin: Plugin<[RemarkPluginOptions?], Root>;
|
|
6
|
+
//# sourceMappingURL=remark.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remark.d.ts","sourceRoot":"","sources":["../../src/plugins/remark.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,IAAI,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAUtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAEhD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAoC7D,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { visit } from "unist-util-visit";
|
|
2
|
-
import { defaultOptions, render } from "
|
|
3
|
-
import { includePathsFor, isLilypondLang, prependVersion, renderToHtml, sourceNameFor, } from "
|
|
4
|
-
export const
|
|
2
|
+
import { defaultOptions, render } from "../render.js";
|
|
3
|
+
import { includePathsFor, isLilypondLang, prependVersion, renderToHtml, sourceNameFor, } from "../utils/index.js";
|
|
4
|
+
export const remarkPlugin = (options = {}) => {
|
|
5
5
|
return async (tree, file) => {
|
|
6
6
|
const promises = [];
|
|
7
7
|
const includePaths = includePathsFor(file?.path);
|
|
@@ -17,10 +17,10 @@ export const remarkLilypondPlugin = (options = {}) => {
|
|
|
17
17
|
format,
|
|
18
18
|
resolution: options.resolution,
|
|
19
19
|
crop: options.crop,
|
|
20
|
+
timeout: options.timeout,
|
|
20
21
|
includePaths,
|
|
21
22
|
sourceName,
|
|
22
|
-
})
|
|
23
|
-
.then((buf) => {
|
|
23
|
+
}).then((buf) => {
|
|
24
24
|
const htmlNode = {
|
|
25
25
|
type: "html",
|
|
26
26
|
value: renderToHtml(buf, format),
|
|
@@ -32,4 +32,4 @@ export const remarkLilypondPlugin = (options = {}) => {
|
|
|
32
32
|
await Promise.all(promises);
|
|
33
33
|
};
|
|
34
34
|
};
|
|
35
|
-
//# sourceMappingURL=remark
|
|
35
|
+
//# sourceMappingURL=remark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remark.js","sourceRoot":"","sources":["../../src/plugins/remark.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACN,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,aAAa,GACb,MAAM,mBAAmB,CAAC;AAK3B,MAAM,CAAC,MAAM,YAAY,GAAyC,CACjE,OAAO,GAAG,EAAE,EACX,EAAE;IACH,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE7C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEzE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO;gBAC7B,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;gBAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YACd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC;YAEvD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE;gBAC9B,MAAM;gBACN,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY;gBACZ,UAAU;aACV,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAQ,EAAE;gBACrB,MAAM,QAAQ,GAAS;oBACtB,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;iBAChC,CAAC;gBACF,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MdastPluginDefinition } from "satteri";
|
|
2
|
+
import type { PluginOptions } from "./types.js";
|
|
3
|
+
export type SatteriPluginOptions = PluginOptions;
|
|
4
|
+
export declare function satteriPlugin(options?: SatteriPluginOptions): MdastPluginDefinition;
|
|
5
|
+
//# sourceMappingURL=satteri.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"satteri.d.ts","sourceRoot":"","sources":["../../src/plugins/satteri.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAuB,MAAM,SAAS,CAAC;AAS1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAEjD,wBAAgB,aAAa,CAC5B,OAAO,GAAE,oBAAyB,GAChC,qBAAqB,CA4BvB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { defaultOptions, render } from "
|
|
2
|
-
import { includePathsFor, isLilypondLang, prependVersion, renderToHtml, sourceNameFor, } from "
|
|
3
|
-
export function
|
|
1
|
+
import { defaultOptions, render } from "../render.js";
|
|
2
|
+
import { includePathsFor, isLilypondLang, prependVersion, renderToHtml, sourceNameFor, } from "../utils/index.js";
|
|
3
|
+
export function satteriPlugin(options = {}) {
|
|
4
4
|
return {
|
|
5
5
|
name: "astro-lilypond",
|
|
6
6
|
// Returning an mdast Html node (type: 'html') emits the value verbatim.
|
|
@@ -19,6 +19,7 @@ export function satteriLilypondPlugin(options = {}) {
|
|
|
19
19
|
format,
|
|
20
20
|
resolution: options.resolution,
|
|
21
21
|
crop: options.crop,
|
|
22
|
+
timeout: options.timeout,
|
|
22
23
|
includePaths,
|
|
23
24
|
sourceName,
|
|
24
25
|
});
|
|
@@ -26,4 +27,4 @@ export function satteriLilypondPlugin(options = {}) {
|
|
|
26
27
|
},
|
|
27
28
|
};
|
|
28
29
|
}
|
|
29
|
-
//# sourceMappingURL=satteri
|
|
30
|
+
//# sourceMappingURL=satteri.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"satteri.js","sourceRoot":"","sources":["../../src/plugins/satteri.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACN,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,aAAa,GACb,MAAM,mBAAmB,CAAC;AAK3B,MAAM,UAAU,aAAa,CAC5B,OAAO,GAAyB,EAAE;IAElC,OAAO;QACN,IAAI,EAAE,gBAAgB;QACtB,wEAAwE;QACxE,sEAAsE;QACtE,yEAAyE;QACzE,KAAK,CAAC,IAAI,CACT,IAAoB,EACpB,GAAwB;YAExB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YACjD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO;gBAC7B,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;gBAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YACd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC;YACvD,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE;gBAChC,MAAM;gBACN,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY;gBACZ,UAAU;aACV,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QAC3D,CAAC;KACD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Format } from "./render.js";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the base name to use for the temp input file. Strips any
|
|
4
|
+
* directory components from `sourceName` (it may be a full path) and
|
|
5
|
+
* rejects anything that isn't a plain, safe file name, falling back to
|
|
6
|
+
* the generic `"input.ly"`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function safeInputFileName(sourceName: string | undefined): string;
|
|
9
|
+
export declare function readOutputFile(base: string, format: Format, crop: boolean): Promise<Buffer>;
|
|
10
|
+
//# sourceMappingURL=readOutputFile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readOutputFile.d.ts","sourceRoot":"","sources":["../src/readOutputFile.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAOxE;AAED,wBAAsB,cAAc,CACnC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,GACX,OAAO,CAAC,MAAM,CAAC,CAyBjB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { basename } from "node:path";
|
|
3
|
+
/**
|
|
4
|
+
* Resolves the base name to use for the temp input file. Strips any
|
|
5
|
+
* directory components from `sourceName` (it may be a full path) and
|
|
6
|
+
* rejects anything that isn't a plain, safe file name, falling back to
|
|
7
|
+
* the generic `"input.ly"`.
|
|
8
|
+
*/
|
|
9
|
+
export function safeInputFileName(sourceName) {
|
|
10
|
+
if (!sourceName)
|
|
11
|
+
return "input.ly";
|
|
12
|
+
const base = basename(sourceName);
|
|
13
|
+
if (!base || base === "." || base === ".." || !/^[\w.-]+$/.test(base)) {
|
|
14
|
+
return "input.ly";
|
|
15
|
+
}
|
|
16
|
+
return base;
|
|
17
|
+
}
|
|
18
|
+
export async function readOutputFile(base, format, crop) {
|
|
19
|
+
// --define-default crop writes <base>.cropped.<format> alongside <base>.<format>
|
|
20
|
+
if (crop) {
|
|
21
|
+
try {
|
|
22
|
+
return await readFile(`${base}.cropped.${format}`);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
throw new Error(`expected cropped output at ${base}.cropped.${format} but it was not found: ${err instanceof Error ? err.message : String(err)}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Regular output: single page → <base>.<format>, multi-page →
|
|
29
|
+
// <base>-1.<format> (svg) or <base>-page1.<format> (png).
|
|
30
|
+
try {
|
|
31
|
+
return await readFile(`${base}.${format}`);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
try {
|
|
35
|
+
return await readFile(`${base}-1.${format}`);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return await readFile(`${base}-page1.${format}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=readOutputFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readOutputFile.js","sourceRoot":"","sources":["../src/readOutputFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAA8B;IAC/D,IAAI,CAAC,UAAU;QAAE,OAAO,UAAU,CAAC;IACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvE,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,IAAY,EACZ,MAAc,EACd,IAAa;IAEb,iFAAiF;IACjF,IAAI,IAAI,EAAE,CAAC;QACV,IAAI,CAAC;YACJ,OAAO,MAAM,QAAQ,CAAC,GAAG,IAAI,YAAY,MAAM,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACd,8BAA8B,IAAI,YAAY,MAAM,0BACnD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAChD,EAAE,CACF,CAAC;QACH,CAAC;IACF,CAAC;IAED,8DAA8D;IAC9D,0DAA0D;IAC1D,IAAI,CAAC;QACJ,OAAO,MAAM,QAAQ,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACR,IAAI,CAAC;YACJ,OAAO,MAAM,QAAQ,CAAC,GAAG,IAAI,MAAM,MAAM,EAAE,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,MAAM,QAAQ,CAAC,GAAG,IAAI,UAAU,MAAM,EAAE,CAAC,CAAC;QAClD,CAAC;IACF,CAAC;AACF,CAAC"}
|
package/dist/render.d.ts
CHANGED
|
@@ -24,6 +24,12 @@ export interface RenderOptions {
|
|
|
24
24
|
* `"input.ly"` when omitted or unsafe to use as a filename.
|
|
25
25
|
*/
|
|
26
26
|
sourceName?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Milliseconds to wait for a single `lilypond` invocation before
|
|
29
|
+
* aborting it, so a pathological score can't hang the build forever.
|
|
30
|
+
* Defaults to `60000` (60s).
|
|
31
|
+
*/
|
|
32
|
+
timeout?: number;
|
|
27
33
|
}
|
|
28
34
|
export declare const defaultOptions: Required<Omit<RenderOptions, "includePaths" | "sourceName">>;
|
|
29
35
|
export declare function render(source: string, options?: RenderOptions): Promise<Buffer>;
|
package/dist/render.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,OAAO,YAAI,KAAK,EAAE,KAAK,CAAU,CAAC;AAExC,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC7B,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,cAAc,EAAE,QAAQ,CACpC,IAAI,CAAC,aAAa,EAAE,cAAc,GAAG,YAAY,CAAC,CAOlD,CAAC;AAEF,wBAAsB,MAAM,CAC3B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,aAAkB,GACzB,OAAO,CAAC,MAAM,CAAC,CAqCjB"}
|
package/dist/render.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
const execFileAsync = promisify(execFile);
|
|
1
|
+
import { mkdtemp, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { execLilyPond } from "./execLilyPond.js";
|
|
5
|
+
import { readOutputFile, safeInputFileName } from "./readOutputFile.js";
|
|
7
6
|
const FORMATS = ["png", "svg"];
|
|
8
7
|
export const defaultOptions = {
|
|
9
8
|
format: "svg",
|
|
10
9
|
resolution: 144,
|
|
11
10
|
binaryPath: "lilypond",
|
|
12
11
|
crop: true,
|
|
12
|
+
timeout: 60_000,
|
|
13
13
|
};
|
|
14
14
|
export async function render(source, options = {}) {
|
|
15
|
-
const { format = defaultOptions.format, resolution = defaultOptions.resolution, binaryPath = defaultOptions.binaryPath, crop = defaultOptions.crop, includePaths = [], sourceName, } = options;
|
|
15
|
+
const { format = defaultOptions.format, resolution = defaultOptions.resolution, binaryPath = defaultOptions.binaryPath, crop = defaultOptions.crop, timeout = defaultOptions.timeout, includePaths = [], sourceName, } = options;
|
|
16
16
|
if (!FORMATS.includes(format)) {
|
|
17
17
|
throw new Error(`${format} is not a supported format`);
|
|
18
18
|
}
|
|
@@ -21,86 +21,20 @@ export async function render(source, options = {}) {
|
|
|
21
21
|
const outputBase = join(dir, "output");
|
|
22
22
|
try {
|
|
23
23
|
await writeFile(inputPath, source, "utf8");
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
// Use the `cairo` backend for graphics rendering; faster than the default `ps` backend
|
|
32
|
-
// https://lilypond.org/doc/v2.26/Documentation/usage/advanced-command_002dline-options-for-lilypond
|
|
33
|
-
"--define-default=backend=cairo",
|
|
34
|
-
// Resolution for generating PNGs (set in DPI)
|
|
35
|
-
`--define-default=resolution=${resolution}`,
|
|
36
|
-
// Set cropping
|
|
37
|
-
`--define-default=crop=${crop ? "#t" : "#f"}`,
|
|
38
|
-
// If the LilyPond file imports from others via \include, make sure those files are included
|
|
39
|
-
...includePaths.map((p) => `--include=${p}`),
|
|
40
|
-
"--output",
|
|
41
|
-
outputBase,
|
|
24
|
+
await execLilyPond({
|
|
25
|
+
binaryPath,
|
|
26
|
+
format,
|
|
27
|
+
resolution,
|
|
28
|
+
crop,
|
|
29
|
+
includePaths,
|
|
30
|
+
timeout,
|
|
42
31
|
inputPath,
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
// even on success — surface it in the build output so it's visible,
|
|
46
|
-
// but let the exit code (not stderr content) decide pass/fail.
|
|
47
|
-
let stderr;
|
|
48
|
-
try {
|
|
49
|
-
({ stderr } = await execFileAsync(binaryPath, args));
|
|
50
|
-
}
|
|
51
|
-
catch (err) {
|
|
52
|
-
const errStderr = err && typeof err === "object" && "stderr" in err
|
|
53
|
-
? String(err.stderr)
|
|
54
|
-
: undefined;
|
|
55
|
-
if (errStderr)
|
|
56
|
-
process.stderr.write(errStderr);
|
|
57
|
-
throw new Error(errStderr || (err instanceof Error ? err.message : String(err)));
|
|
58
|
-
}
|
|
59
|
-
if (stderr)
|
|
60
|
-
process.stderr.write(stderr);
|
|
32
|
+
outputBase,
|
|
33
|
+
});
|
|
61
34
|
return await readOutputFile(outputBase, format, crop);
|
|
62
35
|
}
|
|
63
36
|
finally {
|
|
64
37
|
await rm(dir, { recursive: true, force: true });
|
|
65
38
|
}
|
|
66
39
|
}
|
|
67
|
-
/**
|
|
68
|
-
* Resolves the base name to use for the temp input file. Strips any
|
|
69
|
-
* directory components from `sourceName` (it may be a full path) and
|
|
70
|
-
* rejects anything that isn't a plain, safe file name, falling back to
|
|
71
|
-
* the generic `"input.ly"`.
|
|
72
|
-
*/
|
|
73
|
-
function safeInputFileName(sourceName) {
|
|
74
|
-
if (!sourceName)
|
|
75
|
-
return "input.ly";
|
|
76
|
-
const base = basename(sourceName);
|
|
77
|
-
if (!base || base === "." || base === ".." || !/^[\w.-]+$/.test(base)) {
|
|
78
|
-
return "input.ly";
|
|
79
|
-
}
|
|
80
|
-
return base;
|
|
81
|
-
}
|
|
82
|
-
async function readOutputFile(base, format, crop) {
|
|
83
|
-
// --define-default crop writes <base>.cropped.<format> alongside <base>.<format>
|
|
84
|
-
if (crop) {
|
|
85
|
-
try {
|
|
86
|
-
return await readFile(`${base}.cropped.${format}`);
|
|
87
|
-
}
|
|
88
|
-
catch (err) {
|
|
89
|
-
throw new Error(`expected cropped output at ${base}.cropped.${format} but it was not found: ${err instanceof Error ? err.message : String(err)}`);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
// Regular output: single page → <base>.<format>, multi-page →
|
|
93
|
-
// <base>-1.<format> (svg) or <base>-page1.<format> (png).
|
|
94
|
-
try {
|
|
95
|
-
return await readFile(`${base}.${format}`);
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
try {
|
|
99
|
-
return await readFile(`${base}-1.${format}`);
|
|
100
|
-
}
|
|
101
|
-
catch {
|
|
102
|
-
return await readFile(`${base}-page1.${format}`);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
40
|
//# sourceMappingURL=render.js.map
|
package/dist/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExE,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,CAAU,CAAC;AA0CxC,MAAM,CAAC,MAAM,cAAc,GAEvB;IACH,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,GAAG;IACf,UAAU,EAAE,UAAU;IACtB,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,MAAM;CACf,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,MAAM,CAC3B,MAAc,EACd,OAAO,GAAkB,EAAE;IAE3B,MAAM,EACL,MAAM,GAAG,cAAc,CAAC,MAAM,EAC9B,UAAU,GAAG,cAAc,CAAC,UAAU,EACtC,UAAU,GAAG,cAAc,CAAC,UAAU,EACtC,IAAI,GAAG,cAAc,CAAC,IAAI,EAC1B,OAAO,GAAG,cAAc,CAAC,OAAO,EAChC,YAAY,GAAG,EAAE,EACjB,UAAU,GACV,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,GAAG,MAAM,4BAA4B,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEvC,IAAI,CAAC;QACJ,MAAM,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAE3C,MAAM,YAAY,CAAC;YAClB,UAAU;YACV,MAAM;YACN,UAAU;YACV,IAAI;YACJ,YAAY;YACZ,OAAO;YACP,SAAS;YACT,UAAU;SACV,CAAC,CAAC;QAEH,OAAO,MAAM,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;YAAS,CAAC;QACV,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derives `render()`'s `includePaths` from the source file's path or URL, so
|
|
3
|
+
* `\include`d sibling files resolve even though rendering happens in a temp
|
|
4
|
+
* directory. Returns `[]` when the source location is unknown.
|
|
5
|
+
*/
|
|
6
|
+
export declare function includePathsFor(source: string | URL | null | undefined): string[];
|
|
7
|
+
//# sourceMappingURL=includePathsFor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"includePathsFor.d.ts","sourceRoot":"","sources":["../../src/utils/includePathsFor.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,SAAS,GACrC,MAAM,EAAE,CAIV"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { dirname } from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
/**
|
|
4
|
+
* Derives `render()`'s `includePaths` from the source file's path or URL, so
|
|
5
|
+
* `\include`d sibling files resolve even though rendering happens in a temp
|
|
6
|
+
* directory. Returns `[]` when the source location is unknown.
|
|
7
|
+
*/
|
|
8
|
+
export function includePathsFor(source) {
|
|
9
|
+
if (!source)
|
|
10
|
+
return [];
|
|
11
|
+
const path = typeof source === "string" ? source : fileURLToPath(source);
|
|
12
|
+
return [dirname(path)];
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=includePathsFor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"includePathsFor.js","sourceRoot":"","sources":["../../src/utils/includePathsFor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC9B,MAAuC;IAEvC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACzE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { includePathsFor } from "./includePathsFor.js";
|
|
2
|
+
export { isLilypondLang } from "./isLilypondLang.js";
|
|
3
|
+
export { prependVersion } from "./prependVersion.js";
|
|
4
|
+
export { renderToHtml } from "./renderToHtml.js";
|
|
5
|
+
export { sourceNameFor } from "./sourceNameFor.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { includePathsFor } from "./includePathsFor.js";
|
|
2
|
+
export { isLilypondLang } from "./isLilypondLang.js";
|
|
3
|
+
export { prependVersion } from "./prependVersion.js";
|
|
4
|
+
export { renderToHtml } from "./renderToHtml.js";
|
|
5
|
+
export { sourceNameFor } from "./sourceNameFor.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isLilypondLang.d.ts","sourceRoot":"","sources":["../../src/utils/isLilypondLang.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEvE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isLilypondLang.js","sourceRoot":"","sources":["../../src/utils/isLilypondLang.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,MAAM,UAAU,cAAc,CAAC,IAA+B;IAC7D,OAAO,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* If `version` is provided and the source doesn't already declare `\version`,
|
|
3
|
+
* prepend `\version "X.X.X"` so users don't need to write it manually.
|
|
4
|
+
*/
|
|
5
|
+
export declare function prependVersion(source: string, version: string): string;
|
|
6
|
+
//# sourceMappingURL=prependVersion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prependVersion.d.ts","sourceRoot":"","sources":["../../src/utils/prependVersion.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGtE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* If `version` is provided and the source doesn't already declare `\version`,
|
|
3
|
+
* prepend `\version "X.X.X"` so users don't need to write it manually.
|
|
4
|
+
*/
|
|
5
|
+
export function prependVersion(source, version) {
|
|
6
|
+
if (/\\version\b/.test(source))
|
|
7
|
+
return source;
|
|
8
|
+
return `\\version "${version}"\n${source}`;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=prependVersion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prependVersion.js","sourceRoot":"","sources":["../../src/utils/prependVersion.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAe;IAC7D,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC9C,OAAO,cAAc,OAAO,MAAM,MAAM,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderToHtml.d.ts","sourceRoot":"","sources":["../../src/utils/renderToHtml.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAGvE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const MIME_TYPES = {
|
|
2
|
+
svg: "image/svg+xml",
|
|
3
|
+
png: "image/png",
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Converts a rendered LilyPond buffer to an HTML string.
|
|
7
|
+
*/
|
|
8
|
+
export function renderToHtml(buf, format) {
|
|
9
|
+
const b64 = buf.toString("base64");
|
|
10
|
+
return `<img class="lilypond" src="data:${MIME_TYPES[format]};base64,${b64}" alt="">`;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=renderToHtml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderToHtml.js","sourceRoot":"","sources":["../../src/utils/renderToHtml.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG;IAClB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,WAAW;CACP,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,MAAqB;IAC9D,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO,mCAAmC,UAAU,CAAC,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;AACvF,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derives `render()`'s `sourceName` from the source file's path or URL, so
|
|
3
|
+
* build output identifies the originating file instead of a generic
|
|
4
|
+
* `input.ly`. Returns `undefined` when the source location is unknown.
|
|
5
|
+
*/
|
|
6
|
+
export declare function sourceNameFor(source: string | URL | null | undefined): string | undefined;
|
|
7
|
+
//# sourceMappingURL=sourceNameFor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourceNameFor.d.ts","sourceRoot":"","sources":["../../src/utils/sourceNameFor.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,SAAS,GACrC,MAAM,GAAG,SAAS,CAIpB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { basename } from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
/**
|
|
4
|
+
* Derives `render()`'s `sourceName` from the source file's path or URL, so
|
|
5
|
+
* build output identifies the originating file instead of a generic
|
|
6
|
+
* `input.ly`. Returns `undefined` when the source location is unknown.
|
|
7
|
+
*/
|
|
8
|
+
export function sourceNameFor(source) {
|
|
9
|
+
if (!source)
|
|
10
|
+
return undefined;
|
|
11
|
+
const path = typeof source === "string" ? source : fileURLToPath(source);
|
|
12
|
+
return basename(path);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=sourceNameFor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourceNameFor.js","sourceRoot":"","sources":["../../src/utils/sourceNameFor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC5B,MAAuC;IAEvC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACzE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "astro-lilypond",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
4
4
|
"description": "An Astro integration for rendering Lilypond markup to music notation.",
|
|
5
5
|
"homepage": "https://lilypond.ky.fyi",
|
|
6
6
|
"author": "Ky Decker",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
"files": [
|
|
23
23
|
"dist",
|
|
24
|
-
"components"
|
|
24
|
+
"components/*.astro"
|
|
25
25
|
],
|
|
26
26
|
"keywords": [
|
|
27
27
|
"astro",
|
package/dist/rehype-plugin.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { LilypondPluginOptions } from "./util.js";
|
|
2
|
-
export type RehypePluginOptions = LilypondPluginOptions;
|
|
3
|
-
export declare function rehypeLilypondPlugin(options?: RehypePluginOptions): (tree: any, file?: {
|
|
4
|
-
path?: string;
|
|
5
|
-
}) => Promise<void>;
|
|
6
|
-
//# sourceMappingURL=rehype-plugin.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rehype-plugin.d.ts","sourceRoot":"","sources":["../src/rehype-plugin.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAQvD,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAKxD,wBAAgB,oBAAoB,CACnC,OAAO,GAAE,mBAAwB,GAC/B,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAuDxD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rehype-plugin.js","sourceRoot":"","sources":["../src/rehype-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACN,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,aAAa,GACb,MAAM,WAAW,CAAC;AAWnB,wEAAwE;AACxE,gFAAgF;AAChF,8DAA8D;AAC9D,MAAM,UAAU,oBAAoB,CACnC,OAAO,GAAwB,EAAE;IAEjC,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE7C,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC9C,IACC,IAAI,CAAC,OAAO,KAAK,KAAK;gBACtB,IAAI,CAAC,QAAQ,EAAE,MAAM,KAAK,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS;gBACnC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,MAAM;gBACnC,KAAK,KAAK,SAAS;gBACnB,CAAC,MAAM;gBAEP,OAAO;YAER,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,EAAE,SAAoB,CAAC;YACtD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE,OAAO;YAChC,MAAM,IAAI,GAAI,GAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACjG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBAAE,OAAO;YAElC,MAAM,GAAG,GACR,QAAQ,CAAC,QACT;iBACC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;iBACnB,IAAI,CAAC,EAAE,CAAC,CAAC;YAEX,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO;gBAC7B,CAAC,CAAC,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;gBACtC,CAAC,CAAC,GAAG,CAAC;YACP,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC;YAEvD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE;gBAC9B,MAAM;gBACN,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,YAAY;gBACZ,UAAU;aACV,CAAC;iBACA,IAAI,CAAC,CAAC,GAAG,EAAQ,EAAE;gBACnB,MAAM,OAAO,GAAY;oBACxB,IAAI,EAAE,KAAK;oBACX,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;iBAChC,CAAC;gBACF,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;YAClC,CAAC,CAAC,CAAC;YAEJ,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACH,CAAC"}
|
package/dist/remark-plugin.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { Root } from "mdast";
|
|
2
|
-
import type { Plugin } from "unified";
|
|
3
|
-
import type { LilypondPluginOptions } from "./util.js";
|
|
4
|
-
export type RemarkPluginOptions = LilypondPluginOptions;
|
|
5
|
-
export declare const remarkLilypondPlugin: Plugin<[RemarkPluginOptions?], Root>;
|
|
6
|
-
//# sourceMappingURL=remark-plugin.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-plugin.d.ts","sourceRoot":"","sources":["../src/remark-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,IAAI,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAUtC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,MAAM,mBAAmB,GAAG,qBAAqB,CAAC;AAExD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAoCrE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"remark-plugin.js","sourceRoot":"","sources":["../src/remark-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACN,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,aAAa,GACb,MAAM,WAAW,CAAC;AAKnB,MAAM,CAAC,MAAM,oBAAoB,GAAyC,CACzE,OAAO,GAAG,EAAE,EACX,EAAE;IACH,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE7C,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEzE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO;gBAC7B,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;gBAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YACd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC;YAEvD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE;gBAC9B,MAAM;gBACN,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,YAAY;gBACZ,UAAU;aACV,CAAC;iBACA,IAAI,CAAC,CAAC,GAAG,EAAQ,EAAE;gBACnB,MAAM,QAAQ,GAAS;oBACtB,IAAI,EAAE,MAAM;oBACZ,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC;iBAChC,CAAC;gBACF,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;YACnC,CAAC,CAAC,CAAC;YAEJ,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC;AACH,CAAC,CAAC"}
|
package/dist/satteri-plugin.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { MdastPluginDefinition } from "satteri";
|
|
2
|
-
import type { LilypondPluginOptions } from "./util.js";
|
|
3
|
-
export type SatteriPluginOptions = LilypondPluginOptions;
|
|
4
|
-
export declare function satteriLilypondPlugin(options?: SatteriPluginOptions): MdastPluginDefinition;
|
|
5
|
-
//# sourceMappingURL=satteri-plugin.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"satteri-plugin.d.ts","sourceRoot":"","sources":["../src/satteri-plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,qBAAqB,EAErB,MAAM,SAAS,CAAC;AASjB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEvD,MAAM,MAAM,oBAAoB,GAAG,qBAAqB,CAAC;AAEzD,wBAAgB,qBAAqB,CACpC,OAAO,GAAE,oBAAyB,GAChC,qBAAqB,CA2BvB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"satteri-plugin.js","sourceRoot":"","sources":["../src/satteri-plugin.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACN,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,aAAa,GACb,MAAM,WAAW,CAAC;AAKnB,MAAM,UAAU,qBAAqB,CACpC,OAAO,GAAyB,EAAE;IAElC,OAAO;QACN,IAAI,EAAE,gBAAgB;QACtB,wEAAwE;QACxE,sEAAsE;QACtE,yEAAyE;QACzE,KAAK,CAAC,IAAI,CACT,IAAoB,EACpB,GAAwB;YAExB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YACjD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO;gBAC7B,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;gBAC7C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YACd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC;YACvD,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE;gBAChC,MAAM;gBACN,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,YAAY;gBACZ,UAAU;aACV,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;QAC3D,CAAC;KACD,CAAC;AACH,CAAC"}
|
package/dist/util.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export interface LilypondPluginOptions {
|
|
2
|
-
version?: string;
|
|
3
|
-
format?: "svg" | "png";
|
|
4
|
-
resolution?: number;
|
|
5
|
-
crop?: boolean;
|
|
6
|
-
}
|
|
7
|
-
/** Returns true for the fenced-block language identifiers that trigger SVG rendering. */
|
|
8
|
-
export declare function isLilypondLang(lang: string | null | undefined): boolean;
|
|
9
|
-
/**
|
|
10
|
-
* If `version` is provided and the source doesn't already declare `\version`,
|
|
11
|
-
* prepend `\version "X.X.X"` so users don't need to write it manually.
|
|
12
|
-
*/
|
|
13
|
-
export declare function prependVersion(source: string, version: string): string;
|
|
14
|
-
/**
|
|
15
|
-
* Derives `render()`'s `includePaths` from the source file's path or URL, so
|
|
16
|
-
* `\include`d sibling files resolve even though rendering happens in a temp
|
|
17
|
-
* directory. Returns `[]` when the source location is unknown.
|
|
18
|
-
*/
|
|
19
|
-
export declare function includePathsFor(source: string | URL | null | undefined): string[];
|
|
20
|
-
/**
|
|
21
|
-
* Derives `render()`'s `sourceName` from the source file's path or URL, so
|
|
22
|
-
* build output identifies the originating file instead of a generic
|
|
23
|
-
* `input.ly`. Returns `undefined` when the source location is unknown.
|
|
24
|
-
*/
|
|
25
|
-
export declare function sourceNameFor(source: string | URL | null | undefined): string | undefined;
|
|
26
|
-
/**
|
|
27
|
-
* Converts a rendered LilyPond buffer to an HTML string suitable for
|
|
28
|
-
* embedding.
|
|
29
|
-
*/
|
|
30
|
-
export declare function renderToHtml(buf: Buffer, format: "svg" | "png"): string;
|
|
31
|
-
//# sourceMappingURL=util.d.ts.map
|
package/dist/util.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CACf;AAED,yFAAyF;AACzF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEvE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAIjF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAIzF;AAOD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAGvE"}
|
package/dist/util.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { basename, dirname } from "path";
|
|
2
|
-
import { fileURLToPath } from "url";
|
|
3
|
-
/** Returns true for the fenced-block language identifiers that trigger SVG rendering. */
|
|
4
|
-
export function isLilypondLang(lang) {
|
|
5
|
-
return lang === "lilypond" || lang === "ly" || lang === "ily";
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* If `version` is provided and the source doesn't already declare `\version`,
|
|
9
|
-
* prepend `\version "X.X.X"` so users don't need to write it manually.
|
|
10
|
-
*/
|
|
11
|
-
export function prependVersion(source, version) {
|
|
12
|
-
if (/\\version\b/.test(source))
|
|
13
|
-
return source;
|
|
14
|
-
return `\\version "${version}"\n${source}`;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Derives `render()`'s `includePaths` from the source file's path or URL, so
|
|
18
|
-
* `\include`d sibling files resolve even though rendering happens in a temp
|
|
19
|
-
* directory. Returns `[]` when the source location is unknown.
|
|
20
|
-
*/
|
|
21
|
-
export function includePathsFor(source) {
|
|
22
|
-
if (!source)
|
|
23
|
-
return [];
|
|
24
|
-
const path = typeof source === "string" ? source : fileURLToPath(source);
|
|
25
|
-
return [dirname(path)];
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Derives `render()`'s `sourceName` from the source file's path or URL, so
|
|
29
|
-
* build output identifies the originating file instead of a generic
|
|
30
|
-
* `input.ly`. Returns `undefined` when the source location is unknown.
|
|
31
|
-
*/
|
|
32
|
-
export function sourceNameFor(source) {
|
|
33
|
-
if (!source)
|
|
34
|
-
return undefined;
|
|
35
|
-
const path = typeof source === "string" ? source : fileURLToPath(source);
|
|
36
|
-
return basename(path);
|
|
37
|
-
}
|
|
38
|
-
const MIME_TYPES = {
|
|
39
|
-
svg: "image/svg+xml",
|
|
40
|
-
png: "image/png",
|
|
41
|
-
};
|
|
42
|
-
/**
|
|
43
|
-
* Converts a rendered LilyPond buffer to an HTML string suitable for
|
|
44
|
-
* embedding.
|
|
45
|
-
*/
|
|
46
|
-
export function renderToHtml(buf, format) {
|
|
47
|
-
const b64 = buf.toString("base64");
|
|
48
|
-
return `<img class="lilypond" src="data:${MIME_TYPES[format]};base64,${b64}" alt="">`;
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=util.js.map
|
package/dist/util.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AASpC,yFAAyF;AACzF,MAAM,UAAU,cAAc,CAAC,IAA+B;IAC7D,OAAO,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAe;IAC7D,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC9C,OAAO,cAAc,OAAO,MAAM,MAAM,EAAE,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAuC;IACtE,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACzE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAuC;IACpE,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACzE,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,GAAG;IAClB,GAAG,EAAE,eAAe;IACpB,GAAG,EAAE,WAAW;CACP,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,MAAqB;IAC9D,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO,mCAAmC,UAAU,CAAC,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;AACvF,CAAC"}
|