@optique/man 1.3.1 → 1.3.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/dist/cli.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
- const require_man = require('./man-C44Q4VSc.cjs');
2
+ const require_man = require('./man-BRIf09IL.cjs');
3
3
  require('./roff-C8MvQ2tL.cjs');
4
- const require_generator = require('./generator-CtkCu_MS.cjs');
4
+ const require_generator = require('./generator-Cx-FBKsf.cjs');
5
5
  const __optique_core_constructs = require_man.__toESM(require("@optique/core/constructs"));
6
6
  const __optique_core_primitives = require_man.__toESM(require("@optique/core/primitives"));
7
7
  const __optique_core_valueparser = require_man.__toESM(require("@optique/core/valueparser"));
@@ -17,7 +17,7 @@ const node_url = require_man.__toESM(require("node:url"));
17
17
 
18
18
  //#region deno.json
19
19
  var name = "@optique/man";
20
- var version = "1.3.1";
20
+ var version = "1.3.3";
21
21
  var license = "MIT";
22
22
  var exports$1 = {
23
23
  ".": "./src/index.ts",
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import "./roff-Bh9bsH6u.js";
3
- import "./man-Cq0qfXg0.js";
4
- import { generateManPageAsync } from "./generator-DywTJCMH.js";
3
+ import "./man-hrFQUZQw.js";
4
+ import { generateManPageAsync } from "./generator-r2ZeAR1V.js";
5
5
  import { object } from "@optique/core/constructs";
6
6
  import { argument, option } from "@optique/core/primitives";
7
7
  import { choice, string } from "@optique/core/valueparser";
@@ -17,7 +17,7 @@ import { fileURLToPath, pathToFileURL } from "node:url";
17
17
 
18
18
  //#region deno.json
19
19
  var name = "@optique/man";
20
- var version = "1.3.1";
20
+ var version = "1.3.3";
21
21
  var license = "MIT";
22
22
  var exports = {
23
23
  ".": "./src/index.ts",
@@ -1,4 +1,4 @@
1
- import { ManPageOptions } from "./man-CHYiSoI_.js";
1
+ import { ManPageOptions } from "./man-Ciuegxoi.js";
2
2
  import { Program } from "@optique/core/program";
3
3
  import { Mode, ModeValue, Parser } from "@optique/core/parser";
4
4
 
@@ -1,4 +1,4 @@
1
- import { ManPageOptions } from "./man-C3FUTPuQ.cjs";
1
+ import { ManPageOptions } from "./man-BQpizqcO.cjs";
2
2
  import { Mode, ModeValue, Parser } from "@optique/core/parser";
3
3
  import { Program } from "@optique/core/program";
4
4
 
@@ -1,4 +1,4 @@
1
- const require_man = require('./man-C44Q4VSc.cjs');
1
+ const require_man = require('./man-BRIf09IL.cjs');
2
2
  const __optique_core_parser = require_man.__toESM(require("@optique/core/parser"));
3
3
 
4
4
  //#region src/generator.ts
@@ -1,4 +1,4 @@
1
- import { formatDocPageAsMan } from "./man-Cq0qfXg0.js";
1
+ import { formatDocPageAsMan } from "./man-hrFQUZQw.js";
2
2
  import { getDocPageAsync, getDocPageSync } from "@optique/core/parser";
3
3
 
4
4
  //#region src/generator.ts
@@ -1,6 +1,6 @@
1
- require('./man-C44Q4VSc.cjs');
1
+ require('./man-BRIf09IL.cjs');
2
2
  require('./roff-C8MvQ2tL.cjs');
3
- const require_generator = require('./generator-CtkCu_MS.cjs');
3
+ const require_generator = require('./generator-Cx-FBKsf.cjs');
4
4
 
5
5
  exports.generateManPage = require_generator.generateManPage;
6
6
  exports.generateManPageAsync = require_generator.generateManPageAsync;
@@ -1,3 +1,3 @@
1
- import "./man-C3FUTPuQ.cjs";
2
- import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-I9cXlw1Z.cjs";
1
+ import "./man-BQpizqcO.cjs";
2
+ import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-CZaQyGmU.cjs";
3
3
  export { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync };
@@ -1,3 +1,3 @@
1
- import "./man-CHYiSoI_.js";
2
- import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-MbR1I1SH.js";
1
+ import "./man-Ciuegxoi.js";
2
+ import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-B6ZmkvAw.js";
3
3
  export { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync };
package/dist/generator.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import "./roff-Bh9bsH6u.js";
2
- import "./man-Cq0qfXg0.js";
3
- import { generateManPage, generateManPageAsync, generateManPageSync } from "./generator-DywTJCMH.js";
2
+ import "./man-hrFQUZQw.js";
3
+ import { generateManPage, generateManPageAsync, generateManPageSync } from "./generator-r2ZeAR1V.js";
4
4
 
5
5
  export { generateManPage, generateManPageAsync, generateManPageSync };
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
- const require_man = require('./man-C44Q4VSc.cjs');
1
+ const require_man = require('./man-BRIf09IL.cjs');
2
2
  const require_roff = require('./roff-C8MvQ2tL.cjs');
3
- const require_generator = require('./generator-CtkCu_MS.cjs');
3
+ const require_generator = require('./generator-Cx-FBKsf.cjs');
4
4
 
5
5
  exports.escapeHyphens = require_roff.escapeHyphens;
6
6
  exports.escapeQuotedValue = require_roff.escapeQuotedValue;
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { ManPageOptions, formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-C3FUTPuQ.cjs";
2
- import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-I9cXlw1Z.cjs";
1
+ import { ManPageOptions, formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-BQpizqcO.cjs";
2
+ import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-CZaQyGmU.cjs";
3
3
  import { RoffFormatOptions, escapeHyphens, escapeQuotedValue, escapeRequestArg, escapeRoff, formatMessageAsRoff } from "./roff-Cpm_FJok.cjs";
4
4
  export { type GenerateManPageOptions, type GenerateManPageProgramOptions, type ManPageOptions, type RoffFormatOptions, escapeHyphens, escapeQuotedValue, escapeRequestArg, escapeRoff, formatDateForMan, formatDocPageAsMan, formatMessageAsRoff, formatUsageTermAsRoff, generateManPage, generateManPageAsync, generateManPageSync };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ManPageOptions, formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-CHYiSoI_.js";
2
- import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-MbR1I1SH.js";
1
+ import { ManPageOptions, formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-Ciuegxoi.js";
2
+ import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-B6ZmkvAw.js";
3
3
  import { RoffFormatOptions, escapeHyphens, escapeQuotedValue, escapeRequestArg, escapeRoff, formatMessageAsRoff } from "./roff-DkJvVQ1o.js";
4
4
  export { type GenerateManPageOptions, type GenerateManPageProgramOptions, type ManPageOptions, type RoffFormatOptions, escapeHyphens, escapeQuotedValue, escapeRequestArg, escapeRoff, formatDateForMan, formatDocPageAsMan, formatMessageAsRoff, formatUsageTermAsRoff, generateManPage, generateManPageAsync, generateManPageSync };
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { escapeHyphens, escapeQuotedValue, escapeRequestArg, escapeRoff, formatMessageAsRoff } from "./roff-Bh9bsH6u.js";
2
- import { formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-Cq0qfXg0.js";
3
- import { generateManPage, generateManPageAsync, generateManPageSync } from "./generator-DywTJCMH.js";
2
+ import { formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-hrFQUZQw.js";
3
+ import { generateManPage, generateManPageAsync, generateManPageSync } from "./generator-r2ZeAR1V.js";
4
4
 
5
5
  export { escapeHyphens, escapeQuotedValue, escapeRequestArg, escapeRoff, formatDateForMan, formatDocPageAsMan, formatMessageAsRoff, formatUsageTermAsRoff, generateManPage, generateManPageAsync, generateManPageSync };
@@ -114,6 +114,8 @@ interface ManPageOptions {
114
114
  declare function formatDateForMan(date: string | Date | undefined): string | undefined;
115
115
  /**
116
116
  * Formats a single {@link UsageTerm} as roff markup for the SYNOPSIS section.
117
+ * Optionality follows the supplied usage wrappers. Usage describes display
118
+ * structure; empty-input acceptance depends on the parser's runtime behavior.
117
119
  *
118
120
  * @param term The usage term to format.
119
121
  * @returns The roff-formatted string.
@@ -64,6 +64,8 @@ function formatCommandNameAsRoff(name) {
64
64
  }
65
65
  /**
66
66
  * Formats a single {@link UsageTerm} as roff markup for the SYNOPSIS section.
67
+ * Optionality follows the supplied usage wrappers. Usage describes display
68
+ * structure; empty-input acceptance depends on the parser's runtime behavior.
67
69
  *
68
70
  * @param term The usage term to format.
69
71
  * @returns The roff-formatted string.
@@ -74,12 +76,12 @@ function formatUsageTermAsRoff(term) {
74
76
  return formatUsageTermAsRoffInternal(term, false);
75
77
  }
76
78
  /**
77
- * Returns whether a usage list contains exactly one visible term that
78
- * produces its own brackets. When true, a parent wrapper can safely elide
79
- * its own brackets to avoid redundant nesting. Multiple bracket-producing
80
- * siblings must keep their individual brackets for disambiguation.
79
+ * Returns whether a usage list contains exactly one visible term that can
80
+ * share enclosing brackets. Options need no brackets of their own, while
81
+ * optional and repeated terms can elide redundant brackets. Multiple
82
+ * visible siblings must retain their individual grouping boundaries.
81
83
  */
82
- function hasSingleBracketedTerm(terms) {
84
+ function hasSingleElidableTerm(terms) {
83
85
  const visible = terms.filter((t$1) => !("hidden" in t$1 && (0, __optique_core_usage.isUsageHidden)(t$1.hidden)));
84
86
  if (visible.length !== 1) return false;
85
87
  const t = visible[0];
@@ -99,23 +101,23 @@ function formatUsageTermAsRoffInternal(term, insideBrackets) {
99
101
  case "option": {
100
102
  const names = term.names.map((name) => `\\fB${require_roff.escapeHyphens(name)}\\fR`).join(" | ");
101
103
  const metavarPart = term.metavar ? ` \\fI${require_roff.escapeRoff(term.metavar)}\\fR` : "";
102
- if (insideBrackets) return `${names}${metavarPart}`;
103
- return `[${names}${metavarPart}]`;
104
+ if (insideBrackets || term.names.length < 2) return `${names}${metavarPart}`;
105
+ return `(${names})${metavarPart}`;
104
106
  }
105
107
  case "command": return formatCommandNameAsRoff(term.name);
106
108
  case "optional": {
107
- const childrenBracketed = hasSingleBracketedTerm(term.terms);
108
- const childIsMultiple = childrenBracketed && hasSingleVisibleTermOfType(term.terms, "multiple");
109
- const inner = formatUsageAsRoffInternal(term.terms, childrenBracketed);
109
+ const childrenElidable = hasSingleElidableTerm(term.terms);
110
+ const childIsMultiple = childrenElidable && hasSingleVisibleTermOfType(term.terms, "multiple");
111
+ const inner = formatUsageAsRoffInternal(term.terms, childrenElidable);
110
112
  if (inner === "") return "";
111
- if (insideBrackets && childrenBracketed && !childIsMultiple) return inner;
113
+ if (insideBrackets && childrenElidable && !childIsMultiple) return inner;
112
114
  return `[${inner}]`;
113
115
  }
114
116
  case "multiple": {
115
117
  const wrapInBrackets = term.min < 1;
116
- const childrenBracketed = hasSingleBracketedTerm(term.terms);
117
- const childIsMultiple = childrenBracketed && hasSingleVisibleTermOfType(term.terms, "multiple");
118
- const passInsideBrackets = wrapInBrackets && childrenBracketed && !childIsMultiple;
118
+ const childrenElidable = hasSingleElidableTerm(term.terms);
119
+ const childIsMultiple = childrenElidable && hasSingleVisibleTermOfType(term.terms, "multiple");
120
+ const passInsideBrackets = wrapInBrackets && childrenElidable && !childIsMultiple;
119
121
  const inner = formatUsageAsRoffInternal(term.terms, passInsideBrackets);
120
122
  if (inner === "") return "";
121
123
  if (wrapInBrackets) {
@@ -114,6 +114,8 @@ interface ManPageOptions {
114
114
  declare function formatDateForMan(date: string | Date | undefined): string | undefined;
115
115
  /**
116
116
  * Formats a single {@link UsageTerm} as roff markup for the SYNOPSIS section.
117
+ * Optionality follows the supplied usage wrappers. Usage describes display
118
+ * structure; empty-input acceptance depends on the parser's runtime behavior.
117
119
  *
118
120
  * @param term The usage term to format.
119
121
  * @returns The roff-formatted string.
@@ -41,6 +41,8 @@ function formatCommandNameAsRoff(name) {
41
41
  }
42
42
  /**
43
43
  * Formats a single {@link UsageTerm} as roff markup for the SYNOPSIS section.
44
+ * Optionality follows the supplied usage wrappers. Usage describes display
45
+ * structure; empty-input acceptance depends on the parser's runtime behavior.
44
46
  *
45
47
  * @param term The usage term to format.
46
48
  * @returns The roff-formatted string.
@@ -51,12 +53,12 @@ function formatUsageTermAsRoff(term) {
51
53
  return formatUsageTermAsRoffInternal(term, false);
52
54
  }
53
55
  /**
54
- * Returns whether a usage list contains exactly one visible term that
55
- * produces its own brackets. When true, a parent wrapper can safely elide
56
- * its own brackets to avoid redundant nesting. Multiple bracket-producing
57
- * siblings must keep their individual brackets for disambiguation.
56
+ * Returns whether a usage list contains exactly one visible term that can
57
+ * share enclosing brackets. Options need no brackets of their own, while
58
+ * optional and repeated terms can elide redundant brackets. Multiple
59
+ * visible siblings must retain their individual grouping boundaries.
58
60
  */
59
- function hasSingleBracketedTerm(terms) {
61
+ function hasSingleElidableTerm(terms) {
60
62
  const visible = terms.filter((t$1) => !("hidden" in t$1 && isUsageHidden(t$1.hidden)));
61
63
  if (visible.length !== 1) return false;
62
64
  const t = visible[0];
@@ -76,23 +78,23 @@ function formatUsageTermAsRoffInternal(term, insideBrackets) {
76
78
  case "option": {
77
79
  const names = term.names.map((name) => `\\fB${escapeHyphens(name)}\\fR`).join(" | ");
78
80
  const metavarPart = term.metavar ? ` \\fI${escapeRoff(term.metavar)}\\fR` : "";
79
- if (insideBrackets) return `${names}${metavarPart}`;
80
- return `[${names}${metavarPart}]`;
81
+ if (insideBrackets || term.names.length < 2) return `${names}${metavarPart}`;
82
+ return `(${names})${metavarPart}`;
81
83
  }
82
84
  case "command": return formatCommandNameAsRoff(term.name);
83
85
  case "optional": {
84
- const childrenBracketed = hasSingleBracketedTerm(term.terms);
85
- const childIsMultiple = childrenBracketed && hasSingleVisibleTermOfType(term.terms, "multiple");
86
- const inner = formatUsageAsRoffInternal(term.terms, childrenBracketed);
86
+ const childrenElidable = hasSingleElidableTerm(term.terms);
87
+ const childIsMultiple = childrenElidable && hasSingleVisibleTermOfType(term.terms, "multiple");
88
+ const inner = formatUsageAsRoffInternal(term.terms, childrenElidable);
87
89
  if (inner === "") return "";
88
- if (insideBrackets && childrenBracketed && !childIsMultiple) return inner;
90
+ if (insideBrackets && childrenElidable && !childIsMultiple) return inner;
89
91
  return `[${inner}]`;
90
92
  }
91
93
  case "multiple": {
92
94
  const wrapInBrackets = term.min < 1;
93
- const childrenBracketed = hasSingleBracketedTerm(term.terms);
94
- const childIsMultiple = childrenBracketed && hasSingleVisibleTermOfType(term.terms, "multiple");
95
- const passInsideBrackets = wrapInBrackets && childrenBracketed && !childIsMultiple;
95
+ const childrenElidable = hasSingleElidableTerm(term.terms);
96
+ const childIsMultiple = childrenElidable && hasSingleVisibleTermOfType(term.terms, "multiple");
97
+ const passInsideBrackets = wrapInBrackets && childrenElidable && !childIsMultiple;
96
98
  const inner = formatUsageAsRoffInternal(term.terms, passInsideBrackets);
97
99
  if (inner === "") return "";
98
100
  if (wrapInBrackets) {
package/dist/man.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_man = require('./man-C44Q4VSc.cjs');
1
+ const require_man = require('./man-BRIf09IL.cjs');
2
2
  require('./roff-C8MvQ2tL.cjs');
3
3
 
4
4
  exports.formatDateForMan = require_man.formatDateForMan;
package/dist/man.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- import { ManPageOptions, ManPageSection, formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-C3FUTPuQ.cjs";
1
+ import { ManPageOptions, ManPageSection, formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-BQpizqcO.cjs";
2
2
  export { ManPageOptions, ManPageSection, formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff };
package/dist/man.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { ManPageOptions, ManPageSection, formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-CHYiSoI_.js";
1
+ import { ManPageOptions, ManPageSection, formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-Ciuegxoi.js";
2
2
  export { ManPageOptions, ManPageSection, formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff };
package/dist/man.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import "./roff-Bh9bsH6u.js";
2
- import { formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-Cq0qfXg0.js";
2
+ import { formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-hrFQUZQw.js";
3
3
 
4
4
  export { formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optique/man",
3
- "version": "1.3.1",
3
+ "version": "1.3.3",
4
4
  "description": "Man page generator for Optique CLI parsers",
5
5
  "keywords": [
6
6
  "CLI",
@@ -90,11 +90,11 @@
90
90
  "optique-man": "./dist/cli.js"
91
91
  },
92
92
  "dependencies": {
93
- "@optique/core": "1.3.1",
94
- "@optique/run": "1.3.1"
93
+ "@optique/core": "1.3.3",
94
+ "@optique/run": "1.3.3"
95
95
  },
96
96
  "devDependencies": {
97
- "@optique/testing": "1.3.1",
97
+ "@optique/testing": "1.3.3",
98
98
  "@types/node": "^24.0.0",
99
99
  "tsdown": "^0.13.0",
100
100
  "tsx": "^4.21.0",