@taliesinb/mash 0.0.0-stage → 0.1.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.
Files changed (203) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +275 -2
  3. package/bin/mash.ts +253 -0
  4. package/dist/bin/mash.d.ts +39 -0
  5. package/dist/bin/mash.d.ts.map +1 -0
  6. package/dist/bin/mash.js +281 -0
  7. package/dist/bin/mash.js.map +1 -0
  8. package/dist/src/analysis/analyze.d.ts +97 -0
  9. package/dist/src/analysis/analyze.d.ts.map +1 -0
  10. package/dist/src/analysis/analyze.js +1406 -0
  11. package/dist/src/analysis/analyze.js.map +1 -0
  12. package/dist/src/analysis/fs.d.ts +39 -0
  13. package/dist/src/analysis/fs.d.ts.map +1 -0
  14. package/dist/src/analysis/fs.js +117 -0
  15. package/dist/src/analysis/fs.js.map +1 -0
  16. package/dist/src/analysis/outputs.d.ts +16 -0
  17. package/dist/src/analysis/outputs.d.ts.map +1 -0
  18. package/dist/src/analysis/outputs.js +277 -0
  19. package/dist/src/analysis/outputs.js.map +1 -0
  20. package/dist/src/analysis/value.d.ts +76 -0
  21. package/dist/src/analysis/value.d.ts.map +1 -0
  22. package/dist/src/analysis/value.js +248 -0
  23. package/dist/src/analysis/value.js.map +1 -0
  24. package/dist/src/behaviors/defs/core.d.ts +15 -0
  25. package/dist/src/behaviors/defs/core.d.ts.map +1 -0
  26. package/dist/src/behaviors/defs/core.js +1084 -0
  27. package/dist/src/behaviors/defs/core.js.map +1 -0
  28. package/dist/src/behaviors/defs/devtools.d.ts +9 -0
  29. package/dist/src/behaviors/defs/devtools.d.ts.map +1 -0
  30. package/dist/src/behaviors/defs/devtools.js +432 -0
  31. package/dist/src/behaviors/defs/devtools.js.map +1 -0
  32. package/dist/src/behaviors/defs/macos.d.ts +12 -0
  33. package/dist/src/behaviors/defs/macos.d.ts.map +1 -0
  34. package/dist/src/behaviors/defs/macos.js +454 -0
  35. package/dist/src/behaviors/defs/macos.js.map +1 -0
  36. package/dist/src/behaviors/defs/tools.d.ts +9 -0
  37. package/dist/src/behaviors/defs/tools.d.ts.map +1 -0
  38. package/dist/src/behaviors/defs/tools.js +639 -0
  39. package/dist/src/behaviors/defs/tools.js.map +1 -0
  40. package/dist/src/behaviors/dsl.d.ts +95 -0
  41. package/dist/src/behaviors/dsl.d.ts.map +1 -0
  42. package/dist/src/behaviors/dsl.js +267 -0
  43. package/dist/src/behaviors/dsl.js.map +1 -0
  44. package/dist/src/behaviors/index.d.ts +12 -0
  45. package/dist/src/behaviors/index.d.ts.map +1 -0
  46. package/dist/src/behaviors/index.js +18 -0
  47. package/dist/src/behaviors/index.js.map +1 -0
  48. package/dist/src/behaviors/registry.d.ts +45 -0
  49. package/dist/src/behaviors/registry.d.ts.map +1 -0
  50. package/dist/src/behaviors/registry.js +266 -0
  51. package/dist/src/behaviors/registry.js.map +1 -0
  52. package/dist/src/behaviors/roles.d.ts +29 -0
  53. package/dist/src/behaviors/roles.d.ts.map +1 -0
  54. package/dist/src/behaviors/roles.js +198 -0
  55. package/dist/src/behaviors/roles.js.map +1 -0
  56. package/dist/src/behaviors/types.d.ts +120 -0
  57. package/dist/src/behaviors/types.d.ts.map +1 -0
  58. package/dist/src/behaviors/types.js +12 -0
  59. package/dist/src/behaviors/types.js.map +1 -0
  60. package/dist/src/index.d.ts +27 -0
  61. package/dist/src/index.d.ts.map +1 -0
  62. package/dist/src/index.js +24 -0
  63. package/dist/src/index.js.map +1 -0
  64. package/dist/src/integrations/deepsea.d.ts +121 -0
  65. package/dist/src/integrations/deepsea.d.ts.map +1 -0
  66. package/dist/src/integrations/deepsea.js +199 -0
  67. package/dist/src/integrations/deepsea.js.map +1 -0
  68. package/dist/src/machine.d.ts +139 -0
  69. package/dist/src/machine.d.ts.map +1 -0
  70. package/dist/src/machine.js +400 -0
  71. package/dist/src/machine.js.map +1 -0
  72. package/dist/src/parser/ast.d.ts +369 -0
  73. package/dist/src/parser/ast.d.ts.map +1 -0
  74. package/dist/src/parser/ast.js +17 -0
  75. package/dist/src/parser/ast.js.map +1 -0
  76. package/dist/src/parser/parser.d.ts +48 -0
  77. package/dist/src/parser/parser.d.ts.map +1 -0
  78. package/dist/src/parser/parser.js +1950 -0
  79. package/dist/src/parser/parser.js.map +1 -0
  80. package/dist/src/policy/effects.d.ts +86 -0
  81. package/dist/src/policy/effects.d.ts.map +1 -0
  82. package/dist/src/policy/effects.js +53 -0
  83. package/dist/src/policy/effects.js.map +1 -0
  84. package/dist/src/policy/policy.d.ts +130 -0
  85. package/dist/src/policy/policy.d.ts.map +1 -0
  86. package/dist/src/policy/policy.js +532 -0
  87. package/dist/src/policy/policy.js.map +1 -0
  88. package/dist/src/printer/doc.d.ts +151 -0
  89. package/dist/src/printer/doc.d.ts.map +1 -0
  90. package/dist/src/printer/doc.js +409 -0
  91. package/dist/src/printer/doc.js.map +1 -0
  92. package/dist/src/printer/highlight.d.ts +53 -0
  93. package/dist/src/printer/highlight.d.ts.map +1 -0
  94. package/dist/src/printer/highlight.js +339 -0
  95. package/dist/src/printer/highlight.js.map +1 -0
  96. package/dist/src/printer/html.d.ts +72 -0
  97. package/dist/src/printer/html.d.ts.map +1 -0
  98. package/dist/src/printer/html.js +423 -0
  99. package/dist/src/printer/html.js.map +1 -0
  100. package/dist/src/printer/print.d.ts +63 -0
  101. package/dist/src/printer/print.d.ts.map +1 -0
  102. package/dist/src/printer/print.js +484 -0
  103. package/dist/src/printer/print.js.map +1 -0
  104. package/dist/src/printer/summary.d.ts +50 -0
  105. package/dist/src/printer/summary.d.ts.map +1 -0
  106. package/dist/src/printer/summary.js +621 -0
  107. package/dist/src/printer/summary.js.map +1 -0
  108. package/dist/src/trace/events.d.ts +183 -0
  109. package/dist/src/trace/events.d.ts.map +1 -0
  110. package/dist/src/trace/events.js +9 -0
  111. package/dist/src/trace/events.js.map +1 -0
  112. package/dist/src/trace/progress.d.ts +58 -0
  113. package/dist/src/trace/progress.d.ts.map +1 -0
  114. package/dist/src/trace/progress.js +83 -0
  115. package/dist/src/trace/progress.js.map +1 -0
  116. package/dist/src/vm/arith.d.ts +29 -0
  117. package/dist/src/vm/arith.d.ts.map +1 -0
  118. package/dist/src/vm/arith.js +258 -0
  119. package/dist/src/vm/arith.js.map +1 -0
  120. package/dist/src/vm/builtins.d.ts +31 -0
  121. package/dist/src/vm/builtins.d.ts.map +1 -0
  122. package/dist/src/vm/builtins.js +1773 -0
  123. package/dist/src/vm/builtins.js.map +1 -0
  124. package/dist/src/vm/emulate.d.ts +75 -0
  125. package/dist/src/vm/emulate.d.ts.map +1 -0
  126. package/dist/src/vm/emulate.js +380 -0
  127. package/dist/src/vm/emulate.js.map +1 -0
  128. package/dist/src/vm/expand.d.ts +68 -0
  129. package/dist/src/vm/expand.d.ts.map +1 -0
  130. package/dist/src/vm/expand.js +744 -0
  131. package/dist/src/vm/expand.js.map +1 -0
  132. package/dist/src/vm/external.d.ts +34 -0
  133. package/dist/src/vm/external.d.ts.map +1 -0
  134. package/dist/src/vm/external.js +228 -0
  135. package/dist/src/vm/external.js.map +1 -0
  136. package/dist/src/vm/fifo.d.ts +66 -0
  137. package/dist/src/vm/fifo.d.ts.map +1 -0
  138. package/dist/src/vm/fifo.js +232 -0
  139. package/dist/src/vm/fifo.js.map +1 -0
  140. package/dist/src/vm/interp.d.ts +209 -0
  141. package/dist/src/vm/interp.d.ts.map +1 -0
  142. package/dist/src/vm/interp.js +1641 -0
  143. package/dist/src/vm/interp.js.map +1 -0
  144. package/dist/src/vm/io.d.ts +180 -0
  145. package/dist/src/vm/io.d.ts.map +1 -0
  146. package/dist/src/vm/io.js +502 -0
  147. package/dist/src/vm/io.js.map +1 -0
  148. package/dist/src/vm/pattern.d.ts +46 -0
  149. package/dist/src/vm/pattern.d.ts.map +1 -0
  150. package/dist/src/vm/pattern.js +498 -0
  151. package/dist/src/vm/pattern.js.map +1 -0
  152. package/dist/src/vm/proc.d.ts +94 -0
  153. package/dist/src/vm/proc.d.ts.map +1 -0
  154. package/dist/src/vm/proc.js +130 -0
  155. package/dist/src/vm/proc.js.map +1 -0
  156. package/dist/src/vm/state.d.ts +104 -0
  157. package/dist/src/vm/state.d.ts.map +1 -0
  158. package/dist/src/vm/state.js +233 -0
  159. package/dist/src/vm/state.js.map +1 -0
  160. package/dist/src/vm/test.d.ts +11 -0
  161. package/dist/src/vm/test.d.ts.map +1 -0
  162. package/dist/src/vm/test.js +277 -0
  163. package/dist/src/vm/test.js.map +1 -0
  164. package/package.json +63 -4
  165. package/src/analysis/analyze.ts +1395 -0
  166. package/src/analysis/fs.ts +121 -0
  167. package/src/analysis/outputs.ts +242 -0
  168. package/src/analysis/value.ts +264 -0
  169. package/src/behaviors/defs/core.ts +970 -0
  170. package/src/behaviors/defs/devtools.ts +400 -0
  171. package/src/behaviors/defs/macos.ts +426 -0
  172. package/src/behaviors/defs/tools.ts +596 -0
  173. package/src/behaviors/dsl.ts +293 -0
  174. package/src/behaviors/index.ts +19 -0
  175. package/src/behaviors/registry.ts +261 -0
  176. package/src/behaviors/roles.ts +187 -0
  177. package/src/behaviors/types.ts +127 -0
  178. package/src/index.ts +27 -0
  179. package/src/integrations/deepsea.ts +259 -0
  180. package/src/machine.ts +483 -0
  181. package/src/parser/ast.ts +472 -0
  182. package/src/parser/parser.ts +1826 -0
  183. package/src/policy/effects.ts +102 -0
  184. package/src/policy/policy.ts +578 -0
  185. package/src/printer/doc.ts +454 -0
  186. package/src/printer/highlight.ts +283 -0
  187. package/src/printer/html.ts +441 -0
  188. package/src/printer/print.ts +528 -0
  189. package/src/printer/summary.ts +601 -0
  190. package/src/trace/events.ts +102 -0
  191. package/src/trace/progress.ts +119 -0
  192. package/src/vm/arith.ts +236 -0
  193. package/src/vm/builtins.ts +1590 -0
  194. package/src/vm/emulate.ts +337 -0
  195. package/src/vm/expand.ts +721 -0
  196. package/src/vm/external.ts +265 -0
  197. package/src/vm/fifo.ts +226 -0
  198. package/src/vm/interp.ts +1623 -0
  199. package/src/vm/io.ts +570 -0
  200. package/src/vm/pattern.ts +477 -0
  201. package/src/vm/proc.ts +147 -0
  202. package/src/vm/state.ts +267 -0
  203. package/src/vm/test.ts +253 -0
