gutterpress 0.11.10-alpha.2 → 0.11.10-alpha.6

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 (59) hide show
  1. package/README.md +24 -46
  2. package/dist/api/index.d.ts +1 -1
  3. package/dist/api/index.js +10 -6
  4. package/dist/{build-dfpvvhys.js → build-npxq1tvm.js} +7 -6
  5. package/dist/cdp-jg95s674.js +15 -0
  6. package/dist/cdp-smdx6mr3.js +16 -0
  7. package/dist/{cli-d8rdk1y7.js → cli-30j93gzt.js} +11 -335
  8. package/dist/{cli-pfczdbyd.js → cli-5qr3z0qa.js} +10 -404
  9. package/dist/{cli-c41yr7he.js → cli-7fkhgtfn.js} +3 -1
  10. package/dist/{cli-k2hwrp7s.js → cli-97bdz5k0.js} +1 -4
  11. package/dist/cli-kkzka31p.js +261 -0
  12. package/dist/{cli-p679pvce.js → cli-vbzkkcbv.js} +2 -2
  13. package/dist/{cli-4xksazfr.js → cli-z8ye91f0.js} +283 -1142
  14. package/dist/cli.js +12 -14
  15. package/dist/{doctor-hheax5yc.js → doctor-ykr6gtpv.js} +3 -3
  16. package/dist/engine/shared/cdp.d.ts +23 -19
  17. package/dist/engine-3gwctsty.js +24 -0
  18. package/dist/engine-mwshptgf.js +25 -0
  19. package/dist/{ext-q5024j6v.js → ext-bna9nr3v.js} +7 -6
  20. package/dist/{index-1a4rx87v.js → index-322fxk25.js} +344 -1130
  21. package/dist/{index-kqftehgy.js → index-dzp0hc2c.js} +4 -2
  22. package/dist/{index-fnhak0nh.js → index-qf7y4d85.js} +10 -404
  23. package/dist/index-r4wvy5v3.js +267 -0
  24. package/dist/{index-t43k5rq1.js → index-rzm1phg0.js} +23 -356
  25. package/dist/index.d.ts +0 -1
  26. package/dist/index.js +12 -87
  27. package/dist/lib/build-error.d.ts +4 -5
  28. package/dist/lib/build-preflight.d.ts +1 -35
  29. package/dist/lib/build-runner.d.ts +27 -44
  30. package/dist/lib/chromium.d.ts +5 -1
  31. package/dist/lib/engine.d.ts +3 -18
  32. package/dist/lib/extension-manager.d.ts +2 -2
  33. package/dist/lib/extension-manifest.d.ts +1 -1
  34. package/dist/lib/markdown/assemble.d.ts +2 -9
  35. package/dist/lib/markdown/index.d.ts +2 -4
  36. package/dist/lib/markdown/plugins.d.ts +0 -3
  37. package/dist/lib/npm-plugin-installer.d.ts +6 -1
  38. package/dist/lib/plugin-vendor.d.ts +10 -78
  39. package/dist/lib/source-provider.d.ts +1 -1
  40. package/dist/lib/validation-exec.d.ts +5 -6
  41. package/dist/{new-6xm4tdxb.js → new-0hv3nwqj.js} +9 -8
  42. package/dist/{preflight-ezt8rvg3.js → preflight-pk0k25fm.js} +7 -6
  43. package/dist/preview/file-watcher.d.ts +4 -43
  44. package/dist/preview/http-server.d.ts +1 -3
  45. package/dist/{preview-hehs46dd.js → preview-8b1fn59h.js} +7 -6
  46. package/dist/{preview-shell-gqnc5xxe.js → preview-shell-tqndvhbx.js} +5 -7
  47. package/dist/{publish-ha505ejq.js → publish-ba5h76tz.js} +7 -6
  48. package/dist/render.d.ts +1 -1
  49. package/dist/render.js +1 -9
  50. package/dist/{source-provider-ta09wegv.js → source-provider-pzmz0br9.js} +1 -1
  51. package/dist/{source-provider-7c2ww3bz.js → source-provider-qbthnmqw.js} +1 -1
  52. package/dist/{validate-je56vdbj.js → validate-4rq2r5b3.js} +7 -6
  53. package/package.json +1 -4
  54. package/dist/audit-v9594a72.js +0 -69
  55. package/dist/engine-qtfrfbpk.js +0 -41
  56. package/dist/engine-trte2tg2.js +0 -40
  57. package/dist/lib/browser-pool.d.ts +0 -35
  58. package/dist/lib/lint-runner.d.ts +0 -29
  59. package/dist/lint-tbywt66a.js +0 -68
