specli 0.0.11 → 0.0.13

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 (335) hide show
  1. package/README.md +216 -325
  2. package/bin/cli.sh +27 -0
  3. package/dist/{src/ai → ai}/tools.d.ts +0 -1
  4. package/dist/ai/tools.js +161 -0
  5. package/dist/ai/tools.test.d.ts +1 -0
  6. package/dist/ai/tools.test.js +56 -0
  7. package/dist/{src/cli → cli}/auth-requirements.d.ts +0 -1
  8. package/dist/cli/auth-requirements.js +65 -0
  9. package/dist/cli/auth-requirements.test.d.ts +1 -0
  10. package/dist/cli/auth-requirements.test.js +16 -0
  11. package/dist/{src/cli → cli}/auth-schemes.d.ts +0 -1
  12. package/dist/cli/auth-schemes.js +112 -0
  13. package/dist/cli/auth-schemes.test.d.ts +1 -0
  14. package/dist/cli/auth-schemes.test.js +56 -0
  15. package/dist/{src/cli → cli}/capabilities.d.ts +0 -1
  16. package/dist/cli/capabilities.js +41 -0
  17. package/dist/cli/capabilities.test.d.ts +1 -0
  18. package/dist/cli/capabilities.test.js +84 -0
  19. package/dist/{src/cli → cli}/command-id.d.ts +0 -1
  20. package/dist/cli/command-id.js +8 -0
  21. package/dist/cli/command-id.test.d.ts +1 -0
  22. package/dist/cli/command-id.test.js +27 -0
  23. package/dist/{src/cli → cli}/command-index.d.ts +0 -1
  24. package/dist/cli/command-index.js +9 -0
  25. package/dist/{src/cli → cli}/command-model.d.ts +0 -1
  26. package/dist/cli/command-model.js +53 -0
  27. package/dist/cli/command-model.test.d.ts +1 -0
  28. package/dist/cli/command-model.test.js +40 -0
  29. package/dist/{src/cli → cli}/compile.d.ts +0 -1
  30. package/dist/cli/compile.js +79 -0
  31. package/dist/{src/cli → cli}/crypto.d.ts +0 -1
  32. package/dist/cli/crypto.js +9 -0
  33. package/dist/{src/cli → cli}/derive-name.d.ts +0 -1
  34. package/dist/cli/derive-name.js +96 -0
  35. package/dist/{src/cli → cli}/exec.d.ts +0 -1
  36. package/dist/cli/exec.js +50 -0
  37. package/dist/{src/cli → cli}/main.d.ts +0 -1
  38. package/dist/cli/main.js +177 -0
  39. package/dist/{src/cli → cli}/naming.d.ts +0 -1
  40. package/dist/cli/naming.js +191 -0
  41. package/dist/cli/naming.test.d.ts +1 -0
  42. package/dist/cli/naming.test.js +75 -0
  43. package/dist/{src/cli → cli}/operations.d.ts +0 -1
  44. package/dist/cli/operations.js +100 -0
  45. package/dist/cli/operations.test.d.ts +1 -0
  46. package/dist/cli/operations.test.js +51 -0
  47. package/dist/{src/cli → cli}/params.d.ts +0 -1
  48. package/dist/cli/params.js +36 -0
  49. package/dist/cli/params.test.d.ts +1 -0
  50. package/dist/cli/params.test.js +62 -0
  51. package/dist/{src/cli → cli}/pluralize.d.ts +0 -1
  52. package/dist/cli/pluralize.js +38 -0
  53. package/dist/{src/cli → cli}/positional.d.ts +0 -1
  54. package/dist/cli/positional.js +35 -0
  55. package/dist/cli/positional.test.d.ts +1 -0
  56. package/dist/cli/positional.test.js +60 -0
  57. package/dist/{src/cli → cli}/request-body.d.ts +0 -1
  58. package/dist/cli/request-body.js +44 -0
  59. package/dist/cli/request-body.test.d.ts +1 -0
  60. package/dist/cli/request-body.test.js +31 -0
  61. package/dist/{src/cli → cli}/runtime/argv.d.ts +0 -1
  62. package/dist/cli/runtime/argv.js +15 -0
  63. package/dist/{src/cli → cli}/runtime/auth/resolve.d.ts +0 -1
  64. package/dist/cli/runtime/auth/resolve.js +39 -0
  65. package/dist/{src/cli → cli}/runtime/body-flags.d.ts +0 -1
  66. package/dist/cli/runtime/body-flags.js +117 -0
  67. package/dist/cli/runtime/body-flags.test.d.ts +1 -0
  68. package/dist/cli/runtime/body-flags.test.js +192 -0
  69. package/dist/{src/cli → cli}/runtime/body.d.ts +0 -1
  70. package/dist/cli/runtime/body.js +16 -0
  71. package/dist/{src/cli → cli}/runtime/collect.d.ts +0 -1
  72. package/dist/cli/runtime/collect.js +3 -0
  73. package/dist/{src/cli → cli}/runtime/compat.d.ts +0 -1
  74. package/dist/cli/runtime/compat.js +78 -0
  75. package/dist/{src/cli → cli}/runtime/context.d.ts +0 -1
  76. package/dist/cli/runtime/context.js +44 -0
  77. package/dist/{src/cli → cli}/runtime/execute.d.ts +0 -1
  78. package/dist/cli/runtime/execute.js +106 -0
  79. package/dist/{src/cli → cli}/runtime/generated.d.ts +0 -1
  80. package/dist/cli/runtime/generated.js +168 -0
  81. package/dist/{src/cli → cli}/runtime/headers.d.ts +0 -1
  82. package/dist/cli/runtime/headers.js +30 -0
  83. package/dist/{src/cli → cli}/runtime/index.d.ts +0 -1
  84. package/dist/cli/runtime/index.js +3 -0
  85. package/dist/{src/cli → cli}/runtime/profile/secrets.d.ts +0 -1
  86. package/dist/cli/runtime/profile/secrets.js +53 -0
  87. package/dist/{src/cli → cli}/runtime/profile/store.d.ts +0 -1
  88. package/dist/cli/runtime/profile/store.js +63 -0
  89. package/dist/{src/cli → cli}/runtime/request.d.ts +0 -1
  90. package/dist/cli/runtime/request.js +283 -0
  91. package/dist/cli/runtime/request.test.d.ts +1 -0
  92. package/dist/cli/runtime/request.test.js +332 -0
  93. package/dist/{src/cli → cli}/runtime/server-url.d.ts +0 -1
  94. package/dist/cli/runtime/server-url.js +28 -0
  95. package/dist/{src/cli → cli}/runtime/template.d.ts +0 -1
  96. package/dist/cli/runtime/template.js +22 -0
  97. package/dist/cli/runtime/validate/ajv.d.ts +2 -0
  98. package/dist/cli/runtime/validate/ajv.js +11 -0
  99. package/dist/{src/cli → cli}/runtime/validate/coerce.d.ts +0 -1
  100. package/dist/cli/runtime/validate/coerce.js +63 -0
  101. package/dist/cli/runtime/validate/coerce.test.d.ts +1 -0
  102. package/dist/cli/runtime/validate/coerce.test.js +75 -0
  103. package/dist/{src/cli → cli}/runtime/validate/error.d.ts +0 -1
  104. package/dist/cli/runtime/validate/error.js +19 -0
  105. package/dist/{src/cli → cli}/runtime/validate/index.d.ts +0 -1
  106. package/dist/cli/runtime/validate/index.js +4 -0
  107. package/dist/{src/cli → cli}/runtime/validate/schema.d.ts +0 -1
  108. package/dist/cli/runtime/validate/schema.js +38 -0
  109. package/dist/{src/cli → cli}/schema-shape.d.ts +0 -1
  110. package/dist/cli/schema-shape.js +34 -0
  111. package/dist/{src/cli → cli}/schema.d.ts +0 -1
  112. package/dist/cli/schema.js +31 -0
  113. package/dist/{src/cli → cli}/server.d.ts +0 -1
  114. package/dist/cli/server.js +130 -0
  115. package/dist/cli/server.test.d.ts +1 -0
  116. package/dist/cli/server.test.js +49 -0
  117. package/dist/{src/cli → cli}/spec-id.d.ts +0 -1
  118. package/dist/cli/spec-id.js +8 -0
  119. package/dist/{src/cli → cli}/spec-loader.d.ts +0 -1
  120. package/dist/cli/spec-loader.js +40 -0
  121. package/dist/{src/cli → cli}/stable-json.d.ts +0 -1
  122. package/dist/cli/stable-json.js +29 -0
  123. package/dist/{src/cli → cli}/strings.d.ts +0 -1
  124. package/dist/cli/strings.js +20 -0
  125. package/dist/{src/cli → cli}/types.d.ts +0 -1
  126. package/dist/cli/types.js +3 -0
  127. package/dist/cli.d.ts +0 -1
  128. package/dist/cli.js +51 -2324
  129. package/dist/compiled.d.ts +2 -0
  130. package/{src/compiled.ts → dist/compiled.js} +8 -11
  131. package/dist/macros/env.d.ts +10 -0
  132. package/dist/macros/env.js +22 -0
  133. package/dist/macros/spec.d.ts +5 -0
  134. package/dist/macros/spec.js +16 -0
  135. package/package.json +17 -25
  136. package/bin/specli.js +0 -26
  137. package/cli.ts +0 -77
  138. package/dist/cli.d.ts.map +0 -1
  139. package/dist/cli.js.map +0 -53
  140. package/dist/index.d.ts +0 -2
  141. package/dist/index.d.ts.map +0 -1
  142. package/dist/index.js +0 -2032
  143. package/dist/index.js.map +0 -48
  144. package/dist/src/ai/tools.d.ts.map +0 -1
  145. package/dist/src/ai/tools.js +0 -1656
  146. package/dist/src/ai/tools.js.map +0 -45
  147. package/dist/src/cli/auth-requirements.d.ts.map +0 -1
  148. package/dist/src/cli/auth-requirements.js +0 -66
  149. package/dist/src/cli/auth-requirements.js.map +0 -10
  150. package/dist/src/cli/auth-schemes.d.ts.map +0 -1
  151. package/dist/src/cli/auth-schemes.js +0 -116
  152. package/dist/src/cli/auth-schemes.js.map +0 -11
  153. package/dist/src/cli/capabilities.d.ts.map +0 -1
  154. package/dist/src/cli/capabilities.js +0 -45
  155. package/dist/src/cli/capabilities.js.map +0 -10
  156. package/dist/src/cli/command-id.d.ts.map +0 -1
  157. package/dist/src/cli/command-id.js +0 -18
  158. package/dist/src/cli/command-id.js.map +0 -11
  159. package/dist/src/cli/command-index.d.ts.map +0 -1
  160. package/dist/src/cli/command-index.js +0 -15
  161. package/dist/src/cli/command-index.js.map +0 -10
  162. package/dist/src/cli/command-model.d.ts.map +0 -1
  163. package/dist/src/cli/command-model.js +0 -274
  164. package/dist/src/cli/command-model.js.map +0 -18
  165. package/dist/src/cli/compile.d.ts.map +0 -1
  166. package/dist/src/cli/compile.js +0 -146
  167. package/dist/src/cli/compile.js.map +0 -11
  168. package/dist/src/cli/crypto.d.ts.map +0 -1
  169. package/dist/src/cli/crypto.js +0 -15
  170. package/dist/src/cli/crypto.js.map +0 -10
  171. package/dist/src/cli/derive-name.d.ts.map +0 -1
  172. package/dist/src/cli/derive-name.js +0 -70
  173. package/dist/src/cli/derive-name.js.map +0 -10
  174. package/dist/src/cli/exec.d.ts.map +0 -1
  175. package/dist/src/cli/exec.js +0 -2077
  176. package/dist/src/cli/exec.js.map +0 -49
  177. package/dist/src/cli/main.d.ts.map +0 -1
  178. package/dist/src/cli/main.js +0 -2032
  179. package/dist/src/cli/main.js.map +0 -48
  180. package/dist/src/cli/naming.d.ts.map +0 -1
  181. package/dist/src/cli/naming.js +0 -216
  182. package/dist/src/cli/naming.js.map +0 -12
  183. package/dist/src/cli/operations.d.ts.map +0 -1
  184. package/dist/src/cli/operations.js +0 -103
  185. package/dist/src/cli/operations.js.map +0 -10
  186. package/dist/src/cli/params.d.ts.map +0 -1
  187. package/dist/src/cli/params.js +0 -79
  188. package/dist/src/cli/params.js.map +0 -12
  189. package/dist/src/cli/pluralize.d.ts.map +0 -1
  190. package/dist/src/cli/pluralize.js +0 -43
  191. package/dist/src/cli/pluralize.js.map +0 -10
  192. package/dist/src/cli/positional.d.ts.map +0 -1
  193. package/dist/src/cli/positional.js +0 -39
  194. package/dist/src/cli/positional.js.map +0 -10
  195. package/dist/src/cli/request-body.d.ts.map +0 -1
  196. package/dist/src/cli/request-body.js +0 -82
  197. package/dist/src/cli/request-body.js.map +0 -12
  198. package/dist/src/cli/runtime/argv.d.ts.map +0 -1
  199. package/dist/src/cli/runtime/argv.js +0 -22
  200. package/dist/src/cli/runtime/argv.js.map +0 -10
  201. package/dist/src/cli/runtime/auth/resolve.d.ts.map +0 -1
  202. package/dist/src/cli/runtime/auth/resolve.js +0 -38
  203. package/dist/src/cli/runtime/auth/resolve.js.map +0 -10
  204. package/dist/src/cli/runtime/body-flags.d.ts.map +0 -1
  205. package/dist/src/cli/runtime/body-flags.js +0 -86
  206. package/dist/src/cli/runtime/body-flags.js.map +0 -10
  207. package/dist/src/cli/runtime/body.d.ts.map +0 -1
  208. package/dist/src/cli/runtime/body.js +0 -40
  209. package/dist/src/cli/runtime/body.js.map +0 -11
  210. package/dist/src/cli/runtime/collect.d.ts.map +0 -1
  211. package/dist/src/cli/runtime/collect.js +0 -9
  212. package/dist/src/cli/runtime/collect.js.map +0 -10
  213. package/dist/src/cli/runtime/compat.d.ts.map +0 -1
  214. package/dist/src/cli/runtime/compat.js +0 -62
  215. package/dist/src/cli/runtime/compat.js.map +0 -10
  216. package/dist/src/cli/runtime/context.d.ts.map +0 -1
  217. package/dist/src/cli/runtime/context.js +0 -936
  218. package/dist/src/cli/runtime/context.js.map +0 -32
  219. package/dist/src/cli/runtime/execute.d.ts.map +0 -1
  220. package/dist/src/cli/runtime/execute.js +0 -670
  221. package/dist/src/cli/runtime/execute.js.map +0 -22
  222. package/dist/src/cli/runtime/generated.d.ts.map +0 -1
  223. package/dist/src/cli/runtime/generated.js +0 -869
  224. package/dist/src/cli/runtime/generated.js.map +0 -23
  225. package/dist/src/cli/runtime/headers.d.ts.map +0 -1
  226. package/dist/src/cli/runtime/headers.js +0 -36
  227. package/dist/src/cli/runtime/headers.js.map +0 -10
  228. package/dist/src/cli/runtime/index.d.ts.map +0 -1
  229. package/dist/src/cli/runtime/index.js +0 -1808
  230. package/dist/src/cli/runtime/index.js.map +0 -46
  231. package/dist/src/cli/runtime/profile/secrets.d.ts.map +0 -1
  232. package/dist/src/cli/runtime/profile/secrets.js +0 -51
  233. package/dist/src/cli/runtime/profile/secrets.js.map +0 -11
  234. package/dist/src/cli/runtime/profile/store.d.ts.map +0 -1
  235. package/dist/src/cli/runtime/profile/store.js +0 -102
  236. package/dist/src/cli/runtime/profile/store.js.map +0 -11
  237. package/dist/src/cli/runtime/request.d.ts.map +0 -1
  238. package/dist/src/cli/runtime/request.js +0 -571
  239. package/dist/src/cli/runtime/request.js.map +0 -21
  240. package/dist/src/cli/runtime/server-url.d.ts.map +0 -1
  241. package/dist/src/cli/runtime/server-url.js +0 -55
  242. package/dist/src/cli/runtime/server-url.js.map +0 -11
  243. package/dist/src/cli/runtime/template.d.ts.map +0 -1
  244. package/dist/src/cli/runtime/template.js +0 -29
  245. package/dist/src/cli/runtime/template.js.map +0 -10
  246. package/dist/src/cli/runtime/validate/ajv.d.ts +0 -3
  247. package/dist/src/cli/runtime/validate/ajv.d.ts.map +0 -1
  248. package/dist/src/cli/runtime/validate/ajv.js +0 -17
  249. package/dist/src/cli/runtime/validate/ajv.js.map +0 -10
  250. package/dist/src/cli/runtime/validate/coerce.d.ts.map +0 -1
  251. package/dist/src/cli/runtime/validate/coerce.js +0 -60
  252. package/dist/src/cli/runtime/validate/coerce.js.map +0 -10
  253. package/dist/src/cli/runtime/validate/error.d.ts.map +0 -1
  254. package/dist/src/cli/runtime/validate/error.js +0 -21
  255. package/dist/src/cli/runtime/validate/error.js.map +0 -10
  256. package/dist/src/cli/runtime/validate/index.d.ts.map +0 -1
  257. package/dist/src/cli/runtime/validate/index.js +0 -122
  258. package/dist/src/cli/runtime/validate/index.js.map +0 -13
  259. package/dist/src/cli/runtime/validate/schema.d.ts.map +0 -1
  260. package/dist/src/cli/runtime/validate/schema.js +0 -36
  261. package/dist/src/cli/runtime/validate/schema.js.map +0 -10
  262. package/dist/src/cli/schema-shape.d.ts.map +0 -1
  263. package/dist/src/cli/schema-shape.js +0 -41
  264. package/dist/src/cli/schema-shape.js.map +0 -10
  265. package/dist/src/cli/schema.d.ts.map +0 -1
  266. package/dist/src/cli/schema.js +0 -38
  267. package/dist/src/cli/schema.js.map +0 -10
  268. package/dist/src/cli/server.d.ts.map +0 -1
  269. package/dist/src/cli/server.js +0 -64
  270. package/dist/src/cli/server.js.map +0 -11
  271. package/dist/src/cli/spec-id.d.ts.map +0 -1
  272. package/dist/src/cli/spec-id.js +0 -21
  273. package/dist/src/cli/spec-id.js.map +0 -11
  274. package/dist/src/cli/spec-loader.d.ts.map +0 -1
  275. package/dist/src/cli/spec-loader.js +0 -110
  276. package/dist/src/cli/spec-loader.js.map +0 -15
  277. package/dist/src/cli/stable-json.d.ts.map +0 -1
  278. package/dist/src/cli/stable-json.js +0 -35
  279. package/dist/src/cli/stable-json.js.map +0 -10
  280. package/dist/src/cli/strings.d.ts.map +0 -1
  281. package/dist/src/cli/strings.js +0 -16
  282. package/dist/src/cli/strings.js.map +0 -10
  283. package/dist/src/cli/types.d.ts.map +0 -1
  284. package/dist/src/cli/types.js +0 -9
  285. package/dist/src/cli/types.js.map +0 -10
  286. package/index.ts +0 -1
  287. package/src/ai/tools.ts +0 -211
  288. package/src/cli/auth-requirements.ts +0 -91
  289. package/src/cli/auth-schemes.ts +0 -187
  290. package/src/cli/capabilities.ts +0 -88
  291. package/src/cli/command-id.ts +0 -16
  292. package/src/cli/command-index.ts +0 -19
  293. package/src/cli/command-model.ts +0 -128
  294. package/src/cli/compile.ts +0 -101
  295. package/src/cli/crypto.ts +0 -9
  296. package/src/cli/derive-name.ts +0 -101
  297. package/src/cli/exec.ts +0 -72
  298. package/src/cli/main.ts +0 -231
  299. package/src/cli/naming.ts +0 -224
  300. package/src/cli/operations.ts +0 -152
  301. package/src/cli/params.ts +0 -71
  302. package/src/cli/pluralize.ts +0 -41
  303. package/src/cli/positional.ts +0 -75
  304. package/src/cli/request-body.ts +0 -94
  305. package/src/cli/runtime/argv.ts +0 -14
  306. package/src/cli/runtime/auth/resolve.ts +0 -59
  307. package/src/cli/runtime/body-flags.ts +0 -176
  308. package/src/cli/runtime/body.ts +0 -24
  309. package/src/cli/runtime/collect.ts +0 -6
  310. package/src/cli/runtime/compat.ts +0 -89
  311. package/src/cli/runtime/context.ts +0 -62
  312. package/src/cli/runtime/execute.ts +0 -147
  313. package/src/cli/runtime/generated.ts +0 -242
  314. package/src/cli/runtime/headers.ts +0 -37
  315. package/src/cli/runtime/index.ts +0 -3
  316. package/src/cli/runtime/profile/secrets.ts +0 -83
  317. package/src/cli/runtime/profile/store.ts +0 -100
  318. package/src/cli/runtime/request.ts +0 -390
  319. package/src/cli/runtime/server-url.ts +0 -45
  320. package/src/cli/runtime/template.ts +0 -26
  321. package/src/cli/runtime/validate/ajv.ts +0 -13
  322. package/src/cli/runtime/validate/coerce.ts +0 -71
  323. package/src/cli/runtime/validate/error.ts +0 -29
  324. package/src/cli/runtime/validate/index.ts +0 -4
  325. package/src/cli/runtime/validate/schema.ts +0 -54
  326. package/src/cli/schema-shape.ts +0 -36
  327. package/src/cli/schema.ts +0 -76
  328. package/src/cli/server.ts +0 -88
  329. package/src/cli/spec-id.ts +0 -12
  330. package/src/cli/spec-loader.ts +0 -58
  331. package/src/cli/stable-json.ts +0 -35
  332. package/src/cli/strings.ts +0 -21
  333. package/src/cli/types.ts +0 -59
  334. package/src/macros/env.ts +0 -21
  335. package/src/macros/spec.ts +0 -17
