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.
- package/README.md +24 -46
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.js +10 -6
- package/dist/{build-dfpvvhys.js → build-npxq1tvm.js} +7 -6
- package/dist/cdp-jg95s674.js +15 -0
- package/dist/cdp-smdx6mr3.js +16 -0
- package/dist/{cli-d8rdk1y7.js → cli-30j93gzt.js} +11 -335
- package/dist/{cli-pfczdbyd.js → cli-5qr3z0qa.js} +10 -404
- package/dist/{cli-c41yr7he.js → cli-7fkhgtfn.js} +3 -1
- package/dist/{cli-k2hwrp7s.js → cli-97bdz5k0.js} +1 -4
- package/dist/cli-kkzka31p.js +261 -0
- package/dist/{cli-p679pvce.js → cli-vbzkkcbv.js} +2 -2
- package/dist/{cli-4xksazfr.js → cli-z8ye91f0.js} +283 -1142
- package/dist/cli.js +12 -14
- package/dist/{doctor-hheax5yc.js → doctor-ykr6gtpv.js} +3 -3
- package/dist/engine/shared/cdp.d.ts +23 -19
- package/dist/engine-3gwctsty.js +24 -0
- package/dist/engine-mwshptgf.js +25 -0
- package/dist/{ext-q5024j6v.js → ext-bna9nr3v.js} +7 -6
- package/dist/{index-1a4rx87v.js → index-322fxk25.js} +344 -1130
- package/dist/{index-kqftehgy.js → index-dzp0hc2c.js} +4 -2
- package/dist/{index-fnhak0nh.js → index-qf7y4d85.js} +10 -404
- package/dist/index-r4wvy5v3.js +267 -0
- package/dist/{index-t43k5rq1.js → index-rzm1phg0.js} +23 -356
- package/dist/index.d.ts +0 -1
- package/dist/index.js +12 -87
- package/dist/lib/build-error.d.ts +4 -5
- package/dist/lib/build-preflight.d.ts +1 -35
- package/dist/lib/build-runner.d.ts +27 -44
- package/dist/lib/chromium.d.ts +5 -1
- package/dist/lib/engine.d.ts +3 -18
- package/dist/lib/extension-manager.d.ts +2 -2
- package/dist/lib/extension-manifest.d.ts +1 -1
- package/dist/lib/markdown/assemble.d.ts +2 -9
- package/dist/lib/markdown/index.d.ts +2 -4
- package/dist/lib/markdown/plugins.d.ts +0 -3
- package/dist/lib/npm-plugin-installer.d.ts +6 -1
- package/dist/lib/plugin-vendor.d.ts +10 -78
- package/dist/lib/source-provider.d.ts +1 -1
- package/dist/lib/validation-exec.d.ts +5 -6
- package/dist/{new-6xm4tdxb.js → new-0hv3nwqj.js} +9 -8
- package/dist/{preflight-ezt8rvg3.js → preflight-pk0k25fm.js} +7 -6
- package/dist/preview/file-watcher.d.ts +4 -43
- package/dist/preview/http-server.d.ts +1 -3
- package/dist/{preview-hehs46dd.js → preview-8b1fn59h.js} +7 -6
- package/dist/{preview-shell-gqnc5xxe.js → preview-shell-tqndvhbx.js} +5 -7
- package/dist/{publish-ha505ejq.js → publish-ba5h76tz.js} +7 -6
- package/dist/render.d.ts +1 -1
- package/dist/render.js +1 -9
- package/dist/{source-provider-ta09wegv.js → source-provider-pzmz0br9.js} +1 -1
- package/dist/{source-provider-7c2ww3bz.js → source-provider-qbthnmqw.js} +1 -1
- package/dist/{validate-je56vdbj.js → validate-4rq2r5b3.js} +7 -6
- package/package.json +1 -4
- package/dist/audit-v9594a72.js +0 -69
- package/dist/engine-qtfrfbpk.js +0 -41
- package/dist/engine-trte2tg2.js +0 -40
- package/dist/lib/browser-pool.d.ts +0 -35
- package/dist/lib/lint-runner.d.ts +0 -29
- 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
|
-
|
|
2
|
-
|
|
3
|
-
} from "
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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 =
|
|
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
|
-
|
|
367
|
-
|
|
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,
|
|
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
|
-
|
|
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 };
|