@apollion-dsi/scripts 0.9.0 → 0.9.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @apollion-dsi/scripts
2
2
 
3
+ ## 0.9.1
4
+
5
+ ### Patch Changes
6
+
7
+ - b3e5d0c: Fix `scripts lint` / `scripts prettier` arg pass-through so flag-value pairs and the POSIX `--` end-of-options separator no longer break the underlying CLI invocation.
8
+
9
+ The previous heuristic in `command/lint.ts` + `command/prettier.ts` treated _any_ argv entry not starting with `-` as a "user-provided path" and handed full control to the user from there. Two real consumer invocations hit by that, surfaced via DEX-Aggregator integration:
10
+ - `scripts lint --max-warnings 0` — the literal `0` value of the flag was misread as a path, so the default `src` target was dropped and ESLint ran with no files (hard error).
11
+ - `scripts lint -- --fix` (the form previously suggested in `llms.txt`) — every arg started with `-`, so `src` was appended, but the surviving `--` separator forced ESLint to treat `--fix` and `src` as positional files (`No files matching pattern '--fix'`).
12
+
13
+ `command/check-types.ts` doesn't carry the same heuristic and isn't affected.
14
+
15
+ **Fix.** A new pure helper `utils/buildWrapperArgs` replaces the heuristic with a simpler rule: empty input falls back to the canonical defaults; otherwise the user argv (with `--` stripped) is followed by the default target (`src` for lint, `src/**/*.{ts,tsx,json,css,md}` for prettier). Consumers needing a non-default target invoke `eslint`/`prettier` directly from `node_modules/.bin`. Tested in `src/__tests__/buildWrapperArgs.test.ts`.
16
+
17
+ **Docs.** `packages/scripts/llms.txt` now shows the flag-direct form (`scripts lint --fix`, `scripts prettier --write`, `scripts check-types -p tsconfig.build.json`) and explicitly warns against the `--` separator.
18
+
19
+ **Backward compatibility.** Both `--flag=value` (the workaround currently shipping in DEX-Aggregator after the canonical-Apollion refactor) and the previously-broken `--flag value` form now resolve to the same eslint/prettier invocation. No consumer change required to consume the fix; consumers may revert the `=`-form workaround at their convenience.
20
+
3
21
  ## 0.9.0
4
22
 
5
23
  ### Minor Changes
@@ -1,7 +1,7 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <coverage generated="1780056951323" clover="3.2.0">
3
- <project timestamp="1780056951323" name="All files">
4
- <metrics statements="106" coveredstatements="101" conditionals="63" coveredconditionals="53" methods="18" coveredmethods="17" elements="187" coveredelements="171" complexity="0" loc="106" ncloc="106" packages="2" files="7" classes="7"/>
2
+ <coverage generated="1780844477256" clover="3.2.0">
3
+ <project timestamp="1780844477256" name="All files">
4
+ <metrics statements="111" coveredstatements="106" conditionals="65" coveredconditionals="55" methods="20" coveredmethods="19" elements="196" coveredelements="180" complexity="0" loc="111" ncloc="111" packages="2" files="8" classes="8"/>
5
5
  <package name="config">
6
6
  <metrics statements="43" coveredstatements="41" conditionals="19" coveredconditionals="15" methods="12" coveredmethods="11"/>
7
7
  <file name="env.ts" path="/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/config/env.ts">
@@ -23,7 +23,7 @@
23
23
  <line num="69" count="1" type="stmt"/>
24
24
  <line num="72" count="2" type="stmt"/>
25
25
  <line num="74" count="2" type="stmt"/>
26
- <line num="75" count="131" type="stmt"/>
26
+ <line num="75" count="111" type="stmt"/>
27
27
  <line num="76" count="1" type="stmt"/>
28
28
  <line num="100" count="2" type="stmt"/>
29
29
  <line num="101" count="13" type="stmt"/>
@@ -58,7 +58,15 @@
58
58
  </file>
59
59
  </package>
60
60
  <package name="utils">
61
- <metrics statements="63" coveredstatements="60" conditionals="44" coveredconditionals="38" methods="6" coveredmethods="6"/>
61
+ <metrics statements="68" coveredstatements="65" conditionals="46" coveredconditionals="40" methods="8" coveredmethods="8"/>
62
+ <file name="buildWrapperArgs.ts" path="/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/utils/buildWrapperArgs.ts">
63
+ <metrics statements="5" coveredstatements="5" conditionals="2" coveredconditionals="2" methods="2" coveredmethods="2"/>
64
+ <line num="29" count="1" type="stmt"/>
65
+ <line num="30" count="11" type="cond" truecount="2" falsecount="0"/>
66
+ <line num="31" count="3" type="stmt"/>
67
+ <line num="34" count="15" type="stmt"/>
68
+ <line num="36" count="8" type="stmt"/>
69
+ </file>
62
70
  <file name="checkRequiredFiles.ts" path="/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/utils/checkRequiredFiles.ts">
63
71
  <metrics statements="15" coveredstatements="15" conditionals="4" coveredconditionals="2" methods="2" coveredmethods="2"/>
64
72
  <line num="1" count="1" type="stmt"/>
