gutterpress 0.11.22-alpha.3 → 0.11.22-alpha.4

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.
Files changed (33) hide show
  1. package/dist/api/index.js +4 -4
  2. package/dist/{build-shby4bg7.js → build-49yq6pc8.js} +8 -8
  3. package/dist/{cli-0s8sy5n9.js → cli-1rnvq4ks.js} +1 -1
  4. package/dist/{cli-hndkg7bn.js → cli-2mjjt93j.js} +1 -1
  5. package/dist/{cli-9pk65fqf.js → cli-hfarsrcs.js} +1 -1
  6. package/dist/{cli-17g57c61.js → cli-jh793snx.js} +15 -10
  7. package/dist/{cli-sge5cp21.js → cli-r6eyzfmh.js} +3 -3
  8. package/dist/{cli-d0x3aq49.js → cli-rbhq8khk.js} +1 -1
  9. package/dist/{cli-3p7jejyd.js → cli-t4ayrvm2.js} +1 -1
  10. package/dist/{cli-nqvrp9wk.js → cli-xrj31ksc.js} +1 -1
  11. package/dist/cli.js +12 -12
  12. package/dist/{doctor-c6k6ycek.js → doctor-b3j9dn3f.js} +3 -3
  13. package/dist/{engine-9710cd7x.js → engine-9yn1f2mc.js} +2 -2
  14. package/dist/{engine-5p8tn9b4.js → engine-z4hjvrr3.js} +2 -2
  15. package/dist/{ext-t8re6kc7.js → ext-hcvyk1e9.js} +8 -8
  16. package/dist/{extension-restore-4rqvzzw4.js → extension-restore-3af0sg3p.js} +5 -5
  17. package/dist/{extension-restore-3gsj0qxp.js → extension-restore-x18zfya9.js} +3 -3
  18. package/dist/{index-p1a596m0.js → index-7srdaczc.js} +12 -7
  19. package/dist/{index-2d8j0enc.js → index-9004hfk5.js} +1 -1
  20. package/dist/{index-thmwa4f5.js → index-91v1q6fd.js} +1 -1
  21. package/dist/{index-xe83m9mc.js → index-bsbat9zm.js} +2 -2
  22. package/dist/{index-jsz0s3dy.js → index-hkxn3gwz.js} +1 -1
  23. package/dist/index.js +5 -5
  24. package/dist/{manifest.schema-nvawq0xv.json → manifest.schema-399bx3vc.json} +1 -1
  25. package/dist/{new-w3wdd615.js → new-vgqa0ycb.js} +8 -8
  26. package/dist/{plugins-8x9rsf21.js → plugins-axnpg8qz.js} +1 -1
  27. package/dist/{plugins-cx4qwn7g.js → plugins-vb1vntbt.js} +3 -3
  28. package/dist/{preflight-aj2tpnxe.js → preflight-42v663pj.js} +8 -8
  29. package/dist/{preview-dn5655f1.js → preview-trcvemnq.js} +8 -8
  30. package/dist/{publish-e0p9wgpd.js → publish-4r4qr3qe.js} +8 -8
  31. package/dist/schema/manifest.types.d.ts +1 -1
  32. package/dist/{validate-6wvf4mhr.js → validate-6q7gh7a3.js} +8 -8
  33. package/package.json +1 -1
package/dist/api/index.js CHANGED
@@ -101,7 +101,7 @@ import {
101
101
  substituteVariables,
102
102
  syncProject,
103
103
  testRemoteAccess
104
- } from "../index-p1a596m0.js";
104
+ } from "../index-7srdaczc.js";
105
105
  import {
106
106
  BUILT_IN_STYLE_SET_IDS,
107
107
  BUNDLED_EXTENSIONS,
@@ -138,7 +138,7 @@ import {
138
138
  setExtensionEnabled,
139
139
  updateExtensions,
140
140
  validateProjectExtensions
141
- } from "../index-xe83m9mc.js";
141
+ } from "../index-bsbat9zm.js";
142
142
  import {
143
143
  EXTENSION_MANIFEST_FILENAME,
144
144
  assertExtensionContained,
@@ -148,12 +148,12 @@ import {
148
148
  pathEscapesFolder,
149
149
  readExtensionMeta,
150
150
  resolveExtension
151
- } from "../index-thmwa4f5.js";
151
+ } from "../index-91v1q6fd.js";
152
152
  import"../index-ht1bcqdd.js";
153
153
  import"../index-apc8w9w8.js";
154
154
  import {
155
155
  BuildError
156
- } from "../index-jsz0s3dy.js";
156
+ } from "../index-hkxn3gwz.js";
157
157
  import"../index-2ppw6q9v.js";
158
158
  import {
159
159
  DEFAULT_PRINT_OPTS,
@@ -1,20 +1,20 @@
1
1
  import {
2
2
  runBuild,
3
3
  splitOutPath
4
- } from "./cli-17g57c61.js";
5
- import"./cli-d0x3aq49.js";
4
+ } from "./cli-jh793snx.js";
5
+ import"./cli-rbhq8khk.js";
6
6
  import"./cli-ht1bcqdd.js";
7
- import"./cli-9pk65fqf.js";
7
+ import"./cli-hfarsrcs.js";
8
8
  import"./cli-2ppw6q9v.js";
9
9
  import"./cli-eyyggect.js";
10
10
  import"./cli-asap4t1z.js";
11
11
  import"./cli-habkc5ng.js";
