@foss.global/gitmanager 1.7.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/.smartconfig.json +4 -1
  2. package/changelog.md +52 -0
  3. package/dist_rust/rustgitmanager_linux_amd64 +0 -0
  4. package/dist_rust/rustgitmanager_linux_amd64.tsrust-build.json +5 -5
  5. package/dist_rust/rustgitmanager_linux_arm64 +0 -0
  6. package/dist_rust/rustgitmanager_linux_arm64.tsrust-build.json +5 -5
  7. package/dist_ts/00_commitinfo_data.js +1 -1
  8. package/dist_ts/classes.archiveinspection.d.ts +11 -0
  9. package/dist_ts/classes.archiveinspection.js +205 -0
  10. package/dist_ts/classes.gitmanager.d.ts +26 -2
  11. package/dist_ts/classes.gitmanager.js +60 -1
  12. package/dist_ts/classes.gitmanagererror.d.ts +11 -0
  13. package/dist_ts/classes.gitmanagererror.js +22 -0
  14. package/dist_ts/classes.repositoryservice.d.ts +8 -0
  15. package/dist_ts/classes.repositoryservice.js +38 -12
  16. package/dist_ts/index.d.ts +2 -0
  17. package/dist_ts/index.js +3 -1
  18. package/dist_ts/models.d.ts +66 -1
  19. package/dist_ts/rust-gitmanager-bridge.d.ts +6 -2
  20. package/dist_ts/rust-gitmanager-bridge.js +41 -2
  21. package/native-notices/crates/adler2-2.0.1/license-0bsd +12 -0
  22. package/native-notices/crates/adler2-2.0.1/license-apache +201 -0
  23. package/native-notices/crates/adler2-2.0.1/license-mit +23 -0
  24. package/native-notices/crates/aho-corasick-1.1.4/copying +3 -0
  25. package/native-notices/crates/aho-corasick-1.1.4/license-mit +21 -0
  26. package/native-notices/crates/aho-corasick-1.1.4/unlicense +24 -0
  27. package/native-notices/crates/anstream-1.0.0/license-apache +202 -0
  28. package/native-notices/crates/anstream-1.0.0/license-mit +19 -0
  29. package/native-notices/crates/anstyle-1.0.14/license-apache +202 -0
  30. package/native-notices/crates/anstyle-1.0.14/license-mit +19 -0
  31. package/native-notices/crates/anstyle-parse-1.0.0/license-apache +202 -0
  32. package/native-notices/crates/anstyle-parse-1.0.0/license-mit +19 -0
  33. package/native-notices/crates/anstyle-query-1.1.5/license-apache +202 -0
  34. package/native-notices/crates/anstyle-query-1.1.5/license-mit +19 -0
  35. package/native-notices/crates/anyhow-1.0.102/license-apache +176 -0
  36. package/native-notices/crates/anyhow-1.0.102/license-mit +23 -0
  37. package/native-notices/crates/atomic-waker-1.1.2/license-apache +201 -0
  38. package/native-notices/crates/atomic-waker-1.1.2/license-mit +23 -0
  39. package/native-notices/crates/atomic-waker-1.1.2/license-third-party +45 -0
  40. package/native-notices/crates/axum-0.8.9/license +25 -0
  41. package/native-notices/crates/axum-core-0.5.6/license +27 -0
  42. package/native-notices/crates/base64-0.22.1/license-apache +201 -0
  43. package/native-notices/crates/base64-0.22.1/license-mit +21 -0
  44. package/native-notices/crates/block-buffer-0.10.4/license-apache +201 -0
  45. package/native-notices/crates/block-buffer-0.10.4/license-mit +25 -0
  46. package/native-notices/crates/bytes-1.12.0/license +25 -0
  47. package/native-notices/crates/cfg-if-1.0.4/license-apache +201 -0
  48. package/native-notices/crates/cfg-if-1.0.4/license-mit +25 -0
  49. package/native-notices/crates/clap-4.6.1/license-apache +202 -0
  50. package/native-notices/crates/clap-4.6.1/license-mit +19 -0
  51. package/native-notices/crates/clap_builder-4.6.0/license-apache +202 -0
  52. package/native-notices/crates/clap_builder-4.6.0/license-mit +19 -0
  53. package/native-notices/crates/clap_derive-4.6.1/license-apache +202 -0
  54. package/native-notices/crates/clap_derive-4.6.1/license-mit +19 -0
  55. package/native-notices/crates/clap_lex-1.1.0/license-apache +202 -0
  56. package/native-notices/crates/clap_lex-1.1.0/license-mit +19 -0
  57. package/native-notices/crates/colorchoice-1.0.5/license-apache +202 -0
  58. package/native-notices/crates/colorchoice-1.0.5/license-mit +19 -0
  59. package/native-notices/crates/cpufeatures-0.2.17/license-apache +201 -0
  60. package/native-notices/crates/cpufeatures-0.2.17/license-mit +25 -0
  61. package/native-notices/crates/crc32fast-1.5.0/license-apache +202 -0
  62. package/native-notices/crates/crc32fast-1.5.0/license-mit +21 -0
  63. package/native-notices/crates/crypto-common-0.1.7/license-apache +201 -0
  64. package/native-notices/crates/crypto-common-0.1.7/license-mit +25 -0
  65. package/native-notices/crates/digest-0.10.7/license-apache +201 -0
  66. package/native-notices/crates/digest-0.10.7/license-mit +25 -0
  67. package/native-notices/crates/errno-0.3.14/license-apache +201 -0
  68. package/native-notices/crates/errno-0.3.14/license-mit +25 -0
  69. package/native-notices/crates/flate2-1.1.9/license-apache +201 -0
  70. package/native-notices/crates/flate2-1.1.9/license-mit +25 -0
  71. package/native-notices/crates/form_urlencoded-1.2.2/license-apache +201 -0
  72. package/native-notices/crates/form_urlencoded-1.2.2/license-mit +25 -0
  73. package/native-notices/crates/futures-channel-0.3.33/license-apache +202 -0
  74. package/native-notices/crates/futures-channel-0.3.33/license-mit +26 -0
  75. package/native-notices/crates/futures-core-0.3.33/license-apache +202 -0
  76. package/native-notices/crates/futures-core-0.3.33/license-mit +26 -0
  77. package/native-notices/crates/futures-macro-0.3.33/license-apache +202 -0
  78. package/native-notices/crates/futures-macro-0.3.33/license-mit +26 -0
  79. package/native-notices/crates/futures-sink-0.3.33/license-apache +202 -0
  80. package/native-notices/crates/futures-sink-0.3.33/license-mit +26 -0
  81. package/native-notices/crates/futures-task-0.3.33/license-apache +202 -0
  82. package/native-notices/crates/futures-task-0.3.33/license-mit +26 -0
  83. package/native-notices/crates/futures-util-0.3.33/license-apache +202 -0
  84. package/native-notices/crates/futures-util-0.3.33/license-mit +26 -0
  85. package/native-notices/crates/generic-array-0.14.7/license +21 -0
  86. package/native-notices/crates/heck-0.5.0/license-apache +201 -0
  87. package/native-notices/crates/heck-0.5.0/license-mit +25 -0
  88. package/native-notices/crates/http-1.4.2/license-apache +201 -0
  89. package/native-notices/crates/http-1.4.2/license-mit +25 -0
  90. package/native-notices/crates/http-body-1.1.0/license +25 -0
  91. package/native-notices/crates/http-body-util-0.1.4/license +25 -0
  92. package/native-notices/crates/httparse-1.10.1/license-apache +201 -0
  93. package/native-notices/crates/httparse-1.10.1/license-mit +20 -0
  94. package/native-notices/crates/httpdate-1.0.3/license-apache +201 -0
  95. package/native-notices/crates/httpdate-1.0.3/license-mit +19 -0
  96. package/native-notices/crates/hyper-1.10.1/license +19 -0
  97. package/native-notices/crates/hyper-util-0.1.20/license +19 -0
  98. package/native-notices/crates/is_terminal_polyfill-1.70.2/license-apache +202 -0
  99. package/native-notices/crates/is_terminal_polyfill-1.70.2/license-mit +19 -0
  100. package/native-notices/crates/itoa-1.0.18/license-apache +176 -0
  101. package/native-notices/crates/itoa-1.0.18/license-mit +23 -0
  102. package/native-notices/crates/lazy_static-1.5.0/license-apache +201 -0
  103. package/native-notices/crates/lazy_static-1.5.0/license-mit +25 -0
  104. package/native-notices/crates/libc-0.2.186/license-apache +176 -0
  105. package/native-notices/crates/libc-0.2.186/license-mit +25 -0
  106. package/native-notices/crates/lock_api-0.4.14/license-apache +201 -0
  107. package/native-notices/crates/lock_api-0.4.14/license-mit +25 -0
  108. package/native-notices/crates/log-0.4.33/license-apache +201 -0
  109. package/native-notices/crates/log-0.4.33/license-mit +25 -0
  110. package/native-notices/crates/matchers-0.2.0/license +19 -0
  111. package/native-notices/crates/matchit-0.8.4/license +21 -0
  112. package/native-notices/crates/matchit-0.8.4/license.httprouter +29 -0
  113. package/native-notices/crates/memchr-2.8.2/copying +3 -0
  114. package/native-notices/crates/memchr-2.8.2/license-mit +21 -0
  115. package/native-notices/crates/memchr-2.8.2/unlicense +24 -0
  116. package/native-notices/crates/mime-0.3.17/license-apache +201 -0
  117. package/native-notices/crates/mime-0.3.17/license-mit +20 -0
  118. package/native-notices/crates/miniz_oxide-0.8.9/license +25 -0
  119. package/native-notices/crates/miniz_oxide-0.8.9/license-apache.md +177 -0
  120. package/native-notices/crates/miniz_oxide-0.8.9/license-mit.md +24 -0
  121. package/native-notices/crates/miniz_oxide-0.8.9/license-zlib.md +14 -0
  122. package/native-notices/crates/mio-1.2.1/license +19 -0
  123. package/native-notices/crates/nu-ansi-term-0.50.3/license +22 -0
  124. package/native-notices/crates/once_cell-1.21.4/license-apache +201 -0
  125. package/native-notices/crates/once_cell-1.21.4/license-mit +23 -0
  126. package/native-notices/crates/parking_lot-0.12.5/license-apache +201 -0
  127. package/native-notices/crates/parking_lot-0.12.5/license-mit +25 -0
  128. package/native-notices/crates/parking_lot_core-0.9.12/license-apache +201 -0
  129. package/native-notices/crates/parking_lot_core-0.9.12/license-mit +25 -0
  130. package/native-notices/crates/percent-encoding-2.3.2/license-apache +201 -0
  131. package/native-notices/crates/percent-encoding-2.3.2/license-mit +25 -0
  132. package/native-notices/crates/pin-project-lite-0.2.17/license-apache +177 -0
  133. package/native-notices/crates/pin-project-lite-0.2.17/license-mit +23 -0
  134. package/native-notices/crates/proc-macro2-1.0.106/license-apache +176 -0
  135. package/native-notices/crates/proc-macro2-1.0.106/license-mit +23 -0
  136. package/native-notices/crates/quote-1.0.45/license-apache +176 -0
  137. package/native-notices/crates/quote-1.0.45/license-mit +23 -0
  138. package/native-notices/crates/regex-automata-0.4.14/license-apache +201 -0
  139. package/native-notices/crates/regex-automata-0.4.14/license-mit +25 -0
  140. package/native-notices/crates/regex-syntax-0.8.11/license-apache +201 -0
  141. package/native-notices/crates/regex-syntax-0.8.11/license-mit +25 -0
  142. package/native-notices/crates/ryu-1.0.23/license-apache +176 -0
  143. package/native-notices/crates/ryu-1.0.23/license-boost +23 -0
  144. package/native-notices/crates/scopeguard-1.2.0/license-apache +201 -0
  145. package/native-notices/crates/scopeguard-1.2.0/license-mit +25 -0
  146. package/native-notices/crates/serde-1.0.228/license-apache +176 -0
  147. package/native-notices/crates/serde-1.0.228/license-mit +23 -0
  148. package/native-notices/crates/serde_core-1.0.228/license-apache +176 -0
  149. package/native-notices/crates/serde_core-1.0.228/license-mit +23 -0
  150. package/native-notices/crates/serde_derive-1.0.228/license-apache +176 -0
  151. package/native-notices/crates/serde_derive-1.0.228/license-mit +23 -0
  152. package/native-notices/crates/serde_json-1.0.150/license-apache +176 -0
  153. package/native-notices/crates/serde_json-1.0.150/license-mit +23 -0
  154. package/native-notices/crates/serde_path_to_error-0.1.20/license-apache +176 -0
  155. package/native-notices/crates/serde_path_to_error-0.1.20/license-mit +23 -0
  156. package/native-notices/crates/serde_urlencoded-0.7.1/license-apache +176 -0
  157. package/native-notices/crates/serde_urlencoded-0.7.1/license-mit +25 -0
  158. package/native-notices/crates/sha2-0.10.9/license-apache +201 -0
  159. package/native-notices/crates/sha2-0.10.9/license-mit +27 -0
  160. package/native-notices/crates/sharded-slab-0.1.7/license +19 -0
  161. package/native-notices/crates/signal-hook-registry-1.4.8/license-apache +201 -0
  162. package/native-notices/crates/signal-hook-registry-1.4.8/license-mit +25 -0
  163. package/native-notices/crates/simd-adler32-0.3.10/license.md +21 -0
  164. package/native-notices/crates/slab-0.4.12/license +25 -0
  165. package/native-notices/crates/smallvec-1.15.2/license-apache +201 -0
  166. package/native-notices/crates/smallvec-1.15.2/license-mit +25 -0
  167. package/native-notices/crates/socket2-0.6.4/license-apache +201 -0
  168. package/native-notices/crates/socket2-0.6.4/license-mit +25 -0
  169. package/native-notices/crates/strsim-0.11.1/license +23 -0
  170. package/native-notices/crates/syn-2.0.118/license-apache +176 -0
  171. package/native-notices/crates/syn-2.0.118/license-mit +23 -0
  172. package/native-notices/crates/sync_wrapper-1.0.2/license +177 -0
  173. package/native-notices/crates/thread_local-1.1.9/license-apache +201 -0
  174. package/native-notices/crates/thread_local-1.1.9/license-mit +25 -0
  175. package/native-notices/crates/tokio-1.52.3/license +21 -0
  176. package/native-notices/crates/tokio-macros-2.7.0/license +22 -0
  177. package/native-notices/crates/tokio-stream-0.1.18/license +21 -0
  178. package/native-notices/crates/tokio-util-0.7.18/license +21 -0
  179. package/native-notices/crates/tower-0.5.3/license +25 -0
  180. package/native-notices/crates/tower-layer-0.3.3/license +25 -0
  181. package/native-notices/crates/tower-service-0.3.3/license +25 -0
  182. package/native-notices/crates/tracing-0.1.44/license +25 -0
  183. package/native-notices/crates/tracing-attributes-0.1.31/license +25 -0
  184. package/native-notices/crates/tracing-core-0.1.36/license +25 -0
  185. package/native-notices/crates/tracing-log-0.2.0/license +25 -0
  186. package/native-notices/crates/tracing-subscriber-0.3.23/license +25 -0
  187. package/native-notices/crates/typenum-1.20.1/license +1 -0
  188. package/native-notices/crates/typenum-1.20.1/license-apache +201 -0
  189. package/native-notices/crates/typenum-1.20.1/license-mit +21 -0
  190. package/native-notices/crates/unicode-ident-1.0.24/license-apache +176 -0
  191. package/native-notices/crates/unicode-ident-1.0.24/license-mit +23 -0
  192. package/native-notices/crates/unicode-ident-1.0.24/license-unicode +39 -0
  193. package/native-notices/crates/utf8parse-0.2.2/license-apache +176 -0
  194. package/native-notices/crates/utf8parse-0.2.2/license-mit +25 -0
  195. package/native-notices/crates/version_check-0.9.5/license-apache +201 -0
  196. package/native-notices/crates/version_check-0.9.5/license-mit +19 -0
  197. package/native-notices/crates/zmij-1.0.21/license-mit +23 -0
  198. package/native-notices/manifest.json +2457 -0
  199. package/native-notices/readme.md +44 -0
  200. package/native-notices/runtime/gcc/gpl-3.0.txt +674 -0
  201. package/native-notices/runtime/gcc/runtime-library-exception-3.1.txt +73 -0
  202. package/native-notices/runtime/glibc/lgpl-2.1.txt +502 -0
  203. package/native-notices/rust/compiler-builtins-license.txt +275 -0
  204. package/native-notices/rust/copyright-library.html +8266 -0
  205. package/native-notices/rust/crates/addr2line-0.25.1/license-apache +201 -0
  206. package/native-notices/rust/crates/addr2line-0.25.1/license-mit +25 -0
  207. package/native-notices/rust/crates/adler2-2.0.1/license-0bsd +12 -0
  208. package/native-notices/rust/crates/adler2-2.0.1/license-apache +201 -0
  209. package/native-notices/rust/crates/adler2-2.0.1/license-mit +23 -0
  210. package/native-notices/rust/crates/memchr-2.7.6/copying +3 -0
  211. package/native-notices/rust/crates/memchr-2.7.6/license-mit +21 -0
  212. package/native-notices/rust/crates/memchr-2.7.6/unlicense +24 -0
  213. package/native-notices/rust/crates/miniz_oxide-0.8.9/license +25 -0
  214. package/native-notices/rust/crates/miniz_oxide-0.8.9/license-apache.md +177 -0
  215. package/native-notices/rust/crates/miniz_oxide-0.8.9/license-mit.md +24 -0
  216. package/native-notices/rust/crates/miniz_oxide-0.8.9/license-zlib.md +14 -0
  217. package/native-notices/rust/crates/object-0.37.3/license-apache +201 -0
  218. package/native-notices/rust/crates/object-0.37.3/license-mit +25 -0
  219. package/native-notices/rust/licenses/apache-2.0.txt +73 -0
  220. package/native-notices/rust/licenses/bsd-2-clause.txt +9 -0
  221. package/native-notices/rust/licenses/cc-by-sa-4.0.txt +427 -0
  222. package/native-notices/rust/licenses/gcc-exception-3.1.txt +30 -0
  223. package/native-notices/rust/licenses/gpl-2.0-only.txt +133 -0
  224. package/native-notices/rust/licenses/gpl-3.0-or-later.txt +202 -0
  225. package/native-notices/rust/licenses/isc.txt +7 -0
  226. package/native-notices/rust/licenses/llvm-exception.txt +15 -0
  227. package/native-notices/rust/licenses/mit.txt +9 -0
  228. package/native-notices/rust/licenses/ncsa.txt +29 -0
  229. package/native-notices/rust/licenses/ofl-1.1.txt +43 -0
  230. package/native-notices/rust/licenses/unicode-3.0.txt +39 -0
  231. package/package.json +10 -9
  232. package/readme.md +100 -7
  233. package/ts/00_commitinfo_data.ts +1 -1
  234. package/ts/classes.archiveinspection.ts +245 -0
  235. package/ts/classes.gitmanager.ts +72 -2
  236. package/ts/classes.gitmanagererror.ts +28 -0
  237. package/ts/classes.repositoryservice.ts +41 -12
  238. package/ts/index.ts +2 -0
  239. package/ts/models.ts +87 -1
  240. package/ts/rust-gitmanager-bridge.ts +53 -4
