shell-dsl 0.0.7 → 0.0.8

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 (197) hide show
  1. package/README.md +3 -1
  2. package/dist/cjs/index.cjs +14 -4
  3. package/dist/cjs/index.cjs.map +3 -3
  4. package/dist/cjs/package.json +1 -1
  5. package/dist/cjs/src/commands/awk/awk.cjs +276 -0
  6. package/dist/cjs/src/commands/awk/awk.cjs.map +10 -0
  7. package/dist/cjs/src/commands/break-continue/break-continue.cjs +56 -0
  8. package/dist/cjs/src/commands/break-continue/break-continue.cjs.map +10 -0
  9. package/dist/cjs/src/commands/cat/cat.cjs +57 -0
  10. package/dist/cjs/src/commands/cat/cat.cjs.map +10 -0
  11. package/dist/cjs/src/commands/cp/cp.cjs +126 -0
  12. package/dist/cjs/src/commands/cp/cp.cjs.map +10 -0
  13. package/dist/cjs/src/commands/echo/echo.cjs +50 -0
  14. package/dist/cjs/src/commands/echo/echo.cjs.map +10 -0
  15. package/dist/cjs/src/commands/find/find.cjs +251 -0
  16. package/dist/cjs/src/commands/find/find.cjs.map +10 -0
  17. package/dist/cjs/src/commands/grep/grep.cjs +510 -0
  18. package/dist/cjs/src/commands/grep/grep.cjs.map +10 -0
  19. package/dist/cjs/src/commands/head/head.cjs +95 -0
  20. package/dist/cjs/src/commands/head/head.cjs.map +10 -0
  21. package/dist/cjs/src/commands/index.cjs +136 -0
  22. package/dist/cjs/src/commands/index.cjs.map +10 -0
  23. package/dist/cjs/src/commands/ls/ls.cjs +119 -0
  24. package/dist/cjs/src/commands/ls/ls.cjs.map +10 -0
  25. package/dist/cjs/src/commands/mkdir/mkdir.cjs +64 -0
  26. package/dist/cjs/src/commands/mkdir/mkdir.cjs.map +10 -0
  27. package/dist/cjs/src/commands/mv/mv.cjs +118 -0
  28. package/dist/cjs/src/commands/mv/mv.cjs.map +10 -0
  29. package/dist/cjs/src/commands/pwd/pwd.cjs +41 -0
  30. package/dist/cjs/src/commands/pwd/pwd.cjs.map +10 -0
  31. package/dist/cjs/src/commands/rm/rm.cjs +82 -0
  32. package/dist/cjs/src/commands/rm/rm.cjs.map +10 -0
  33. package/dist/cjs/src/commands/sed/sed.cjs +218 -0
  34. package/dist/cjs/src/commands/sed/sed.cjs.map +10 -0
  35. package/dist/cjs/src/commands/sort/sort.cjs +105 -0
  36. package/dist/cjs/src/commands/sort/sort.cjs.map +10 -0
  37. package/dist/cjs/src/commands/tail/tail.cjs +95 -0
  38. package/dist/cjs/src/commands/tail/tail.cjs.map +10 -0
  39. package/dist/cjs/src/commands/tee/tee.cjs +65 -0
  40. package/dist/cjs/src/commands/tee/tee.cjs.map +10 -0
  41. package/dist/cjs/src/commands/test/test.cjs +148 -0
  42. package/dist/cjs/src/commands/test/test.cjs.map +10 -0
  43. package/dist/cjs/src/commands/touch/touch.cjs +70 -0
  44. package/dist/cjs/src/commands/touch/touch.cjs.map +10 -0
  45. package/dist/cjs/src/commands/tree/tree.cjs +161 -0
  46. package/dist/cjs/src/commands/tree/tree.cjs.map +10 -0
  47. package/dist/cjs/src/commands/true-false/true-false.cjs +43 -0
  48. package/dist/cjs/src/commands/true-false/true-false.cjs.map +10 -0
  49. package/dist/cjs/src/commands/uniq/uniq.cjs +116 -0
  50. package/dist/cjs/src/commands/uniq/uniq.cjs.map +10 -0
  51. package/dist/cjs/src/commands/wc/wc.cjs +116 -0
  52. package/dist/cjs/src/commands/wc/wc.cjs.map +10 -0
  53. package/dist/cjs/src/index.cjs +10 -2
  54. package/dist/cjs/src/index.cjs.map +3 -3
  55. package/dist/cjs/src/interpreter/index.cjs +4 -2
  56. package/dist/cjs/src/interpreter/index.cjs.map +3 -3
  57. package/dist/cjs/src/interpreter/interpreter.cjs +381 -2
  58. package/dist/cjs/src/interpreter/interpreter.cjs.map +3 -3
  59. package/dist/cjs/src/lexer/index.cjs +3 -2
  60. package/dist/cjs/src/lexer/index.cjs.map +3 -3
  61. package/dist/cjs/src/lexer/lexer.cjs +202 -7
  62. package/dist/cjs/src/lexer/lexer.cjs.map +3 -3
  63. package/dist/cjs/src/lexer/tokens.cjs +31 -2
  64. package/dist/cjs/src/lexer/tokens.cjs.map +3 -3
  65. package/dist/cjs/src/parser/ast.cjs +25 -1
  66. package/dist/cjs/src/parser/ast.cjs.map +3 -3
  67. package/dist/cjs/src/parser/index.cjs +7 -1
  68. package/dist/cjs/src/parser/index.cjs.map +3 -3
  69. package/dist/cjs/src/parser/parser.cjs +211 -7
  70. package/dist/cjs/src/parser/parser.cjs.map +3 -3
  71. package/dist/cjs/src/shell-dsl.cjs +2 -2
  72. package/dist/cjs/src/shell-dsl.cjs.map +3 -3
  73. package/dist/mjs/index.mjs +25 -5
  74. package/dist/mjs/index.mjs.map +3 -3
  75. package/dist/mjs/package.json +1 -1
  76. package/dist/mjs/src/commands/awk/awk.mjs +246 -0
  77. package/dist/mjs/src/commands/awk/awk.mjs.map +10 -0
  78. package/dist/mjs/src/commands/break-continue/break-continue.mjs +26 -0
  79. package/dist/mjs/src/commands/break-continue/break-continue.mjs.map +10 -0
  80. package/dist/mjs/src/commands/cat/cat.mjs +27 -0
  81. package/dist/mjs/src/commands/cat/cat.mjs.map +10 -0
  82. package/dist/mjs/src/commands/cp/cp.mjs +96 -0
  83. package/dist/mjs/src/commands/cp/cp.mjs.map +10 -0
  84. package/dist/mjs/src/commands/echo/echo.mjs +20 -0
  85. package/dist/mjs/src/commands/echo/echo.mjs.map +10 -0
  86. package/dist/mjs/src/commands/find/find.mjs +221 -0
  87. package/dist/mjs/src/commands/find/find.mjs.map +10 -0
  88. package/dist/mjs/src/commands/grep/grep.mjs +480 -0
  89. package/dist/mjs/src/commands/grep/grep.mjs.map +10 -0
  90. package/dist/mjs/src/commands/head/head.mjs +65 -0
  91. package/dist/mjs/src/commands/head/head.mjs.map +10 -0
  92. package/dist/mjs/src/commands/index.mjs +106 -0
  93. package/dist/mjs/src/commands/index.mjs.map +10 -0
  94. package/dist/mjs/src/commands/ls/ls.mjs +89 -0
  95. package/dist/mjs/src/commands/ls/ls.mjs.map +10 -0
  96. package/dist/mjs/src/commands/mkdir/mkdir.mjs +34 -0
  97. package/dist/mjs/src/commands/mkdir/mkdir.mjs.map +10 -0
  98. package/dist/mjs/src/commands/mv/mv.mjs +88 -0
  99. package/dist/mjs/src/commands/mv/mv.mjs.map +10 -0
  100. package/dist/mjs/src/commands/pwd/pwd.mjs +11 -0
  101. package/dist/mjs/src/commands/pwd/pwd.mjs.map +10 -0
  102. package/dist/mjs/src/commands/rm/rm.mjs +52 -0
  103. package/dist/mjs/src/commands/rm/rm.mjs.map +10 -0
  104. package/dist/mjs/src/commands/sed/sed.mjs +188 -0
  105. package/dist/mjs/src/commands/sed/sed.mjs.map +10 -0
  106. package/dist/mjs/src/commands/sort/sort.mjs +75 -0
  107. package/dist/mjs/src/commands/sort/sort.mjs.map +10 -0
  108. package/dist/mjs/src/commands/tail/tail.mjs +65 -0
  109. package/dist/mjs/src/commands/tail/tail.mjs.map +10 -0
  110. package/dist/mjs/src/commands/tee/tee.mjs +35 -0
  111. package/dist/mjs/src/commands/tee/tee.mjs.map +10 -0
  112. package/dist/mjs/src/commands/test/test.mjs +118 -0
  113. package/dist/mjs/src/commands/test/test.mjs.map +10 -0
  114. package/dist/mjs/src/commands/touch/touch.mjs +40 -0
  115. package/dist/mjs/src/commands/touch/touch.mjs.map +10 -0
  116. package/dist/mjs/src/commands/tree/tree.mjs +131 -0
  117. package/dist/mjs/src/commands/tree/tree.mjs.map +10 -0
  118. package/dist/mjs/src/commands/true-false/true-false.mjs +13 -0
  119. package/dist/mjs/src/commands/true-false/true-false.mjs.map +10 -0
  120. package/dist/mjs/src/commands/uniq/uniq.mjs +86 -0
  121. package/dist/mjs/src/commands/uniq/uniq.mjs.map +10 -0
  122. package/dist/mjs/src/commands/wc/wc.mjs +86 -0
  123. package/dist/mjs/src/commands/wc/wc.mjs.map +10 -0
  124. package/dist/mjs/src/index.mjs +18 -4
  125. package/dist/mjs/src/index.mjs.map +3 -3
  126. package/dist/mjs/src/interpreter/index.mjs +5 -3
  127. package/dist/mjs/src/interpreter/index.mjs.map +2 -2
  128. package/dist/mjs/src/interpreter/interpreter.mjs +381 -2
  129. package/dist/mjs/src/interpreter/interpreter.mjs.map +3 -3
  130. package/dist/mjs/src/lexer/index.mjs +4 -3
  131. package/dist/mjs/src/lexer/index.mjs.map +2 -2
  132. package/dist/mjs/src/lexer/lexer.mjs +202 -7
  133. package/dist/mjs/src/lexer/lexer.mjs.map +3 -3
  134. package/dist/mjs/src/lexer/tokens.mjs +31 -2
  135. package/dist/mjs/src/lexer/tokens.mjs.map +3 -3
  136. package/dist/mjs/src/parser/ast.mjs +25 -1
  137. package/dist/mjs/src/parser/ast.mjs.map +3 -3
  138. package/dist/mjs/src/parser/index.mjs +14 -2
  139. package/dist/mjs/src/parser/index.mjs.map +3 -3
  140. package/dist/mjs/src/parser/parser.mjs +211 -7
  141. package/dist/mjs/src/parser/parser.mjs.map +3 -3
  142. package/dist/mjs/src/shell-dsl.mjs +2 -2
  143. package/dist/mjs/src/shell-dsl.mjs.map +3 -3
  144. package/dist/types/index.d.ts +2 -2
  145. package/dist/types/src/commands/awk/awk.d.ts +2 -0
  146. package/dist/types/src/commands/break-continue/break-continue.d.ts +3 -0
  147. package/dist/types/src/commands/cat/cat.d.ts +2 -0
  148. package/dist/types/src/commands/cp/cp.d.ts +2 -0
  149. package/dist/types/src/commands/echo/echo.d.ts +2 -0
  150. package/dist/types/src/commands/find/find.d.ts +2 -0
  151. package/dist/types/src/commands/grep/grep.d.ts +2 -0
  152. package/dist/types/src/commands/head/head.d.ts +2 -0
  153. package/dist/types/src/commands/index.d.ts +25 -0
  154. package/dist/types/src/commands/ls/ls.d.ts +2 -0
  155. package/dist/types/src/commands/mkdir/mkdir.d.ts +2 -0
  156. package/dist/types/src/commands/mv/mv.d.ts +2 -0
  157. package/dist/types/src/commands/pwd/pwd.d.ts +2 -0
  158. package/dist/types/src/commands/rm/rm.d.ts +2 -0
  159. package/dist/types/src/commands/sed/sed.d.ts +2 -0
  160. package/dist/types/src/commands/sort/sort.d.ts +2 -0
  161. package/dist/types/src/commands/tail/tail.d.ts +2 -0
  162. package/dist/types/src/commands/tee/tee.d.ts +2 -0
  163. package/dist/types/{commands → src/commands/test}/test.d.ts +1 -1
  164. package/dist/types/src/commands/touch/touch.d.ts +2 -0
  165. package/dist/types/src/commands/tree/tree.d.ts +2 -0
  166. package/dist/types/{commands → src/commands/true-false}/true-false.d.ts +1 -1
  167. package/dist/types/src/commands/uniq/uniq.d.ts +2 -0
  168. package/dist/types/src/commands/wc/wc.d.ts +2 -0
  169. package/dist/types/src/index.d.ts +3 -3
  170. package/dist/types/src/interpreter/index.d.ts +1 -1
  171. package/dist/types/src/interpreter/interpreter.d.ts +18 -0
  172. package/dist/types/src/lexer/index.d.ts +2 -2
  173. package/dist/types/src/lexer/lexer.d.ts +11 -2
  174. package/dist/types/src/lexer/tokens.d.ts +16 -0
  175. package/dist/types/src/parser/ast.d.ts +46 -1
  176. package/dist/types/src/parser/index.d.ts +2 -2
  177. package/dist/types/src/parser/parser.d.ts +14 -0
  178. package/package.json +1 -1
  179. package/dist/types/commands/cat.d.ts +0 -2
  180. package/dist/types/commands/cp.d.ts +0 -2
  181. package/dist/types/commands/echo.d.ts +0 -2
  182. package/dist/types/commands/find.d.ts +0 -2
  183. package/dist/types/commands/grep.d.ts +0 -2
  184. package/dist/types/commands/head.d.ts +0 -2
  185. package/dist/types/commands/index.d.ts +0 -22
  186. package/dist/types/commands/ls.d.ts +0 -2
  187. package/dist/types/commands/mkdir.d.ts +0 -2
  188. package/dist/types/commands/mv.d.ts +0 -2
  189. package/dist/types/commands/pwd.d.ts +0 -2
  190. package/dist/types/commands/rm.d.ts +0 -2
  191. package/dist/types/commands/sort.d.ts +0 -2
  192. package/dist/types/commands/tail.d.ts +0 -2
  193. package/dist/types/commands/tee.d.ts +0 -2
  194. package/dist/types/commands/touch.d.ts +0 -2
  195. package/dist/types/commands/tree.d.ts +0 -2
  196. package/dist/types/commands/uniq.d.ts +0 -2
  197. package/dist/types/commands/wc.d.ts +0 -2
