punctilio 3.13.2 → 4.0.0

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.
@@ -1,7 +1,7 @@
1
1
  - id: punctilio
2
2
  name: punctilio
3
3
  description: Apply punctilio typography transformations to Markdown and HTML files.
4
- entry: punctilio
4
+ entry: punctilio --write
5
5
  language: node
6
6
  types_or: [markdown, html]
7
7
  additional_dependencies:
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Test](https://github.com/alexander-turner/punctilio/actions/workflows/test.yml/badge.svg)](https://github.com/alexander-turner/punctilio/actions/workflows/test.yml)
4
4
  [![Lint](https://github.com/alexander-turner/punctilio/actions/workflows/lint.yml/badge.svg)](https://github.com/alexander-turner/punctilio/actions/workflows/lint.yml)
5
- [![Coverage](https://img.shields.io/badge/coverage-100%25-brightgreen)](https://github.com/alexander-turner/punctilio)
5
+ [![Coverage](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Falexander-turner%2Fpunctilio%2Fbadges%2Fcoverage.json)](https://github.com/alexander-turner/punctilio/actions/workflows/coverage-badge.yml)
6
6
 
7
7
  Pretty good at making your text pretty. The most feature-complete and reliable English typography package. `punctilio` transforms plain ASCII into typographically correct Unicode, even across HTML element boundaries. Try it live at [`turntrout.com/punctilio`](https://turntrout.com/punctilio).
8
8
 
@@ -35,7 +35,7 @@ I tested `punctilio` against [`smartypants`](https://www.npmjs.com/package/smart
35
35
  | :------------------------------------: | :----------------------------------------: | :---------: |
36
36
  | <span class="no-formatting">5x5</span> | <span class="no-formatting">5x5</span> (✗) | 5×5 (✓) |
37
37
 
38
- My [`benchmark.mjs`](https://github.com/alexander-turner/punctilio/blob/main/benchmark.mjs) measures how well libraries handle a [wide range of scenarios](https://github.com/alexander-turner/punctilio/blob/main/benchmark_cases.json). The benchmark normalizes stylistic differences (e.g. non-breaking vs regular space, British vs American dash spacing) for fair comparison.
38
+ My [`benchmark.mjs`](https://github.com/alexander-turner/punctilio/blob/main/benchmark.mjs) measures how well libraries handle a [wide range of scenarios](https://github.com/alexander-turner/punctilio/blob/main/benchmark_cases.json). The benchmark normalizes stylistic differences (e.g. non-breaking vs regular space, British vs American dash spacing) for fair comparison.
39
39
 
40
40
  | Package | Passed (of 151) |
41
41
  | -------------------: | :-------------- |
@@ -46,6 +46,8 @@ My [`benchmark.mjs`](https://github.com/alexander-turner/punctilio/blob/main/ben
46
46
  | `retext-smartypants` | 69 (46%) |
47
47
  | `typograf` | 64 (42%) |
48
48
 
49
+ _Note on benchmark construction: I assembled the initial cases myself. I then sought out cases where `punctilio` failed and competitors succeeded, and improved `punctilio` to succeed there as well. The benchmark may nonetheless remain biased towards `punctilio`._
50
+
49
51
  | Feature | Example | `punctilio` | `smartypants` | `tipograph` | `smartquotes` | `typograf` |
50
52
  | -------------------: | :---------------------------------------------------: | :---------: | :-----------: | :---------: | :-----------: | :--------: |
51
53
  | Smart quotes | <span class="no-formatting">"hello" → “hello”</span> | ✓ | ✓ | ✓ | ✓ | ✓ |
@@ -69,13 +71,21 @@ My [`benchmark.mjs`](https://github.com/alexander-turner/punctilio/blob/main/ben
69
71
 
70
72
  ### Known limitations of `punctilio`
71
73
 
72
- | Pattern | Behavior | Notes |
73
- | :--------------------- | :------------------------- | :------------------------------------------------------------------------------------------- |
74
- | `'99 but 5' clearance` | `5'` not converted to `5′` | Leading apostrophe is indistinguishable from an opening quote without semantic understanding |
74
+ | Input | Behavior | Why |
75
+ | :--- | :--- | :--- |
76
+ | `'99 but 5' clearance` | `5'` stays straight | A leading apostrophe and an opening quote are indistinguishable without semantics |
77
+ | Single-quoted passage over 1,000 chars | Opener becomes an apostrophe | The opener-vs-apostrophe test scans only 1,000 characters ahead for the closing quote |
78
+ | `"?"` with a distant closer | Quote stays straight | Quoted-punctuation detection looks only 50 characters ahead for the closing quote |
79
+ | `word’”’”’.` (5+ nested closers) | 5th-level punctuation not moved | Punctuation placement handles at most 4 consecutive closing quotes |
80
+ | `1-850` | Hyphen kept, not en-dashed | Ranges of the form `1-8XX` are assumed to be US toll-free numbers |
81
+ | `(c) MegaCorp` | `(c)` stays literal | `(c) → ©` requires a nearby year or the word “copyright” |
82
+ | `<textarea>`, other non-allowlisted tags | Left untouched | The rehype plugin transforms only an allowlist of elements (plus custom elements) |
83
+
84
+ Several of these bounds (the 1,000- and 50-character lookaheads, the 4-quote nesting cap) exist to keep the quote regexes provably linear-time; they could be lifted by a single-pass quote scanner.
75
85
 
76
86
  ## Test suite
77
87
 
78
- Setting aside the benchmark, `punctilio`’s test suite runs at 100% branch coverage with well over a thousand tests, including edge cases derived from competitor libraries ([`smartquotes`](https://github.com/kellym/smartquotes.js), [`retext-smartypants`](https://github.com/retextjs/retext-smartypants), [`typograf`](https://github.com/typograf/typograf)) and the [Standard Ebooks typography manual](https://standardebooks.org/manual/). I also verify that all transformations are stable when applied multiple times. Uses [`recheck`](https://makenowjust-labs.github.io/recheck/) to statically verify the absence of inefficient RegEx patterns.
88
+ Setting aside the benchmark, `punctilio`’s test suite runs at 100% branch coverage with well over a thousand tests, including edge cases derived from competitor libraries ([`smartquotes`](https://github.com/kellym/smartquotes.js), [`retext-smartypants`](https://github.com/retextjs/retext-smartypants), [`typograf`](https://github.com/typograf/typograf)) and the [Standard Ebooks typography manual](https://standardebooks.org/manual/). The 100% figure isn’t hand-maintained: Jest’s `coverageThreshold` requires 100% branches, functions, lines, and statements, CI fails below that, and the coverage badge above is regenerated from the actual coverage report on every push to `main`. I also verify that all transformations are stable when applied multiple times. Uses [`recheck`](https://makenowjust-labs.github.io/recheck/) to statically verify the absence of inefficient RegEx patterns.
79
89
 
80
90
  ## Works with HTML DOMs via separation boundaries
81
91
 
@@ -133,10 +143,12 @@ transform(text, {
133
143
  superscript: false, // 1st → 1ˢᵗ
134
144
  ligatures: false, // ??? → ⁇, ?! → ⁈, !? → ⁉, !!! → !
135
145
  nbsp: true, // non-breaking spaces (after honorifics, between numbers and units, etc.)
136
- checkIdempotency: true, // verify transform(transform(x)) === transform(x)
146
+ checkIdempotency: false, // verify transform(transform(x)) === transform(x); doubles the work
137
147
  });
138
148
  ```
139
149
 
150
+ Markdown sinks (`remarkPunctilio`, `transformMarkdown`, the Prettier plugin, and the CLI for Markdown files) default `nbsp` to `false` instead, because invisible U+00A0 characters in Markdown source files break `grep` and Ctrl+F. Pass `nbsp: true` (or the `--nbsp` CLI flag) to opt in.
151
+
140
152
  The `rehype` plugin accepts additional options. Elements matching any `skipTags` tag name or carrying any `skipClasses` class are left untransformed (values shown are the defaults for `skipTags`):
141
153
 
142
154
  ```typescript
@@ -192,12 +204,15 @@ Code spans, fenced code blocks, and inline HTML are left untouched. The plugin c
192
204
  ### CLI
193
205
 
194
206
  ```bash
195
- punctilio README.md 'docs/**/*.md' # format in place; globs expand internally
196
- punctilio --check README.md # exit 1 if it would change anything
207
+ punctilio README.md # print formatted output to stdout
208
+ punctilio --write README.md 'docs/**/*.md' # format in place; globs expand internally
209
+ punctilio --check README.md # exit 1 if it would change anything
197
210
  echo '"Hi" -- there' | punctilio - --type md
198
211
  ```
199
212
 
200
- Subsequent runs skip files unchanged since the previous invocation via an incremental cache at `node_modules/.cache/punctilio/cache.json` (use `--no-cache` to disable, `--cache-location <path>` to override). Config is loaded from `.punctiliorc[.json|.yaml|.js]`, `punctilio.config.js`, or a `"punctilio"` key in `package.json` (via [`cosmiconfig`](https://github.com/cosmiconfig/cosmiconfig)); CLI flags override. A `.punctilioignore` (gitignore syntax) in cwd excludes matching files.
213
+ Two caveats before pointing the CLI (or the [pre-commit hook](#pre-commit) below) at an existing repo. First, the Markdown path re-serializes the whole document through `remark-stringify`, so the first run may produce formatting diffs beyond typography—escaping, list markers, and link syntax get normalized. Like Prettier, the output then stays stable on subsequent runs. If you already use Prettier, the [Prettier plugin](#prettier-plugin) avoids this double-formatting entirely, since Prettier keeps owning the printing.
214
+
215
+ Second, non-breaking spaces (U+00A0) are invisible in source files: they render fine, but they aren’t regular spaces, so Ctrl+F and `grep` matches against the source can miss. Markdown files therefore default to `nbsp` off; pass `--nbsp` (or set `nbsp: true` in config) to opt in. HTML files keep the default of `nbsp` on; pass `--no-nbsp` to keep them ASCII-spaced.
201
216
 
202
217
  ### pre-commit
203
218
 
@@ -229,5 +244,9 @@ repos:
229
244
  - Single quotes remain as curly quotes
230
245
  - Punctuation outside quotes
231
246
  - Setting either style to `none` skips the entire transform category: `punctuationStyle: 'none'` preserves straight quotes, apostrophes, and prime marks; `dashStyle: 'none'` preserves all hyphens, number ranges, date ranges, and minus signs.
232
- - `punctilio` is idempotent by design: `transform(transform(text))` always equals `transform(text)`. This is verified automatically by default (`checkIdempotency: true`). Set `checkIdempotency: false` to disable the check.
247
+ - `punctilio` is idempotent by design: `transform(transform(text))` always equals `transform(text)`. Set `checkIdempotency: true` to verify this on every call (off by default, since the check doubles the work); `punctilio`’s own test suite runs with it enabled.
233
248
  - Use `classifyApostrophes(text)` to distinguish apostrophes from closing single quotes. It returns text with apostrophes as U+02BC (MODIFIER LETTER APOSTROPHE) and closing quotes as U+2019 (RIGHT SINGLE QUOTATION MARK). Per the [Unicode Standard](https://www.unicode.org/versions/Unicode16.0.0/core-spec/chapter-6/#G30602), `transform()` and `niceQuotes()` use U+2019 for both in their output.
249
+
250
+ ## Changelog
251
+
252
+ See [CHANGELOG.md](CHANGELOG.md) for release history.
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAsBA,UAAU,KAAK;IACb,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;IACrC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAA;CAC9B;AA6OD,4EAA4E;AAC5E,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAyBvE"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAsBA,UAAU,KAAK;IACb,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;IACrC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,CAAA;CAC9B;AAkXD,4EAA4E;AAC5E,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBvE"}
package/dist/cli.js CHANGED
@@ -4,15 +4,15 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
4
4
  import { readFile, writeFile } from "node:fs/promises";
5
5
  import { dirname, extname, isAbsolute, join, relative, resolve } from "node:path";
6
6
  import { fileURLToPath } from "node:url";
7
- import { Command, CommanderError, Option } from "commander";
7
+ import { parseArgs } from "node:util";
8
8
  import { cosmiconfig } from "cosmiconfig";
9
9
  import ignore from "ignore";
10
10
  import { glob } from "tinyglobby";
11
- import { transformMarkdown } from "./markdown.js";
12
- import { transformHtml } from "./html.js";
11
+ import { MARKDOWN_ONLY_OPTION_KEYS, MARKDOWN_OPTION_KEYS, transformMarkdown } from "./markdown.js";
12
+ import { HTML_ONLY_OPTION_KEYS, HTML_OPTION_KEYS, transformHtml } from "./html.js";
13
13
  import { PUNCTUATION_STYLES } from "./quotes.js";
14
14
  import { DASH_STYLES } from "./dashes.js";
15
- import { stableStringify } from "./utils.js";
15
+ import { assertKnownOptionKeys, omitKeys, stableStringify } from "./utils.js";
16
16
  class UsageError extends Error {
17
17
  }
18
18
  const FILE_TYPES = ["md", "html"];
@@ -21,42 +21,148 @@ const BULLET_MARKERS = ["-", "*", "+"];
21
21
  const RULE_MARKERS = ["-", "*", "_"];
22
22
  const MARKDOWN_EXTENSIONS = new Set([".md", ".markdown"]);
23
23
  const HTML_EXTENSIONS = new Set([".html", ".htm"]);
24
- function buildProgram(version, io) {
25
- return new Command()
26
- .name("punctilio")
27
- .description("Apply typographic improvements to Markdown and HTML files.")
28
- .version(version, "-V, --version", "show version")
29
- .argument("[files...]", "files to format (pass '-' to read from stdin)")
30
- .option("--check", "exit 1 if any file would change; write nothing")
31
- .option("--config <path>", "path to a punctilio config file (otherwise auto-discovered)")
32
- .option("--no-config", "ignore any auto-discovered config file")
33
- .option("--ignore-path <path>", "path to an ignore file (otherwise .punctilioignore in cwd)")
34
- .option("--no-cache", "disable the incremental cache (default location node_modules/.cache/punctilio/cache.json)")
35
- .option("--cache-location <path>", "override the cache file location")
36
- .option("--stdin-filepath <path>", "treat stdin as if it were this filename (infers type from extension)")
37
- .addOption(new Option("--type <type>", "force file type (otherwise inferred from extension)").choices(FILE_TYPES))
38
- .addOption(new Option("--punctuation-style <style>", "quote and punctuation style").choices(PUNCTUATION_STYLES))
39
- .addOption(new Option("--dash-style <style>", "dash style").choices(DASH_STYLES))
40
- .option("--no-symbols", "disable symbol transforms (ellipsis, ×, ©, etc.)")
41
- .option("--no-nbsp", "disable non-breaking space insertion")
42
- .option("--no-collapse-spaces", "preserve runs of consecutive spaces")
43
- .option("--no-arrows", "disable -> → arrow transforms")
44
- .option("--fractions", "enable 1/2 → ½")
45
- .option("--degrees", "enable 20 C → 20 °C")
46
- .option("--superscript", "enable 1st → 1ˢᵗ")
47
- .option("--ligatures", "enable !? → ⁉")
48
- .addOption(new Option("--emphasis-marker <char>", "markdown emphasis character").choices(EMPHASIS_MARKERS))
49
- .addOption(new Option("--strong-marker <char>", "markdown strong emphasis character").choices(EMPHASIS_MARKERS))
50
- .addOption(new Option("--bullet-marker <char>", "markdown list bullet character").choices(BULLET_MARKERS))
51
- .addOption(new Option("--rule-marker <char>", "markdown thematic break character").choices(RULE_MARKERS))
52
- .option("--skip-tag <tag...>", "HTML tags whose contents are left alone (repeatable)")
53
- .option("--skip-class <class...>", "HTML class names whose elements are skipped (repeatable)")
54
- .option("--no-fragment", "parse input as a full HTML document")
55
- .exitOverride()
56
- .configureOutput({
57
- writeOut: (str) => { io.stdout.write(str); },
58
- writeErr: (str) => { io.stderr.write(str); },
59
- });
24
+ const PARSE_ARGS_OPTIONS = {
25
+ "bullet-marker": { type: "string" },
26
+ "cache-location": { type: "string" },
27
+ check: { type: "boolean" },
28
+ config: { type: "string" },
29
+ "dash-style": { type: "string" },
30
+ degrees: { type: "boolean" },
31
+ "emphasis-marker": { type: "string" },
32
+ fractions: { type: "boolean" },
33
+ help: { short: "h", type: "boolean" },
34
+ "ignore-path": { type: "string" },
35
+ ligatures: { type: "boolean" },
36
+ nbsp: { type: "boolean" },
37
+ "no-arrows": { type: "boolean" },
38
+ "no-cache": { type: "boolean" },
39
+ "no-collapse-spaces": { type: "boolean" },
40
+ "no-config": { type: "boolean" },
41
+ "no-fragment": { type: "boolean" },
42
+ "no-nbsp": { type: "boolean" },
43
+ "no-symbols": { type: "boolean" },
44
+ "punctuation-style": { type: "string" },
45
+ "rule-marker": { type: "string" },
46
+ "skip-class": { multiple: true, type: "string" },
47
+ "skip-tag": { multiple: true, type: "string" },
48
+ "stdin-filepath": { type: "string" },
49
+ "strong-marker": { type: "string" },
50
+ superscript: { type: "boolean" },
51
+ type: { type: "string" },
52
+ version: { short: "V", type: "boolean" },
53
+ write: { type: "boolean" },
54
+ };
55
+ const HELP_TEXT = `Usage: punctilio [options] [files...]
56
+
57
+ Apply typographic improvements to Markdown and HTML files.
58
+
59
+ Arguments:
60
+ files files to format (pass '-' to read from stdin)
61
+
62
+ Options:
63
+ -V, --version show version
64
+ --write rewrite files in place (default prints formatted output to stdout)
65
+ --check exit 1 if any file would change; write nothing
66
+ --config <path> path to a punctilio config file (otherwise auto-discovered)
67
+ --no-config ignore any auto-discovered config file
68
+ --ignore-path <path> path to an ignore file (otherwise .punctilioignore in cwd)
69
+ --no-cache disable the incremental cache (default location node_modules/.cache/punctilio/cache.json)
70
+ --cache-location <path> override the cache file location
71
+ --stdin-filepath <path> treat stdin as if it were this filename (infers type from extension)
72
+ --type <type> force file type (otherwise inferred from extension) (choices: ${FILE_TYPES.join(", ")})
73
+ --punctuation-style <style> quote and punctuation style (choices: ${PUNCTUATION_STYLES.join(", ")})
74
+ --dash-style <style> dash style (choices: ${DASH_STYLES.join(", ")})
75
+ --no-symbols disable symbol transforms (ellipsis, ×, ©, etc.)
76
+ --nbsp enable non-breaking space insertion (default: on for HTML, off for Markdown)
77
+ --no-nbsp disable non-breaking space insertion
78
+ --no-collapse-spaces preserve runs of consecutive spaces
79
+ --no-arrows disable -> → arrow transforms
80
+ --fractions enable 1/2 → ½
81
+ --degrees enable 20 C → 20 °C
82
+ --superscript enable 1st → 1ˢᵗ
83
+ --ligatures enable !? → ⁉
84
+ --emphasis-marker <char> markdown emphasis character (choices: ${EMPHASIS_MARKERS.join(", ")})
85
+ --strong-marker <char> markdown strong emphasis character (choices: ${EMPHASIS_MARKERS.join(", ")})
86
+ --bullet-marker <char> markdown list bullet character (choices: ${BULLET_MARKERS.join(", ")})
87
+ --rule-marker <char> markdown thematic break character (choices: ${RULE_MARKERS.join(", ")})
88
+ --skip-tag <tag> HTML tag whose contents are left alone (repeatable)
89
+ --skip-class <class> HTML class name whose elements are skipped (repeatable)
90
+ --no-fragment parse input as a full HTML document
91
+ -h, --help display help for command
92
+ `;
93
+ function parseRawArgs(args) {
94
+ try {
95
+ return parseArgs({
96
+ args,
97
+ allowPositionals: true,
98
+ options: PARSE_ARGS_OPTIONS,
99
+ strict: true,
100
+ tokens: true,
101
+ });
102
+ }
103
+ catch (err) {
104
+ // parseArgs throws on unknown options and missing option values.
105
+ throw new UsageError(err.message);
106
+ }
107
+ }
108
+ function parseChoice(flag, value, choices) {
109
+ if (value === undefined)
110
+ return undefined;
111
+ if (!choices.includes(value)) {
112
+ throw new UsageError(`option '${flag}' argument '${value}' is invalid. Allowed choices are ${choices.join(", ")}.`);
113
+ }
114
+ return value;
115
+ }
116
+ /** Maps a `--no-x` boolean to the library's `x: false`, or undefined when unset. */
117
+ function negated(noFlag) {
118
+ return noFlag ? false : undefined;
119
+ }
120
+ /** Returns the name of whichever of `names` appears last on the command line. */
121
+ function lastFlagToken(tokens, names) {
122
+ let lastName;
123
+ for (const token of tokens) {
124
+ if (token.kind === "option" && names.includes(token.name))
125
+ lastName = token.name;
126
+ }
127
+ return lastName;
128
+ }
129
+ function buildFlags(values, tokens) {
130
+ const flags = {
131
+ write: values.write,
132
+ check: values.check,
133
+ cache: negated(values["no-cache"]),
134
+ cacheLocation: values["cache-location"],
135
+ ignorePath: values["ignore-path"],
136
+ stdinFilepath: values["stdin-filepath"],
137
+ type: parseChoice("--type", values.type, FILE_TYPES),
138
+ punctuationStyle: parseChoice("--punctuation-style", values["punctuation-style"], PUNCTUATION_STYLES),
139
+ dashStyle: parseChoice("--dash-style", values["dash-style"], DASH_STYLES),
140
+ symbols: negated(values["no-symbols"]),
141
+ collapseSpaces: negated(values["no-collapse-spaces"]),
142
+ arrows: negated(values["no-arrows"]),
143
+ fractions: values.fractions,
144
+ degrees: values.degrees,
145
+ superscript: values.superscript,
146
+ ligatures: values.ligatures,
147
+ emphasisMarker: parseChoice("--emphasis-marker", values["emphasis-marker"], EMPHASIS_MARKERS),
148
+ strongMarker: parseChoice("--strong-marker", values["strong-marker"], EMPHASIS_MARKERS),
149
+ bulletMarker: parseChoice("--bullet-marker", values["bullet-marker"], BULLET_MARKERS),
150
+ ruleMarker: parseChoice("--rule-marker", values["rule-marker"], RULE_MARKERS),
151
+ skipTag: values["skip-tag"],
152
+ skipClass: values["skip-class"],
153
+ fragment: negated(values["no-fragment"]),
154
+ };
155
+ // nbsp is tri-state: --nbsp / --no-nbsp / unset stays undefined so the
156
+ // per-sink default applies (on for HTML, off for Markdown). When both
157
+ // appear, the last one on the command line wins.
158
+ const nbspToken = lastFlagToken(tokens, ["nbsp", "no-nbsp"]);
159
+ if (nbspToken !== undefined)
160
+ flags.nbsp = nbspToken === "nbsp";
161
+ // config is likewise last-one-wins between --config <path> and --no-config.
162
+ const configToken = lastFlagToken(tokens, ["config", "no-config"]);
163
+ if (configToken !== undefined)
164
+ flags.config = configToken === "config" ? values.config : false;
165
+ return flags;
60
166
  }
61
167
  function inferFileType(path, override) {
62
168
  if (override !== undefined)
@@ -68,6 +174,11 @@ function inferFileType(path, override) {
68
174
  return "html";
69
175
  throw new UsageError(`Cannot infer file type from extension "${ext}" for ${path}. Pass --type md|html.`);
70
176
  }
177
+ // A config file may legitimately mix markdown-only and HTML-only keys for use
178
+ // across file types; transformContent strips the keys the sink doesn't accept.
179
+ const CLI_CONFIG_KEYS = [
180
+ ...new Set([...MARKDOWN_OPTION_KEYS, ...HTML_OPTION_KEYS]),
181
+ ];
71
182
  // Config keys must match library option names (punctuationStyle, skipTags, …),
72
183
  // not the kebab-cased CLI flag names.
73
184
  async function loadConfig(cwd, configPath, disabled) {
@@ -77,6 +188,12 @@ async function loadConfig(cwd, configPath, disabled) {
77
188
  const result = configPath ? await explorer.load(configPath) : await explorer.search(cwd);
78
189
  if (!result || result.isEmpty)
79
190
  return {};
191
+ try {
192
+ assertKnownOptionKeys(result.config, CLI_CONFIG_KEYS, `config file ${result.filepath}`);
193
+ }
194
+ catch (err) {
195
+ throw new UsageError(err.message);
196
+ }
80
197
  return result.config;
81
198
  }
82
199
  function loadIgnore(cwd, ignorePath) {
@@ -149,8 +266,8 @@ function buildOptions(flags) {
149
266
  opts.dashStyle = flags.dashStyle;
150
267
  if (flags.symbols === false)
151
268
  opts.symbols = false;
152
- if (flags.nbsp === false)
153
- opts.nbsp = false;
269
+ if (flags.nbsp !== undefined)
270
+ opts.nbsp = flags.nbsp;
154
271
  if (flags.collapseSpaces === false)
155
272
  opts.collapseSpaces = false;
156
273
  if (flags.arrows === false)
@@ -179,8 +296,13 @@ function buildOptions(flags) {
179
296
  opts.fragment = false;
180
297
  return opts;
181
298
  }
299
+ // The merged options may carry keys for the other sink (e.g. emphasisMarker
300
+ // alongside skipTags from one shared config); strip the inapplicable ones so
301
+ // each sink's strict key validation only sees keys it understands.
182
302
  async function transformContent(input, type, opts) {
183
- return type === "md" ? transformMarkdown(input, opts) : transformHtml(input, opts);
303
+ return type === "md"
304
+ ? transformMarkdown(input, omitKeys(opts, HTML_ONLY_OPTION_KEYS))
305
+ : transformHtml(input, omitKeys(opts, MARKDOWN_ONLY_OPTION_KEYS));
184
306
  }
185
307
  // Unified pipelines unconditionally append a trailing newline; undo if original lacked one.
186
308
  function matchTrailingNewline(original, formatted) {
@@ -213,22 +335,17 @@ async function readPackageVersion() {
213
335
  /** Returns exit code: 0 success, 1 `--check` saw changes, 2 usage error. */
214
336
  export async function runCli(args, io) {
215
337
  const version = await readPackageVersion();
216
- const program = buildProgram(version, io);
217
338
  try {
218
- program.parse(args, { from: "user" });
219
- }
220
- catch (err) {
221
- /* istanbul ignore if -- commander only throws CommanderError from parse */
222
- if (!(err instanceof CommanderError))
223
- throw err;
224
- if (err.code === "commander.helpDisplayed" || err.code === "commander.version")
339
+ const { positionals, tokens, values } = parseRawArgs(args);
340
+ if (values.help) {
341
+ io.stdout.write(HELP_TEXT);
225
342
  return 0;
226
- return 2;
227
- }
228
- const flags = program.opts();
229
- const positionals = program.args;
230
- try {
231
- return await runValidated(flags, positionals, io, program, version);
343
+ }
344
+ if (values.version) {
345
+ io.stdout.write(`${version}\n`);
346
+ return 0;
347
+ }
348
+ return await runValidated(buildFlags(values, tokens), positionals, io, version);
232
349
  }
233
350
  catch (err) {
234
351
  if (err instanceof UsageError) {
@@ -243,12 +360,19 @@ function readsStdin(positionals, flags) {
243
360
  return true;
244
361
  return flags.stdinFilepath !== undefined && positionals.length === 0;
245
362
  }
246
- async function runValidated(flags, positionals, io, program, version) {
363
+ async function runValidated(flags, positionals, io, version) {
247
364
  const cwd = process.cwd();
248
365
  const config = await loadConfig(cwd, typeof flags.config === "string" ? flags.config : undefined, flags.config === false);
249
366
  const opts = { ...config, ...buildOptions(flags) };
250
367
  const check = flags.check ?? false;
368
+ const write = flags.write ?? false;
369
+ if (check && write) {
370
+ throw new UsageError("--write and --check are mutually exclusive.");
371
+ }
251
372
  if (readsStdin(positionals, flags)) {
373
+ if (write) {
374
+ throw new UsageError("--write cannot be used when reading from stdin.");
375
+ }
252
376
  const fileArgs = positionals.filter((p) => p !== "-");
253
377
  if (fileArgs.length > 0) {
254
378
  throw new UsageError("'-' cannot be combined with file arguments.");
@@ -265,12 +389,14 @@ async function runValidated(flags, positionals, io, program, version) {
265
389
  return 0;
266
390
  }
267
391
  if (positionals.length === 0) {
268
- io.stderr.write(program.helpInformation());
392
+ io.stderr.write(HELP_TEXT);
269
393
  return 2;
270
394
  }
271
395
  const ig = loadIgnore(cwd, flags.ignorePath);
272
396
  const files = await discoverFiles(positionals, cwd, ig);
273
- const cacheLocation = flags.cache === false
397
+ // In stdout mode every file's content must be produced, so a cache hit
398
+ // could never skip work; only --write and --check use the cache.
399
+ const cacheLocation = flags.cache === false || (!write && !check)
274
400
  ? undefined
275
401
  : resolve(cwd, flags.cacheLocation ?? DEFAULT_CACHE_LOCATION);
276
402
  const cache = cacheLocation ? loadCache(cacheLocation, io.stderr) : undefined;
@@ -289,6 +415,10 @@ async function runValidated(flags, positionals, io, program, version) {
289
415
  continue;
290
416
  }
291
417
  const formatted = matchTrailingNewline(original, await transformContent(original, type, opts));
418
+ if (!write && !check) {
419
+ io.stdout.write(formatted);
420
+ continue;
421
+ }
292
422
  const unchanged = original === formatted;
293
423
  if (!unchanged) {
294
424
  anyChanged = true;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/html.d.ts CHANGED
@@ -7,6 +7,11 @@ export interface HtmlOptions extends RehypePunctilioOptions {
7
7
  */
8
8
  fragment?: boolean;
9
9
  }
10
+ /** Option keys handled by the HTML pipeline (parser plus rehype plugin)
11
+ * rather than `transform()`. */
12
+ export declare const HTML_ONLY_OPTION_KEYS: readonly string[];
13
+ /** Runtime list of valid `transformHtml` option keys. */
14
+ export declare const HTML_OPTION_KEYS: readonly string[];
10
15
  /** @internal */
11
16
  export declare function clearProcessorCache(): void;
12
17
  export declare function transformHtml(input: string, options?: HtmlOptions): Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"AAKA,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAG1E,MAAM,WAAW,WAAY,SAAQ,sBAAsB;IACzD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAgBD,gBAAgB;AAChB,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"AAKA,OAAO,EAAgE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAGvH,MAAM,WAAW,WAAY,SAAQ,sBAAsB;IACzD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;gCACgC;AAChC,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAA6C,CAAA;AAEhG,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAAwC,CAAA;AAgBtF,gBAAgB;AAChB,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,MAAM,CAAC,CAqBjB"}
package/dist/html.js CHANGED
@@ -2,8 +2,13 @@ import { unified } from "unified";
2
2
  import rehypeParse from "rehype-parse";
3
3
  import rehypeStringify from "rehype-stringify";
4
4
  import QuickLRU from "quick-lru";
5
- import { rehypePunctilio } from "./rehype.js";
6
- import { stableStringify } from "./utils.js";
5
+ import { REHYPE_ONLY_OPTION_KEYS, REHYPE_OPTION_KEYS, rehypePunctilio } from "./rehype.js";
6
+ import { assertKnownOptionKeys, stableStringify } from "./utils.js";
7
+ /** Option keys handled by the HTML pipeline (parser plus rehype plugin)
8
+ * rather than `transform()`. */
9
+ export const HTML_ONLY_OPTION_KEYS = ["fragment", ...REHYPE_ONLY_OPTION_KEYS];
10
+ /** Runtime list of valid `transformHtml` option keys. */
11
+ export const HTML_OPTION_KEYS = [...REHYPE_OPTION_KEYS, "fragment"];
7
12
  function createProcessor(options) {
8
13
  const { fragment, ...punctilioOptions } = options;
9
14
  return unified()
@@ -20,6 +25,7 @@ export function clearProcessorCache() {
20
25
  processorCache.clear();
21
26
  }
22
27
  export async function transformHtml(input, options = {}) {
28
+ assertKnownOptionKeys(options, HTML_OPTION_KEYS, "transformHtml");
23
29
  // Function-valued options aren't JSON-serializable, so the cache key
24
30
  // can't distinguish them. Bypass the cache to avoid returning a
25
31
  // processor wired to a different shouldSkipText.
package/dist/html.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,WAAW,MAAM,cAAc,CAAA;AACtC,OAAO,eAAe,MAAM,kBAAkB,CAAA;AAC9C,OAAO,QAAQ,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,eAAe,EAA+B,MAAM,aAAa,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAW5C,SAAS,eAAe,CAAC,OAAoB;IAC3C,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,GAAG,OAAO,CAAA;IACjD,OAAO,OAAO,EAAE;SACb,GAAG,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,EAAE,CAAC;SAChD,GAAG,CAAC,eAAe,EAAE,gBAAgB,CAAC;SACtC,GAAG,CAAC,eAAe,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,wBAAwB,GAAG,CAAC,CAAA;AAElC,MAAM,cAAc,GAAG,IAAI,QAAQ,CAA6C;IAC9E,OAAO,EAAE,wBAAwB;CAClC,CAAC,CAAA;AAEF,gBAAgB;AAChB,MAAM,UAAU,mBAAmB;IACjC,cAAc,CAAC,KAAK,EAAE,CAAA;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAa,EACb,UAAuB,EAAE;IAEzB,qEAAqE;IACrE,gEAAgE;IAChE,iDAAiD;IACjD,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;IACvB,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IAE3C,IAAI,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;QACpC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC7C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;AACvB,CAAC"}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../src/html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,WAAW,MAAM,cAAc,CAAA;AACtC,OAAO,eAAe,MAAM,kBAAkB,CAAA;AAC9C,OAAO,QAAQ,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,eAAe,EAA+B,MAAM,aAAa,CAAA;AACvH,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAWnE;gCACgC;AAChC,MAAM,CAAC,MAAM,qBAAqB,GAAsB,CAAC,UAAU,EAAE,GAAG,uBAAuB,CAAC,CAAA;AAEhG,yDAAyD;AACzD,MAAM,CAAC,MAAM,gBAAgB,GAAsB,CAAC,GAAG,kBAAkB,EAAE,UAAU,CAAC,CAAA;AAEtF,SAAS,eAAe,CAAC,OAAoB;IAC3C,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,GAAG,OAAO,CAAA;IACjD,OAAO,OAAO,EAAE;SACb,GAAG,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAI,IAAI,EAAE,CAAC;SAChD,GAAG,CAAC,eAAe,EAAE,gBAAgB,CAAC;SACtC,GAAG,CAAC,eAAe,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,wBAAwB,GAAG,CAAC,CAAA;AAElC,MAAM,cAAc,GAAG,IAAI,QAAQ,CAA6C;IAC9E,OAAO,EAAE,wBAAwB;CAClC,CAAC,CAAA;AAEF,gBAAgB;AAChB,MAAM,UAAU,mBAAmB;IACjC,cAAc,CAAC,KAAK,EAAE,CAAA;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAa,EACb,UAAuB,EAAE;IAEzB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAA;IAEjE,qEAAqE;IACrE,gEAAgE;IAChE,iDAAiD;IACjD,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;IACvB,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IAE3C,IAAI,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;QACpC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC7C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;AACvB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -103,14 +103,19 @@ export interface TransformOptions {
103
103
  /**
104
104
  * Whether to verify that the transformation is idempotent (running twice
105
105
  * produces the same result). When enabled, throws an error if the second
106
- * pass produces a different result than the first.
106
+ * pass produces a different result than the first. The check doubles the
107
+ * cost of every transform and only detects punctilio's own bugs, so it is
108
+ * off by default; enable it in test suites or when debugging.
107
109
  *
108
- * Default: true
110
+ * Default: false
109
111
  */
110
112
  checkIdempotency?: boolean;
111
113
  }
112
114
  export { arrows, collapseSpaces, degrees, ellipsis, fractions, legalSymbols, mathSymbols, multiplication, primeMarks, punctuationLigatures, superscriptOrdinal, type SymbolOptions, symbolTransform, } from "./symbols.js";
113
115
  export { assertSeparatorAbsent, assertSeparatorCountPreserved, countSeparators, transformTextNodes } from "./utils.js";
114
116
  export declare const MODIFIER_LETTER_APOSTROPHE: "ʼ";
117
+ /** Runtime list of valid `transform()` option keys, derived from the option
118
+ * defaults so it cannot drift from {@link TransformOptions}. */
119
+ export declare const TRANSFORM_OPTION_KEYS: readonly string[];
115
120
  export declare function transform(text: string, options?: TransformOptions): string;
116
121
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EACL,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,6BAA6B,GAC9B,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,UAAU,EACV,yBAAyB,EACzB,mBAAmB,EACnB,+BAA+B,EAC/B,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,WAAW,EAChB,aAAa,EACb,uBAAuB,EACvB,KAAK,GACN,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAE3H,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IAExB;;;;;;;;;;;;;;;;;OAiBG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IAEnC;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAE3B;AASD,OAAO,EACL,MAAM,EACN,cAAc,EACd,OAAO,EACP,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAW,EACX,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,aAAa,EAClB,eAAe,GAChB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACtH,eAAO,MAAM,0BAA0B,KAA6C,CAAA;AAgBpF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAuF9E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EACL,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,6BAA6B,GAC9B,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,UAAU,EACV,yBAAyB,EACzB,mBAAmB,EACnB,+BAA+B,EAC/B,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,WAAW,EAChB,aAAa,EACb,uBAAuB,EACvB,KAAK,GACN,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAE3H,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IAExB;;;;;;;;;;;;;;;;;OAiBG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IAEnC;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IAEjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB;;;;OAIG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAE3B;AASD,OAAO,EACL,MAAM,EACN,cAAc,EACd,OAAO,EACP,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAW,EACX,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,aAAa,EAClB,eAAe,GAChB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACtH,eAAO,MAAM,0BAA0B,KAA6C,CAAA;AAgBpF;gEACgE;AAChE,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAGlD,CAAA;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAyF9E"}