@@ -0,0 +1,11 @@
1
+ import type { TGitManagerErrorCode } from './models.js';
2
+ export declare const isGitManagerErrorCode: (valueArg: unknown) => valueArg is TGitManagerErrorCode;
3
+ /**
4
+ * A failure callers can branch on through its stable `code`. Other failures,
5
+ * such as an unknown repository or an engine that is not running, remain
6
+ * plain errors.
7
+ */
8
+ export declare class GitManagerError extends Error {
9
+ readonly code: TGitManagerErrorCode;
10
+ constructor(codeArg: TGitManagerErrorCode, messageArg: string, optionsArg?: ErrorOptions);
11
+ }
@@ -0,0 +1,22 @@
1
+ const gitManagerErrorCodes = new Set([
2
+ 'invalidObjectId',
3
+ 'objectNotFound',
4
+ 'objectNotCommit',
5
+ 'ancestryBudgetExceeded',
6
+ 'archiveLimitExceeded',
7
+ 'archiveRejected',
8
+ ]);
9
+ export const isGitManagerErrorCode = (valueArg) => typeof valueArg === 'string' && gitManagerErrorCodes.has(valueArg);
10
+ /**
11
+ * A failure callers can branch on through its stable `code`. Other failures,
12
+ * such as an unknown repository or an engine that is not running, remain
13
+ * plain errors.
14
+ */
15
+ export class GitManagerError extends Error {
16
+ constructor(codeArg, messageArg, optionsArg) {
17
+ super(messageArg, optionsArg);
18
+ this.name = 'GitManagerError';
19
+ this.code = codeArg;
20
+ }
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5naXRtYW5hZ2VyZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLmdpdG1hbmFnZXJlcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLG9CQUFvQixHQUF3QixJQUFJLEdBQUcsQ0FBdUI7SUFDOUUsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLHNCQUFzQjtJQUN0QixpQkFBaUI7Q0FDbEIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxRQUFpQixFQUFvQyxFQUFFLENBQzNGLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFckU7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLEtBQUs7SUFHeEMsWUFBWSxPQUE2QixFQUFFLFVBQWtCLEVBQUUsVUFBeUI7UUFDdEYsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBQ3RCLENBQUM7Q0FDRiJ9
@@ -7,9 +7,17 @@ export declare class GitManagerRepositoryService {
7
7
  readonly completed: Promise<IGitManagerRepositoryServiceResult>;
8
8
  private readonly child;
9
9
  private completionSettled;
10
+ private failure;
10
11
  private timeout?;
11
12
  constructor(descriptorArg: IRustGitManagerRepositoryServiceDescriptor, requestArg: IGitManagerRepositoryServiceRequest, homeDirectoryArg: string);
12
13
  terminate(): void;
14
+ /**
15
+ * Kills the Git process tree and releases every stream, including output
16
+ * the caller never read, so `completed` settles without depending on the
17
+ * caller draining it.
18
+ */
13
19
  close(): Promise<void>;
20
+ /** Records the first failure and terminates the Git process tree. */
21
+ private fail;
14
22
  private clearTimeout;
15
23
  }
@@ -15,9 +15,8 @@ class ByteLimitTransform extends plugins.stream.Transform {
15
15
  : Buffer.from(chunkArg);
16
16
  this.bytes += chunk.byteLength;
17
17
  if (!Number.isSafeInteger(this.bytes) || this.bytes > this.maximumBytes) {
18
- const error = new Error(this.label + ' exceeded the configured size limit');
19
- this.onLimit(error);
20
- callbackArg(error);
18
+ this.onLimit();
19
+ callbackArg(new Error(this.label + ' exceeded the configured size limit'));
21
20
  return;
22
21
  }
23
22
  callbackArg(null, chunk);
@@ -55,6 +54,7 @@ const validateDescriptor = (descriptorArg, requestArg) => {
55
54
  export class GitManagerRepositoryService {
56
55
  constructor(descriptorArg, requestArg, homeDirectoryArg) {
57
56
  this.completionSettled = false;
57
+ this.failure = null;
58
58
  validateDescriptor(descriptorArg, requestArg);
59
59
  const args = descriptorArg.service === 'upload-pack'
60
60
  ? [
@@ -99,13 +99,18 @@ export class GitManagerRepositoryService {
99
99
  stdio: ['pipe', 'pipe', 'pipe'],
100
100
  windowsHide: true,
101
101
  });
102
- const fail = (errorArg) => {
103
- this.terminate();
104
- return errorArg;
105
- };
106
- const input = new ByteLimitTransform(descriptorArg.maxRequestBytes, 'Git repository service request', fail);
107
- const output = new ByteLimitTransform(descriptorArg.maxResponseBytes, 'Git repository service response', fail);
108
- const stderr = new ByteLimitTransform(128 * 1024, 'Git repository service stderr', fail);
102
+ const failWith = (failureArg) => () => this.fail(failureArg);
103
+ const input = new ByteLimitTransform(descriptorArg.maxRequestBytes, 'Git repository service request', failWith('requestLimitExceeded'));
104
+ const output = new ByteLimitTransform(descriptorArg.maxResponseBytes, 'Git repository service response', failWith('responseLimitExceeded'));
105
+ const stderr = new ByteLimitTransform(128 * 1024, 'Git repository service stderr', failWith('stderrLimitExceeded'));
106
+ // The service owns every stream error: a consumer's pipe() into stdin
107
+ // would otherwise rethrow an unhandled error. Failures surface through
108
+ // `completed`. Git closing its stdin early is reported by its exit
109
+ // status, so write errors on the child's stdin end only the pipe.
110
+ for (const ownedStream of [input, output, stderr, this.child.stdout, this.child.stderr]) {
111
+ ownedStream.on('error', failWith('streamFailed'));
112
+ }
113
+ this.child.stdin.on('error', () => undefined);
109
114
  input.pipe(this.child.stdin);
110
115
  this.child.stdout.pipe(output);
111
116
  this.child.stderr.pipe(stderr);
@@ -128,11 +133,12 @@ export class GitManagerRepositoryService {
128
133
  resolve({
129
134
  exitCode,
130
135
  signal: signal,
136
+ failure: this.failure,
131
137
  });
132
138
  });
133
139
  });
134
140
  this.timeout = setTimeout(() => {
135
- this.terminate();
141
+ this.fail('processTimeout');
136
142
  }, descriptorArg.processTimeoutMs);
137
143
  this.timeout.unref();
138
144
  }
@@ -152,11 +158,31 @@ export class GitManagerRepositoryService {
152
158
  }
153
159
  this.child.kill('SIGKILL');
154
160
  }
