gutterpress 0.10.9 → 0.10.10-alpha.1

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 (58) hide show
  1. package/README.md +66 -5
  2. package/dist/{README-jntqyj1z.md → README-3zk4tgnj.md} +4 -4
  3. package/dist/{README-6c7fda1s.md → README-7x5akcns.md} +5 -4
  4. package/dist/api/index.d.ts +7 -4
  5. package/dist/api/index.js +22 -12
  6. package/dist/{audit-fq7s1gsz.js → audit-ek36tf4q.js} +5 -5
  7. package/dist/{build-dyat3fqd.js → build-bxavfz3j.js} +6 -6
  8. package/dist/{cli-ypfvnhag.js → cli-12epgrva.js} +1 -1
  9. package/dist/{cli-8pg731p5.js → cli-5fqr02je.js} +4914 -4707
  10. package/dist/{cli-bzxqtvrk.js → cli-75qkn0k5.js} +1 -1
  11. package/dist/{cli-bx950tb4.js → cli-k8f9eb12.js} +22 -26
  12. package/dist/{cli-rh05byck.js → cli-tvpq2ht9.js} +1 -1
  13. package/dist/{cli-w692g6dx.js → cli-vje8g3w8.js} +88 -1
  14. package/dist/cli.js +16 -16
  15. package/dist/{components-0mmswvvm.yaml → components-dhgv2sm7.yaml} +2 -2
  16. package/dist/{doctor-yr85n080.js → doctor-tgmedr7g.js} +2 -2
  17. package/dist/{engine-d46wgg99.js → engine-pt2acjb5.js} +2 -2
  18. package/dist/{engine-19mshh07.js → engine-qtmvaqt7.js} +1 -1
  19. package/dist/{ext-jrg8c48s.js → ext-jjzmafve.js} +52 -8
  20. package/dist/{index-zwcv1njy.js → index-5dgxeevv.js} +22 -26
  21. package/dist/{index-dhgzkhs7.js → index-a0e2253t.js} +1 -1
  22. package/dist/{index-mey5vraz.js → index-d4wrww4b.js} +918 -796
  23. package/dist/{index-dtrftayr.js → index-f833dtg9.js} +88 -1
  24. package/dist/index.js +102 -15
  25. package/dist/lib/build-error.d.ts +6 -5
  26. package/dist/lib/build-preflight.d.ts +11 -1
  27. package/dist/lib/build-runner.d.ts +49 -16
  28. package/dist/lib/extension-import.d.ts +4 -4
  29. package/dist/lib/extension-manager.d.ts +3 -3
  30. package/dist/lib/extension-manifest.d.ts +91 -87
  31. package/dist/lib/extension-scaffold.d.ts +1 -1
  32. package/dist/lib/extension-search.d.ts +46 -0
  33. package/dist/lib/host-policy.d.ts +10 -12
  34. package/dist/lib/lint-runner.d.ts +16 -9
  35. package/dist/lib/npm-registry.d.ts +22 -0
  36. package/dist/lib/source-provider.d.ts +58 -0
  37. package/dist/lib/validation-exec.d.ts +11 -0
  38. package/dist/{lint-enasqbqx.js → lint-5vbq6yjb.js} +5 -5
  39. package/dist/{new-r9c99wsn.js → new-qws45t02.js} +6 -6
  40. package/dist/package-97gm31sg.json +10 -0
  41. package/dist/{package-rm9d2tht.json → package-9rv69pxm.json} +4 -1
  42. package/dist/package-aenwjew3.json +28 -0
  43. package/dist/package-gag6ykwn.json +10 -0
  44. package/dist/package-nrhkwf2m.json +10 -0
  45. package/dist/{plugin.test.js-npnfhyca.tpl → plugin.test.js-k2r87k04.tpl} +9 -8
  46. package/dist/{preflight-shk7vqbs.js → preflight-4ywt3399.js} +5 -5
  47. package/dist/{preview-52918mxk.js → preview-4c3tcsn4.js} +6 -6
  48. package/dist/{publish-8s60vhx7.js → publish-m6bme9a8.js} +5 -5
  49. package/dist/{source-provider-2j5x2hyw.js → source-provider-2cnc5hry.js} +7 -1
  50. package/dist/{source-provider-kn41jmbs.js → source-provider-y1kscr1h.js} +7 -1
  51. package/dist/{tokens-e4xk3x4v.css → tokens-2sracx1w.css} +1 -1
  52. package/dist/{validate-awccx32r.js → validate-avtb9drn.js} +5 -5
  53. package/package.json +1 -1
  54. package/dist/gutterpress-m98e2w2d.json +0 -8
  55. package/dist/gutterpress-x2ycdsb8.json +0 -17
  56. package/dist/theme-etj4gxck.json +0 -9
  57. package/dist/theme-s2rg7xe7.json +0 -9
  58. package/dist/theme-vktedy8q.json +0 -9