@@ -0,0 +1,267 @@
1
+ // src/lib/build-error.ts
2
+ var EXIT_CODES = {
3
+ OK: 0,
4
+ FINDINGS: 1,
5
+ USAGE: 2,
6
+ PIPELINE: 3
7
+ };
8
+
9
+ class BuildError extends Error {
10
+ exitCode;
11
+ constructor(message, exitCode = EXIT_CODES.PIPELINE, options) {
12
+ super(message, options);
13
+ this.name = "BuildError";
14
+ this.exitCode = exitCode;
15
+ }
16
+ }
17
+
18
+ // src/lib/embedded-assets.ts
19
+ import { existsSync } from "node:fs";
20
+ import { mkdtemp, mkdir, writeFile, readFile } from "node:fs/promises";
21
+ import { tmpdir } from "node:os";
22
+ import { dirname, join, resolve } from "node:path";
23
+ import { fileURLToPath } from "node:url";
24
+
25
+ // src/assets/favicon.ico
26
+ var favicon_default = "./favicon-wkbm9cjn.ico";
27
+
28
+ // src/assets/manifest.schema.json
29
+ var manifest_schema_default = "./manifest.schema-61bsspsb.json";
30
+
31
+ // src/assets/preview/scripts/preview-interface.js
32
+ var preview_interface_default = "./preview-interface-9rwz21yw.js";
33
+
34
+ // src/assets/preview/scripts/preview-bridge.js
35
+ var preview_bridge_default = "./preview-bridge-b4jbtb79.js";
36
+
37
+ // src/assets/preview/scripts/preview-shell.js
38
+ var preview_shell_default = "./preview-shell-tqndvhbx.js";
39
+
40
+ // profiles/CGATS21_CRPC1.icc
41
+ var CGATS21_CRPC1_default = "./CGATS21_CRPC1-g0e3k7kr.icc";
42
+
43
+ // src/assets/engine/gutterpress-viewer.js
44
+ var gutterpress_viewer_default = "./gutterpress-viewer-swz6bwfa.js";
45
+
46
+ // src/assets/engine/gutterpress-agent.js
47
+ var gutterpress_agent_default = "./gutterpress-agent-cazqstr1.js";
48
+
49
+ // src/assets/templates/book/manifest.yaml
50
+ var manifest_default = "./manifest-n1gh3qw5.yaml";
51
+
52
+ // src/assets/templates/book/chapter-01.md
53
+ var chapter_01_default = "./chapter-01-rkpyvjna.md";
54
+
55
+ // src/assets/templates/zine/manifest.yaml
56
+ var manifest_default2 = "./manifest-n1gh3qw5.yaml";
57
+
58
+ // src/assets/templates/zine/chapter-01.md
59
+ var chapter_01_default2 = "./chapter-01-7jwqg1ct.md";
60
+
61
+ // src/assets/templates/technical/manifest.yaml
62
+ var manifest_default3 = "./manifest-n1gh3qw5.yaml";
63
+
64
+ // src/assets/templates/technical/chapter-01.md
65
+ var chapter_01_default3 = "./chapter-01-6fn9pvd0.md";
66
+
67
+ // src/assets/extension-templates/plugin/package.json
68
+ var package_default = "./package-9rv69pxm.json";
69
+
70
+ // src/assets/extension-templates/plugin/README.md
71
+ var README_default = "./README-8b33qbjw.md";
72
+
73
+ // src/assets/extension-templates/plugin/plugin.js.tpl
74
+ var plugin_js_default = "./plugin.js-aszz0zgh.tpl";
75
+
76
+ // src/assets/extension-templates/plugin/styles/plugin.css
77
+ var plugin_default = "./plugin-spbcem4j.css";
78
+
79
+ // src/assets/extension-templates/plugin/snippets/term-box.md
80
+ var term_box_default = "./term-box-4y0w7y32.md";
81
+
82
+ // src/assets/extension-templates/plugin/test/fixture.md
83
+ var fixture_default = "./fixture-2qnyqgb5.md";
84
+
85
+ // src/assets/extension-templates/plugin/test/expected.html
86
+ var expected_default = "./expected-ycmacem8.html";
87
+
88
+ // src/assets/extension-templates/plugin/test/plugin.test.js.tpl
89
+ var plugin_test_js_default = "./plugin.test.js-nw7c84s6.tpl";
90
+
91
+ // src/assets/extension-templates/theme/package.json
92
+ var package_default2 = "./package-aenwjew3.json";
93
+
94
+ // src/assets/extension-templates/theme/README.md
95
+ var README_default2 = "./README-3nj919rm.md";
96
+
97
+ // src/assets/extension-templates/theme/components.yaml
98
+ var components_default = "./components-dhgv2sm7.yaml";
99
+
100
+ // src/assets/extension-templates/theme/snippets/callout.md
101
+ var callout_default = "./callout-hv56m16h.md";
102
+
103
+ // src/assets/extension-templates/theme/styles/tokens.css
104
+ var tokens_default = "./tokens-7984461t.css";
105
+
106
+ // src/assets/extension-templates/theme/styles/base.css
107
+ var base_default = "./base-ypqh9n7f.css";
108
+
109
+ // src/assets/extension-templates/theme/styles/components.css
110
+ var components_default2 = "./components-aam0fe2z.css";
111
+
112
+ // src/assets/extension-templates/theme/styles/page-templates.css
113
+ var page_templates_default = "./page-templates-7md4ev7d.css";
114
+
115
+ // src/assets/extension-templates/theme/styles/page-rules.css
116
+ var page_rules_default = "./page-rules-nsj3aw42.css";
117
+
118
+ // src/assets/extension-templates/theme/styles/book.css
119
+ var book_default = "./book-ted3tzrp.css";
120
+
121
+ // src/assets/themes/clean-book/theme.css
122
+ var theme_default = "./theme-j2bagrfx.css";
123
+
124
+ // src/assets/themes/clean-book/package.json
125
+ var package_default3 = "./package-97gm31sg.json";
126
+
127
+ // src/assets/themes/zine/theme.css
128
+ var theme_default2 = "./theme-h5recz6c.css";
129
+
130
+ // src/assets/themes/zine/package.json
131
+ var package_default4 = "./package-gag6ykwn.json";
132
+
133
+ // src/assets/themes/technical-doc/theme.css
134
+ var theme_default3 = "./theme-nn6d53zy.css";
135
+
136
+ // src/assets/themes/technical-doc/package.json
137
+ var package_default5 = "./package-nrhkwf2m.json";
138
+
139
+ // src/lib/embedded-assets.ts
140
+ var __libdir = dirname(fileURLToPath(import.meta.url));
141
+ var abs = (p) => resolve(__libdir, p);
142
+ var filePath = (v) => v;
143
+ var EMBEDDED_ASSETS = {
144
+ "favicon.ico": abs(favicon_default),
145
+ "manifest.schema.json": abs(filePath(manifest_schema_default)),
146
+ "preview/scripts/preview-interface.js": abs(filePath(preview_interface_default)),
147
+ "preview/scripts/preview-bridge.js": abs(filePath(preview_bridge_default)),
148
+ "preview/scripts/preview-shell.js": abs(filePath(preview_shell_default)),
149
+ "profiles/CGATS21_CRPC1.icc": abs(filePath(CGATS21_CRPC1_default)),
150
+ "engine/gutterpress-viewer.js": abs(filePath(gutterpress_viewer_default)),
151
+ "engine/gutterpress-agent.js": abs(filePath(gutterpress_agent_default)),
152
+ "templates/book/manifest.yaml": abs(filePath(manifest_default)),
153
+ "templates/book/chapter-01.md": abs(filePath(chapter_01_default)),
154
+ "templates/zine/manifest.yaml": abs(filePath(manifest_default2)),
155
+ "templates/zine/chapter-01.md": abs(filePath(chapter_01_default2)),
156
+ "templates/technical/manifest.yaml": abs(filePath(manifest_default3)),
157
+ "templates/technical/chapter-01.md": abs(filePath(chapter_01_default3)),
158
+ "extension-templates/plugin/package.json": abs(filePath(package_default)),
159
+ "extension-templates/plugin/README.md": abs(filePath(README_default)),
160
+ "extension-templates/plugin/plugin.js.tpl": abs(filePath(plugin_js_default)),
161
+ "extension-templates/plugin/styles/plugin.css": abs(filePath(plugin_default)),
162
+ "extension-templates/plugin/snippets/term-box.md": abs(filePath(term_box_default)),
163
+ "extension-templates/plugin/test/fixture.md": abs(filePath(fixture_default)),
164
+ "extension-templates/plugin/test/expected.html": abs(filePath(expected_default)),
165
+ "extension-templates/plugin/test/plugin.test.js.tpl": abs(filePath(plugin_test_js_default)),
166
+ "extension-templates/theme/package.json": abs(filePath(package_default2)),
167
+ "extension-templates/theme/README.md": abs(filePath(README_default2)),
168
+ "extension-templates/theme/components.yaml": abs(filePath(components_default)),
169
+ "extension-templates/theme/snippets/callout.md": abs(filePath(callout_default)),
170
+ "extension-templates/theme/styles/tokens.css": abs(filePath(tokens_default)),
171
+ "extension-templates/theme/styles/base.css": abs(filePath(base_default)),
172
+ "extension-templates/theme/styles/components.css": abs(filePath(components_default2)),
173
+ "extension-templates/theme/styles/page-templates.css": abs(filePath(page_templates_default)),
174
+ "extension-templates/theme/styles/page-rules.css": abs(filePath(page_rules_default)),
175
+ "extension-templates/theme/styles/book.css": abs(filePath(book_default)),
176
+ "themes/clean-book/theme.css": abs(filePath(theme_default)),
177
+ "themes/clean-book/package.json": abs(filePath(package_default3)),
178
+ "themes/zine/theme.css": abs(filePath(theme_default2)),
179
+ "themes/zine/package.json": abs(filePath(package_default4)),
180
+ "themes/technical-doc/theme.css": abs(filePath(theme_default3)),
181
+ "themes/technical-doc/package.json": abs(filePath(package_default5))
182
+ };
183
+ var extractPromise = null;
184
+ async function extractAssets() {
185
+ const root = await mkdtemp(join(tmpdir(), "gutterpress-assets-"));
186
+ for (const [relPath, srcPath] of Object.entries(EMBEDDED_ASSETS)) {
187
+ const dest = join(root, relPath);
188
+ await mkdir(dirname(dest), { recursive: true });
189
+ const bytes = await readFile(srcPath);
190
+ await writeFile(dest, bytes);
191
+ }
192
+ return root;
193
+ }
194
+ var SENTINEL_ASSET = "engine/gutterpress-viewer.js";
195
+ async function getAssetsDir() {
196
+ if (extractPromise) {
197
+ try {
198
+ const root = await extractPromise;
199
+ if (existsSync(join(root, SENTINEL_ASSET))) {
200
+ return root;
201
+ }
202
+ } catch {}
203
+ extractPromise = null;
204
+ }
205
+ extractPromise = extractAssets();
206
+ return extractPromise;
207
+ }
208
+ async function getAssetPath(relPath) {
209
+ const root = await getAssetsDir();
210
+ return join(root, relPath);
211
+ }
212
+
213
+ // src/engine/shared/margin-box-support.ts
214
+ var MARGIN_BOX_IGNORED_PROPERTIES = new Set([
215
+ "transform",
216
+ "rotate",
217
+ "translate",
218
+ "scale",
219
+ "perspective",
220
+ "box-shadow",
221
+ "opacity",
222
+ "outline",
223
+ "outline-color",
224
+ "outline-style",
225
+ "outline-width",
226
+ "outline-offset",
227
+ "filter",
228
+ "backdrop-filter",
229
+ "mix-blend-mode",
230
+ "clip-path"
231
+ ]);
232
+ function isIgnoredMarginBoxProperty(property) {
233
+ return MARGIN_BOX_IGNORED_PROPERTIES.has(property.toLowerCase());
234
+ }
235
+ function marginBoxRectPt(name, g) {
236
+ const { top, right, bottom, left } = g.margin;
237
+ const cw = g.width - left - right;
238
+ const ch = g.height - top - bottom;
239
+ const third = (n) => n / 3;
240
+ const T = {
241
+ "top-left-corner": [0, 0, left, top],
242
+ "top-left": [left, 0, third(cw), top],
243
+ "top-center": [left + third(cw), 0, third(cw), top],
244
+ "top-right": [left + 2 * third(cw), 0, third(cw), top],
245
+ "top-right-corner": [g.width - right, 0, right, top],
246
+ "bottom-left-corner": [0, g.height - bottom, left, bottom],
247
+ "bottom-left": [left, g.height - bottom, third(cw), bottom],
248
+ "bottom-center": [left + third(cw), g.height - bottom, third(cw), bottom],
249
+ "bottom-right": [left + 2 * third(cw), g.height - bottom, third(cw), bottom],
250
+ "bottom-right-corner": [g.width - right, g.height - bottom, right, bottom],
251
+ "left-top": [0, top, left, third(ch)],
252
+ "left-middle": [0, top + third(ch), left, third(ch)],
253
+ "left-bottom": [0, top + 2 * third(ch), left, third(ch)],
254
+ "right-top": [g.width - right, top, right, third(ch)],
255
+ "right-middle": [g.width - right, top + third(ch), right, third(ch)],
256
+ "right-bottom": [g.width - right, top + 2 * third(ch), right, third(ch)]
257
+ };
258
+ const [x, y, w, h] = T[name] ?? [0, 0, 0, 0];
259
+ return { x, y, w, h };
260
+ }
261
+ function marginBoxAlign(name) {
262
+ if (name.includes("center") || name.includes("middle"))
263
+ return "center";
264
+ return /right/.test(name) ? "end" : "start";
265
+ }
266
+
267
+ export { EXIT_CODES, BuildError, getAssetsDir, getAssetPath, MARGIN_BOX_IGNORED_PROPERTIES, isIgnoredMarginBoxProperty, marginBoxRectPt, marginBoxAlign };
@@ -1,23 +1,9 @@
1
- import {
2
- __require
3
- } from "./index-37x76zdn.js";
4
-
5
- // src/lib/build-error.ts
6
- var EXIT_CODES = {
7
- OK: 0,
8
- FINDINGS: 1,
9
- USAGE: 2,
10
- PIPELINE: 3
11
- };
12
-
13
- class BuildError extends Error {
14
- exitCode;
15
- constructor(message, exitCode = EXIT_CODES.PIPELINE, options) {
16
- super(message, options);
17
- this.name = "BuildError";
18
- this.exitCode = exitCode;
19
- }
20
- }
1
+ // src/engine/shared/cdp.ts
2
+ import { spawn as spawn2 } from "node:child_process";
3
+ import { mkdtempSync, rmSync } from "node:fs";
4
+ import { tmpdir } from "node:os";
5
+ import { join as join2 } from "node:path";
6
+ import WebSocket from "ws";
21
7
 