161
+ /**
162
+ * Kills the Git process tree and releases every stream, including output
163
+ * the caller never read, so `completed` settles without depending on the
164
+ * caller draining it.
165
+ */
155
166
  async close() {
156
167
  this.stdin.destroy();
157
168
  this.terminate();
169
+ for (const ownedStream of [
170
+ this.stdout,
171
+ this.stderr,
172
+ this.child.stdout,
173
+ this.child.stderr,
174
+ ]) {
175
+ ownedStream.destroy();
176
+ }
158
177
  await this.completed.catch(() => undefined);
159
178
  }
179
+ /** Records the first failure and terminates the Git process tree. */
180
+ fail(failureArg) {
181
+ if (!this.failure && !this.completionSettled) {
182
+ this.failure = failureArg;
183
+ }
184
+ this.terminate();
185
+ }
160
186
  clearTimeout() {
161
187
  if (this.timeout) {
162
188
  clearTimeout(this.timeout);
@@ -164,4 +190,4 @@ export class GitManagerRepositoryService {
164
190
  }
165
191
  }
166
192
  }
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yZXBvc2l0b3J5c2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMucmVwb3NpdG9yeXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFPeEMsTUFBTSxrQkFBbUIsU0FBUSxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFHdkQsWUFDbUIsWUFBb0IsRUFDcEIsS0FBYSxFQUNiLE9BQWtDO1FBRW5ELEtBQUssRUFBRSxDQUFDO1FBSlMsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFlBQU8sR0FBUCxPQUFPLENBQTJCO1FBTDdDLFVBQUssR0FBRyxDQUFDLENBQUM7SUFRbEIsQ0FBQztJQUVRLFVBQVUsQ0FDakIsUUFBc0MsRUFDdEMsV0FBMkIsRUFDM0IsV0FBNkM7UUFFN0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDckMsQ0FBQyxDQUFDLFFBQVE7WUFDVixDQUFDLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUTtnQkFDNUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQztnQkFDcEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4RSxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLHFDQUFxQyxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFD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
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yZXBvc2l0b3J5c2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMucmVwb3NpdG9yeXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFReEMsTUFBTSxrQkFBbUIsU0FBUSxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFHdkQsWUFDbUIsWUFBb0IsRUFDcEIsS0FBYSxFQUNiLE9BQW1CO1FBRXBDLEtBQUssRUFBRSxDQUFDO1FBSlMsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDcEIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNiLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFMOUIsVUFBSyxHQUFHLENBQUMsQ0FBQztJQVFsQixDQUFDO0lBRVEsVUFBVSxDQUNqQixRQUFzQyxFQUN0QyxXQUEyQixFQUMzQixXQUE2QztRQUU3QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNyQyxDQUFDLENBQUMsUUFBUTtZQUNWLENBQUMsQ0FBQyxPQUFPLFFBQVEsS0FBSyxRQUFRO2dCQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDO2dCQUNwQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLHFDQUFxQyxD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
@@ -2,3 +2,5 @@ export * from './models.js';
2
2
  export * from './rust-gitmanager-bridge.js';