@@ -18,7 +18,7 @@ var previewArgs = {
18
18
  icc: { type: "string", description: "Path to ICC profile (required for --format pdfx)" },
19
19
  manifest: { type: "string", description: "Path to manifest.yaml (pdf|pdfx only)" },
20
20
  "strip-annotations": { type: "boolean", description: "Strip PDF annotations for PDF/X compliance (pdfx only)" },
21
- "skip-lint": { type: "boolean", description: "Skip CSS linting (pdf|pdfx only)" },
21
+ "skip-lint": { type: "boolean", description: "Skip the CSS print-safety check (pdf|pdfx only)" },
22
22
  "skip-pre-validate": { type: "boolean", description: "Skip pre-build validation (pdf|pdfx only)" },
23
23
  "skip-post-validate": { type: "boolean", description: "Skip post-build PDF/X validation (pdfx only)" },
24
24
  "allow-shrink": { type: "boolean", description: "Build anyway when content is wider than the page content box, instead of failing. Chromium then scales the WHOLE book down to fit; the scale and each offender are reported as warnings. (pdf|pdfx only)" }
@@ -1468,14 +1468,11 @@ var manifest_default3 = "./manifest-n1gh3qw5.yaml";
1468
1468
  // src/assets/templates/technical/chapter-01.md
1469
1469
  var chapter_01_default3 = "./chapter-01-6fn9pvd0.md";
1470
1470
 
1471
- // src/assets/extension-templates/plugin/gutterpress.json
1472
- var gutterpress_default = "./gutterpress-m98e2w2d.json";
1473
-
1474
1471
  // src/assets/extension-templates/plugin/package.json
1475
- var package_default = "./package-rm9d2tht.json";
1472
+ var package_default = "./package-9rv69pxm.json";
1476
1473
 
1477
1474
  // src/assets/extension-templates/plugin/README.md
1478
- var README_default = "./README-jntqyj1z.md";
1475
+ var README_default = "./README-3zk4tgnj.md";
1479
1476
 
1480
1477
  // src/assets/extension-templates/plugin/plugin.js.tpl
1481
1478
  var plugin_js_default = "./plugin.js-aszz0zgh.tpl";
@@ -1493,22 +1490,22 @@ var fixture_default = "./fixture-2qnyqgb5.md";
1493
1490
  var expected_default = "./expected-ycmacem8.html";
1494
1491
 
1495
1492
  // src/assets/extension-templates/plugin/test/plugin.test.js.tpl
1496
- var plugin_test_js_default = "./plugin.test.js-npnfhyca.tpl";
1493
+ var plugin_test_js_default = "./plugin.test.js-k2r87k04.tpl";
1497
1494
 
1498
- // src/assets/extension-templates/theme/gutterpress.json
1499
- var gutterpress_default2 = "./gutterpress-x2ycdsb8.json";
1495
+ // src/assets/extension-templates/theme/package.json
1496
+ var package_default2 = "./package-aenwjew3.json";
1500
1497
 
1501
1498
  // src/assets/extension-templates/theme/README.md
1502
- var README_default2 = "./README-6c7fda1s.md";
1499
+ var README_default2 = "./README-7x5akcns.md";
1503
1500
 
1504
1501
  // src/assets/extension-templates/theme/components.yaml
1505
- var components_default = "./components-0mmswvvm.yaml";
1502
+ var components_default = "./components-dhgv2sm7.yaml";
1506
1503
 
1507
1504
  // src/assets/extension-templates/theme/snippets/callout.md
1508
1505
  var callout_default = "./callout-hv56m16h.md";
1509
1506
 
1510
1507
  // src/assets/extension-templates/theme/styles/tokens.css
1511
- var tokens_default = "./tokens-e4xk3x4v.css";
1508
+ var tokens_default = "./tokens-2sracx1w.css";
1512
1509
 
1513
1510
  // src/assets/extension-templates/theme/styles/base.css
1514
1511
  var base_default = "./base-ypqh9n7f.css";
@@ -1528,20 +1525,20 @@ var book_default = "./book-ted3tzrp.css";
1528
1525
  // src/assets/themes/clean-book/theme.css
1529
1526
  var theme_default = "./theme-j2bagrfx.css";
1530
1527
 
1531
- // src/assets/themes/clean-book/theme.json
1532
- var theme_default2 = "./theme-vktedy8q.json";
1528
+ // src/assets/themes/clean-book/package.json
1529
+ var package_default3 = "./package-97gm31sg.json";
1533
1530
 
1534
1531
  // src/assets/themes/zine/theme.css
1535
- var theme_default3 = "./theme-h5recz6c.css";
1532
+ var theme_default2 = "./theme-h5recz6c.css";
1536
1533
 
1537
- // src/assets/themes/zine/theme.json
1538
- var theme_default4 = "./theme-etj4gxck.json";
1534
+ // src/assets/themes/zine/package.json
1535
+ var package_default4 = "./package-gag6ykwn.json";
1539
1536
 
1540
1537
  // src/assets/themes/technical-doc/theme.css
1541
- var theme_default5 = "./theme-nn6d53zy.css";
1538
+ var theme_default3 = "./theme-nn6d53zy.css";
1542
1539
 
1543
- // src/assets/themes/technical-doc/theme.json
1544
- var theme_default6 = "./theme-s2rg7xe7.json";
1540
+ // src/assets/themes/technical-doc/package.json
1541
+ var package_default5 = "./package-nrhkwf2m.json";
1545
1542
 
1546
1543
  // src/lib/embedded-assets.ts
1547
1544
  var __libdir = dirname(fileURLToPath(import.meta.url));
@@ -1562,7 +1559,6 @@ var EMBEDDED_ASSETS = {
1562
1559
  "templates/zine/chapter-01.md": abs(filePath(chapter_01_default2)),
1563
1560
  "templates/technical/manifest.yaml": abs(filePath(manifest_default3)),
1564
1561
  "templates/technical/chapter-01.md": abs(filePath(chapter_01_default3)),
1565
- "extension-templates/plugin/gutterpress.json": abs(filePath(gutterpress_default)),
1566
1562
  "extension-templates/plugin/package.json": abs(filePath(package_default)),
1567
1563
  "extension-templates/plugin/README.md": abs(filePath(README_default)),
1568
1564
  "extension-templates/plugin/plugin.js.tpl": abs(filePath(plugin_js_default)),
@@ -1571,7 +1567,7 @@ var EMBEDDED_ASSETS = {
1571
1567
  "extension-templates/plugin/test/fixture.md": abs(filePath(fixture_default)),
1572
1568
  "extension-templates/plugin/test/expected.html": abs(filePath(expected_default)),
1573
1569
  "extension-templates/plugin/test/plugin.test.js.tpl": abs(filePath(plugin_test_js_default)),
1574
- "extension-templates/theme/gutterpress.json": abs(filePath(gutterpress_default2)),
1570
+ "extension-templates/theme/package.json": abs(filePath(package_default2)),
1575
1571
  "extension-templates/theme/README.md": abs(filePath(README_default2)),
1576
1572
  "extension-templates/theme/components.yaml": abs(filePath(components_default)),
1577
1573
  "extension-templates/theme/snippets/callout.md": abs(filePath(callout_default)),
@@ -1582,11 +1578,11 @@ var EMBEDDED_ASSETS = {
1582
1578
  "extension-templates/theme/styles/page-rules.css": abs(filePath(page_rules_default)),
1583
1579
  "extension-templates/theme/styles/book.css": abs(filePath(book_default)),
1584
1580
  "themes/clean-book/theme.css": abs(filePath(theme_default)),
1585
- "themes/clean-book/theme.json": abs(filePath(theme_default2)),
1586
- "themes/zine/theme.css": abs(filePath(theme_default3)),
1587
- "themes/zine/theme.json": abs(filePath(theme_default4)),
1588
- "themes/technical-doc/theme.css": abs(filePath(theme_default5)),
1589
- "themes/technical-doc/theme.json": abs(filePath(theme_default6))
1581
+ "themes/clean-book/package.json": abs(filePath(package_default3)),
1582
+ "themes/zine/theme.css": abs(filePath(theme_default2)),
1583
+ "themes/zine/package.json": abs(filePath(package_default4)),
1584
+ "themes/technical-doc/theme.css": abs(filePath(theme_default3)),
1585
+ "themes/technical-doc/package.json": abs(filePath(package_default5))
1590
1586
  };
1591
1587
  var extractPromise = null;
1592
1588
  async function extractAssets() {
@@ -4,7 +4,7 @@ import {
4
4
  // package.json
5
5
  var package_default = {
6
6
  name: "gutterpress",
7
- version: "0.10.9",
7
+ version: "0.10.10-alpha.1",
8
8
  description: "Markdown-to-PDF converter for professional print layout using a native Chromium print engine and Ghostscript.",
9
9
  author: "itlackey",
10
10
  license: "MPL-2.0",
@@ -503,5 +503,92 @@ async function restoreVersionWithBackup(options) {
503
503
  return { restoredId: id, backupId };
504
504
  });
505
505
  }
506
+ var SWITCH_BRANCH_SNAPSHOT_MESSAGE = "Saved before switching copy";
507
+ async function listLocalBranches(dir) {
508
+ const source = await detectProjectSource(dir);
509
+ if (source.type !== "local-git-folder")
510
+ return null;
511
+ const repoDir = gitScopeFor(source);
512
+ const [branches, current] = await Promise.all([
513
+ git.listBranches({ fs: gitFs, dir: repoDir }),
514
+ git.currentBranch({ fs: gitFs, dir: repoDir, fullname: false }).catch(() => {
515
+ return;
516
+ })
517
+ ]);
518
+ return { current: current ?? null, branches };
519
+ }
520
+ function isCheckoutConflictError(e) {
521
+ return e?.code === "CheckoutConflictError";
522
+ }
523
+ async function diffCommitPaths(dir, fromOid, toOid, cache) {
524
+ const changed = [];
525
+ await git.walk({
526
+ fs: gitFs,
527
+ dir,
528
+ cache,
529
+ trees: [git.TREE({ ref: fromOid }), git.TREE({ ref: toOid })],
530
+ map: async (filepath, [from, to]) => {
531
+ if (filepath === ".")
532
+ return;
533
+ const [fType, tType] = await Promise.all([
534
+ from ? from.type() : Promise.resolve(undefined),
535
+ to ? to.type() : Promise.resolve(undefined)
536
+ ]);
537
+ if (fType === "tree" || tType === "tree")
538
+ return;
539
+ if (!fType && !tType)
540
+ return;
541
+ if (!fType || !tType) {
542
+ changed.push(filepath);
543
+ return;
544
+ }
545
+ const [fOid, tOid] = await Promise.all([from.oid(), to.oid()]);
546
+ if (fOid !== tOid)
547
+ changed.push(filepath);
548
+ }
549
+ });
550
+ return changed;
551
+ }
552
+ async function switchBranch(options) {
553
+ const { projectDir, branch, authorName, authorEmail } = options;
554
+ const source = await detectProjectSource(projectDir);
555
+ if (source.type !== "local-git-folder") {
556
+ throw new Error("This project has no version history yet. Enable version history first.");
557
+ }
558
+ const repoDir = gitScopeFor(source);
559
+ return withRepoLock(repoDir, async () => {
560
+ const cache = {};
561
+ try {
562
+ await snapshotWorkingTreeUnlocked({
563
+ projectDir,
564
+ repoRoot: repoDir,
565
+ message: SWITCH_BRANCH_SNAPSHOT_MESSAGE,
566
+ authorName,
567
+ authorEmail,
568
+ cache
569
+ });
570
+ } catch (e) {
571
+ if (!isNoChangesError(e))
572
+ throw e;
573
+ }
574
+ const fromOid = await git.resolveRef({ fs: gitFs, dir: repoDir, ref: "HEAD" }).catch(() => {
575
+ return;
576
+ });
577
+ const toOid = await git.resolveRef({ fs: gitFs, dir: repoDir, ref: branch });
578
+ try {
579
+ await git.checkout({ fs: gitFs, dir: repoDir, cache, ref: branch, force: false });
580
+ } catch (e) {
581
+ if (isCheckoutConflictError(e)) {
582
+ throw new Error("Couldn't switch copies — some files changed on disk right as the switch " + "started. Try again.", { cause: e });
583
+ }
584
+ throw e;
585
+ }
586
+ const changedPaths = fromOid && fromOid !== toOid ? await diffCommitPaths(repoDir, fromOid, toOid, cache) : [];
587
+ return {
588
+ current: branch,
589
+ changedFiles: changedPaths.map((p) => path2.join(repoDir, p))
590
+ };
591
+ });
592
+ }
506
593
 
507
- export { gitScopeFor, HISTORY_PAGE_LIMIT, withRepoLock, __repoLockQueueSizeForTests, resolveGitAuthor, listWorkdirChanges, stageChanges, hasPendingChanges, hasUncommittedChanges, snapshotWorkingTreeUnlocked, isNoChangesError, providerFor, gitDirFor, snapshotStagingMarkerPath, RESTORE_BACKUP_MESSAGE, AUTO_SNAPSHOT_MESSAGE, restoreVersionWithBackup };
594
+ export { gitScopeFor, HISTORY_PAGE_LIMIT, withRepoLock, __repoLockQueueSizeForTests, resolveGitAuthor, listWorkdirChanges, stageChanges, hasPendingChanges, hasUncommittedChanges, snapshotWorkingTreeUnlocked, isNoChangesError, providerFor, gitDirFor, snapshotStagingMarkerPath, RESTORE_BACKUP_MESSAGE, AUTO_SNAPSHOT_MESSAGE, restoreVersionWithBackup, SWITCH_BRANCH_SNAPSHOT_MESSAGE, listLocalBranches, switchBranch };
package/dist/cli.js CHANGED
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  previewArgs
4
- } from "./cli-bzxqtvrk.js";
4
+ } from "./cli-75qkn0k5.js";
5
5
  import {
6
6
  UsageError,
7
7
  package_default,
8
8
  rejectUnknownFlags
9
- } from "./cli-rh05byck.js";
9
+ } from "./cli-tvpq2ht9.js";
10
10
  import {
11
11
  EXIT_CODES
12
12
  } from "./cli-46ycxe6r.js";
@@ -18,16 +18,16 @@ import {
18
18
  import { defineCommand, parseArgs, runMain } from "citty";
19
19
  import { statSync } from "node:fs";
20
20
  var SUBCOMMANDS = {
21
- new: () => import("./new-r9c99wsn.js").then((m) => m.default),
22
- preview: () => import("./preview-52918mxk.js").then((m) => m.default),
23
- build: () => import("./build-dyat3fqd.js").then((m) => m.default),
24
- publish: () => import("./publish-8s60vhx7.js").then((m) => m.default),
25
- lint: () => import("./lint-enasqbqx.js").then((m) => m.default),
26
- validate: () => import("./validate-awccx32r.js").then((m) => m.default),
27
- audit: () => import("./audit-fq7s1gsz.js").then((m) => m.default),
28
- preflight: () => import("./preflight-shk7vqbs.js").then((m) => m.default),
29
- doctor: () => import("./doctor-yr85n080.js").then((m) => m.default),
30
- ext: () => import("./ext-jrg8c48s.js").then((m) => m.default)
21
+ new: () => import("./new-qws45t02.js").then((m) => m.default),
22
+ preview: () => import("./preview-4c3tcsn4.js").then((m) => m.default),
23
+ build: () => import("./build-bxavfz3j.js").then((m) => m.default),
24
+ publish: () => import("./publish-m6bme9a8.js").then((m) => m.default),
25
+ lint: () => import("./lint-5vbq6yjb.js").then((m) => m.default),
26
+ validate: () => import("./validate-avtb9drn.js").then((m) => m.default),
27
+ audit: () => import("./audit-ek36tf4q.js").then((m) => m.default),
28
+ preflight: () => import("./preflight-4ywt3399.js").then((m) => m.default),
29
+ doctor: () => import("./doctor-tgmedr7g.js").then((m) => m.default),
30
+ ext: () => import("./ext-jjzmafve.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-r9c99wsn.js");
55
+ const { newArgs } = await import("./new-qws45t02.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-shk7vqbs.js");
67
+ const { preflightArgs } = await import("./preflight-4ywt3399.js");
68
68
  rejectUnknownFlags(commandArgs, preflightArgs, "preflight");
69
69
  const parsed = parseArgs(commandArgs, {
70
70
  ...preflightArgs,
@@ -84,11 +84,11 @@ 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-jrg8c48s.js");
87
+ const { EXT_SUBCOMMANDS, extAddArgs, extRemoveArgs, extEnableArgs, extDisableArgs } = await import("./ext-jjzmafve.js");
88
88
  if (!EXT_SUBCOMMANDS.includes(subcommand)) {
89
89
  throw new UsageError(`gutterpress ext: unknown command "${subcommand}"`);
90
90
  }
91
- if (subcommand === "list")
91
+ if (subcommand === "list" || subcommand === "search")
92
92
  return;
93
93
  const [positionalKey, positionalLabel, commandArgsDef] = subcommand === "add" ? ["source", "SOURCE", extAddArgs] : subcommand === "remove" ? ["specifier", "SPECIFIER", extRemoveArgs] : subcommand === "enable" ? ["specifier", "SPECIFIER", extEnableArgs] : ["specifier", "SPECIFIER", extDisableArgs];
94
94
  rejectUnknownFlags(subcommandArgs, commandArgsDef, `ext ${subcommand}`);
@@ -5,8 +5,8 @@
5
5
  # is the thing a new author browses, and the thing to check a component
6
6
  # against when you change it.
7
7
  #
8
- # Gutterpress reads this file's PRESENCE today (gutterpress.json's
9
- # `components:` field points here, and a missing file fails at apply time
8
+ # Gutterpress reads this file's PRESENCE today (package.json's
9
+ # `gutterpress.components` field points here, and a missing file fails at apply time
10
10
  # rather than silently at render time). Nothing yet reads the entries — the
11
11
  # registry that will is not built. So treat the shape below as this theme's
12
12
  # own convention, useful to you now, and expect to adjust it when core grows
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  getSystemDiagnostics,
3
3
  log
4
- } from "./cli-ypfvnhag.js";
4
+ } from "./cli-12epgrva.js";
5
5
  import {
6
6
  UsageError,
7
7
  rejectExtraPositionals,
8
8
  rejectUnknownFlags
9
- } from "./cli-rh05byck.js";
9
+ } from "./cli-tvpq2ht9.js";
10
10
  import"./cli-c41yr7he.js";
11
11
  import"./cli-46ycxe6r.js";
12
12
  import"./cli-37x76zdn.js";
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  build
3
- } from "./index-dhgzkhs7.js";
3
+ } from "./index-a0e2253t.js";
4
4
  import {
5
5
  BuildError,
6
6
  RENDER_TIMEOUT_MS,
7
7
  assertMilestone,
8
8
  connectChromium,
9
9
  getBrowser
10
- } from "./index-zwcv1njy.js";
10
+ } from "./index-5dgxeevv.js";
11
11
  import"./index-37x76zdn.js";
