pray-cli 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (374) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +69 -0
  4. package/SECURITY.md +28 -0
  5. package/bin/pray.js +5 -0
  6. package/dist/archive/praypkg.d.ts +6 -0
  7. package/dist/archive/praypkg.d.ts.map +1 -0
  8. package/dist/archive/praypkg.js +67 -0
  9. package/dist/archive/praypkg.js.map +1 -0
  10. package/dist/auth/login.d.ts +11 -0
  11. package/dist/auth/login.d.ts.map +1 -0
  12. package/dist/auth/login.js +84 -0
  13. package/dist/auth/login.js.map +1 -0
  14. package/dist/auth/passkey.d.ts +3 -0
  15. package/dist/auth/passkey.d.ts.map +1 -0
  16. package/dist/auth/passkey.js +48 -0
  17. package/dist/auth/passkey.js.map +1 -0
  18. package/dist/auth/session.d.ts +11 -0
  19. package/dist/auth/session.d.ts.map +1 -0
  20. package/dist/auth/session.js +38 -0
  21. package/dist/auth/session.js.map +1 -0
  22. package/dist/auth/ssh-agent.d.ts +3 -0
  23. package/dist/auth/ssh-agent.d.ts.map +1 -0
  24. package/dist/auth/ssh-agent.js +135 -0
  25. package/dist/auth/ssh-agent.js.map +1 -0
  26. package/dist/cli/commands/distribution.d.ts +5 -0
  27. package/dist/cli/commands/distribution.d.ts.map +1 -0
  28. package/dist/cli/commands/distribution.js +134 -0
  29. package/dist/cli/commands/distribution.js.map +1 -0
  30. package/dist/cli/commands/init.d.ts +3 -0
  31. package/dist/cli/commands/init.d.ts.map +1 -0
  32. package/dist/cli/commands/init.js +44 -0
  33. package/dist/cli/commands/init.js.map +1 -0
  34. package/dist/cli/commands/inspect.d.ts +7 -0
  35. package/dist/cli/commands/inspect.d.ts.map +1 -0
  36. package/dist/cli/commands/inspect.js +98 -0
  37. package/dist/cli/commands/inspect.js.map +1 -0
  38. package/dist/cli/commands/packages.d.ts +4 -0
  39. package/dist/cli/commands/packages.d.ts.map +1 -0
  40. package/dist/cli/commands/packages.js +62 -0
  41. package/dist/cli/commands/packages.js.map +1 -0
  42. package/dist/cli/commands/plan.d.ts +2 -0
  43. package/dist/cli/commands/plan.d.ts.map +1 -0
  44. package/dist/cli/commands/plan.js +55 -0
  45. package/dist/cli/commands/plan.js.map +1 -0
  46. package/dist/cli/commands/update-core.d.ts +16 -0
  47. package/dist/cli/commands/update-core.d.ts.map +1 -0
  48. package/dist/cli/commands/update-core.js +108 -0
  49. package/dist/cli/commands/update-core.js.map +1 -0
  50. package/dist/cli/commands/update-latest.d.ts +2 -0
  51. package/dist/cli/commands/update-latest.d.ts.map +1 -0
  52. package/dist/cli/commands/update-latest.js +68 -0
  53. package/dist/cli/commands/update-latest.js.map +1 -0
  54. package/dist/cli/commands/update-report.d.ts +23 -0
  55. package/dist/cli/commands/update-report.d.ts.map +1 -0
  56. package/dist/cli/commands/update-report.js +113 -0
  57. package/dist/cli/commands/update-report.js.map +1 -0
  58. package/dist/cli/commands/update.d.ts +11 -0
  59. package/dist/cli/commands/update.d.ts.map +1 -0
  60. package/dist/cli/commands/update.js +65 -0
  61. package/dist/cli/commands/update.js.map +1 -0
  62. package/dist/cli/commands/workspace.d.ts +3 -0
  63. package/dist/cli/commands/workspace.d.ts.map +1 -0
  64. package/dist/cli/commands/workspace.js +63 -0
  65. package/dist/cli/commands/workspace.js.map +1 -0
  66. package/dist/cli/help.d.ts +6 -0
  67. package/dist/cli/help.d.ts.map +1 -0
  68. package/dist/cli/help.js +164 -0
  69. package/dist/cli/help.js.map +1 -0
  70. package/dist/cli/invocation.d.ts +10 -0
  71. package/dist/cli/invocation.d.ts.map +1 -0
  72. package/dist/cli/invocation.js +127 -0
  73. package/dist/cli/invocation.js.map +1 -0
  74. package/dist/cli/main.d.ts +2 -0
  75. package/dist/cli/main.d.ts.map +1 -0
  76. package/dist/cli/main.js +199 -0
  77. package/dist/cli/main.js.map +1 -0
  78. package/dist/cli/materialize.d.ts +10 -0
  79. package/dist/cli/materialize.d.ts.map +1 -0
  80. package/dist/cli/materialize.js +59 -0
  81. package/dist/cli/materialize.js.map +1 -0
  82. package/dist/cli/suggest.d.ts +4 -0
  83. package/dist/cli/suggest.d.ts.map +1 -0
  84. package/dist/cli/suggest.js +88 -0
  85. package/dist/cli/suggest.js.map +1 -0
  86. package/dist/cli/upgrade.d.ts +2 -0
  87. package/dist/cli/upgrade.d.ts.map +1 -0
  88. package/dist/cli/upgrade.js +15 -0
  89. package/dist/cli/upgrade.js.map +1 -0
  90. package/dist/confess/index.d.ts +11 -0
  91. package/dist/confess/index.d.ts.map +1 -0
  92. package/dist/confess/index.js +51 -0
  93. package/dist/confess/index.js.map +1 -0
  94. package/dist/constraint.d.ts +8 -0
  95. package/dist/constraint.d.ts.map +1 -0
  96. package/dist/constraint.js +97 -0
  97. package/dist/constraint.js.map +1 -0
  98. package/dist/domain/types.d.ts +8 -0
  99. package/dist/domain/types.d.ts.map +1 -0
  100. package/dist/domain/types.js +2 -0
  101. package/dist/domain/types.js.map +1 -0
  102. package/dist/environment.d.ts +8 -0
  103. package/dist/environment.d.ts.map +1 -0
  104. package/dist/environment.js +42 -0
  105. package/dist/environment.js.map +1 -0
  106. package/dist/errors.d.ts +18 -0
  107. package/dist/errors.d.ts.map +1 -0
  108. package/dist/errors.js +67 -0
  109. package/dist/errors.js.map +1 -0
  110. package/dist/git/sources.d.ts +14 -0
  111. package/dist/git/sources.d.ts.map +1 -0
  112. package/dist/git/sources.js +225 -0
  113. package/dist/git/sources.js.map +1 -0
  114. package/dist/hashing.d.ts +7 -0
  115. package/dist/hashing.d.ts.map +1 -0
  116. package/dist/hashing.js +43 -0
  117. package/dist/hashing.js.map +1 -0
  118. package/dist/http/client.d.ts +9 -0
  119. package/dist/http/client.d.ts.map +1 -0
  120. package/dist/http/client.js +51 -0
  121. package/dist/http/client.js.map +1 -0
  122. package/dist/index.d.ts +25 -0
  123. package/dist/index.d.ts.map +1 -0
  124. package/dist/index.js +19 -0
  125. package/dist/index.js.map +1 -0
  126. package/dist/literal/call-parser.d.ts +12 -0
  127. package/dist/literal/call-parser.d.ts.map +1 -0
  128. package/dist/literal/call-parser.js +75 -0
  129. package/dist/literal/call-parser.js.map +1 -0
  130. package/dist/literal/lines.d.ts +3 -0
  131. package/dist/literal/lines.d.ts.map +1 -0
  132. package/dist/literal/lines.js +34 -0
  133. package/dist/literal/lines.js.map +1 -0
  134. package/dist/literal/parser.d.ts +5 -0
  135. package/dist/literal/parser.d.ts.map +1 -0
  136. package/dist/literal/parser.js +269 -0
  137. package/dist/literal/parser.js.map +1 -0
  138. package/dist/literal/split.d.ts +4 -0
  139. package/dist/literal/split.d.ts.map +1 -0
  140. package/dist/literal/split.js +110 -0
  141. package/dist/literal/split.js.map +1 -0
  142. package/dist/literal/statement-surface.d.ts +11 -0
  143. package/dist/literal/statement-surface.d.ts.map +1 -0
  144. package/dist/literal/statement-surface.js +320 -0
  145. package/dist/literal/statement-surface.js.map +1 -0
  146. package/dist/literal/statements.d.ts +8 -0
  147. package/dist/literal/statements.d.ts.map +1 -0
  148. package/dist/literal/statements.js +49 -0
  149. package/dist/literal/statements.js.map +1 -0
  150. package/dist/literal/types.d.ts +27 -0
  151. package/dist/literal/types.d.ts.map +1 -0
  152. package/dist/literal/types.js +19 -0
  153. package/dist/literal/types.js.map +1 -0
  154. package/dist/lockfile/index.d.ts +24 -0
  155. package/dist/lockfile/index.d.ts.map +1 -0
  156. package/dist/lockfile/index.js +100 -0
  157. package/dist/lockfile/index.js.map +1 -0
  158. package/dist/lockfile/parse.d.ts +3 -0
  159. package/dist/lockfile/parse.d.ts.map +1 -0
  160. package/dist/lockfile/parse.js +94 -0
  161. package/dist/lockfile/parse.js.map +1 -0
  162. package/dist/lockfile/paths.d.ts +8 -0
  163. package/dist/lockfile/paths.d.ts.map +1 -0
  164. package/dist/lockfile/paths.js +66 -0
  165. package/dist/lockfile/paths.js.map +1 -0
  166. package/dist/lockfile/serialize.d.ts +3 -0
  167. package/dist/lockfile/serialize.d.ts.map +1 -0
  168. package/dist/lockfile/serialize.js +118 -0
  169. package/dist/lockfile/serialize.js.map +1 -0
  170. package/dist/lockfile/types.d.ts +49 -0
  171. package/dist/lockfile/types.d.ts.map +1 -0
  172. package/dist/lockfile/types.js +16 -0
  173. package/dist/lockfile/types.js.map +1 -0
  174. package/dist/manifest/deprecation.d.ts +7 -0
  175. package/dist/manifest/deprecation.d.ts.map +1 -0
  176. package/dist/manifest/deprecation.js +35 -0
  177. package/dist/manifest/deprecation.js.map +1 -0
  178. package/dist/manifest/destination.d.ts +19 -0
  179. package/dist/manifest/destination.d.ts.map +1 -0
  180. package/dist/manifest/destination.js +179 -0
  181. package/dist/manifest/destination.js.map +1 -0
  182. package/dist/manifest/edit.d.ts +9 -0
  183. package/dist/manifest/edit.d.ts.map +1 -0
  184. package/dist/manifest/edit.js +56 -0
  185. package/dist/manifest/edit.js.map +1 -0
  186. package/dist/manifest/format-manifest.d.ts +14 -0
  187. package/dist/manifest/format-manifest.d.ts.map +1 -0
  188. package/dist/manifest/format-manifest.js +274 -0
  189. package/dist/manifest/format-manifest.js.map +1 -0
  190. package/dist/manifest/format-serialize.d.ts +4 -0
  191. package/dist/manifest/format-serialize.d.ts.map +1 -0
  192. package/dist/manifest/format-serialize.js +172 -0
  193. package/dist/manifest/format-serialize.js.map +1 -0
  194. package/dist/manifest/index.d.ts +10 -0
  195. package/dist/manifest/index.d.ts.map +1 -0
  196. package/dist/manifest/index.js +33 -0
  197. package/dist/manifest/index.js.map +1 -0
  198. package/dist/manifest/package-declaration.d.ts +4 -0
  199. package/dist/manifest/package-declaration.d.ts.map +1 -0
  200. package/dist/manifest/package-declaration.js +80 -0
  201. package/dist/manifest/package-declaration.js.map +1 -0
  202. package/dist/manifest/parse-statements.d.ts +15 -0
  203. package/dist/manifest/parse-statements.d.ts.map +1 -0
  204. package/dist/manifest/parse-statements.js +216 -0
  205. package/dist/manifest/parse-statements.js.map +1 -0
  206. package/dist/manifest/parser.d.ts +3 -0
  207. package/dist/manifest/parser.d.ts.map +1 -0
  208. package/dist/manifest/parser.js +382 -0
  209. package/dist/manifest/parser.js.map +1 -0
  210. package/dist/manifest/types.d.ts +78 -0
  211. package/dist/manifest/types.d.ts.map +1 -0
  212. package/dist/manifest/types.js +84 -0
  213. package/dist/manifest/types.js.map +1 -0
  214. package/dist/package-spec/discovery.d.ts +2 -0
  215. package/dist/package-spec/discovery.d.ts.map +1 -0
  216. package/dist/package-spec/discovery.js +21 -0
  217. package/dist/package-spec/discovery.js.map +1 -0
  218. package/dist/package-spec/index.d.ts +5 -0
  219. package/dist/package-spec/index.d.ts.map +1 -0
  220. package/dist/package-spec/index.js +5 -0
  221. package/dist/package-spec/index.js.map +1 -0
  222. package/dist/package-spec/parse-maps.d.ts +8 -0
  223. package/dist/package-spec/parse-maps.d.ts.map +1 -0
  224. package/dist/package-spec/parse-maps.js +127 -0
  225. package/dist/package-spec/parse-maps.js.map +1 -0
  226. package/dist/package-spec/parser.d.ts +3 -0
  227. package/dist/package-spec/parser.d.ts.map +1 -0
  228. package/dist/package-spec/parser.js +111 -0
  229. package/dist/package-spec/parser.js.map +1 -0
  230. package/dist/package-spec/tree-hash.d.ts +4 -0
  231. package/dist/package-spec/tree-hash.d.ts.map +1 -0
  232. package/dist/package-spec/tree-hash.js +29 -0
  233. package/dist/package-spec/tree-hash.js.map +1 -0
  234. package/dist/package-spec/types.d.ts +44 -0
  235. package/dist/package-spec/types.d.ts.map +1 -0
  236. package/dist/package-spec/types.js +12 -0
  237. package/dist/package-spec/types.js.map +1 -0
  238. package/dist/project-context/dotenv.d.ts +3 -0
  239. package/dist/project-context/dotenv.d.ts.map +1 -0
  240. package/dist/project-context/dotenv.js +49 -0
  241. package/dist/project-context/dotenv.js.map +1 -0
  242. package/dist/project-context/index.d.ts +10 -0
  243. package/dist/project-context/index.d.ts.map +1 -0
  244. package/dist/project-context/index.js +62 -0
  245. package/dist/project-context/index.js.map +1 -0
  246. package/dist/project-context/runtime.d.ts +4 -0
  247. package/dist/project-context/runtime.d.ts.map +1 -0
  248. package/dist/project-context/runtime.js +8 -0
  249. package/dist/project-context/runtime.js.map +1 -0
  250. package/dist/project-context/types.d.ts +11 -0
  251. package/dist/project-context/types.d.ts.map +1 -0
  252. package/dist/project-context/types.js +2 -0
  253. package/dist/project-context/types.js.map +1 -0
  254. package/dist/publish/index.d.ts +6 -0
  255. package/dist/publish/index.d.ts.map +1 -0
  256. package/dist/publish/index.js +133 -0
  257. package/dist/publish/index.js.map +1 -0
  258. package/dist/registry/index.d.ts +17 -0
  259. package/dist/registry/index.d.ts.map +1 -0
  260. package/dist/registry/index.js +223 -0
  261. package/dist/registry/index.js.map +1 -0
  262. package/dist/registry/types.d.ts +27 -0
  263. package/dist/registry/types.d.ts.map +1 -0
  264. package/dist/registry/types.js +2 -0
  265. package/dist/registry/types.js.map +1 -0
  266. package/dist/render/content-builder.d.ts +9 -0
  267. package/dist/render/content-builder.d.ts.map +1 -0
  268. package/dist/render/content-builder.js +31 -0
  269. package/dist/render/content-builder.js.map +1 -0
  270. package/dist/render/header.d.ts +4 -0
  271. package/dist/render/header.d.ts.map +1 -0
  272. package/dist/render/header.js +15 -0
  273. package/dist/render/header.js.map +1 -0
  274. package/dist/render/legacy.d.ts +5 -0
  275. package/dist/render/legacy.d.ts.map +1 -0
  276. package/dist/render/legacy.js +53 -0
  277. package/dist/render/legacy.js.map +1 -0
  278. package/dist/render/managed-export.d.ts +7 -0
  279. package/dist/render/managed-export.d.ts.map +1 -0
  280. package/dist/render/managed-export.js +33 -0
  281. package/dist/render/managed-export.js.map +1 -0
  282. package/dist/render/project.d.ts +8 -0
  283. package/dist/render/project.d.ts.map +1 -0
  284. package/dist/render/project.js +35 -0
  285. package/dist/render/project.js.map +1 -0
  286. package/dist/render/provisioned.d.ts +9 -0
  287. package/dist/render/provisioned.d.ts.map +1 -0
  288. package/dist/render/provisioned.js +191 -0
  289. package/dist/render/provisioned.js.map +1 -0
  290. package/dist/render/scoped.d.ts +5 -0
  291. package/dist/render/scoped.d.ts.map +1 -0
  292. package/dist/render/scoped.js +50 -0
  293. package/dist/render/scoped.js.map +1 -0
  294. package/dist/render/types.d.ts +7 -0
  295. package/dist/render/types.d.ts.map +1 -0
  296. package/dist/render/types.js +2 -0
  297. package/dist/render/types.js.map +1 -0
  298. package/dist/resolve/context.d.ts +11 -0
  299. package/dist/resolve/context.d.ts.map +1 -0
  300. package/dist/resolve/context.js +16 -0
  301. package/dist/resolve/context.js.map +1 -0
  302. package/dist/resolve/package-root.d.ts +13 -0
  303. package/dist/resolve/package-root.d.ts.map +1 -0
  304. package/dist/resolve/package-root.js +86 -0
  305. package/dist/resolve/package-root.js.map +1 -0
  306. package/dist/resolve/project.d.ts +8 -0
  307. package/dist/resolve/project.d.ts.map +1 -0
  308. package/dist/resolve/project.js +261 -0
  309. package/dist/resolve/project.js.map +1 -0
  310. package/dist/resolve/types.d.ts +36 -0
  311. package/dist/resolve/types.d.ts.map +1 -0
  312. package/dist/resolve/types.js +2 -0
  313. package/dist/resolve/types.js.map +1 -0
  314. package/dist/serve/index.d.ts +7 -0
  315. package/dist/serve/index.d.ts.map +1 -0
  316. package/dist/serve/index.js +88 -0
  317. package/dist/serve/index.js.map +1 -0
  318. package/dist/substitute.d.ts +3 -0
  319. package/dist/substitute.d.ts.map +1 -0
  320. package/dist/substitute.js +38 -0
  321. package/dist/substitute.js.map +1 -0
  322. package/dist/sync/index.d.ts +6 -0
  323. package/dist/sync/index.d.ts.map +1 -0
  324. package/dist/sync/index.js +74 -0
  325. package/dist/sync/index.js.map +1 -0
  326. package/dist/terminal.d.ts +4 -0
  327. package/dist/terminal.d.ts.map +1 -0
  328. package/dist/terminal.js +26 -0
  329. package/dist/terminal.js.map +1 -0
  330. package/dist/tree/index.d.ts +4 -0
  331. package/dist/tree/index.d.ts.map +1 -0
  332. package/dist/tree/index.js +40 -0
  333. package/dist/tree/index.js.map +1 -0
  334. package/dist/trust/import-registry.d.ts +6 -0
  335. package/dist/trust/import-registry.d.ts.map +1 -0
  336. package/dist/trust/import-registry.js +65 -0
  337. package/dist/trust/import-registry.js.map +1 -0
  338. package/dist/trust/import-repo.d.ts +2 -0
  339. package/dist/trust/import-repo.d.ts.map +1 -0
  340. package/dist/trust/import-repo.js +50 -0
  341. package/dist/trust/import-repo.js.map +1 -0
  342. package/dist/trust/index.d.ts +11 -0
  343. package/dist/trust/index.d.ts.map +1 -0
  344. package/dist/trust/index.js +148 -0
  345. package/dist/trust/index.js.map +1 -0
  346. package/dist/trust/parse.d.ts +3 -0
  347. package/dist/trust/parse.d.ts.map +1 -0
  348. package/dist/trust/parse.js +43 -0
  349. package/dist/trust/parse.js.map +1 -0
  350. package/dist/trust/policy-helpers.d.ts +8 -0
  351. package/dist/trust/policy-helpers.d.ts.map +1 -0
  352. package/dist/trust/policy-helpers.js +36 -0
  353. package/dist/trust/policy-helpers.js.map +1 -0
  354. package/dist/trust/store.d.ts +7 -0
  355. package/dist/trust/store.d.ts.map +1 -0
  356. package/dist/trust/store.js +40 -0
  357. package/dist/trust/store.js.map +1 -0
  358. package/dist/trust/types.d.ts +13 -0
  359. package/dist/trust/types.d.ts.map +1 -0
  360. package/dist/trust/types.js +2 -0
  361. package/dist/trust/types.js.map +1 -0
  362. package/dist/validation.d.ts +8 -0
  363. package/dist/validation.d.ts.map +1 -0
  364. package/dist/validation.js +41 -0
  365. package/dist/validation.js.map +1 -0
  366. package/dist/vendor/index.d.ts +4 -0
  367. package/dist/vendor/index.d.ts.map +1 -0
  368. package/dist/vendor/index.js +31 -0
  369. package/dist/vendor/index.js.map +1 -0
  370. package/dist/verify/project.d.ts +14 -0
  371. package/dist/verify/project.d.ts.map +1 -0
  372. package/dist/verify/project.js +240 -0
  373. package/dist/verify/project.js.map +1 -0
  374. package/package.json +75 -0