3
3
  export * from './classes.gitmanager.js';
4
4
  export * from './classes.repositoryservice.js';
5
+ export * from './classes.gitmanagererror.js';
6
+ export { gitManagerArchivePathMetadataCeilingBytes } from './classes.archiveinspection.js';
package/dist_ts/index.js CHANGED
@@ -2,4 +2,6 @@ export * from './models.js';
2
2
  export * from './rust-gitmanager-bridge.js';
3
3
  export * from './classes.gitmanager.js';
4
4
  export * from './classes.repositoryservice.js';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxnQ0FBZ0MsQ0FBQyJ9
5
+ export * from './classes.gitmanagererror.js';
6
+ export { gitManagerArchivePathMetadataCeilingBytes } from './classes.archiveinspection.js';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDIn0=
@@ -67,6 +67,60 @@ export interface IGitManagerRepositoryArchive extends IGitManagerRepositorySelec
67
67
  extractedSizeBytes: number;
68
68
  entryCount: number;
69
69
  }
70
+ /**
71
+ * Asks whether `ancestorObjectId` is reachable from `descendantObjectId`
72
+ * (`git merge-base --is-ancestor`; a commit is its own ancestor). Both must be
73
+ * full lowercase object IDs of commits in the repository; revision
74
+ * expressions, abbreviations, and tag objects are refused.
75
+ */
76
+ export interface IGitManagerAncestryRequest extends IGitManagerRepositorySelector {
77
+ ancestorObjectId: string;
78
+ descendantObjectId: string;
79
+ /**
80
+ * Wall-clock work budget for the object lookup and the history walk,
81
+ * 1 to 60000 ms, default 10000. Exceeding it throws a `GitManagerError`
82
+ * with code `ancestryBudgetExceeded`.
83
+ */
84
+ timeoutMs?: number;
85
+ }
86
+ /**
87
+ * Limits for inspecting one `tar.gz` archive. Every limit is inclusive.
88
+ */
89
+ export interface IGitManagerArchiveInspectionRequest {
90
+ /** The archive bytes, or a stream of them; it is consumed and closed. */
91
+ archive: Uint8Array | AsyncIterable<Uint8Array>;
92
+ maxCompressedBytes: number;
93
+ maxExtractedBytes: number;
94
+ maxEntries: number;
95
+ /**
96
+ * Ceiling for the UTF-8 bytes of every effective entry path and symlink
97
+ * target, 1 to 134217728 (the fixed ci-spec ceiling, and the default).
98
+ */
99
+ maxPathMetadataBytes?: number;
100
+ }
101
+ export interface IGitManagerArchiveInspectionOptions {
102
+ signal?: AbortSignal;
103
+ }
104
+ /** Metadata recomputed from an accepted archive; nothing is taken on trust. */
105
+ export interface IGitManagerArchiveInspection {
106
+ sizeBytes: number;
107
+ sha256: string;
108
+ extractedSizeBytes: number;
109
+ entryCount: number;
110
+ pathMetadataBytes: number;
111
+ }
112
+ /**
113
+ * Stable codes of `GitManagerError`.
114
+ *
115
+ * - `invalidObjectId`: an object ID is not a full lowercase SHA-1 or SHA-256.
116
+ * - `objectNotFound`: the object does not exist in the repository.
117
+ * - `objectNotCommit`: the object exists but is not a commit.
118
+ * - `ancestryBudgetExceeded`: the ancestry check exceeded `timeoutMs`; the
119
+ * answer is unknown, never `false`.
120
+ * - `archiveLimitExceeded`: the archive exceeds a requested limit.
121
+ * - `archiveRejected`: the archive breaks a format, path, or link rule.
122
+ */
123
+ export type TGitManagerErrorCode = 'invalidObjectId' | 'objectNotFound' | 'objectNotCommit' | 'ancestryBudgetExceeded' | 'archiveLimitExceeded' | 'archiveRejected';
70
124
  export interface IGitManagerRepositoryLfsPointer {
71
125
  oid: string;
72
126
  sizeBytes: number;
@@ -85,9 +139,20 @@ export interface IRustGitManagerRepositoryServiceDescriptor extends IGitManagerR
85
139
  processTimeoutMs: number;
86
140
  idleTimeoutSeconds: number;
87
141
  }
