gutterpress 0.11.23-alpha.1 → 0.11.23-alpha.3
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 +27 -29
- package/dist/{README-8ef336pp.md → README-8db7btxb.md} +13 -19
- package/dist/api/index.d.ts +5 -5
- package/dist/api/index.js +16 -22
- package/dist/{build-09cd1n7s.js → build-m78jcpf7.js} +9 -10
- package/dist/{cli-5hkmp2wy.js → cli-1h17ktsg.js} +125 -187
- package/dist/{cli-nr6j6300.js → cli-5jzyw06s.js} +1 -1
- package/dist/{cli-habkc5ng.js → cli-a35w7wzg.js} +5 -4
- package/dist/{cli-dd115fa8.js → cli-h4x81x97.js} +152 -124
- package/dist/{cli-ccp7sxz3.js → cli-n2tsxqpn.js} +1 -1
- package/dist/{cli-b0vyjvmt.js → cli-s6djx4ma.js} +1 -1
- package/dist/{cli-h17e3mtz.js → cli-t8be9yeb.js} +380 -16
- package/dist/{cli-dtckwda1.js → cli-xsrffqzt.js} +192 -10
- package/dist/{index-r7jcsk6h.js → cli-y28j019d.js} +19 -10
- package/dist/cli.js +12 -12
- package/dist/{doctor-nddspx4n.js → doctor-j71jqce3.js} +3 -3
- package/dist/engine/shared/gcpm-extract.d.ts +8 -0
- package/dist/engine/shared/print-area.d.ts +16 -4
- package/dist/{engine-yjzknt0g.js → engine-1r6q80tq.js} +3 -3
- package/dist/{engine-892swzzc.js → engine-m4y10shc.js} +1 -2
- package/dist/{ext-zjpen4yx.js → ext-fq2hg9va.js} +18 -33
- package/dist/{extension-restore-jvs60x9b.js → extension-restore-9dh7c4tp.js} +4 -4
- package/dist/{extension-restore-w8xt4kbq.js → extension-restore-tmxtzkm0.js} +5 -6
- package/dist/{gutterpress-viewer-701vf4qp.js → gutterpress-viewer-mafsby5k.js} +9 -2
- package/dist/{index-2jpk25en.js → index-0wee4408.js} +380 -16
- package/dist/index-46ycxe6r.js +18 -0
- package/dist/{cli-h3phdstf.js → index-5x42amh8.js} +19 -10
- package/dist/{index-m4hhzg3c.js → index-7pck1q9c.js} +174 -142
- package/dist/{index-93pqkvty.js → index-h6yk5tjx.js} +5 -4
- package/dist/{index-apc8w9w8.js → index-nedd07bk.js} +187 -2
- package/dist/{index-0w2azsk1.js → index-nvmf22rt.js} +2 -4
- package/dist/{index-zrhyb967.js → index-prqvz3xm.js} +510 -587
- package/dist/index.js +17 -23
- package/dist/lib/extension-manager.d.ts +24 -50
- package/dist/lib/extension-manifest.d.ts +1 -13
- package/dist/lib/extension-scaffold.d.ts +3 -3
- package/dist/lib/extension-specifier.d.ts +23 -6
- package/dist/lib/manifest.d.ts +15 -1
- package/dist/lib/markdown/assemble.d.ts +4 -3
- package/dist/lib/markdown/math.d.ts +1 -1
- package/dist/lib/npm-plugin-installer.d.ts +1 -1
- package/dist/lib/page-size.d.ts +34 -27
- package/dist/lib/plugin-vendor.d.ts +11 -3
- package/dist/lib/printsafe.d.ts +1 -0
- package/dist/lib/project-gitignore.d.ts +2 -2
- package/dist/lib/project-scaffold.d.ts +5 -7
- package/dist/lib/project-templates.d.ts +9 -3
- package/dist/lib/snippets.d.ts +2 -1
- package/dist/lib/style-resolver.d.ts +1 -2
- package/dist/manifest-8afhrk30.yaml +19 -0
- package/dist/manifest-d4f9q79e.yaml +23 -0
- package/dist/manifest-gf13sjp8.yaml +27 -0
- package/dist/manifest-my7mdv8j.yaml +23 -0
- package/dist/{manifest.schema-9aeaered.json → manifest.schema-650pe0d1.json} +17 -5
- package/dist/{new-xhq8wczn.js → new-s4zcaepg.js} +22 -21
- package/dist/{package-aenwjew3.json → package-awwkt7sa.json} +0 -1
- package/dist/{page-rules-nsj3aw42.css → page-rules-fj09xct5.css} +12 -40
- package/dist/{plugin.test.js-xgxrd8hf.tpl → plugin.test.js-gxzqqfdh.tpl} +0 -1
- package/dist/{plugins-9en8m9y0.js → plugins-4vaf27n9.js} +4 -4
- package/dist/{plugins-gf0gkjmv.js → plugins-80emnf31.js} +2 -2
- package/dist/{preflight-negnxg7b.js → preflight-c7w1xdn3.js} +9 -10
- package/dist/{preview-cep2s9cg.js → preview-mzytcwyk.js} +9 -10
- package/dist/{publish-xery6qc6.js → publish-fez14ad4.js} +9 -10
- package/dist/render.js +24 -561
- package/dist/schema/manifest.types.d.ts +22 -0
- package/dist/{source-provider-qbfknhyy.js → source-provider-98k5deda.js} +2 -2
- package/dist/{source-provider-2r74a7wp.js → source-provider-knmcam50.js} +2 -2
- package/dist/{tokens-7984461t.css → tokens-ye64p899.css} +5 -12
- package/dist/{validate-3d0sgf4g.js → validate-p2chr6hr.js} +9 -10
- package/package.json +1 -1
- package/dist/cli-fe43evmf.js +0 -212
- package/dist/index-dsvk7q6s.js +0 -229
- package/dist/manifest-8f10dr4f.yaml +0 -17
- package/dist/manifest-n1gh3qw5.yaml +0 -9
- package/dist/package-97gm31sg.json +0 -10
- package/dist/package-gag6ykwn.json +0 -10
- package/dist/package-nrhkwf2m.json +0 -10
- package/dist/package-zttkgydq.json +0 -10
- package/dist/theme-9c58td2d.css +0 -76
- package/dist/theme-h5recz6c.css +0 -61
- package/dist/theme-j2bagrfx.css +0 -59
- package/dist/theme-nn6d53zy.css +0 -71
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
launchChromium
|
|
3
3
|
} from "./cli-eyyggect.js";
|
|
4
|
-
import {
|
|
5
|
-
getAssetPath
|
|
6
|
-
} from "./cli-fe43evmf.js";
|
|
7
4
|
|
|
8
5
|
// src/engine/compiler/build.ts
|
|
9
|
-
import { readFile } from "node:fs/promises";
|
|
10
|
-
import { resolve } from "node:path";
|
|
6
|
+
import { readFile as readFile2 } from "node:fs/promises";
|
|
7
|
+
import { resolve as resolve2 } from "node:path";
|
|
11
8
|
import { pathToFileURL } from "node:url";
|
|
12
9
|
|
|
13
10
|
// src/engine/shared/gcpm-extract.ts
|
|
@@ -533,12 +530,18 @@ function parseMargin(value) {
|
|
|
533
530
|
const d = parts[3] ?? b;
|
|
534
531
|
return { top: a, right: b, bottom: c, left: d };
|
|
535
532
|
}
|
|
533
|
+
var DEFAULT_PAGE_MARGIN_PT = 72;
|
|
536
534
|
function resolvePage(model, ctx = {}) {
|
|
537
535
|
const wanted = new Set(ctx.pseudos ?? []);
|
|
538
536
|
const applicable = model.pageRules.filter((r) => r.name ? r.name === ctx.name : true).filter((r) => r.pseudos.every((p) => wanted.has(p))).sort((a, b) => specificity(a) - specificity(b));
|
|
539
537
|
const decls = {};
|
|
540
538
|
const marginBoxes = {};
|
|
541
|
-
const margin = {
|
|
539
|
+
const margin = {
|
|
540
|
+
top: DEFAULT_PAGE_MARGIN_PT,
|
|
541
|
+
right: DEFAULT_PAGE_MARGIN_PT,
|
|
542
|
+
bottom: DEFAULT_PAGE_MARGIN_PT,
|
|
543
|
+
left: DEFAULT_PAGE_MARGIN_PT
|
|
544
|
+
};
|
|
542
545
|
for (const rule of applicable) {
|
|
543
546
|
for (const [prop, value] of Object.entries(rule.decls)) {
|
|
544
547
|
if (prop === "margin")
|
|
@@ -1126,6 +1129,185 @@ async function inspectPdf(bytes) {
|
|
|
1126
1129
|
return { pageCount: pages.length, boxes, linkTargets, namedDests, outline };
|
|
1127
1130
|
}
|
|
1128
1131
|
|
|
1132
|
+
// src/lib/embedded-assets.ts
|
|
1133
|
+
import { existsSync } from "node:fs";
|
|
1134
|
+
import { mkdtemp, mkdir, writeFile, readFile } from "node:fs/promises";
|
|
1135
|
+
import { tmpdir } from "node:os";
|
|
1136
|
+
import { dirname, join, resolve } from "node:path";
|
|
1137
|
+
import { fileURLToPath } from "node:url";
|
|
1138
|
+
|
|
1139
|
+
// src/assets/favicon.ico
|
|
1140
|
+
var favicon_default = "./favicon-272ga6y0.ico";
|
|
1141
|
+
|
|
1142
|
+
// src/assets/manifest.schema.json
|
|
1143
|
+
var manifest_schema_default = "./manifest.schema-650pe0d1.json";
|
|
1144
|
+
|
|
1145
|
+
// src/assets/preview/scripts/preview-interface.js
|
|
1146
|
+
var preview_interface_default = "./preview-interface-nnmrxyqm.js";
|
|
1147
|
+
|
|
1148
|
+
// src/assets/preview/scripts/preview-bridge.js
|
|
1149
|
+
var preview_bridge_default = "./preview-bridge-8wjcjec3.js";
|
|
1150
|
+
|
|
1151
|
+
// src/assets/preview/scripts/preview-shell.js
|
|
1152
|
+
var preview_shell_default = "./preview-shell-wk9k3gcd.js";
|
|
1153
|
+
|
|
1154
|
+
// profiles/CGATS21_CRPC1.icc
|
|
1155
|
+
var CGATS21_CRPC1_default = "./CGATS21_CRPC1-g0e3k7kr.icc";
|
|
1156
|
+
|
|
1157
|
+
// src/assets/engine/gutterpress-viewer.js
|
|
1158
|
+
var gutterpress_viewer_default = "./gutterpress-viewer-mafsby5k.js";
|
|
1159
|
+
|
|
1160
|
+
// src/assets/engine/gutterpress-agent.js
|
|
1161
|
+
var gutterpress_agent_default = "./gutterpress-agent-d29ry3ak.js";
|
|
1162
|
+
|
|
1163
|
+
// src/assets/templates/book/manifest.yaml
|
|
1164
|
+
var manifest_default = "./manifest-8afhrk30.yaml";
|
|
1165
|
+
|
|
1166
|
+
// src/assets/templates/book/chapter-01.md
|
|
1167
|
+
var chapter_01_default = "./chapter-01-gsbjt584.md";
|
|
1168
|
+
|
|
1169
|
+
// src/assets/templates/zine/manifest.yaml
|
|
1170
|
+
var manifest_default2 = "./manifest-d4f9q79e.yaml";
|
|
1171
|
+
|
|
1172
|
+
// src/assets/templates/zine/chapter-01.md
|
|
1173
|
+
var chapter_01_default2 = "./chapter-01-wgjfz4w6.md";
|
|
1174
|
+
|
|
1175
|
+
// src/assets/templates/technical/manifest.yaml
|
|
1176
|
+
var manifest_default3 = "./manifest-my7mdv8j.yaml";
|
|
1177
|
+
|
|
1178
|
+
// src/assets/templates/technical/chapter-01.md
|
|
1179
|
+
var chapter_01_default3 = "./chapter-01-6fn9pvd0.md";
|
|
1180
|
+
|
|
1181
|
+
// src/assets/templates/paper/manifest.yaml
|
|
1182
|
+
var manifest_default4 = "./manifest-gf13sjp8.yaml";
|
|
1183
|
+
|
|
1184
|
+
// src/assets/templates/paper/chapter-01.md
|
|
1185
|
+
var chapter_01_default4 = "./chapter-01-s71xrf5q.md";
|
|
1186
|
+
|
|
1187
|
+
// src/assets/extension-templates/plugin/package.json
|
|
1188
|
+
var package_default = "./package-9rv69pxm.json";
|
|
1189
|
+
|
|
1190
|
+
// src/assets/extension-templates/plugin/README.md
|
|
1191
|
+
var README_default = "./README-vsnsc1b3.md";
|
|
1192
|
+
|
|
1193
|
+
// src/assets/extension-templates/plugin/plugin.js.tpl
|
|
1194
|
+
var plugin_js_default = "./plugin.js-cswq7wvd.tpl";
|
|
1195
|
+
|
|
1196
|
+
// src/assets/extension-templates/plugin/styles/plugin.css
|
|
1197
|
+
var plugin_default = "./plugin-spbcem4j.css";
|
|
1198
|
+
|
|
1199
|
+
// src/assets/extension-templates/plugin/snippets/term-box.md
|
|
1200
|
+
var term_box_default = "./term-box-4y0w7y32.md";
|
|
1201
|
+
|
|
1202
|
+
// src/assets/extension-templates/plugin/test/fixture.md
|
|
1203
|
+
var fixture_default = "./fixture-2qnyqgb5.md";
|
|
1204
|
+
|
|
1205
|
+
// src/assets/extension-templates/plugin/test/expected.html
|
|
1206
|
+
var expected_default = "./expected-ycmacem8.html";
|
|
1207
|
+
|
|
1208
|
+
// src/assets/extension-templates/plugin/test/plugin.test.js.tpl
|
|
1209
|
+
var plugin_test_js_default = "./plugin.test.js-gxzqqfdh.tpl";
|
|
1210
|
+
|
|
1211
|
+
// src/assets/extension-templates/look/package.json
|
|
1212
|
+
var package_default2 = "./package-awwkt7sa.json";
|
|
1213
|
+
|
|
1214
|
+
// src/assets/extension-templates/look/README.md
|
|
1215
|
+
var README_default2 = "./README-8db7btxb.md";
|
|
1216
|
+
|
|
1217
|
+
// src/assets/extension-templates/look/components.yaml
|
|
1218
|
+
var components_default = "./components-zzqdpt3m.yaml";
|
|
1219
|
+
|
|
1220
|
+
// src/assets/extension-templates/look/snippets/callout.md
|
|
1221
|
+
var callout_default = "./callout-hv56m16h.md";
|
|
1222
|
+
|
|
1223
|
+
// src/assets/extension-templates/look/styles/tokens.css
|
|
1224
|
+
var tokens_default = "./tokens-ye64p899.css";
|
|
1225
|
+
|
|
1226
|
+
// src/assets/extension-templates/look/styles/base.css
|
|
1227
|
+
var base_default = "./base-ypqh9n7f.css";
|
|
1228
|
+
|
|
1229
|
+
// src/assets/extension-templates/look/styles/components.css
|
|
1230
|
+
var components_default2 = "./components-aam0fe2z.css";
|
|
1231
|
+
|
|
1232
|
+
// src/assets/extension-templates/look/styles/page-templates.css
|
|
1233
|
+
var page_templates_default = "./page-templates-tx9ryt19.css";
|
|
1234
|
+
|
|
1235
|
+
// src/assets/extension-templates/look/styles/page-rules.css
|
|
1236
|
+
var page_rules_default = "./page-rules-fj09xct5.css";
|
|
1237
|
+
|
|
1238
|
+
// src/assets/extension-templates/look/styles/book.css
|
|
1239
|
+
var book_default = "./book-ted3tzrp.css";
|
|
1240
|
+
|
|
1241
|
+
// src/lib/embedded-assets.ts
|
|
1242
|
+
var __libdir = dirname(fileURLToPath(import.meta.url));
|
|
1243
|
+
var abs = (p) => resolve(__libdir, p);
|
|
1244
|
+
var filePath = (v) => v;
|
|
1245
|
+
var EMBEDDED_ASSETS = {
|
|
1246
|
+
"favicon.ico": abs(favicon_default),
|
|
1247
|
+
"manifest.schema.json": abs(filePath(manifest_schema_default)),
|
|
1248
|
+
"preview/scripts/preview-interface.js": abs(filePath(preview_interface_default)),
|
|
1249
|
+
"preview/scripts/preview-bridge.js": abs(filePath(preview_bridge_default)),
|
|
1250
|
+
"preview/scripts/preview-shell.js": abs(filePath(preview_shell_default)),
|
|
1251
|
+
"profiles/CGATS21_CRPC1.icc": abs(filePath(CGATS21_CRPC1_default)),
|
|
1252
|
+
"engine/gutterpress-viewer.js": abs(filePath(gutterpress_viewer_default)),
|
|
1253
|
+
"engine/gutterpress-agent.js": abs(filePath(gutterpress_agent_default)),
|
|
1254
|
+
"templates/book/manifest.yaml": abs(filePath(manifest_default)),
|
|
1255
|
+
"templates/book/chapter-01.md": abs(filePath(chapter_01_default)),
|
|
1256
|
+
"templates/zine/manifest.yaml": abs(filePath(manifest_default2)),
|
|
1257
|
+
"templates/zine/chapter-01.md": abs(filePath(chapter_01_default2)),
|
|
1258
|
+
"templates/technical/manifest.yaml": abs(filePath(manifest_default3)),
|
|
1259
|
+
"templates/technical/chapter-01.md": abs(filePath(chapter_01_default3)),
|
|
1260
|
+
"templates/paper/manifest.yaml": abs(filePath(manifest_default4)),
|
|
1261
|
+
"templates/paper/chapter-01.md": abs(filePath(chapter_01_default4)),
|
|
1262
|
+
"extension-templates/plugin/package.json": abs(filePath(package_default)),
|
|
1263
|
+
"extension-templates/plugin/README.md": abs(filePath(README_default)),
|
|
1264
|
+
"extension-templates/plugin/plugin.js.tpl": abs(filePath(plugin_js_default)),
|
|
1265
|
+
"extension-templates/plugin/styles/plugin.css": abs(filePath(plugin_default)),
|
|
1266
|
+
"extension-templates/plugin/snippets/term-box.md": abs(filePath(term_box_default)),
|
|
1267
|
+
"extension-templates/plugin/test/fixture.md": abs(filePath(fixture_default)),
|
|
1268
|
+
"extension-templates/plugin/test/expected.html": abs(filePath(expected_default)),
|
|
1269
|
+
"extension-templates/plugin/test/plugin.test.js.tpl": abs(filePath(plugin_test_js_default)),
|
|
1270
|
+
"extension-templates/look/package.json": abs(filePath(package_default2)),
|
|
1271
|
+
"extension-templates/look/README.md": abs(filePath(README_default2)),
|
|
1272
|
+
"extension-templates/look/components.yaml": abs(filePath(components_default)),
|
|
1273
|
+
"extension-templates/look/snippets/callout.md": abs(filePath(callout_default)),
|
|
1274
|
+
"extension-templates/look/styles/tokens.css": abs(filePath(tokens_default)),
|
|
1275
|
+
"extension-templates/look/styles/base.css": abs(filePath(base_default)),
|
|
1276
|
+
"extension-templates/look/styles/components.css": abs(filePath(components_default2)),
|
|
1277
|
+
"extension-templates/look/styles/page-templates.css": abs(filePath(page_templates_default)),
|
|
1278
|
+
"extension-templates/look/styles/page-rules.css": abs(filePath(page_rules_default)),
|
|
1279
|
+
"extension-templates/look/styles/book.css": abs(filePath(book_default))
|
|
1280
|
+
};
|
|
1281
|
+
var extractPromise = null;
|
|
1282
|
+
async function extractAssets() {
|
|
1283
|
+
const root = await mkdtemp(join(tmpdir(), "gutterpress-assets-"));
|
|
1284
|
+
for (const [relPath, srcPath] of Object.entries(EMBEDDED_ASSETS)) {
|
|
1285
|
+
const dest = join(root, relPath);
|
|
1286
|
+
await mkdir(dirname(dest), { recursive: true });
|
|
1287
|
+
const bytes = await readFile(srcPath);
|
|
1288
|
+
await writeFile(dest, bytes);
|
|
1289
|
+
}
|
|
1290
|
+
return root;
|
|
1291
|
+
}
|
|
1292
|
+
var SENTINEL_ASSET = "engine/gutterpress-viewer.js";
|
|
1293
|
+
async function getAssetsDir() {
|
|
1294
|
+
if (extractPromise) {
|
|
1295
|
+
try {
|
|
1296
|
+
const root = await extractPromise;
|
|
1297
|
+
if (existsSync(join(root, SENTINEL_ASSET))) {
|
|
1298
|
+
return root;
|
|
1299
|
+
}
|
|
1300
|
+
} catch {}
|
|
1301
|
+
extractPromise = null;
|
|
1302
|
+
}
|
|
1303
|
+
extractPromise = extractAssets();
|
|
1304
|
+
return extractPromise;
|
|
1305
|
+
}
|
|
1306
|
+
async function getAssetPath(relPath) {
|
|
1307
|
+
const root = await getAssetsDir();
|
|
1308
|
+
return join(root, relPath);
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1129
1311
|
// src/engine/compiler/tier2.ts
|
|
1130
1312
|
var DEFAULT_SLUG_PT = 18;
|
|
1131
1313
|
function classify(model) {
|
|
@@ -1451,8 +1633,8 @@ function pagePseudoContexts(model) {
|
|
|
1451
1633
|
}
|
|
1452
1634
|
async function build(opts) {
|
|
1453
1635
|
const log = opts.onProgress ?? (() => {});
|
|
1454
|
-
const AGENT = await
|
|
1455
|
-
const VIEWER = await
|
|
1636
|
+
const AGENT = await readFile2(await getAssetPath("engine/gutterpress-agent.js"), "utf8");
|
|
1637
|
+
const VIEWER = await readFile2(await getAssetPath("engine/gutterpress-viewer.js"), "utf8");
|
|
1456
1638
|
const browser = opts.browser ?? await launchChromium();
|
|
1457
1639
|
const ownsBrowser = !opts.browser;
|
|
1458
1640
|
const page = await browser.newPage();
|
|
@@ -1461,7 +1643,7 @@ async function build(opts) {
|
|
|
1461
1643
|
const diagnose = (code, message, severity = "warning") => diagnostics.push({ code, severity, message });
|
|
1462
1644
|
let prints = 0;
|
|
1463
1645
|
try {
|
|
1464
|
-
const url = /^(https?|file):\/\//.test(opts.input) ? opts.input : pathToFileURL(
|
|
1646
|
+
const url = /^(https?|file):\/\//.test(opts.input) ? opts.input : pathToFileURL(resolve2(opts.input)).href;
|
|
1465
1647
|
await page.navigate(url);
|
|
1466
1648
|
await page.evaluate(AGENT);
|
|
1467
1649
|
await page.waitForReady();
|
|
@@ -2503,4 +2685,4 @@ ${lines.length ? lines.join(`
|
|
|
2503
2685
|
`);
|
|
2504
2686
|
}
|
|
2505
2687
|
|
|
2506
|
-
export { lastPageMode,
|
|
2688
|
+
export { lastPageMode, DEFAULT_PAGE_MARGIN_PT, getAssetPath, MARGIN_BOX_IGNORED_PROPERTIES, build };
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
import { lstat, readFile, realpath } from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { exports as resolveExports } from "resolve.exports";
|
|
5
|
-
var
|
|
5
|
+
var EXTENSIONS_DIR = "extensions";
|
|
6
|
+
var LEGACY_PLUGINS_DIR = "plugins";
|
|
6
7
|
var VENDORED_NPM_DIR = "npm";
|
|
7
8
|
var NPM_SEGMENT = /^[a-z0-9][a-z0-9._~-]*$/;
|
|
8
9
|
var EXACT_VERSION = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/;
|
|
@@ -51,7 +52,10 @@ function encodePathPart(value) {
|
|
|
51
52
|
return encodeURIComponent(value).replace(/[!'()*]/g, (char) => `%${char.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
52
53
|
}
|
|
53
54
|
function vendoredNpmPluginRoot(projectDir, name, version) {
|
|
54
|
-
return path.join(projectDir,
|
|
55
|
+
return path.join(projectDir, EXTENSIONS_DIR, VENDORED_NPM_DIR, encodePathPart(name), encodePathPart(version));
|
|
56
|
+
}
|
|
57
|
+
function vendoredNpmPluginRoots(projectDir, name, version) {
|
|
58
|
+
return [EXTENSIONS_DIR, LEGACY_PLUGINS_DIR].map((parent) => path.join(projectDir, parent, VENDORED_NPM_DIR, encodePathPart(name), encodePathPart(version)));
|
|
55
59
|
}
|
|
56
60
|
function vendoredNpmPluginPackageDir(installRoot, name) {
|
|
57
61
|
return path.join(installRoot, "node_modules", ...name.split("/"));
|
|
@@ -175,15 +179,20 @@ async function resolvePackageEntry(packageDir, packageJson) {
|
|
|
175
179
|
}
|
|
176
180
|
async function resolveVendoredPluginInstallRoot(projectDir, expectedName, expectedVersion) {
|
|
177
181
|
const requestedProjectRoot = path.resolve(projectDir);
|
|
178
|
-
|
|
182
|
+
let requestedInstallRoot = "";
|
|
179
183
|
let installInfo;
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
184
|
+
for (const candidate of vendoredNpmPluginRoots(requestedProjectRoot, expectedName, expectedVersion)) {
|
|
185
|
+
requestedInstallRoot = candidate;
|
|
186
|
+
try {
|
|
187
|
+
installInfo = await lstat(requestedInstallRoot);
|
|
188
|
+
break;
|
|
189
|
+
} catch (error) {
|
|
190
|
+
if (error.code !== "ENOENT")
|
|
191
|
+
throw error;
|
|
192
|
+
}
|
|
186
193
|
}
|
|
194
|
+
if (!installInfo)
|
|
195
|
+
return null;
|
|
187
196
|
if (!installInfo.isDirectory() || installInfo.isSymbolicLink()) {
|
|
188
197
|
throw new Error("Vendor install root is not a normal directory.");
|
|
189
198
|
}
|
|
@@ -197,4 +206,4 @@ async function resolveVendoredPluginInstallRoot(projectDir, expectedName, expect
|
|
|
197
206
|
return installRoot;
|
|
198
207
|
}
|
|
199
208
|
|
|
200
|
-
export {
|
|
209
|
+
export { EXTENSIONS_DIR, LEGACY_PLUGINS_DIR, VENDORED_NPM_DIR, isValidNpmPackageName, parseNpmPluginSpec, isExactNpmVersion, vendoredNpmPluginRoot, vendoredNpmPluginRoots, vendoredNpmPluginPackageDir, assertWindowsSafeRelativePath, windowsPathKey, packageResolutionTargets, safePackageTarget, resolvePackageEntry, resolveVendoredPluginInstallRoot };
|
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-
|
|
11
|
+
} from "./cli-5jzyw06s.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-
|
|
24
|
-
preview: () => import("./preview-
|
|
25
|
-
build: () => import("./build-
|
|
26
|
-
publish: () => import("./publish-
|
|
27
|
-
validate: () => import("./validate-
|
|
28
|
-
preflight: () => import("./preflight-
|
|
29
|
-
doctor: () => import("./doctor-
|
|
30
|
-
ext: () => import("./ext-
|
|
23
|
+
new: () => import("./new-s4zcaepg.js").then((m) => m.default),
|
|
24
|
+
preview: () => import("./preview-mzytcwyk.js").then((m) => m.default),
|
|
25
|
+
build: () => import("./build-m78jcpf7.js").then((m) => m.default),
|
|
26
|
+
publish: () => import("./publish-fez14ad4.js").then((m) => m.default),
|
|
27
|
+
validate: () => import("./validate-p2chr6hr.js").then((m) => m.default),
|
|
28
|
+
preflight: () => import("./preflight-c7w1xdn3.js").then((m) => m.default),
|
|
29
|
+
doctor: () => import("./doctor-j71jqce3.js").then((m) => m.default),
|
|
30
|
+
ext: () => import("./ext-fq2hg9va.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-
|
|
55
|
+
const { newArgs } = await import("./new-s4zcaepg.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-
|
|
67
|
+
const { preflightArgs } = await import("./preflight-c7w1xdn3.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-
|
|
87
|
+
const { EXT_SUBCOMMANDS, extAddArgs, extRemoveArgs, extEnableArgs, extDisableArgs } = await import("./ext-fq2hg9va.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-
|
|
3
|
+
} from "./cli-n2tsxqpn.js";
|
|
4
4
|
import"./cli-asap4t1z.js";
|
|
5
5
|
import {
|
|
6
6
|
log
|
|
7
|
-
} from "./cli-
|
|
7
|
+
} from "./cli-s6djx4ma.js";
|
|
8
8
|
import {
|
|
9
9
|
UsageError,
|
|
10
10
|
rejectExtraPositionals,
|
|
11
11
|
rejectUnknownFlags
|
|
12
12
|
} from "./cli-d8xjns66.js";
|
|
13
|
-
import"./cli-
|
|
13
|
+
import"./cli-5jzyw06s.js";
|
|
14
14
|
import"./cli-46ycxe6r.js";
|
|
15
15
|
import"./cli-37x76zdn.js";
|
|
16
16
|
|
|
@@ -109,6 +109,14 @@ export declare function parseMargin(value: string): {
|
|
|
109
109
|
* Later rules win; specificity follows the spec's simplified order
|
|
110
110
|
* (unnamed < named, no-pseudo < pseudo).
|
|
111
111
|
*/
|
|
112
|
+
/**
|
|
113
|
+
* The margin a page has when no `@page` rule sets one: what `resolvePage`
|
|
114
|
+
* assumes, and what the assembly writes ahead of every stylesheet
|
|
115
|
+
* (`defaultPageMarginCss`, lib/markdown/assemble.ts) so Chromium prints with
|
|
116
|
+
* the same number instead of its own default of about 0.4in, which would
|
|
117
|
+
* make the preview and the PDF paginate differently.
|
|
118
|
+
*/
|
|
119
|
+
export declare const DEFAULT_PAGE_MARGIN_PT = 72;
|
|
112
120
|
export declare function resolvePage(model: GcpmModel, ctx?: {
|
|
113
121
|
name?: string;
|
|
114
122
|
pseudos?: string[];
|
|
@@ -55,6 +55,13 @@ export interface PrintAreaSource {
|
|
|
55
55
|
safe?: number;
|
|
56
56
|
artSafe?: number;
|
|
57
57
|
gutter?: number;
|
|
58
|
+
/** The margins the manifest sets (pt), written as the book's `@page` margins; absent = the stylesheets'. */
|
|
59
|
+
margin?: {
|
|
60
|
+
top: number;
|
|
61
|
+
bottom: number;
|
|
62
|
+
inside: number;
|
|
63
|
+
outside: number;
|
|
64
|
+
};
|
|
58
65
|
preset?: string;
|
|
59
66
|
spec?: {
|
|
60
67
|
label: string;
|
|
@@ -63,11 +70,16 @@ export interface PrintAreaSource {
|
|
|
63
70
|
}
|
|
64
71
|
/** A usable point value: finite and positive (a page dimension, an inset). */
|
|
65
72
|
export declare function isPositivePoints(value: unknown): value is number;
|
|
73
|
+
/** A margin value: finite and 0 or more (a full-bleed edge has no margin). */
|
|
74
|
+
export declare function isNonNegativePoints(value: unknown): value is number;
|
|
75
|
+
/** Round to 3dp so 8.27in doesn't print as 8.270000000000001in. */
|
|
76
|
+
export declare const round3: (n: number) => number;
|
|
77
|
+
/** CSS length for a point value: inches when exact to 3dp (612 -> 8.5in), else points. */
|
|
78
|
+
export declare function cssLength(pt: number): string;
|
|
66
79
|
/**
|
|
67
|
-
* The `size` value written for a page — `8.5in 11in`, `595pt 842pt` — by
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* (lib/markdown/assemble.ts), so one size has one spelling.
|
|
80
|
+
* The `size` value written for a page — `8.5in 11in`, `595pt 842pt` — by the
|
|
81
|
+
* assembly's `@page` rule (lib/markdown/assemble.ts), the one place a size is
|
|
82
|
+
* written, so one size has one spelling.
|
|
71
83
|
*/
|
|
72
84
|
export declare function formatPageSize(page: {
|
|
73
85
|
width: number;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
build
|
|
3
|
-
} from "./index-
|
|
4
|
-
import"./index-
|
|
3
|
+
} from "./index-nvmf22rt.js";
|
|
4
|
+
import"./index-nedd07bk.js";
|
|
5
5
|
import {
|
|
6
6
|
BuildError
|
|
7
|
-
} from "./index-
|
|
7
|
+
} from "./index-46ycxe6r.js";
|
|
8
8
|
import"./index-bt0qws5c.js";
|
|
9
9
|
import"./index-37x76zdn.js";
|
|
10
10
|
|
|
@@ -2,29 +2,28 @@ import {
|
|
|
2
2
|
importExtensionFromFile,
|
|
3
3
|
importExtensionFromUrl,
|
|
4
4
|
searchNpmExtensions
|
|
5
|
-
} from "./cli-
|
|
6
|
-
import"./cli-
|
|
5
|
+
} from "./cli-1h17ktsg.js";
|
|
6
|
+
import"./cli-n2tsxqpn.js";
|
|
7
7
|
import"./cli-ht1bcqdd.js";
|
|
8
|
-
import"./cli-
|
|
8
|
+
import"./cli-xsrffqzt.js";
|
|
9
9
|
import"./cli-2ppw6q9v.js";
|
|
10
10
|
import"./cli-eyyggect.js";
|
|
11
11
|
import"./cli-asap4t1z.js";
|
|
12
|
-
import"./cli-
|
|
12
|
+
import"./cli-a35w7wzg.js";
|
|
13
13
|
import"./cli-v5mp7a6q.js";
|
|
14
14
|
import {
|
|
15
|
-
BUILT_IN_STYLE_SET_IDS,
|
|
16
|
-
addBuiltInStyleSet,
|
|
17
15
|
addExtension,
|
|
18
16
|
checkExtensionUpdates,
|
|
19
|
-
isPathSpecifier,
|
|
20
17
|
listProjectExtensions,
|
|
21
|
-
parseExtensionSpecifier,
|
|
22
18
|
removeExtension,
|
|
23
19
|
setExtensionEnabled,
|
|
24
20
|
updateExtensions
|
|
25
|
-
} from "./cli-
|
|
26
|
-
import
|
|
27
|
-
|
|
21
|
+
} from "./cli-h4x81x97.js";
|
|
22
|
+
import {
|
|
23
|
+
isPathSpecifier,
|
|
24
|
+
parseExtensionSpecifier
|
|
25
|
+
} from "./cli-t8be9yeb.js";
|
|
26
|
+
import"./cli-s6djx4ma.js";
|
|
28
27
|
import {
|
|
29
28
|
UsageError,
|
|
30
29
|
exitForUsage,
|
|
@@ -32,12 +31,11 @@ import {
|
|
|
32
31
|
rejectUnknownFlags,
|
|
33
32
|
resolveProjectDir
|
|
34
33
|
} from "./cli-d8xjns66.js";
|
|
35
|
-
import"./cli-
|
|
36
|
-
import"./cli-fe43evmf.js";
|
|
34
|
+
import"./cli-5jzyw06s.js";
|
|
37
35
|
import {
|
|
38
36
|
EXIT_CODES
|
|
39
37
|
} from "./cli-46ycxe6r.js";
|
|
40
|
-
import"./cli-
|
|
38
|
+
import"./cli-y28j019d.js";
|
|
41
39
|
import"./cli-37x76zdn.js";
|
|
42
40
|
|
|
43
41
|
// src/commands/ext.ts
|
|
@@ -58,7 +56,7 @@ var extListArgs = { dir: dirArg };
|
|
|
58
56
|
var extAddArgs = {
|
|
59
57
|
source: {
|
|
60
58
|
type: "positional",
|
|
61
|
-
description: "What to add: an npm package (name or name@version), a bundled feature
|
|
59
|
+
description: "What to add: an npm package (name or name@version), a bundled name (a feature like markdown-it-mark or a look like academic), a folder or plugin file path, a .zip or .css file, or an http(s) URL",
|
|
62
60
|
required: true
|
|
63
61
|
},
|
|
64
62
|
dir: dirArg,
|
|
@@ -66,11 +64,6 @@ var extAddArgs = {
|
|
|
66
64
|
type: "string",
|
|
67
65
|
description: "Named module export to use as the plugin function (npm and path extensions only)",
|
|
68
66
|
required: false
|
|
69
|
-
},
|
|
70
|
-
look: {
|
|
71
|
-
type: "boolean",
|
|
72
|
-
description: "Treat SOURCE as a built-in look id (clean-book, zine, technical-doc, academic): copy it into extensions/ and add it",
|
|
73
|
-
required: false
|
|
74
67
|
}
|
|
75
68
|
};
|
|
76
69
|
var extRemoveArgs = { specifier: specifierArg, dir: dirArg };
|
|
@@ -140,10 +133,10 @@ function printAdded(entry, projectDir, warnings = []) {
|
|
|
140
133
|
if (entry.kind === "npm") {
|
|
141
134
|
console.log(`Installed ${entry.use}`);
|
|
142
135
|
console.log(` project: ${projectDir}`);
|
|
143
|
-
console.log(" vendored under:
|
|
136
|
+
console.log(" vendored under: extensions/npm");
|
|
144
137
|
console.log(" manifest: exact version pinned");
|
|
145
138
|
} else if (entry.kind === "bundled") {
|
|
146
|
-
console.log(`Enabled bundled feature ${entry.use}`);
|
|
139
|
+
console.log(`Enabled bundled ${entry.carries.styles && !entry.carries.markdown ? "look" : "feature"} ${entry.use}`);
|
|
147
140
|
console.log(` project: ${projectDir}`);
|
|
148
141
|
} else {
|
|
149
142
|
console.log(`Added ${entry.use} (${carriesLabel(entry)})`);
|
|
@@ -189,7 +182,7 @@ var list = defineCommand({
|
|
|
189
182
|
var add = defineCommand({
|
|
190
183
|
meta: {
|
|
191
184
|
name: "add",
|
|
192
|
-
description: "Add an extension: an npm package, a bundled feature, a folder or plugin file, a .zip/.css file, or a URL"
|
|
185
|
+
description: "Add an extension: an npm package, a bundled name (a feature or a look), a folder or plugin file, a .zip/.css file, or a URL"
|
|
193
186
|
},
|
|
194
187
|
args: extAddArgs,
|
|
195
188
|
async run({ args, rawArgs }) {
|
|
@@ -208,10 +201,7 @@ var add = defineCommand({
|
|
|
208
201
|
if (typeof args.export === "string" && !exportName) {
|
|
209
202
|
throw new UsageError("gutterpress ext add: --export requires a non-empty name");
|
|
210
203
|
}
|
|
211
|
-
if (
|
|
212
|
-
throw new UsageError(`gutterpress ext add --look: unknown built-in look "${source}" (one of: ${BUILT_IN_STYLE_SET_IDS.join(", ")})`);
|
|
213
|
-
}
|
|
214
|
-
if (!args.look && !isUrl && !existing) {
|
|
204
|
+
if (!isUrl && !existing) {
|
|
215
205
|
try {
|
|
216
206
|
if (path.isAbsolute(source) || isPathSpecifier(source)) {
|
|
217
207
|
throw new Error(`source not found: ${candidate}`);
|
|
@@ -225,11 +215,6 @@ var add = defineCommand({
|
|
|
225
215
|
exitForUsage(error);
|
|
226
216
|
}
|
|
227
217
|
try {
|
|
228
|
-
if (args.look) {
|
|
229
|
-
const entry2 = await addBuiltInStyleSet(projectDir, source);
|
|
230
|
-
printAdded(entry2, projectDir);
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
218
|
if (isUrl) {
|
|
234
219
|
const { entry: entry2, warnings } = await importExtensionFromUrl(projectDir, source);
|
|
235
220
|
printAdded(entry2, projectDir, warnings.map((w) => w.message));
|
|
@@ -385,7 +370,7 @@ var update = defineCommand({
|
|
|
385
370
|
for (const u of updated)
|
|
386
371
|
console.log(`Updated ${u.name} ${u.from} -> ${u.to}`);
|
|
387
372
|
console.log(` project: ${projectDir}`);
|
|
388
|
-
console.log(" vendored under:
|
|
373
|
+
console.log(" vendored under: extensions/npm (previous version removed)");
|
|
389
374
|
console.log(" manifest: exact version re-pinned");
|
|
390
375
|
} catch (error) {
|
|
391
376
|
failPipeline("Could not update extensions", error);
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
restoreForCommand,
|
|
4
4
|
restoreOfflineMessage,
|
|
5
5
|
restorePinnedExtensions
|
|
6
|
-
} from "./index-
|
|
7
|
-
import"./index-
|
|
8
|
-
import"./index-
|
|
9
|
-
import"./index-
|
|
6
|
+
} from "./index-7pck1q9c.js";
|
|
7
|
+
import"./index-0wee4408.js";
|
|
8
|
+
import"./index-46ycxe6r.js";
|
|
9
|
+
import"./index-5x42amh8.js";
|
|
10
10
|
import"./index-37x76zdn.js";
|
|
11
11
|
export {
|
|
12
12
|
restorePinnedExtensions,
|
|
@@ -3,14 +3,13 @@ import {
|
|
|
3
3
|
restoreForCommand,
|
|
4
4
|
restoreOfflineMessage,
|
|
5
5
|
restorePinnedExtensions
|
|
6
|
-
} from "./cli-
|
|
7
|
-
import"./cli-
|
|
8
|
-
import"./cli-
|
|
6
|
+
} from "./cli-h4x81x97.js";
|
|
7
|
+
import"./cli-t8be9yeb.js";
|
|
8
|
+
import"./cli-s6djx4ma.js";
|
|
9
9
|
import"./cli-d8xjns66.js";
|
|
10
|
-
import"./cli-
|
|
11
|
-
import"./cli-fe43evmf.js";
|
|
10
|
+
import"./cli-5jzyw06s.js";
|
|
12
11
|
import"./cli-46ycxe6r.js";
|
|
13
|
-
import"./cli-
|
|
12
|
+
import"./cli-y28j019d.js";
|
|
14
13
|
import"./cli-37x76zdn.js";
|
|
15
14
|
export {
|
|
16
15
|
restorePinnedExtensions,
|
|
@@ -368,7 +368,8 @@
|
|
|
368
368
|
mediaPrintBodies: () => mediaPrintBodies,
|
|
369
369
|
extract: () => extract,
|
|
370
370
|
PAGE_SIZES: () => PAGE_SIZES,
|
|
371
|
-
MARGIN_BOX_NAMES: () => MARGIN_BOX_NAMES
|
|
371
|
+
MARGIN_BOX_NAMES: () => MARGIN_BOX_NAMES,
|
|
372
|
+
DEFAULT_PAGE_MARGIN_PT: () => DEFAULT_PAGE_MARGIN_PT
|
|
372
373
|
});
|
|
373
374
|
var MARGIN_BOX_NAMES = [
|
|
374
375
|
"top-left-corner",
|
|
@@ -923,12 +924,18 @@
|
|
|
923
924
|
const d = parts[3] ?? b;
|
|
924
925
|
return { top: a, right: b, bottom: c, left: d };
|
|
925
926
|
}
|
|
927
|
+
var DEFAULT_PAGE_MARGIN_PT = 72;
|
|
926
928
|
function resolvePage(model, ctx = {}) {
|
|
927
929
|
const wanted = new Set(ctx.pseudos ?? []);
|
|
928
930
|
const applicable = model.pageRules.filter((r) => r.name ? r.name === ctx.name : true).filter((r) => r.pseudos.every((p) => wanted.has(p))).sort((a, b) => specificity(a) - specificity(b));
|
|
929
931
|
const decls = {};
|
|
930
932
|
const marginBoxes = {};
|
|
931
|
-
const margin = {
|
|
933
|
+
const margin = {
|
|
934
|
+
top: DEFAULT_PAGE_MARGIN_PT,
|
|
935
|
+
right: DEFAULT_PAGE_MARGIN_PT,
|
|
936
|
+
bottom: DEFAULT_PAGE_MARGIN_PT,
|
|
937
|
+
left: DEFAULT_PAGE_MARGIN_PT
|
|
938
|
+
};
|
|
932
939
|
for (const rule of applicable) {
|
|
933
940
|
for (const [prop, value] of Object.entries(rule.decls)) {
|
|
934
941
|
if (prop === "margin")
|