@@ -0,0 +1,339 @@
1
+ /**
2
+ * Syntax classes for every character of a parsed script, from the AST (not
3
+ * regexes). Outer constructs are painted first and inner ones override, so
4
+ * `"$x"` as an argument is a string with a variable inside.
5
+ *
6
+ * Class names (short, semantic; styled by HTML_CSS in html.ts):
7
+ * kw keywords and grouping (`if`, `do`, `{`, `[[`)
8
+ * op control operators (`|`, `&&`, `;`, `;;`)
9
+ * cmd command names flag options (`-x`, `--long`)
10
+ * str quoted strings esc escapes (`\x`)
11
+ * var parameter expansions sub `$( )`, backquotes, `<( )`
12
+ * ar arithmetic num numbers in arithmetic
13
+ * asg assignment names rd redirections and here-doc delimiters
14
+ * hd here-doc bodies cm comments
15
+ * fn function names ct line continuations (`\`)
16
+ * dir directory arguments file file arguments, redirection targets
17
+ * re search patterns code program text (`sed`/`awk`/`jq` programs, `python -c`, `bash -c`)
18
+ * sc subcommands (`git status`, `npm run build`, `docker compose up`)
19
+ *
20
+ * Argument roles (`dir`, `file`, `re`, `code`, and `cmd` for nested commands
21
+ * such as `timeout 5 npx vitest`) come from the behavior definitions
22
+ * (src/behaviors/roles.ts); they recolor plain and quoted text but keep
23
+ * variables and substitutions inside the word.
24
+ */
25
+ import { literalOf } from "../parser/parser.js";
26
+ import { argRoles } from "../behaviors/roles.js";
27
+ export const CLASS_NAMES = ['', 'kw', 'op', 'cmd', 'flag', 'str', 'esc', 'var', 'sub', 'ar', 'num', 'asg', 'rd', 'hd', 'cm', 'fn', 'dir', 'file', 're', 'code', 'sc'];
28
+ const INDEX = new Map(CLASS_NAMES.map((c, i) => [c, i]));
29
+ const ROLE_CLASS = { dir: 'dir', file: 'file', pattern: 're', code: 'code', cmd: 'cmd', subcommand: 'sc' };
30
+ /** Classes a role may recolor (variables, substitutions, arithmetic stay). */
31
+ const RECOLOR = new Set([INDEX.get(''), INDEX.get('str'), INDEX.get('esc')]);
32
+ /** Roles of a simple command's words (aligned with `c.words`), from the behavior definitions. */
33
+ export function simpleCommandRoles(c) {
34
+ const words = c.words.map((w) => (w.type === 'Word' ? literalOf(w) ?? undefined : undefined));
35
+ if (words[0] === undefined)
36
+ return words.map(() => undefined);
37
+ return argRoles(words);
38
+ }
39
+ export class Highlight {
40
+ cls;
41
+ source;
42
+ constructor(script, source) {
43
+ this.source = source;
44
+ this.cls = new Uint8Array(source.length);
45
+ for (const s of script.body)
46
+ this.stmt(s);
47
+ for (const c of script.comments ?? [])
48
+ this.paint(c.span.start, c.span.end, 'cm');
49
+ }
50
+ /** The class runs covering `[start, end)`. */
51
+ runs(start, end) {
52
+ const out = [];
53
+ let i = start;
54
+ while (i < end) {
55
+ const c = this.cls[i];
56
+ let j = i + 1;
57
+ while (j < end && this.cls[j] === c)
58
+ j++;
59
+ out.push({ text: this.source.slice(i, j), cls: CLASS_NAMES[c] });
60
+ i = j;
61
+ }
62
+ return out;
63
+ }
64
+ /** Recolor the plain and quoted characters of a span. */
65
+ recolor(start, end, cls) {
66
+ const v = INDEX.get(cls) ?? 0;
67
+ for (let i = Math.max(0, start); i < Math.min(end, this.cls.length); i++)
68
+ if (RECOLOR.has(this.cls[i]))
69
+ this.cls[i] = v;
70
+ }
71
+ paint(start, end, cls) {
72
+ const v = INDEX.get(cls) ?? 0;
73
+ for (let i = Math.max(0, start); i < Math.min(end, this.cls.length); i++)
74
+ this.cls[i] = v;
75
+ }
76
+ stmts(list) {
77
+ for (const s of list)
78
+ this.stmt(s);
79
+ }
80
+ stmt(s) {
81
+ this.command(s.command);
82
+ }
83
+ command(c) {
84
+ switch (c.type) {
85
+ case 'SimpleCommand': {
86
+ for (const a of c.assigns)
87
+ this.assign(a);
88
+ let first = true;
89
+ let roles = [];
90
+ try {
91
+ roles = simpleCommandRoles(c);
92
+ }
93
+ catch {
94
+ // display only
95
+ }
96
+ c.words.forEach((w, i) => {
97
+ if (w.type === 'Assign') {
98
+ this.assign(w);
99
+ return;
100
+ }
101
+ const text = this.source.slice(w.span.start, w.span.end);
102
+ this.word(w, first ? 'cmd' : /^-./.test(text) ? 'flag' : '');
103
+ first = false;
104
+ const role = roles[i];
105
+ if (role && i > 0)
106
+ this.recolor(w.span.start, w.span.end, ROLE_CLASS[role]);
107
+ });
108
+ for (const r of c.redirs)
109
+ this.redirect(r);
110
+ return;
111
+ }
112
+ case 'Pipeline':
113
+ for (const st of c.stages)
114
+ this.command(st);
115
+ return;
116
+ case 'AndOr':
117
+ for (const it of c.items)
118
+ this.command(it);
119
+ return;
120
+ case 'FunctionDef':
121
+ this.paint(c.span.start, c.body.span.start, 'fn');
122
+ this.command(c.body);
123
+ return;
124
+ case 'Subshell':
125
+ case 'Group':
126
+ this.stmts(c.body);
127
+ break;
128
+ case 'If':
129
+ for (const cl of c.clauses) {
130
+ this.stmts(cl.cond);
131
+ this.stmts(cl.body);
132
+ }
133
+ if (c.elseBody)
134
+ this.stmts(c.elseBody);
135
+ break;
136
+ case 'Loop':
137
+ this.stmts(c.cond);
138
+ this.stmts(c.body);
139
+ break;
140
+ case 'For':
141
+ case 'Select':
142
+ for (const w of c.items ?? [])
143
+ this.word(w, '');
144
+ this.stmts(c.body);
145
+ break;
146
+ case 'ArithFor': {
147
+ this.paint(c.span.start, c.span.start + 3, 'kw');
148
+ const exprs = [c.init, c.cond, c.step].filter((e) => e !== null);
149
+ const from = exprs.length ? exprs[exprs.length - 1].span.end : c.span.start;
150
+ const close = this.source.indexOf('))', from);
151
+ this.paint(c.span.start + 3, close + 2, 'ar');
152
+ for (const e of exprs)
153
+ this.arith(e);
154
+ this.stmts(c.body);
155
+ break;
156
+ }
157
+ case 'Case':
158
+ this.word(c.word, '');
159
+ for (const it of c.items) {
160
+ for (const p of it.patterns)
161
+ this.word(p, '');
162
+ this.stmts(it.body);
163
+ }
164
+ break;
165
+ case 'ArithCommand': {
166
+ const end = c.redirs[0]?.span.start ?? c.span.end;
167
+ this.paint(c.span.start, end, 'ar');
168
+ this.arith(c.expr);
169
+ break;
170
+ }
171
+ case 'CondCommand': {
172
+ const end = this.source.lastIndexOf(']]', c.redirs[0]?.span.start ?? c.span.end);
173
+ this.paint(c.span.start, c.span.start + 2, 'kw');
174
+ if (end >= 0)
175
+ this.paint(end, end + 2, 'kw');
176
+ this.cond(c.expr);
177
+ break;
178
+ }
179
+ }
180
+ for (const r of c.redirs)
181
+ this.redirect(r);
182
+ }
183
+ assign(a) {
184
+ const valueStart = a.value ? a.value.span.start : a.span.end;
185
+ this.paint(a.span.start, valueStart, 'asg');
186
+ if (a.index)
187
+ this.word(a.index, '');
188
+ if (!a.value)
189
+ return;
190
+ if (a.value.type === 'Word')
191
+ this.word(a.value, '');
192
+ else
193
+ for (const el of a.value.elems) {
194
+ if (el.index)
195
+ this.word(el.index, '');
196
+ this.word(el.value, '');
197
+ }
198
+ }
199
+ redirect(r) {
200
+ this.paint(r.span.start, r.target.span.start, 'rd');
201
+ if (r.heredoc) {
202
+ this.paint(r.target.span.start, r.target.span.end, 'rd');
203
+ const b = r.heredoc.body;
204
+ this.paint(b.span.start, b.span.end, 'hd');
205
+ if (!r.heredoc.quoted)
206
+ this.parts(b.parts);
207
+ return;
208
+ }
209
+ this.word(r.target, '');
210
+ // a file target; an fd duplication (`2>&1`, `>&-`) is all redirection
211
+ if (/&$/.test(this.source.slice(r.span.start, r.target.span.start).trim()))
212
+ this.recolor(r.target.span.start, r.target.span.end, 'rd');
213
+ else
214
+ this.recolor(r.target.span.start, r.target.span.end, 'file');
215
+ }
216
+ word(w, base) {
217
+ if (base)
218
+ this.paint(w.span.start, w.span.end, base);
219
+ this.parts(w.parts);
220
+ }
221
+ parts(parts) {
222
+ for (const p of parts) {
223
+ switch (p.type) {
224
+ case 'Lit':
225
+ break;
226
+ case 'SglQuoted':
227
+ this.paint(p.span.start, p.span.end, 'str');
228
+ break;
229
+ case 'Escaped':
230
+ this.paint(p.span.start, p.span.end, 'esc');
231
+ break;
232
+ case 'DblQuoted':
233
+ this.paint(p.span.start, p.span.end, 'str');
234
+ this.parts(p.parts);
235
+ break;
236
+ case 'ParamExp':
237
+ this.paint(p.span.start, p.span.end, 'var');
238
+ if (p.index)
239
+ this.parts(p.index.parts);
240
+ if (p.op && 'word' in p.op && p.op.word)
241
+ this.parts(p.op.word.parts);
242
+ if (p.op && p.op.kind === 'replace') {
243
+ this.parts(p.op.pattern.parts);
244
+ if (p.op.replacement)
245
+ this.parts(p.op.replacement.parts);
246
+ }
247
+ if (p.op && (p.op.kind === 'removePrefix' || p.op.kind === 'removeSuffix'))
248
+ this.parts(p.op.pattern.parts);
249
+ break;
250
+ case 'CmdSubst':
251
+ if (p.backquote) {
252
+ this.paint(p.span.start, p.span.start + 1, 'sub');
253
+ this.paint(p.span.end - 1, p.span.end, 'sub');
254
+ }
255
+ else {
256
+ this.paint(p.span.start, p.span.start + 2, 'sub');
257
+ this.paint(p.span.end - 1, p.span.end, 'sub');
258
+ }
259
+ this.stmts(p.body);
260
+ break;
261
+ case 'ProcSubst':
262
+ this.paint(p.span.start, p.span.start + 2, 'sub');
263
+ this.paint(p.span.end - 1, p.span.end, 'sub');
264
+ this.stmts(p.body);
265
+ break;
266
+ case 'ArithExp':
267
+ this.paint(p.span.start, p.span.end, 'ar');
268
+ this.arith(p.expr);
269
+ break;
270
+ }
271
+ }
272
+ }
273
+ arith(e) {
274
+ switch (e.type) {
275
+ case 'ArithNum':
276
+ this.paint(e.span.start, e.span.end, 'num');
277
+ break;
278
+ case 'ArithVar':
279
+ this.paint(e.span.start, e.span.start + e.name.length, 'var');
280
+ if (e.index)
281
+ this.arith(e.index);
282
+ break;
283
+ case 'ArithWord':
284
+ this.parts(e.word.parts);
285
+ break;
286
+ case 'ArithUnary':
287
+ this.arith(e.operand);
288
+ break;
289
+ case 'ArithBinary':
290
+ this.arith(e.left);
291
+ this.arith(e.right);
292
+ break;
293
+ case 'ArithAssign':
294
+ this.arith(e.target);
295
+ this.arith(e.value);
296
+ break;
297
+ case 'ArithTernary':
298
+ this.arith(e.cond);
299
+ this.arith(e.then);
300
+ this.arith(e.else);
301
+ break;
302
+ case 'ArithIncDec':
303
+ this.arith(e.target);
304
+ break;
305
+ case 'ArithGroup':
306
+ this.arith(e.expr);
307
+ break;
308
+ }
309
+ }
310
+ cond(e) {
311
+ switch (e.type) {
312
+ case 'CondWord':
313
+ this.word(e.word, '');
314
+ break;
315
+ case 'CondUnary':
316
+ this.paint(e.span.start, e.operand.span.start, 'op');
317
+ this.word(e.operand, '');
318
+ break;
319
+ case 'CondBinary':
320
+ this.word(e.left, '');
321
+ this.paint(e.left.span.end, e.right.span.start, 'op');
322
+ this.word(e.right, e.op === '=~' ? 'str' : '');
323
+ break;
324
+ case 'CondNot':
325
+ this.paint(e.span.start, e.span.start + 1, 'op');
326
+ this.cond(e.operand);
327
+ break;
328
+ case 'CondAndOr':
329
+ this.cond(e.left);
330
+ this.paint(e.left.span.end, e.right.span.start, 'op');
331
+ this.cond(e.right);
332
+ break;
333
+ case 'CondGroup':
334
+ this.cond(e.expr);
335
+ break;
336
+ }
337
+ }
338
+ }
339
+ //# sourceMappingURL=highlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../../src/printer/highlight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * HTML-native pretty-printing: the same layout as `format`, emitted as
3
+ * syntax-highlighted spans, with best-effort truncation of over-long words so
4
+ * lines fit the width. Truncated output is for display only (it is not valid
5
+ * bash); hidden text stays in the DOM and a click can reveal it.
6
+ *
7
+ * Truncation is a small search, not an optimum: render, find lines over the
8
+ * width, shorten the most suitable atom on each (quoted strings and
9
+ * substitutions first, never command names or flags), re-render, repeat until
10
+ * nothing changes. Multi-line atoms (quoted strings, here-doc bodies) get
11
+ * their continuation lines clipped to the width and are collapsed to their
12
+ * first lines when they are longer than `maxLines`.
13
+ */
14
+ import type * as A from '../parser/ast.ts';
15
+ import { type FormatOptions } from './print.ts';
16
+ export interface HtmlOptions extends FormatOptions {
17
+ /** Shorten over-long atoms so lines fit `width` (default true). */
18
+ truncate?: boolean;
19
+ /** Lines shown of a multi-line string or here-doc body before collapsing (default 8). */
20
+ maxLines?: number;
21
+ /** Never shorten an atom's first line below this many columns (default 16). */
22
+ minKeep?: number;
23
+ /** Re-layout rounds (default 12). */
24
+ maxIterations?: number;
25
+ /**
26
+ * Prefer shortening over breaking (default true): a line that fits once its
27
+ * strings and paths are shortened is not wrapped; the full text stays in
28
+ * the DOM (and tooltip). False lays out like `format`, then shortens.
29
+ */
30
+ preferTruncation?: boolean;
31
+ /**
32
+ * Resolve file and directory arguments statically (default true): the
33
+ * working directory at each command comes from the static analysis (it
34
+ * follows `cd`), starting from `cwd` (unknown when not given). Known paths
35
+ * get a tooltip (`as written → /absolute/path` when they differ beyond `~`)
36
+ * and a `data-href="file://…"` that {@link attachHtmlHandlers} opens.
37
+ */
38
+ paths?: boolean;
39
+ /** Working directory the snippet starts in. */
40
+ cwd?: string;
41
+ /** Home directory for `~` (default: $HOME). */
42
+ home?: string;
43
+ }
44
+ export interface HtmlResult {
45
+ /** `<pre class="mash">…</pre>` */
46
+ html: string;
47
+ /** The displayed text (with `…` where truncated). */
48
+ text: string;
49
+ /** Number of atoms shortened or collapsed. */
50
+ truncated: number;
51
+ /** Lines still wider than `width` (unbreakable code, not truncatable). */
52
+ overflowing: number;
53
+ }
54
+ /** Pretty-print `source` as highlighted (and, by default, truncated) HTML. */
55
+ export declare function formatHtml(source: string, options?: HtmlOptions): HtmlResult;
56
+ export declare function printScriptHtml(script: A.Script, source: string, options?: HtmlOptions): HtmlResult;
57
+ /**
58
+ * Click behavior for HTML output under `root`: a statically known path opens
59
+ * in a new tab (`file://`; browsers allow that from file:// pages, not from
60
+ * http ones), any other shortened item expands or collapses.
61
+ */
62
+ export declare function attachHtmlHandlers(root: {
63
+ addEventListener(type: 'click', fn: (e: {
64
+ target: unknown;
65
+ preventDefault(): void;
66
+ }) => void): void;
67
+ }): void;
68
+ /** {@link attachHtmlHandlers} as a script for pages without a module loader: `<script>${HTML_SCRIPT}</script>`. */
69
+ export declare const HTML_SCRIPT: string;
70
+ /** Default styles (light and dark). Attach the click handlers with {@link attachHtmlHandlers} or {@link HTML_SCRIPT}. */
71
+ export declare const HTML_CSS = "\n.mash { --kw:#a626a4; --op:#0184bc; --cmd:#4078f2; --flag:#986801; --str:#50a14f; --esc:#c18401; --var:#e45649;\n --sub:#0184bc; --ar:#986801; --asg:#e45649; --rd:#0184bc; --hd:#50a14f; --cm:#a0a1a7; --fn:#4078f2; --el:#a0a1a7;\n --dir:#00838f; --file:#3f51b5; --re:#d84315; --code:#7b5e57; --sc:#7e3fd8;\n font: 13px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; white-space: pre; margin: 0; tab-size: 4; }\n@media (prefers-color-scheme: dark) {\n .mash { --kw:#c678dd; --op:#56b6c2; --cmd:#61afef; --flag:#d19a66; --str:#98c379; --esc:#e5c07b; --var:#e06c75;\n --sub:#56b6c2; --ar:#d19a66; --asg:#e06c75; --rd:#56b6c2; --hd:#98c379; --cm:#7f848e; --fn:#61afef; --el:#7f848e;\n --dir:#4dd0e1; --file:#9fa8ff; --re:#ff8a65; --code:#c8b5ad; --sc:#c49bff; }\n}\n.mash .kw { color: var(--kw); } .mash .op { color: var(--op); } .mash .cmd { color: var(--cmd); font-weight: 600; }\n.mash .flag { color: var(--flag); } .mash .str { color: var(--str); } .mash .esc { color: var(--esc); }\n.mash .var { color: var(--var); } .mash .sub { color: var(--sub); font-weight: 600; } .mash .ar, .mash .num { color: var(--ar); }\n.mash .asg { color: var(--asg); } .mash .rd { color: var(--rd); } .mash .hd { color: var(--hd); }\n.mash .pth { text-decoration: underline dotted; text-underline-offset: 3px; }\n.mash .pth.dir { text-decoration-color: color-mix(in srgb, var(--dir) 55%, transparent); } .mash .pth.file { text-decoration-color: color-mix(in srgb, var(--file) 55%, transparent); }\n.mash [data-href] { cursor: pointer; } .mash [data-href]:hover { background: color-mix(in srgb, currentColor 12%, transparent); border-radius: 3px; }\n.mash .pth .dir, .mash .pth .file { text-decoration: none; }\n/* paths: dotted underline (both kinds), told apart by color */\n.mash .dir, .mash .file { text-decoration: underline dotted; text-underline-offset: 3px; }\n.mash .dir { color: var(--dir); text-decoration-color: color-mix(in srgb, var(--dir) 45%, transparent); }\n.mash .file { color: var(--file); text-decoration-color: color-mix(in srgb, var(--file) 45%, transparent); }\n.mash .re { color: var(--re); } .mash .code { color: var(--code); } .mash .sc { color: var(--sc); font-weight: 600; }\n.mash .cm { color: var(--cm); font-style: italic; } .mash .fn { color: var(--fn); font-weight: 600; } .mash .ct { color: var(--el); }\n.mash .tc .hid { display: none; } .mash .tc.open .hid { display: inline; } .mash .tc.open > .el { display: none; }\n.mash.sum { display: inline-block; white-space: pre; max-width: 100%; overflow: hidden; vertical-align: bottom; }\n.mash.sum .el { cursor: help; } .mash .tr:hover { background: color-mix(in srgb, var(--el) 15%, transparent); border-radius: 3px; }\n.mash .el { color: var(--el); cursor: pointer; border-radius: 3px; } .mash .el:hover { background: color-mix(in srgb, var(--el) 20%, transparent); }\n";
72
+ //# sourceMappingURL=html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../src/printer/html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,KAAK,CAAC,MAAM,kBAAkB,CAAA;AAS1C,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AAEzD,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,yFAAyF;IACzF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAyFD,MAAM,WAAW,UAAU;IACzB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAA;IACjB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAA;CACpB;AAiID,8EAA8E;AAC9E,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,UAAU,CAEhF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,UAAU,CAmGvG;AAOD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IAAE,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,cAAc,IAAI,IAAI,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAWtJ;AAED,mHAAmH;AACnH,eAAO,MAAM,WAAW,QAAiD,CAAA;AAEzE,yHAAyH;AACzH,eAAO,MAAM,QAAQ,gzFA4BpB,CAAA"}