@@ -1,12 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/pluralize.ts", "../../../src/cli/strings.ts", "../../../src/cli/naming.ts"],
4
- "sourcesContent": [
5
- "const IRREGULAR: Record<string, string> = {\n\tperson: \"people\",\n\tman: \"men\",\n\twoman: \"women\",\n\tchild: \"children\",\n\ttooth: \"teeth\",\n\tfoot: \"feet\",\n\tmouse: \"mice\",\n\tgoose: \"geese\",\n};\n\nconst UNCOUNTABLE = new Set([\n\t\"metadata\",\n\t\"information\",\n\t\"equipment\",\n\t\"money\",\n\t\"series\",\n\t\"species\",\n]);\n\nexport function pluralize(word: string): string {\n\tconst w = word.trim();\n\tif (!w) return w;\n\n\tconst lower = w.toLowerCase();\n\tif (UNCOUNTABLE.has(lower)) return lower;\n\tif (IRREGULAR[lower]) return IRREGULAR[lower];\n\n\t// already plural-ish\n\tif (lower.endsWith(\"s\")) return lower;\n\n\tif (/[bcdfghjklmnpqrstvwxyz]y$/.test(lower)) {\n\t\treturn lower.replace(/y$/, \"ies\");\n\t}\n\n\tif (/(ch|sh|x|z)$/.test(lower)) {\n\t\treturn `${lower}es`;\n\t}\n\n\treturn `${lower}s`;\n}\n",
6
- "export function kebabCase(input: string): string {\n\tconst trimmed = input.trim();\n\tif (!trimmed) return \"\";\n\n\t// Convert spaces/underscores/dots to dashes, split camelCase.\n\treturn trimmed\n\t\t.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n\t\t.replace(/[\\s_.:/]+/g, \"-\")\n\t\t.replace(/[^a-zA-Z0-9-]/g, \"-\")\n\t\t.replace(/-+/g, \"-\")\n\t\t.replace(/^-|-$/g, \"\")\n\t\t.toLowerCase();\n}\n\nexport function titleCase(input: string): string {\n\treturn input\n\t\t.split(/\\s+/g)\n\t\t.filter(Boolean)\n\t\t.map((w) => w[0]?.toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n",
7
- "import { pluralize } from \"./pluralize.ts\";\nimport { kebabCase } from \"./strings.ts\";\nimport type { NormalizedOperation } from \"./types.ts\";\n\nexport type PlannedOperation = NormalizedOperation & {\n\tresource: string;\n\taction: string;\n\tpathArgs: string[];\n\tstyle: \"rest\" | \"rpc\";\n\tcanonicalAction: string;\n\taliasOf?: string;\n};\n\nconst GENERIC_TAGS = new Set([\"default\", \"defaults\", \"api\"]);\n\nfunction getPathSegments(path: string): string[] {\n\treturn path\n\t\t.split(\"/\")\n\t\t.map((s) => s.trim())\n\t\t.filter(Boolean);\n}\n\nfunction getPathArgs(path: string): string[] {\n\tconst args: string[] = [];\n\tconst re = /\\{([^}]+)\\}/g;\n\n\twhile (true) {\n\t\tconst match = re.exec(path);\n\t\tif (!match) break;\n\t\t// biome-ignore lint/style/noNonNullAssertion: unknown\n\t\targs.push(match[1]!);\n\t}\n\n\treturn args;\n}\n\nfunction pickResourceFromTags(tags: string[]): string | undefined {\n\tif (!tags.length) return undefined;\n\tconst first = tags[0]?.trim();\n\tif (!first) return undefined;\n\tif (GENERIC_TAGS.has(first.toLowerCase())) return undefined;\n\treturn first;\n}\n\nfunction splitOperationId(operationId: string): {\n\tprefix?: string;\n\tsuffix?: string;\n} {\n\tconst trimmed = operationId.trim();\n\tif (!trimmed) return {};\n\n\t// Prefer dot-notation when present: Contacts.List\n\tif (trimmed.includes(\".\")) {\n\t\tconst [prefix, ...rest] = trimmed.split(\".\");\n\t\treturn { prefix, suffix: rest.join(\".\") };\n\t}\n\n\t// Try separators: Contacts_List, Contacts__List\n\tif (trimmed.includes(\"__\")) {\n\t\tconst [prefix, ...rest] = trimmed.split(\"__\");\n\t\treturn { prefix, suffix: rest.join(\"__\") };\n\t}\n\n\tif (trimmed.includes(\"_\")) {\n\t\tconst [prefix, ...rest] = trimmed.split(\"_\");\n\t\treturn { prefix, suffix: rest.join(\"_\") };\n\t}\n\n\treturn { suffix: trimmed };\n}\n\nfunction inferStyle(op: NormalizedOperation): \"rest\" | \"rpc\" {\n\t// Path-based RPC convention (common in gRPC-ish HTTP gateways)\n\t// - POST /Contacts.List\n\t// - POST /Contacts/Service.List\n\tif (op.path.includes(\".\")) return \"rpc\";\n\n\t// operationId dot-notation alone is not enough to call it RPC; many REST APIs\n\t// have dotted ids. We treat dotted operationId as a weak signal.\n\tif (op.operationId?.includes(\".\") && op.method === \"POST\") return \"rpc\";\n\n\treturn \"rest\";\n}\n\nfunction inferResource(op: NormalizedOperation): string {\n\tconst tag = pickResourceFromTags(op.tags);\n\tif (tag) return pluralize(kebabCase(tag));\n\n\tif (op.operationId) {\n\t\tconst { prefix } = splitOperationId(op.operationId);\n\t\tif (prefix) {\n\t\t\tconst fromId = kebabCase(prefix);\n\t\t\tif (fromId === \"ping\") return \"ping\";\n\t\t\treturn pluralize(fromId);\n\t\t}\n\t}\n\n\tconst segments = getPathSegments(op.path);\n\tlet first = segments[0] ?? \"api\";\n\n\t// If first segment is rpc-ish, like Contacts.List, split it.\n\t// biome-ignore lint/style/noNonNullAssertion: split always returns at least one element\n\tfirst = first.includes(\".\") ? first.split(\".\")[0]! : first;\n\n\t// Singletons like /ping generally shouldn't become `pings`.\n\tif (first.toLowerCase() === \"ping\") return \"ping\";\n\n\t// Strip path params if they appear in first segment (rare)\n\tconst cleaned = first.replace(/^\\{.+\\}$/, \"\");\n\treturn pluralize(kebabCase(cleaned || \"api\"));\n}\n\nfunction canonicalizeAction(action: string): string {\n\tconst a = kebabCase(action);\n\n\t// Common RPC verbs -> REST canonical verbs\n\tif (a === \"retrieve\" || a === \"read\") return \"get\";\n\tif (a === \"list\" || a === \"search\") return \"list\";\n\tif (a === \"create\") return \"create\";\n\tif (a === \"update\" || a === \"patch\") return \"update\";\n\tif (a === \"delete\" || a === \"remove\") return \"delete\";\n\n\treturn a;\n}\n\nfunction inferRestAction(op: NormalizedOperation): string {\n\t// If operationId is present and looks intentional, prefer it.\n\t// This helps with singleton endpoints like GET /ping (Ping.Get) vs collections.\n\tif (op.operationId) {\n\t\tconst { suffix } = splitOperationId(op.operationId);\n\t\tif (suffix) {\n\t\t\tconst fromId = canonicalizeAction(suffix);\n\t\t\tif (\n\t\t\t\tfromId === \"get\" ||\n\t\t\t\tfromId === \"list\" ||\n\t\t\t\tfromId === \"create\" ||\n\t\t\t\tfromId === \"update\" ||\n\t\t\t\tfromId === \"delete\"\n\t\t\t) {\n\t\t\t\treturn fromId;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst method = op.method.toUpperCase();\n\tconst args = getPathArgs(op.path);\n\tconst hasId = args.length > 0;\n\n\tif (method === \"GET\" && !hasId) return \"list\";\n\tif (method === \"POST\" && !hasId) return \"create\";\n\n\tif (method === \"GET\" && hasId) return \"get\";\n\tif ((method === \"PUT\" || method === \"PATCH\") && hasId) return \"update\";\n\tif (method === \"DELETE\" && hasId) return \"delete\";\n\n\treturn kebabCase(method);\n}\n\nfunction inferRpcAction(op: NormalizedOperation): string {\n\t// Prefer operationId suffix: Contacts.List -> list\n\tif (op.operationId) {\n\t\tconst { suffix } = splitOperationId(op.operationId);\n\t\tif (suffix) return canonicalizeAction(suffix);\n\t}\n\n\t// Else take last segment and split by '.'\n\tconst segments = getPathSegments(op.path);\n\tconst last = segments[segments.length - 1] ?? \"\";\n\tif (last.includes(\".\")) {\n\t\tconst part = last.split(\".\").pop() ?? last;\n\t\treturn canonicalizeAction(part);\n\t}\n\n\treturn kebabCase(op.method);\n}\n\nexport function planOperation(op: NormalizedOperation): PlannedOperation {\n\tconst style = inferStyle(op);\n\tconst resource = inferResource(op);\n\tconst action = style === \"rpc\" ? inferRpcAction(op) : inferRestAction(op);\n\n\treturn {\n\t\t...op,\n\t\tkey: op.key,\n\t\tstyle,\n\t\tresource,\n\t\taction,\n\t\tcanonicalAction: action,\n\t\tpathArgs: getPathArgs(op.path).map((a) => kebabCase(a)),\n\t};\n}\n\nexport function planOperations(ops: NormalizedOperation[]): PlannedOperation[] {\n\tconst planned = ops.map(planOperation);\n\n\t// Stable collision handling: if resource+action repeats, add a suffix.\n\tconst counts = new Map<string, number>();\n\tfor (const op of planned) {\n\t\tconst key = `${op.resource}:${op.action}`;\n\t\tcounts.set(key, (counts.get(key) ?? 0) + 1);\n\t}\n\n\tconst seen = new Map<string, number>();\n\treturn planned.map((op) => {\n\t\tconst key = `${op.resource}:${op.action}`;\n\t\tconst total = counts.get(key) ?? 0;\n\t\tif (total <= 1) return op;\n\n\t\tconst idx = (seen.get(key) ?? 0) + 1;\n\t\tseen.set(key, idx);\n\n\t\tconst suffix = op.operationId\n\t\t\t? kebabCase(op.operationId)\n\t\t\t: kebabCase(`${op.method}-${op.path}`);\n\n\t\tconst disambiguatedAction = `${op.action}-${suffix}-${idx}`;\n\n\t\treturn {\n\t\t\t...op,\n\t\t\taction: disambiguatedAction,\n\t\t\taliasOf: `${op.resource} ${op.canonicalAction}`,\n\t\t};\n\t});\n}\n"
8
- ],
9
- "mappings": "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",
10
- "debugId": "99ADFCE0CE9D3B1464756E2164756E21",
11
- "names": []
12
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../../src/cli/operations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,mBAAmB,EAGnB,UAAU,EACV,MAAM,YAAY,CAAC;AA6GpB,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,mBAAmB,EAAE,CAqCtE"}
@@ -1,103 +0,0 @@
1
- // src/cli/operations.ts
2
- function operationKey(method, path) {
3
- return `${method.toUpperCase()} ${path}`;
4
- }
5
- var HTTP_METHODS = [
6
- "get",
7
- "post",
8
- "put",
9
- "patch",
10
- "delete",
11
- "options",
12
- "head",
13
- "trace"
14
- ];
15
- function normalizeParam(p) {
16
- if (!p || typeof p !== "object")
17
- return;
18
- const loc = p.in;
19
- const name = p.name;
20
- if (loc !== "path" && loc !== "query" && loc !== "header" && loc !== "cookie") {
21
- return;
22
- }
23
- if (!name)
24
- return;
25
- return {
26
- in: loc,
27
- name,
28
- required: Boolean(p.required || loc === "path"),
29
- description: p.description,
30
- schema: p.schema
31
- };
32
- }
33
- function mergeParameters(pathParams, opParams) {
34
- const merged = new Map;
35
- for (const p of pathParams ?? []) {
36
- const normalized = normalizeParam(p);
37
- if (!normalized)
38
- continue;
39
- merged.set(`${normalized.in}:${normalized.name}`, normalized);
40
- }
41
- for (const p of opParams ?? []) {
42
- const normalized = normalizeParam(p);
43
- if (!normalized)
44
- continue;
45
- merged.set(`${normalized.in}:${normalized.name}`, normalized);
46
- }
47
- return [...merged.values()];
48
- }
49
- function normalizeRequestBody(rb) {
50
- if (!rb)
51
- return;
52
- const content = rb.content ?? {};
53
- const contentTypes = Object.keys(content);
54
- const schemasByContentType = {};
55
- for (const contentType of contentTypes) {
56
- schemasByContentType[contentType] = content[contentType]?.schema;
57
- }
58
- return {
59
- required: Boolean(rb.required),
60
- contentTypes,
61
- schemasByContentType
62
- };
63
- }
64
- function indexOperations(doc) {
65
- const out = [];
66
- const paths = doc.paths ?? {};
67
- for (const [path, rawPathItem] of Object.entries(paths)) {
68
- if (!rawPathItem || typeof rawPathItem !== "object")
69
- continue;
70
- const pathItem = rawPathItem;
71
- for (const method of HTTP_METHODS) {
72
- const op = pathItem[method];
73
- if (!op)
74
- continue;
75
- const parameters = mergeParameters(pathItem.parameters, op.parameters);
76
- const normalizedMethod = method.toUpperCase();
77
- out.push({
78
- key: operationKey(normalizedMethod, path),
79
- method: normalizedMethod,
80
- path,
81
- operationId: op.operationId,
82
- tags: op.tags ?? [],
83
- summary: op.summary,
84
- description: op.description,
85
- deprecated: op.deprecated,
86
- security: op.security ?? doc.security,
87
- parameters,
88
- requestBody: normalizeRequestBody(op.requestBody)
89
- });
90
- }
91
- }
92
- out.sort((a, b) => {
93
- if (a.path !== b.path)
94
- return a.path.localeCompare(b.path);
95
- return a.method.localeCompare(b.method);
96
- });
97
- return out;
98
- }
99
- export {
100
- indexOperations
101
- };
102
-
103
- //# debugId=C74131EC8AF45C3D64756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/operations.ts"],
4
- "sourcesContent": [
5
- "import type {\n\tNormalizedOperation,\n\tNormalizedParameter,\n\tNormalizedRequestBody,\n\tOpenApiDoc,\n} from \"./types.ts\";\n\nfunction operationKey(method: string, path: string): string {\n\treturn `${method.toUpperCase()} ${path}`;\n}\n\nconst HTTP_METHODS = [\n\t\"get\",\n\t\"post\",\n\t\"put\",\n\t\"patch\",\n\t\"delete\",\n\t\"options\",\n\t\"head\",\n\t\"trace\",\n] as const;\n\ntype RawParameter = {\n\tin?: string;\n\tname?: string;\n\trequired?: boolean;\n\tdescription?: string;\n\tschema?: unknown;\n};\n\ntype RawRequestBody = {\n\trequired?: boolean;\n\tcontent?: Record<string, { schema?: unknown } | undefined>;\n};\n\ntype RawOperation = {\n\toperationId?: string;\n\ttags?: string[];\n\tsummary?: string;\n\tdescription?: string;\n\tdeprecated?: boolean;\n\tsecurity?: OpenApiDoc[\"security\"];\n\tparameters?: RawParameter[];\n\trequestBody?: RawRequestBody;\n};\n\ntype RawPathItem = {\n\tparameters?: RawParameter[];\n} & Partial<Record<(typeof HTTP_METHODS)[number], RawOperation>>;\n\nfunction normalizeParam(p: RawParameter): NormalizedParameter | undefined {\n\tif (!p || typeof p !== \"object\") return undefined;\n\tconst loc = p.in;\n\tconst name = p.name;\n\tif (\n\t\tloc !== \"path\" &&\n\t\tloc !== \"query\" &&\n\t\tloc !== \"header\" &&\n\t\tloc !== \"cookie\"\n\t) {\n\t\treturn undefined;\n\t}\n\tif (!name) return undefined;\n\n\treturn {\n\t\tin: loc,\n\t\tname,\n\t\trequired: Boolean(p.required || loc === \"path\"),\n\t\tdescription: p.description,\n\t\tschema: p.schema,\n\t};\n}\n\nfunction mergeParameters(\n\tpathParams: RawParameter[] | undefined,\n\topParams: RawParameter[] | undefined,\n): NormalizedParameter[] {\n\tconst merged = new Map<string, NormalizedParameter>();\n\n\tfor (const p of pathParams ?? []) {\n\t\tconst normalized = normalizeParam(p);\n\t\tif (!normalized) continue;\n\t\tmerged.set(`${normalized.in}:${normalized.name}`, normalized);\n\t}\n\n\tfor (const p of opParams ?? []) {\n\t\tconst normalized = normalizeParam(p);\n\t\tif (!normalized) continue;\n\t\tmerged.set(`${normalized.in}:${normalized.name}`, normalized);\n\t}\n\n\treturn [...merged.values()];\n}\n\nfunction normalizeRequestBody(\n\trb: RawRequestBody | undefined,\n): NormalizedRequestBody | undefined {\n\tif (!rb) return undefined;\n\n\tconst content = rb.content ?? {};\n\tconst contentTypes = Object.keys(content);\n\tconst schemasByContentType: Record<string, unknown | undefined> = {};\n\n\tfor (const contentType of contentTypes) {\n\t\tschemasByContentType[contentType] = content[contentType]?.schema;\n\t}\n\n\treturn {\n\t\trequired: Boolean(rb.required),\n\t\tcontentTypes,\n\t\tschemasByContentType,\n\t};\n}\n\nexport function indexOperations(doc: OpenApiDoc): NormalizedOperation[] {\n\tconst out: NormalizedOperation[] = [];\n\tconst paths = doc.paths ?? {};\n\n\tfor (const [path, rawPathItem] of Object.entries(paths)) {\n\t\tif (!rawPathItem || typeof rawPathItem !== \"object\") continue;\n\n\t\tconst pathItem = rawPathItem as RawPathItem;\n\n\t\tfor (const method of HTTP_METHODS) {\n\t\t\tconst op = pathItem[method];\n\t\t\tif (!op) continue;\n\n\t\t\tconst parameters = mergeParameters(pathItem.parameters, op.parameters);\n\t\t\tconst normalizedMethod = method.toUpperCase();\n\t\t\tout.push({\n\t\t\t\tkey: operationKey(normalizedMethod, path),\n\t\t\t\tmethod: normalizedMethod,\n\t\t\t\tpath,\n\t\t\t\toperationId: op.operationId,\n\t\t\t\ttags: op.tags ?? [],\n\t\t\t\tsummary: op.summary,\n\t\t\t\tdescription: op.description,\n\t\t\t\tdeprecated: op.deprecated,\n\t\t\t\tsecurity: (op.security ?? doc.security) as OpenApiDoc[\"security\"],\n\t\t\t\tparameters,\n\t\t\t\trequestBody: normalizeRequestBody(op.requestBody),\n\t\t\t});\n\t\t}\n\t}\n\n\tout.sort((a, b) => {\n\t\tif (a.path !== b.path) return a.path.localeCompare(b.path);\n\t\treturn a.method.localeCompare(b.method);\n\t});\n\n\treturn out;\n}\n"
6
- ],
7
- "mappings": ";AAOA,SAAS,YAAY,CAAC,QAAgB,MAAsB;AAAA,EAC3D,OAAO,GAAG,OAAO,YAAY,KAAK;AAAA;AAGnC,IAAM,eAAe;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AA8BA,SAAS,cAAc,CAAC,GAAkD;AAAA,EACzE,IAAI,CAAC,KAAK,OAAO,MAAM;AAAA,IAAU;AAAA,EACjC,MAAM,MAAM,EAAE;AAAA,EACd,MAAM,OAAO,EAAE;AAAA,EACf,IACC,QAAQ,UACR,QAAQ,WACR,QAAQ,YACR,QAAQ,UACP;AAAA,IACD;AAAA,EACD;AAAA,EACA,IAAI,CAAC;AAAA,IAAM;AAAA,EAEX,OAAO;AAAA,IACN,IAAI;AAAA,IACJ;AAAA,IACA,UAAU,QAAQ,EAAE,YAAY,QAAQ,MAAM;AAAA,IAC9C,aAAa,EAAE;AAAA,IACf,QAAQ,EAAE;AAAA,EACX;AAAA;AAGD,SAAS,eAAe,CACvB,YACA,UACwB;AAAA,EACxB,MAAM,SAAS,IAAI;AAAA,EAEnB,WAAW,KAAK,cAAc,CAAC,GAAG;AAAA,IACjC,MAAM,aAAa,eAAe,CAAC;AAAA,IACnC,IAAI,CAAC;AAAA,MAAY;AAAA,IACjB,OAAO,IAAI,GAAG,WAAW,MAAM,WAAW,QAAQ,UAAU;AAAA,EAC7D;AAAA,EAEA,WAAW,KAAK,YAAY,CAAC,GAAG;AAAA,IAC/B,MAAM,aAAa,eAAe,CAAC;AAAA,IACnC,IAAI,CAAC;AAAA,MAAY;AAAA,IACjB,OAAO,IAAI,GAAG,WAAW,MAAM,WAAW,QAAQ,UAAU;AAAA,EAC7D;AAAA,EAEA,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC;AAAA;AAG3B,SAAS,oBAAoB,CAC5B,IACoC;AAAA,EACpC,IAAI,CAAC;AAAA,IAAI;AAAA,EAET,MAAM,UAAU,GAAG,WAAW,CAAC;AAAA,EAC/B,MAAM,eAAe,OAAO,KAAK,OAAO;AAAA,EACxC,MAAM,uBAA4D,CAAC;AAAA,EAEnE,WAAW,eAAe,cAAc;AAAA,IACvC,qBAAqB,eAAe,QAAQ,cAAc;AAAA,EAC3D;AAAA,EAEA,OAAO;AAAA,IACN,UAAU,QAAQ,GAAG,QAAQ;AAAA,IAC7B;AAAA,IACA;AAAA,EACD;AAAA;AAGM,SAAS,eAAe,CAAC,KAAwC;AAAA,EACvE,MAAM,MAA6B,CAAC;AAAA,EACpC,MAAM,QAAQ,IAAI,SAAS,CAAC;AAAA,EAE5B,YAAY,MAAM,gBAAgB,OAAO,QAAQ,KAAK,GAAG;AAAA,IACxD,IAAI,CAAC,eAAe,OAAO,gBAAgB;AAAA,MAAU;AAAA,IAErD,MAAM,WAAW;AAAA,IAEjB,WAAW,UAAU,cAAc;AAAA,MAClC,MAAM,KAAK,SAAS;AAAA,MACpB,IAAI,CAAC;AAAA,QAAI;AAAA,MAET,MAAM,aAAa,gBAAgB,SAAS,YAAY,GAAG,UAAU;AAAA,MACrE,MAAM,mBAAmB,OAAO,YAAY;AAAA,MAC5C,IAAI,KAAK;AAAA,QACR,KAAK,aAAa,kBAAkB,IAAI;AAAA,QACxC,QAAQ;AAAA,QACR;AAAA,QACA,aAAa,GAAG;AAAA,QAChB,MAAM,GAAG,QAAQ,CAAC;AAAA,QAClB,SAAS,GAAG;AAAA,QACZ,aAAa,GAAG;AAAA,QAChB,YAAY,GAAG;AAAA,QACf,UAAW,GAAG,YAAY,IAAI;AAAA,QAC9B;AAAA,QACA,aAAa,qBAAqB,GAAG,WAAW;AAAA,MACjD,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EAEA,IAAI,KAAK,CAAC,GAAG,MAAM;AAAA,IAClB,IAAI,EAAE,SAAS,EAAE;AAAA,MAAM,OAAO,EAAE,KAAK,cAAc,EAAE,IAAI;AAAA,IACzD,OAAO,EAAE,OAAO,cAAc,EAAE,MAAM;AAAA,GACtC;AAAA,EAED,OAAO;AAAA;",
8
- "debugId": "C74131EC8AF45C3D64756E2164756E21",
9
- "names": []
10
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../src/cli/params.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,MAAM,SAAS,GAAG,OAAO,mBAAmB,EAAE,SAAS,CAAC;AAE9D,MAAM,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,YAAY,GAAG,MAAM,CAAC;IAC5B,EAAE,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAGhB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAGpB,MAAM,CAAC,EAAE,OAAO,YAAY,EAAE,UAAU,CAAC;CACzC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,mBAAmB,GAAG,SAAS,EAAE,CAwCrE"}
@@ -1,79 +0,0 @@
1
- // src/cli/schema-shape.ts
2
- function getSchemaType(schema) {
3
- if (!schema || typeof schema !== "object")
4
- return "unknown";
5
- const t = schema.type;
6
- if (t === "string")
7
- return "string";
8
- if (t === "number")
9
- return "number";
10
- if (t === "integer")
11
- return "integer";
12
- if (t === "boolean")
13
- return "boolean";
14
- if (t === "array")
15
- return "array";
16
- if (t === "object")
17
- return "object";
18
- return "unknown";
19
- }
20
- function getSchemaFormat(schema) {
21
- if (!schema || typeof schema !== "object")
22
- return;
23
- const f = schema.format;
24
- return typeof f === "string" ? f : undefined;
25
- }
26
- function getSchemaEnumStrings(schema) {
27
- if (!schema || typeof schema !== "object")
28
- return;
29
- const e = schema.enum;
30
- if (!Array.isArray(e))
31
- return;
32
- const values = e.filter((v) => typeof v === "string");
33
- return values.length ? values : undefined;
34
- }
35
-
36
- // src/cli/strings.ts
37
- function kebabCase(input) {
38
- const trimmed = input.trim();
39
- if (!trimmed)
40
- return "";
41
- return trimmed.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/[\s_.:/]+/g, "-").replace(/[^a-zA-Z0-9-]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "").toLowerCase();
42
- }
43
-
44
- // src/cli/params.ts
45
- function deriveParamSpecs(op) {
46
- const out = [];
47
- for (const p of op.parameters) {
48
- const flag = `--${kebabCase(p.name)}`;
49
- const type = getSchemaType(p.schema);
50
- const schemaObj = p.schema && typeof p.schema === "object" ? p.schema : undefined;
51
- const itemsSchema = schemaObj && type === "array" && typeof schemaObj.items === "object" ? schemaObj.items : undefined;
52
- out.push({
53
- kind: p.in === "path" ? "positional" : "flag",
54
- in: p.in,
55
- name: p.name,
56
- flag,
57
- required: p.required,
58
- description: p.description,
59
- type,
60
- format: getSchemaFormat(p.schema),
61
- enum: getSchemaEnumStrings(p.schema),
62
- itemType: type === "array" ? getSchemaType(itemsSchema) : undefined,
63
- itemFormat: type === "array" ? getSchemaFormat(itemsSchema) : undefined,
64
- itemEnum: type === "array" ? getSchemaEnumStrings(itemsSchema) : undefined,
65
- schema: schemaObj
66
- });
67
- }
68
- out.sort((a, b) => {
69
- if (a.in !== b.in)
70
- return a.in.localeCompare(b.in);
71
- return a.name.localeCompare(b.name);
72
- });
73
- return out;
74
- }
75
- export {
76
- deriveParamSpecs
77
- };
78
-
79
- //# debugId=1318B970EA1D049964756E2164756E21
@@ -1,12 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/schema-shape.ts", "../../../src/cli/strings.ts", "../../../src/cli/params.ts"],
4
- "sourcesContent": [
5
- "export type ParamType =\n\t| \"string\"\n\t| \"number\"\n\t| \"integer\"\n\t| \"boolean\"\n\t| \"array\"\n\t| \"object\"\n\t| \"unknown\";\n\nexport function getSchemaType(schema: unknown): ParamType {\n\tif (!schema || typeof schema !== \"object\") return \"unknown\";\n\tconst t = (schema as { type?: unknown }).type;\n\tif (t === \"string\") return \"string\";\n\tif (t === \"number\") return \"number\";\n\tif (t === \"integer\") return \"integer\";\n\tif (t === \"boolean\") return \"boolean\";\n\tif (t === \"array\") return \"array\";\n\tif (t === \"object\") return \"object\";\n\treturn \"unknown\";\n}\n\nexport function getSchemaFormat(schema: unknown): string | undefined {\n\tif (!schema || typeof schema !== \"object\") return undefined;\n\tconst f = (schema as { format?: unknown }).format;\n\treturn typeof f === \"string\" ? f : undefined;\n}\n\nexport function getSchemaEnumStrings(schema: unknown): string[] | undefined {\n\tif (!schema || typeof schema !== \"object\") return undefined;\n\tconst e = (schema as { enum?: unknown }).enum;\n\tif (!Array.isArray(e)) return undefined;\n\n\t// We only surface string enums for now (enough for flag docs + completion).\n\tconst values = e.filter((v) => typeof v === \"string\") as string[];\n\treturn values.length ? values : undefined;\n}\n",
6
- "export function kebabCase(input: string): string {\n\tconst trimmed = input.trim();\n\tif (!trimmed) return \"\";\n\n\t// Convert spaces/underscores/dots to dashes, split camelCase.\n\treturn trimmed\n\t\t.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n\t\t.replace(/[\\s_.:/]+/g, \"-\")\n\t\t.replace(/[^a-zA-Z0-9-]/g, \"-\")\n\t\t.replace(/-+/g, \"-\")\n\t\t.replace(/^-|-$/g, \"\")\n\t\t.toLowerCase();\n}\n\nexport function titleCase(input: string): string {\n\treturn input\n\t\t.split(/\\s+/g)\n\t\t.filter(Boolean)\n\t\t.map((w) => w[0]?.toUpperCase() + w.slice(1))\n\t\t.join(\" \");\n}\n",
7
- "import {\n\tgetSchemaEnumStrings,\n\tgetSchemaFormat,\n\tgetSchemaType,\n} from \"./schema-shape.ts\";\nimport { kebabCase } from \"./strings.ts\";\nimport type { NormalizedOperation, NormalizedParameter } from \"./types.ts\";\n\nexport type ParamType = import(\"./schema-shape.ts\").ParamType;\n\nexport type ParamSpec = {\n\tkind: \"positional\" | \"flag\";\n\tin: NormalizedParameter[\"in\"];\n\tname: string;\n\tflag: string;\n\trequired: boolean;\n\tdescription?: string;\n\ttype: ParamType;\n\tformat?: string;\n\tenum?: string[];\n\n\t// Arrays\n\titemType?: ParamType;\n\titemFormat?: string;\n\titemEnum?: string[];\n\n\t// Original schema for Ajv validation and future advanced flag expansion.\n\tschema?: import(\"./types.ts\").JsonSchema;\n};\n\nexport function deriveParamSpecs(op: NormalizedOperation): ParamSpec[] {\n\tconst out: ParamSpec[] = [];\n\n\tfor (const p of op.parameters) {\n\t\tconst flag = `--${kebabCase(p.name)}`;\n\t\tconst type = getSchemaType(p.schema);\n\t\tconst schemaObj =\n\t\t\tp.schema && typeof p.schema === \"object\"\n\t\t\t\t? (p.schema as import(\"./types.ts\").JsonSchema)\n\t\t\t\t: undefined;\n\n\t\tconst itemsSchema =\n\t\t\tschemaObj && type === \"array\" && typeof schemaObj.items === \"object\"\n\t\t\t\t? (schemaObj.items as unknown)\n\t\t\t\t: undefined;\n\n\t\tout.push({\n\t\t\tkind: p.in === \"path\" ? \"positional\" : \"flag\",\n\t\t\tin: p.in,\n\t\t\tname: p.name,\n\t\t\tflag,\n\t\t\trequired: p.required,\n\t\t\tdescription: p.description,\n\t\t\ttype,\n\t\t\tformat: getSchemaFormat(p.schema),\n\t\t\tenum: getSchemaEnumStrings(p.schema),\n\t\t\titemType: type === \"array\" ? getSchemaType(itemsSchema) : undefined,\n\t\t\titemFormat: type === \"array\" ? getSchemaFormat(itemsSchema) : undefined,\n\t\t\titemEnum:\n\t\t\t\ttype === \"array\" ? getSchemaEnumStrings(itemsSchema) : undefined,\n\t\t\tschema: schemaObj,\n\t\t});\n\t}\n\n\tout.sort((a, b) => {\n\t\tif (a.in !== b.in) return a.in.localeCompare(b.in);\n\t\treturn a.name.localeCompare(b.name);\n\t});\n\n\treturn out;\n}\n"
8
- ],
9
- "mappings": ";AASO,SAAS,aAAa,CAAC,QAA4B;AAAA,EACzD,IAAI,CAAC,UAAU,OAAO,WAAW;AAAA,IAAU,OAAO;AAAA,EAClD,MAAM,IAAK,OAA8B;AAAA,EACzC,IAAI,MAAM;AAAA,IAAU,OAAO;AAAA,EAC3B,IAAI,MAAM;AAAA,IAAU,OAAO;AAAA,EAC3B,IAAI,MAAM;AAAA,IAAW,OAAO;AAAA,EAC5B,IAAI,MAAM;AAAA,IAAW,OAAO;AAAA,EAC5B,IAAI,MAAM;AAAA,IAAS,OAAO;AAAA,EAC1B,IAAI,MAAM;AAAA,IAAU,OAAO;AAAA,EAC3B,OAAO;AAAA;AAGD,SAAS,eAAe,CAAC,QAAqC;AAAA,EACpE,IAAI,CAAC,UAAU,OAAO,WAAW;AAAA,IAAU;AAAA,EAC3C,MAAM,IAAK,OAAgC;AAAA,EAC3C,OAAO,OAAO,MAAM,WAAW,IAAI;AAAA;AAG7B,SAAS,oBAAoB,CAAC,QAAuC;AAAA,EAC3E,IAAI,CAAC,UAAU,OAAO,WAAW;AAAA,IAAU;AAAA,EAC3C,MAAM,IAAK,OAA8B;AAAA,EACzC,IAAI,CAAC,MAAM,QAAQ,CAAC;AAAA,IAAG;AAAA,EAGvB,MAAM,SAAS,EAAE,OAAO,CAAC,MAAM,OAAO,MAAM,QAAQ;AAAA,EACpD,OAAO,OAAO,SAAS,SAAS;AAAA;;;AClC1B,SAAS,SAAS,CAAC,OAAuB;AAAA,EAChD,MAAM,UAAU,MAAM,KAAK;AAAA,EAC3B,IAAI,CAAC;AAAA,IAAS,OAAO;AAAA,EAGrB,OAAO,QACL,QAAQ,sBAAsB,OAAO,EACrC,QAAQ,cAAc,GAAG,EACzB,QAAQ,kBAAkB,GAAG,EAC7B,QAAQ,OAAO,GAAG,EAClB,QAAQ,UAAU,EAAE,EACpB,YAAY;AAAA;;;ACmBR,SAAS,gBAAgB,CAAC,IAAsC;AAAA,EACtE,MAAM,MAAmB,CAAC;AAAA,EAE1B,WAAW,KAAK,GAAG,YAAY;AAAA,IAC9B,MAAM,OAAO,KAAK,UAAU,EAAE,IAAI;AAAA,IAClC,MAAM,OAAO,cAAc,EAAE,MAAM;AAAA,IACnC,MAAM,YACL,EAAE,UAAU,OAAO,EAAE,WAAW,WAC5B,EAAE,SACH;AAAA,IAEJ,MAAM,cACL,aAAa,SAAS,WAAW,OAAO,UAAU,UAAU,WACxD,UAAU,QACX;AAAA,IAEJ,IAAI,KAAK;AAAA,MACR,MAAM,EAAE,OAAO,SAAS,eAAe;AAAA,MACvC,IAAI,EAAE;AAAA,MACN,MAAM,EAAE;AAAA,MACR;AAAA,MACA,UAAU,EAAE;AAAA,MACZ,aAAa,EAAE;AAAA,MACf;AAAA,MACA,QAAQ,gBAAgB,EAAE,MAAM;AAAA,MAChC,MAAM,qBAAqB,EAAE,MAAM;AAAA,MACnC,UAAU,SAAS,UAAU,cAAc,WAAW,IAAI;AAAA,MAC1D,YAAY,SAAS,UAAU,gBAAgB,WAAW,IAAI;AAAA,MAC9D,UACC,SAAS,UAAU,qBAAqB,WAAW,IAAI;AAAA,MACxD,QAAQ;AAAA,IACT,CAAC;AAAA,EACF;AAAA,EAEA,IAAI,KAAK,CAAC,GAAG,MAAM;AAAA,IAClB,IAAI,EAAE,OAAO,EAAE;AAAA,MAAI,OAAO,EAAE,GAAG,cAAc,EAAE,EAAE;AAAA,IACjD,OAAO,EAAE,KAAK,cAAc,EAAE,IAAI;AAAA,GAClC;AAAA,EAED,OAAO;AAAA;",
10
- "debugId": "1318B970EA1D049964756E2164756E21",
11
- "names": []
12
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"pluralize.d.ts","sourceRoot":"","sources":["../../../src/cli/pluralize.ts"],"names":[],"mappings":"AAoBA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoB9C"}
@@ -1,43 +0,0 @@
1
- // src/cli/pluralize.ts
2
- var IRREGULAR = {
3
- person: "people",
4
- man: "men",
5
- woman: "women",
6
- child: "children",
7
- tooth: "teeth",
8
- foot: "feet",
9
- mouse: "mice",
10
- goose: "geese"
11
- };
12
- var UNCOUNTABLE = new Set([
13
- "metadata",
14
- "information",
15
- "equipment",
16
- "money",
17
- "series",
18
- "species"
19
- ]);
20
- function pluralize(word) {
21
- const w = word.trim();
22
- if (!w)
23
- return w;
24
- const lower = w.toLowerCase();
25
- if (UNCOUNTABLE.has(lower))
26
- return lower;
27
- if (IRREGULAR[lower])
28
- return IRREGULAR[lower];
29
- if (lower.endsWith("s"))
30
- return lower;
31
- if (/[bcdfghjklmnpqrstvwxyz]y$/.test(lower)) {
32
- return lower.replace(/y$/, "ies");
33
- }
34
- if (/(ch|sh|x|z)$/.test(lower)) {
35
- return `${lower}es`;
36
- }
37
- return `${lower}s`;
38
- }
39
- export {
40
- pluralize
41
- };
42
-
43
- //# debugId=DB29AA914B97043364756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/pluralize.ts"],
4
- "sourcesContent": [
5
- "const IRREGULAR: Record<string, string> = {\n\tperson: \"people\",\n\tman: \"men\",\n\twoman: \"women\",\n\tchild: \"children\",\n\ttooth: \"teeth\",\n\tfoot: \"feet\",\n\tmouse: \"mice\",\n\tgoose: \"geese\",\n};\n\nconst UNCOUNTABLE = new Set([\n\t\"metadata\",\n\t\"information\",\n\t\"equipment\",\n\t\"money\",\n\t\"series\",\n\t\"species\",\n]);\n\nexport function pluralize(word: string): string {\n\tconst w = word.trim();\n\tif (!w) return w;\n\n\tconst lower = w.toLowerCase();\n\tif (UNCOUNTABLE.has(lower)) return lower;\n\tif (IRREGULAR[lower]) return IRREGULAR[lower];\n\n\t// already plural-ish\n\tif (lower.endsWith(\"s\")) return lower;\n\n\tif (/[bcdfghjklmnpqrstvwxyz]y$/.test(lower)) {\n\t\treturn lower.replace(/y$/, \"ies\");\n\t}\n\n\tif (/(ch|sh|x|z)$/.test(lower)) {\n\t\treturn `${lower}es`;\n\t}\n\n\treturn `${lower}s`;\n}\n"
6
- ],
7
- "mappings": ";AAAA,IAAM,YAAoC;AAAA,EACzC,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AACR;AAEA,IAAM,cAAc,IAAI,IAAI;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,CAAC;AAEM,SAAS,SAAS,CAAC,MAAsB;AAAA,EAC/C,MAAM,IAAI,KAAK,KAAK;AAAA,EACpB,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EAEf,MAAM,QAAQ,EAAE,YAAY;AAAA,EAC5B,IAAI,YAAY,IAAI,KAAK;AAAA,IAAG,OAAO;AAAA,EACnC,IAAI,UAAU;AAAA,IAAQ,OAAO,UAAU;AAAA,EAGvC,IAAI,MAAM,SAAS,GAAG;AAAA,IAAG,OAAO;AAAA,EAEhC,IAAI,4BAA4B,KAAK,KAAK,GAAG;AAAA,IAC5C,OAAO,MAAM,QAAQ,MAAM,KAAK;AAAA,EACjC;AAAA,EAEA,IAAI,eAAe,KAAK,KAAK,GAAG;AAAA,IAC/B,OAAO,GAAG;AAAA,EACX;AAAA,EAEA,OAAO,GAAG;AAAA;",
8
- "debugId": "DB29AA914B97043364756E2164756E21",
9
- "names": []
10
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"positional.d.ts","sourceRoot":"","sources":["../../../src/cli/positional.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,SAAS,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,mBAAmB,EAAE,SAAS,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACxB,KAAK,EAAE,KAAK,CACX,IAAI,CACH,OAAO,aAAa,EAAE,SAAS,EAC7B,IAAI,GACJ,MAAM,GACN,MAAM,GACN,UAAU,GACV,aAAa,GACb,MAAM,GACN,QAAQ,GACR,MAAM,GACN,UAAU,GACV,YAAY,GACZ,UAAU,CACZ,CACD,CAAC;CACF,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,EAAE,CAmB5E;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,UAAU,CAkBjE"}
@@ -1,39 +0,0 @@
1
- // src/cli/positional.ts
2
- function derivePositionals(action) {
3
- const byName = new Map;
4
- for (const name of action.pathArgs) {
5
- const p = action.params.find((x) => x.in === "path" && x.name === name);
6
- byName.set(name, {
7
- name,
8
- required: true,
9
- description: p?.description,
10
- type: p?.type ?? "unknown",
11
- format: p?.format,
12
- enum: p?.enum
13
- });
14
- }
15
- return [...byName.values()];
16
- }
17
- function deriveFlags(action) {
18
- return {
19
- flags: action.params.filter((p) => p.kind === "flag").map((p) => ({
20
- in: p.in,
21
- name: p.name,
22
- flag: p.flag,
23
- required: p.required,
24
- description: p.description,
25
- type: p.type,
26
- format: p.format,
27
- enum: p.enum,
28
- itemType: p.itemType,
29
- itemFormat: p.itemFormat,
30
- itemEnum: p.itemEnum
31
- }))
32
- };
33
- }
34
- export {
35
- derivePositionals,
36
- deriveFlags
37
- };
38
-
39
- //# debugId=16EFAB2F171B486164756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/positional.ts"],
4
- "sourcesContent": [
5
- "import type { ParamSpec } from \"./params.ts\";\n\nexport type ActionShapeForCli = {\n\tpathArgs: string[];\n\tparams: ParamSpec[];\n};\n\nexport type PositionalArg = {\n\tname: string;\n\trequired: boolean;\n\tdescription?: string;\n\ttype: import(\"./schema-shape.ts\").ParamType;\n\tformat?: string;\n\tenum?: string[];\n};\n\nexport type FlagsIndex = {\n\tflags: Array<\n\t\tPick<\n\t\t\timport(\"./params.ts\").ParamSpec,\n\t\t\t| \"in\"\n\t\t\t| \"name\"\n\t\t\t| \"flag\"\n\t\t\t| \"required\"\n\t\t\t| \"description\"\n\t\t\t| \"type\"\n\t\t\t| \"format\"\n\t\t\t| \"enum\"\n\t\t\t| \"itemType\"\n\t\t\t| \"itemFormat\"\n\t\t\t| \"itemEnum\"\n\t\t>\n\t>;\n};\n\nexport function derivePositionals(action: ActionShapeForCli): PositionalArg[] {\n\tconst byName = new Map<string, PositionalArg>();\n\n\t// Use pathArgs order; match metadata from params when available.\n\tfor (const name of action.pathArgs) {\n\t\tconst p = action.params.find(\n\t\t\t(x: ParamSpec) => x.in === \"path\" && x.name === name,\n\t\t);\n\t\tbyName.set(name, {\n\t\t\tname,\n\t\t\trequired: true,\n\t\t\tdescription: p?.description,\n\t\t\ttype: p?.type ?? \"unknown\",\n\t\t\tformat: p?.format,\n\t\t\tenum: p?.enum,\n\t\t});\n\t}\n\n\treturn [...byName.values()];\n}\n\nexport function deriveFlags(action: ActionShapeForCli): FlagsIndex {\n\treturn {\n\t\tflags: action.params\n\t\t\t.filter((p: ParamSpec) => p.kind === \"flag\")\n\t\t\t.map((p: ParamSpec) => ({\n\t\t\t\tin: p.in,\n\t\t\t\tname: p.name,\n\t\t\t\tflag: p.flag,\n\t\t\t\trequired: p.required,\n\t\t\t\tdescription: p.description,\n\t\t\t\ttype: p.type,\n\t\t\t\tformat: p.format,\n\t\t\t\tenum: p.enum,\n\t\t\t\titemType: p.itemType,\n\t\t\t\titemFormat: p.itemFormat,\n\t\t\t\titemEnum: p.itemEnum,\n\t\t\t})),\n\t};\n}\n"
6
- ],
7
- "mappings": ";AAmCO,SAAS,iBAAiB,CAAC,QAA4C;AAAA,EAC7E,MAAM,SAAS,IAAI;AAAA,EAGnB,WAAW,QAAQ,OAAO,UAAU;AAAA,IACnC,MAAM,IAAI,OAAO,OAAO,KACvB,CAAC,MAAiB,EAAE,OAAO,UAAU,EAAE,SAAS,IACjD;AAAA,IACA,OAAO,IAAI,MAAM;AAAA,MAChB;AAAA,MACA,UAAU;AAAA,MACV,aAAa,GAAG;AAAA,MAChB,MAAM,GAAG,QAAQ;AAAA,MACjB,QAAQ,GAAG;AAAA,MACX,MAAM,GAAG;AAAA,IACV,CAAC;AAAA,EACF;AAAA,EAEA,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC;AAAA;AAGpB,SAAS,WAAW,CAAC,QAAuC;AAAA,EAClE,OAAO;AAAA,IACN,OAAO,OAAO,OACZ,OAAO,CAAC,MAAiB,EAAE,SAAS,MAAM,EAC1C,IAAI,CAAC,OAAkB;AAAA,MACvB,IAAI,EAAE;AAAA,MACN,MAAM,EAAE;AAAA,MACR,MAAM,EAAE;AAAA,MACR,UAAU,EAAE;AAAA,MACZ,aAAa,EAAE;AAAA,MACf,MAAM,EAAE;AAAA,MACR,QAAQ,EAAE;AAAA,MACV,MAAM,EAAE;AAAA,MACR,UAAU,EAAE;AAAA,MACZ,YAAY,EAAE;AAAA,MACd,UAAU,EAAE;AAAA,IACb,EAAE;AAAA,EACJ;AAAA;",
8
- "debugId": "16EFAB2F171B486164756E2164756E21",
9
- "names": []
10
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-body.d.ts","sourceRoot":"","sources":["../../../src/cli/request-body.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACX,UAAU,EACV,mBAAmB,EAEnB,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,kBAAkB,GAAG;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,mBAAmB,EAAE,SAAS,CAAC;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAE9B,OAAO,EAAE,OAAO,CAAC;IACjB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IAGtB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAG9B,eAAe,CAAC,EAAE,UAAU,CAAC;CAC7B,CAAC;AAQF,wBAAgB,qBAAqB,CACpC,EAAE,EAAE,mBAAmB,GACrB,eAAe,GAAG,SAAS,CAiD7B"}
@@ -1,82 +0,0 @@
1
- // src/cli/schema-shape.ts
2
- function getSchemaType(schema) {
3
- if (!schema || typeof schema !== "object")
4
- return "unknown";
5
- const t = schema.type;
6
- if (t === "string")
7
- return "string";
8
- if (t === "number")
9
- return "number";
10
- if (t === "integer")
11
- return "integer";
12
- if (t === "boolean")
13
- return "boolean";
14
- if (t === "array")
15
- return "array";
16
- if (t === "object")
17
- return "object";
18
- return "unknown";
19
- }
20
- function getSchemaFormat(schema) {
21
- if (!schema || typeof schema !== "object")
22
- return;
23
- const f = schema.format;
24
- return typeof f === "string" ? f : undefined;
25
- }
26
- function getSchemaEnumStrings(schema) {
27
- if (!schema || typeof schema !== "object")
28
- return;
29
- const e = schema.enum;
30
- if (!Array.isArray(e))
31
- return;
32
- const values = e.filter((v) => typeof v === "string");
33
- return values.length ? values : undefined;
34
- }
35
-
36
- // src/cli/types.ts
37
- function isJsonSchema(value) {
38
- return Boolean(value) && typeof value === "object" && !Array.isArray(value);
39
- }
40
-
41
- // src/cli/request-body.ts
42
- function getRequestBody(op) {
43
- return op.requestBody;
44
- }
45
- function deriveRequestBodyInfo(op) {
46
- const rb = getRequestBody(op);
47
- if (!rb)
48
- return;
49
- const content = [];
50
- for (const contentType of rb.contentTypes) {
51
- const schema = rb.schemasByContentType[contentType];
52
- content.push({
53
- contentType,
54
- required: rb.required,
55
- schemaType: getSchemaType(schema),
56
- schemaFormat: getSchemaFormat(schema),
57
- schemaEnum: getSchemaEnumStrings(schema)
58
- });
59
- }
60
- content.sort((a, b) => a.contentType.localeCompare(b.contentType));
61
- const hasJson = content.some((c) => c.contentType.includes("json"));
62
- const hasFormUrlEncoded = content.some((c) => c.contentType === "application/x-www-form-urlencoded");
63
- const hasMultipart = content.some((c) => c.contentType.startsWith("multipart/"));
64
- const bodyFlags = ["--data", "--file"];
65
- const preferredContentType = content.find((c) => c.contentType === "application/json")?.contentType ?? content.find((c) => c.contentType.includes("json"))?.contentType ?? content[0]?.contentType;
66
- const preferredSchema = preferredContentType ? rb.schemasByContentType[preferredContentType] : undefined;
67
- return {
68
- required: rb.required,
69
- content,
70
- hasJson,
71
- hasFormUrlEncoded,
72
- hasMultipart,
73
- bodyFlags,
74
- preferredContentType,
75
- preferredSchema: isJsonSchema(preferredSchema) ? preferredSchema : undefined
76
- };
77
- }
78
- export {
79
- deriveRequestBodyInfo
80
- };
81
-
82
- //# debugId=3A023F015349AA9164756E2164756E21
@@ -1,12 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/cli/schema-shape.ts", "../../../src/cli/types.ts", "../../../src/cli/request-body.ts"],
4
- "sourcesContent": [
5
- "export type ParamType =\n\t| \"string\"\n\t| \"number\"\n\t| \"integer\"\n\t| \"boolean\"\n\t| \"array\"\n\t| \"object\"\n\t| \"unknown\";\n\nexport function getSchemaType(schema: unknown): ParamType {\n\tif (!schema || typeof schema !== \"object\") return \"unknown\";\n\tconst t = (schema as { type?: unknown }).type;\n\tif (t === \"string\") return \"string\";\n\tif (t === \"number\") return \"number\";\n\tif (t === \"integer\") return \"integer\";\n\tif (t === \"boolean\") return \"boolean\";\n\tif (t === \"array\") return \"array\";\n\tif (t === \"object\") return \"object\";\n\treturn \"unknown\";\n}\n\nexport function getSchemaFormat(schema: unknown): string | undefined {\n\tif (!schema || typeof schema !== \"object\") return undefined;\n\tconst f = (schema as { format?: unknown }).format;\n\treturn typeof f === \"string\" ? f : undefined;\n}\n\nexport function getSchemaEnumStrings(schema: unknown): string[] | undefined {\n\tif (!schema || typeof schema !== \"object\") return undefined;\n\tconst e = (schema as { enum?: unknown }).enum;\n\tif (!Array.isArray(e)) return undefined;\n\n\t// We only surface string enums for now (enough for flag docs + completion).\n\tconst values = e.filter((v) => typeof v === \"string\") as string[];\n\treturn values.length ? values : undefined;\n}\n",
6
- "export type SpecSource = \"embedded\" | \"file\" | \"url\";\n\nexport type SecurityRequirement = Record<string, string[]>;\n\nexport type OpenApiDoc = {\n\topenapi: string;\n\tinfo?: {\n\t\ttitle?: string;\n\t\tversion?: string;\n\t};\n\tservers?: Array<{ url: string; description?: string; variables?: unknown }>;\n\tsecurity?: SecurityRequirement[];\n\tcomponents?: {\n\t\tsecuritySchemes?: Record<string, unknown>;\n\t};\n\tpaths?: Record<string, unknown>;\n};\n\nexport type NormalizedParameter = {\n\tin: \"path\" | \"query\" | \"header\" | \"cookie\";\n\tname: string;\n\trequired: boolean;\n\tdescription?: string;\n\tschema?: unknown;\n};\n\n// Minimal JSON Schema-like shape for validation and flag expansion.\nexport type JsonSchema = Record<string, unknown>;\n\nexport function isJsonSchema(value: unknown): value is JsonSchema {\n\treturn Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport type NormalizedRequestBody = {\n\trequired: boolean;\n\tcontentTypes: string[];\n\tschemasByContentType: Record<string, unknown | undefined>;\n};\n\nexport type NormalizedOperation = {\n\tkey: string;\n\tmethod: string;\n\tpath: string;\n\toperationId?: string;\n\ttags: string[];\n\tsummary?: string;\n\tdescription?: string;\n\tdeprecated?: boolean;\n\tsecurity?: SecurityRequirement[];\n\tparameters: NormalizedParameter[];\n\trequestBody?: NormalizedRequestBody;\n};\n\nexport type LoadedSpec = {\n\tsource: SpecSource;\n\tid: string;\n\tfingerprint: string;\n\tdoc: OpenApiDoc;\n};\n",
7
- "import {\n\tgetSchemaEnumStrings,\n\tgetSchemaFormat,\n\tgetSchemaType,\n} from \"./schema-shape.ts\";\nimport type {\n\tJsonSchema,\n\tNormalizedOperation,\n\tNormalizedRequestBody,\n} from \"./types.ts\";\nimport { isJsonSchema } from \"./types.ts\";\n\nexport type RequestBodyContent = {\n\tcontentType: string;\n\trequired: boolean;\n\tschemaType: import(\"./schema-shape.ts\").ParamType;\n\tschemaFormat?: string;\n\tschemaEnum?: string[];\n};\n\nexport type RequestBodyInfo = {\n\trequired: boolean;\n\tcontent: RequestBodyContent[];\n\t// Convenience flags for later arg generation.\n\thasJson: boolean;\n\thasFormUrlEncoded: boolean;\n\thasMultipart: boolean;\n\n\t// Phase 1 planning: supported generic body inputs.\n\tbodyFlags: string[];\n\tpreferredContentType?: string;\n\n\t// Original JSON Schema (for expanded flags + validation)\n\tpreferredSchema?: JsonSchema;\n};\n\nfunction getRequestBody(\n\top: NormalizedOperation,\n): NormalizedRequestBody | undefined {\n\treturn op.requestBody;\n}\n\nexport function deriveRequestBodyInfo(\n\top: NormalizedOperation,\n): RequestBodyInfo | undefined {\n\tconst rb = getRequestBody(op);\n\tif (!rb) return undefined;\n\n\tconst content: RequestBodyContent[] = [];\n\tfor (const contentType of rb.contentTypes) {\n\t\tconst schema = rb.schemasByContentType[contentType];\n\t\tcontent.push({\n\t\t\tcontentType,\n\t\t\trequired: rb.required,\n\t\t\tschemaType: getSchemaType(schema),\n\t\t\tschemaFormat: getSchemaFormat(schema),\n\t\t\tschemaEnum: getSchemaEnumStrings(schema),\n\t\t});\n\t}\n\n\tcontent.sort((a, b) => a.contentType.localeCompare(b.contentType));\n\n\tconst hasJson = content.some((c) => c.contentType.includes(\"json\"));\n\tconst hasFormUrlEncoded = content.some(\n\t\t(c) => c.contentType === \"application/x-www-form-urlencoded\",\n\t);\n\tconst hasMultipart = content.some((c) =>\n\t\tc.contentType.startsWith(\"multipart/\"),\n\t);\n\n\tconst bodyFlags = [\"--data\", \"--file\"]; // always available when requestBody exists\n\n\tconst preferredContentType =\n\t\tcontent.find((c) => c.contentType === \"application/json\")?.contentType ??\n\t\tcontent.find((c) => c.contentType.includes(\"json\"))?.contentType ??\n\t\tcontent[0]?.contentType;\n\n\tconst preferredSchema = preferredContentType\n\t\t? rb.schemasByContentType[preferredContentType]\n\t\t: undefined;\n\n\treturn {\n\t\trequired: rb.required,\n\t\tcontent,\n\t\thasJson,\n\t\thasFormUrlEncoded,\n\t\thasMultipart,\n\t\tbodyFlags,\n\t\tpreferredContentType,\n\t\tpreferredSchema: isJsonSchema(preferredSchema)\n\t\t\t? preferredSchema\n\t\t\t: undefined,\n\t};\n}\n"
8
- ],
9
- "mappings": ";AASO,SAAS,aAAa,CAAC,QAA4B;AAAA,EACzD,IAAI,CAAC,UAAU,OAAO,WAAW;AAAA,IAAU,OAAO;AAAA,EAClD,MAAM,IAAK,OAA8B;AAAA,EACzC,IAAI,MAAM;AAAA,IAAU,OAAO;AAAA,EAC3B,IAAI,MAAM;AAAA,IAAU,OAAO;AAAA,EAC3B,IAAI,MAAM;AAAA,IAAW,OAAO;AAAA,EAC5B,IAAI,MAAM;AAAA,IAAW,OAAO;AAAA,EAC5B,IAAI,MAAM;AAAA,IAAS,OAAO;AAAA,EAC1B,IAAI,MAAM;AAAA,IAAU,OAAO;AAAA,EAC3B,OAAO;AAAA;AAGD,SAAS,eAAe,CAAC,QAAqC;AAAA,EACpE,IAAI,CAAC,UAAU,OAAO,WAAW;AAAA,IAAU;AAAA,EAC3C,MAAM,IAAK,OAAgC;AAAA,EAC3C,OAAO,OAAO,MAAM,WAAW,IAAI;AAAA;AAG7B,SAAS,oBAAoB,CAAC,QAAuC;AAAA,EAC3E,IAAI,CAAC,UAAU,OAAO,WAAW;AAAA,IAAU;AAAA,EAC3C,MAAM,IAAK,OAA8B;AAAA,EACzC,IAAI,CAAC,MAAM,QAAQ,CAAC;AAAA,IAAG;AAAA,EAGvB,MAAM,SAAS,EAAE,OAAO,CAAC,MAAM,OAAO,MAAM,QAAQ;AAAA,EACpD,OAAO,OAAO,SAAS,SAAS;AAAA;;;ACL1B,SAAS,YAAY,CAAC,OAAqC;AAAA,EACjE,OAAO,QAAQ,KAAK,KAAK,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAAA;;;ACM3E,SAAS,cAAc,CACtB,IACoC;AAAA,EACpC,OAAO,GAAG;AAAA;AAGJ,SAAS,qBAAqB,CACpC,IAC8B;AAAA,EAC9B,MAAM,KAAK,eAAe,EAAE;AAAA,EAC5B,IAAI,CAAC;AAAA,IAAI;AAAA,EAET,MAAM,UAAgC,CAAC;AAAA,EACvC,WAAW,eAAe,GAAG,cAAc;AAAA,IAC1C,MAAM,SAAS,GAAG,qBAAqB;AAAA,IACvC,QAAQ,KAAK;AAAA,MACZ;AAAA,MACA,UAAU,GAAG;AAAA,MACb,YAAY,cAAc,MAAM;AAAA,MAChC,cAAc,gBAAgB,MAAM;AAAA,MACpC,YAAY,qBAAqB,MAAM;AAAA,IACxC,CAAC;AAAA,EACF;AAAA,EAEA,QAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,cAAc,EAAE,WAAW,CAAC;AAAA,EAEjE,MAAM,UAAU,QAAQ,KAAK,CAAC,MAAM,EAAE,YAAY,SAAS,MAAM,CAAC;AAAA,EAClE,MAAM,oBAAoB,QAAQ,KACjC,CAAC,MAAM,EAAE,gBAAgB,mCAC1B;AAAA,EACA,MAAM,eAAe,QAAQ,KAAK,CAAC,MAClC,EAAE,YAAY,WAAW,YAAY,CACtC;AAAA,EAEA,MAAM,YAAY,CAAC,UAAU,QAAQ;AAAA,EAErC,MAAM,uBACL,QAAQ,KAAK,CAAC,MAAM,EAAE,gBAAgB,kBAAkB,GAAG,eAC3D,QAAQ,KAAK,CAAC,MAAM,EAAE,YAAY,SAAS,MAAM,CAAC,GAAG,eACrD,QAAQ,IAAI;AAAA,EAEb,MAAM,kBAAkB,uBACrB,GAAG,qBAAqB,wBACxB;AAAA,EAEH,OAAO;AAAA,IACN,UAAU,GAAG;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB,aAAa,eAAe,IAC1C,kBACA;AAAA,EACJ;AAAA;",
10
- "debugId": "3A023F015349AA9164756E2164756E21",
11
- "names": []
12
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"argv.d.ts","sourceRoot":"","sources":["../../../../src/cli/runtime/argv.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAS3E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAElE"}
@@ -1,22 +0,0 @@
1
- // src/cli/runtime/argv.ts
2
- function getArgValue(argv, key) {
3
- for (let i = 0;i < argv.length; i++) {
4
- const a = argv[i];
5
- if (!a)
6
- continue;
7
- if (a === key)
8
- return argv[i + 1];
9
- if (a.startsWith(`${key}=`))
10
- return a.slice(key.length + 1);
11
- }
12
- return;
13
- }
14
- function hasAnyArg(argv, names) {
15
- return argv.some((a) => a && names.includes(a));
16
- }
17
- export {
18
- hasAnyArg,
19
- getArgValue
20
- };
21
-
22
- //# debugId=5952A660C549252B64756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/cli/runtime/argv.ts"],
4
- "sourcesContent": [
5
- "export function getArgValue(argv: string[], key: string): string | undefined {\n\tfor (let i = 0; i < argv.length; i++) {\n\t\tconst a = argv[i];\n\t\tif (!a) continue;\n\n\t\tif (a === key) return argv[i + 1];\n\t\tif (a.startsWith(`${key}=`)) return a.slice(key.length + 1);\n\t}\n\treturn undefined;\n}\n\nexport function hasAnyArg(argv: string[], names: string[]): boolean {\n\treturn argv.some((a) => a && names.includes(a));\n}\n"
6
- ],
7
- "mappings": ";AAAO,SAAS,WAAW,CAAC,MAAgB,KAAiC;AAAA,EAC5E,SAAS,IAAI,EAAG,IAAI,KAAK,QAAQ,KAAK;AAAA,IACrC,MAAM,IAAI,KAAK;AAAA,IACf,IAAI,CAAC;AAAA,MAAG;AAAA,IAER,IAAI,MAAM;AAAA,MAAK,OAAO,KAAK,IAAI;AAAA,IAC/B,IAAI,EAAE,WAAW,GAAG,MAAM;AAAA,MAAG,OAAO,EAAE,MAAM,IAAI,SAAS,CAAC;AAAA,EAC3D;AAAA,EACA;AAAA;AAGM,SAAS,SAAS,CAAC,MAAgB,OAA0B;AAAA,EACnE,OAAO,KAAK,KAAK,CAAC,MAAM,KAAK,MAAM,SAAS,CAAC,CAAC;AAAA;",
8
- "debugId": "5952A660C549252B64756E2164756E21",
9
- "names": []
10
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../../../src/cli/runtime/auth/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,MAAM,UAAU,GAAG;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAQF,wBAAgB,iBAAiB,CAChC,WAAW,EAAE,UAAU,EAAE,EACzB,QAAQ,EAAE,OAAO,4BAA4B,EAAE,WAAW,EAC1D,MAAM,EAAE,UAAU,GAChB,MAAM,GAAG,SAAS,CAuCpB"}
@@ -1,38 +0,0 @@
1
- // src/cli/runtime/auth/resolve.ts
2
- var BEARER_COMPATIBLE_KINDS = new Set([
3
- "http-bearer",
4
- "oauth2",
5
- "openIdConnect"
6
- ]);
7
- function resolveAuthScheme(authSchemes, required, inputs) {
8
- if (inputs.flagAuthScheme)
9
- return inputs.flagAuthScheme;
10
- if (inputs.profileAuthScheme && authSchemes.some((s) => s.key === inputs.profileAuthScheme)) {
11
- return inputs.profileAuthScheme;
12
- }
13
- if (inputs.embeddedAuthScheme && authSchemes.some((s) => s.key === inputs.embeddedAuthScheme)) {
14
- return inputs.embeddedAuthScheme;
15
- }
16
- const alts = required.alternatives;
17
- if (alts.length === 1 && alts[0]?.length === 1)
18
- return alts[0][0]?.key;
19
- if (authSchemes.length === 1)
20
- return authSchemes[0]?.key;
21
- if (inputs.hasStoredToken && alts.length > 0) {
22
- for (const alt of alts) {
23
- if (alt.length !== 1)
24
- continue;
25
- const key = alt[0]?.key;
26
- const scheme = authSchemes.find((s) => s.key === key);
27
- if (scheme && BEARER_COMPATIBLE_KINDS.has(scheme.kind)) {
28
- return key;
29
- }
30
- }
31
- }
32
- return;
33
- }
34
- export {
35
- resolveAuthScheme
36
- };
37
-
38
- //# debugId=28B781E4ECFEED9064756E2164756E21
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../../src/cli/runtime/auth/resolve.ts"],
4
- "sourcesContent": [
5
- "import type { AuthScheme } from \"../../auth-schemes.ts\";\n\nexport type AuthInputs = {\n\tflagAuthScheme?: string;\n\tprofileAuthScheme?: string;\n\tembeddedAuthScheme?: string;\n\thasStoredToken?: boolean;\n};\n\nconst BEARER_COMPATIBLE_KINDS = new Set([\n\t\"http-bearer\",\n\t\"oauth2\",\n\t\"openIdConnect\",\n]);\n\nexport function resolveAuthScheme(\n\tauthSchemes: AuthScheme[],\n\trequired: import(\"../../auth-requirements.ts\").AuthSummary,\n\tinputs: AuthInputs,\n): string | undefined {\n\t// Priority: CLI flag > profile > embedded default\n\tif (inputs.flagAuthScheme) return inputs.flagAuthScheme;\n\n\tif (\n\t\tinputs.profileAuthScheme &&\n\t\tauthSchemes.some((s) => s.key === inputs.profileAuthScheme)\n\t) {\n\t\treturn inputs.profileAuthScheme;\n\t}\n\n\tif (\n\t\tinputs.embeddedAuthScheme &&\n\t\tauthSchemes.some((s) => s.key === inputs.embeddedAuthScheme)\n\t) {\n\t\treturn inputs.embeddedAuthScheme;\n\t}\n\n\t// If operation requires exactly one scheme, choose it.\n\tconst alts = required.alternatives;\n\tif (alts.length === 1 && alts[0]?.length === 1) return alts[0][0]?.key;\n\n\t// Otherwise if there is only one scheme in spec, pick it.\n\tif (authSchemes.length === 1) return authSchemes[0]?.key;\n\n\t// If user has a stored token and operation accepts a bearer-compatible scheme,\n\t// automatically pick the first one that matches.\n\tif (inputs.hasStoredToken && alts.length > 0) {\n\t\tfor (const alt of alts) {\n\t\t\tif (alt.length !== 1) continue;\n\t\t\tconst key = alt[0]?.key;\n\t\t\tconst scheme = authSchemes.find((s) => s.key === key);\n\t\t\tif (scheme && BEARER_COMPATIBLE_KINDS.has(scheme.kind)) {\n\t\t\t\treturn key;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn undefined;\n}\n"
6
- ],
7
- "mappings": ";AASA,IAAM,0BAA0B,IAAI,IAAI;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACD,CAAC;AAEM,SAAS,iBAAiB,CAChC,aACA,UACA,QACqB;AAAA,EAErB,IAAI,OAAO;AAAA,IAAgB,OAAO,OAAO;AAAA,EAEzC,IACC,OAAO,qBACP,YAAY,KAAK,CAAC,MAAM,EAAE,QAAQ,OAAO,iBAAiB,GACzD;AAAA,IACD,OAAO,OAAO;AAAA,EACf;AAAA,EAEA,IACC,OAAO,sBACP,YAAY,KAAK,CAAC,MAAM,EAAE,QAAQ,OAAO,kBAAkB,GAC1D;AAAA,IACD,OAAO,OAAO;AAAA,EACf;AAAA,EAGA,MAAM,OAAO,SAAS;AAAA,EACtB,IAAI,KAAK,WAAW,KAAK,KAAK,IAAI,WAAW;AAAA,IAAG,OAAO,KAAK,GAAG,IAAI;AAAA,EAGnE,IAAI,YAAY,WAAW;AAAA,IAAG,OAAO,YAAY,IAAI;AAAA,EAIrD,IAAI,OAAO,kBAAkB,KAAK,SAAS,GAAG;AAAA,IAC7C,WAAW,OAAO,MAAM;AAAA,MACvB,IAAI,IAAI,WAAW;AAAA,QAAG;AAAA,MACtB,MAAM,MAAM,IAAI,IAAI;AAAA,MACpB,MAAM,SAAS,YAAY,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG;AAAA,MACpD,IAAI,UAAU,wBAAwB,IAAI,OAAO,IAAI,GAAG;AAAA,QACvD,OAAO;AAAA,MACR;AAAA,IACD;AAAA,EACD;AAAA,EAEA;AAAA;",
8
- "debugId": "28B781E4ECFEED9064756E2164756E21",
9
- "names": []
10
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"body-flags.d.ts","sourceRoot":"","sources":["../../../../src/cli/runtime/body-flags.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,KAAK,UAAU,GAAG;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,UAAU,GAAG,SAAS,EAC9B,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,GACxB,WAAW,EAAE,CAWf;AAqDD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,QAAQ,EAAE,WAAW,EAAE,GACrB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczB;AAmCD;;;GAGG;AACH,wBAAgB,mBAAmB,CAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,QAAQ,EAAE,WAAW,EAAE,GACrB,MAAM,EAAE,CAcV"}