12
12
 
13
13
  // src/lib/engine.ts
@@ -4,7 +4,7 @@ import {
4
4
  build,
5
5
  connectChromium,
6
6
  getBrowser
7
- } from "./cli-bx950tb4.js";
7
+ } from "./cli-k8f9eb12.js";
8
8
  import"./cli-c41yr7he.js";
9
9
  import {
10
10
  BuildError
@@ -8,22 +8,23 @@ import {
8
8
  listProjectExtensions,
9
9
  parseExtensionSpecifier,
10
10
  removeExtension,
11
+ searchNpmExtensions,
11
12
  setExtensionEnabled
12
- } from "./cli-8pg731p5.js";
13
- import"./cli-ypfvnhag.js";
13
+ } from "./cli-5fqr02je.js";
14
+ import"./cli-12epgrva.js";
14
15
  import {
15
16
  UsageError,
16
17
  exitForUsage,
17
18
  rejectExtraPositionals,
18
19
  rejectUnknownFlags,
19
20
  resolveProjectDir
20
- } from "./cli-rh05byck.js";
21
- import"./cli-bx950tb4.js";
21
+ } from "./cli-tvpq2ht9.js";
22
+ import"./cli-k8f9eb12.js";
22
23
  import"./cli-c41yr7he.js";
23
24
  import {
24
25
  EXIT_CODES
25
26
  } from "./cli-46ycxe6r.js";
