@optique/man 1.4.0-dev.2683 → 1.4.0-dev.2709

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-BmoPyf06.cjs');
2
+ const require_man = require('./man-DGAR8ct4.cjs');
3
3
  require('./roff-C8MvQ2tL.cjs');
4
- const require_generator = require('./generator-BOnOtkJo.cjs');
4
+ const require_generator = require('./generator-BAYozOjf.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.4.0-dev.2683+bacbadf3";
20
+ var version = "1.4.0-dev.2709+c0360f12";
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-BS0Yx0Li.js";
4
- import { generateManPageAsync } from "./generator-DQzLiBjq.js";
3
+ import "./man-fxL2soSJ.js";
4
+ import { generateManPageAsync } from "./generator-D36bK8bw.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.4.0-dev.2683+bacbadf3";
20
+ var version = "1.4.0-dev.2709+c0360f12";
21
21
  var license = "MIT";
22
22
  var exports = {
23
23
  ".": "./src/index.ts",
@@ -1,4 +1,4 @@
1
- const require_man = require('./man-BmoPyf06.cjs');
1
+ const require_man = require('./man-DGAR8ct4.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 { ManPageOptions } from "./man-BON751gT.cjs";
1
+ import { ManPageOptions } from "./man-Czp4fceb.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
- import { ManPageOptions } from "./man-CwjJZCko.js";
1
+ import { ManPageOptions } from "./man-DgWDaZfO.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 { formatDocPageAsMan } from "./man-BS0Yx0Li.js";
1
+ import { formatDocPageAsMan } from "./man-fxL2soSJ.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-BmoPyf06.cjs');
1
+ require('./man-DGAR8ct4.cjs');
2
2
  require('./roff-C8MvQ2tL.cjs');
3
- const require_generator = require('./generator-BOnOtkJo.cjs');
3
+ const require_generator = require('./generator-BAYozOjf.cjs');
4
4
 
5
5
  exports.generateManPage = require_generator.generateManPage;
6
6
  exports.generateManPageAsync = require_generator.generateManPageAsync;
@@ -1,3 +1,3 @@
1
- import "./man-BON751gT.cjs";
2
- import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-DpK0Sjwb.cjs";
1
+ import "./man-Czp4fceb.cjs";
2
+ import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-BOtzZZU6.cjs";
3
3
  export { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync };
@@ -1,3 +1,3 @@
1
- import "./man-CwjJZCko.js";
2
- import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-l5JcmLW0.js";
1
+ import "./man-DgWDaZfO.js";
2
+ import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-BZBZucRz.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-BS0Yx0Li.js";
3
- import { generateManPage, generateManPageAsync, generateManPageSync } from "./generator-DQzLiBjq.js";
2
+ import "./man-fxL2soSJ.js";
3
+ import { generateManPage, generateManPageAsync, generateManPageSync } from "./generator-D36bK8bw.js";
4
4
 
5
5
  export { generateManPage, generateManPageAsync, generateManPageSync };
package/dist/index.cjs CHANGED
@@ -1,6 +1,6 @@
1
- const require_man = require('./man-BmoPyf06.cjs');
1
+ const require_man = require('./man-DGAR8ct4.cjs');
2
2
  const require_roff = require('./roff-C8MvQ2tL.cjs');
3
- const require_generator = require('./generator-BOnOtkJo.cjs');
3
+ const require_generator = require('./generator-BAYozOjf.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-BON751gT.cjs";
2
- import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-DpK0Sjwb.cjs";
1
+ import { ManPageOptions, formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-Czp4fceb.cjs";
2
+ import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-BOtzZZU6.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-CwjJZCko.js";
2
- import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-l5JcmLW0.js";
1
+ import { ManPageOptions, formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-DgWDaZfO.js";
2
+ import { GenerateManPageOptions, GenerateManPageProgramOptions, generateManPage, generateManPageAsync, generateManPageSync } from "./generator-BZBZucRz.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-BS0Yx0Li.js";
3
- import { generateManPage, generateManPageAsync, generateManPageSync } from "./generator-DQzLiBjq.js";
2
+ import { formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-fxL2soSJ.js";
3
+ import { generateManPage, generateManPageAsync, generateManPageSync } from "./generator-D36bK8bw.js";
4
4
 
5
5
  export { escapeHyphens, escapeQuotedValue, escapeRequestArg, escapeRoff, formatDateForMan, formatDocPageAsMan, formatMessageAsRoff, formatUsageTermAsRoff, generateManPage, generateManPageAsync, generateManPageSync };
@@ -132,6 +132,9 @@ interface ManPageOptions {
132
132
  declare function formatDateForMan(date: string | Date | undefined): string | undefined;
133
133
  /**
134
134
  * Formats a single {@link UsageTerm} as roff markup for the SYNOPSIS section.
135
+ * Optionality follows the supplied usage wrappers, except that a group
136
+ * recording `acceptsEmpty` is drawn as omissible exactly when its parser
137
+ * accepts an empty argument list, as in `formatUsage()`.
135
138
  *
136
139
  * @param term The usage term to format.
137
140
  * @returns The roff-formatted string.
@@ -24,6 +24,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
24
24
  const require_roff = require('./roff-C8MvQ2tL.cjs');
25
25
  const __optique_core_doc = __toESM(require("@optique/core/doc"));
26
26
  const __optique_core_usage = __toESM(require("@optique/core/usage"));
27
+ const __optique_core_internal_usage = __toESM(require("@optique/core/internal/usage"));
27
28
 
28
29
  //#region src/man.ts
29
30
  /**
@@ -65,6 +66,9 @@ function formatCommandNameAsRoff(name) {
65
66
  }
66
67
  /**
67
68
  * Formats a single {@link UsageTerm} as roff markup for the SYNOPSIS section.
69
+ * Optionality follows the supplied usage wrappers, except that a group
70
+ * recording `acceptsEmpty` is drawn as omissible exactly when its parser
71
+ * accepts an empty argument list, as in `formatUsage()`.
68
72
  *
69
73
  * @param term The usage term to format.
70
74
  * @returns The roff-formatted string.
@@ -72,15 +76,15 @@ function formatCommandNameAsRoff(name) {
72
76
  * @since 0.10.0
73
77
  */
74
78
  function formatUsageTermAsRoff(term) {
75
- return formatUsageTermAsRoffInternal(term, false);
79
+ return formatUsageAsRoff([term]);
76
80
  }
77
81
  /**
78
- * Returns whether a usage list contains exactly one visible term that
79
- * produces its own brackets. When true, a parent wrapper can safely elide
80
- * its own brackets to avoid redundant nesting. Multiple bracket-producing
81
- * siblings must keep their individual brackets for disambiguation.
82
+ * Returns whether a usage list contains exactly one visible term that can
83
+ * share enclosing brackets. Options need no brackets of their own, while
84
+ * optional and repeated terms can elide redundant brackets. Multiple
85
+ * visible siblings must retain their individual grouping boundaries.
82
86
  */
83
- function hasSingleBracketedTerm(terms) {
87
+ function hasSingleElidableTerm(terms) {
84
88
  const visible = terms.filter((t$1) => !("hidden" in t$1 && (0, __optique_core_usage.isUsageHidden)(t$1.hidden)));
85
89
  if (visible.length !== 1) return false;
86
90
  const t = visible[0];
@@ -100,23 +104,23 @@ function formatUsageTermAsRoffInternal(term, insideBrackets) {
100
104
  case "option": {
101
105
  const names = term.names.map((name) => `\\fB${require_roff.escapeHyphens(name)}\\fR`).join(" | ");
102
106
  const metavarPart = term.metavar ? ` \\fI${require_roff.escapeRoff(term.metavar)}\\fR` : "";
103
- if (insideBrackets) return `${names}${metavarPart}`;
104
- return `[${names}${metavarPart}]`;
107
+ if (insideBrackets || term.names.length < 2) return `${names}${metavarPart}`;
108
+ return `(${names})${metavarPart}`;
105
109
  }
106
110
  case "command": return formatCommandNameAsRoff(term.name);
107
111
  case "optional": {
108
- const childrenBracketed = hasSingleBracketedTerm(term.terms);
109
- const childIsMultiple = childrenBracketed && hasSingleVisibleTermOfType(term.terms, "multiple");
110
- const inner = formatUsageAsRoffInternal(term.terms, childrenBracketed);
112
+ const childrenElidable = hasSingleElidableTerm(term.terms);
113
+ const childIsMultiple = childrenElidable && hasSingleVisibleTermOfType(term.terms, "multiple");
114
+ const inner = formatUsageAsRoffInternal(term.terms, childrenElidable);
111
115
  if (inner === "") return "";
112
- if (insideBrackets && childrenBracketed && !childIsMultiple) return inner;
116
+ if (insideBrackets && childrenElidable && !childIsMultiple) return inner;
113
117
  return `[${inner}]`;
114
118
  }
115
119
  case "multiple": {
116
120
  const wrapInBrackets = term.min < 1;
117
- const childrenBracketed = hasSingleBracketedTerm(term.terms);
118
- const childIsMultiple = childrenBracketed && hasSingleVisibleTermOfType(term.terms, "multiple");
119
- const passInsideBrackets = wrapInBrackets && childrenBracketed && !childIsMultiple;
121
+ const childrenElidable = hasSingleElidableTerm(term.terms);
122
+ const childIsMultiple = childrenElidable && hasSingleVisibleTermOfType(term.terms, "multiple");
123
+ const passInsideBrackets = wrapInBrackets && childrenElidable && !childIsMultiple;
120
124
  const inner = formatUsageAsRoffInternal(term.terms, passInsideBrackets);
121
125
  if (inner === "") return "";
122
126
  if (wrapInBrackets) {
@@ -148,7 +152,7 @@ function formatUsageTermAsRoffInternal(term, insideBrackets) {
148
152
  * @returns The roff-formatted string.
149
153
  */
150
154
  function formatUsageAsRoff(usage) {
151
- return formatUsageAsRoffInternal(usage, false);
155
+ return formatUsageAsRoffInternal((0, __optique_core_internal_usage.resolveUsageForDisplay)(usage, __optique_core_usage.isUsageHidden), false);
152
156
  }
153
157
  function formatUsageAsRoffInternal(usage, insideBrackets) {
154
158
  return usage.map((term) => formatUsageTermAsRoffInternal(term, insideBrackets)).filter((s) => s !== "").join(" ");
@@ -132,6 +132,9 @@ interface ManPageOptions {
132
132
  declare function formatDateForMan(date: string | Date | undefined): string | undefined;
133
133
  /**
134
134
  * Formats a single {@link UsageTerm} as roff markup for the SYNOPSIS section.
135
+ * Optionality follows the supplied usage wrappers, except that a group
136
+ * recording `acceptsEmpty` is drawn as omissible exactly when its parser
137
+ * accepts an empty argument list, as in `formatUsage()`.
135
138
  *
136
139
  * @param term The usage term to format.
137
140
  * @returns The roff-formatted string.
@@ -1,6 +1,7 @@
1
1
  import { escapeHyphens, escapeRequestArg, escapeRoff, formatMessageAsRoff } from "./roff-Bh9bsH6u.js";
2
2
  import { deriveEnvironmentSection } from "@optique/core/doc";
3
3
  import { isDocHidden, isUsageHidden } from "@optique/core/usage";
4
+ import { resolveUsageForDisplay } from "@optique/core/internal/usage";
4
5
 
5
6
  //#region src/man.ts
6
7
  /**
@@ -42,6 +43,9 @@ function formatCommandNameAsRoff(name) {
42
43
  }
43
44
  /**
44
45
  * Formats a single {@link UsageTerm} as roff markup for the SYNOPSIS section.
46
+ * Optionality follows the supplied usage wrappers, except that a group
47
+ * recording `acceptsEmpty` is drawn as omissible exactly when its parser
48
+ * accepts an empty argument list, as in `formatUsage()`.
45
49
  *
46
50
  * @param term The usage term to format.
47
51
  * @returns The roff-formatted string.
@@ -49,15 +53,15 @@ function formatCommandNameAsRoff(name) {
49
53
  * @since 0.10.0
50
54
  */
51
55
  function formatUsageTermAsRoff(term) {
52
- return formatUsageTermAsRoffInternal(term, false);
56
+ return formatUsageAsRoff([term]);
53
57
  }
54
58
  /**
55
- * Returns whether a usage list contains exactly one visible term that
56
- * produces its own brackets. When true, a parent wrapper can safely elide
57
- * its own brackets to avoid redundant nesting. Multiple bracket-producing
58
- * siblings must keep their individual brackets for disambiguation.
59
+ * Returns whether a usage list contains exactly one visible term that can
60
+ * share enclosing brackets. Options need no brackets of their own, while
61
+ * optional and repeated terms can elide redundant brackets. Multiple
62
+ * visible siblings must retain their individual grouping boundaries.
59
63
  */
60
- function hasSingleBracketedTerm(terms) {
64
+ function hasSingleElidableTerm(terms) {
61
65
  const visible = terms.filter((t$1) => !("hidden" in t$1 && isUsageHidden(t$1.hidden)));
62
66
  if (visible.length !== 1) return false;
63
67
  const t = visible[0];
@@ -77,23 +81,23 @@ function formatUsageTermAsRoffInternal(term, insideBrackets) {
77
81
  case "option": {
78
82
  const names = term.names.map((name) => `\\fB${escapeHyphens(name)}\\fR`).join(" | ");
79
83
  const metavarPart = term.metavar ? ` \\fI${escapeRoff(term.metavar)}\\fR` : "";
80
- if (insideBrackets) return `${names}${metavarPart}`;
81
- return `[${names}${metavarPart}]`;
84
+ if (insideBrackets || term.names.length < 2) return `${names}${metavarPart}`;
85
+ return `(${names})${metavarPart}`;
82
86
  }
83
87
  case "command": return formatCommandNameAsRoff(term.name);
84
88
  case "optional": {
85
- const childrenBracketed = hasSingleBracketedTerm(term.terms);
86
- const childIsMultiple = childrenBracketed && hasSingleVisibleTermOfType(term.terms, "multiple");
87
- const inner = formatUsageAsRoffInternal(term.terms, childrenBracketed);
89
+ const childrenElidable = hasSingleElidableTerm(term.terms);
90
+ const childIsMultiple = childrenElidable && hasSingleVisibleTermOfType(term.terms, "multiple");
91
+ const inner = formatUsageAsRoffInternal(term.terms, childrenElidable);
88
92
  if (inner === "") return "";
89
- if (insideBrackets && childrenBracketed && !childIsMultiple) return inner;
93
+ if (insideBrackets && childrenElidable && !childIsMultiple) return inner;
90
94
  return `[${inner}]`;
91
95
  }
92
96
  case "multiple": {
93
97
  const wrapInBrackets = term.min < 1;
94
- const childrenBracketed = hasSingleBracketedTerm(term.terms);
95
- const childIsMultiple = childrenBracketed && hasSingleVisibleTermOfType(term.terms, "multiple");
96
- const passInsideBrackets = wrapInBrackets && childrenBracketed && !childIsMultiple;
98
+ const childrenElidable = hasSingleElidableTerm(term.terms);
99
+ const childIsMultiple = childrenElidable && hasSingleVisibleTermOfType(term.terms, "multiple");
100
+ const passInsideBrackets = wrapInBrackets && childrenElidable && !childIsMultiple;
97
101
  const inner = formatUsageAsRoffInternal(term.terms, passInsideBrackets);
98
102
  if (inner === "") return "";
99
103
  if (wrapInBrackets) {
@@ -125,7 +129,7 @@ function formatUsageTermAsRoffInternal(term, insideBrackets) {
125
129
  * @returns The roff-formatted string.
126
130
  */
127
131
  function formatUsageAsRoff(usage) {
128
- return formatUsageAsRoffInternal(usage, false);
132
+ return formatUsageAsRoffInternal(resolveUsageForDisplay(usage, isUsageHidden), false);
129
133
  }
130
134
  function formatUsageAsRoffInternal(usage, insideBrackets) {
131
135
  return usage.map((term) => formatUsageTermAsRoffInternal(term, insideBrackets)).filter((s) => s !== "").join(" ");
package/dist/man.cjs CHANGED
@@ -1,4 +1,4 @@
1
- const require_man = require('./man-BmoPyf06.cjs');
1
+ const require_man = require('./man-DGAR8ct4.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-BON751gT.cjs";
1
+ import { ManPageOptions, ManPageSection, formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-Czp4fceb.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-CwjJZCko.js";
1
+ import { ManPageOptions, ManPageSection, formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-DgWDaZfO.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-BS0Yx0Li.js";
2
+ import { formatDateForMan, formatDocPageAsMan, formatUsageTermAsRoff } from "./man-fxL2soSJ.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.4.0-dev.2683",
3
+ "version": "1.4.0-dev.2709",
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.4.0-dev.2683+bacbadf3",
94
- "@optique/run": "1.4.0-dev.2683+bacbadf3"
93
+ "@optique/core": "1.4.0-dev.2709+c0360f12",
94
+ "@optique/run": "1.4.0-dev.2709+c0360f12"
95
95
  },
96
96
  "devDependencies": {
97
- "@optique/testing": "1.4.0-dev.2683+bacbadf3",
97
+ "@optique/testing": "1.4.0-dev.2709+c0360f12",
98
98
  "@types/node": "^24.0.0",
99
99
  "tsdown": "^0.13.0",
100
100
  "tsx": "^4.21.0",