@@ -1,6 +1,7 @@
1
- {"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/config/env.ts": {"path":"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/config/env.ts","statementMap":{"0":{"start":{"line":16,"column":0},"end":{"line":16,"column":16}},"1":{"start":{"line":69,"column":0},"end":{"line":69,"column":24}},"2":{"start":{"line":1,"column":0},"end":{"line":1,"column":20}},"3":{"start":{"line":2,"column":0},"end":{"line":2,"column":24}},"4":{"start":{"line":17,"column":28},"end":{"line":17,"column":39}},"5":{"start":{"line":19,"column":2},"end":{"line":21,"column":3}},"6":{"start":{"line":20,"column":4},"end":{"line":20,"column":92}},"7":{"start":{"line":23,"column":22},"end":{"line":33,"column":36}},"8":{"start":{"line":38,"column":2},"end":{"line":46,"column":5}},"9":{"start":{"line":39,"column":4},"end":{"line":45,"column":5}},"10":{"start":{"line":40,"column":6},"end":{"line":44,"column":8}},"11":{"start":{"line":48,"column":23},"end":{"line":48,"column":53}},"12":{"start":{"line":49,"column":2},"end":{"line":53,"column":26}},"13":{"start":{"line":51,"column":24},"end":{"line":51,"column":58}},"14":{"start":{"line":52,"column":21},"end":{"line":52,"column":55}},"15":{"start":{"line":72,"column":20},"end":{"line":72,"column":34}},"16":{"start":{"line":74,"column":14},"end":{"line":98,"column":6}},"17":{"start":{"line":75,"column":21},"end":{"line":75,"column":40}},"18":{"start":{"line":76,"column":26},"end":{"line":76,"column":73}},"19":{"start":{"line":100,"column":22},"end":{"line":102,"column":4}},"20":{"start":{"line":101,"column":57},"end":{"line":101,"column":112}},"21":{"start":{"line":104,"column":2},"end":{"line":104,"column":30}}},"fnMap":{"0":{"name":"getEnviroment","decl":{"start":{"line":16,"column":16},"end":{"line":16,"column":29}},"loc":{"start":{"line":16,"column":35},"end":{"line":54,"column":1}}},"1":{"name":"(anonymous_2)","decl":{"start":{"line":38,"column":22},"end":{"line":38,"column":23}},"loc":{"start":{"line":38,"column":37},"end":{"line":46,"column":3}}},"2":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":12},"end":{"line":51,"column":13}},"loc":{"start":{"line":51,"column":24},"end":{"line":51,"column":58}}},"3":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":9},"end":{"line":52,"column":10}},"loc":{"start":{"line":52,"column":21},"end":{"line":52,"column":55}}},"4":{"name":"getClientEnvironment","decl":{"start":{"line":69,"column":24},"end":{"line":69,"column":44}},"loc":{"start":{"line":69,"column":88},"end":{"line":105,"column":1}}},"5":{"name":"(anonymous_6)","decl":{"start":{"line":75,"column":12},"end":{"line":75,"column":13}},"loc":{"start":{"line":75,"column":21},"end":{"line":75,"column":40}}},"6":{"name":"(anonymous_7)","decl":{"start":{"line":76,"column":12},"end":{"line":76,"column":13}},"loc":{"start":{"line":76,"column":26},"end":{"line":76,"column":73}}},"7":{"name":"(anonymous_8)","decl":{"start":{"line":101,"column":43},"end":{"line":101,"column":44}},"loc":{"start":{"line":101,"column":57},"end":{"line":101,"column":112}}}},"branchMap":{"0":{"loc":{"start":{"line":19,"column":2},"end":{"line":21,"column":3}},"type":"if","locations":[{"start":{"line":19,"column":2},"end":{"line":21,"column":3}},{"start":{},"end":{}}]},"1":{"loc":{"start":{"line":29,"column":4},"end":{"line":29,"column":50}},"type":"binary-expr","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":23}},{"start":{"line":29,"column":27},"end":{"line":29,"column":50}}]},"2":{"loc":{"start":{"line":39,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":39,"column":4},"end":{"line":45,"column":5}},{"start":{},"end":{}}]},"3":{"loc":{"start":{"line":49,"column":27},"end":{"line":49,"column":54}},"type":"binary-expr","locations":[{"start":{"line":49,"column":27},"end":{"line":49,"column":48}},{"start":{"line":49,"column":52},"end":{"line":49,"column":54}}]},"4":{"loc":{"start":{"line":51,"column":24},"end":{"line":51,"column":58}},"type":"binary-expr","locations":[{"start":{"line":51,"column":24},"end":{"line":51,"column":30}},{"start":{"line":51,"column":34},"end":{"line":51,"column":58}}]},"5":{"loc":{"start":{"line":79,"column":16},"end":{"line":79,"column":53}},"type":"binary-expr","locations":[{"start":{"line":79,"column":16},"end":{"line":79,"column":36}},{"start":{"line":79,"column":40},"end":{"line":79,"column":53}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":2,"5":2,"6":1,"7":1,"8":1,"9":5,"10":0,"11":1,"12":1,"13":1,"14":0,"15":2,"16":2,"17":131,"18":1,"19":2,"20":13,"21":2},"f":{"0":2,"1":5,"2":1,"3":0,"4":2,"5":131,"6":1,"7":13},"b":{"0":[1,1],"1":[1,0],"2":[0,5],"3":[1,1],"4":[1,0],"5":[2,1]}}
1
+ {"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/config/env.ts": {"path":"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/config/env.ts","statementMap":{"0":{"start":{"line":16,"column":0},"end":{"line":16,"column":16}},"1":{"start":{"line":69,"column":0},"end":{"line":69,"column":24}},"2":{"start":{"line":1,"column":0},"end":{"line":1,"column":20}},"3":{"start":{"line":2,"column":0},"end":{"line":2,"column":24}},"4":{"start":{"line":17,"column":28},"end":{"line":17,"column":39}},"5":{"start":{"line":19,"column":2},"end":{"line":21,"column":3}},"6":{"start":{"line":20,"column":4},"end":{"line":20,"column":92}},"7":{"start":{"line":23,"column":22},"end":{"line":33,"column":36}},"8":{"start":{"line":38,"column":2},"end":{"line":46,"column":5}},"9":{"start":{"line":39,"column":4},"end":{"line":45,"column":5}},"10":{"start":{"line":40,"column":6},"end":{"line":44,"column":8}},"11":{"start":{"line":48,"column":23},"end":{"line":48,"column":53}},"12":{"start":{"line":49,"column":2},"end":{"line":53,"column":26}},"13":{"start":{"line":51,"column":24},"end":{"line":51,"column":58}},"14":{"start":{"line":52,"column":21},"end":{"line":52,"column":55}},"15":{"start":{"line":72,"column":20},"end":{"line":72,"column":34}},"16":{"start":{"line":74,"column":14},"end":{"line":98,"column":6}},"17":{"start":{"line":75,"column":21},"end":{"line":75,"column":40}},"18":{"start":{"line":76,"column":26},"end":{"line":76,"column":73}},"19":{"start":{"line":100,"column":22},"end":{"line":102,"column":4}},"20":{"start":{"line":101,"column":57},"end":{"line":101,"column":112}},"21":{"start":{"line":104,"column":2},"end":{"line":104,"column":30}}},"fnMap":{"0":{"name":"getEnviroment","decl":{"start":{"line":16,"column":16},"end":{"line":16,"column":29}},"loc":{"start":{"line":16,"column":35},"end":{"line":54,"column":1}}},"1":{"name":"(anonymous_2)","decl":{"start":{"line":38,"column":22},"end":{"line":38,"column":23}},"loc":{"start":{"line":38,"column":37},"end":{"line":46,"column":3}}},"2":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":12},"end":{"line":51,"column":13}},"loc":{"start":{"line":51,"column":24},"end":{"line":51,"column":58}}},"3":{"name":"(anonymous_4)","decl":{"start":{"line":52,"column":9},"end":{"line":52,"column":10}},"loc":{"start":{"line":52,"column":21},"end":{"line":52,"column":55}}},"4":{"name":"getClientEnvironment","decl":{"start":{"line":69,"column":24},"end":{"line":69,"column":44}},"loc":{"start":{"line":69,"column":88},"end":{"line":105,"column":1}}},"5":{"name":"(anonymous_6)","decl":{"start":{"line":75,"column":12},"end":{"line":75,"column":13}},"loc":{"start":{"line":75,"column":21},"end":{"line":75,"column":40}}},"6":{"name":"(anonymous_7)","decl":{"start":{"line":76,"column":12},"end":{"line":76,"column":13}},"loc":{"start":{"line":76,"column":26},"end":{"line":76,"column":73}}},"7":{"name":"(anonymous_8)","decl":{"start":{"line":101,"column":43},"end":{"line":101,"column":44}},"loc":{"start":{"line":101,"column":57},"end":{"line":101,"column":112}}}},"branchMap":{"0":{"loc":{"start":{"line":19,"column":2},"end":{"line":21,"column":3}},"type":"if","locations":[{"start":{"line":19,"column":2},"end":{"line":21,"column":3}},{"start":{},"end":{}}]},"1":{"loc":{"start":{"line":29,"column":4},"end":{"line":29,"column":50}},"type":"binary-expr","locations":[{"start":{"line":29,"column":4},"end":{"line":29,"column":23}},{"start":{"line":29,"column":27},"end":{"line":29,"column":50}}]},"2":{"loc":{"start":{"line":39,"column":4},"end":{"line":45,"column":5}},"type":"if","locations":[{"start":{"line":39,"column":4},"end":{"line":45,"column":5}},{"start":{},"end":{}}]},"3":{"loc":{"start":{"line":49,"column":27},"end":{"line":49,"column":54}},"type":"binary-expr","locations":[{"start":{"line":49,"column":27},"end":{"line":49,"column":48}},{"start":{"line":49,"column":52},"end":{"line":49,"column":54}}]},"4":{"loc":{"start":{"line":51,"column":24},"end":{"line":51,"column":58}},"type":"binary-expr","locations":[{"start":{"line":51,"column":24},"end":{"line":51,"column":30}},{"start":{"line":51,"column":34},"end":{"line":51,"column":58}}]},"5":{"loc":{"start":{"line":79,"column":16},"end":{"line":79,"column":53}},"type":"binary-expr","locations":[{"start":{"line":79,"column":16},"end":{"line":79,"column":36}},{"start":{"line":79,"column":40},"end":{"line":79,"column":53}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":2,"5":2,"6":1,"7":1,"8":1,"9":5,"10":0,"11":1,"12":1,"13":1,"14":0,"15":2,"16":2,"17":111,"18":1,"19":2,"20":13,"21":2},"f":{"0":2,"1":5,"2":1,"3":0,"4":2,"5":111,"6":1,"7":13},"b":{"0":[1,1],"1":[1,0],"2":[0,5],"3":[1,1],"4":[1,0],"5":[2,1]}}
2
2
  ,"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/config/paths.ts": {"path":"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/config/paths.ts","statementMap":{"0":{"start":{"line":70,"column":0},"end":{"line":70,"column":16}},"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":20}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":24}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":61}},"4":{"start":{"line":45,"column":13},"end":{"line":57,"column":2}},"5":{"start":{"line":71,"column":23},"end":{"line":71,"column":48}},"6":{"start":{"line":72,"column":21},"end":{"line":72,"column":79}},"7":{"start":{"line":72,"column":39},"end":{"line":72,"column":79}},"8":{"start":{"line":74,"column":25},"end":{"line":74,"column":51}},"9":{"start":{"line":76,"column":26},"end":{"line":79,"column":null}},"10":{"start":{"line":83,"column":24},"end":{"line":91,"column":3}},"11":{"start":{"line":84,"column":22},"end":{"line":84,"column":104}},"12":{"start":{"line":84,"column":57},"end":{"line":84,"column":103}},"13":{"start":{"line":86,"column":4},"end":{"line":88,"column":5}},"14":{"start":{"line":87,"column":6},"end":{"line":87,"column":51}},"15":{"start":{"line":90,"column":4},"end":{"line":90,"column":39}},"16":{"start":{"line":93,"column":26},"end":{"line":93,"column":52}},"17":{"start":{"line":94,"column":28},"end":{"line":94,"column":58}},"18":{"start":{"line":95,"column":29},"end":{"line":95,"column":60}},"19":{"start":{"line":97,"column":23},"end":{"line":97,"column":93}},"20":{"start":{"line":99,"column":2},"end":{"line":116,"column":4}},"21":{"start":{"line":119,"column":0},"end":{"line":119,"column":32}}},"fnMap":{"0":{"name":"createAppPaths","decl":{"start":{"line":70,"column":16},"end":{"line":70,"column":30}},"loc":{"start":{"line":70,"column":63},"end":{"line":117,"column":1}}},"1":{"name":"(anonymous_2)","decl":{"start":{"line":72,"column":21},"end":{"line":72,"column":22}},"loc":{"start":{"line":72,"column":39},"end":{"line":72,"column":79}}},"2":{"name":"(anonymous_3)","decl":{"start":{"line":83,"column":24},"end":{"line":83,"column":25}},"loc":{"start":{"line":83,"column":48},"end":{"line":91,"column":3}}},"3":{"name":"(anonymous_4)","decl":{"start":{"line":84,"column":48},"end":{"line":84,"column":49}},"loc":{"start":{"line":84,"column":57},"end":{"line":84,"column":103}}}},"branchMap":{"0":{"loc":{"start":{"line":70,"column":31},"end":{"line":70,"column":63}},"type":"default-arg","locations":[{"start":{"line":70,"column":50},"end":{"line":70,"column":63}}]},"1":{"loc":{"start":{"line":86,"column":4},"end":{"line":88,"column":5}},"type":"if","locations":[{"start":{"line":86,"column":4},"end":{"line":88,"column":5}},{"start":{},"end":{}}]},"2":{"loc":{"start":{"line":97,"column":23},"end":{"line":97,"column":93}},"type":"cond-expr","locations":[{"start":{"line":97,"column":65},"end":{"line":97,"column":83}},{"start":{"line":97,"column":86},"end":{"line":97,"column":93}}]},"3":{"loc":{"start":{"line":97,"column":23},"end":{"line":97,"column":62}},"type":"binary-expr","locations":[{"start":{"line":97,"column":23},"end":{"line":97,"column":40}},{"start":{"line":97,"column":44},"end":{"line":97,"column":62}}]}},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":4,"6":4,"7":118,"8":4,"9":4,"10":4,"11":8,"12":62,"13":8,"14":6,"15":2,"16":4,"17":4,"18":4,"19":4,"20":4,"21":2},"f":{"0":4,"1":118,"2":8,"3":62},"b":{"0":[2],"1":[6,2],"2":[4,0],"3":[4,4]}}