26
- import"./cli-w692g6dx.js";
27
+ import"./cli-vje8g3w8.js";
27
28
  import"./cli-v5mp7a6q.js";
28
29
  import"./cli-37x76zdn.js";
29
30
 
@@ -63,7 +64,14 @@ var extAddArgs = {
63
64
  var extRemoveArgs = { specifier: specifierArg, dir: dirArg };
64
65
  var extEnableArgs = { specifier: specifierArg, dir: dirArg };
65
66
  var extDisableArgs = { specifier: specifierArg, dir: dirArg };
66
- var EXT_SUBCOMMANDS = ["list", "add", "remove", "enable", "disable"];
67
+ var extSearchArgs = {
68
+ query: {
69
+ type: "positional",
70
+ description: "Words to search npm for; omit to list the most relevant tagged packages",
71
+ required: false
72
+ }
73
+ };
74
+ var EXT_SUBCOMMANDS = ["list", "add", "remove", "enable", "disable", "search"];
67
75
  var parentArgs = {};
68
76
  function rejectParentFlags(rawArgs) {
69
77
  const first = rawArgs[0];
@@ -102,6 +110,11 @@ function describeLine(entry) {
102
110
  const label = entry.label !== entry.name ? ` ${entry.label}` : "";
103
111
  return ` ${entry.use}${state} [${entry.kind}; ${carriesLabel(entry)}]${label}`;
104
112
  }
113
+ function describeMatchLine(match) {
114
+ const kind = match.kind === "gutterpress" ? "gutterpress" : "markdown-it plugin";
115
+ const description = match.description ? ` ${match.description}` : "";
116
+ return ` ${match.name}@${match.version} [${kind}]${description}`;
117
+ }
105
118
  function printAdded(entry, projectDir, warnings = []) {
106
119
  if (entry.kind === "npm") {
107
120
  console.log(`Installed ${entry.use}`);
@@ -246,18 +259,49 @@ var disable = specifierCommand("disable", "Turn a configured extension off witho
246
259
  await setExtensionEnabled(projectDir, specifier, false);
247
260
  return `Disabled ${specifier}`;
248
261
  });
262
+ var search = defineCommand({
263
+ meta: {
264
+ name: "search",
265
+ description: "Search npm for extensions (network; not project-scoped)"
266
+ },
267
+ args: extSearchArgs,
268
+ async run({ args, rawArgs }) {
269
+ try {
270
+ rejectUnknownFlags(rawArgs, extSearchArgs, "ext search");
271
+ rejectExtraPositionals(args._, 1, "ext search");
272
+ } catch (error) {
273
+ exitForUsage(error);
274
+ }
275
+ const query = typeof args.query === "string" ? args.query.trim() : "";
276
+ try {
277
+ const { matches, total } = await searchNpmExtensions(query);
278
+ if (matches.length === 0) {
279
+ console.log(query ? `No extensions on npm match "${query}".` : "No extensions found on npm.");
280
+ return;
281
+ }
282
+ const scope = query ? ` matching "${query}"` : "";
283
+ console.log(`Extensions on npm${scope} (showing ${matches.length} of ${total}):`);
284
+ for (const match of matches)
285
+ console.log(describeMatchLine(match));
286
+ console.log("Add one with: gutterpress ext add <name>");
287
+ } catch (error) {
288
+ failPipeline("Could not search npm", error);
289
+ }
290
+ }
291
+ });
249
292
  var ext_default = defineCommand({
250
293
  meta: {
251
294
  name: "ext",
252
- description: "List, add, remove, enable, or disable the project's extensions"
295
+ description: "List, add, remove, enable, disable the project's extensions, or search npm"
253
296
  },
254
297
  args: parentArgs,
255
298
  setup({ rawArgs }) {
256
299
  rejectParentFlags(rawArgs);
257
300
  },
258
- subCommands: { list, add, remove, enable, disable }
301
+ subCommands: { list, add, remove, enable, disable, search }
259
302
  });
260
303
  export {
304
+ extSearchArgs,
261
305
  extRemoveArgs,
262
306
  extListArgs,
263
307
  extEnableArgs,
@@ -631,14 +631,11 @@ var manifest_default3 = "./manifest-n1gh3qw5.yaml";
631
631
  // src/assets/templates/technical/chapter-01.md
632
632
  var chapter_01_default3 = "./chapter-01-6fn9pvd0.md";
633
633
 
634
- // src/assets/extension-templates/plugin/gutterpress.json
635
- var gutterpress_default = "./gutterpress-m98e2w2d.json";
636
-
637
634
  // src/assets/extension-templates/plugin/package.json
638
- var package_default = "./package-rm9d2tht.json";
635
+ var package_default = "./package-9rv69pxm.json";
639
636
 
640
637
  // src/assets/extension-templates/plugin/README.md
641
- var README_default = "./README-jntqyj1z.md";
638
+ var README_default = "./README-3zk4tgnj.md";
642
639
 
643
640
  // src/assets/extension-templates/plugin/plugin.js.tpl
644
641
  var plugin_js_default = "./plugin.js-aszz0zgh.tpl";
@@ -656,22 +653,22 @@ var fixture_default = "./fixture-2qnyqgb5.md";
656
653
  var expected_default = "./expected-ycmacem8.html";
657
654
 
658
655
  // src/assets/extension-templates/plugin/test/plugin.test.js.tpl
659
- var plugin_test_js_default = "./plugin.test.js-npnfhyca.tpl";
656
+ var plugin_test_js_default = "./plugin.test.js-k2r87k04.tpl";
660
657
 
661
- // src/assets/extension-templates/theme/gutterpress.json
662
- var gutterpress_default2 = "./gutterpress-x2ycdsb8.json";
658
+ // src/assets/extension-templates/theme/package.json
659
+ var package_default2 = "./package-aenwjew3.json";
663
660
 
664
661
  // src/assets/extension-templates/theme/README.md
665
- var README_default2 = "./README-6c7fda1s.md";
662
+ var README_default2 = "./README-7x5akcns.md";
666
663
 
667
664
  // src/assets/extension-templates/theme/components.yaml
668
- var components_default = "./components-0mmswvvm.yaml";
665
+ var components_default = "./components-dhgv2sm7.yaml";
669
666
 
670
667
  // src/assets/extension-templates/theme/snippets/callout.md
671
668
  var callout_default = "./callout-hv56m16h.md";
672
669
 
673
670
  // src/assets/extension-templates/theme/styles/tokens.css
674
- var tokens_default = "./tokens-e4xk3x4v.css";
671
+ var tokens_default = "./tokens-2sracx1w.css";
675
672
 
676
673
  // src/assets/extension-templates/theme/styles/base.css
677
674
  var base_default = "./base-ypqh9n7f.css";
@@ -691,20 +688,20 @@ var book_default = "./book-ted3tzrp.css";
691
688
  // src/assets/themes/clean-book/theme.css
692
689
  var theme_default = "./theme-j2bagrfx.css";
693
690
 
694
- // src/assets/themes/clean-book/theme.json
695
- var theme_default2 = "./theme-vktedy8q.json";
691
+ // src/assets/themes/clean-book/package.json
692
+ var package_default3 = "./package-97gm31sg.json";
696
693
 
697
694
  // src/assets/themes/zine/theme.css
698
- var theme_default3 = "./theme-h5recz6c.css";
695
+ var theme_default2 = "./theme-h5recz6c.css";
699
696
 
700
- // src/assets/themes/zine/theme.json
701
- var theme_default4 = "./theme-etj4gxck.json";
697
+ // src/assets/themes/zine/package.json
698
+ var package_default4 = "./package-gag6ykwn.json";
702
699
 
703
700
  // src/assets/themes/technical-doc/theme.css
704
- var theme_default5 = "./theme-nn6d53zy.css";
701
+ var theme_default3 = "./theme-nn6d53zy.css";
705
702
 
706
- // src/assets/themes/technical-doc/theme.json
707
- var theme_default6 = "./theme-s2rg7xe7.json";
703
+ // src/assets/themes/technical-doc/package.json
704
+ var package_default5 = "./package-nrhkwf2m.json";
708
705
 
709
706
  // src/lib/embedded-assets.ts
710
707
  var __libdir = dirname(fileURLToPath(import.meta.url));
@@ -725,7 +722,6 @@ var EMBEDDED_ASSETS = {
725
722
  "templates/zine/chapter-01.md": abs(filePath(chapter_01_default2)),
726
723
  "templates/technical/manifest.yaml": abs(filePath(manifest_default3)),
727
724
  "templates/technical/chapter-01.md": abs(filePath(chapter_01_default3)),
728
- "extension-templates/plugin/gutterpress.json": abs(filePath(gutterpress_default)),
729
725
  "extension-templates/plugin/package.json": abs(filePath(package_default)),
730
726
  "extension-templates/plugin/README.md": abs(filePath(README_default)),
731
727
  "extension-templates/plugin/plugin.js.tpl": abs(filePath(plugin_js_default)),
@@ -734,7 +730,7 @@ var EMBEDDED_ASSETS = {
734
730
  "extension-templates/plugin/test/fixture.md": abs(filePath(fixture_default)),
735
731
  "extension-templates/plugin/test/expected.html": abs(filePath(expected_default)),
736
732
  "extension-templates/plugin/test/plugin.test.js.tpl": abs(filePath(plugin_test_js_default)),
737
- "extension-templates/theme/gutterpress.json": abs(filePath(gutterpress_default2)),
733
+ "extension-templates/theme/package.json": abs(filePath(package_default2)),
738
734
  "extension-templates/theme/README.md": abs(filePath(README_default2)),
739
735
  "extension-templates/theme/components.yaml": abs(filePath(components_default)),
740
736
  "extension-templates/theme/snippets/callout.md": abs(filePath(callout_default)),
@@ -745,11 +741,11 @@ var EMBEDDED_ASSETS = {
745
741
  "extension-templates/theme/styles/page-rules.css": abs(filePath(page_rules_default)),
746
742
  "extension-templates/theme/styles/book.css": abs(filePath(book_default)),
747
743
  "themes/clean-book/theme.css": abs(filePath(theme_default)),
748
- "themes/clean-book/theme.json": abs(filePath(theme_default2)),
749
- "themes/zine/theme.css": abs(filePath(theme_default3)),
750
- "themes/zine/theme.json": abs(filePath(theme_default4)),
751
- "themes/technical-doc/theme.css": abs(filePath(theme_default5)),
752
- "themes/technical-doc/theme.json": abs(filePath(theme_default6))
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))
753
749
  };
754
750
  var extractPromise = null;
755
751
  async function extractAssets() {
@@ -4,7 +4,7 @@ import {
4
4
  launchChromium,
5
5
  marginBoxAlign,
6
6
  marginBoxRectPt
7
- } from "./index-zwcv1njy.js";
7
+ } from "./index-5dgxeevv.js";
8
8
 
9
9
  // src/engine/compiler/build.ts
10
10
  import { readFile } from "node:fs/promises";