142
+ /**
143
+ * Why GitManager terminated a repository service process. The value says the
144
+ * transfer was cut, not that the repository is unchanged: an SSH-style
145
+ * receive-pack has no receive gate, so Git updates refs as soon as it has read
146
+ * a complete pack, and excess bytes arriving after that cannot undo those
147
+ * updates. Reconcile refs from the repository after every receive-pack,
148
+ * whatever `failure` says.
149
+ */
150
+ export type TGitManagerRepositoryServiceFailure = 'requestLimitExceeded' | 'responseLimitExceeded' | 'stderrLimitExceeded' | 'streamFailed' | 'processTimeout';
88
151
  export interface IGitManagerRepositoryServiceResult {
89
152
  exitCode: number | null;
90
153
  signal: NodeJS.Signals | null;
154
+ /** The first failure that made GitManager terminate the process; null otherwise. */
155
+ failure: TGitManagerRepositoryServiceFailure | null;
91
156
  }
92
157
  export interface IGitManagerRestoreBundleRequest extends IGitManagerRepositorySelector {
93
158
  bundlePath: string;
@@ -161,4 +226,4 @@ export type TGitManagerReadinessResult = {
161
226
  reason: TGitManagerReadinessFailureReason;
162
227
  durationMs: number;
163
228
  };
164
- export type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffFile, IGitManagerDiffHunk, IGitManagerDiffLine, IGitManagerDiffRequest, IGitManagerDiffStats, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerMergeRequest, IGitManagerMergeResult, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, TGitManagerDiffFileStatus, TGitManagerDiffLineKind, TGitManagerMergeMethod, TGitManagerMergeStatus, TGitManagerObjectType, TGitManagerRefType, TGitManagerTreeEntryType, } from '@foss.global/interfaces';
229
+ export type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffFile, IGitManagerDiffHunk, IGitManagerDiffLine, IGitManagerDiffRequest, IGitManagerDiffStats, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerMergeRequest, IGitManagerMergeResult, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefHead, IGitManagerRefInventoryPage, IGitManagerRefInventoryStale, IGitManagerRefRequest, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, TGitManagerDiffFileStatus, TGitManagerDiffLineKind, TGitManagerMergeMethod, TGitManagerMergeStatus, TGitManagerObjectType, TGitManagerRefInventoryPagination, TGitManagerRefInventoryResult, TGitManagerTreeEntryType, } from '@foss.global/interfaces';
@@ -1,9 +1,12 @@
1
1
  import * as plugins from './plugins.js';