@@ -0,0 +1,8 @@
1
+ import { type Range, type SemVer } from "semver";
2
+ export declare function normalizeVersionConstraint(constraint: string): string;
3
+ export declare function versionSatisfies(version: string, constraint: string): boolean;
4
+ export declare function pessimisticConstraintForVersion(version: string): string;
5
+ export declare function latestConstraintForPackage(currentConstraint: string, latestVersion: string): string;
6
+ export declare function versionIsGreaterThan(left: string, right: string): boolean;
7
+ export type { Range, SemVer };
8
+ //# sourceMappingURL=constraint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraint.d.ts","sourceRoot":"","sources":["../src/constraint.ts"],"names":[],"mappings":"AAAA,OAAe,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGzD,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAoBrE;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAiB7E;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASvE;AAED,wBAAgB,0BAA0B,CACxC,iBAAiB,EAAE,MAAM,EACzB,aAAa,EAAE,MAAM,GACpB,MAAM,CAmBR;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzE;AAgCD,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,97 @@
1
+ import semver from "semver";
2
+ import { PrayError } from "./errors.js";
3
+ export function normalizeVersionConstraint(constraint) {
4
+ const trimmed = constraint.trim();
5
+ if (trimmed.length === 0 || trimmed === "*") {
6
+ return trimmed;
7
+ }
8
+ if (trimmed.startsWith("~>") ||
9
+ trimmed.startsWith("~") ||
10
+ trimmed.startsWith("^") ||
11
+ trimmed.startsWith("=") ||
12
+ trimmed.startsWith(">") ||
13
+ trimmed.startsWith("<") ||
14
+ trimmed.includes("*")) {
15
+ return trimmed;
16
+ }
17
+ if (semver.valid(trimmed)) {
18
+ return `=${trimmed}`;
19
+ }
20
+ return trimmed;
21
+ }
22
+ export function versionSatisfies(version, constraint) {
23
+ const normalized = normalizeVersionConstraint(constraint);
24
+ if (normalized.length === 0 || normalized === "*") {
25
+ return true;
26
+ }
27
+ const parsedVersion = semver.parse(version);
28
+ if (!parsedVersion) {
29
+ throw PrayError.resolution(`invalid version ${version}`);
30
+ }
31
+ const requirement = normalized.trimStart().startsWith("~>")
32
+ ? rubyPessimisticToSemver(normalized)
33
+ : normalized.trim();
34
+ const range = semver.validRange(requirement);
35
+ if (!range) {
36
+ throw PrayError.resolution(`invalid constraint ${constraint}`);
37
+ }
38
+ return semver.satisfies(parsedVersion, range);
39
+ }
40
+ export function pessimisticConstraintForVersion(version) {
41
+ const parsed = semver.parse(version);
42
+ if (!parsed) {
43
+ throw PrayError.resolution(`invalid version ${version}`);
44
+ }
45
+ if (parsed.minor === 0 && parsed.patch === 0) {
46
+ return `~> ${parsed.major}.0`;
47
+ }
48
+ return `~> ${parsed.major}.${parsed.minor}`;
49
+ }
50
+ export function latestConstraintForPackage(currentConstraint, latestVersion) {
51
+ const normalized = normalizeVersionConstraint(currentConstraint);
52
+ if (normalized === "*") {
53
+ return "*";
54
+ }
55
+ if (normalized.startsWith("~")) {
56
+ return pessimisticConstraintForVersion(latestVersion);
57
+ }
58
+ if (normalized.startsWith("^")) {
59
+ const parsed = semver.parse(latestVersion);
60
+ if (!parsed) {
61
+ throw PrayError.resolution(`invalid version ${latestVersion}`);
62
+ }
63
+ return `^${parsed.major}.${parsed.minor}`;
64
+ }
65
+ if (normalized.startsWith("=") || semver.valid(currentConstraint.trim())) {
66
+ return `=${latestVersion}`;
67
+ }
68
+ return pessimisticConstraintForVersion(latestVersion);
69
+ }
70
+ export function versionIsGreaterThan(left, right) {
71
+ return semver.gt(left, right);
72
+ }
73
+ function rubyPessimisticToSemver(constraint) {
74
+ const text = constraint.trim().replace(/^~>\s*/, "");
75
+ const parts = text.split(".");
76
+ if (parts.length === 0 || parts.length > 3) {
77
+ throw PrayError.resolution(`unsupported Ruby pessimistic constraint: ${constraint}`);
78
+ }
79
+ const numbers = [0, 0, 0];
80
+ for (let index = 0; index < parts.length; index += 1) {
81
+ const parsed = Number.parseInt(parts[index], 10);
82
+ if (Number.isNaN(parsed)) {
83
+ throw PrayError.resolution(`invalid constraint segment ${parts[index]}`);
84
+ }
85
+ numbers[index] = parsed;
86
+ }
87
+ const first = numbers[0];
88
+ const second = numbers[1];
89
+ const third = numbers[2];
90
+ if (first === undefined || second === undefined || third === undefined) {
91
+ throw PrayError.resolution(`invalid constraint segment count in ${constraint}`);
92
+ }
93
+ const lower = `${first}.${second}.${third}`;
94
+ const upper = parts.length === 1 ? `${first + 1}.0.0` : `${first}.${second + 1}.0`;
95
+ return `>=${lower} <${upper}`;
96
+ }
97
+ //# sourceMappingURL=constraint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraint.js","sourceRoot":"","sources":["../src/constraint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type SourceKind = "path" | "git" | "registry" | "pray_ssh" | "static index";
2
+ export type RenderMode = "managed" | "verbatim";
3
+ export type RenderConflict = "fail" | "warn" | "merge";
4
+ export type RenderChurn = "minimal" | "full";
5
+ export type LineEndings = "lf" | "crlf" | "native";
6
+ export type LocalPosition = "before" | "after";
7
+ export type PackageExportKind = "fragment" | "folder" | "skill" | "file";
8
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/domain/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,KAAK,GACL,UAAU,GACV,UAAU,GACV,cAAc,CAAC;AAEnB,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7C,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/C,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/domain/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { Manifest, ManifestPackage } from "./manifest/types.js";
2
+ import type { ResolvedPackage } from "./resolve/types.js";
3
+ export declare function packageMatchesEnvironment(groups: string[], environment: string | undefined): boolean;
4
+ export declare function collectGroupNames(manifest: Manifest): Set<string>;
5
+ export declare function validateEnvironment(manifest: Manifest, environment: string | undefined): void;
6
+ export declare function packagesForRender(packages: ResolvedPackage[], environment: string | undefined): ResolvedPackage[];
7
+ export declare function shouldRenderPackage(declaration: ManifestPackage, environment: string | undefined): boolean;
8
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,OAAO,CAQT;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAQjE;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,IAAI,CAmBN;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,eAAe,EAAE,EAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,eAAe,EAAE,CAInB;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,eAAe,EAC5B,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,OAAO,CAET"}
@@ -0,0 +1,42 @@
1
+ import { PrayError } from "./errors.js";
2
+ export function packageMatchesEnvironment(groups, environment) {
3
+ if (groups.length === 0) {
4
+ return true;
5
+ }
6
+ if (environment === undefined) {
7
+ return false;
8
+ }
9
+ return groups.includes(environment);
10
+ }
11
+ export function collectGroupNames(manifest) {
12
+ const names = new Set();
13
+ for (const packageEntry of manifest.packages) {
14
+ for (const group of packageEntry.groups) {
15
+ names.add(group);
16
+ }
17
+ }
18
+ return names;
19
+ }
20
+ export function validateEnvironment(manifest, environment) {
21
+ if (environment === undefined) {
22
+ return;
23
+ }
24
+ if (environment.length === 0) {
25
+ throw PrayError.resolution("environment name cannot be empty");
26
+ }
27
+ const knownGroups = collectGroupNames(manifest);
28
+ if (knownGroups.size === 0) {
29
+ throw PrayError.resolution(`unknown environment ${environment}; Prayfile defines no groups`);
30
+ }
31
+ if (!knownGroups.has(environment)) {
32
+ const names = [...knownGroups].sort();
33
+ throw PrayError.resolution(`unknown environment ${environment}; available groups are ${names.join(", ")}`);
34
+ }
35
+ }
36
+ export function packagesForRender(packages, environment) {
37
+ return packages.filter((packageEntry) => packageMatchesEnvironment(packageEntry.declaration.groups, environment));
38
+ }
39
+ export function shouldRenderPackage(declaration, environment) {
40
+ return packageMatchesEnvironment(declaration.groups, environment);
41
+ }
42
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxC,MAAM,UAAU,yBAAyB,CACvC,MAAgB,EAChB,WAA+B;IAE/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,YAAY,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;YACxC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAkB,EAClB,WAA+B;IAE/B,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,SAAS,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,WAAW,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,CAAC,UAAU,CACxB,uBAAuB,WAAW,8BAA8B,CACjE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,SAAS,CAAC,UAAU,CACxB,uBAAuB,WAAW,0BAA0B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAA2B,EAC3B,WAA+B;IAE/B,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,EAAE,CACtC,yBAAyB,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CACxE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,WAA4B,EAC5B,WAA+B;IAE/B,OAAO,yBAAyB,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,18 @@
1
+ export type PrayErrorKind = "manifest" | "parse" | "usage" | "resolution" | "integrity" | "render" | "verify" | "io" | "unsupported";
2
+ export declare class PrayError extends Error {
3
+ readonly kind: PrayErrorKind;
4
+ readonly detail?: string;
5
+ constructor(kind: PrayErrorKind, message: string, detail?: string);
6
+ exitCode(): number;
7
+ toString(): string;
8
+ static manifest(message: string): PrayError;
9
+ static parse(kind: string, message: string): PrayError;
10
+ static resolution(message: string): PrayError;
11
+ static integrity(message: string): PrayError;
12
+ static render(message: string): PrayError;
13
+ static verify(message: string): PrayError;
14
+ static io(message: string): PrayError;
15
+ static unsupported(message: string): PrayError;
16
+ static usage(message: string): PrayError;
17
+ }
18
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GACrB,UAAU,GACV,OAAO,GACP,OAAO,GACP,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,QAAQ,GACR,IAAI,GACJ,aAAa,CAAC;AAElB,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEb,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAOjE,QAAQ,IAAI,MAAM;IAoBlB,QAAQ,IAAI,MAAM;IAWlB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;IAI3C,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS;IAItD,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;IAI7C,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;IAI5C,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;IAIzC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;IAIzC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;IAIrC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;IAI9C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;CAGzC"}
package/dist/errors.js ADDED
@@ -0,0 +1,67 @@
1
+ export class PrayError extends Error {
2
+ kind;
3
+ detail;
4
+ constructor(kind, message, detail) {
5
+ super(message);
6
+ this.name = "PrayError";
7
+ this.kind = kind;
8
+ this.detail = detail;
9
+ }
10
+ exitCode() {
11
+ switch (this.kind) {
12
+ case "usage":
13
+ case "parse":
14
+ return 2;
15
+ case "resolution":
16
+ return 3;
17
+ case "integrity":
18
+ return 4;
19
+ case "render":
20
+ return 5;
21
+ case "verify":
22
+ return 6;
23
+ case "unsupported":
24
+ return 8;
25
+ default:
26
+ return 1;
27
+ }
28
+ }
29
+ toString() {
30
+ switch (this.kind) {
31
+ case "usage":
32
+ return `usage error: ${this.message}`;
33
+ case "unsupported":
34
+ return `unsupported feature: ${this.message}`;
35
+ default:
36
+ return this.message;
37
+ }
38
+ }
39
+ static manifest(message) {
40
+ return new PrayError("manifest", message);
41
+ }
42
+ static parse(kind, message) {
43
+ return new PrayError("parse", `${kind}: ${message}`, kind);
44
+ }
45
+ static resolution(message) {
46
+ return new PrayError("resolution", message);
47
+ }
48
+ static integrity(message) {
49
+ return new PrayError("integrity", message);
50
+ }
51
+ static render(message) {
52
+ return new PrayError("render", message);
53
+ }
54
+ static verify(message) {
55
+ return new PrayError("verify", message);
56
+ }
57
+ static io(message) {
58
+ return new PrayError("io", message);
59
+ }
60
+ static unsupported(message) {
61
+ return new PrayError("unsupported", message);
62
+ }
63
+ static usage(message) {
64
+ return new PrayError("usage", message);
65
+ }
66
+ }
67
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,IAAI,CAAgB;IACpB,MAAM,CAAU;IAEzB,YAAY,IAAmB,EAAE,OAAe,EAAE,MAAe;QAC/D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,QAAQ;QACN,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,OAAO,CAAC;YACb,KAAK,OAAO;gBACV,OAAO,CAAC,CAAC;YACX,KAAK,YAAY;gBACf,OAAO,CAAC,CAAC;YACX,KAAK,WAAW;gBACd,OAAO,CAAC,CAAC;YACX,KAAK,QAAQ;gBACX,OAAO,CAAC,CAAC;YACX,KAAK,QAAQ;gBACX,OAAO,CAAC,CAAC;YACX,KAAK,aAAa;gBAChB,OAAO,CAAC,CAAC;YACX;gBACE,OAAO,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IAED,QAAQ;QACN,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,OAAO;gBACV,OAAO,gBAAgB,IAAI,CAAC,OAAO,EAAE,CAAC;YACxC,KAAK,aAAa;gBAChB,OAAO,wBAAwB,IAAI,CAAC,OAAO,EAAE,CAAC;YAChD;gBACE,OAAO,IAAI,CAAC,OAAO,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,OAAe;QAC7B,OAAO,IAAI,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,IAAY,EAAE,OAAe;QACxC,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,KAAK,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,OAAe;QAC/B,OAAO,IAAI,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,OAAe;QAC9B,OAAO,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,OAAe;QAC3B,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,OAAe;QAC3B,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,OAAe;QACvB,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,OAAe;QAChC,OAAO,IAAI,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAe;QAC1B,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import type { Lockfile } from "../lockfile/types.js";
2
+ import type { ManifestSource } from "../manifest/types.js";
3
+ export interface GitSourceCheckout {
4
+ cacheDirectory: string;
5
+ revision: string;
6
+ subdir?: string;
7
+ }
8
+ export declare function prepareGitSources(projectRoot: string, sources: ManifestSource[], lockfile: Lockfile | undefined, refresh?: boolean): Map<string, GitSourceCheckout>;
9
+ export declare function resolveDistributionRoot(repositoryRoot: string, subdir?: string): string;
10
+ export declare function discoverDistributionRoot(path: string): string | undefined;
11
+ export declare function localDistributionRoot(path: string): boolean;
12
+ export declare function localGitSourceRoot(cloneUrl: string): string | undefined;
13
+ export declare function gitSourceCacheDirectory(projectRoot: string, cloneUrl: string): string;
14
+ //# sourceMappingURL=sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../src/git/sources.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,EAAE,EACzB,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,OAAO,UAAQ,GACd,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAmChC;AAED,wBAAgB,uBAAuB,CACrC,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAkBR;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CASzE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQvE;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,MAAM,CAER"}
@@ -0,0 +1,225 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { existsSync, mkdirSync, rmSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { isAbsolute, join } from "node:path";
5
+ import { PrayError } from "../errors.js";
6
+ import { sha256Hex } from "../hashing.js";
7
+ export function prepareGitSources(projectRoot, sources, lockfile, refresh = false) {
8
+ const checkouts = new Map();
9
+ for (const source of sources) {
10
+ if (source.kind !== "git") {
11
+ continue;
12
+ }
13
+ const cloneUrl = source.url.replace(/^git\+/, "");
14
+ if (isLocalFilesystemSource(cloneUrl) && !localGitRepoPath(cloneUrl)) {
15
+ const sourceRoot = localGitSourceRoot(cloneUrl);
16
+ if (sourceRoot) {
17
+ checkouts.set(source.name, {
18
+ cacheDirectory: sourceRoot,
19
+ revision: "",
20
+ subdir: source.subdir,
21
+ });
22
+ }
23
+ continue;
24
+ }
25
+ const pinnedRevision = refresh
26
+ ? undefined
27
+ : pinnedRevisionForSource(lockfile, source);
28
+ const { cacheDirectory, revision } = ensureGitRepository(projectRoot, cloneUrl, refresh, pinnedRevision, source.subdir);
29
+ checkouts.set(source.name, {
30
+ cacheDirectory,
31
+ revision,
32
+ subdir: source.subdir,
33
+ });
34
+ }
35
+ return checkouts;
36
+ }
37
+ export function resolveDistributionRoot(repositoryRoot, subdir) {
38
+ if (subdir) {
39
+ const path = join(repositoryRoot, subdir);
40
+ if (localDistributionRoot(path)) {
41
+ return path;
42
+ }
43
+ throw PrayError.resolution(`no pray distribution root at subdir ${path} in git source ${repositoryRoot}`);
44
+ }
45
+ const discovered = discoverDistributionRoot(repositoryRoot);
46
+ if (discovered) {
47
+ return discovered;
48
+ }
49
+ throw PrayError.resolution(`no pray distribution root in git source ${repositoryRoot}. ` +
50
+ "Expected v1/packages at the repository root or under prayers/.");
51
+ }
52
+ export function discoverDistributionRoot(path) {
53
+ if (localDistributionRoot(path)) {
54
+ return path;
55
+ }
56
+ const prayersRoot = join(path, "prayers");
57
+ if (localDistributionRoot(prayersRoot)) {
58
+ return prayersRoot;
59
+ }
60
+ return undefined;
61
+ }
62
+ export function localDistributionRoot(path) {
63
+ return existsSync(join(path, "v1", "packages"));
64
+ }
65
+ export function localGitSourceRoot(cloneUrl) {
66
+ const path = cloneUrl.startsWith("file://")
67
+ ? cloneUrl.slice("file://".length)
68
+ : cloneUrl;
69
+ if (!existsSync(path)) {
70
+ return undefined;
71
+ }
72
+ return discoverDistributionRoot(path);
73
+ }
74
+ export function gitSourceCacheDirectory(projectRoot, cloneUrl) {
75
+ return join(projectRoot, ".pray", "cache", "git", cacheKey(cloneUrl));
76
+ }
77
+ function ensureGitRepository(projectRoot, cloneUrl, refresh, pinnedRevision, sparseSubdir) {
78
+ const cacheDirectory = gitSourceCacheDirectory(projectRoot, cloneUrl);
79
+ if (existsSync(join(cacheDirectory, ".git"))) {
80
+ if (refresh) {
81
+ refreshGlobalGitCache(cloneUrl);
82
+ }
83
+ if (pinnedRevision) {
84
+ checkoutGitRevision(cacheDirectory, pinnedRevision, refresh);
85
+ }
86
+ else if (refresh) {
87
+ refreshGitWorktree(cacheDirectory);
88
+ }
89
+ if (sparseSubdir) {
90
+ applySparseCheckout(cacheDirectory, sparseSubdir);
91
+ }
92
+ return { cacheDirectory, revision: gitHeadRevision(cacheDirectory) };
93
+ }
94
+ if (existsSync(cacheDirectory)) {
95
+ rmSync(cacheDirectory, { recursive: true, force: true });
96
+ }
97
+ mkdirSync(join(cacheDirectory, ".."), { recursive: true });
98
+ if (!seedGitCacheFromGlobal(cloneUrl, cacheDirectory, projectRoot)) {
99
+ runGit(projectRoot, "clone", "--depth", "1", cloneUrl, cacheDirectory);
100
+ mirrorGitCacheToGlobal(cloneUrl, cacheDirectory);
101
+ }
102
+ else {
103
+ runGit(cacheDirectory, "remote", "set-url", "origin", cloneUrl);
104
+ }
105
+ if (pinnedRevision) {
106
+ checkoutGitRevision(cacheDirectory, pinnedRevision, true);
107
+ }
108
+ if (sparseSubdir) {
109
+ applySparseCheckout(cacheDirectory, sparseSubdir);
110
+ }
111
+ return { cacheDirectory, revision: gitHeadRevision(cacheDirectory) };
112
+ }
113
+ function pinnedRevisionForSource(lockfile, source) {
114
+ const locked = lockfile?.source.find((entry) => entry.name === source.name && entry.kind === "git");
115
+ if (locked?.revision) {
116
+ return locked.revision;
117
+ }
118
+ if (source.kind === "git") {
119
+ return source.rev ?? source.tag;
120
+ }
121
+ return undefined;
122
+ }
123
+ function isLocalFilesystemSource(cloneUrl) {
124
+ return cloneUrl.startsWith("file://") || isAbsolute(cloneUrl);
125
+ }
126
+ function localGitRepoPath(cloneUrl) {
127
+ const path = cloneUrl.startsWith("file://")
128
+ ? cloneUrl.slice("file://".length)
129
+ : cloneUrl;
130
+ return existsSync(join(path, ".git")) ? path : undefined;
131
+ }
132
+ function cacheKey(text) {
133
+ return sha256Hex(text).slice(0, 16);
134
+ }
135
+ function globalCacheRoot() {
136
+ if (process.env.PRAY_CACHE) {
137
+ return process.env.PRAY_CACHE;
138
+ }
139
+ if (process.env.PRAY_HOME) {
140
+ return join(process.env.PRAY_HOME, "cache");
141
+ }
142
+ return join(homedir(), ".cache", "pray");
143
+ }
144
+ function globalGitCacheDirectory(cloneUrl) {
145
+ const root = globalCacheRoot();
146
+ return root ? join(root, "git", cacheKey(cloneUrl)) : undefined;
147
+ }
148
+ function globalGitCacheReady(globalCache) {
149
+ return (existsSync(join(globalCache, ".git")) ||
150
+ existsSync(join(globalCache, "HEAD")));
151
+ }
152
+ function seedGitCacheFromGlobal(cloneUrl, destination, workingDirectory) {
153
+ const globalCache = globalGitCacheDirectory(cloneUrl);
154
+ if (!globalCache || !globalGitCacheReady(globalCache)) {
155
+ return false;
156
+ }
157
+ runGit(workingDirectory, "clone", "--depth", "1", "--quiet", globalCache, destination);
158
+ return true;
159
+ }
160
+ function mirrorGitCacheToGlobal(cloneUrl, projectCache) {
161
+ const globalCache = globalGitCacheDirectory(cloneUrl);
162
+ if (!globalCache || globalGitCacheReady(globalCache)) {
163
+ return;
164
+ }
165
+ mkdirSync(join(globalCache, ".."), { recursive: true });
166
+ if (existsSync(globalCache)) {
167
+ rmSync(globalCache, { recursive: true, force: true });
168
+ }
169
+ runGit(join(projectCache, ".."), "clone", "--bare", "--quiet", projectCache, globalCache);
170
+ }
171
+ function applySparseCheckout(repository, subdir) {
172
+ runGit(repository, "sparse-checkout", "init", "--cone");
173
+ runGit(repository, "sparse-checkout", "set", subdir);
174
+ }
175
+ function checkoutGitRevision(repository, revision, refresh) {
176
+ if (refresh) {
177
+ runGit(repository, "fetch", "--depth", "1", "origin", revision);
178
+ }
179
+ runGit(repository, "checkout", "--force", revision);
180
+ }
181
+ function refreshGitWorktree(repository) {
182
+ runGit(repository, "fetch", "--depth", "1", "origin");
183
+ runGit(repository, "reset", "--hard", "origin/HEAD");
184
+ }
185
+ function refreshGlobalGitCache(cloneUrl) {
186
+ const globalCache = globalGitCacheDirectory(cloneUrl);
187
+ if (!globalCache || !globalGitCacheReady(globalCache)) {
188
+ return;
189
+ }
190
+ runGit(globalCache, "fetch", "--depth", "1", "origin");
191
+ }
192
+ function gitHeadRevision(repository) {
193
+ const output = runGitCapture(repository, "rev-parse", "HEAD").trim();
194
+ if (output.length === 0) {
195
+ throw PrayError.resolution("git repository has no HEAD revision");
196
+ }
197
+ return output;
198
+ }
199
+ function runGit(repository, ...argumentsList) {
200
+ const result = spawnSync("git", ["-C", repository, ...argumentsList], {
201
+ encoding: "utf8",
202
+ });
203
+ if (result.error?.code === "ENOENT") {
204
+ throw PrayError.unsupported("git is required for git sources");
205
+ }
206
+ if (result.status !== 0) {
207
+ throw PrayError.resolution(commandError(`git ${argumentsList.join(" ")}`, result.stderr ?? result.stdout ?? ""));
208
+ }
209
+ }
210
+ function runGitCapture(repository, ...argumentsList) {
211
+ const result = spawnSync("git", ["-C", repository, ...argumentsList], {
212
+ encoding: "utf8",
213
+ });
214
+ if (result.status !== 0) {
215
+ throw PrayError.resolution(commandError(`git ${argumentsList.join(" ")}`, result.stderr ?? result.stdout ?? ""));
216
+ }
217
+ return result.stdout ?? "";
218
+ }
219
+ function commandError(program, output) {
220
+ const message = output.trim();
221
+ return message.length === 0
222
+ ? `${program} failed`
223
+ : `${program} failed: ${message}`;
224
+ }
225
+ //# sourceMappingURL=sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sources.js","sourceRoot":"","sources":["../../src/git/sources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function sha256Hex(bytes: Buffer | string): string;
2
+ export declare function sha256Prefixed(bytes: Buffer | string): string;
3
+ export declare function markerId(seed: string): string;
4
+ export declare function normalizeLineEndings(text: string): string;
5
+ export declare function checksumManagedSpanContent(body: string): string;
6
+ export declare function checksumManagedBodyLineRefs(bodyLines: string[]): string;
7
+ //# sourceMappingURL=hashing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashing.d.ts","sourceRoot":"","sources":["../src/hashing.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAE7D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAcvE"}
@@ -0,0 +1,43 @@
1
+ import { createHash } from "node:crypto";
2
+ export function sha256Hex(bytes) {
3
+ return createHash("sha256").update(bytes).digest("hex");
4
+ }
5
+ export function sha256Prefixed(bytes) {
6
+ return `sha256:${sha256Hex(bytes)}`;
7
+ }
8
+ export function markerId(seed) {
9
+ return sha256Hex(seed).slice(0, 8);
10
+ }
11
+ export function normalizeLineEndings(text) {
12
+ return text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
13
+ }
14
+ export function checksumManagedSpanContent(body) {
15
+ const normalized = normalizeLineEndings(body).replace(/\n+$/, "");
16
+ return sha256Prefixed(normalized);
17
+ }
18
+ export function checksumManagedBodyLineRefs(bodyLines) {
19
+ const trimmed = trimTrailingEmptyLines(bodyLines);
20
+ const hasher = createHash("sha256");
21
+ for (let index = 0; index < trimmed.length; index += 1) {
22
+ if (index > 0) {
23
+ hasher.update("\n");
24
+ }
25
+ const line = trimmed[index];
26
+ if (line === undefined) {
27
+ continue;
28
+ }
29
+ hasher.update(line.includes("\r") ? normalizeLineEndings(line) : line);
30
+ }
31
+ return prefixedHexDigest(hasher.digest());
32
+ }
33
+ function prefixedHexDigest(digest) {
34
+ return `sha256:${digest.toString("hex")}`;
35
+ }
36
+ function trimTrailingEmptyLines(lines) {
37
+ let end = lines.length;
38
+ while (end > 0 && lines[end - 1] === "") {
39
+ end -= 1;
40
+ }
41
+ return lines.slice(0, end);
42
+ }
43
+ //# sourceMappingURL=hashing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashing.js","sourceRoot":"","sources":["../src/hashing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,SAAS,CAAC,KAAsB;IAC9C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAsB;IACnD,OAAO,UAAU,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClE,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,SAAmB;IAC7D,MAAM,OAAO,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACpC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,UAAU,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAe;IAC7C,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACxC,GAAG,IAAI,CAAC,CAAC;IACX,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function httpGet(url: string): Promise<Buffer>;
2
+ export declare function httpGetText(url: string): Promise<string>;
3
+ export declare function httpPut(url: string, contentType: string, body: Buffer | string): Promise<void>;
4
+ export declare function httpPost(url: string, contentType: string, body: Buffer | string): Promise<void>;
5
+ export declare function httpPostJson(url: string, contentType: string, body: Buffer | string): Promise<Buffer>;
6
+ export declare function joinUrl(base: string, path: string): string;
7
+ export declare function isRemoteUrl(sourceUrl: string): boolean;
8
+ export declare function isLocalSourceUrl(sourceUrl: string): boolean;
9
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"AAEA,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ1D;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAE9D;AAED,wBAAsB,OAAO,CAC3B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GAAG,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GAAG,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,GAAG,MAAM,GACpB,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAOtD;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE3D"}