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
package/src/cli/schema.ts DELETED
@@ -1,76 +0,0 @@
1
- import type { AuthScheme } from "./auth-schemes.ts";
2
- import type { Capabilities } from "./capabilities.ts";
3
- import type { CommandModel } from "./command-model.ts";
4
- import type { PlannedOperation } from "./naming.ts";
5
- import type { ServerInfo } from "./server.ts";
6
- import type { LoadedSpec, NormalizedOperation } from "./types.ts";
7
-
8
- export type SchemaOutput = {
9
- schemaVersion: 1;
10
- openapi: {
11
- version: string;
12
- title?: string;
13
- infoVersion?: string;
14
- };
15
- spec: {
16
- id: string;
17
- fingerprint: string;
18
- source: LoadedSpec["source"];
19
- };
20
- capabilities: Capabilities;
21
- servers: ServerInfo[];
22
- authSchemes: AuthScheme[];
23
- operations: NormalizedOperation[];
24
- planned?: PlannedOperation[];
25
- commands?: CommandModel;
26
- commandsIndex?: import("./command-index.ts").CommandsIndex;
27
- };
28
-
29
- export type MinimalSchemaOutput = Pick<
30
- SchemaOutput,
31
- "schemaVersion" | "openapi" | "spec" | "capabilities" | "commands"
32
- >;
33
-
34
- export function buildSchemaOutput(
35
- loaded: LoadedSpec,
36
- operations: NormalizedOperation[],
37
- planned: PlannedOperation[] | undefined,
38
- servers: ServerInfo[],
39
- authSchemes: AuthScheme[],
40
- commands: CommandModel | undefined,
41
- commandsIndex: import("./command-index.ts").CommandsIndex | undefined,
42
- capabilities: Capabilities,
43
- ): SchemaOutput {
44
- return {
45
- schemaVersion: 1,
46
- openapi: {
47
- version: loaded.doc.openapi,
48
- title: loaded.doc.info?.title,
49
- infoVersion: loaded.doc.info?.version,
50
- },
51
- spec: {
52
- id: loaded.id,
53
- fingerprint: loaded.fingerprint,
54
- source: loaded.source,
55
- },
56
- capabilities,
57
- servers,
58
- authSchemes,
59
- operations,
60
- planned,
61
- commands,
62
- commandsIndex,
63
- };
64
- }
65
-
66
- export function toMinimalSchemaOutput(
67
- output: SchemaOutput,
68
- ): MinimalSchemaOutput {
69
- return {
70
- schemaVersion: output.schemaVersion,
71
- openapi: output.openapi,
72
- spec: output.spec,
73
- capabilities: output.capabilities,
74
- commands: output.commands,
75
- };
76
- }
package/src/cli/server.ts DELETED
@@ -1,88 +0,0 @@
1
- import { getSchemaEnumStrings } from "./schema-shape.ts";
2
- import type { OpenApiDoc } from "./types.ts";
3
-
4
- export type ServerVariable = {
5
- name: string;
6
- default?: string;
7
- enum?: string[];
8
- description?: string;
9
- };
10
-
11
- export type ServerInfo = {
12
- url: string;
13
- description?: string;
14
- variables: ServerVariable[];
15
- variableNames: string[];
16
- };
17
-
18
- type RawServerVariable = {
19
- default?: unknown;
20
- enum?: unknown;
21
- description?: unknown;
22
- };
23
-
24
- type RawServer = {
25
- url?: unknown;
26
- description?: unknown;
27
- variables?: unknown;
28
- };
29
-
30
- function extractVariableNames(url: string): string[] {
31
- const names: string[] = [];
32
- const re = /\{([^}]+)\}/g;
33
-
34
- while (true) {
35
- const match = re.exec(url);
36
- if (!match) break;
37
- names.push(match[1] ?? "");
38
- }
39
-
40
- return names.map((n) => n.trim()).filter(Boolean);
41
- }
42
-
43
- export function listServers(doc: OpenApiDoc): ServerInfo[] {
44
- const servers = doc.servers ?? [];
45
- const out: ServerInfo[] = [];
46
-
47
- for (const raw of servers) {
48
- const s = raw as RawServer;
49
- if (!s || typeof s !== "object") continue;
50
- if (typeof s.url !== "string") continue;
51
-
52
- const variableNames = extractVariableNames(s.url);
53
- const variables: ServerVariable[] = [];
54
-
55
- const rawVars =
56
- s.variables &&
57
- typeof s.variables === "object" &&
58
- !Array.isArray(s.variables)
59
- ? (s.variables as Record<string, RawServerVariable>)
60
- : {};
61
-
62
- for (const name of variableNames) {
63
- const v = rawVars[name];
64
- const def = v?.default;
65
- const desc = v?.description;
66
- variables.push({
67
- name,
68
- default: typeof def === "string" ? def : undefined,
69
- enum: getSchemaEnumStrings(v),
70
- description: typeof desc === "string" ? desc : undefined,
71
- });
72
- }
73
-
74
- out.push({
75
- url: s.url,
76
- description:
77
- typeof s.description === "string" ? s.description : undefined,
78
- variables,
79
- variableNames,
80
- });
81
- }
82
-
83
- return out;
84
- }
85
-
86
- export function getDefaultServerUrl(doc: OpenApiDoc): string | undefined {
87
- return listServers(doc)[0]?.url;
88
- }
@@ -1,12 +0,0 @@
1
- import { kebabCase } from "./strings.ts";
2
- import type { LoadedSpec } from "./types.ts";
3
-
4
- export function getSpecId(
5
- loaded: Pick<LoadedSpec, "doc" | "fingerprint">,
6
- ): string {
7
- const title = loaded.doc.info?.title;
8
- const fromTitle = title ? kebabCase(title) : "";
9
- if (fromTitle) return fromTitle;
10
-
11
- return loaded.fingerprint.slice(0, 12);
12
- }
@@ -1,58 +0,0 @@
1
- import SwaggerParser from "@apidevtools/swagger-parser";
2
-
3
- import { sha256Hex } from "./crypto.ts";
4
- import { parseYamlContent } from "./runtime/compat.ts";
5
- import { getSpecId } from "./spec-id.ts";
6
- import { stableStringify } from "./stable-json.ts";
7
- import type { LoadedSpec, OpenApiDoc, SpecSource } from "./types.ts";
8
-
9
- export type LoadSpecOptions = {
10
- spec?: string;
11
- embeddedSpecText?: string;
12
- };
13
-
14
- function isProbablyUrl(input: string): boolean {
15
- return /^https?:\/\//i.test(input);
16
- }
17
-
18
- function parseSpecText(text: string): unknown {
19
- const trimmed = text.trimStart();
20
- if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
21
- return JSON.parse(text);
22
- }
23
-
24
- return parseYamlContent(text);
25
- }
26
-
27
- export async function loadSpec(options: LoadSpecOptions): Promise<LoadedSpec> {
28
- const { spec, embeddedSpecText } = options;
29
-
30
- let source: SpecSource;
31
- let inputForParser: unknown;
32
-
33
- if (typeof embeddedSpecText === "string") {
34
- source = "embedded";
35
- inputForParser = parseSpecText(embeddedSpecText);
36
- } else if (spec) {
37
- source = isProbablyUrl(spec) ? "url" : "file";
38
- inputForParser = spec;
39
- } else {
40
- throw new Error(
41
- "Missing spec. Provide --spec <url|path> or build with an embedded spec.",
42
- );
43
- }
44
-
45
- const doc = (await SwaggerParser.dereference(
46
- // biome-ignore lint/suspicious/noExplicitAny: unknown
47
- inputForParser as any,
48
- )) as OpenApiDoc;
49
-
50
- if (!doc || typeof doc !== "object" || typeof doc.openapi !== "string") {
51
- throw new Error("Loaded spec is not a valid OpenAPI document");
52
- }
53
-
54
- const fingerprint = await sha256Hex(stableStringify(doc));
55
- const id = getSpecId({ doc, fingerprint });
56
-
57
- return { source, id, fingerprint, doc };
58
- }
@@ -1,35 +0,0 @@
1
- export function stableStringify(
2
- value: unknown,
3
- options?: { space?: number },
4
- ): string {
5
- const visiting = new WeakSet<object>();
6
- return JSON.stringify(sort(value, visiting), null, options?.space);
7
- }
8
-
9
- function sort(value: unknown, visiting: WeakSet<object>): unknown {
10
- if (value === null) return null;
11
-
12
- if (Array.isArray(value)) {
13
- if (visiting.has(value)) return { __specli_circular: true };
14
- visiting.add(value);
15
- const out = value.map((v) => sort(v, visiting));
16
- visiting.delete(value);
17
- return out;
18
- }
19
-
20
- if (typeof value === "object") {
21
- if (visiting.has(value)) return { __specli_circular: true };
22
- visiting.add(value);
23
-
24
- const obj = value as Record<string, unknown>;
25
- const out: Record<string, unknown> = {};
26
- for (const key of Object.keys(obj).sort()) {
27
- out[key] = sort(obj[key], visiting);
28
- }
29
-
30
- visiting.delete(value);
31
- return out;
32
- }
33
-
34
- return value;
35
- }
@@ -1,21 +0,0 @@
1
- export function kebabCase(input: string): string {
2
- const trimmed = input.trim();
3
- if (!trimmed) return "";
4
-
5
- // Convert spaces/underscores/dots to dashes, split camelCase.
6
- return trimmed
7
- .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
8
- .replace(/[\s_.:/]+/g, "-")
9
- .replace(/[^a-zA-Z0-9-]/g, "-")
10
- .replace(/-+/g, "-")
11
- .replace(/^-|-$/g, "")
12
- .toLowerCase();
13
- }
14
-
15
- export function titleCase(input: string): string {
16
- return input
17
- .split(/\s+/g)
18
- .filter(Boolean)
19
- .map((w) => w[0]?.toUpperCase() + w.slice(1))
20
- .join(" ");
21
- }
package/src/cli/types.ts DELETED
@@ -1,59 +0,0 @@
1
- export type SpecSource = "embedded" | "file" | "url";
2
-
3
- export type SecurityRequirement = Record<string, string[]>;
4
-
5
- export type OpenApiDoc = {
6
- openapi: string;
7
- info?: {
8
- title?: string;
9
- version?: string;
10
- };
11
- servers?: Array<{ url: string; description?: string; variables?: unknown }>;
12
- security?: SecurityRequirement[];
13
- components?: {
14
- securitySchemes?: Record<string, unknown>;
15
- };
16
- paths?: Record<string, unknown>;
17
- };
18
-
19
- export type NormalizedParameter = {
20
- in: "path" | "query" | "header" | "cookie";
21
- name: string;
22
- required: boolean;
23
- description?: string;
24
- schema?: unknown;
25
- };
26
-
27
- // Minimal JSON Schema-like shape for validation and flag expansion.
28
- export type JsonSchema = Record<string, unknown>;
29
-
30
- export function isJsonSchema(value: unknown): value is JsonSchema {
31
- return Boolean(value) && typeof value === "object" && !Array.isArray(value);
32
- }
33
-
34
- export type NormalizedRequestBody = {
35
- required: boolean;
36
- contentTypes: string[];
37
- schemasByContentType: Record<string, unknown | undefined>;
38
- };
39
-
40
- export type NormalizedOperation = {
41
- key: string;
42
- method: string;
43
- path: string;
44
- operationId?: string;
45
- tags: string[];
46
- summary?: string;
47
- description?: string;
48
- deprecated?: boolean;
49
- security?: SecurityRequirement[];
50
- parameters: NormalizedParameter[];
51
- requestBody?: NormalizedRequestBody;
52
- };
53
-
54
- export type LoadedSpec = {
55
- source: SpecSource;
56
- id: string;
57
- fingerprint: string;
58
- doc: OpenApiDoc;
59
- };
package/src/macros/env.ts DELETED
@@ -1,21 +0,0 @@
1
- /**
2
- * Bun macro: reads an environment variable at bundle-time.
3
- * Returns undefined if the env var is not set.
4
- */
5
- export function env(name: string): string | undefined {
6
- if (!name) throw new Error("env macro: missing variable name");
7
- return process.env[name];
8
- }
9
-
10
- /**
11
- * Bun macro: reads a required environment variable at bundle-time.
12
- * Throws if the env var is not set.
13
- */
14
- export function envRequired(name: string): string {
15
- if (!name) throw new Error("envRequired macro: missing variable name");
16
- const value = process.env[name];
17
- if (value === undefined) {
18
- throw new Error(`Missing required env var: ${name}`);
19
- }
20
- return value;
21
- }
@@ -1,17 +0,0 @@
1
- /**
2
- * Bun macro: loads an OpenAPI spec from a URL or file path at bundle-time.
3
- * The spec text is inlined into the bundle.
4
- */
5
- export async function loadSpec(spec: string): Promise<string> {
6
- if (!spec) throw new Error("loadSpec macro: missing spec path/URL");
7
-
8
- if (/^https?:\/\//i.test(spec)) {
9
- const res = await fetch(spec);
10
- if (!res.ok) {
11
- throw new Error(`Failed to fetch spec: ${res.status} ${res.statusText}`);
12
- }
13
- return await res.text();
14
- }
15
-
16
- return await Bun.file(spec).text();
17
- }