2
- import type { IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerMergeRequest, IGitManagerMergeResult, IGitManagerReadFileRequest, IGitManagerRef, IGitManagerRefRequest, IGitManagerProtectedRefsApplyResult, IGitManagerSmartHttpRepositoryProtectedRefs, IGitManagerRepositoryBundle, IGitManagerRepositoryArchive, IGitManagerRepositoryArchiveOptions, IGitManagerRepositoryArchiveRequest, IGitManagerRepositoryLfsPointer, IGitManagerRepositoryServiceRequest, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerRestoreBundleRequest, IGitManagerSmartHttpRepositoryAccess, IGitManagerSmartHttpRepositoryVisibility, IGitManagerStatus, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, IRustGitManagerConfig, IRustGitManagerRepositoryServiceDescriptor } from './models.js';
2
+ import type { IGitManagerAncestryRequest, IGitManagerCommitDetail, IGitManagerCommitRequest, IGitManagerCommitSummary, IGitManagerDiff, IGitManagerDiffRequest, IGitManagerFileContent, IGitManagerImportMirrorRequest, IGitManagerInitBareRepositoryRequest, IGitManagerListCommitsRequest, IGitManagerListTagsRequest, IGitManagerMergeRequest, IGitManagerMergeResult, IGitManagerReadFileRequest, IGitManagerRefRequest, IGitManagerProtectedRefsApplyResult, IGitManagerSmartHttpRepositoryProtectedRefs, IGitManagerRepositoryBundle, IGitManagerRepositoryArchive, IGitManagerRepositoryArchiveOptions, IGitManagerRepositoryArchiveRequest, IGitManagerRepositoryLfsPointer, IGitManagerRepositoryServiceRequest, IGitManagerRepositoryInfo, IGitManagerRepositorySelector, IGitManagerRestoreBundleRequest, IGitManagerSmartHttpRepositoryAccess, IGitManagerSmartHttpRepositoryVisibility, IGitManagerStatus, IGitManagerTag, IGitManagerTagRequest, IGitManagerTreeEntry, IGitManagerTreeRequest, IRustGitManagerConfig, TGitManagerRefInventoryResult, IRustGitManagerRepositoryServiceDescriptor } from './models.js';
3
3
  export declare class RustGitManagerBridge extends plugins.EventEmitter {
4
4
  private bridge;
5
+ private binaryLocator;
5
6
  constructor();
6
7
  spawn(): Promise<boolean>;
8
+ /** Resolves the engine binary the bridge spawns, for its one-shot modes. */
9
+ findBinary(): Promise<string>;
7
10
  kill(): void;
8
11
  terminate(): Promise<void>;
9
12
  get running(): boolean;
@@ -22,11 +25,12 @@ export declare class RustGitManagerBridge extends plugins.EventEmitter {
22
25
  prepareRepositoryService(requestArg: IGitManagerRepositoryServiceRequest): Promise<IRustGitManagerRepositoryServiceDescriptor>;
23
26
  restoreRepositoryBundle(requestArg: IGitManagerRestoreBundleRequest): Promise<IGitManagerRepositoryInfo>;
24
27
  listRepositories(): Promise<IGitManagerRepositoryInfo[]>;
25
- listRefs(requestArg: IGitManagerRefRequest): Promise<IGitManagerRef[]>;
28
+ listRefs(requestArg: IGitManagerRefRequest): Promise<TGitManagerRefInventoryResult>;
26
29
  listRepositoryLfsPointers(requestArg: IGitManagerRepositorySelector): Promise<IGitManagerRepositoryLfsPointer[]>;
27
30
  mergeRepository(requestArg: IGitManagerMergeRequest): Promise<IGitManagerMergeResult>;
28
31
  listTree(requestArg: IGitManagerTreeRequest): Promise<IGitManagerTreeEntry[]>;
29
32
  readFile(requestArg: IGitManagerReadFileRequest): Promise<IGitManagerFileContent>;
33
+ isAncestor(requestArg: IGitManagerAncestryRequest): Promise<boolean>;
30
34
  listCommits(requestArg: IGitManagerListCommitsRequest): Promise<IGitManagerCommitSummary[]>;
31
35
  getCommit(requestArg: IGitManagerCommitRequest): Promise<IGitManagerCommitDetail>;
32
36
  getDiff(requestArg: IGitManagerDiffRequest): Promise<IGitManagerDiff>;
@@ -1,4 +1,5 @@
1
1
  import * as plugins from './plugins.js';
2
+ import { GitManagerError, isGitManagerErrorCode } from './classes.gitmanagererror.js';
2
3
  function getPackageRoot() {
3
4
  const thisDir = plugins.path.dirname(plugins.url.fileURLToPath(import.meta.url));
4
5
  return plugins.path.resolve(thisDir, '..');
@@ -22,14 +23,31 @@ function buildLocalPaths() {
22
23
  paths.push(plugins.path.resolve(process.cwd(), 'rust', 'target', 'debug', 'rustgitmanager'));
23
24
  return paths;
24
25
  }
26
+ /**
27
+ * Rethrows a Rust response that carries a stable GitManager error code as a
28
+ * `GitManagerError`; every other failure is rethrown unchanged.
29
+ */
30
+ const rethrowCodedError = (errorArg) => {
31
+ if (errorArg instanceof plugins.smartrust.RustBridgeRequestError
32
+ && isGitManagerErrorCode(errorArg.responseErrorCode)) {
33
+ throw new GitManagerError(errorArg.responseErrorCode, errorArg.message, {
34
+ cause: errorArg,
35
+ });
36
+ }
37
+ throw errorArg;
38
+ };
25
39
  export class RustGitManagerBridge extends plugins.EventEmitter {
26
40
  constructor() {
27
41
  super();
28
- this.bridge = new plugins.smartrust.RustBridge({
42
+ const binaryLocatorOptions = {
29
43
  binaryName: 'rustgitmanager',
30
44
  envVarName: 'GITMANAGER_RUST_BINARY',
31
45
  platformPackagePrefix: '@foss.global/gitmanager',
32
46
  localPaths: buildLocalPaths(),
47
+ };
48
+ this.binaryLocator = new plugins.smartrust.RustBinaryLocator(binaryLocatorOptions);
49
+ this.bridge = new plugins.smartrust.RustBridge({
50
+ ...binaryLocatorOptions,
33
51
  requestTimeoutMs: 130000,
34
52
  readyTimeoutMs: 10000,
35
53
  });
@@ -43,6 +61,14 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
43
61
  async spawn() {
44
62
  return this.bridge.spawn();
45
63
  }
64
+ /** Resolves the engine binary the bridge spawns, for its one-shot modes. */
65
+ async findBinary() {
66
+ const binaryPath = await this.binaryLocator.findBinary();
67
+ if (!binaryPath) {
68
+ throw new Error('Unable to locate the rustgitmanager binary');
69
+ }
70
+ return binaryPath;
71
+ }
46
72
  kill() {
47
73
  this.bridge.kill();
48
74
  }
@@ -164,6 +190,19 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
164
190
  async readFile(requestArg) {
165
191
  return this.bridge.sendCommand('readFile', requestArg);
166
192
  }
193
+ async isAncestor(requestArg) {
194
+ const result = await this.bridge.sendCommand('isAncestor', {
195
+ org: requestArg.org,
196
+ repo: requestArg.repo,
197
+ ancestorObjectId: requestArg.ancestorObjectId,
198
+ descendantObjectId: requestArg.descendantObjectId,
199
+ ...(requestArg.timeoutMs === undefined ? {} : { timeoutMs: requestArg.timeoutMs }),
200
+ }).catch(rethrowCodedError);
201
+ if (typeof result !== 'boolean') {
202
+ throw new Error('Rust GitManager returned an invalid ancestry result');
203
+ }
204
+ return result;
205
+ }
167
206
  async listCommits(requestArg) {
168
207
  return this.bridge.sendCommand('listCommits', requestArg);
169
208
  }
@@ -180,4 +219,4 @@ export class RustGitManagerBridge extends plugins.EventEmitter {
180
219
  return this.bridge.sendCommand('getTag', requestArg);
181
220
  }
182
221
  }
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1naXRtYW5hZ2VyLWJyaWRnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3J1c3QtZ2l0bWFuYWdlci1icmlkZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFtRnhDLFNBQVMsY0FBYztJQUNyQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakYsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsdUJBQXVCO0lBQzlCLE1BQU0sT0FBTyxHQUEyQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3pFLE1BQU0sS0FBSyxHQUEyQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsZUFBZTtJQUN0QixNQUFNLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQztJQUNyQyxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUUzQixJQUFJLE1BQU0sRUFBRSxD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
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1naXRtYW5hZ2VyLWJyaWRnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3J1c3QtZ2l0bWFuYWdlci1icmlkZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBcUZ0RixTQUFTLGNBQWM7SUFDckIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLHVCQUF1QjtJQUM5QixNQUFNLE9BQU8sR0FBMkIsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN6RSxNQUFNLEtBQUssR0FBMkIsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMxRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLGVBQWU7SUFDdEIsTUFBTSxXQUFXLEdBQUcsY0FBYyxFQUFFLENBQUM7SUFDckMsTUFBTSxNQUFNLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztJQUN6QyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFFM0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNYLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQzFFLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUMvRixLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFFN0YsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFFBQWlCLEVBQVMsRUFBRTtJQUNyRCxJQUNFLFFBQVEsWUFBWSxPQUFPLENBQUMsU0FBUyxDQUFDLHNCQUFzQjtXQUN6RCxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFDcEQsQ0FBQztRQUNELE1BQU0sSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUU7WUFDdEUsS0FBSyxFQUFFLFFBQVE7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE1BQU0sUUFBUSxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxPQUFPLENBQUMsWUFBWTtJQUk1RDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsTUFBTSxvQkFBb0IsR0FBNEM7WUFDcEUsVUFBVSxFQUFFLGdCQUFnQjtZQUM1QixVQUFVLEVBQUUsd0JBQXdCO1lBQ3BDLHFCQUFxQixFQUFFLHlCQUF5QjtZQUNoRCxVQUFVLEVBQUUsZUFBZSxFQUFFO1NBQzlCLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBc0I7WUFDbEUsR0FBRyxvQkFBb0I7WUFDdkIsZ0JBQWdCLEVBQUUsTUFBTTtZQUN4QixjQUFjLEVBQUUsS0FBSztTQUN0QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFtQixFQUFFLE1BQXFCLEVBQUUsRUFBRTtZQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELDRFQUE0RTtJQUNyRSxLQUFLLENBQUMsVUFBVTtRQUNyQixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVNLElBQUk7UUFDVCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUztRQUNwQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQzdCLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQWdDO1FBQzNELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjO1FBQ3pCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUNwQixVQUF3RDtRQUV4RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxTQUErQztRQUN2RixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLDhCQUE4QixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSxLQUFLLENBQUMsZ0NBQWdDLENBQzNDLGFBQXVEO1FBRXZELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsa0NBQWtDLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVNLEtBQUssQ0FBQyxtQ0FBbUMsQ0FDOUMsZ0JBQTZEO1FBRTdELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQzVCLHFDQUFxQyxFQUNyQyxnQkFBZ0IsQ0FDakIsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCLENBQUMsVUFBZ0Q7UUFDOUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxVQUEwQztRQUNsRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxVQUF5QztRQUNsRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU0sS0FBSyxDQUFDLGdCQUFnQixDQUFDLFVBQXlDO1FBQ3JFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVNLEtBQUssQ0FBQyxzQkFBc0IsQ0FDakMsVUFBeUM7UUFFekMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU0sS0FBSyxDQUFDLHVCQUF1QixDQUNsQyxVQUErQyxFQUMvQyxhQUFrRCxFQUFFO1FBRXBELElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMvQixNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDMUYsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMseUJBQXlCLEVBQUU7WUFDeEUsV0FBVztZQUNYLE9BQU8sRUFBRSxVQUFVO1NBQ3BCLEVBQUU7WUFDRCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO1NBQzFCLENBQUMsQ0FBQztRQUNILElBQUksYUFFUyxDQUFDO1FBQ2QsTUFBTSxhQUFhLEdBQUcsR0FBUyxFQUFFO1lBQy9CLGFBQWEsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsRUFBRTtnQkFDbkUsV0FBVzthQUNaLEVBQUU7Z0JBQ0QsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTthQUMxQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFDRixVQUFVLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1RSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDL0IsYUFBYSxFQUFFLENBQUM7UUFDbEIsQ0FBQztRQUVELElBQUksTUFBb0MsQ0FBQztRQUN6QyxJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsTUFBTSxjQUFjLENBQUM7WUFDOUIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sWUFBWSxDQUFDO1lBQ3JCLENBQUM7WUFDRCxNQUFNLFlBQVksR0FBRyxNQUFNLGFBQWEsQ0FBQztZQUN6QyxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNO3VCQUMxQixJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFDRCxNQUFNLFlBQVksQ0FBQztRQUNyQixDQUFDO2dCQUFTLENBQUM7WUFDVCxVQUFVLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQzNCLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDL0IsQ0FBQyxvQkFBb0IsRUFBRSxNQUFNLENBQUMsa0JBQWtCLENBQUM7WUFDakQsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQztTQUN6QixFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbEUsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU0sS0FBSyxDQUFDLHdCQUF3QixDQUNuQyxVQUErQztRQUUvQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLDBCQUEwQixFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTSxLQUFLLENBQUMsdUJBQXVCLENBQ2xDLFVBQTJDO1FBRTNDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMseUJBQXlCLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLEtBQUssQ0FBQyxnQkFBZ0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FDbkIsVUFBaUM7UUFFakMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLEtBQUssQ0FBQyx5QkFBeUIsQ0FDcEMsVUFBeUM7UUFFekMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FDMUIsVUFBbUM7UUFFbkMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFrQztRQUN0RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFzQztRQUMxRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFzQztRQUM1RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRTtZQUN6RCxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUc7WUFDbkIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1lBQ3JCLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxnQkFBZ0I7WUFDN0Msa0JBQWtCLEVBQUUsVUFBVSxDQUFDLGtCQUFrQjtZQUNqRCxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ25GLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1QixJQUFJLE9BQU8sTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXLENBQUMsVUFBeUM7UUFDaEUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBb0M7UUFDekQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBa0M7UUFDckQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBc0M7UUFDMUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBaUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDdkQsQ0FBQztDQUNGIn0=
@@ -0,0 +1,12 @@
1
+ Copyright (C) Jonas Schievink <jonasschievink@gmail.com>
2
+
3
+ Permission to use, copy, modify, and/or distribute this software for
4
+ any purpose with or without fee is hereby granted.
5
+
6
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
7
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
8
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
9
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
10
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
11
+ AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
12
+ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.