12
12
  import"./cli-v5mp7a6q.js";
13
- import"./cli-sge5cp21.js";
14
- import"./cli-0s8sy5n9.js";
13
+ import"./cli-r6eyzfmh.js";
14
+ import"./cli-1rnvq4ks.js";
15
15
  import {
16
16
  log
17
- } from "./cli-3p7jejyd.js";
17
+ } from "./cli-t4ayrvm2.js";
18
18
  import {
19
19
  UsageError,
20
20
  parseFormat,
@@ -22,8 +22,8 @@ import {
22
22
  rejectExtraPositionals,
23
23
  rejectUnknownFlags
24
24
  } from "./cli-d8xjns66.js";
25
- import"./cli-nqvrp9wk.js";
26
- import"./cli-hndkg7bn.js";
25
+ import"./cli-xrj31ksc.js";
26
+ import"./cli-2mjjt93j.js";
27
27
  import {
28
28
  BuildError
29
29
  } from "./cli-46ycxe6r.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  PACKAGE_VERSION,
3
3
  debug
4
- } from "./cli-3p7jejyd.js";
4
+ } from "./cli-t4ayrvm2.js";
5
5
  import {
6
6
  isExactNpmVersion,
7
7
  isValidNpmPackageName,
@@ -9,7 +9,7 @@ import { fileURLToPath } from "node:url";
9
9
  var favicon_default = "./favicon-272ga6y0.ico";
10
10
 
11
11
  // src/assets/manifest.schema.json
12
- var manifest_schema_default = "./manifest.schema-nvawq0xv.json";
12
+ var manifest_schema_default = "./manifest.schema-399bx3vc.json";
13
13
 
14
14
  // src/assets/preview/scripts/preview-interface.js
15
15
  var preview_interface_default = "./preview-interface-nnmrxyqm.js";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./cli-eyyggect.js";
4
4
  import {
5
5
  getAssetPath
6
- } from "./cli-hndkg7bn.js";
6
+ } from "./cli-2mjjt93j.js";
7
7
 
8
8
  // src/engine/compiler/build.ts
9
9
  import { readFile } from "node:fs/promises";
@@ -8,7 +8,7 @@ import {
8
8
  stampCreator,
9
9
  stripAnnotations,
10
10
  transparentPages
11
- } from "./cli-d0x3aq49.js";
11
+ } from "./cli-rbhq8khk.js";
12
12
  import {
13
13
  blackTextToGray
14
14
  } from "./cli-ht1bcqdd.js";
@@ -17,7 +17,7 @@ import {
17
17
  extract,
18
18
  lastPageMode,
19
19
  resolvePage
20
- } from "./cli-9pk65fqf.js";
20
+ } from "./cli-hfarsrcs.js";
21
21
  import {
22
22
  countLinkAnnotations,
23
23
  getImageResolutions,
@@ -70,7 +70,7 @@ import {
70
70
  uniqueExtensionId,
71
71
  withFetchTimeout,
72
72
  writeManifestDoc
73
- } from "./cli-sge5cp21.js";
73
+ } from "./cli-r6eyzfmh.js";
74
74
  import {
75
75
  EXTENSION_MANIFEST_FILENAME,
76
76
  GUTTERPRESS_CSS,
@@ -91,7 +91,7 @@ import {
91
91
  readExtensionMeta,
92
92
  resolveDeclaredStyles,
93
93
  slugify
94
- } from "./cli-0s8sy5n9.js";
94
+ } from "./cli-1rnvq4ks.js";
95
95
  import {
96
96
  PACKAGE_META,
97
97
  PACKAGE_VERSION,
@@ -101,7 +101,7 @@ import {
101
101
  log,
102
102
  setLogLevel,
103
103
  warn
104
- } from "./cli-3p7jejyd.js";
104
+ } from "./cli-t4ayrvm2.js";
105
105
  import {
106
106
  DEBOUNCE,
107
107
  UsageError,
@@ -109,7 +109,7 @@ import {
109
109
  } from "./cli-d8xjns66.js";
110
110
  import {
111
111
  getAssetPath
112
- } from "./cli-hndkg7bn.js";
112
+ } from "./cli-2mjjt93j.js";
113
113
  import {
114
114
  BuildError
115
115
  } from "./cli-46ycxe6r.js";