22
8
  // src/lib/chromium.ts
23
9
  import { existsSync } from "node:fs";
@@ -261,74 +247,7 @@ async function requireChromiumExecutable() {
261
247
  `));
262
248
  }
263
249
 
264
- // src/lib/browser-pool.ts
265
- var RENDER_TIMEOUT_MS = 60 * 60 * 1000;
266
- var browserPromise = null;
267
- async function launchBrowser(timeoutMs) {
268
- const executablePath = await requireChromiumExecutable();
269
- const puppeteer = (await import("puppeteer-core")).default;
270
- const extraChromiumArgs = (process.env.GUTTERPRESS_CHROMIUM_ARGS ?? "").split(/\s+/).filter(Boolean);
271
- return puppeteer.launch({
272
- headless: true,
273
- executablePath,
274
- args: extraChromiumArgs,
275
- protocolTimeout: timeoutMs
276
- });
277
- }
278
- function prewarmBrowser(timeoutMs) {
279
- if (browserPromise)
280
- return;
281
- const p = launchBrowser(timeoutMs);
282
- browserPromise = p;
283
- p.then((browser) => {
284
- browser.on("disconnected", () => {
285
- if (browserPromise === p)
286
- browserPromise = null;
287
- });
288
- }).catch(() => {
289
- if (browserPromise === p)
290
- browserPromise = null;
291
- });
292
- }
293
- async function getBrowser(timeoutMs) {
294
- if (!browserPromise)
295
- prewarmBrowser(timeoutMs);
296
- return browserPromise;
297
- }
298
- async function closeBrowser() {
299
- const p = browserPromise;
300
- browserPromise = null;
301
- if (!p)
302
- return;
303
- try {
304
- const b = await p;
305
- await b.close();
306
- } catch {}
307
- }
308
-
309
250
  // src/engine/shared/cdp.ts
310
- import { spawn as spawn2 } from "node:child_process";
311
- import { existsSync as existsSync2, mkdtempSync, rmSync } from "node:fs";
312
- import { tmpdir } from "node:os";
313
- import { join as join2 } from "node:path";
314
- import WebSocket from "ws";
315
- var CANDIDATES = [
316
- process.env.GUTTERPRESS_CHROMIUM,
317
- process.env.PUPPETEER_EXECUTABLE_PATH,
318
- "/opt/pw-browsers/chromium",
319
- "/usr/bin/chromium",
320
- "/usr/bin/chromium-browser",
321
- "/usr/bin/google-chrome",
322
- "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
323
- ].filter(Boolean);
324
- function findChromium() {
325
- for (const c of CANDIDATES)
326
- if (existsSync2(c))
327
- return c;
328
- throw new Error(`No Chromium found. Set GUTTERPRESS_CHROMIUM. Looked in:
329
- ${CANDIDATES.join(`
330
- `)}`);
331
- }
332
251
  var REQUIRED_MILESTONE = 148;
333
252
  function assertMilestone(product, origin, hint = "") {
334
253
  const milestone = Number(/Chrome\/(\d+)/.exec(product)?.[1] ?? 0);
@@ -357,20 +276,26 @@ var DEFAULT_PRINT_OPTS = {
357
276
  generateTaggedPDF: true,
358
277
  generateDocumentOutline: true
359
278
  };
279
+ var DEFAULT_ARGS = [
280
+ "--headless=new",
281
+ "--no-first-run",
282
+ "--no-default-browser-check",
283
+ "--disable-gpu",
284
+ "--no-sandbox",
285
+ "--hide-scrollbars",
286
+ "--allow-file-access-from-files",
287
+ "--font-render-hinting=none"
288
+ ];
360
289
  async function launchChromium(opts = {}) {
361
- const bin = findChromium();
290
+ const bin = await requireChromiumExecutable();
362
291
  const userDataDir = mkdtempSync(join2(tmpdir(), "gp-cdp-"));
292
+ const envArgs = (process.env.GUTTERPRESS_CHROMIUM_ARGS ?? "").split(/\s+/).filter(Boolean);
293
+ const ignored = new Set(opts.ignoreDefaultArgs ?? []);
363
294
  const args = [
364
295
  "--remote-debugging-port=0",
365
296
  `--user-data-dir=${userDataDir}`,
366
- "--no-first-run",
367
- "--no-default-browser-check",
368
- "--disable-gpu",
369
- "--no-sandbox",
370
- "--hide-scrollbars",
371
- "--allow-file-access-from-files",
372
- "--font-render-hinting=none",
373
- ...opts.headless === false ? [] : ["--headless=new"],
297
+ ...DEFAULT_ARGS.filter((a) => !ignored.has(a)),
298
+ ...envArgs,
374
299
  ...opts.args ?? [],
375
300
  "about:blank"
376
301
  ];
@@ -391,18 +316,9 @@ async function launchChromium(opts = {}) {
391
316
  conn.close();
392
317
  rmSync(userDataDir, { recursive: true, force: true });
393
318
  };
394
- return checkMilestoneAndWrap(conn, wsUrl, `at ${bin}`, teardown);
395
- }
396
- async function connectChromium(wsUrl) {
397
- const conn = await Connection.open(wsUrl);
398
- return checkMilestoneAndWrap(conn, wsUrl, "via connected browser", async () => {
399
- conn.close();
400
- }, `Set CHROMIUM_PATH (or PUPPETEER_EXECUTABLE_PATH) to a ${REQUIRED_MILESTONE}+ binary.`);
401
- }
402
- async function checkMilestoneAndWrap(conn, wsUrl, origin, teardown, overrideHint = `Set GUTTERPRESS_CHROMIUM to a ${REQUIRED_MILESTONE}+ binary.`) {
403
319
  const version = await conn.send("Browser.getVersion", {});
404
320
  try {
405
- assertMilestone(version.product, origin, overrideHint);
321
+ assertMilestone(version.product, `at ${bin}`, `Install a newer Chrome, Chromium, or Edge, or point CHROMIUM_PATH at a ${REQUIRED_MILESTONE}+ binary.`);
406
322
  } catch (e) {
407
323
  await teardown();
408
324
  throw e;
@@ -582,253 +498,4 @@ class SessionImpl {
582
498
  }
583
499
  }
584
500
 
585
- // src/lib/embedded-assets.ts
586
- import { existsSync as existsSync3 } from "node:fs";
587
- import { mkdtemp, mkdir, writeFile, readFile } from "node:fs/promises";
588
- import { tmpdir as tmpdir2 } from "node:os";
589
- import { dirname, join as join3, resolve } from "node:path";
590
- import { fileURLToPath } from "node:url";
591
-
592
- // src/assets/favicon.ico
593
- var favicon_default = "./favicon-wkbm9cjn.ico";
594
-
595
- // src/assets/manifest.schema.json
596
- var manifest_schema_default = "./manifest.schema-61bsspsb.json";
597
-
598
- // src/assets/preview/scripts/preview-interface.js
599
- var preview_interface_default = "./preview-interface-9rwz21yw.js";
600
-
601
- // src/assets/preview/scripts/preview-bridge.js
602
- var preview_bridge_default = "./preview-bridge-b4jbtb79.js";
603
-
604
- // src/assets/preview/scripts/preview-shell.js
605
- var preview_shell_default = "./preview-shell-gqnc5xxe.js";
606
-
607
- // profiles/CGATS21_CRPC1.icc
608
- var CGATS21_CRPC1_default = "./CGATS21_CRPC1-g0e3k7kr.icc";
609
-
610
- // src/assets/engine/gutterpress-viewer.js
611
- var gutterpress_viewer_default = "./gutterpress-viewer-swz6bwfa.js";
612
-
613
- // src/assets/engine/gutterpress-agent.js
614
- var gutterpress_agent_default = "./gutterpress-agent-cazqstr1.js";
615
-
616
- // src/assets/templates/book/manifest.yaml
617
- var manifest_default = "./manifest-n1gh3qw5.yaml";
618
-
619
- // src/assets/templates/book/chapter-01.md
620
- var chapter_01_default = "./chapter-01-rkpyvjna.md";
621
-
622
- // src/assets/templates/zine/manifest.yaml
623
- var manifest_default2 = "./manifest-n1gh3qw5.yaml";
624
-
625
- // src/assets/templates/zine/chapter-01.md
626
- var chapter_01_default2 = "./chapter-01-7jwqg1ct.md";
627
-
628
- // src/assets/templates/technical/manifest.yaml
629
- var manifest_default3 = "./manifest-n1gh3qw5.yaml";
630
-
631
- // src/assets/templates/technical/chapter-01.md
632
- var chapter_01_default3 = "./chapter-01-6fn9pvd0.md";
633
-
634
- // src/assets/extension-templates/plugin/package.json
635
- var package_default = "./package-9rv69pxm.json";
636
-
637
- // src/assets/extension-templates/plugin/README.md
638
- var README_default = "./README-8b33qbjw.md";
639
-
640
- // src/assets/extension-templates/plugin/plugin.js.tpl
641
- var plugin_js_default = "./plugin.js-aszz0zgh.tpl";
642
-
643
- // src/assets/extension-templates/plugin/styles/plugin.css
644
- var plugin_default = "./plugin-spbcem4j.css";
645
-
646
- // src/assets/extension-templates/plugin/snippets/term-box.md
647
- var term_box_default = "./term-box-4y0w7y32.md";
648
-
649
- // src/assets/extension-templates/plugin/test/fixture.md
650
- var fixture_default = "./fixture-2qnyqgb5.md";
651
-
652
- // src/assets/extension-templates/plugin/test/expected.html
653
- var expected_default = "./expected-ycmacem8.html";
654
-
655
- // src/assets/extension-templates/plugin/test/plugin.test.js.tpl
656
- var plugin_test_js_default = "./plugin.test.js-nw7c84s6.tpl";
657
-
658
- // src/assets/extension-templates/theme/package.json
659
- var package_default2 = "./package-aenwjew3.json";
660
-
661
- // src/assets/extension-templates/theme/README.md
662
- var README_default2 = "./README-3nj919rm.md";
663
-
664
- // src/assets/extension-templates/theme/components.yaml
665
- var components_default = "./components-dhgv2sm7.yaml";
666
-
667
- // src/assets/extension-templates/theme/snippets/callout.md
668
- var callout_default = "./callout-hv56m16h.md";
669
-
670
- // src/assets/extension-templates/theme/styles/tokens.css
671
- var tokens_default = "./tokens-7984461t.css";
672
-
673
- // src/assets/extension-templates/theme/styles/base.css
674
- var base_default = "./base-ypqh9n7f.css";
675
-
676
- // src/assets/extension-templates/theme/styles/components.css
677
- var components_default2 = "./components-aam0fe2z.css";
678
-
679
- // src/assets/extension-templates/theme/styles/page-templates.css
680
- var page_templates_default = "./page-templates-7md4ev7d.css";
681
-
682
- // src/assets/extension-templates/theme/styles/page-rules.css
683
- var page_rules_default = "./page-rules-nsj3aw42.css";
684
-
685
- // src/assets/extension-templates/theme/styles/book.css
686
- var book_default = "./book-ted3tzrp.css";
687
-
688
- // src/assets/themes/clean-book/theme.css
689
- var theme_default = "./theme-j2bagrfx.css";
690
-
691
- // src/assets/themes/clean-book/package.json
692
- var package_default3 = "./package-97gm31sg.json";
693
-
694
- // src/assets/themes/zine/theme.css
695
- var theme_default2 = "./theme-h5recz6c.css";
696
-
697
- // src/assets/themes/zine/package.json
698
- var package_default4 = "./package-gag6ykwn.json";
699
-
700
- // src/assets/themes/technical-doc/theme.css
701
- var theme_default3 = "./theme-nn6d53zy.css";
702
-
703
- // src/assets/themes/technical-doc/package.json
704
- var package_default5 = "./package-nrhkwf2m.json";
705
-
706
- // src/lib/embedded-assets.ts
707
- var __libdir = dirname(fileURLToPath(import.meta.url));
708
- var abs = (p) => resolve(__libdir, p);
709
- var filePath = (v) => v;
710
- var EMBEDDED_ASSETS = {
711
- "favicon.ico": abs(favicon_default),
712
- "manifest.schema.json": abs(filePath(manifest_schema_default)),
713
- "preview/scripts/preview-interface.js": abs(filePath(preview_interface_default)),
714
- "preview/scripts/preview-bridge.js": abs(filePath(preview_bridge_default)),
715
- "preview/scripts/preview-shell.js": abs(filePath(preview_shell_default)),
716
- "profiles/CGATS21_CRPC1.icc": abs(filePath(CGATS21_CRPC1_default)),
717
- "engine/gutterpress-viewer.js": abs(filePath(gutterpress_viewer_default)),
718
- "engine/gutterpress-agent.js": abs(filePath(gutterpress_agent_default)),
719
- "templates/book/manifest.yaml": abs(filePath(manifest_default)),
720
- "templates/book/chapter-01.md": abs(filePath(chapter_01_default)),
721
- "templates/zine/manifest.yaml": abs(filePath(manifest_default2)),
722
- "templates/zine/chapter-01.md": abs(filePath(chapter_01_default2)),
723
- "templates/technical/manifest.yaml": abs(filePath(manifest_default3)),
724
- "templates/technical/chapter-01.md": abs(filePath(chapter_01_default3)),
725
- "extension-templates/plugin/package.json": abs(filePath(package_default)),
726
- "extension-templates/plugin/README.md": abs(filePath(README_default)),
727
- "extension-templates/plugin/plugin.js.tpl": abs(filePath(plugin_js_default)),
728
- "extension-templates/plugin/styles/plugin.css": abs(filePath(plugin_default)),
729
- "extension-templates/plugin/snippets/term-box.md": abs(filePath(term_box_default)),
730
- "extension-templates/plugin/test/fixture.md": abs(filePath(fixture_default)),
731
- "extension-templates/plugin/test/expected.html": abs(filePath(expected_default)),
732
- "extension-templates/plugin/test/plugin.test.js.tpl": abs(filePath(plugin_test_js_default)),
733
- "extension-templates/theme/package.json": abs(filePath(package_default2)),
734
- "extension-templates/theme/README.md": abs(filePath(README_default2)),
735
- "extension-templates/theme/components.yaml": abs(filePath(components_default)),
736
- "extension-templates/theme/snippets/callout.md": abs(filePath(callout_default)),
737
- "extension-templates/theme/styles/tokens.css": abs(filePath(tokens_default)),
738
- "extension-templates/theme/styles/base.css": abs(filePath(base_default)),
739
- "extension-templates/theme/styles/components.css": abs(filePath(components_default2)),
740
- "extension-templates/theme/styles/page-templates.css": abs(filePath(page_templates_default)),
741
- "extension-templates/theme/styles/page-rules.css": abs(filePath(page_rules_default)),
742
- "extension-templates/theme/styles/book.css": abs(filePath(book_default)),
743
- "themes/clean-book/theme.css": abs(filePath(theme_default)),
744
- "themes/clean-book/package.json": abs(filePath(package_default3)),
745
- "themes/zine/theme.css": abs(filePath(theme_default2)),
746
- "themes/zine/package.json": abs(filePath(package_default4)),
747
- "themes/technical-doc/theme.css": abs(filePath(theme_default3)),
748
- "themes/technical-doc/package.json": abs(filePath(package_default5))
749
- };
750
- var extractPromise = null;
751
- async function extractAssets() {
752
- const root = await mkdtemp(join3(tmpdir2(), "gutterpress-assets-"));
753
- for (const [relPath, srcPath] of Object.entries(EMBEDDED_ASSETS)) {
754
- const dest = join3(root, relPath);
755
- await mkdir(dirname(dest), { recursive: true });
756
- const bytes = await readFile(srcPath);
757
- await writeFile(dest, bytes);
758
- }
759
- return root;
760
- }
761
- var SENTINEL_ASSET = "engine/gutterpress-viewer.js";
762
- async function getAssetsDir() {
763
- if (extractPromise) {
764
- try {
765
- const root = await extractPromise;
766
- if (existsSync3(join3(root, SENTINEL_ASSET))) {
767
- return root;
768
- }
769
- } catch {}
770
- extractPromise = null;
771
- }
772
- extractPromise = extractAssets();
773
- return extractPromise;
774
- }
775
- async function getAssetPath(relPath) {
776
- const root = await getAssetsDir();
777
- return join3(root, relPath);
778
- }
779
-
780
- // src/engine/shared/margin-box-support.ts
781
- var MARGIN_BOX_IGNORED_PROPERTIES = new Set([
782
- "transform",
783
- "rotate",
784
- "translate",
785
- "scale",
786
- "perspective",
787
- "box-shadow",
788
- "opacity",
789
- "outline",
790
- "outline-color",
791
- "outline-style",
792
- "outline-width",
793
- "outline-offset",
794
- "filter",
795
- "backdrop-filter",
796
- "mix-blend-mode",
797
- "clip-path"
798
- ]);
799
- function isIgnoredMarginBoxProperty(property) {
800
- return MARGIN_BOX_IGNORED_PROPERTIES.has(property.toLowerCase());
801
- }
802
- function marginBoxRectPt(name, g) {
803
- const { top, right, bottom, left } = g.margin;
804
- const cw = g.width - left - right;
805
- const ch = g.height - top - bottom;
806
- const third = (n) => n / 3;
807
- const T = {
808
- "top-left-corner": [0, 0, left, top],
809
- "top-left": [left, 0, third(cw), top],
810
- "top-center": [left + third(cw), 0, third(cw), top],
811
- "top-right": [left + 2 * third(cw), 0, third(cw), top],
812
- "top-right-corner": [g.width - right, 0, right, top],
813
- "bottom-left-corner": [0, g.height - bottom, left, bottom],
814
- "bottom-left": [left, g.height - bottom, third(cw), bottom],
815
- "bottom-center": [left + third(cw), g.height - bottom, third(cw), bottom],
816
- "bottom-right": [left + 2 * third(cw), g.height - bottom, third(cw), bottom],
817
- "bottom-right-corner": [g.width - right, g.height - bottom, right, bottom],
818
- "left-top": [0, top, left, third(ch)],
819
- "left-middle": [0, top + third(ch), left, third(ch)],
820
- "left-bottom": [0, top + 2 * third(ch), left, third(ch)],
821
- "right-top": [g.width - right, top, right, third(ch)],
822
- "right-middle": [g.width - right, top + third(ch), right, third(ch)],
823
- "right-bottom": [g.width - right, top + 2 * third(ch), right, third(ch)]
824
- };
825
- const [x, y, w, h] = T[name] ?? [0, 0, 0, 0];
826
- return { x, y, w, h };
827
- }
828
- function marginBoxAlign(name) {
829
- if (name.includes("center") || name.includes("middle"))
830
- return "center";
831
- return /right/.test(name) ? "end" : "start";
832
- }
833
-
834
- export { EXIT_CODES, BuildError, run, spawnCapture, execCapture, isToolAvailable, findTool, INSTALL_HINTS, fullInstallHint, resolveChromiumExecutable, requireChromiumExecutable, RENDER_TIMEOUT_MS, prewarmBrowser, getBrowser, closeBrowser, getAssetsDir, getAssetPath, MARGIN_BOX_IGNORED_PROPERTIES, isIgnoredMarginBoxProperty, marginBoxRectPt, marginBoxAlign, REQUIRED_MILESTONE, assertMilestone, readyProbeExpr, DEFAULT_PRINT_OPTS, launchChromium, connectChromium };
501
+ export { run, spawnCapture, execCapture, isToolAvailable, findTool, INSTALL_HINTS, fullInstallHint, resolveChromiumExecutable, requireChromiumExecutable, REQUIRED_MILESTONE, assertMilestone, readyProbeExpr, DEFAULT_PRINT_OPTS, launchChromium };