3
3
  ,"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/config/shared.ts": {"path":"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/config/shared.ts","statementMap":{"0":{"start":{"line":33,"column":13},"end":{"line":42,"column":2}}},"fnMap":{},"branchMap":{},"s":{"0":1},"f":{},"b":{}}
4
+ ,"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/utils/buildWrapperArgs.ts": {"path":"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/utils/buildWrapperArgs.ts","statementMap":{"0":{"start":{"line":29,"column":0},"end":{"line":29,"column":16}},"1":{"start":{"line":30,"column":2},"end":{"line":32,"column":3}},"2":{"start":{"line":31,"column":4},"end":{"line":31,"column":33}},"3":{"start":{"line":34,"column":22},"end":{"line":34,"column":56}},"4":{"start":{"line":34,"column":45},"end":{"line":34,"column":55}},"5":{"start":{"line":36,"column":2},"end":{"line":36,"column":42}}},"fnMap":{"0":{"name":"buildWrapperArgs","decl":{"start":{"line":29,"column":16},"end":{"line":29,"column":32}},"loc":{"start":{"line":29,"column":100},"end":{"line":37,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":34,"column":38},"end":{"line":34,"column":39}},"loc":{"start":{"line":34,"column":45},"end":{"line":34,"column":55}}}},"branchMap":{"0":{"loc":{"start":{"line":30,"column":2},"end":{"line":32,"column":3}},"type":"if","locations":[{"start":{"line":30,"column":2},"end":{"line":32,"column":3}},{"start":{},"end":{}}]}},"s":{"0":1,"1":11,"2":3,"3":8,"4":15,"5":8},"f":{"0":11,"1":15},"b":{"0":[3,8]}}
4
5
  ,"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/utils/checkRequiredFiles.ts": {"path":"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/utils/checkRequiredFiles.ts","statementMap":{"0":{"start":{"line":15,"column":0},"end":{"line":15,"column":24}},"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":20}},"2":{"start":{"line":2,"column":0},"end":{"line":2,"column":24}},"3":{"start":{"line":4,"column":0},"end":{"line":4,"column":26}},"4":{"start":{"line":17,"column":2},"end":{"line":30,"column":3}},"5":{"start":{"line":18,"column":4},"end":{"line":21,"column":7}},"6":{"start":{"line":19,"column":6},"end":{"line":19,"column":33}},"7":{"start":{"line":20,"column":6},"end":{"line":20,"column":49}},"8":{"start":{"line":22,"column":4},"end":{"line":22,"column":16}},"9":{"start":{"line":24,"column":20},"end":{"line":24,"column":72}},"10":{"start":{"line":25,"column":21},"end":{"line":25,"column":74}},"11":{"start":{"line":26,"column":4},"end":{"line":26,"column":62}},"12":{"start":{"line":27,"column":4},"end":{"line":27,"column":67}},"13":{"start":{"line":28,"column":4},"end":{"line":28,"column":73}},"14":{"start":{"line":29,"column":4},"end":{"line":29,"column":17}}},"fnMap":{"0":{"name":"checkRequiredFiles","decl":{"start":{"line":15,"column":24},"end":{"line":15,"column":42}},"loc":{"start":{"line":15,"column":58},"end":{"line":31,"column":1}}},"1":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":18},"end":{"line":18,"column":19}},"loc":{"start":{"line":18,"column":31},"end":{"line":21,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":24,"column":20},"end":{"line":24,"column":72}},"type":"cond-expr","locations":[{"start":{"line":24,"column":38},"end":{"line":24,"column":67}},{"start":{"line":24,"column":70},"end":{"line":24,"column":72}}]},"1":{"loc":{"start":{"line":25,"column":21},"end":{"line":25,"column":74}},"type":"cond-expr","locations":[{"start":{"line":25,"column":39},"end":{"line":25,"column":69}},{"start":{"line":25,"column":72},"end":{"line":25,"column":74}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":3,"5":3,"6":4,"7":4,"8":2,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1},"f":{"0":3,"1":4},"b":{"0":[1,0],"1":[1,0]}}
5
6
  ,"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/utils/formatWebpackMessages.ts": {"path":"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/utils/formatWebpackMessages.ts","statementMap":{"0":{"start":{"line":39,"column":0},"end":{"line":39,"column":24}},"1":{"start":{"line":11,"column":2},"end":{"line":11,"column":30}},"2":{"start":{"line":11,"column":20},"end":{"line":11,"column":30}},"3":{"start":{"line":12,"column":2},"end":{"line":12,"column":44}},"4":{"start":{"line":12,"column":32},"end":{"line":12,"column":44}},"5":{"start":{"line":13,"column":2},"end":{"line":26,"column":3}},"6":{"start":{"line":14,"column":20},"end":{"line":14,"column":31}},"7":{"start":{"line":15,"column":4},"end":{"line":20,"column":5}},"8":{"start":{"line":16,"column":19},"end":{"line":16,"column":21}},"9":{"start":{"line":17,"column":6},"end":{"line":17,"column":71}},"10":{"start":{"line":17,"column":30},"end":{"line":17,"column":71}},"11":{"start":{"line":18,"column":6},"end":{"line":18,"column":32}},"12":{"start":{"line":19,"column":6},"end":{"line":19,"column":20}},"13":{"start":{"line":21,"column":4},"end":{"line":25,"column":5}},"14":{"start":{"line":22,"column":6},"end":{"line":22,"column":37}},"15":{"start":{"line":24,"column":6},"end":{"line":24,"column":29}},"16":{"start":{"line":27,"column":2},"end":{"line":27,"column":22}},"17":{"start":{"line":40,"column":17},"end":{"line":40,"column":77}},"18":{"start":{"line":41,"column":19},"end":{"line":41,"column":83}},"19":{"start":{"line":42,"column":2},"end":{"line":42,"column":30}}},"fnMap":{"0":{"name":"toString","decl":{"start":{"line":10,"column":9},"end":{"line":10,"column":17}},"loc":{"start":{"line":10,"column":31},"end":{"line":28,"column":1}}},"1":{"name":"formatWebpackMessages","decl":{"start":{"line":39,"column":24},"end":{"line":39,"column":45}},"loc":{"start":{"line":39,"column":55},"end":{"line":43,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":2},"end":{"line":11,"column":30}},"type":"if","locations":[{"start":{"line":11,"column":2},"end":{"line":11,"column":30}},{"start":{},"end":{}}]},"1":{"loc":{"start":{"line":12,"column":2},"end":{"line":12,"column":44}},"type":"if","locations":[{"start":{"line":12,"column":2},"end":{"line":12,"column":44}},{"start":{},"end":{}}]},"2":{"loc":{"start":{"line":13,"column":2},"end":{"line":26,"column":3}},"type":"if","locations":[{"start":{"line":13,"column":2},"end":{"line":26,"column":3}},{"start":{},"end":{}}]},"3":{"loc":{"start":{"line":15,"column":4},"end":{"line":20,"column":5}},"type":"if","locations":[{"start":{"line":15,"column":4},"end":{"line":20,"column":5}},{"start":{},"end":{}}]},"4":{"loc":{"start":{"line":17,"column":6},"end":{"line":17,"column":71}},"type":"if","locations":[{"start":{"line":17,"column":6},"end":{"line":17,"column":71}},{"start":{},"end":{}}]},"5":{"loc":{"start":{"line":40,"column":17},"end":{"line":40,"column":77}},"type":"cond-expr","locations":[{"start":{"line":40,"column":47},"end":{"line":40,"column":72}},{"start":{"line":40,"column":75},"end":{"line":40,"column":77}}]},"6":{"loc":{"start":{"line":41,"column":19},"end":{"line":41,"column":83}},"type":"cond-expr","locations":[{"start":{"line":41,"column":51},"end":{"line":41,"column":78}},{"start":{"line":41,"column":81},"end":{"line":41,"column":83}}]}},"s":{"0":1,"1":7,"2":0,"3":7,"4":2,"5":5,"6":3,"7":3,"8":2,"9":2,"10":1,"11":2,"12":2,"13":1,"14":1,"15":0,"16":2,"17":7,"18":7,"19":7},"f":{"0":7,"1":7},"b":{"0":[0,7],"1":[2,5],"2":[3,2],"3":[2,1],"4":[1,1],"5":[4,3],"6":[2,5]}}
6
7
  ,"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/utils/getPublicUrlOrPath.ts": {"path":"/Volumes/External-Fedbalves/Projects/apollion/packages/scripts/src/utils/getPublicUrlOrPath.ts","statementMap":{"0":{"start":{"line":22,"column":0},"end":{"line":22,"column":24}},"1":{"start":{"line":1,"column":0},"end":{"line":1,"column":26}},"2":{"start":{"line":27,"column":21},"end":{"line":27,"column":51}},"3":{"start":{"line":29,"column":2},"end":{"line":38,"column":3}},"4":{"start":{"line":30,"column":21},"end":{"line":30,"column":33}},"5":{"start":{"line":31,"column":4},"end":{"line":31,"column":53}},"6":{"start":{"line":31,"column":35},"end":{"line":31,"column":53}},"7":{"start":{"line":32,"column":4},"end":{"line":37,"column":5}},"8":{"start":{"line":33,"column":29},"end":{"line":33,"column":60}},"9":{"start":{"line":34,"column":6},"end":{"line":34,"column":106}},"10":{"start":{"line":36,"column":6},"end":{"line":36,"column":24}},"11":{"start":{"line":40,"column":2},"end":{"line":55,"column":3}},"12":{"start":{"line":41,"column":21},"end":{"line":41,"column":29}},"13":{"start":{"line":42,"column":4},"end":{"line":42,"column":53}},"14":{"start":{"line":42,"column":35},"end":{"line":42,"column":53}},"15":{"start":{"line":43,"column":4},"end":{"line":54,"column":5}},"16":{"start":{"line":44,"column":36},"end":{"line":44,"column":76}},"17":{"start":{"line":45,"column":6},"end":{"line":51,"column":34}},"18":{"start":{"line":53,"column":6},"end":{"line":53,"column":24}},"19":{"start":{"line":57,"column":2},"end":{"line":57,"column":13}}},"fnMap":{"0":{"name":"getPublicUrlOrPath","decl":{"start":{"line":22,"column":24},"end":{"line":22,"column":42}},"loc":{"start":{"line":25,"column":34},"end":{"line":58,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":29,"column":2},"end":{"line":38,"column":3}},"type":"if","locations":[{"start":{"line":29,"column":2},"end":{"line":38,"column":3}},{"start":{},"end":{}}]},"1":{"loc":{"start":{"line":31,"column":4},"end":{"line":31,"column":53}},"type":"if","locations":[{"start":{"line":31,"column":4},"end":{"line":31,"column":53}},{"start":{},"end":{}}]},"2":{"loc":{"start":{"line":34,"column":13},"end":{"line":34,"column":105}},"type":"cond-expr","locations":[{"start":{"line":34,"column":33},"end":{"line":34,"column":91}},{"start":{"line":34,"column":95},"end":{"line":34,"column":105}}]},"3":{"loc":{"start":{"line":34,"column":33},"end":{"line":34,"column":91}},"type":"cond-expr","locations":[{"start":{"line":34,"column":62},"end":{"line":34,"column":65}},{"start":{"line":34,"column":68},"end":{"line":34,"column":91}}]},"4":{"loc":{"start":{"line":40,"column":2},"end":{"line":55,"column":3}},"type":"if","locations":[{"start":{"line":40,"column":2},"end":{"line":55,"column":3}},{"start":{},"end":{}}]},"5":{"loc":{"start":{"line":42,"column":4},"end":{"line":42,"column":53}},"type":"if","locations":[{"start":{"line":42,"column":4},"end":{"line":42,"column":53}},{"start":{},"end":{}}]},"6":{"loc":{"start":{"line":45,"column":13},"end":{"line":51,"column":33}},"type":"cond-expr","locations":[{"start":{"line":46,"column":10},"end":{"line":48,"column":33}},{"start":{"line":49,"column":10},"end":{"line":51,"column":33}}]},"7":{"loc":{"start":{"line":46,"column":10},"end":{"line":48,"column":33}},"type":"cond-expr","locations":[{"start":{"line":47,"column":12},"end":{"line":47,"column":15}},{"start":{"line":48,"column":12},"end":{"line":48,"column":33}}]},"8":{"loc":{"start":{"line":49,"column":10},"end":{"line":51,"column":33}},"type":"cond-expr","locations":[{"start":{"line":50,"column":12},"end":{"line":50,"column":22}},{"start":{"line":51,"column":12},"end":{"line":51,"column":33}}]}},"s":{"0":3,"1":3,"2":12,"3":12,"4":3,"5":3,"6":1,"7":3,"8":3,"9":3,"10":0,"11":9,"12":7,"13":7,"14":1,"15":7,"16":7,"17":7,"18":0,"19":2},"f":{"0":12},"b":{"0":[3,9],"1":[1,2],"2":[2,1],"3":[1,1],"4":[7,2],"5":[1,6],"6":[1,6],"7":[0,1],"8":[1,5]}}
@@ -242,7 +242,7 @@
242
242
  <span class="cline-any cline-yes">2x</span>
243
243
  <span class="cline-any cline-neutral">&nbsp;</span>
244
244
  <span class="cline-any cline-yes">2x</span>
245
- <span class="cline-any cline-yes">131x</span>
245
+ <span class="cline-any cline-yes">111x</span>
246
246
  <span class="cline-any cline-yes">1x</span>
247
247
  <span class="cline-any cline-neutral">&nbsp;</span>
248
248
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -385,7 +385,7 @@ export default function getClientEnvironment(publicUrl: string, config: CustomCo
385
385
  <div class='footer quiet pad2 space-top1 center small'>
386
386
  Code coverage generated by
387
387
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
388
- at 2026-05-29T12:15:51.314Z
388
+ at 2026-06-07T15:01:17.247Z
389
389
  </div>
390
390
  <script src="../prettify.js"></script>
391
391
  <script>
@@ -131,7 +131,7 @@
131
131
  <div class='footer quiet pad2 space-top1 center small'>
132
132
  Code coverage generated by
133
133
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
- at 2026-05-29T12:15:51.314Z
134
+ at 2026-06-07T15:01:17.247Z
135
135
  </div>
136
136
  <script src="../prettify.js"></script>
137
137
  <script>
@@ -427,7 +427,7 @@ export default createAppPaths();
427
427
  <div class='footer quiet pad2 space-top1 center small'>
428
428
  Code coverage generated by
429
429
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
430
- at 2026-05-29T12:15:51.314Z
430
+ at 2026-06-07T15:01:17.247Z
431
431
  </div>
432
432
  <script src="../prettify.js"></script>
433
433
  <script>
@@ -196,7 +196,7 @@ export const defaultDevConfig = {
196
196
  <div class='footer quiet pad2 space-top1 center small'>
197
197
  Code coverage generated by
198
198
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
199
- at 2026-05-29T12:15:51.314Z
199
+ at 2026-06-07T15:01:17.247Z
200
200
  </div>
201
201
  <script src="../prettify.js"></script>
202
202
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">94.69% </span>
26
+ <span class="strong">94.95% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>107/113</span>
28
+ <span class='fraction'>113/119</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">84.12% </span>
33
+ <span class="strong">84.61% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>53/63</span>
35
+ <span class='fraction'>55/65</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">94.44% </span>
40
+ <span class="strong">95% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>17/18</span>
42
+ <span class='fraction'>19/20</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">95.28% </span>
47
+ <span class="strong">95.49% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>101/106</span>
49
+ <span class='fraction'>106/111</span>
50
50
  </div>
51
51
 
52
52
 
@@ -95,17 +95,17 @@
95
95
 
96
96
  <tr>
97
97
  <td class="file high" data-value="utils"><a href="utils/index.html">utils</a></td>
98
- <td data-value="94.11" class="pic high">
98
+ <td data-value="94.59" class="pic high">
99
99
  <div class="chart"><div class="cover-fill" style="width: 94%"></div><div class="cover-empty" style="width: 6%"></div></div>
100
100
  </td>
101
- <td data-value="94.11" class="pct high">94.11%</td>
102
- <td data-value="68" class="abs high">64/68</td>
103
- <td data-value="86.36" class="pct high">86.36%</td>
104
- <td data-value="44" class="abs high">38/44</td>
101
+ <td data-value="94.59" class="pct high">94.59%</td>
102
+ <td data-value="74" class="abs high">70/74</td>
103
+ <td data-value="86.95" class="pct high">86.95%</td>
104
+ <td data-value="46" class="abs high">40/46</td>
105
105
  <td data-value="100" class="pct high">100%</td>
106
- <td data-value="6" class="abs high">6/6</td>
107
- <td data-value="95.23" class="pct high">95.23%</td>
108
- <td data-value="63" class="abs high">60/63</td>
106
+ <td data-value="8" class="abs high">8/8</td>
107
+ <td data-value="95.58" class="pct high">95.58%</td>
108
+ <td data-value="68" class="abs high">65/68</td>
109
109
  </tr>
110
110
 
111
111
  </tbody>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2026-05-29T12:15:51.314Z
119
+ at 2026-06-07T15:01:17.247Z
120
120
  </div>
121
121
  <script src="prettify.js"></script>
122
122
  <script>
@@ -0,0 +1,196 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for utils/buildWrapperArgs.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../prettify.css" />
9
+ <link rel="stylesheet" href="../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../index.html">All files</a> / <a href="index.html">utils</a> buildWrapperArgs.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">100% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>6/6</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">100% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>2/2</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>2/2</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">100% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>5/5</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line high'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
104
+ <span class="cline-any cline-neutral">&nbsp;</span>
105
+ <span class="cline-any cline-neutral">&nbsp;</span>
106
+ <span class="cline-any cline-neutral">&nbsp;</span>
107
+ <span class="cline-any cline-neutral">&nbsp;</span>
108
+ <span class="cline-any cline-neutral">&nbsp;</span>
109
+ <span class="cline-any cline-neutral">&nbsp;</span>
110
+ <span class="cline-any cline-neutral">&nbsp;</span>
111
+ <span class="cline-any cline-neutral">&nbsp;</span>
112
+ <span class="cline-any cline-neutral">&nbsp;</span>
113
+ <span class="cline-any cline-neutral">&nbsp;</span>
114
+ <span class="cline-any cline-neutral">&nbsp;</span>
115
+ <span class="cline-any cline-neutral">&nbsp;</span>
116
+ <span class="cline-any cline-neutral">&nbsp;</span>
117
+ <span class="cline-any cline-neutral">&nbsp;</span>
118
+ <span class="cline-any cline-neutral">&nbsp;</span>
119
+ <span class="cline-any cline-neutral">&nbsp;</span>
120
+ <span class="cline-any cline-neutral">&nbsp;</span>
121
+ <span class="cline-any cline-neutral">&nbsp;</span>
122
+ <span class="cline-any cline-neutral">&nbsp;</span>
123
+ <span class="cline-any cline-neutral">&nbsp;</span>
124
+ <span class="cline-any cline-neutral">&nbsp;</span>
125
+ <span class="cline-any cline-neutral">&nbsp;</span>
126
+ <span class="cline-any cline-neutral">&nbsp;</span>
127
+ <span class="cline-any cline-neutral">&nbsp;</span>
128
+ <span class="cline-any cline-neutral">&nbsp;</span>
129
+ <span class="cline-any cline-neutral">&nbsp;</span>
130
+ <span class="cline-any cline-neutral">&nbsp;</span>
131
+ <span class="cline-any cline-yes">1x</span>
132
+ <span class="cline-any cline-yes">11x</span>
133
+ <span class="cline-any cline-yes">3x</span>
134
+ <span class="cline-any cline-neutral">&nbsp;</span>
135
+ <span class="cline-any cline-neutral">&nbsp;</span>
136
+ <span class="cline-any cline-yes">15x</span>
137
+ <span class="cline-any cline-neutral">&nbsp;</span>
138
+ <span class="cline-any cline-yes">8x</span>
139
+ <span class="cline-any cline-neutral">&nbsp;</span>
140
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
141
+ * Build the argv passed to an underlying CLI (eslint, prettier) for a
142
+ * `scripts &lt;cmd&gt;` wrapper, from the user-provided argv.
143
+ *
144
+ * - Empty input → `defaults` verbatim (the canonical no-args
145
+ * invocation, e.g. `['src', '--quiet']` for lint).
146
+ * - Non-empty input → user args (with the POSIX `--` end-of-options
147
+ * marker removed) followed by `target`.
148
+ *
149
+ * The previous heuristic tried to detect "user-provided path" by
150
+ * scanning for any argv entry not starting with `-`, then handed full
151
+ * control to the user. That broke two real consumer invocations:
152
+ *
153
+ * 1. `scripts lint --max-warnings 0` — the `0` value of the flag was
154
+ * misread as a path, so `src` was dropped and ESLint ran with no
155
+ * files.
156
+ * 2. `scripts lint -- --fix` — every arg started with `-`, so `src`
157
+ * was appended, but the surviving `--` separator forced ESLint to
158
+ * treat `--fix` and `src` as positional files.
159
+ *
160
+ * The wrapper is intentionally narrow: pass flags, get the default
161
+ * target. Consumers that need a non-default target should invoke the
162
+ * underlying CLI directly (`node_modules/.bin/eslint &lt;path&gt;`).
163
+ *
164
+ * @param userArgs - argv after `scripts &lt;cmd&gt;` (i.e. `process.argv.slice(2)`).
165
+ * @param options.defaults - argv to use when `userArgs` is empty.
166
+ * @param options.target - path/glob appended after user flags otherwise.
167
+ */
168
+ export function buildWrapperArgs(userArgs: string[], options: { defaults: string[]; target: string }): string[] {
169
+ if (userArgs.length === 0) {
170
+ return [...options.defaults];
171
+ }
172
+ &nbsp;
173
+ const passthrough = userArgs.filter((a) =&gt; a !== '--');
174
+ &nbsp;
175
+ return [...passthrough, options.target];
176
+ }
177
+ &nbsp;</pre></td></tr></table></pre>
178
+
179
+ <div class='push'></div><!-- for sticky footer -->
180
+ </div><!-- /wrapper -->
181
+ <div class='footer quiet pad2 space-top1 center small'>
182
+ Code coverage generated by
183
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
184
+ at 2026-06-07T15:01:17.247Z
185
+ </div>
186
+ <script src="../prettify.js"></script>
187
+ <script>
188
+ window.onload = function () {
189
+ prettyPrint();
190
+ };
191
+ </script>
192
+ <script src="../sorter.js"></script>
193
+ <script src="../block-navigation.js"></script>
194
+ </body>
195
+ </html>
196
+
@@ -163,7 +163,7 @@ export default function checkRequiredFiles(files: string[]): boolean {
163
163
  <div class='footer quiet pad2 space-top1 center small'>
164
164
  Code coverage generated by
165
165
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
166
- at 2026-05-29T12:15:51.314Z
166
+ at 2026-06-07T15:01:17.247Z
167
167
  </div>
168
168
  <script src="../prettify.js"></script>
169
169
  <script>
@@ -199,7 +199,7 @@ export default function formatWebpackMessages(json: any): FormattedMessages {
199
199
  <div class='footer quiet pad2 space-top1 center small'>
200
200
  Code coverage generated by
201
201
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
202
- at 2026-05-29T12:15:51.314Z
202
+ at 2026-06-07T15:01:17.247Z
203
203
  </div>
204
204
  <script src="../prettify.js"></script>
205
205
  <script>
@@ -244,7 +244,7 @@ export default function getPublicUrlOrPath(
244
244
  <div class='footer quiet pad2 space-top1 center small'>
245
245
  Code coverage generated by
246
246
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
247
- at 2026-05-29T12:15:51.314Z
247
+ at 2026-06-07T15:01:17.247Z
248
248
  </div>
249
249
  <script src="../prettify.js"></script>
250
250
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">94.11% </span>
26
+ <span class="strong">94.59% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>64/68</span>
28
+ <span class='fraction'>70/74</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">86.36% </span>
33
+ <span class="strong">86.95% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>38/44</span>
35
+ <span class='fraction'>40/46</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>6/6</span>
42
+ <span class='fraction'>8/8</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">95.23% </span>
47
+ <span class="strong">95.58% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>60/63</span>
49
+ <span class='fraction'>65/68</span>
50
50
  </div>
51
51
 
52
52
 
@@ -79,6 +79,21 @@
79
79
  </tr>
80
80
  </thead>
81
81
  <tbody><tr>
82
+ <td class="file high" data-value="buildWrapperArgs.ts"><a href="buildWrapperArgs.ts.html">buildWrapperArgs.ts</a></td>
83
+ <td data-value="100" class="pic high">
84
+ <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
85
+ </td>
86
+ <td data-value="100" class="pct high">100%</td>
87
+ <td data-value="6" class="abs high">6/6</td>
88
+ <td data-value="100" class="pct high">100%</td>
89
+ <td data-value="2" class="abs high">2/2</td>
90
+ <td data-value="100" class="pct high">100%</td>
91
+ <td data-value="2" class="abs high">2/2</td>
92
+ <td data-value="100" class="pct high">100%</td>
93
+ <td data-value="5" class="abs high">5/5</td>
94
+ </tr>
95
+
96
+ <tr>
82
97
  <td class="file high" data-value="checkRequiredFiles.ts"><a href="checkRequiredFiles.ts.html">checkRequiredFiles.ts</a></td>
83
98
  <td data-value="100" class="pic high">
84
99
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
@@ -146,7 +161,7 @@
146
161
  <div class='footer quiet pad2 space-top1 center small'>
147
162
  Code coverage generated by
148
163
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
149
- at 2026-05-29T12:15:51.314Z
164
+ at 2026-06-07T15:01:17.247Z
150
165
  </div>
151
166
  <script src="../prettify.js"></script>
152
167
  <script>
@@ -178,7 +178,7 @@ export function resolveBin(pkgName: string, binName: string = <span class="branc
178
178
  <div class='footer quiet pad2 space-top1 center small'>
179
179
  Code coverage generated by
180
180
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
181
- at 2026-05-29T12:15:51.314Z
181
+ at 2026-06-07T15:01:17.247Z
182
182
  </div>
183
183
  <script src="../prettify.js"></script>
184
184
  <script>
@@ -15,7 +15,7 @@ FNDA:5,(anonymous_2)
15
15
  FNDA:1,(anonymous_3)
16
16
  FNDA:0,(anonymous_4)
17
17
  FNDA:2,getClientEnvironment
18
- FNDA:131,(anonymous_6)
18
+ FNDA:111,(anonymous_6)
19
19
  FNDA:1,(anonymous_7)
20
20
  FNDA:13,(anonymous_8)
21
21
  DA:1,1
@@ -35,7 +35,7 @@ DA:52,0
35
35
  DA:69,1
36
36
  DA:72,2
37
37
  DA:74,2
38
- DA:75,131
38
+ DA:75,111
39
39
  DA:76,1
40
40
  DA:100,2
41
41
  DA:101,13
@@ -112,6 +112,26 @@ BRF:0
112
112
  BRH:0
113
113
  end_of_record
114
114
  TN:
115
+ SF:src/utils/buildWrapperArgs.ts
116
+ FN:29,buildWrapperArgs
117
+ FN:34,(anonymous_1)
118
+ FNF:2
119
+ FNH:2
120
+ FNDA:11,buildWrapperArgs
121
+ FNDA:15,(anonymous_1)
122
+ DA:29,1
123
+ DA:30,11
124
+ DA:31,3
125
+ DA:34,15
126
+ DA:36,8
127
+ LF:5
128
+ LH:5
129
+ BRDA:30,0,0,3
130
+ BRDA:30,0,1,8
131
+ BRF:2
132
+ BRH:2
133
+ end_of_record
134
+ TN:
115
135
  SF:src/utils/checkRequiredFiles.ts
116
136
  FN:15,checkRequiredFiles
117
137
  FN:18,(anonymous_2)
@@ -4,28 +4,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const cross_spawn_1 = __importDefault(require("cross-spawn"));
7
+ const buildWrapperArgs_1 = require("../utils/buildWrapperArgs");
7
8
  const resolveBin_1 = require("../utils/resolveBin");
8
9
  /**
9
- * `scripts lint` — ESLint over `src` with `--quiet`. ESLint 9 flat
10
- * config uses `eslint.config.js#files` for filtering (no `--ext`).
10
+ * `scripts lint` — ESLint over `src`. ESLint 9 flat config uses
11
+ * `eslint.config.js#files` for filtering (no `--ext`).
11
12
  *
12
- * If the consumer passes any path-like arg, they own the invocation
13
- * entirely. Flag-only invocations (e.g. `scripts lint --fix`) keep the
14
- * default `src` target so the common case Just Works.
13
+ * Flag args pass through; the default `src` target is always appended
14
+ * so the common case (`scripts lint --fix`, `scripts lint
15
+ * --max-warnings 0`, `scripts lint -- --fix`) Just Works. Consumers
16
+ * that need a different target should call `eslint` directly from
17
+ * `node_modules/.bin`.
15
18
  */
16
19
  const eslintBin = (0, resolveBin_1.resolveBin)('eslint');
17
20
  const userArgs = process.argv.slice(2);
18
- const userProvidedPath = userArgs.some((a) => !a.startsWith('-'));
19
- let args;
20
- if (userArgs.length === 0) {
21
- args = ['src', '--quiet'];
22
- }
23
- else if (userProvidedPath) {
24
- args = userArgs;
25
- }
26
- else {
27
- args = [...userArgs, 'src'];
28
- }
21
+ const args = (0, buildWrapperArgs_1.buildWrapperArgs)(userArgs, {
22
+ defaults: ['src', '--quiet'],
23
+ target: 'src',
24
+ });
29
25
  const result = cross_spawn_1.default.sync(process.execPath, [eslintBin, ...args], { stdio: 'inherit' });
30
26
  process.exit(result.status ?? 1);
31
27
  //# sourceMappingURL=lint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/command/lint.ts"],"names":[],"mappings":";;;;;AAAA,8DAAgC;AAEhC,oDAAiD;AAEjD;;;;;;;GAOG;AACH,MAAM,SAAS,GAAG,IAAA,uBAAU,EAAC,QAAQ,CAAC,CAAC;AAEvC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEvC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAElE,IAAI,IAAc,CAAC;AAEnB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC1B,IAAI,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC5B,CAAC;KAAM,IAAI,gBAAgB,EAAE,CAAC;IAC5B,IAAI,GAAG,QAAQ,CAAC;AAClB,CAAC;KAAM,CAAC;IACN,IAAI,GAAG,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,MAAM,GAAG,qBAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAExF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/command/lint.ts"],"names":[],"mappings":";;;;;AAAA,8DAAgC;AAEhC,gEAA6D;AAC7D,oDAAiD;AAEjD;;;;;;;;;GASG;AACH,MAAM,SAAS,GAAG,IAAA,uBAAU,EAAC,QAAQ,CAAC,CAAC;AAEvC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEvC,MAAM,IAAI,GAAG,IAAA,mCAAgB,EAAC,QAAQ,EAAE;IACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC;IAC5B,MAAM,EAAE,KAAK;CACd,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,qBAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAExF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC"}
@@ -4,28 +4,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const cross_spawn_1 = __importDefault(require("cross-spawn"));
7
+ const buildWrapperArgs_1 = require("../utils/buildWrapperArgs");
7
8
  const resolveBin_1 = require("../utils/resolveBin");
8
9
  /**
9
10
  * `scripts prettier` — `--check` over `src/**\/*.{ts,tsx,json,css,md}`.
10
11
  *
11
- * Flag-only user args (e.g. `scripts prettier --write`) keep the default
12
- * glob so `--write` is enough. A path-like arg switches to fully
13
- * user-controlled invocation.
12
+ * Flag args pass through; the default glob is always appended so
13
+ * `scripts prettier --write` Just Works. Consumers that need a
14
+ * different target should call `prettier` directly from
15
+ * `node_modules/.bin`.
14
16
  */
15
17
  const prettierBin = (0, resolveBin_1.resolveBin)('prettier');
16
18
  const DEFAULT_GLOB = 'src/**/*.{ts,tsx,json,css,md}';
17
19
  const userArgs = process.argv.slice(2);
18
- const userProvidedPath = userArgs.some((a) => !a.startsWith('-'));
19
- let args;
20
- if (userArgs.length === 0) {
21
- args = ['--check', DEFAULT_GLOB];
22
- }
23
- else if (userProvidedPath) {
24
- args = userArgs;
25
- }
26
- else {
27
- args = [...userArgs, DEFAULT_GLOB];
28
- }
20
+ const args = (0, buildWrapperArgs_1.buildWrapperArgs)(userArgs, {
21
+ defaults: ['--check', DEFAULT_GLOB],
22
+ target: DEFAULT_GLOB,
23
+ });
29
24
  const result = cross_spawn_1.default.sync(process.execPath, [prettierBin, ...args], { stdio: 'inherit' });
30
25
  process.exit(result.status ?? 1);
31
26
  //# sourceMappingURL=prettier.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prettier.js","sourceRoot":"","sources":["../../src/command/prettier.ts"],"names":[],"mappings":";;;;;AAAA,8DAAgC;AAEhC,oDAAiD;AAEjD;;;;;;GAMG;AACH,MAAM,WAAW,GAAG,IAAA,uBAAU,EAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,YAAY,GAAG,+BAA+B,CAAC;AAErD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEvC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAElE,IAAI,IAAc,CAAC;AAEnB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IAC1B,IAAI,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACnC,CAAC;KAAM,IAAI,gBAAgB,EAAE,CAAC;IAC5B,IAAI,GAAG,QAAQ,CAAC;AAClB,CAAC;KAAM,CAAC;IACN,IAAI,GAAG,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,MAAM,GAAG,qBAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAE1F,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"prettier.js","sourceRoot":"","sources":["../../src/command/prettier.ts"],"names":[],"mappings":";;;;;AAAA,8DAAgC;AAEhC,gEAA6D;AAC7D,oDAAiD;AAEjD;;;;;;;GAOG;AACH,MAAM,WAAW,GAAG,IAAA,uBAAU,EAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,YAAY,GAAG,+BAA+B,CAAC;AAErD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEvC,MAAM,IAAI,GAAG,IAAA,mCAAgB,EAAC,QAAQ,EAAE;IACtC,QAAQ,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC;IACnC,MAAM,EAAE,YAAY;CACrB,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,qBAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAE1F,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Build the argv passed to an underlying CLI (eslint, prettier) for a
3
+ * `scripts <cmd>` wrapper, from the user-provided argv.
4
+ *
5
+ * - Empty input → `defaults` verbatim (the canonical no-args
6
+ * invocation, e.g. `['src', '--quiet']` for lint).
7
+ * - Non-empty input → user args (with the POSIX `--` end-of-options
8
+ * marker removed) followed by `target`.
9
+ *
10
+ * The previous heuristic tried to detect "user-provided path" by
11
+ * scanning for any argv entry not starting with `-`, then handed full
12
+ * control to the user. That broke two real consumer invocations:
13
+ *
14
+ * 1. `scripts lint --max-warnings 0` — the `0` value of the flag was
15
+ * misread as a path, so `src` was dropped and ESLint ran with no
16
+ * files.
17
+ * 2. `scripts lint -- --fix` — every arg started with `-`, so `src`
18
+ * was appended, but the surviving `--` separator forced ESLint to
19
+ * treat `--fix` and `src` as positional files.
20
+ *
21
+ * The wrapper is intentionally narrow: pass flags, get the default
22
+ * target. Consumers that need a non-default target should invoke the
23
+ * underlying CLI directly (`node_modules/.bin/eslint <path>`).
24
+ *
25
+ * @param userArgs - argv after `scripts <cmd>` (i.e. `process.argv.slice(2)`).
26
+ * @param options.defaults - argv to use when `userArgs` is empty.
27
+ * @param options.target - path/glob appended after user flags otherwise.
28
+ */
29
+ export declare function buildWrapperArgs(userArgs: string[], options: {
30
+ defaults: string[];
31
+ target: string;
32
+ }): string[];
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildWrapperArgs = buildWrapperArgs;
4
+ /**
5
+ * Build the argv passed to an underlying CLI (eslint, prettier) for a
6
+ * `scripts <cmd>` wrapper, from the user-provided argv.
7
+ *
8
+ * - Empty input → `defaults` verbatim (the canonical no-args
9
+ * invocation, e.g. `['src', '--quiet']` for lint).
10
+ * - Non-empty input → user args (with the POSIX `--` end-of-options
11
+ * marker removed) followed by `target`.
12
+ *
13
+ * The previous heuristic tried to detect "user-provided path" by
14
+ * scanning for any argv entry not starting with `-`, then handed full
15
+ * control to the user. That broke two real consumer invocations:
16
+ *
17
+ * 1. `scripts lint --max-warnings 0` — the `0` value of the flag was
18
+ * misread as a path, so `src` was dropped and ESLint ran with no
19
+ * files.
20
+ * 2. `scripts lint -- --fix` — every arg started with `-`, so `src`
21
+ * was appended, but the surviving `--` separator forced ESLint to
22
+ * treat `--fix` and `src` as positional files.
23
+ *
24
+ * The wrapper is intentionally narrow: pass flags, get the default
25
+ * target. Consumers that need a non-default target should invoke the
26
+ * underlying CLI directly (`node_modules/.bin/eslint <path>`).
27
+ *
28
+ * @param userArgs - argv after `scripts <cmd>` (i.e. `process.argv.slice(2)`).
29
+ * @param options.defaults - argv to use when `userArgs` is empty.
30
+ * @param options.target - path/glob appended after user flags otherwise.
31
+ */
32
+ function buildWrapperArgs(userArgs, options) {
33
+ if (userArgs.length === 0) {
34
+ return [...options.defaults];
35
+ }
36
+ const passthrough = userArgs.filter((a) => a !== '--');
37
+ return [...passthrough, options.target];
38
+ }
39
+ //# sourceMappingURL=buildWrapperArgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildWrapperArgs.js","sourceRoot":"","sources":["../../src/utils/buildWrapperArgs.ts"],"names":[],"mappings":";;AA4BA,4CAQC;AApCD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,SAAgB,gBAAgB,CAAC,QAAkB,EAAE,OAA+C;IAClG,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAEvD,OAAO,CAAC,GAAG,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC"}
package/llms.txt CHANGED
@@ -21,8 +21,12 @@ behind four commands: `create`, `dev`, `build`, `test`.
21
21
  | `audit` | `yarn npm audit --severity moderate --no-deprecations` (falls back to `npm audit --audit-level=moderate`) |
22
22
  | `validate` | Pre-merge gate: `check-types` + `prettier` + `lint` in parallel, then `test --watchAll=false`. `--skip=lint,prettier` to drop steps. |
23
23
 
24
- Every command accepts pass-through args — `scripts lint -- --fix`,
25
- `scripts prettier -- --write src/`, `scripts check-types -- -p tsconfig.build.json`, etc.
24
+ Every command accepts pass-through args — `scripts lint --fix`,
25
+ `scripts prettier --write`, `scripts check-types -p tsconfig.build.json`, etc.
26
+ Do **not** use the POSIX `--` end-of-options separator: `lint` and
27
+ `prettier` always append the default target (`src` / the default glob),
28
+ so `eslint -- --fix src` would treat `--fix` and `src` as positional
29
+ files. Pass flags directly.
26
30
 
27
31
  Use via `package.json#scripts` — the whole consumer file becomes thin:
28
32
 
@@ -33,8 +37,9 @@ Use via `package.json#scripts` — the whole consumer file becomes thin:
33
37
  "build": "scripts build",
34
38
  "test": "scripts test",
35
39
  "lint": "scripts lint",
36
- "lint:fix": "scripts lint -- --fix",
40
+ "lint:fix": "scripts lint --fix",
37
41
  "prettier": "scripts prettier",
42
+ "format": "scripts prettier --write",
38
43
  "check-types": "scripts check-types",
39
44
  "audit-dependencies": "scripts audit",
40
45
  "validate": "scripts validate"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apollion-dsi/scripts",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "Apollion Framework CLI",
5
5
  "main": "lib/index.js",
6
6
  "bin": "lib/bin.js",
@@ -0,0 +1,73 @@
1
+ import { buildWrapperArgs } from '../utils/buildWrapperArgs';
2
+
3
+ describe('buildWrapperArgs', () => {
4
+ const lintOptions = { defaults: ['src', '--quiet'], target: 'src' };
5
+ const prettierOptions = {
6
+ defaults: ['--check', 'src/**/*.{ts,tsx,json,css,md}'],
7
+ target: 'src/**/*.{ts,tsx,json,css,md}',
8
+ };
9
+
10
+ describe('lint wrapper semantics', () => {
11
+ it('falls back to defaults when no user args', () => {
12
+ expect(buildWrapperArgs([], lintOptions)).toEqual(['src', '--quiet']);
13
+ });
14
+
15
+ it('returns a fresh defaults copy (does not alias the input array)', () => {
16
+ const defaults = ['src', '--quiet'];
17
+ const result = buildWrapperArgs([], { defaults, target: 'src' });
18
+
19
+ expect(result).not.toBe(defaults);
20
+ });
21
+
22
+ it('appends target after a single flag (lint --fix)', () => {
23
+ expect(buildWrapperArgs(['--fix'], lintOptions)).toEqual(['--fix', 'src']);
24
+ });
25
+
26
+ it('appends target after --flag=value form', () => {
27
+ expect(buildWrapperArgs(['--max-warnings=0'], lintOptions)).toEqual(['--max-warnings=0', 'src']);
28
+ });
29
+
30
+ it('appends target after --flag value (space-separated) form', () => {
31
+ // Regression: previously the literal `0` was misread as a path,
32
+ // dropping `src` from the eslint invocation so it ran with no files.
33
+ expect(buildWrapperArgs(['--max-warnings', '0'], lintOptions)).toEqual(['--max-warnings', '0', 'src']);
34
+ });
35
+
36
+ it('strips a POSIX `--` end-of-options marker before appending target', () => {
37
+ // Regression: the `--` previously survived into argv, so eslint
38
+ // treated `--fix` and `src` as positional file arguments and failed
39
+ // with "No files matching pattern '--fix'".
40
+ expect(buildWrapperArgs(['--', '--fix'], lintOptions)).toEqual(['--fix', 'src']);
41
+ });
42
+
43
+ it('strips multiple `--` markers (defensive)', () => {
44
+ expect(buildWrapperArgs(['--', '--fix', '--'], lintOptions)).toEqual(['--fix', 'src']);
45
+ });
46
+
47
+ it('preserves the order of user flags', () => {
48
+ expect(buildWrapperArgs(['--cache', '--max-warnings=0', '--fix'], lintOptions)).toEqual([
49
+ '--cache',
50
+ '--max-warnings=0',
51
+ '--fix',
52
+ 'src',
53
+ ]);
54
+ });
55
+ });
56
+
57
+ describe('prettier wrapper semantics', () => {
58
+ it('falls back to --check + DEFAULT_GLOB when no user args', () => {
59
+ expect(buildWrapperArgs([], prettierOptions)).toEqual(['--check', 'src/**/*.{ts,tsx,json,css,md}']);
60
+ });
61
+
62
+ it('appends DEFAULT_GLOB after --write', () => {
63
+ expect(buildWrapperArgs(['--write'], prettierOptions)).toEqual(['--write', 'src/**/*.{ts,tsx,json,css,md}']);
64
+ });
65
+
66
+ it('strips the `--` separator before appending DEFAULT_GLOB', () => {
67
+ expect(buildWrapperArgs(['--', '--write'], prettierOptions)).toEqual([
68
+ '--write',
69
+ 'src/**/*.{ts,tsx,json,css,md}',
70
+ ]);
71
+ });
72
+ });
73
+ });
@@ -1,30 +1,26 @@
1
1
  import spawn from 'cross-spawn';
2
2
 
3
+ import { buildWrapperArgs } from '../utils/buildWrapperArgs';
3
4
  import { resolveBin } from '../utils/resolveBin';
4
5
 
5
6
  /**
6
- * `scripts lint` — ESLint over `src` with `--quiet`. ESLint 9 flat
7
- * config uses `eslint.config.js#files` for filtering (no `--ext`).
7
+ * `scripts lint` — ESLint over `src`. ESLint 9 flat config uses
8
+ * `eslint.config.js#files` for filtering (no `--ext`).
8
9
  *
9
- * If the consumer passes any path-like arg, they own the invocation
10
- * entirely. Flag-only invocations (e.g. `scripts lint --fix`) keep the
11
- * default `src` target so the common case Just Works.
10
+ * Flag args pass through; the default `src` target is always appended
11
+ * so the common case (`scripts lint --fix`, `scripts lint
12
+ * --max-warnings 0`, `scripts lint -- --fix`) Just Works. Consumers
13
+ * that need a different target should call `eslint` directly from
14
+ * `node_modules/.bin`.
12
15
  */
13
16
  const eslintBin = resolveBin('eslint');
14
17
 
15
18
  const userArgs = process.argv.slice(2);
16
19
 
17
- const userProvidedPath = userArgs.some((a) => !a.startsWith('-'));
18
-
19
- let args: string[];
20
-
21
- if (userArgs.length === 0) {
22
- args = ['src', '--quiet'];
23
- } else if (userProvidedPath) {
24
- args = userArgs;
25
- } else {
26
- args = [...userArgs, 'src'];
27
- }
20
+ const args = buildWrapperArgs(userArgs, {
21
+ defaults: ['src', '--quiet'],
22
+ target: 'src',
23
+ });
28
24
 
29
25
  const result = spawn.sync(process.execPath, [eslintBin, ...args], { stdio: 'inherit' });
30
26
 
@@ -1,13 +1,15 @@
1
1
  import spawn from 'cross-spawn';
2
2
 
3
+ import { buildWrapperArgs } from '../utils/buildWrapperArgs';
3
4
  import { resolveBin } from '../utils/resolveBin';
4
5
 
5
6
  /**
6
7
  * `scripts prettier` — `--check` over `src/**\/*.{ts,tsx,json,css,md}`.
7
8
  *
8
- * Flag-only user args (e.g. `scripts prettier --write`) keep the default
9
- * glob so `--write` is enough. A path-like arg switches to fully
10
- * user-controlled invocation.
9
+ * Flag args pass through; the default glob is always appended so
10
+ * `scripts prettier --write` Just Works. Consumers that need a
11
+ * different target should call `prettier` directly from
12
+ * `node_modules/.bin`.
11
13
  */
12
14
  const prettierBin = resolveBin('prettier');
13
15
 
@@ -15,17 +17,10 @@ const DEFAULT_GLOB = 'src/**/*.{ts,tsx,json,css,md}';
15
17
 
16
18
  const userArgs = process.argv.slice(2);
17
19
 
18
- const userProvidedPath = userArgs.some((a) => !a.startsWith('-'));
19
-
20
- let args: string[];
21
-
22
- if (userArgs.length === 0) {
23
- args = ['--check', DEFAULT_GLOB];
24
- } else if (userProvidedPath) {
25
- args = userArgs;
26
- } else {
27
- args = [...userArgs, DEFAULT_GLOB];
28
- }
20
+ const args = buildWrapperArgs(userArgs, {
21
+ defaults: ['--check', DEFAULT_GLOB],
22
+ target: DEFAULT_GLOB,
23
+ });
29
24
 
30
25
  const result = spawn.sync(process.execPath, [prettierBin, ...args], { stdio: 'inherit' });
31
26
 
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Build the argv passed to an underlying CLI (eslint, prettier) for a
3
+ * `scripts <cmd>` wrapper, from the user-provided argv.
4
+ *
5
+ * - Empty input → `defaults` verbatim (the canonical no-args
6
+ * invocation, e.g. `['src', '--quiet']` for lint).
7
+ * - Non-empty input → user args (with the POSIX `--` end-of-options
8
+ * marker removed) followed by `target`.
9
+ *
10
+ * The previous heuristic tried to detect "user-provided path" by
11
+ * scanning for any argv entry not starting with `-`, then handed full
12
+ * control to the user. That broke two real consumer invocations:
13
+ *
14
+ * 1. `scripts lint --max-warnings 0` — the `0` value of the flag was
15
+ * misread as a path, so `src` was dropped and ESLint ran with no
16
+ * files.
17
+ * 2. `scripts lint -- --fix` — every arg started with `-`, so `src`
18
+ * was appended, but the surviving `--` separator forced ESLint to
19
+ * treat `--fix` and `src` as positional files.
20
+ *
21
+ * The wrapper is intentionally narrow: pass flags, get the default
22
+ * target. Consumers that need a non-default target should invoke the
23
+ * underlying CLI directly (`node_modules/.bin/eslint <path>`).
24
+ *
25
+ * @param userArgs - argv after `scripts <cmd>` (i.e. `process.argv.slice(2)`).
26
+ * @param options.defaults - argv to use when `userArgs` is empty.
27
+ * @param options.target - path/glob appended after user flags otherwise.
28
+ */
29
+ export function buildWrapperArgs(userArgs: string[], options: { defaults: string[]; target: string }): string[] {
30
+ if (userArgs.length === 0) {
31
+ return [...options.defaults];
32
+ }
33
+
34
+ const passthrough = userArgs.filter((a) => a !== '--');
35
+
36
+ return [...passthrough, options.target];
37
+ }