@@ -635,14 +635,19 @@ async function getPerPageInkCoverage(pdfPath) {
635
635
  if (!ghostscript) {
636
636
  throw new Error("Ghostscript executable not found. Install Ghostscript or set GHOSTSCRIPT_PATH.");
637
637
  }
638
- const { stdout } = await execCapture(ghostscript, [
638
+ const { stdout, stderr } = await execCapture(ghostscript, [
639
639
  "-q",
640
640
  "-dBATCH",
641
641
  "-dNOPAUSE",
642
642
  "-sDEVICE=inkcov",
643
+ "-sOutputFile=-",
643
644
  pdfPath
644
645
  ]);
645
646
  const pages = parseInkCov(stdout);
647
+ if (pages.length === 0) {
648
+ const reason = stderr.trim().split(/\r?\n/)[0];
649
+ throw new Error(`Ghostscript inkcov produced no per-page data${reason ? `: ${reason}` : ""}`);
650
+ }
646
651
  return {
647
652
  ok: true,
648
653
  pages: pages.map((p, i) => ({
@@ -5207,7 +5212,7 @@ class PdfOutput {
5207
5212
  const rawPdf = pdfxMode ? path7.join(stage, "raw.pdf") : path7.resolve(pdfFile);
5208
5213
  await fsp2.mkdir(path7.dirname(path7.resolve(pdfFile)), { recursive: true });
5209
5214
  log.info("Rendering HTML to PDF via the Gutterpress engine (native Chromium pagination)");
5210
- const { buildNativePdf } = await import("./engine-5p8tn9b4.js");
5215
+ const { buildNativePdf } = await import("./engine-z4hjvrr3.js");
5211
5216
  const engineDiagnostics = await buildNativePdf(htmlFile, rawPdf, {
5212
5217
  title: config.title,
5213
5218
  author: config.authors.length > 0 ? config.authors.join(", ") : undefined,
@@ -9018,7 +9023,7 @@ async function resolvePublishProvider(id, book) {
9018
9023
  const ext = await bookExtensions(book);
9019
9024
  const npmEntry = ext.extensions.some((c) => !c.path && c.name === id);
9020
9025
  if (npmEntry) {
9021
- const { restoreForCommand: restoreForCommand2 } = await import("./extension-restore-4rqvzzw4.js");
9026
+ const { restoreForCommand: restoreForCommand2 } = await import("./extension-restore-3af0sg3p.js");
9022
9027
  await restoreForCommand2(book.projectDir, { manifestPath: book.manifestPath, failFast: true });
9023
9028
  }
9024
9029
  const publishers = await discover(ext);
@@ -9056,7 +9061,7 @@ function infoFor(p) {
9056
9061
  }
9057
9062
  function pluginProvider(p) {
9058
9063
  let loading;
9059
- const load = () => loading ??= import("./plugins-cx4qwn7g.js").then((m) => m.loadPublishFunction(p));
9064
+ const load = () => loading ??= import("./plugins-vb1vntbt.js").then((m) => m.loadPublishFunction(p));
9060
9065
  return {
9061
9066
  info: infoFor(p),
9062
9067
  async authenticate() {
@@ -7,16 +7,16 @@ import {
7
7
  prettify,
8
8
  readExtensionMeta,
9
9
  slugify
10
- } from "./cli-0s8sy5n9.js";
10
+ } from "./cli-1rnvq4ks.js";
11
11
  import {
12
12
  log
13
- } from "./cli-3p7jejyd.js";
13
+ } from "./cli-t4ayrvm2.js";
14
14
  import {
15
15
  UsageError
16
16
  } from "./cli-d8xjns66.js";
17
17
  import {
18
18
  getAssetsDir
19
- } from "./cli-hndkg7bn.js";
19
+ } from "./cli-2mjjt93j.js";
20
20
  import {
21
21
  BuildError,
22
22
  EXIT_CODES
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  PACKAGE_VERSION,
13
13
  log
14
- } from "./cli-3p7jejyd.js";
14
+ } from "./cli-t4ayrvm2.js";
15
15
  import {
16
16
  __require
17
17
  } from "./cli-37x76zdn.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  package_default
3
- } from "./cli-nqvrp9wk.js";
3
+ } from "./cli-xrj31ksc.js";
4
4
 
5
5
  // src/utils/logger.ts
6
6
  var currentLevel = "INFO";
@@ -1,7 +1,7 @@
1
1
  // package.json
2
2
  var package_default = {
3
3
  name: "gutterpress",
4
- version: "0.11.22-alpha.3",
4
+ version: "0.11.22-alpha.4",
5
5
  description: "Markdown-to-PDF converter for professional print layout using a native Chromium print engine and Ghostscript.",
6
6
  author: "itlackey",
7
7
  license: "MPL-2.0",
package/dist/cli.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  } from "./cli-d8xjns66.js";
9
9
  import {
10
10
  package_default
11
- } from "./cli-nqvrp9wk.js";
11
+ } from "./cli-xrj31ksc.js";
12
12
  import {
13
13
  EXIT_CODES
14
14
  } from "./cli-46ycxe6r.js";
@@ -20,14 +20,14 @@ import {
20
20
  import { defineCommand, parseArgs, runMain } from "citty";
21
21
  import { statSync } from "node:fs";
22
22
  var SUBCOMMANDS = {
23
- new: () => import("./new-w3wdd615.js").then((m) => m.default),
24
- preview: () => import("./preview-dn5655f1.js").then((m) => m.default),
25
- build: () => import("./build-shby4bg7.js").then((m) => m.default),
26
- publish: () => import("./publish-e0p9wgpd.js").then((m) => m.default),
27
- validate: () => import("./validate-6wvf4mhr.js").then((m) => m.default),
28
- preflight: () => import("./preflight-aj2tpnxe.js").then((m) => m.default),
29
- doctor: () => import("./doctor-c6k6ycek.js").then((m) => m.default),
30
- ext: () => import("./ext-t8re6kc7.js").then((m) => m.default)
23
+ new: () => import("./new-vgqa0ycb.js").then((m) => m.default),
24
+ preview: () => import("./preview-trcvemnq.js").then((m) => m.default),
25
+ build: () => import("./build-49yq6pc8.js").then((m) => m.default),
26
+ publish: () => import("./publish-4r4qr3qe.js").then((m) => m.default),
27
+ validate: () => import("./validate-6q7gh7a3.js").then((m) => m.default),
28
+ preflight: () => import("./preflight-42v663pj.js").then((m) => m.default),
29
+ doctor: () => import("./doctor-b3j9dn3f.js").then((m) => m.default),
30
+ ext: () => import("./ext-hcvyk1e9.js").then((m) => m.default)
31
31
  };
32
32
  var VERSION = package_default.version;
33
33
  var main = defineCommand({
@@ -52,7 +52,7 @@ async function preflightRequiredInvocations(rawArgs) {
52
52
  const [command, ...commandArgs] = rawArgs;
53
53
  try {
54
54
  if (command === "new") {
55
- const { newArgs } = await import("./new-w3wdd615.js");
55
+ const { newArgs } = await import("./new-vgqa0ycb.js");
56
56
  rejectUnknownFlags(commandArgs, newArgs, "new");
57
57
  const parsed = parseArgs(commandArgs, {
58
58
  ...newArgs,
@@ -64,7 +64,7 @@ async function preflightRequiredInvocations(rawArgs) {
64
64
  return;
65
65
  }
66
66
  if (command === "preflight") {
67
- const { preflightArgs } = await import("./preflight-aj2tpnxe.js");
67
+ const { preflightArgs } = await import("./preflight-42v663pj.js");
68
68
  rejectUnknownFlags(commandArgs, preflightArgs, "preflight");
69
69
  const parsed = parseArgs(commandArgs, {
70
70
  ...preflightArgs,
@@ -84,7 +84,7 @@ async function preflightRequiredInvocations(rawArgs) {
84
84
  }
85
85
  if (subcommand.startsWith("-"))
86
86
  return;
87
- const { EXT_SUBCOMMANDS, extAddArgs, extRemoveArgs, extEnableArgs, extDisableArgs } = await import("./ext-t8re6kc7.js");
87
+ const { EXT_SUBCOMMANDS, extAddArgs, extRemoveArgs, extEnableArgs, extDisableArgs } = await import("./ext-hcvyk1e9.js");
88
88
  if (!EXT_SUBCOMMANDS.includes(subcommand)) {
89
89
  throw new UsageError(`gutterpress ext: unknown command "${subcommand}"`);
90
90
  }
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  getSystemDiagnostics
3
- } from "./cli-d0x3aq49.js";
3
+ } from "./cli-rbhq8khk.js";
4
4
  import"./cli-asap4t1z.js";
5
5
  import {
6
6
  log
7
- } from "./cli-3p7jejyd.js";
7
+ } from "./cli-t4ayrvm2.js";
8
8
  import {
9
9
  UsageError,
10
10
  rejectExtraPositionals,
11
11
  rejectUnknownFlags
12
12
  } from "./cli-d8xjns66.js";
13
- import"./cli-nqvrp9wk.js";
13
+ import"./cli-xrj31ksc.js";
14
14
  import"./cli-46ycxe6r.js";
15
15
  import"./cli-37x76zdn.js";
16
16
 
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  build
3
- } from "./index-2d8j0enc.js";
3
+ } from "./index-9004hfk5.js";
4
4
  import"./index-apc8w9w8.js";
5
5
  import {
6
6
  BuildError
7
- } from "./index-jsz0s3dy.js";
7
+ } from "./index-hkxn3gwz.js";
8
8
  import"./index-bt0qws5c.js";
9
9
  import"./index-37x76zdn.js";
10
10
 
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  build
3
- } from "./cli-9pk65fqf.js";
3
+ } from "./cli-hfarsrcs.js";
4
4
  import"./cli-eyyggect.js";
5
5
  import"./cli-asap4t1z.js";
6
- import"./cli-hndkg7bn.js";
6
+ import"./cli-2mjjt93j.js";
7
7
  import {
8
8
  BuildError
9
9
  } from "./cli-46ycxe6r.js";
@@ -2,10 +2,10 @@ import {
2
2
  importExtensionFromFile,
3
3
  importExtensionFromUrl,
4
4
  searchNpmExtensions
5
- } from "./cli-17g57c61.js";
6
- import"./cli-d0x3aq49.js";
5
+ } from "./cli-jh793snx.js";
6
+ import"./cli-rbhq8khk.js";
7
7
  import"./cli-ht1bcqdd.js";
8
- import"./cli-9pk65fqf.js";
8
+ import"./cli-hfarsrcs.js";
9
9
  import"./cli-2ppw6q9v.js";
10
10
  import"./cli-eyyggect.js";
11
11
  import"./cli-asap4t1z.js";
@@ -22,9 +22,9 @@ import {
22
22
  removeExtension,
23
23
  setExtensionEnabled,
24
24
  updateExtensions
25
- } from "./cli-sge5cp21.js";
26
- import"./cli-0s8sy5n9.js";
27
- import"./cli-3p7jejyd.js";
25
+ } from "./cli-r6eyzfmh.js";
26
+ import"./cli-1rnvq4ks.js";
27
+ import"./cli-t4ayrvm2.js";
28
28
  import {
29
29
  UsageError,
30
30
  exitForUsage,
@@ -32,8 +32,8 @@ import {
32
32
  rejectUnknownFlags,
33
33
  resolveProjectDir
34
34
  } from "./cli-d8xjns66.js";
35
- import"./cli-nqvrp9wk.js";
36
- import"./cli-hndkg7bn.js";
35
+ import"./cli-xrj31ksc.js";
36
+ import"./cli-2mjjt93j.js";
37
37
  import {
38
38
  EXIT_CODES
39
39
  } from "./cli-46ycxe6r.js";
@@ -3,12 +3,12 @@ import {
3
3
  restoreForCommand,
4
4
  restoreOfflineMessage,
5
5
  restorePinnedExtensions
6
- } from "./cli-sge5cp21.js";
7
- import"./cli-0s8sy5n9.js";
8
- import"./cli-3p7jejyd.js";
6
+ } from "./cli-r6eyzfmh.js";
7
+ import"./cli-1rnvq4ks.js";
8
+ import"./cli-t4ayrvm2.js";
9
9
  import"./cli-d8xjns66.js";
10
- import"./cli-nqvrp9wk.js";
11
- import"./cli-hndkg7bn.js";
10
+ import"./cli-xrj31ksc.js";
11
+ import"./cli-2mjjt93j.js";
12
12
  import"./cli-46ycxe6r.js";
13
13
  import"./cli-h3phdstf.js";
14
14
  import"./cli-37x76zdn.js";
@@ -3,9 +3,9 @@ import {
3
3
  restoreForCommand,
4
4
  restoreOfflineMessage,
5
5
  restorePinnedExtensions
6
- } from "./index-xe83m9mc.js";
7
- import"./index-thmwa4f5.js";
8
- import"./index-jsz0s3dy.js";
6
+ } from "./index-bsbat9zm.js";
7
+ import"./index-91v1q6fd.js";
8
+ import"./index-hkxn3gwz.js";
9
9
  import"./index-r7jcsk6h.js";
10
10
  import"./index-37x76zdn.js";
11
11
  export {
@@ -29,7 +29,7 @@ import {
29
29
  uniqueExtensionId,
30
30
  withFetchTimeout,
31
31
  writeManifestDoc
32
- } from "./index-xe83m9mc.js";
32
+ } from "./index-bsbat9zm.js";
33
33
  import {
34
34
  EXTENSION_MANIFEST_FILENAME,
35
35
  GUTTERPRESS_CSS,
@@ -64,7 +64,7 @@ import {
64
64
  setLogLevel,
65
65
  slugify,
66
66
  warn
67
- } from "./index-thmwa4f5.js";
67
+ } from "./index-91v1q6fd.js";
68
68
  import {
69
69
  blackTextToGray
70
70
  } from "./index-ht1bcqdd.js";
@@ -78,7 +78,7 @@ import {
78
78
  import {
79
79
  BuildError,
80
80
  getAssetPath
81
- } from "./index-jsz0s3dy.js";
81
+ } from "./index-hkxn3gwz.js";
82
82
  import {
83
83
  countLinkAnnotations,
84
84
  getImageResolutions,
@@ -2176,14 +2176,19 @@ async function getPerPageInkCoverage(pdfPath) {
2176
2176
  if (!ghostscript) {
2177
2177
  throw new Error("Ghostscript executable not found. Install Ghostscript or set GHOSTSCRIPT_PATH.");
2178
2178
  }
2179
- const { stdout } = await execCapture(ghostscript, [
2179
+ const { stdout, stderr } = await execCapture(ghostscript, [
2180
2180
  "-q",
2181
2181
  "-dBATCH",
2182
2182
  "-dNOPAUSE",
2183
2183
  "-sDEVICE=inkcov",
2184
+ "-sOutputFile=-",
2184
2185
  pdfPath
2185
2186
  ]);
2186
2187
  const pages = parseInkCov(stdout);
2188
+ if (pages.length === 0) {
2189
+ const reason = stderr.trim().split(/\r?\n/)[0];
2190
+ throw new Error(`Ghostscript inkcov produced no per-page data${reason ? `: ${reason}` : ""}`);
2191
+ }
2187
2192
  return {
2188
2193
  ok: true,
2189
2194
  pages: pages.map((p, i) => ({
@@ -5668,7 +5673,7 @@ class PdfOutput {
5668
5673
  const rawPdf = pdfxMode ? path7.join(stage, "raw.pdf") : path7.resolve(pdfFile);
5669
5674
  await fsp2.mkdir(path7.dirname(path7.resolve(pdfFile)), { recursive: true });
5670
5675
  log.info("Rendering HTML to PDF via the Gutterpress engine (native Chromium pagination)");
5671
- const { buildNativePdf } = await import("./engine-9710cd7x.js");
5676
+ const { buildNativePdf } = await import("./engine-9yn1f2mc.js");
5672
5677
  const engineDiagnostics = await buildNativePdf(htmlFile, rawPdf, {
5673
5678
  title: config.title,
5674
5679
  author: config.authors.length > 0 ? config.authors.join(", ") : undefined,
@@ -12624,7 +12629,7 @@ async function resolvePublishProvider(id, book) {
12624
12629
  const ext = await bookExtensions(book);
12625
12630
  const npmEntry = ext.extensions.some((c) => !c.path && c.name === id);
12626
12631
  if (npmEntry) {
12627
- const { restoreForCommand: restoreForCommand2 } = await import("./extension-restore-3gsj0qxp.js");
12632
+ const { restoreForCommand: restoreForCommand2 } = await import("./extension-restore-x18zfya9.js");
12628
12633
  await restoreForCommand2(book.projectDir, { manifestPath: book.manifestPath, failFast: true });
12629
12634
  }
12630
12635
  const publishers = await discover(ext);
@@ -12662,7 +12667,7 @@ function infoFor(p) {
12662
12667
  }
12663
12668
  function pluginProvider(p) {
12664
12669
  let loading;
12665
- const load = () => loading ??= import("./plugins-8x9rsf21.js").then((m) => m.loadPublishFunction(p));
12670
+ const load = () => loading ??= import("./plugins-axnpg8qz.js").then((m) => m.loadPublishFunction(p));
12666
12671
  return {
12667
12672
  info: infoFor(p),
12668
12673
  async authenticate() {
@@ -21,7 +21,7 @@ import {
21
21
  } from "./index-apc8w9w8.js";
22
22
  import {
23
23
  getAssetPath
24
- } from "./index-jsz0s3dy.js";
24
+ } from "./index-hkxn3gwz.js";
25
25
  import {
26
26
  launchChromium
27
27
  } from "./index-bt0qws5c.js";
@@ -37,7 +37,7 @@ import { satisfies, validRange } from "semver";
37
37
  // package.json
38
38
  var package_default = {
39
39
  name: "gutterpress",
40
- version: "0.11.22-alpha.3",
40
+ version: "0.11.22-alpha.4",
41
41
  description: "Markdown-to-PDF converter for professional print layout using a native Chromium print engine and Ghostscript.",
42
42
  author: "itlackey",
43
43
  license: "MPL-2.0",
@@ -9,12 +9,12 @@ import {
9
9
  readExtensionMeta,
10
10
  resolveExtension,
11
11
  slugify
12
- } from "./index-thmwa4f5.js";
12
+ } from "./index-91v1q6fd.js";
13
13
  import {
14
14
  BuildError,
15
15
  EXIT_CODES,
16
16
  getAssetsDir
17
- } from "./index-jsz0s3dy.js";
17
+ } from "./index-hkxn3gwz.js";
18
18
  import {
19
19
  PLUGINS_DIR,
20
20
  VENDORED_NPM_DIR,
@@ -26,7 +26,7 @@ import { fileURLToPath } from "node:url";
26
26
  var favicon_default = "./favicon-272ga6y0.ico";
27
27
 
28
28
  // src/assets/manifest.schema.json
29
- var manifest_schema_default = "./manifest.schema-nvawq0xv.json";
29
+ var manifest_schema_default = "./manifest.schema-399bx3vc.json";
30
30
 
31
31
  // src/assets/preview/scripts/preview-interface.js
32
32
  var preview_interface_default = "./preview-interface-nnmrxyqm.js";
package/dist/index.js CHANGED
@@ -116,7 +116,7 @@ import {
116
116
  substituteVariables,
117
117
  syncProject,
118
118
  testRemoteAccess
119
- } from "./index-p1a596m0.js";
119
+ } from "./index-7srdaczc.js";
120
120
  import {
121
121
  BUILT_IN_STYLE_SET_IDS,
122
122
  BUNDLED_EXTENSIONS,
@@ -154,7 +154,7 @@ import {
154
154
  setExtensionEnabled,
155
155
  updateExtensions,
156
156
  validateProjectExtensions
157
- } from "./index-xe83m9mc.js";
157
+ } from "./index-bsbat9zm.js";
158
158
  import {
159
159
  EXTENSION_MANIFEST_FILENAME,
160
160
  assertExtensionContained,
@@ -165,15 +165,15 @@ import {
165
165
  pathEscapesFolder,
166
166
  readExtensionMeta,
167
167
  resolveExtension
168
- } from "./index-thmwa4f5.js";
168
+ } from "./index-91v1q6fd.js";
169
169
  import"./index-ht1bcqdd.js";
170
170
  import {
171
171
  BUILD_DIAGNOSTIC_CODES
172
- } from "./index-2d8j0enc.js";
172
+ } from "./index-9004hfk5.js";
173
173
  import"./index-apc8w9w8.js";
174
174
  import {
175
175
  BuildError
176
- } from "./index-jsz0s3dy.js";
176
+ } from "./index-hkxn3gwz.js";
177
177
  import"./index-2ppw6q9v.js";
178
178
  import {
179
179
  DEFAULT_PRINT_OPTS,
@@ -240,7 +240,7 @@
240
240
  },
241
241
  "gutter": {
242
242
  "type": "number",
243
- "description": "The binding allowance, in points: how far content stays from the spine, measured from the trim at the binding edge (the left edge of a right-hand page, the right edge of a left-hand one). It stands in for `safe` there, for text and for art alike: the preview's overlay draws and judges that edge against it, the `pdf.print.safe-margins` check fails text or an image closer to the spine than it, and an image pinned to the binding edge (`.gp-pin`) sits on it. The other edges keep `safe` and `artSafe`. Use it when your book keeps its text further from the spine than the printer's minimum: the Field Guide keeps 0.75in (54) where DriveThruRPG asks for 0.5in. Absent = the same as `safe`. Preset default: dtrpg 36 (0.5in, DriveThruRPG's rule for text and non-bleeding art at the binding — the same as its `safe`, declared so a book inherits it visibly); book and custom none.",
243
+ "description": "The binding allowance, in points: how far content stays from the spine, measured from the trim at the binding edge (the left edge of a right-hand page, the right edge of a left-hand one). It stands in for `safe` there, for text and for art alike: the preview's overlay draws and judges that edge against it, the `pdf.print.safe-margins` check fails text or an image closer to the spine than it, and an image pinned to the binding edge (`.gp-pin`) sits on it. The other edges keep `safe` and `artSafe`. Use it when your book keeps its text further from the spine than the printer's minimum, for example 54 (0.75in) where DriveThruRPG asks for 0.5in. Absent = the same as `safe`. Preset default: dtrpg 36 (0.5in, DriveThruRPG's rule for text and non-bleeding art at the binding — the same as its `safe`, declared so a book inherits it visibly); book and custom none.",
244
244
  "minimum": 0,
245
245
  "examples": [54]
246
246
  }
@@ -3,12 +3,12 @@ import {
3
3
  EXTENSION_KINDS,
4
4
  scaffoldExtension,
5
5
  scaffoldProject
6
- } from "./cli-17g57c61.js";
6
+ } from "./cli-jh793snx.js";
7
7
  import {
8
8
  resolveGhostscript
9
- } from "./cli-d0x3aq49.js";
9
+ } from "./cli-rbhq8khk.js";
10
10
  import"./cli-ht1bcqdd.js";
11
- import"./cli-9pk65fqf.js";
11
+ import"./cli-hfarsrcs.js";
12
12
  import"./cli-2ppw6q9v.js";
13
13
  import"./cli-eyyggect.js";
14
14
  import {
@@ -21,16 +21,16 @@ import {
21
21
  PRESET_IDS,
22
22
  TARGETS,
23
23
  TARGET_IDS
24
- } from "./cli-sge5cp21.js";
25
- import"./cli-0s8sy5n9.js";
26
- import"./cli-3p7jejyd.js";
24
+ } from "./cli-r6eyzfmh.js";
25
+ import"./cli-1rnvq4ks.js";
26
+ import"./cli-t4ayrvm2.js";
27
27
  import {
28
28
  UsageError,
29
29
  rejectExtraPositionals,
30
30
  rejectUnknownFlags
31
31
  } from "./cli-d8xjns66.js";
32
- import"./cli-nqvrp9wk.js";
33
- import"./cli-hndkg7bn.js";
32
+ import"./cli-xrj31ksc.js";
33
+ import"./cli-2mjjt93j.js";
34
34
  import {
35
35
  EXIT_CODES
36
36
  } from "./cli-46ycxe6r.js";
@@ -8,7 +8,7 @@ import {
8
8
  loadPlugins,
9
9
  loadPluginsWithCss,
10
10
  loadPublishFunction
11
- } from "./index-thmwa4f5.js";
11
+ } from "./index-91v1q6fd.js";
12
12
  import"./index-r7jcsk6h.js";
13
13
  import"./index-37x76zdn.js";
14
14
  export {
@@ -8,9 +8,9 @@ import {
8
8
  loadPlugins,
9
9
  loadPluginsWithCss,
10
10
  loadPublishFunction
11
- } from "./cli-0s8sy5n9.js";
12
- import"./cli-3p7jejyd.js";
13
- import"./cli-nqvrp9wk.js";
11
+ } from "./cli-1rnvq4ks.js";
12
+ import"./cli-t4ayrvm2.js";
13
+ import"./cli-xrj31ksc.js";
14
14
  import"./cli-h3phdstf.js";
15
15
  import"./cli-37x76zdn.js";
16
16
  export {
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  executeValidation,
3
3
  reportMissingTools
4
- } from "./cli-17g57c61.js";
5
- import"./cli-d0x3aq49.js";
4
+ } from "./cli-jh793snx.js";
5
+ import"./cli-rbhq8khk.js";
6
6
  import"./cli-ht1bcqdd.js";
7
- import"./cli-9pk65fqf.js";
7
+ import"./cli-hfarsrcs.js";
8
8
  import"./cli-2ppw6q9v.js";
9
9
  import"./cli-eyyggect.js";
10
10
  import"./cli-asap4t1z.js";
@@ -12,18 +12,18 @@ import"./cli-habkc5ng.js";
12
12
  import"./cli-v5mp7a6q.js";
13
13
  import {
14
14
  publishTargetFor
15
- } from "./cli-sge5cp21.js";
16
- import"./cli-0s8sy5n9.js";
15
+ } from "./cli-r6eyzfmh.js";
16
+ import"./cli-1rnvq4ks.js";
17
17
  import {
18
18
  log
19
- } from "./cli-3p7jejyd.js";
19
+ } from "./cli-t4ayrvm2.js";
20
20
  import {
21
21
  UsageError,
22
22
  rejectExtraPositionals,
23
23
  rejectUnknownFlags
24
24
  } from "./cli-d8xjns66.js";
25
- import"./cli-nqvrp9wk.js";
26
- import"./cli-hndkg7bn.js";
25
+ import"./cli-xrj31ksc.js";
26
+ import"./cli-2mjjt93j.js";
27
27
  import {
28
28
  BuildError,
29
29
  EXIT_CODES
@@ -3,23 +3,23 @@ import {
3
3
  runBuild,
4
4
  splitOutPath,
5
5
  startPreviewServer
6
- } from "./cli-17g57c61.js";
7
- import"./cli-d0x3aq49.js";
6
+ } from "./cli-jh793snx.js";
7
+ import"./cli-rbhq8khk.js";
8
8
  import {
9
9
  previewArgs
10
10
  } from "./cli-75qkn0k5.js";
11
11
  import"./cli-ht1bcqdd.js";
12
- import"./cli-9pk65fqf.js";
12
+ import"./cli-hfarsrcs.js";
13
13
  import"./cli-2ppw6q9v.js";
14
14
  import"./cli-eyyggect.js";
15
15
  import"./cli-asap4t1z.js";
16
16
  import"./cli-habkc5ng.js";
17
17
  import"./cli-v5mp7a6q.js";
18
- import"./cli-sge5cp21.js";
19
- import"./cli-0s8sy5n9.js";
18
+ import"./cli-r6eyzfmh.js";
19
+ import"./cli-1rnvq4ks.js";
20
20
  import {
21
21
  log
22
- } from "./cli-3p7jejyd.js";
22
+ } from "./cli-t4ayrvm2.js";
23
23
  import {
24
24
  UsageError,
25
25
  parseFormat,
@@ -28,8 +28,8 @@ import {
28
28
  rejectUnknownFlags,
29
29
  resolvePort
30
30
  } from "./cli-d8xjns66.js";
31
- import"./cli-nqvrp9wk.js";
32
- import"./cli-hndkg7bn.js";
31
+ import"./cli-xrj31ksc.js";
32
+ import"./cli-2mjjt93j.js";
33
33
  import {
34
34
  BuildError
35
35
  } from "./cli-46ycxe6r.js";
@@ -10,12 +10,12 @@ import {
10
10
  resolvePublishFormat,
11
11
  resolvePublishProvider,
12
12
  runPublish
13
- } from "./cli-17g57c61.js";
13
+ } from "./cli-jh793snx.js";
14
14
  import {
15
15
  FileTokenStore
16
- } from "./cli-d0x3aq49.js";
16
+ } from "./cli-rbhq8khk.js";
17
17
  import"./cli-ht1bcqdd.js";
18
- import"./cli-9pk65fqf.js";
18
+ import"./cli-hfarsrcs.js";
19
19
  import"./cli-2ppw6q9v.js";
20
20
  import"./cli-eyyggect.js";
21
21
  import"./cli-asap4t1z.js";
@@ -23,18 +23,18 @@ import"./cli-habkc5ng.js";
23
23
  import"./cli-v5mp7a6q.js";
24
24
  import {
25
25
  loadManifestWithPath
26
- } from "./cli-sge5cp21.js";
27
- import"./cli-0s8sy5n9.js";
26
+ } from "./cli-r6eyzfmh.js";
27
+ import"./cli-1rnvq4ks.js";
28
28
  import {
29
29
  log
30
- } from "./cli-3p7jejyd.js";
30
+ } from "./cli-t4ayrvm2.js";
31
31
  import {
32
32
  UsageError,
33
33
  rejectExtraPositionals,
34
34
  rejectUnknownFlags
35
35
  } from "./cli-d8xjns66.js";
36
- import"./cli-nqvrp9wk.js";
37
- import"./cli-hndkg7bn.js";
36
+ import"./cli-xrj31ksc.js";
37
+ import"./cli-2mjjt93j.js";
38
38
  import {
39
39
  BuildError,
40
40
  EXIT_CODES
@@ -204,7 +204,7 @@ export interface GutterpressManifest {
204
204
  * one — measured from the trim. It stands in for `safe` at the binding
205
205
  * edge, for text and for art alike, so a book that keeps its text further
206
206
  * from the spine than the printer's minimum says so here, not in its CSS
207
- * (the Field Guide keeps 0.75in = 54 where DriveThruRPG asks for 0.5in).
207
+ * (for example 54 for 0.75in where DriveThruRPG asks for 0.5in).
208
208
  * An image pinned to the binding edge sits on it. The other edges keep
209
209
  * `safe` and `artSafe`. Absent = the same as `safe`; `dtrpg` sets 36
210
210
  * (DriveThruRPG's 0.5in at the binding, the same as its `safe`), `book`
@@ -1,26 +1,26 @@
1
1
  import {
2
2
  executeAndReport
3
- } from "./cli-17g57c61.js";
4
- import"./cli-d0x3aq49.js";
3
+ } from "./cli-jh793snx.js";
4
+ import"./cli-rbhq8khk.js";
5
5
  import"./cli-ht1bcqdd.js";
6
- import"./cli-9pk65fqf.js";
6
+ import"./cli-hfarsrcs.js";
7
7
  import"./cli-2ppw6q9v.js";
8
8
  import"./cli-eyyggect.js";
9
9
  import"./cli-asap4t1z.js";
10
10
  import"./cli-habkc5ng.js";
11
11
  import"./cli-v5mp7a6q.js";
12
- import"./cli-sge5cp21.js";
13
- import"./cli-0s8sy5n9.js";
12
+ import"./cli-r6eyzfmh.js";
13
+ import"./cli-1rnvq4ks.js";
14
14
  import {
15
15
  log
16
- } from "./cli-3p7jejyd.js";
16
+ } from "./cli-t4ayrvm2.js";
17
17
  import {
18
18
  UsageError,
19
19
  rejectExtraPositionals,
20
20
  rejectUnknownFlags
21
21
  } from "./cli-d8xjns66.js";
22
- import"./cli-nqvrp9wk.js";
23
- import"./cli-hndkg7bn.js";
22
+ import"./cli-xrj31ksc.js";
23
+ import"./cli-2mjjt93j.js";
24
24
  import {
25
25
  BuildError,
26
26
  EXIT_CODES
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gutterpress",
3
- "version": "0.11.22-alpha.3",
3
+ "version": "0.11.22-alpha.4",
4
4
  "description": "Markdown-to-PDF converter for professional print layout using a native Chromium print engine and Ghostscript.",
5
5
  "author": "itlackey",
6
6
  "license": "MPL-2.0",