@@ -0,0 +1,148 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
6
+ var __toCommonJS = (from) => {
7
+ var entry = __moduleCache.get(from), desc;
8
+ if (entry)
9
+ return entry;
10
+ entry = __defProp({}, "__esModule", { value: true });
11
+ if (from && typeof from === "object" || typeof from === "function")
12
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
+ get: () => from[key],
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ }));
16
+ __moduleCache.set(from, entry);
17
+ return entry;
18
+ };
19
+ var __export = (target, all) => {
20
+ for (var name in all)
21
+ __defProp(target, name, {
22
+ get: all[name],
23
+ enumerable: true,
24
+ configurable: true,
25
+ set: (newValue) => all[name] = () => newValue
26
+ });
27
+ };
28
+
29
+ // src/commands/test/test.ts
30
+ var exports_test = {};
31
+ __export(exports_test, {
32
+ test: () => test,
33
+ bracket: () => bracket
34
+ });
35
+ module.exports = __toCommonJS(exports_test);
36
+ var test = async (ctx) => {
37
+ const args = [...ctx.args];
38
+ if (args[args.length - 1] === "]") {
39
+ args.pop();
40
+ }
41
+ if (args.length === 0) {
42
+ return 1;
43
+ }
44
+ if (args.length === 1) {
45
+ return args[0].length > 0 ? 0 : 1;
46
+ }
47
+ if (args.length === 2) {
48
+ const [op, operand] = args;
49
+ switch (op) {
50
+ case "-n":
51
+ return operand.length > 0 ? 0 : 1;
52
+ case "-z":
53
+ return operand.length === 0 ? 0 : 1;
54
+ case "-f":
55
+ try {
56
+ const path = ctx.fs.resolve(ctx.cwd, operand);
57
+ const stat = await ctx.fs.stat(path);
58
+ return stat.isFile() ? 0 : 1;
59
+ } catch {
60
+ return 1;
61
+ }
62
+ case "-d":
63
+ try {
64
+ const path = ctx.fs.resolve(ctx.cwd, operand);
65
+ const stat = await ctx.fs.stat(path);
66
+ return stat.isDirectory() ? 0 : 1;
67
+ } catch {
68
+ return 1;
69
+ }
70
+ case "-e":
71
+ try {
72
+ const path = ctx.fs.resolve(ctx.cwd, operand);
73
+ return await ctx.fs.exists(path) ? 0 : 1;
74
+ } catch {
75
+ return 1;
76
+ }
77
+ case "-s":
78
+ try {
79
+ const path = ctx.fs.resolve(ctx.cwd, operand);
80
+ const stat = await ctx.fs.stat(path);
81
+ return stat.size > 0 ? 0 : 1;
82
+ } catch {
83
+ return 1;
84
+ }
85
+ case "-r":
86
+ case "-w":
87
+ case "-x":
88
+ try {
89
+ const path = ctx.fs.resolve(ctx.cwd, operand);
90
+ return await ctx.fs.exists(path) ? 0 : 1;
91
+ } catch {
92
+ return 1;
93
+ }
94
+ case "!":
95
+ return operand.length > 0 ? 1 : 0;
96
+ default:
97
+ await ctx.stderr.writeText(`test: unknown operator: ${op}
98
+ `);
99
+ return 2;
100
+ }
101
+ }
102
+ if (args.length === 3) {
103
+ const [left, op, right] = args;
104
+ if (left === "!") {
105
+ const innerResult = await test({
106
+ ...ctx,
107
+ args: [op, right]
108
+ });
109
+ return innerResult === 0 ? 1 : 0;
110
+ }
111
+ switch (op) {
112
+ case "=":
113
+ case "==":
114
+ return left === right ? 0 : 1;
115
+ case "!=":
116
+ return left !== right ? 0 : 1;
117
+ case "-eq":
118
+ return parseInt(left, 10) === parseInt(right, 10) ? 0 : 1;
119
+ case "-ne":
120
+ return parseInt(left, 10) !== parseInt(right, 10) ? 0 : 1;
121
+ case "-lt":
122
+ return parseInt(left, 10) < parseInt(right, 10) ? 0 : 1;
123
+ case "-le":
124
+ return parseInt(left, 10) <= parseInt(right, 10) ? 0 : 1;
125
+ case "-gt":
126
+ return parseInt(left, 10) > parseInt(right, 10) ? 0 : 1;
127
+ case "-ge":
128
+ return parseInt(left, 10) >= parseInt(right, 10) ? 0 : 1;
129
+ default:
130
+ await ctx.stderr.writeText(`test: unknown operator: ${op}
131
+ `);
132
+ return 2;
133
+ }
134
+ }
135
+ if (args.length === 4 && args[0] === "!") {
136
+ const innerResult = await test({
137
+ ...ctx,
138
+ args: args.slice(1)
139
+ });
140
+ return innerResult === 0 ? 1 : 0;
141
+ }
142
+ await ctx.stderr.writeText(`test: too many arguments
143
+ `);
144
+ return 2;
145
+ };
146
+ var bracket = test;
147
+
148
+ //# debugId=E3090F3685FD1A1064756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/commands/test/test.ts"],
4
+ "sourcesContent": [
5
+ "import type { Command } from \"../../types.cjs\";\n\nexport const test: Command = async (ctx) => {\n const args = [...ctx.args];\n\n // Handle [ ... ] syntax - remove trailing ]\n if (args[args.length - 1] === \"]\") {\n args.pop();\n }\n\n if (args.length === 0) {\n return 1; // Empty test is false\n }\n\n // Single argument: true if non-empty string\n if (args.length === 1) {\n return args[0]!.length > 0 ? 0 : 1;\n }\n\n // Two arguments: unary operators\n if (args.length === 2) {\n const [op, operand] = args;\n\n switch (op) {\n case \"-n\": // Non-zero length\n return operand!.length > 0 ? 0 : 1;\n case \"-z\": // Zero length\n return operand!.length === 0 ? 0 : 1;\n case \"-f\": // Is regular file\n try {\n const path = ctx.fs.resolve(ctx.cwd, operand!);\n const stat = await ctx.fs.stat(path);\n return stat.isFile() ? 0 : 1;\n } catch {\n return 1;\n }\n case \"-d\": // Is directory\n try {\n const path = ctx.fs.resolve(ctx.cwd, operand!);\n const stat = await ctx.fs.stat(path);\n return stat.isDirectory() ? 0 : 1;\n } catch {\n return 1;\n }\n case \"-e\": // Exists\n try {\n const path = ctx.fs.resolve(ctx.cwd, operand!);\n return (await ctx.fs.exists(path)) ? 0 : 1;\n } catch {\n return 1;\n }\n case \"-s\": // Has size > 0\n try {\n const path = ctx.fs.resolve(ctx.cwd, operand!);\n const stat = await ctx.fs.stat(path);\n return stat.size > 0 ? 0 : 1;\n } catch {\n return 1;\n }\n case \"-r\": // Readable (always true in virtual fs)\n case \"-w\": // Writable (always true in virtual fs)\n case \"-x\": // Executable (always true in virtual fs)\n try {\n const path = ctx.fs.resolve(ctx.cwd, operand!);\n return (await ctx.fs.exists(path)) ? 0 : 1;\n } catch {\n return 1;\n }\n case \"!\": // Negation\n return operand!.length > 0 ? 1 : 0;\n default:\n await ctx.stderr.writeText(`test: unknown operator: ${op}\\n`);\n return 2;\n }\n }\n\n // Three arguments: binary operators\n if (args.length === 3) {\n const [left, op, right] = args;\n\n // Handle negation with two-arg expression\n if (left === \"!\") {\n const innerResult = await test({\n ...ctx,\n args: [op!, right!],\n });\n return innerResult === 0 ? 1 : 0;\n }\n\n switch (op) {\n case \"=\":\n case \"==\":\n return left === right ? 0 : 1;\n case \"!=\":\n return left !== right ? 0 : 1;\n case \"-eq\":\n return parseInt(left!, 10) === parseInt(right!, 10) ? 0 : 1;\n case \"-ne\":\n return parseInt(left!, 10) !== parseInt(right!, 10) ? 0 : 1;\n case \"-lt\":\n return parseInt(left!, 10) < parseInt(right!, 10) ? 0 : 1;\n case \"-le\":\n return parseInt(left!, 10) <= parseInt(right!, 10) ? 0 : 1;\n case \"-gt\":\n return parseInt(left!, 10) > parseInt(right!, 10) ? 0 : 1;\n case \"-ge\":\n return parseInt(left!, 10) >= parseInt(right!, 10) ? 0 : 1;\n default:\n await ctx.stderr.writeText(`test: unknown operator: ${op}\\n`);\n return 2;\n }\n }\n\n // Four arguments: handle negation with three-arg expression\n if (args.length === 4 && args[0] === \"!\") {\n const innerResult = await test({\n ...ctx,\n args: args.slice(1),\n });\n return innerResult === 0 ? 1 : 0;\n }\n\n await ctx.stderr.writeText(\"test: too many arguments\\n\");\n return 2;\n};\n\n// Alias for [ command\nexport const bracket: Command = test;\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "E3090F3685FD1A1064756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,70 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
6
+ var __toCommonJS = (from) => {
7
+ var entry = __moduleCache.get(from), desc;
8
+ if (entry)
9
+ return entry;
10
+ entry = __defProp({}, "__esModule", { value: true });
11
+ if (from && typeof from === "object" || typeof from === "function")
12
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
+ get: () => from[key],
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ }));
16
+ __moduleCache.set(from, entry);
17
+ return entry;
18
+ };
19
+ var __export = (target, all) => {
20
+ for (var name in all)
21
+ __defProp(target, name, {
22
+ get: all[name],
23
+ enumerable: true,
24
+ configurable: true,
25
+ set: (newValue) => all[name] = () => newValue
26
+ });
27
+ };
28
+
29
+ // src/commands/touch/touch.ts
30
+ var exports_touch = {};
31
+ __export(exports_touch, {
32
+ touch: () => touch
33
+ });
34
+ module.exports = __toCommonJS(exports_touch);
35
+ var touch = async (ctx) => {
36
+ let noCreate = false;
37
+ const files = [];
38
+ for (const arg of ctx.args) {
39
+ if (arg === "-c" || arg === "--no-create") {
40
+ noCreate = true;
41
+ } else if (!arg.startsWith("-")) {
42
+ files.push(arg);
43
+ }
44
+ }
45
+ if (files.length === 0) {
46
+ await ctx.stderr.writeText(`touch: missing file operand
47
+ `);
48
+ return 1;
49
+ }
50
+ for (const file of files) {
51
+ const path = ctx.fs.resolve(ctx.cwd, file);
52
+ try {
53
+ const exists = await ctx.fs.exists(path);
54
+ if (exists) {
55
+ const content = await ctx.fs.readFile(path);
56
+ await ctx.fs.writeFile(path, content);
57
+ } else if (!noCreate) {
58
+ await ctx.fs.writeFile(path, "");
59
+ }
60
+ } catch (err) {
61
+ const message = err instanceof Error ? err.message : String(err);
62
+ await ctx.stderr.writeText(`touch: cannot touch '${file}': ${message}
63
+ `);
64
+ return 1;
65
+ }
66
+ }
67
+ return 0;
68
+ };
69
+
70
+ //# debugId=B8830642E3EC812464756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/commands/touch/touch.ts"],
4
+ "sourcesContent": [
5
+ "import type { Command } from \"../../types.cjs\";\n\nexport const touch: Command = async (ctx) => {\n let noCreate = false;\n const files: string[] = [];\n\n for (const arg of ctx.args) {\n if (arg === \"-c\" || arg === \"--no-create\") {\n noCreate = true;\n } else if (!arg.startsWith(\"-\")) {\n files.push(arg);\n }\n }\n\n if (files.length === 0) {\n await ctx.stderr.writeText(\"touch: missing file operand\\n\");\n return 1;\n }\n\n for (const file of files) {\n const path = ctx.fs.resolve(ctx.cwd, file);\n try {\n const exists = await ctx.fs.exists(path);\n if (exists) {\n // Update mtime by reading and writing back\n const content = await ctx.fs.readFile(path);\n await ctx.fs.writeFile(path, content);\n } else if (!noCreate) {\n // Create empty file\n await ctx.fs.writeFile(path, \"\");\n }\n // If noCreate and doesn't exist, skip silently\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n await ctx.stderr.writeText(`touch: cannot touch '${file}': ${message}\\n`);\n return 1;\n }\n }\n\n return 0;\n};\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,IAAM,QAAiB,OAAO,QAAQ;AAAA,EAC3C,IAAI,WAAW;AAAA,EACf,MAAM,QAAkB,CAAC;AAAA,EAEzB,WAAW,OAAO,IAAI,MAAM;AAAA,IAC1B,IAAI,QAAQ,QAAQ,QAAQ,eAAe;AAAA,MACzC,WAAW;AAAA,IACb,EAAO,SAAI,CAAC,IAAI,WAAW,GAAG,GAAG;AAAA,MAC/B,MAAM,KAAK,GAAG;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,IAAI,MAAM,WAAW,GAAG;AAAA,IACtB,MAAM,IAAI,OAAO,UAAU;AAAA,CAA+B;AAAA,IAC1D,OAAO;AAAA,EACT;AAAA,EAEA,WAAW,QAAQ,OAAO;AAAA,IACxB,MAAM,OAAO,IAAI,GAAG,QAAQ,IAAI,KAAK,IAAI;AAAA,IACzC,IAAI;AAAA,MACF,MAAM,SAAS,MAAM,IAAI,GAAG,OAAO,IAAI;AAAA,MACvC,IAAI,QAAQ;AAAA,QAEV,MAAM,UAAU,MAAM,IAAI,GAAG,SAAS,IAAI;AAAA,QAC1C,MAAM,IAAI,GAAG,UAAU,MAAM,OAAO;AAAA,MACtC,EAAO,SAAI,CAAC,UAAU;AAAA,QAEpB,MAAM,IAAI,GAAG,UAAU,MAAM,EAAE;AAAA,MACjC;AAAA,MAEA,OAAO,KAAK;AAAA,MACZ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,MAC/D,MAAM,IAAI,OAAO,UAAU,wBAAwB,UAAU;AAAA,CAAW;AAAA,MACxE,OAAO;AAAA;AAAA,EAEX;AAAA,EAEA,OAAO;AAAA;",
8
+ "debugId": "B8830642E3EC812464756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,161 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
6
+ var __toCommonJS = (from) => {
7
+ var entry = __moduleCache.get(from), desc;
8
+ if (entry)
9
+ return entry;
10
+ entry = __defProp({}, "__esModule", { value: true });
11
+ if (from && typeof from === "object" || typeof from === "function")
12
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
+ get: () => from[key],
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ }));
16
+ __moduleCache.set(from, entry);
17
+ return entry;
18
+ };
19
+ var __export = (target, all) => {
20
+ for (var name in all)
21
+ __defProp(target, name, {
22
+ get: all[name],
23
+ enumerable: true,
24
+ configurable: true,
25
+ set: (newValue) => all[name] = () => newValue
26
+ });
27
+ };
28
+
29
+ // src/commands/tree/tree.ts
30
+ var exports_tree = {};
31
+ __export(exports_tree, {
32
+ tree: () => tree
33
+ });
34
+ module.exports = __toCommonJS(exports_tree);
35
+ var tree = async (ctx) => {
36
+ let showAll = false;
37
+ let directoriesOnly = false;
38
+ let maxDepth = Infinity;
39
+ let targetPath = ".";
40
+ const args = [...ctx.args];
41
+ for (let i = 0;i < args.length; i++) {
42
+ const arg = args[i];
43
+ if (arg === "-a" || arg === "--all") {
44
+ showAll = true;
45
+ } else if (arg === "-d") {
46
+ directoriesOnly = true;
47
+ } else if (arg === "-L") {
48
+ const depthArg = args[++i];
49
+ if (depthArg === undefined || isNaN(parseInt(depthArg, 10))) {
50
+ await ctx.stderr.writeText(`tree: missing argument to -L
51
+ `);
52
+ return 1;
53
+ }
54
+ maxDepth = parseInt(depthArg, 10);
55
+ if (maxDepth < 1) {
56
+ await ctx.stderr.writeText(`tree: Invalid level, must be greater than 0
57
+ `);
58
+ return 1;
59
+ }
60
+ } else if (arg.startsWith("-L")) {
61
+ const depthStr = arg.slice(2);
62
+ const depth = parseInt(depthStr, 10);
63
+ if (isNaN(depth) || depth < 1) {
64
+ await ctx.stderr.writeText(`tree: Invalid level, must be greater than 0
65
+ `);
66
+ return 1;
67
+ }
68
+ maxDepth = depth;
69
+ } else if (arg.startsWith("-") && arg !== "-") {
70
+ for (const flag of arg.slice(1)) {
71
+ if (flag === "a")
72
+ showAll = true;
73
+ else if (flag === "d")
74
+ directoriesOnly = true;
75
+ else {
76
+ await ctx.stderr.writeText(`tree: Invalid argument -${flag}
77
+ `);
78
+ return 1;
79
+ }
80
+ }
81
+ } else {
82
+ targetPath = arg;
83
+ }
84
+ }
85
+ const resolvedPath = ctx.fs.resolve(ctx.cwd, targetPath);
86
+ let stat;
87
+ try {
88
+ stat = await ctx.fs.stat(resolvedPath);
89
+ } catch {
90
+ await ctx.stderr.writeText(`tree: ${targetPath}: No such file or directory
91
+ `);
92
+ return 1;
93
+ }
94
+ if (stat.isFile()) {
95
+ await ctx.stdout.writeText(targetPath + `
96
+
97
+ 0 directories, 1 file
98
+ `);
99
+ return 0;
100
+ }
101
+ let dirCount = 0;
102
+ let fileCount = 0;
103
+ await ctx.stdout.writeText(targetPath + `
104
+ `);
105
+ async function printTree(path, prefix, depth) {
106
+ if (depth > maxDepth)
107
+ return;
108
+ let entries = await ctx.fs.readdir(path);
109
+ if (!showAll) {
110
+ entries = entries.filter((e) => !e.startsWith("."));
111
+ }
112
+ entries.sort();
113
+ const dirEntries = [];
114
+ const fileEntries = [];
115
+ for (const entry of entries) {
116
+ const entryPath = ctx.fs.resolve(path, entry);
117
+ try {
118
+ const entryStat = await ctx.fs.stat(entryPath);
119
+ if (entryStat.isDirectory()) {
120
+ dirEntries.push(entry);
121
+ } else {
122
+ fileEntries.push(entry);
123
+ }
124
+ } catch {}
125
+ }
126
+ const sortedEntries = directoriesOnly ? dirEntries : [...dirEntries, ...fileEntries];
127
+ for (let i = 0;i < sortedEntries.length; i++) {
128
+ const entry = sortedEntries[i];
129
+ const isLast = i === sortedEntries.length - 1;
130
+ const connector = isLast ? "└── " : "├── ";
131
+ const entryPath = ctx.fs.resolve(path, entry);
132
+ let isDir = false;
133
+ try {
134
+ const entryStat = await ctx.fs.stat(entryPath);
135
+ isDir = entryStat.isDirectory();
136
+ } catch {
137
+ continue;
138
+ }
139
+ await ctx.stdout.writeText(prefix + connector + entry + `
140
+ `);
141
+ if (isDir) {
142
+ dirCount++;
143
+ if (depth < maxDepth) {
144
+ const newPrefix = prefix + (isLast ? " " : "│ ");
145
+ await printTree(entryPath, newPrefix, depth + 1);
146
+ }
147
+ } else {
148
+ fileCount++;
149
+ }
150
+ }
151
+ }
152
+ await printTree(resolvedPath, "", 1);
153
+ const dirWord = dirCount === 1 ? "directory" : "directories";
154
+ const fileWord = fileCount === 1 ? "file" : "files";
155
+ await ctx.stdout.writeText(`
156
+ ${dirCount} ${dirWord}, ${fileCount} ${fileWord}
157
+ `);
158
+ return 0;
159
+ };
160
+
161
+ //# debugId=98F8054B9E7FECDE64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/commands/tree/tree.ts"],
4
+ "sourcesContent": [
5
+ "import type { Command } from \"../../types.cjs\";\n\nexport const tree: Command = async (ctx) => {\n let showAll = false;\n let directoriesOnly = false;\n let maxDepth = Infinity;\n let targetPath = \".\";\n\n // Parse arguments\n const args = [...ctx.args];\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]!;\n if (arg === \"-a\" || arg === \"--all\") {\n showAll = true;\n } else if (arg === \"-d\") {\n directoriesOnly = true;\n } else if (arg === \"-L\") {\n const depthArg = args[++i];\n if (depthArg === undefined || isNaN(parseInt(depthArg, 10))) {\n await ctx.stderr.writeText(\"tree: missing argument to -L\\n\");\n return 1;\n }\n maxDepth = parseInt(depthArg, 10);\n if (maxDepth < 1) {\n await ctx.stderr.writeText(\"tree: Invalid level, must be greater than 0\\n\");\n return 1;\n }\n } else if (arg.startsWith(\"-L\")) {\n // Handle -L2 format (no space)\n const depthStr = arg.slice(2);\n const depth = parseInt(depthStr, 10);\n if (isNaN(depth) || depth < 1) {\n await ctx.stderr.writeText(\"tree: Invalid level, must be greater than 0\\n\");\n return 1;\n }\n maxDepth = depth;\n } else if (arg.startsWith(\"-\") && arg !== \"-\") {\n // Handle combined short flags\n for (const flag of arg.slice(1)) {\n if (flag === \"a\") showAll = true;\n else if (flag === \"d\") directoriesOnly = true;\n else {\n await ctx.stderr.writeText(`tree: Invalid argument -${flag}\\n`);\n return 1;\n }\n }\n } else {\n targetPath = arg;\n }\n }\n\n const resolvedPath = ctx.fs.resolve(ctx.cwd, targetPath);\n\n // Check if path exists\n let stat;\n try {\n stat = await ctx.fs.stat(resolvedPath);\n } catch {\n await ctx.stderr.writeText(`tree: ${targetPath}: No such file or directory\\n`);\n return 1;\n }\n\n // If it's a file, just print the filename\n if (stat.isFile()) {\n await ctx.stdout.writeText(targetPath + \"\\n\\n0 directories, 1 file\\n\");\n return 0;\n }\n\n let dirCount = 0;\n let fileCount = 0;\n\n // Print root\n await ctx.stdout.writeText(targetPath + \"\\n\");\n\n // Recursive function to build tree\n async function printTree(path: string, prefix: string, depth: number): Promise<void> {\n if (depth > maxDepth) return;\n\n let entries = await ctx.fs.readdir(path);\n\n // Filter hidden files unless -a\n if (!showAll) {\n entries = entries.filter((e) => !e.startsWith(\".\"));\n }\n\n // Sort entries\n entries.sort();\n\n // Separate dirs and files, dirs first\n const dirEntries: string[] = [];\n const fileEntries: string[] = [];\n\n for (const entry of entries) {\n const entryPath = ctx.fs.resolve(path, entry);\n try {\n const entryStat = await ctx.fs.stat(entryPath);\n if (entryStat.isDirectory()) {\n dirEntries.push(entry);\n } else {\n fileEntries.push(entry);\n }\n } catch {\n // Skip entries we can't stat\n }\n }\n\n // Combine: directories first, then files (unless directoriesOnly)\n const sortedEntries = directoriesOnly\n ? dirEntries\n : [...dirEntries, ...fileEntries];\n\n for (let i = 0; i < sortedEntries.length; i++) {\n const entry = sortedEntries[i]!;\n const isLast = i === sortedEntries.length - 1;\n const connector = isLast ? \"└── \" : \"├── \";\n const entryPath = ctx.fs.resolve(path, entry);\n\n let isDir = false;\n try {\n const entryStat = await ctx.fs.stat(entryPath);\n isDir = entryStat.isDirectory();\n } catch {\n continue;\n }\n\n await ctx.stdout.writeText(prefix + connector + entry + \"\\n\");\n\n if (isDir) {\n dirCount++;\n if (depth < maxDepth) {\n const newPrefix = prefix + (isLast ? \" \" : \"│ \");\n await printTree(entryPath, newPrefix, depth + 1);\n }\n } else {\n fileCount++;\n }\n }\n }\n\n await printTree(resolvedPath, \"\", 1);\n\n // Print summary\n const dirWord = dirCount === 1 ? \"directory\" : \"directories\";\n const fileWord = fileCount === 1 ? \"file\" : \"files\";\n await ctx.stdout.writeText(`\\n${dirCount} ${dirWord}, ${fileCount} ${fileWord}\\n`);\n\n return 0;\n};\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "98F8054B9E7FECDE64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,43 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
6
+ var __toCommonJS = (from) => {
7
+ var entry = __moduleCache.get(from), desc;
8
+ if (entry)
9
+ return entry;
10
+ entry = __defProp({}, "__esModule", { value: true });
11
+ if (from && typeof from === "object" || typeof from === "function")
12
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
+ get: () => from[key],
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ }));
16
+ __moduleCache.set(from, entry);
17
+ return entry;
18
+ };
19
+ var __export = (target, all) => {
20
+ for (var name in all)
21
+ __defProp(target, name, {
22
+ get: all[name],
23
+ enumerable: true,
24
+ configurable: true,
25
+ set: (newValue) => all[name] = () => newValue
26
+ });
27
+ };
28
+
29
+ // src/commands/true-false/true-false.ts
30
+ var exports_true_false = {};
31
+ __export(exports_true_false, {
32
+ trueCmd: () => trueCmd,
33
+ falseCmd: () => falseCmd
34
+ });
35
+ module.exports = __toCommonJS(exports_true_false);
36
+ var trueCmd = async () => {
37
+ return 0;
38
+ };
39
+ var falseCmd = async () => {
40
+ return 1;
41
+ };
42
+
43
+ //# debugId=F61E650B2A25537564756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/commands/true-false/true-false.ts"],
4
+ "sourcesContent": [
5
+ "import type { Command } from \"../../types.cjs\";\n\nexport const trueCmd: Command = async () => {\n return 0;\n};\n\nexport const falseCmd: Command = async () => {\n return 1;\n};\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,IAAM,UAAmB,YAAY;AAAA,EAC1C,OAAO;AAAA;AAGF,IAAM,WAAoB,YAAY;AAAA,EAC3C,OAAO;AAAA;",
8
+ "debugId": "F61E650B2A25537564756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,116 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
6
+ var __toCommonJS = (from) => {
7
+ var entry = __moduleCache.get(from), desc;
8
+ if (entry)
9
+ return entry;
10
+ entry = __defProp({}, "__esModule", { value: true });
11
+ if (from && typeof from === "object" || typeof from === "function")
12
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
+ get: () => from[key],
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ }));
16
+ __moduleCache.set(from, entry);
17
+ return entry;
18
+ };
19
+ var __export = (target, all) => {
20
+ for (var name in all)
21
+ __defProp(target, name, {
22
+ get: all[name],
23
+ enumerable: true,
24
+ configurable: true,
25
+ set: (newValue) => all[name] = () => newValue
26
+ });
27
+ };
28
+
29
+ // src/commands/uniq/uniq.ts
30
+ var exports_uniq = {};
31
+ __export(exports_uniq, {
32
+ uniq: () => uniq
33
+ });
34
+ module.exports = __toCommonJS(exports_uniq);
35
+ var uniq = async (ctx) => {
36
+ let countMode = false;
37
+ let duplicatesOnly = false;
38
+ let uniqueOnly = false;
39
+ const files = [];
40
+ for (const arg of ctx.args) {
41
+ if (arg === "-c") {
42
+ countMode = true;
43
+ } else if (arg === "-d") {
44
+ duplicatesOnly = true;
45
+ } else if (arg === "-u") {
46
+ uniqueOnly = true;
47
+ } else if (arg.startsWith("-")) {
48
+ for (const flag of arg.slice(1)) {
49
+ if (flag === "c")
50
+ countMode = true;
51
+ else if (flag === "d")
52
+ duplicatesOnly = true;
53
+ else if (flag === "u")
54
+ uniqueOnly = true;
55
+ }
56
+ } else {
57
+ files.push(arg);
58
+ }
59
+ }
60
+ let lines = [];
61
+ if (files.length === 0) {
62
+ for await (const line of ctx.stdin.lines()) {
63
+ lines.push(line);
64
+ }
65
+ } else {
66
+ const file = files[0];
67
+ try {
68
+ const path = ctx.fs.resolve(ctx.cwd, file);
69
+ const content = (await ctx.fs.readFile(path)).toString();
70
+ lines = content.split(`
71
+ `);
72
+ if (lines[lines.length - 1] === "") {
73
+ lines.pop();
74
+ }
75
+ } catch (err) {
76
+ await ctx.stderr.writeText(`uniq: ${file}: No such file or directory
77
+ `);
78
+ return 1;
79
+ }
80
+ }
81
+ const results = [];
82
+ let currentLine = null;
83
+ let currentCount = 0;
84
+ for (const line of lines) {
85
+ if (line === currentLine) {
86
+ currentCount++;
87
+ } else {
88
+ if (currentLine !== null) {
89
+ results.push({ line: currentLine, count: currentCount });
90
+ }
91
+ currentLine = line;
92
+ currentCount = 1;
93
+ }
94
+ }
95
+ if (currentLine !== null) {
96
+ results.push({ line: currentLine, count: currentCount });
97
+ }
98
+ for (const { line, count } of results) {
99
+ const isDuplicate = count > 1;
100
+ const isUnique = count === 1;
101
+ if (duplicatesOnly && !isDuplicate)
102
+ continue;
103
+ if (uniqueOnly && !isUnique)
104
+ continue;
105
+ if (countMode) {
106
+ await ctx.stdout.writeText(`${String(count).padStart(7)} ${line}
107
+ `);
108
+ } else {
109
+ await ctx.stdout.writeText(line + `
110
+ `);
111
+ }
112
+ }
113
+ return 0;
114
+ };
115
+
116
+ //# debugId=BD87B992D8E9E69564756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/commands/uniq/uniq.ts"],
4
+ "sourcesContent": [
5
+ "import type { Command } from \"../../types.cjs\";\n\nexport const uniq: Command = async (ctx) => {\n let countMode = false;\n let duplicatesOnly = false;\n let uniqueOnly = false;\n const files: string[] = [];\n\n // Parse arguments\n for (const arg of ctx.args) {\n if (arg === \"-c\") {\n countMode = true;\n } else if (arg === \"-d\") {\n duplicatesOnly = true;\n } else if (arg === \"-u\") {\n uniqueOnly = true;\n } else if (arg.startsWith(\"-\")) {\n for (const flag of arg.slice(1)) {\n if (flag === \"c\") countMode = true;\n else if (flag === \"d\") duplicatesOnly = true;\n else if (flag === \"u\") uniqueOnly = true;\n }\n } else {\n files.push(arg);\n }\n }\n\n let lines: string[] = [];\n\n if (files.length === 0) {\n for await (const line of ctx.stdin.lines()) {\n lines.push(line);\n }\n } else {\n const file = files[0]!;\n try {\n const path = ctx.fs.resolve(ctx.cwd, file);\n const content = (await ctx.fs.readFile(path)).toString();\n lines = content.split(\"\\n\");\n if (lines[lines.length - 1] === \"\") {\n lines.pop();\n }\n } catch (err) {\n await ctx.stderr.writeText(`uniq: ${file}: No such file or directory\\n`);\n return 1;\n }\n }\n\n // Process lines\n const results: Array<{ line: string; count: number }> = [];\n let currentLine: string | null = null;\n let currentCount = 0;\n\n for (const line of lines) {\n if (line === currentLine) {\n currentCount++;\n } else {\n if (currentLine !== null) {\n results.push({ line: currentLine, count: currentCount });\n }\n currentLine = line;\n currentCount = 1;\n }\n }\n if (currentLine !== null) {\n results.push({ line: currentLine, count: currentCount });\n }\n\n // Output\n for (const { line, count } of results) {\n const isDuplicate = count > 1;\n const isUnique = count === 1;\n\n if (duplicatesOnly && !isDuplicate) continue;\n if (uniqueOnly && !isUnique) continue;\n\n if (countMode) {\n await ctx.stdout.writeText(`${String(count).padStart(7)} ${line}\\n`);\n } else {\n await ctx.stdout.writeText(line + \"\\n\");\n }\n }\n\n return 0;\n};\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,IAAM,OAAgB,OAAO,QAAQ;AAAA,EAC1C,IAAI,YAAY;AAAA,EAChB,IAAI,iBAAiB;AAAA,EACrB,IAAI,aAAa;AAAA,EACjB,MAAM,QAAkB,CAAC;AAAA,EAGzB,WAAW,OAAO,IAAI,MAAM;AAAA,IAC1B,IAAI,QAAQ,MAAM;AAAA,MAChB,YAAY;AAAA,IACd,EAAO,SAAI,QAAQ,MAAM;AAAA,MACvB,iBAAiB;AAAA,IACnB,EAAO,SAAI,QAAQ,MAAM;AAAA,MACvB,aAAa;AAAA,IACf,EAAO,SAAI,IAAI,WAAW,GAAG,GAAG;AAAA,MAC9B,WAAW,QAAQ,IAAI,MAAM,CAAC,GAAG;AAAA,QAC/B,IAAI,SAAS;AAAA,UAAK,YAAY;AAAA,QACzB,SAAI,SAAS;AAAA,UAAK,iBAAiB;AAAA,QACnC,SAAI,SAAS;AAAA,UAAK,aAAa;AAAA,MACtC;AAAA,IACF,EAAO;AAAA,MACL,MAAM,KAAK,GAAG;AAAA;AAAA,EAElB;AAAA,EAEA,IAAI,QAAkB,CAAC;AAAA,EAEvB,IAAI,MAAM,WAAW,GAAG;AAAA,IACtB,iBAAiB,QAAQ,IAAI,MAAM,MAAM,GAAG;AAAA,MAC1C,MAAM,KAAK,IAAI;AAAA,IACjB;AAAA,EACF,EAAO;AAAA,IACL,MAAM,OAAO,MAAM;AAAA,IACnB,IAAI;AAAA,MACF,MAAM,OAAO,IAAI,GAAG,QAAQ,IAAI,KAAK,IAAI;AAAA,MACzC,MAAM,WAAW,MAAM,IAAI,GAAG,SAAS,IAAI,GAAG,SAAS;AAAA,MACvD,QAAQ,QAAQ,MAAM;AAAA,CAAI;AAAA,MAC1B,IAAI,MAAM,MAAM,SAAS,OAAO,IAAI;AAAA,QAClC,MAAM,IAAI;AAAA,MACZ;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,MAAM,IAAI,OAAO,UAAU,SAAS;AAAA,CAAmC;AAAA,MACvE,OAAO;AAAA;AAAA;AAAA,EAKX,MAAM,UAAkD,CAAC;AAAA,EACzD,IAAI,cAA6B;AAAA,EACjC,IAAI,eAAe;AAAA,EAEnB,WAAW,QAAQ,OAAO;AAAA,IACxB,IAAI,SAAS,aAAa;AAAA,MACxB;AAAA,IACF,EAAO;AAAA,MACL,IAAI,gBAAgB,MAAM;AAAA,QACxB,QAAQ,KAAK,EAAE,MAAM,aAAa,OAAO,aAAa,CAAC;AAAA,MACzD;AAAA,MACA,cAAc;AAAA,MACd,eAAe;AAAA;AAAA,EAEnB;AAAA,EACA,IAAI,gBAAgB,MAAM;AAAA,IACxB,QAAQ,KAAK,EAAE,MAAM,aAAa,OAAO,aAAa,CAAC;AAAA,EACzD;AAAA,EAGA,aAAa,MAAM,WAAW,SAAS;AAAA,IACrC,MAAM,cAAc,QAAQ;AAAA,IAC5B,MAAM,WAAW,UAAU;AAAA,IAE3B,IAAI,kBAAkB,CAAC;AAAA,MAAa;AAAA,IACpC,IAAI,cAAc,CAAC;AAAA,MAAU;AAAA,IAE7B,IAAI,WAAW;AAAA,MACb,MAAM,IAAI,OAAO,UAAU,GAAG,OAAO,KAAK,EAAE,SAAS,CAAC,KAAK;AAAA,CAAQ;AAAA,IACrE,EAAO;AAAA,MACL,MAAM,IAAI,OAAO,UAAU,OAAO;AAAA,CAAI;AAAA;AAAA,EAE1C;AAAA,EAEA,OAAO;AAAA;",
8
+ "debugId": "BD87B992D8E9E69564756E2164756E21",
9
+ "names": []
10
+ }