@decaf-ts/for-fabric 0.1.61 → 0.1.63

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 (423) hide show
  1. package/dist/for-fabric.cjs +2744 -2
  2. package/dist/for-fabric.js +2833 -2
  3. package/lib/bin/cli.cjs +2 -1
  4. package/lib/cli-module.cjs +151 -39
  5. package/lib/cli-utils.cjs +64 -2
  6. package/lib/cli-utils.d.ts +2 -0
  7. package/lib/client/FabricClientAdapter.cjs +1 -1
  8. package/lib/client/FabricClientDispatch.cjs +2 -1
  9. package/lib/client/FabricClientDispatch.d.ts +1 -1
  10. package/lib/client/FabricClientPaginator.cjs +1 -1
  11. package/lib/client/FabricClientRepository.cjs +1 -1
  12. package/lib/client/FabricClientStatement.cjs +1 -1
  13. package/lib/client/collections/generation.cjs +76 -108
  14. package/lib/client/collections/generation.d.ts +24 -5
  15. package/lib/client/collections/index.cjs +1 -1
  16. package/lib/client/constants.cjs +1 -1
  17. package/lib/client/crypto.cjs +1 -1
  18. package/lib/client/erc20/FabricERC20ClientRepository.cjs +1 -1
  19. package/lib/client/erc20/index.cjs +1 -1
  20. package/lib/client/fabric-fs.cjs +1 -1
  21. package/lib/client/fabric-hsm.cjs +1 -1
  22. package/lib/client/index.cjs +1 -1
  23. package/lib/client/indexes/generation.cjs +10 -7
  24. package/lib/client/indexes/generation.d.ts +1 -1
  25. package/lib/client/indexes/index.cjs +1 -1
  26. package/lib/client/logging.cjs +1 -1
  27. package/lib/client/services/FabricEnrollmentService.cjs +1 -1
  28. package/lib/client/services/FabricIdentityService.cjs +1 -1
  29. package/lib/client/services/RegistrationRequestBuilder.cjs +1 -1
  30. package/lib/client/services/constants.cjs +1 -1
  31. package/lib/client/services/index.cjs +1 -1
  32. package/lib/client/types.cjs +1 -1
  33. package/lib/client/utils.cjs +1 -1
  34. package/lib/contract/Address.cjs +1 -1
  35. package/lib/contract/AddressContract.cjs +1 -1
  36. package/lib/contract/BatchContract.cjs +1 -1
  37. package/lib/contract/OtherProductContract.cjs +30 -0
  38. package/lib/contract/OtherProductContract.d.ts +5 -0
  39. package/lib/contract/OtherProductSharedContract.cjs +30 -0
  40. package/lib/contract/OtherProductSharedContract.d.ts +5 -0
  41. package/lib/contract/Product.cjs +1 -1
  42. package/lib/contract/ProductContract.cjs +1 -1
  43. package/lib/contract/User.cjs +1 -1
  44. package/lib/contract/UserContract.cjs +1 -1
  45. package/lib/contract/index.cjs +3 -1
  46. package/lib/contract/models/Audit.cjs +21 -3
  47. package/lib/contract/models/Audit.d.ts +2 -1
  48. package/lib/contract/models/BaseIdentifiedModel.cjs +1 -1
  49. package/lib/contract/models/BaseModel.cjs +1 -1
  50. package/lib/contract/models/Batch.cjs +3 -3
  51. package/lib/contract/models/Leaflet.cjs +3 -3
  52. package/lib/contract/models/LeafletFile.cjs +1 -1
  53. package/lib/contract/models/Market.cjs +1 -1
  54. package/lib/contract/models/OtherProduct.cjs +74 -0
  55. package/lib/contract/models/OtherProduct.d.ts +12 -0
  56. package/lib/contract/models/OtherProductShared.cjs +75 -0
  57. package/lib/contract/models/OtherProductShared.d.ts +12 -0
  58. package/lib/contract/models/Product.cjs +5 -5
  59. package/lib/contract/models/ProductStrength.cjs +1 -1
  60. package/lib/contract/models/constants.cjs +1 -1
  61. package/lib/contract/models/decorators.cjs +16 -9
  62. package/lib/contract/models/decorators.d.ts +8 -5
  63. package/lib/contract/models/gtin.cjs +1 -1
  64. package/lib/contracts/ContractAdapter.cjs +1 -1
  65. package/lib/contracts/ContractContext.cjs +1 -1
  66. package/lib/contracts/ContractPrivateDataAdapter.cjs +1 -1
  67. package/lib/contracts/FabricConstruction.cjs +2 -2
  68. package/lib/contracts/FabricContractPaginator.cjs +1 -1
  69. package/lib/contracts/FabricContractRepository.cjs +1 -1
  70. package/lib/contracts/FabricContractRepository.d.ts +3 -1
  71. package/lib/contracts/FabricContractRepositoryObservableHandler.cjs +1 -1
  72. package/lib/contracts/FabricContractSequence.cjs +5 -5
  73. package/lib/contracts/FabricContractStatement.cjs +1 -1
  74. package/lib/contracts/PrivateSequence.cjs +1 -1
  75. package/lib/contracts/crud/crud-contract.cjs +1 -1
  76. package/lib/contracts/crud/index.cjs +1 -1
  77. package/lib/contracts/crud/serialized-crud-contract.cjs +1 -1
  78. package/lib/contracts/erc20/erc20contract.cjs +1 -1
  79. package/lib/contracts/erc20/index.cjs +1 -1
  80. package/lib/contracts/erc20/models.cjs +1 -1
  81. package/lib/contracts/index.cjs +8 -7
  82. package/lib/contracts/index.d.ts +1 -0
  83. package/lib/contracts/logging.cjs +1 -1
  84. package/lib/contracts/overrides.cjs +8 -0
  85. package/lib/contracts/overrides.d.ts +1 -0
  86. package/lib/contracts/private-data.cjs +1 -1
  87. package/lib/contracts/types.cjs +1 -1
  88. package/lib/contracts/types.d.ts +1 -0
  89. package/lib/contracts/uuid.cjs +75 -0
  90. package/lib/contracts/uuid.d.ts +2 -0
  91. package/lib/esm/bin/cli.js +1 -1
  92. package/lib/esm/cli-module.js +153 -41
  93. package/lib/esm/cli-utils.d.ts +2 -0
  94. package/lib/esm/cli-utils.js +60 -2
  95. package/lib/esm/client/FabricClientAdapter.js +1 -1
  96. package/lib/esm/client/FabricClientDispatch.d.ts +1 -1
  97. package/lib/esm/client/FabricClientDispatch.js +2 -1
  98. package/lib/esm/client/FabricClientPaginator.js +1 -1
  99. package/lib/esm/client/FabricClientRepository.js +1 -1
  100. package/lib/esm/client/FabricClientStatement.js +1 -1
  101. package/lib/esm/client/collections/generation.d.ts +24 -5
  102. package/lib/esm/client/collections/generation.js +71 -104
  103. package/lib/esm/client/collections/index.js +1 -1
  104. package/lib/esm/client/constants.js +1 -1
  105. package/lib/esm/client/crypto.js +1 -1
  106. package/lib/esm/client/erc20/FabricERC20ClientRepository.js +1 -1
  107. package/lib/esm/client/erc20/index.js +1 -1
  108. package/lib/esm/client/fabric-fs.js +1 -1
  109. package/lib/esm/client/fabric-hsm.js +1 -1
  110. package/lib/esm/client/index.js +1 -1
  111. package/lib/esm/client/indexes/generation.d.ts +1 -1
  112. package/lib/esm/client/indexes/generation.js +10 -7
  113. package/lib/esm/client/indexes/index.js +1 -1
  114. package/lib/esm/client/logging.js +1 -1
  115. package/lib/esm/client/services/FabricEnrollmentService.js +1 -1
  116. package/lib/esm/client/services/FabricIdentityService.js +1 -1
  117. package/lib/esm/client/services/RegistrationRequestBuilder.js +1 -1
  118. package/lib/esm/client/services/constants.js +1 -1
  119. package/lib/esm/client/services/index.js +1 -1
  120. package/lib/esm/client/types.js +1 -1
  121. package/lib/esm/client/utils.js +1 -1
  122. package/lib/esm/contract/Address.js +1 -1
  123. package/lib/esm/contract/AddressContract.js +1 -1
  124. package/lib/esm/contract/BatchContract.js +1 -1
  125. package/lib/esm/contract/OtherProductContract.d.ts +5 -0
  126. package/lib/esm/contract/OtherProductContract.js +27 -0
  127. package/lib/esm/contract/OtherProductSharedContract.d.ts +5 -0
  128. package/lib/esm/contract/OtherProductSharedContract.js +27 -0
  129. package/lib/esm/contract/Product.js +1 -1
  130. package/lib/esm/contract/ProductContract.js +1 -1
  131. package/lib/esm/contract/User.js +1 -1
  132. package/lib/esm/contract/UserContract.js +1 -1
  133. package/lib/esm/contract/index.js +3 -1
  134. package/lib/esm/contract/models/Audit.d.ts +2 -1
  135. package/lib/esm/contract/models/Audit.js +23 -5
  136. package/lib/esm/contract/models/BaseIdentifiedModel.js +1 -1
  137. package/lib/esm/contract/models/BaseModel.js +1 -1
  138. package/lib/esm/contract/models/Batch.js +3 -3
  139. package/lib/esm/contract/models/Leaflet.js +3 -3
  140. package/lib/esm/contract/models/LeafletFile.js +1 -1
  141. package/lib/esm/contract/models/Market.js +1 -1
  142. package/lib/esm/contract/models/OtherProduct.d.ts +12 -0
  143. package/lib/esm/contract/models/OtherProduct.js +71 -0
  144. package/lib/esm/contract/models/OtherProductShared.d.ts +12 -0
  145. package/lib/esm/contract/models/OtherProductShared.js +72 -0
  146. package/lib/esm/contract/models/Product.js +5 -5
  147. package/lib/esm/contract/models/ProductStrength.js +1 -1
  148. package/lib/esm/contract/models/constants.js +1 -1
  149. package/lib/esm/contract/models/decorators.d.ts +8 -5
  150. package/lib/esm/contract/models/decorators.js +16 -9
  151. package/lib/esm/contract/models/gtin.js +1 -1
  152. package/lib/esm/contracts/ContractAdapter.js +1 -1
  153. package/lib/esm/contracts/ContractContext.js +1 -1
  154. package/lib/esm/contracts/ContractPrivateDataAdapter.js +1 -1
  155. package/lib/esm/contracts/FabricConstruction.js +2 -2
  156. package/lib/esm/contracts/FabricContractPaginator.js +1 -1
  157. package/lib/esm/contracts/FabricContractRepository.d.ts +3 -1
  158. package/lib/esm/contracts/FabricContractRepository.js +1 -1
  159. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js +1 -1
  160. package/lib/esm/contracts/FabricContractSequence.js +5 -5
  161. package/lib/esm/contracts/FabricContractStatement.js +1 -1
  162. package/lib/esm/contracts/PrivateSequence.js +1 -1
  163. package/lib/esm/contracts/crud/crud-contract.js +1 -1
  164. package/lib/esm/contracts/crud/index.js +1 -1
  165. package/lib/esm/contracts/crud/serialized-crud-contract.js +1 -1
  166. package/lib/esm/contracts/erc20/erc20contract.js +1 -1
  167. package/lib/esm/contracts/erc20/index.js +1 -1
  168. package/lib/esm/contracts/erc20/models.js +1 -1
  169. package/lib/esm/contracts/index.d.ts +1 -0
  170. package/lib/esm/contracts/index.js +2 -1
  171. package/lib/esm/contracts/logging.js +1 -1
  172. package/lib/esm/contracts/overrides.d.ts +1 -0
  173. package/lib/esm/contracts/overrides.js +6 -0
  174. package/lib/esm/contracts/private-data.js +1 -1
  175. package/lib/esm/contracts/types.d.ts +1 -0
  176. package/lib/esm/contracts/types.js +1 -1
  177. package/lib/esm/contracts/uuid.d.ts +2 -0
  178. package/lib/esm/contracts/uuid.js +38 -0
  179. package/lib/esm/index.js +1 -1
  180. package/lib/esm/shared/ClientSerializer.js +1 -1
  181. package/lib/esm/shared/DeterministicSerializer.js +1 -1
  182. package/lib/esm/shared/SimpleDeterministicSerializer.js +1 -1
  183. package/lib/esm/shared/constants.d.ts +4 -3
  184. package/lib/esm/shared/constants.js +4 -3
  185. package/lib/esm/shared/decorators.d.ts +15 -2
  186. package/lib/esm/shared/decorators.js +115 -70
  187. package/lib/esm/shared/erc20/erc20-constants.js +1 -1
  188. package/lib/esm/shared/erc20/index.js +1 -1
  189. package/lib/esm/shared/errors.js +1 -1
  190. package/lib/esm/shared/events.js +1 -1
  191. package/lib/esm/shared/fabric-types.js +1 -1
  192. package/lib/esm/shared/index.js +1 -1
  193. package/lib/esm/shared/interfaces/Checkable.js +1 -1
  194. package/lib/esm/shared/interfaces/index.js +1 -1
  195. package/lib/esm/shared/math.js +1 -1
  196. package/lib/esm/shared/model/FabricBaseModel.js +1 -1
  197. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js +1 -1
  198. package/lib/esm/shared/model/Identity.js +1 -1
  199. package/lib/esm/shared/model/IdentityCredentials.js +1 -1
  200. package/lib/esm/shared/model/index.js +1 -1
  201. package/lib/esm/shared/overrides/Model.d.ts +7 -0
  202. package/lib/esm/shared/overrides/Model.js +1 -1
  203. package/lib/esm/shared/overrides/index.js +1 -1
  204. package/lib/esm/shared/overrides/overrides.js +29 -16
  205. package/lib/esm/shared/types.js +1 -1
  206. package/lib/esm/version.d.ts +1 -1
  207. package/lib/esm/version.js +2 -2
  208. package/lib/index.cjs +1 -1
  209. package/lib/shared/ClientSerializer.cjs +1 -1
  210. package/lib/shared/DeterministicSerializer.cjs +1 -1
  211. package/lib/shared/SimpleDeterministicSerializer.cjs +1 -1
  212. package/lib/shared/constants.cjs +4 -3
  213. package/lib/shared/constants.d.ts +4 -3
  214. package/lib/shared/decorators.cjs +119 -69
  215. package/lib/shared/decorators.d.ts +15 -2
  216. package/lib/shared/erc20/erc20-constants.cjs +1 -1
  217. package/lib/shared/erc20/index.cjs +1 -1
  218. package/lib/shared/errors.cjs +1 -1
  219. package/lib/shared/events.cjs +1 -1
  220. package/lib/shared/fabric-types.cjs +1 -1
  221. package/lib/shared/index.cjs +1 -1
  222. package/lib/shared/interfaces/Checkable.cjs +1 -1
  223. package/lib/shared/interfaces/index.cjs +1 -1
  224. package/lib/shared/math.cjs +1 -1
  225. package/lib/shared/model/FabricBaseModel.cjs +1 -1
  226. package/lib/shared/model/FabricIdentifiedBaseModel.cjs +1 -1
  227. package/lib/shared/model/Identity.cjs +1 -1
  228. package/lib/shared/model/IdentityCredentials.cjs +1 -1
  229. package/lib/shared/model/index.cjs +1 -1
  230. package/lib/shared/overrides/Model.cjs +1 -1
  231. package/lib/shared/overrides/Model.d.ts +7 -0
  232. package/lib/shared/overrides/index.cjs +1 -1
  233. package/lib/shared/overrides/overrides.cjs +29 -16
  234. package/lib/shared/types.cjs +1 -1
  235. package/lib/version.cjs +2 -2
  236. package/lib/version.d.ts +1 -1
  237. package/package.json +4 -3
  238. package/dist/for-fabric.cjs.map +0 -1
  239. package/dist/for-fabric.js.map +0 -1
  240. package/lib/bin/cli.js.map +0 -1
  241. package/lib/cli-module.js.map +0 -1
  242. package/lib/cli-utils.js.map +0 -1
  243. package/lib/client/FabricClientAdapter.js.map +0 -1
  244. package/lib/client/FabricClientDispatch.js.map +0 -1
  245. package/lib/client/FabricClientPaginator.js.map +0 -1
  246. package/lib/client/FabricClientRepository.js.map +0 -1
  247. package/lib/client/FabricClientStatement.js.map +0 -1
  248. package/lib/client/collections/generation.js.map +0 -1
  249. package/lib/client/collections/index.js.map +0 -1
  250. package/lib/client/constants.js.map +0 -1
  251. package/lib/client/crypto.js.map +0 -1
  252. package/lib/client/erc20/FabricERC20ClientRepository.js.map +0 -1
  253. package/lib/client/erc20/index.js.map +0 -1
  254. package/lib/client/fabric-fs.js.map +0 -1
  255. package/lib/client/fabric-hsm.js.map +0 -1
  256. package/lib/client/index.js.map +0 -1
  257. package/lib/client/indexes/generation.js.map +0 -1
  258. package/lib/client/indexes/index.js.map +0 -1
  259. package/lib/client/logging.js.map +0 -1
  260. package/lib/client/services/FabricEnrollmentService.js.map +0 -1
  261. package/lib/client/services/FabricIdentityService.js.map +0 -1
  262. package/lib/client/services/RegistrationRequestBuilder.js.map +0 -1
  263. package/lib/client/services/constants.js.map +0 -1
  264. package/lib/client/services/index.js.map +0 -1
  265. package/lib/client/types.js.map +0 -1
  266. package/lib/client/utils.js.map +0 -1
  267. package/lib/contract/Address.js.map +0 -1
  268. package/lib/contract/AddressContract.js.map +0 -1
  269. package/lib/contract/BatchContract.js.map +0 -1
  270. package/lib/contract/Product.js.map +0 -1
  271. package/lib/contract/ProductContract.js.map +0 -1
  272. package/lib/contract/User.js.map +0 -1
  273. package/lib/contract/UserContract.js.map +0 -1
  274. package/lib/contract/index.js.map +0 -1
  275. package/lib/contract/models/Audit.js.map +0 -1
  276. package/lib/contract/models/BaseIdentifiedModel.js.map +0 -1
  277. package/lib/contract/models/BaseModel.js.map +0 -1
  278. package/lib/contract/models/Batch.js.map +0 -1
  279. package/lib/contract/models/Leaflet.js.map +0 -1
  280. package/lib/contract/models/LeafletFile.js.map +0 -1
  281. package/lib/contract/models/Market.js.map +0 -1
  282. package/lib/contract/models/Product.js.map +0 -1
  283. package/lib/contract/models/ProductStrength.js.map +0 -1
  284. package/lib/contract/models/constants.js.map +0 -1
  285. package/lib/contract/models/decorators.js.map +0 -1
  286. package/lib/contract/models/gtin.js.map +0 -1
  287. package/lib/contracts/ContractAdapter.js.map +0 -1
  288. package/lib/contracts/ContractContext.js.map +0 -1
  289. package/lib/contracts/ContractPrivateDataAdapter.js.map +0 -1
  290. package/lib/contracts/FabricConstruction.js.map +0 -1
  291. package/lib/contracts/FabricContractPaginator.js.map +0 -1
  292. package/lib/contracts/FabricContractRepository.js.map +0 -1
  293. package/lib/contracts/FabricContractRepositoryObservableHandler.js.map +0 -1
  294. package/lib/contracts/FabricContractSequence.js.map +0 -1
  295. package/lib/contracts/FabricContractStatement.js.map +0 -1
  296. package/lib/contracts/PrivateSequence.js.map +0 -1
  297. package/lib/contracts/crud/crud-contract.js.map +0 -1
  298. package/lib/contracts/crud/index.js.map +0 -1
  299. package/lib/contracts/crud/serialized-crud-contract.js.map +0 -1
  300. package/lib/contracts/erc20/erc20contract.js.map +0 -1
  301. package/lib/contracts/erc20/index.js.map +0 -1
  302. package/lib/contracts/erc20/models.js.map +0 -1
  303. package/lib/contracts/index.js.map +0 -1
  304. package/lib/contracts/logging.js.map +0 -1
  305. package/lib/contracts/private-data.js.map +0 -1
  306. package/lib/contracts/types.js.map +0 -1
  307. package/lib/esm/bin/cli.js.map +0 -1
  308. package/lib/esm/cli-module.js.map +0 -1
  309. package/lib/esm/cli-utils.js.map +0 -1
  310. package/lib/esm/client/FabricClientAdapter.js.map +0 -1
  311. package/lib/esm/client/FabricClientDispatch.js.map +0 -1
  312. package/lib/esm/client/FabricClientPaginator.js.map +0 -1
  313. package/lib/esm/client/FabricClientRepository.js.map +0 -1
  314. package/lib/esm/client/FabricClientStatement.js.map +0 -1
  315. package/lib/esm/client/collections/generation.js.map +0 -1
  316. package/lib/esm/client/collections/index.js.map +0 -1
  317. package/lib/esm/client/constants.js.map +0 -1
  318. package/lib/esm/client/crypto.js.map +0 -1
  319. package/lib/esm/client/erc20/FabricERC20ClientRepository.js.map +0 -1
  320. package/lib/esm/client/erc20/index.js.map +0 -1
  321. package/lib/esm/client/fabric-fs.js.map +0 -1
  322. package/lib/esm/client/fabric-hsm.js.map +0 -1
  323. package/lib/esm/client/index.js.map +0 -1
  324. package/lib/esm/client/indexes/generation.js.map +0 -1
  325. package/lib/esm/client/indexes/index.js.map +0 -1
  326. package/lib/esm/client/logging.js.map +0 -1
  327. package/lib/esm/client/services/FabricEnrollmentService.js.map +0 -1
  328. package/lib/esm/client/services/FabricIdentityService.js.map +0 -1
  329. package/lib/esm/client/services/RegistrationRequestBuilder.js.map +0 -1
  330. package/lib/esm/client/services/constants.js.map +0 -1
  331. package/lib/esm/client/services/index.js.map +0 -1
  332. package/lib/esm/client/types.js.map +0 -1
  333. package/lib/esm/client/utils.js.map +0 -1
  334. package/lib/esm/contract/Address.js.map +0 -1
  335. package/lib/esm/contract/AddressContract.js.map +0 -1
  336. package/lib/esm/contract/BatchContract.js.map +0 -1
  337. package/lib/esm/contract/Product.js.map +0 -1
  338. package/lib/esm/contract/ProductContract.js.map +0 -1
  339. package/lib/esm/contract/User.js.map +0 -1
  340. package/lib/esm/contract/UserContract.js.map +0 -1
  341. package/lib/esm/contract/index.js.map +0 -1
  342. package/lib/esm/contract/models/Audit.js.map +0 -1
  343. package/lib/esm/contract/models/BaseIdentifiedModel.js.map +0 -1
  344. package/lib/esm/contract/models/BaseModel.js.map +0 -1
  345. package/lib/esm/contract/models/Batch.js.map +0 -1
  346. package/lib/esm/contract/models/Leaflet.js.map +0 -1
  347. package/lib/esm/contract/models/LeafletFile.js.map +0 -1
  348. package/lib/esm/contract/models/Market.js.map +0 -1
  349. package/lib/esm/contract/models/Product.js.map +0 -1
  350. package/lib/esm/contract/models/ProductStrength.js.map +0 -1
  351. package/lib/esm/contract/models/constants.js.map +0 -1
  352. package/lib/esm/contract/models/decorators.js.map +0 -1
  353. package/lib/esm/contract/models/gtin.js.map +0 -1
  354. package/lib/esm/contracts/ContractAdapter.js.map +0 -1
  355. package/lib/esm/contracts/ContractContext.js.map +0 -1
  356. package/lib/esm/contracts/ContractPrivateDataAdapter.js.map +0 -1
  357. package/lib/esm/contracts/FabricConstruction.js.map +0 -1
  358. package/lib/esm/contracts/FabricContractPaginator.js.map +0 -1
  359. package/lib/esm/contracts/FabricContractRepository.js.map +0 -1
  360. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js.map +0 -1
  361. package/lib/esm/contracts/FabricContractSequence.js.map +0 -1
  362. package/lib/esm/contracts/FabricContractStatement.js.map +0 -1
  363. package/lib/esm/contracts/PrivateSequence.js.map +0 -1
  364. package/lib/esm/contracts/crud/crud-contract.js.map +0 -1
  365. package/lib/esm/contracts/crud/index.js.map +0 -1
  366. package/lib/esm/contracts/crud/serialized-crud-contract.js.map +0 -1
  367. package/lib/esm/contracts/erc20/erc20contract.js.map +0 -1
  368. package/lib/esm/contracts/erc20/index.js.map +0 -1
  369. package/lib/esm/contracts/erc20/models.js.map +0 -1
  370. package/lib/esm/contracts/index.js.map +0 -1
  371. package/lib/esm/contracts/logging.js.map +0 -1
  372. package/lib/esm/contracts/private-data.js.map +0 -1
  373. package/lib/esm/contracts/types.js.map +0 -1
  374. package/lib/esm/index.js.map +0 -1
  375. package/lib/esm/shared/ClientSerializer.js.map +0 -1
  376. package/lib/esm/shared/DeterministicSerializer.js.map +0 -1
  377. package/lib/esm/shared/SimpleDeterministicSerializer.js.map +0 -1
  378. package/lib/esm/shared/constants.js.map +0 -1
  379. package/lib/esm/shared/decorators.js.map +0 -1
  380. package/lib/esm/shared/erc20/erc20-constants.js.map +0 -1
  381. package/lib/esm/shared/erc20/index.js.map +0 -1
  382. package/lib/esm/shared/errors.js.map +0 -1
  383. package/lib/esm/shared/events.js.map +0 -1
  384. package/lib/esm/shared/fabric-types.js.map +0 -1
  385. package/lib/esm/shared/index.js.map +0 -1
  386. package/lib/esm/shared/interfaces/Checkable.js.map +0 -1
  387. package/lib/esm/shared/interfaces/index.js.map +0 -1
  388. package/lib/esm/shared/math.js.map +0 -1
  389. package/lib/esm/shared/model/FabricBaseModel.js.map +0 -1
  390. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js.map +0 -1
  391. package/lib/esm/shared/model/Identity.js.map +0 -1
  392. package/lib/esm/shared/model/IdentityCredentials.js.map +0 -1
  393. package/lib/esm/shared/model/index.js.map +0 -1
  394. package/lib/esm/shared/overrides/Model.js.map +0 -1
  395. package/lib/esm/shared/overrides/index.js.map +0 -1
  396. package/lib/esm/shared/overrides/overrides.js.map +0 -1
  397. package/lib/esm/shared/types.js.map +0 -1
  398. package/lib/esm/version.js.map +0 -1
  399. package/lib/index.js.map +0 -1
  400. package/lib/shared/ClientSerializer.js.map +0 -1
  401. package/lib/shared/DeterministicSerializer.js.map +0 -1
  402. package/lib/shared/SimpleDeterministicSerializer.js.map +0 -1
  403. package/lib/shared/constants.js.map +0 -1
  404. package/lib/shared/decorators.js.map +0 -1
  405. package/lib/shared/erc20/erc20-constants.js.map +0 -1
  406. package/lib/shared/erc20/index.js.map +0 -1
  407. package/lib/shared/errors.js.map +0 -1
  408. package/lib/shared/events.js.map +0 -1
  409. package/lib/shared/fabric-types.js.map +0 -1
  410. package/lib/shared/index.js.map +0 -1
  411. package/lib/shared/interfaces/Checkable.js.map +0 -1
  412. package/lib/shared/interfaces/index.js.map +0 -1
  413. package/lib/shared/math.js.map +0 -1
  414. package/lib/shared/model/FabricBaseModel.js.map +0 -1
  415. package/lib/shared/model/FabricIdentifiedBaseModel.js.map +0 -1
  416. package/lib/shared/model/Identity.js.map +0 -1
  417. package/lib/shared/model/IdentityCredentials.js.map +0 -1
  418. package/lib/shared/model/index.js.map +0 -1
  419. package/lib/shared/overrides/Model.js.map +0 -1
  420. package/lib/shared/overrides/index.js.map +0 -1
  421. package/lib/shared/overrides/overrides.js.map +0 -1
  422. package/lib/shared/types.js.map +0 -1
  423. package/lib/version.js.map +0 -1
package/lib/bin/cli.cjs CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  "use strict";
2
3
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -5,4 +6,4 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
6
  Object.defineProperty(exports, "__esModule", { value: true });
6
7
  const cli_module_1 = __importDefault(require("./../cli-module.cjs"));
7
8
  (0, cli_module_1.default)().parse(process.argv);
8
- //# sourceMappingURL=cli.js.map
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi9jbGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxRUFBbUM7QUFFbkMsSUFBQSxvQkFBTSxHQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmYWJyaWMgZnJvbSBcIi4uL2NsaS1tb2R1bGVcIjtcblxuZmFicmljKCkucGFyc2UocHJvY2Vzcy5hcmd2KTtcbiJdfQ==
@@ -17,14 +17,19 @@ const indexes_1 = require("./client/indexes/index.cjs");
17
17
  const decorator_validation_1 = require("@decaf-ts/decorator-validation");
18
18
  const cli_utils_1 = require("./cli-utils.cjs");
19
19
  require("./shared/overrides/index.cjs");
20
+ const typescript_1 = __importDefault(require("typescript"));
21
+ const index_1 = require("./client/collections/index.cjs");
22
+ const decoration_1 = require("@decaf-ts/decoration");
20
23
  const logger = logging_1.Logging.for("fabric");
21
24
  const compileCommand = new commander_1.Command()
22
25
  .name("compile-contract")
23
26
  .description("Creates a global contract")
24
27
  .option("--dev", "compiles contracts without minification", false)
25
28
  .option("--debug", "makes attaching debugger possible", false)
26
- .option("--ccaas", "makes attaching debugger possible", false)
29
+ .option("--ccaas", "Ajusts the package commands to be deployed as ccaas", false)
27
30
  .option("--name <String>", "contract name", "global-contract")
31
+ .option("--bundle", "Bundles with rollup instead of using tsc", false)
32
+ .option("--ts-config-file <string>", "relative path to the ts config file based on cwd or absolute path", "./tsconfig.json")
28
33
  .option("--description <String>", "contract description", "Global contract implementation")
29
34
  .option("--strip-contract-name", "strip contract name from output", false)
30
35
  .option("--input <String>", "input folder for contracts", "lib/contracts")
@@ -46,37 +51,53 @@ const compileCommand = new commander_1.Command()
46
51
  // eslint-disable-next-line prefer-const
47
52
  stripContractName,
48
53
  // eslint-disable-next-line prefer-const
49
- ccaas, } = options;
54
+ ccaas,
55
+ // eslint-disable-next-line prefer-const
56
+ bundle, tsConfigFile, } = options;
50
57
  const log = logger.for("compile-contract");
51
58
  log.debug(`running with options: ${JSON.stringify(options)} for ${pkg.name} version ${version}`);
59
+ tsConfigFile = path_1.default.isAbsolute(tsConfigFile)
60
+ ? tsConfigFile
61
+ : path_1.default.join(process.cwd(), tsConfigFile);
52
62
  output = stripContractName ? output : path_1.default.join(output, name);
53
63
  log.info(`Deleting existing output folder (if exists) under ${output}`);
54
64
  (0, child_process_1.execSync)(`rm -rf ${output}`);
55
- log.info(`bundling contract from ${input}`);
56
- const bundle = await (0, rollup_1.rollup)({
57
- input: `${input}/index.ts`,
58
- plugins: [
59
- (0, plugin_replace_1.default)({
60
- preventAssignment: true,
61
- delimiters: ["", ""],
62
- values: { "##VERSION##": version, "##PACKAGE##": pkg.name },
63
- }),
64
- (0, plugin_typescript_1.default)({
65
- tsconfig: "./tsconfig.json",
66
- compilerOptions: {
67
- outDir: output,
68
- },
69
- module: "esnext",
70
- declaration: false,
71
- }),
72
- ],
73
- });
74
- log.info(`withing contract to ${output} with name ${(0, logging_1.toPascalCase)(name)}.js`);
75
- await bundle.write({
76
- file: `${output}/${(0, logging_1.toPascalCase)(name)}.js`,
77
- format: "umd",
78
- name: `${(0, logging_1.toPascalCase)(name)}.js`,
79
- });
65
+ if (bundle) {
66
+ log.info(`bundling contract from ${input}`);
67
+ const bundle = await (0, rollup_1.rollup)({
68
+ input: `${input}/index.ts`,
69
+ plugins: [
70
+ (0, plugin_replace_1.default)({
71
+ preventAssignment: true,
72
+ delimiters: ["", ""],
73
+ values: { "##VERSION##": version, "##PACKAGE##": pkg.name },
74
+ }),
75
+ (0, plugin_typescript_1.default)({
76
+ tsconfig: tsConfigFile,
77
+ compilerOptions: {
78
+ outDir: output,
79
+ },
80
+ module: "esnext",
81
+ declaration: false,
82
+ }),
83
+ ],
84
+ });
85
+ log.info(`withing contract to ${output} with name ${(0, logging_1.toPascalCase)(name)}.js`);
86
+ await bundle.write({
87
+ file: `${output}/${(0, logging_1.toPascalCase)(name)}.js`,
88
+ format: "umd",
89
+ name: `${(0, logging_1.toPascalCase)(name)}.js`,
90
+ });
91
+ }
92
+ else {
93
+ (0, cli_utils_1.compileWithTsconfigOverrides)(tsConfigFile, {
94
+ outDir: output,
95
+ module: typescript_1.default.ModuleKind.ESNext,
96
+ declaration: false,
97
+ sourceMap: false,
98
+ // rootDir: input,
99
+ });
100
+ }
80
101
  const scripts = {
81
102
  start: (0, cli_utils_1.getContractStartCommand)(debug, ccaas),
82
103
  "start:dev": "fabric-chaincode-node start --tls.enabled false",
@@ -91,7 +112,9 @@ const compileCommand = new commander_1.Command()
91
112
  delete contractPackage.type;
92
113
  delete contractPackage.types;
93
114
  delete contractPackage.exports;
94
- contractPackage.main = `${(0, logging_1.toPascalCase)(name)}.js`;
115
+ contractPackage.main = bundle
116
+ ? `${(0, logging_1.toPascalCase)(name)}.js`
117
+ : `${input}/index.js`;
95
118
  fs_1.default.writeFileSync(path_1.default.join(output, "package.json"), JSON.stringify(contractPackage));
96
119
  log.info(`Installing and shrinkwrapping dependencies`);
97
120
  (0, child_process_1.execSync)(`npm install`, { cwd: output });
@@ -145,14 +168,32 @@ const extractCollections = new commander_1.Command()
145
168
  .option("--file [String]", "the model file")
146
169
  .option("--folder [String]", "the model folder")
147
170
  .option("--outDir <String>", "the outdir. should match your contract folder")
171
+ .option("--mspIds <String>", "single mspId or stringified array")
172
+ .option("--mainMspId <String>", "single mspId")
173
+ .option("--overrides [String]", "stringified override object {requiredPeerCount: number, maxPeerCount: number, blockToLive: number, memberOnlyRead: number, memberOnlyWrite: number, endorsementPolicy: {}}")
148
174
  .description("Creates a the JSON index files to be submitted to along with the contract")
149
175
  .action(async (options) => {
150
176
  const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(process.cwd(), "package.json"), "utf-8"));
151
177
  const version = pkg.version;
152
- const log = logger.for("extract-indexes");
178
+ const log = logger.for("extract-collections");
153
179
  log.debug(`running with options: ${JSON.stringify(options)} for ${pkg.name} version ${version}`);
154
180
  // eslint-disable-next-line prefer-const
155
- let { file, folder, outDir } = options;
181
+ let { file, folder, outDir, mspIds, overrides, mainMspId } = options;
182
+ try {
183
+ try {
184
+ mspIds = mspIds ? JSON.parse(mspIds) : undefined;
185
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
186
+ }
187
+ catch (e) {
188
+ // do nothing
189
+ }
190
+ overrides = overrides
191
+ ? JSON.parse(overrides)
192
+ : { privateCols: {}, sharedCols: {} };
193
+ }
194
+ catch (e) {
195
+ throw new db_decorators_1.SerializationError(`Unable to extract mspids or overrides: ${e}`);
196
+ }
156
197
  const models = [];
157
198
  if (file) {
158
199
  models.push(...(0, indexes_1.readModelFile)(file));
@@ -161,17 +202,86 @@ const extractCollections = new commander_1.Command()
161
202
  log.info(`Loading models from ${folder}...`);
162
203
  models.push(...(await (0, indexes_1.readModelFolders)(folder)));
163
204
  }
164
- const result = {};
165
205
  if (!file && !folder)
166
206
  throw new db_decorators_1.InternalError(`Must pass a file or a folder`);
167
- const privateOrShared = models.filter((m) => decorator_validation_1.Model.isPrivate(m) || decorator_validation_1.Model.isShared(m));
168
- for (const m of privateOrShared) {
169
- log.verbose(`Extracting collections for table ${decorator_validation_1.Model.tableName(m)}`);
170
- (0, indexes_1.generateModelIndexes)(m, result);
207
+ const cols = await Promise.all(models.map(async (clazz) => {
208
+ const tableName = decorator_validation_1.Model.tableName(clazz);
209
+ const meta = decoration_1.Metadata.get(clazz);
210
+ const mirrorMeta = decorator_validation_1.Model.mirroredAt(clazz);
211
+ console.log(tableName);
212
+ const collections = {};
213
+ for (const msp of mspIds) {
214
+ collections[msp] = await (0, index_1.extractCollections)(clazz, [msp, mainMspId], {},
215
+ // {
216
+ // sharedCols: Object.assign({}, overrides.sharedCols),
217
+ // privateCols: Object.assign({}, overrides.privateCols),
218
+ // },
219
+ !!mirrorMeta);
220
+ }
221
+ let mirrorCollection = undefined;
222
+ if (mirrorMeta) {
223
+ collections[mainMspId] = collections[mainMspId] || {};
224
+ Object.keys(collections).forEach((msp) => {
225
+ collections[mainMspId].privates = collections[msp].privates?.filter((p) => {
226
+ if (p.name !== mirrorMeta.resolver)
227
+ return true;
228
+ mirrorCollection = p;
229
+ return false;
230
+ });
231
+ });
232
+ }
233
+ const privatesCount = Object.values(collections)
234
+ .map((c) => c.privates)
235
+ .flat().length;
236
+ if (privatesCount)
237
+ log
238
+ .for(decorator_validation_1.Model.tableName(clazz))
239
+ .info(`Found ${privatesCount} private collections to create`);
240
+ const sharedCount = Object.values(collections)
241
+ .map((c) => c.shared)
242
+ .flat().length;
243
+ log
244
+ .for(decorator_validation_1.Model.tableName(clazz))
245
+ .info(`Found ${sharedCount} shared collections to create`);
246
+ if (mirrorCollection)
247
+ log
248
+ .for(decorator_validation_1.Model.tableName(clazz))
249
+ .info(`Found one mirror collection ${mirrorMeta?.resolver}`);
250
+ const colList = Object.values(collections)
251
+ .map((c) => [...(c.privates || []), ...(c.shared || [])])
252
+ .flat();
253
+ let indexes;
254
+ if (colList.length) {
255
+ log
256
+ .for(decorator_validation_1.Model.tableName(clazz))
257
+ .verbose(`generating indexes for collections`);
258
+ indexes = (0, indexes_1.generateModelIndexes)(clazz);
259
+ log
260
+ .for(decorator_validation_1.Model.tableName(clazz))
261
+ .info(`found ${indexes.length} indexes`);
262
+ }
263
+ return {
264
+ indexes: indexes,
265
+ collections: colList,
266
+ mirror: mirrorCollection,
267
+ };
268
+ }));
269
+ const collectionsTo = [
270
+ ...cols.map((c) => c.collections).flat(),
271
+ ...cols.filter((c) => c.mirror).map((c) => c.mirror),
272
+ ];
273
+ if (collectionsTo.length) {
274
+ (0, index_1.writeCollections)(collectionsTo, outDir);
275
+ log.info(`Stored ${collectionsTo.length} collections to ${outDir}/collection_config.json`);
276
+ cols.forEach((c, i) => {
277
+ const { indexes, collections, mirror } = c;
278
+ const toIndex = [...collections, mirror].filter(Boolean);
279
+ toIndex.forEach((i) => {
280
+ (0, indexes_1.writeIndexes)(indexes, outDir, i.name);
281
+ log.info(`Stored ${toIndex.length} indexes to collection ${i.name}`);
282
+ });
283
+ });
171
284
  }
172
- log.verbose(`Found ${Object.keys(result).length} indexes to create`);
173
- log.debug(`Indexes: ${JSON.stringify(result)}`);
174
- (0, indexes_1.writeIndexes)(Object.values(result), outDir);
175
285
  });
176
286
  const ensureInfra = new commander_1.Command()
177
287
  .name("await-infra")
@@ -204,6 +314,7 @@ const deployContract = new commander_1.Command()
204
314
  const version = pkg.version;
205
315
  const log = logger.for("deploy-contract");
206
316
  log.debug(`running with options: ${JSON.stringify(options)} for ${pkg.name} version ${version}`);
317
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
207
318
  const { name, input, peers, trackerFolder, incrementVersion } = options;
208
319
  const peerIds = peers.split(",");
209
320
  const countPath = path_1.default.resolve(path_1.default.join(trackerFolder, `${name}.count`));
@@ -262,7 +373,8 @@ fabricCmd.addCommand(extractIndexes);
262
373
  fabricCmd.addCommand(ensureInfra);
263
374
  fabricCmd.addCommand(deployContract);
264
375
  fabricCmd.addCommand(getCryptoMaterial);
376
+ fabricCmd.addCommand(extractCollections);
265
377
  function fabric() {
266
378
  return fabricCmd;
267
379
  }
268
- //# sourceMappingURL=cli-module.js.map
380
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGktbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBd2hCQSx5QkFFQztBQTFoQkQseUNBQW9DO0FBQ3BDLCtDQUEwRDtBQUMxRCxpREFBeUM7QUFDekMsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixtQ0FBZ0M7QUFDaEMsNEVBQTZDO0FBQzdDLGtGQUFtRDtBQUNuRCwyREFBNEU7QUFDNUUsd0RBSzBCO0FBQzFCLHlFQUF1RDtBQUN2RCwrQ0FRcUI7QUFDckIsd0NBQTRCO0FBQzVCLDREQUE0QjtBQUM1QiwwREFLb0M7QUFDcEMscURBQWdEO0FBRWhELE1BQU0sTUFBTSxHQUFHLGlCQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRXJDLE1BQU0sY0FBYyxHQUFHLElBQUksbUJBQU8sRUFBRTtLQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7S0FDeEIsV0FBVyxDQUFDLDJCQUEyQixDQUFDO0tBQ3hDLE1BQU0sQ0FBQyxPQUFPLEVBQUUseUNBQXlDLEVBQUUsS0FBSyxDQUFDO0tBQ2pFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsbUNBQW1DLEVBQUUsS0FBSyxDQUFDO0tBQzdELE1BQU0sQ0FDTCxTQUFTLEVBQ1QscURBQXFELEVBQ3JELEtBQUssQ0FDTjtLQUNBLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLENBQUM7S0FDN0QsTUFBTSxDQUFDLFVBQVUsRUFBRSwwQ0FBMEMsRUFBRSxLQUFLLENBQUM7S0FDckUsTUFBTSxDQUNMLDJCQUEyQixFQUMzQixtRUFBbUUsRUFDbkUsaUJBQWlCLENBQ2xCO0tBQ0EsTUFBTSxDQUNMLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsZ0NBQWdDLENBQ2pDO0tBQ0EsTUFBTSxDQUFDLHVCQUF1QixFQUFFLGlDQUFpQyxFQUFFLEtBQUssQ0FBQztLQUN6RSxNQUFNLENB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YyxDQUFDLENBQUM7QUFDckMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNsQyxTQUFTLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUN4QyxTQUFTLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFekMsU0FBd0IsTUFBTTtJQUM1QixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IExvZ2dpbmcsIHRvUGFzY2FsQ2FzZSB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHJvbGx1cCB9IGZyb20gXCJyb2xsdXBcIjtcbmltcG9ydCByZXBsYWNlIGZyb20gXCJAcm9sbHVwL3BsdWdpbi1yZXBsYWNlXCI7XG5pbXBvcnQgdHlwZXNjcmlwdCBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciwgU2VyaWFsaXphdGlvbkVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQge1xuICBnZW5lcmF0ZU1vZGVsSW5kZXhlcyxcbiAgcmVhZE1vZGVsRmlsZSxcbiAgcmVhZE1vZGVsRm9sZGVycyxcbiAgd3JpdGVJbmRleGVzLFxufSBmcm9tIFwiLi9jbGllbnQvaW5kZXhlc1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQge1xuICBhcHByb3ZlQ29udHJhY3QsXG4gIGVuc3VyZUluZnJhc3RydWN0dXJlQm9vdGVkLFxuICBpbnN0YWxsQ29udHJhY3QsXG4gIHBhY2thZ2VDb250cmFjdCxcbiAgY29tbWl0Q2hhaW5jb2RlLFxuICBnZXRDb250cmFjdFN0YXJ0Q29tbWFuZCxcbiAgY29tcGlsZVdpdGhUc2NvbmZpZ092ZXJyaWRlcyxcbn0gZnJvbSBcIi4vY2xpLXV0aWxzXCI7XG5pbXBvcnQgXCIuL3NoYXJlZC9vdmVycmlkZXNcIjtcbmltcG9ydCB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuaW1wb3J0IHtcbiAgZXh0cmFjdENvbGxlY3Rpb25zIGFzIGV4Q29sbGVjdGlvbnMsXG4gIEluZGV4LFxuICBQcml2YXRlQ29sbGVjdGlvbixcbiAgd3JpdGVDb2xsZWN0aW9ucyxcbn0gZnJvbSBcIi4vY2xpZW50L2NvbGxlY3Rpb25zL2luZGV4XCI7XG5pbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuXG5jb25zdCBsb2dnZXIgPSBMb2dnaW5nLmZvcihcImZhYnJpY1wiKTtcblxuY29uc3QgY29tcGlsZUNvbW1hbmQgPSBuZXcgQ29tbWFuZCgpXG4gIC5uYW1lKFwiY29tcGlsZS1jb250cmFjdFwiKVxuICAuZGVzY3JpcHRpb24oXCJDcmVhdGVzIGEgZ2xvYmFsIGNvbnRyYWN0XCIpXG4gIC5vcHRpb24oXCItLWRldlwiLCBcImNvbXBpbGVzIGNvbnRyYWN0cyB3aXRob3V0IG1pbmlmaWNhdGlvblwiLCBmYWxzZSlcbiAgLm9wdGlvbihcIi0tZGVidWdcIiwgXCJtYWtlcyBhdHRhY2hpbmcgZGVidWdnZXIgcG9zc2libGVcIiwgZmFsc2UpXG4gIC5vcHRpb24oXG4gICAgXCItLWNjYWFzXCIsXG4gICAgXCJBanVzdHMgdGhlIHBhY2thZ2UgY29tbWFuZHMgdG8gYmUgZGVwbG95ZWQgYXMgY2NhYXNcIixcbiAgICBmYWxzZVxuICApXG4gIC5vcHRpb24oXCItLW5hbWUgPFN0cmluZz5cIiwgXCJjb250cmFjdCBuYW1lXCIsIFwiZ2xvYmFsLWNvbnRyYWN0XCIpXG4gIC5vcHRpb24oXCItLWJ1bmRsZVwiLCBcIkJ1bmRsZXMgd2l0aCByb2xsdXAgaW5zdGVhZCBvZiB1c2luZyB0c2NcIiwgZmFsc2UpXG4gIC5vcHRpb24oXG4gICAgXCItLXRzLWNvbmZpZy1maWxlIDxzdHJpbmc+XCIsXG4gICAgXCJyZWxhdGl2ZSBwYXRoIHRvIHRoZSB0cyBjb25maWcgZmlsZSBiYXNlZCBvbiBjd2Qgb3IgYWJzb2x1dGUgcGF0aFwiLFxuICAgIFwiLi90c2NvbmZpZy5qc29uXCJcbiAgKVxuICAub3B0aW9uKFxuICAgIFwiLS1kZXNjcmlwdGlvbiA8U3RyaW5nPlwiLFxuICAgIFwiY29udHJhY3QgZGVzY3JpcHRpb25cIixcbiAgICBcIkdsb2JhbCBjb250cmFjdCBpbXBsZW1lbnRhdGlvblwiXG4gIClcbiAgLm9wdGlvbihcIi0tc3RyaXAtY29udHJhY3QtbmFtZVwiLCBcInN0cmlwIGNvbnRyYWN0IG5hbWUgZnJvbSBvdXRwdXRcIiwgZmFsc2UpXG4gIC5vcHRpb24oXCItLWlucHV0IDxTdHJpbmc+XCIsIFwiaW5wdXQgZm9sZGVyIGZvciBjb250cmFjdHNcIiwgXCJsaWIvY29udHJhY3RzXCIpXG4gIC5vcHRpb24oXCItLW91dHB1dCA8U3RyaW5nPlwiLCBcIm91dHB1dCBmb2xkZXIgZm9yIGNvbnRyYWN0c1wiLCBcIi4vY29udHJhY3RzXCIpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGxldCB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBkZXYsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBkZWJ1ZyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIG5hbWUsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIG91dHB1dCxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIGlucHV0LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgc3RyaXBDb250cmFjdE5hbWUsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBjY2FhcyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIGJ1bmRsZSxcblxuICAgICAgdHNDb25maWdGaWxlLFxuICAgIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJjb21waWxlLWNvbnRyYWN0XCIpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBydW5uaW5nIHdpdGggb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX0gZm9yICR7cGtnLm5hbWV9IHZlcnNpb24gJHt2ZXJzaW9ufWBcbiAgICApO1xuXG4gICAgdHNDb25maWdGaWxlID0gcGF0aC5pc0Fic29sdXRlKHRzQ29uZmlnRmlsZSlcbiAgICAgID8gdHNDb25maWdGaWxlXG4gICAgICA6IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCB0c0NvbmZpZ0ZpbGUpO1xuXG4gICAgb3V0cHV0ID0gc3RyaXBDb250cmFjdE5hbWUgPyBvdXRwdXQgOiBwYXRoLmpvaW4ob3V0cHV0LCBuYW1lKTtcbiAgICBsb2cuaW5mbyhgRGVsZXRpbmcgZXhpc3Rpbmcgb3V0cHV0IGZvbGRlciAoaWYgZXhpc3RzKSB1bmRlciAke291dHB1dH1gKTtcbiAgICBleGVjU3luYyhgcm0gLXJmICR7b3V0cHV0fWApO1xuICAgIGlmIChidW5kbGUpIHtcbiAgICAgIGxvZy5pbmZvKGBidW5kbGluZyBjb250cmFjdCBmcm9tICR7aW5wdXR9YCk7XG4gICAgICBjb25zdCBidW5kbGUgPSBhd2FpdCByb2xsdXAoe1xuICAgICAgICBpbnB1dDogYCR7aW5wdXR9L2luZGV4LnRzYCxcbiAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgIHJlcGxhY2Uoe1xuICAgICAgICAgICAgcHJldmVudEFzc2lnbm1lbnQ6IHRydWUsXG4gICAgICAgICAgICBkZWxpbWl0ZXJzOiBbXCJcIiwgXCJcIl0sXG4gICAgICAgICAgICB2YWx1ZXM6IHsgXCIjI1ZFUlNJT04jI1wiOiB2ZXJzaW9uLCBcIiMjUEFDS0FHRSMjXCI6IHBrZy5uYW1lIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdHlwZXNjcmlwdCh7XG4gICAgICAgICAgICB0c2NvbmZpZzogdHNDb25maWdGaWxlLFxuICAgICAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgIG91dERpcjogb3V0cHV0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vZHVsZTogXCJlc25leHRcIixcbiAgICAgICAgICAgIGRlY2xhcmF0aW9uOiBmYWxzZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIGB3aXRoaW5nIGNvbnRyYWN0IHRvICR7b3V0cHV0fSB3aXRoIG5hbWUgJHt0b1Bhc2NhbENhc2UobmFtZSl9LmpzYFxuICAgICAgKTtcbiAgICAgIGF3YWl0IGJ1bmRsZS53cml0ZSh7XG4gICAgICAgIGZpbGU6IGAke291dHB1dH0vJHt0b1Bhc2NhbENhc2UobmFtZSl9LmpzYCxcbiAgICAgICAgZm9ybWF0OiBcInVtZFwiLFxuICAgICAgICBuYW1lOiBgJHt0b1Bhc2NhbENhc2UobmFtZSl9LmpzYCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb21waWxlV2l0aFRzY29uZmlnT3ZlcnJpZGVzKHRzQ29uZmlnRmlsZSwge1xuICAgICAgICBvdXREaXI6IG91dHB1dCxcbiAgICAgICAgbW9kdWxlOiB0cy5Nb2R1bGVLaW5kLkVTTmV4dCxcbiAgICAgICAgZGVjbGFyYXRpb246IGZhbHNlLFxuICAgICAgICBzb3VyY2VNYXA6IGZhbHNlLFxuICAgICAgICAvLyByb290RGlyOiBpbnB1dCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHNjcmlwdHMgPSB7XG4gICAgICBzdGFydDogZ2V0Q29udHJhY3RTdGFydENvbW1hbmQoZGVidWcsIGNjYWFzKSxcbiAgICAgIFwic3RhcnQ6ZGV2XCI6IFwiZmFicmljLWNoYWluY29kZS1ub2RlIHN0YXJ0IC0tdGxzLmVuYWJsZWQgZmFsc2VcIixcbiAgICAgIFwic3RhcnQ6d2F0Y2hcIjogJ25vZGVtb24gLS1leGVjIFwibnBtIHJ1biBzdGFydDpkZXZcIicsXG4gICAgICBidWlsZDogJ2VjaG8gXCJObyBuZWVkIHRvIGJ1aWxkIHRoZSBjaGFpbmNvZGVcIicsXG4gICAgICBsaW50OiBcImVzbGludCAuIC0tZml4IC0tZXh0IC5qc1wiLFxuICAgIH07XG5cbiAgICBjb25zdCBjb250cmFjdFBhY2thZ2UgPSBwa2c7XG5cbiAgICBjb250cmFjdFBhY2thZ2UubmFtZSA9IG5hbWU7XG4gICAgY29udHJhY3RQYWNrYWdlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgY29udHJhY3RQYWNrYWdlLnNjcmlwdHMgPSBzY3JpcHRzO1xuXG4gICAgZGVsZXRlIGNvbnRyYWN0UGFja2FnZS50eXBlO1xuICAgIGRlbGV0ZSBjb250cmFjdFBhY2thZ2UudHlwZXM7XG4gICAgZGVsZXRlIGNvbnRyYWN0UGFja2FnZS5leHBvcnRzO1xuICAgIGNvbnRyYWN0UGFja2FnZS5tYWluID0gYnVuZGxlXG4gICAgICA/IGAke3RvUGFzY2FsQ2FzZShuYW1lKX0uanNgXG4gICAgICA6IGAke2lucHV0fS9pbmRleC5qc2A7XG5cbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKG91dHB1dCwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeShjb250cmFjdFBhY2thZ2UpXG4gICAgKTtcblxuICAgIGxvZy5pbmZvKGBJbnN0YWxsaW5nIGFuZCBzaHJpbmt3cmFwcGluZyBkZXBlbmRlbmNpZXNgKTtcbiAgICBleGVjU3luYyhgbnBtIGluc3RhbGxgLCB7IGN3ZDogb3V0cHV0IH0pO1xuICAgIGV4ZWNTeW5jKGBucG0gc2hyaW5rd3JhcGAsIHsgY3dkOiBvdXRwdXQgfSk7XG4gICAgZXhlY1N5bmMoXCJybSAtcmYgbm9kZV9tb2R1bGVzXCIsIHsgY3dkOiBvdXRwdXQgfSk7XG4gICAgbG9nLmluZm8oYGRlbGV0aW5nIHRlbXAgZm9sZGVyc2ApO1xuICAgIGV4ZWNTeW5jKGBybSAtcmYgLi9saWIgJiYgcm0gLXJmIC4vZGlzdGAsIHsgY3dkOiBvdXRwdXQgfSk7XG4gICAgbG9nLmluZm8oXG4gICAgICBgQ29udHJhY3QgJHtuYW1lfSBjb21waWxlZCBzdWNjZXNzZnVsbHkhIGluICR7cGF0aC5yZXNvbHZlKG91dHB1dCl9YFxuICAgICk7XG4gICAgaWYgKGRldikge1xuICAgICAgbG9nLmluZm8oYGRldiBtb2RlIGVuYWJsZWQuIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzIGZvciBkZWJ1Z2dpbmdgKTtcbiAgICAgIGV4ZWNTeW5jKGBucG0gaW5zdGFsbGAsIHtcbiAgICAgICAgY3dkOiBvdXRwdXQsXG4gICAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgTk9ERV9FTlY6IFwicHJvZHVjdGlvblwiIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG5jb25zdCBleHRyYWN0SW5kZXhlcyA9IG5ldyBDb21tYW5kKClcbiAgLmNvbW1hbmQoXCJleHRyYWN0LWluZGV4ZXNcIilcbiAgLm9wdGlvbihcIi0tZmlsZSBbU3RyaW5nXVwiLCBcInRoZSBtb2RlbCBmaWxlXCIpXG4gIC5vcHRpb24oXCItLWZvbGRlciBbU3RyaW5nXVwiLCBcInRoZSBtb2RlbCBmb2xkZXJcIilcbiAgLm9wdGlvbihcIi0tb3V0RGlyIDxTdHJpbmc+XCIsIFwidGhlIG91dGRpci4gc2hvdWxkIG1hdGNoIHlvdXIgY29udHJhY3QgZm9sZGVyXCIpXG4gIC5kZXNjcmlwdGlvbihcbiAgICBcIkNyZWF0ZXMgYSB0aGUgSlNPTiBpbmRleCBmaWxlcyB0byBiZSBzdWJtaXR0ZWQgdG8gYWxvbmcgd2l0aCB0aGUgY29udHJhY3RcIlxuICApXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJleHRyYWN0LWluZGV4ZXNcIik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgbGV0IHsgZmlsZSwgZm9sZGVyLCBvdXREaXIgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBtb2RlbHM6IGFueVtdID0gW107XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIG1vZGVscy5wdXNoKC4uLnJlYWRNb2RlbEZpbGUoZmlsZSkpO1xuICAgIH1cblxuICAgIGlmIChmb2xkZXIpIHtcbiAgICAgIGxvZy5pbmZvKGBMb2FkaW5nIG1vZGVscyBmcm9tICR7Zm9sZGVyfS4uLmApO1xuICAgICAgbW9kZWxzLnB1c2goLi4uKGF3YWl0IHJlYWRNb2RlbEZvbGRlcnMoZm9sZGVyKSkpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgIGlmICghZmlsZSAmJiAhZm9sZGVyKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYE11c3QgcGFzcyBhIGZpbGUgb3IgYSBmb2xkZXJgKTtcblxuICAgIGZvciAoY29uc3QgbSBvZiBtb2RlbHMpIHtcbiAgICAgIGxvZy52ZXJib3NlKGBFeHRyYWN0aW5nIGluZGV4ZXMgZm9yIHRhYmxlICR7TW9kZWwudGFibGVOYW1lKG0pfWApO1xuICAgICAgZ2VuZXJhdGVNb2RlbEluZGV4ZXMobSwgcmVzdWx0KTtcbiAgICB9XG4gICAgbG9nLnZlcmJvc2UoYEZvdW5kICR7T2JqZWN0LmtleXMocmVzdWx0KS5sZW5ndGh9IGluZGV4ZXMgdG8gY3JlYXRlYCk7XG4gICAgbG9nLmRlYnVnKGBJbmRleGVzOiAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgd3JpdGVJbmRleGVzKE9iamVjdC52YWx1ZXMocmVzdWx0KSwgb3V0RGlyKTtcbiAgfSk7XG5cbmNvbnN0IGV4dHJhY3RDb2xsZWN0aW9ucyA9IG5ldyBDb21tYW5kKClcbiAgLmNvbW1hbmQoXCJleHRyYWN0LWNvbGxlY3Rpb25zXCIpXG4gIC5vcHRpb24oXCItLWZpbGUgW1N0cmluZ11cIiwgXCJ0aGUgbW9kZWwgZmlsZVwiKVxuICAub3B0aW9uKFwiLS1mb2xkZXIgW1N0cmluZ11cIiwgXCJ0aGUgbW9kZWwgZm9sZGVyXCIpXG4gIC5vcHRpb24oXCItLW91dERpciA8U3RyaW5nPlwiLCBcInRoZSBvdXRkaXIuIHNob3VsZCBtYXRjaCB5b3VyIGNvbnRyYWN0IGZvbGRlclwiKVxuICAub3B0aW9uKFwiLS1tc3BJZHMgPFN0cmluZz5cIiwgXCJzaW5nbGUgbXNwSWQgb3Igc3RyaW5naWZpZWQgYXJyYXlcIilcbiAgLm9wdGlvbihcIi0tbWFpbk1zcElkIDxTdHJpbmc+XCIsIFwic2luZ2xlIG1zcElkXCIpXG4gIC5vcHRpb24oXG4gICAgXCItLW92ZXJyaWRlcyBbU3RyaW5nXVwiLFxuICAgIFwic3RyaW5naWZpZWQgb3ZlcnJpZGUgb2JqZWN0IHtyZXF1aXJlZFBlZXJDb3VudDogbnVtYmVyLCBtYXhQZWVyQ291bnQ6IG51bWJlciwgYmxvY2tUb0xpdmU6IG51bWJlciwgbWVtYmVyT25seVJlYWQ6IG51bWJlciwgbWVtYmVyT25seVdyaXRlOiBudW1iZXIsIGVuZG9yc2VtZW50UG9saWN5OiAge319XCJcbiAgKVxuICAuZGVzY3JpcHRpb24oXG4gICAgXCJDcmVhdGVzIGEgdGhlIEpTT04gaW5kZXggZmlsZXMgdG8gYmUgc3VibWl0dGVkIHRvIGFsb25nIHdpdGggdGhlIGNvbnRyYWN0XCJcbiAgKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBhbnkpID0+IHtcbiAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKFxuICAgICAgZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcInBhY2thZ2UuanNvblwiKSwgXCJ1dGYtOFwiKVxuICAgICk7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gcGtnLnZlcnNpb247XG5cbiAgICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKFwiZXh0cmFjdC1jb2xsZWN0aW9uc1wiKTtcbiAgICBsb2cuZGVidWcoXG4gICAgICBgcnVubmluZyB3aXRoIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9IGZvciAke3BrZy5uYW1lfSB2ZXJzaW9uICR7dmVyc2lvbn1gXG4gICAgKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBsZXQgeyBmaWxlLCBmb2xkZXIsIG91dERpciwgbXNwSWRzLCBvdmVycmlkZXMsIG1haW5Nc3BJZCB9ID0gb3B0aW9ucztcblxuICAgIHRyeSB7XG4gICAgICB0cnkge1xuICAgICAgICBtc3BJZHMgPSBtc3BJZHMgPyBKU09OLnBhcnNlKG1zcElkcykgOiB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgLy8gIGRvIG5vdGhpbmdcbiAgICAgIH1cbiAgICAgIG92ZXJyaWRlcyA9IG92ZXJyaWRlc1xuICAgICAgICA/IEpTT04ucGFyc2Uob3ZlcnJpZGVzKVxuICAgICAgICA6IHsgcHJpdmF0ZUNvbHM6IHt9LCBzaGFyZWRDb2xzOiB7fSB9O1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoXG4gICAgICAgIGBVbmFibGUgdG8gZXh0cmFjdCBtc3BpZHMgb3Igb3ZlcnJpZGVzOiAgJHtlfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbW9kZWxzOiBhbnlbXSA9IFtdO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBtb2RlbHMucHVzaCguLi5yZWFkTW9kZWxGaWxlKGZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAoZm9sZGVyKSB7XG4gICAgICBsb2cuaW5mbyhgTG9hZGluZyBtb2RlbHMgZnJvbSAke2ZvbGRlcn0uLi5gKTtcbiAgICAgIG1vZGVscy5wdXNoKC4uLihhd2FpdCByZWFkTW9kZWxGb2xkZXJzKGZvbGRlcikpKTtcbiAgICB9XG5cbiAgICBpZiAoIWZpbGUgJiYgIWZvbGRlcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBNdXN0IHBhc3MgYSBmaWxlIG9yIGEgZm9sZGVyYCk7XG5cbiAgICBjb25zdCBjb2xzOiB7XG4gICAgICBpbmRleGVzOiBJbmRleFtdO1xuICAgICAgbWlycm9yPzogUHJpdmF0ZUNvbGxlY3Rpb247XG4gICAgICBjb2xsZWN0aW9uczogUHJpdmF0ZUNvbGxlY3Rpb25bXTtcbiAgICB9W10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1vZGVscy5tYXAoYXN5bmMgKGNsYXp6KSA9PiB7XG4gICAgICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShjbGF6eik7XG4gICAgICAgIGNvbnN0IG1ldGEgPSBNZXRhZGF0YS5nZXQoY2xhenopO1xuICAgICAgICBjb25zdCBtaXJyb3JNZXRhID0gTW9kZWwubWlycm9yZWRBdChjbGF6eik7XG5cbiAgICAgICAgY29uc29sZS5sb2codGFibGVOYW1lKTtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBtc3Agb2YgbXNwSWRzKSB7XG4gICAgICAgICAgY29sbGVjdGlvbnNbbXNwXSA9IGF3YWl0IGV4Q29sbGVjdGlvbnMoXG4gICAgICAgICAgICBjbGF6eixcbiAgICAgICAgICAgIFttc3AsIG1haW5Nc3BJZF0sXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgIC8vICAgc2hhcmVkQ29sczogT2JqZWN0LmFzc2lnbih7fSwgb3ZlcnJpZGVzLnNoYXJlZENvbHMpLFxuICAgICAgICAgICAgLy8gICBwcml2YXRlQ29sczogT2JqZWN0LmFzc2lnbih7fSwgb3ZlcnJpZGVzLnByaXZhdGVDb2xzKSxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAhIW1pcnJvck1ldGFcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1pcnJvckNvbGxlY3Rpb246IFByaXZhdGVDb2xsZWN0aW9uIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChtaXJyb3JNZXRhKSB7XG4gICAgICAgICAgY29sbGVjdGlvbnNbbWFpbk1zcElkXSA9IGNvbGxlY3Rpb25zW21haW5Nc3BJZF0gfHwge307XG4gICAgICAgICAgT2JqZWN0LmtleXMoY29sbGVjdGlvbnMpLmZvckVhY2goKG1zcDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uc1ttYWluTXNwSWRdLnByaXZhdGVzID0gY29sbGVjdGlvbnNbbXNwXS5wcml2YXRlcz8uZmlsdGVyKFxuICAgICAgICAgICAgICAocDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHAubmFtZSAhPT0gKG1pcnJvck1ldGEucmVzb2x2ZXIgYXMgc3RyaW5nKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgbWlycm9yQ29sbGVjdGlvbiA9IHAgYXMgYW55O1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByaXZhdGVzQ291bnQgPSBPYmplY3QudmFsdWVzKGNvbGxlY3Rpb25zKVxuICAgICAgICAgIC5tYXAoKGMpID0+IGMucHJpdmF0ZXMpXG4gICAgICAgICAgLmZsYXQoKS5sZW5ndGg7XG4gICAgICAgIGlmIChwcml2YXRlc0NvdW50KVxuICAgICAgICAgIGxvZ1xuICAgICAgICAgICAgLmZvcihNb2RlbC50YWJsZU5hbWUoY2xhenopKVxuICAgICAgICAgICAgLmluZm8oYEZvdW5kICR7cHJpdmF0ZXNDb3VudH0gcHJpdmF0ZSBjb2xsZWN0aW9ucyB0byBjcmVhdGVgKTtcbiAgICAgICAgY29uc3Qgc2hhcmVkQ291bnQgPSBPYmplY3QudmFsdWVzKGNvbGxlY3Rpb25zKVxuICAgICAgICAgIC5tYXAoKGMpID0+IGMuc2hhcmVkKVxuICAgICAgICAgIC5mbGF0KCkubGVuZ3RoO1xuXG4gICAgICAgIGxvZ1xuICAgICAgICAgIC5mb3IoTW9kZWwudGFibGVOYW1lKGNsYXp6KSlcbiAgICAgICAgICAuaW5mbyhgRm91bmQgJHtzaGFyZWRDb3VudH0gc2hhcmVkIGNvbGxlY3Rpb25zIHRvIGNyZWF0ZWApO1xuICAgICAgICBpZiAobWlycm9yQ29sbGVjdGlvbilcbiAgICAgICAgICBsb2dcbiAgICAgICAgICAgIC5mb3IoTW9kZWwudGFibGVOYW1lKGNsYXp6KSlcbiAgICAgICAgICAgIC5pbmZvKFxuICAgICAgICAgICAgICBgRm91bmQgb25lIG1pcnJvciBjb2xsZWN0aW9uICR7bWlycm9yTWV0YT8ucmVzb2x2ZXIgYXMgc3RyaW5nfWBcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgY29sTGlzdCA9IE9iamVjdC52YWx1ZXMoY29sbGVjdGlvbnMpXG4gICAgICAgICAgLm1hcCgoYykgPT4gWy4uLihjLnByaXZhdGVzIHx8IFtdKSwgLi4uKGMuc2hhcmVkIHx8IFtdKV0pXG4gICAgICAgICAgLmZsYXQoKTtcbiAgICAgICAgbGV0IGluZGV4ZXM6IGFueTtcbiAgICAgICAgaWYgKGNvbExpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgbG9nXG4gICAgICAgICAgICAuZm9yKE1vZGVsLnRhYmxlTmFtZShjbGF6eikpXG4gICAgICAgICAgICAudmVyYm9zZShgZ2VuZXJhdGluZyBpbmRleGVzIGZvciBjb2xsZWN0aW9uc2ApO1xuICAgICAgICAgIGluZGV4ZXMgPSBnZW5lcmF0ZU1vZGVsSW5kZXhlcyhjbGF6eik7XG4gICAgICAgICAgbG9nXG4gICAgICAgICAgICAuZm9yKE1vZGVsLnRhYmxlTmFtZShjbGF6eikpXG4gICAgICAgICAgICAuaW5mbyhgZm91bmQgJHtpbmRleGVzLmxlbmd0aH0gaW5kZXhlc2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW5kZXhlczogaW5kZXhlcyxcbiAgICAgICAgICBjb2xsZWN0aW9uczogY29sTGlzdCxcbiAgICAgICAgICBtaXJyb3I6IG1pcnJvckNvbGxlY3Rpb24sXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uc1RvID0gW1xuICAgICAgLi4uY29scy5tYXAoKGMpID0+IGMuY29sbGVjdGlvbnMpLmZsYXQoKSxcbiAgICAgIC4uLmNvbHMuZmlsdGVyKChjKSA9PiBjLm1pcnJvcikubWFwKChjKSA9PiBjLm1pcnJvciksXG4gICAgXSBhcyBQcml2YXRlQ29sbGVjdGlvbltdO1xuXG4gICAgaWYgKGNvbGxlY3Rpb25zVG8ubGVuZ3RoKSB7XG4gICAgICB3cml0ZUNvbGxlY3Rpb25zKGNvbGxlY3Rpb25zVG8sIG91dERpcik7XG4gICAgICBsb2cuaW5mbyhcbiAgICAgICAgYFN0b3JlZCAke2NvbGxlY3Rpb25zVG8ubGVuZ3RofSBjb2xsZWN0aW9ucyB0byAke291dERpcn0vY29sbGVjdGlvbl9jb25maWcuanNvbmBcbiAgICAgICk7XG5cbiAgICAgIGNvbHMuZm9yRWFjaCgoYywgaSkgPT4ge1xuICAgICAgICBjb25zdCB7IGluZGV4ZXMsIGNvbGxlY3Rpb25zLCBtaXJyb3IgfSA9IGM7XG4gICAgICAgIGNvbnN0IHRvSW5kZXg6IFByaXZhdGVDb2xsZWN0aW9uW10gPSBbLi4uY29sbGVjdGlvbnMsIG1pcnJvcl0uZmlsdGVyKFxuICAgICAgICAgIEJvb2xlYW5cbiAgICAgICAgKSBhcyBQcml2YXRlQ29sbGVjdGlvbltdO1xuICAgICAgICB0b0luZGV4LmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgICB3cml0ZUluZGV4ZXMoaW5kZXhlcywgb3V0RGlyLCBpLm5hbWUpO1xuICAgICAgICAgIGxvZy5pbmZvKGBTdG9yZWQgJHt0b0luZGV4Lmxlbmd0aH0gaW5kZXhlcyB0byBjb2xsZWN0aW9uICR7aS5uYW1lfWApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbmNvbnN0IGVuc3VyZUluZnJhID0gbmV3IENvbW1hbmQoKVxuICAubmFtZShcImF3YWl0LWluZnJhXCIpXG4gIC5kZXNjcmlwdGlvbihcIndhaXRzIGZvciB0aGUgaW5mcmFzdHJ1Y3R1cmUgdG8gYmUgdXAgYW5kIHJ1bm5pbmdcIilcbiAgLm9wdGlvbihcbiAgICBcIi0tY29udGFpbmVyIDxTdHJpbmc+XCIsXG4gICAgXCJkb2NrZXIgY29udGFpbmVyIG5hbWUgdG8gdGVzdCAodXN1YWxseSBsYXN0IHBlZXIpXCIsXG4gICAgXCJib290LW9yZy1jLXBlZXItMFwiXG4gIClcbiAgLm9wdGlvbihcIi0tdGltZW91dCA8U3RyaW5nPlwiLCBcInRpbWVvdXQgYmV0d2VlbiB0ZXN0cyBpbiBtaWxsaXNlY29uZHNcIiwgXCI1MDAwXCIpXG4gIC5vcHRpb24oXCItLWF0dGVtcHRzIDxTdHJpbmc+XCIsIFwibnVtYmVyIG9mIGF0dGVtcHRzIGJlZm9yZSBnaXZpbmcgdXBcIiwgXCIxMFwiKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBhbnkpID0+IHtcbiAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKFxuICAgICAgZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcInBhY2thZ2UuanNvblwiKSwgXCJ1dGYtOFwiKVxuICAgICk7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gcGtnLnZlcnNpb247XG5cbiAgICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKFwiYXdhaXQtaW5mcmFcIik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IGNvbnRhaW5lciwgdGltZW91dCwgYXR0ZW1wdHMgfSA9IG9wdGlvbnM7XG4gICAgdGltZW91dCA9IHBhcnNlSW50KHRpbWVvdXQpIHx8IDUwMDA7XG4gICAgYXR0ZW1wdHMgPSBwYXJzZUludChhdHRlbXB0cykgfHwgMTA7XG5cbiAgICBhd2FpdCBlbnN1cmVJbmZyYXN0cnVjdHVyZUJvb3RlZChcImJvb3Qtb3JnLWMtcGVlci0wXCIsIHRpbWVvdXQsIGF0dGVtcHRzKTtcblxuICAgIGxvZy5pbmZvKFxuICAgICAgYEluZnJhc3RydWN0dXJlIGJvb3RlZCBzdWNjZXNzZnVsbHkgKGFjY29yZGluZyB0byBjb250YWluZXIgJHtjb250YWluZXJ9KSFgXG4gICAgKTtcbiAgfSk7XG5cbmNvbnN0IGRlcGxveUNvbnRyYWN0ID0gbmV3IENvbW1hbmQoKVxuICAubmFtZShcImRlcGxveS1jb250cmFjdFwiKVxuICAuZGVzY3JpcHRpb24oXCJkZXBsb3lzIHRoZSBzZWxlY3RlZCBjb250cmFjdFwiKVxuICAub3B0aW9uKFwiLS1uYW1lIDxTdHJpbmc+XCIsIFwiQ29udHJhY3QgTmFtZSAoYW5kIGZvbGRlcilcIilcbiAgLm9wdGlvbihcIi0taW5wdXQgPFN0cmluZz5cIiwgXCJpbnB1dCBmb2xkZXJcIilcbiAgLm9wdGlvbihcbiAgICBcIi0taW5jcmVtZW50VmVyc2lvbiA8U3RyaW5nPlwiLFxuICAgIFwiKHRydWUgfCBmYWxzZSkgaWYgc2hvdWxkIHVzZSB2ZXJzaW9uIG9yIHNlcXVlbmNlIHRvIHVwZGF0ZSBjb250cmFjdHNcIixcbiAgICBmYWxzZVxuICApXG4gIC5vcHRpb24oXG4gICAgXCItLXRyYWNrZXJGb2xkZXIgPFN0cmluZz5cIixcbiAgICBcImNvbnRyYWN0IHZlcnNpb24gdHJhY2tlciBmb2xkZXIgKHNob3VsZCBiZSBkZWxldGVkIG9uIGluZnJhc3RydWN0dXJlOmRvd24pXCIsXG4gICAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwidGVzdHNcIiwgXCJpbnRlZ3JhdGlvblwiLCBcImNoYWluY29kZVRyYWNrZXJzXCIpXG4gIClcbiAgLm9wdGlvbihcbiAgICBcIi0tcGVlcnMgPFN0cmluZz5cIixcbiAgICBcImNvbW1hIHNlcGFyYXRlZCBwZWVyIGlkc1wiLFxuICAgIFwib3JnLWEtcGVlci0wLG9yZy1iLXBlZXItMCxvcmctYy1wZWVyLTBcIlxuICApXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJkZXBsb3ktY29udHJhY3RcIik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHsgbmFtZSwgaW5wdXQsIHBlZXJzLCB0cmFja2VyRm9sZGVyLCBpbmNyZW1lbnRWZXJzaW9uIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHBlZXJJZHMgPSBwZWVycy5zcGxpdChcIixcIik7XG5cbiAgICBjb25zdCBjb3VudFBhdGggPSBwYXRoLnJlc29sdmUocGF0aC5qb2luKHRyYWNrZXJGb2xkZXIsIGAke25hbWV9LmNvdW50YCkpO1xuXG4gICAgbGV0IHNlcXVlbmNlOiBudW1iZXI7XG5cbiAgICB0cnkge1xuICAgICAgc2VxdWVuY2UgPSBwYXJzZUludChmcy5yZWFkRmlsZVN5bmMoY291bnRQYXRoKS50b1N0cmluZyhcInV0Zi04XCIpKTtcbiAgICAgIGlmIChpc05hTihzZXF1ZW5jZSkpIHNlcXVlbmNlID0gMTtcbiAgICAgIGVsc2Ugc2VxdWVuY2UgKz0gMTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBzZXF1ZW5jZSA9IDE7XG4gICAgfVxuICAgIC8vXG4gICAgLy8gaWYgKGluY3JlbWVudFZlcnNpb24pIHtcbiAgICAvLyAgIHZlcnNpb24gPSB2ZXJzaW9uICsgYC0ke3NlcXVlbmNlfWA7XG4gICAgLy8gICAvLyBzZXF1ZW5jZSA9IDE7XG4gICAgLy8gfVxuXG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgcGVlciBvZiBwZWVySWRzKSB7XG4gICAgICAgIHBhY2thZ2VDb250cmFjdChwZWVyLCBpbnB1dCwgbmFtZSwgdmVyc2lvbik7XG4gICAgICAgIGluc3RhbGxDb250cmFjdChwZWVyLCBuYW1lKTtcbiAgICAgICAgYXBwcm92ZUNvbnRyYWN0KFxuICAgICAgICAgIHBlZXIsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBwZWVyID09PSBcIm9yZy1hLXBlZXItMFwiXG4gICAgICAgICAgICA/IFwidGxzLWNhLWNlcnQucGVtXCJcbiAgICAgICAgICAgIDogXCJvcmRlcmVyLXRscy1jYS1jZXJ0LnBlbVwiLFxuICAgICAgICAgIHNlcXVlbmNlLFxuICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoY291bnRQYXRoLCBzZXF1ZW5jZS50b1N0cmluZygpKTtcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgbG9nLmVycm9yKFwiRXJyb3IgZGVwbG95aW5nIGNvbnRyYWN0OlwiLCBlcnIpO1xuICAgIH1cbiAgICBjb21taXRDaGFpbmNvZGUobmFtZSwgc2VxdWVuY2UsIHZlcnNpb24pO1xuICB9KTtcblxuY29uc3QgZ2V0Q3J5cHRvTWF0ZXJpYWwgPSBuZXcgQ29tbWFuZCgpXG4gIC5uYW1lKFwiZ2V0LWNyeXB0by1tYXRlcmlhbFwiKVxuICAuZGVzY3JpcHRpb24oXCJjb3BpZXMgdGhlIGNyeXB0byBtYXRlcmlhbCB0byB0aGUgc2VsZWN0ZWQgZm9sZGVyXCIpXG4gIC5vcHRpb24oXCItLWZvbGRlciA8U3RyaW5nPlwiLCBcIm91dHB1dCBmb2xkZXJcIiwgXCJkb2NrZXIvZG9ja2VyLWRhdGFcIilcbiAgLmFjdGlvbihhc3luYyAob3B0aW9uczogYW55KSA9PiB7XG4gICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShcbiAgICAgIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmLThcIilcbiAgICApO1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IHBrZy52ZXJzaW9uO1xuXG4gICAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihcImdldC1jcnlwdG8tbWF0ZXJpYWxcIik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IG9wdGlvbnM7XG4gICAgZXhlY1N5bmMoYGRvY2tlciBjcCBvcmctYTovd2VhdmVyL2NsaWVudC8uICR7Zm9sZGVyfWAsIHtcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICB9KTtcbiAgfSk7XG5cbmNvbnN0IGZhYnJpY0NtZCA9IG5ldyBDb21tYW5kKClcbiAgLm5hbWUoXCJmb3ItZmFicmljXCIpXG4gIC5jb21tYW5kKFwiZmFicmljXCIpXG4gIC5kZXNjcmlwdGlvbihcbiAgICBcImV4cG9zZXMgc2V2ZXJhbCBjb21tYW5kcyB0byBoZWxwIG1hbmFnZSB0aGUgZmFicmljIGluZnJhc3RydWN0dXJlXCJcbiAgKTtcblxuZmFicmljQ21kLmFkZENvbW1hbmQoY29tcGlsZUNvbW1hbmQpO1xuZmFicmljQ21kLmFkZENvbW1hbmQoZXh0cmFjdEluZGV4ZXMpO1xuZmFicmljQ21kLmFkZENvbW1hbmQoZW5zdXJlSW5mcmEpO1xuZmFicmljQ21kLmFkZENvbW1hbmQoZGVwbG95Q29udHJhY3QpO1xuZmFicmljQ21kLmFkZENvbW1hbmQoZ2V0Q3J5cHRvTWF0ZXJpYWwpO1xuZmFicmljQ21kLmFkZENvbW1hbmQoZXh0cmFjdENvbGxlY3Rpb25zKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZmFicmljKCkge1xuICByZXR1cm4gZmFicmljQ21kO1xufVxuIl19
package/lib/cli-utils.cjs CHANGED
@@ -32,6 +32,9 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
35
38
  Object.defineProperty(exports, "__esModule", { value: true });
36
39
  exports.ScriptCommands = void 0;
37
40
  exports.didInfrastructureBoot = didInfrastructureBoot;
@@ -47,10 +50,12 @@ exports.invokeChaincode = invokeChaincode;
47
50
  exports.queryChaincode = queryChaincode;
48
51
  exports.invokePrivateChaincode = invokePrivateChaincode;
49
52
  exports.getContractStartCommand = getContractStartCommand;
53
+ exports.compileWithTsconfigOverrides = compileWithTsconfigOverrides;
50
54
  const child_process_1 = require("child_process");
51
55
  const fs = __importStar(require("fs"));
52
56
  const path = __importStar(require("path"));
53
57
  const db_decorators_1 = require("@decaf-ts/db-decorators");
58
+ const typescript_1 = __importDefault(require("typescript"));
54
59
  function didInfrastructureBoot(containerName = "boot-org-c-peer-0") {
55
60
  try {
56
61
  const output = (0, child_process_1.execSync)(`docker inspect ${containerName} --format='{{.State.ExitCode}}'`)
@@ -234,8 +239,65 @@ var ScriptCommands;
234
239
  })(ScriptCommands || (exports.ScriptCommands = ScriptCommands = {}));
235
240
  function getContractStartCommand(debug, ccaas) {
236
241
  if (ccaas) {
237
- return debug ? ScriptCommands.START_CCAAS_DEBUG : ScriptCommands.START_CCAAS;
242
+ return debug
243
+ ? ScriptCommands.START_CCAAS_DEBUG
244
+ : ScriptCommands.START_CCAAS;
238
245
  }
239
246
  return debug ? ScriptCommands.START_DEBUG : ScriptCommands.START;
240
247
  }
241
- //# sourceMappingURL=cli-utils.js.map
248
+ function formatDiagnostics(diags) {
249
+ const host = {
250
+ getCanonicalFileName: (f) => f,
251
+ getCurrentDirectory: typescript_1.default.sys.getCurrentDirectory,
252
+ getNewLine: () => typescript_1.default.sys.newLine,
253
+ };
254
+ return typescript_1.default.formatDiagnosticsWithColorAndContext(diags, host);
255
+ }
256
+ function compileWithTsconfigOverrides(tsconfigPath, overrides) {
257
+ const absConfigPath = path.isAbsolute(tsconfigPath)
258
+ ? tsconfigPath
259
+ : path.resolve(process.cwd(), tsconfigPath);
260
+ // 1) Read the tsconfig.json
261
+ const configFile = typescript_1.default.readConfigFile(absConfigPath, typescript_1.default.sys.readFile);
262
+ if (configFile.error) {
263
+ throw new Error(formatDiagnostics([configFile.error]));
264
+ }
265
+ // 2) Parse it (resolves "extends", include/exclude/files, etc.)
266
+ const configDir = path.dirname(absConfigPath);
267
+ const parsed = typescript_1.default.parseJsonConfigFileContent(configFile.config, typescript_1.default.sys, configDir,
268
+ /*existingOptions*/ undefined, absConfigPath);
269
+ if (parsed.errors.length) {
270
+ throw new Error(formatDiagnostics(parsed.errors));
271
+ }
272
+ // 3) Override compiler options in-memory
273
+ const options = {
274
+ ...parsed.options,
275
+ ...overrides,
276
+ };
277
+ // Optional: If you override outDir/rootDir, ensure they’re absolute
278
+ // to avoid surprises depending on CWD.
279
+ if (options.outDir)
280
+ options.outDir = path.resolve(configDir, options.outDir);
281
+ if (options.rootDir)
282
+ options.rootDir = path.resolve(configDir, options.rootDir);
283
+ // 4) Create program + emit
284
+ const program = typescript_1.default.createProgram({
285
+ rootNames: parsed.fileNames,
286
+ options,
287
+ projectReferences: parsed.projectReferences,
288
+ });
289
+ const preEmit = typescript_1.default.getPreEmitDiagnostics(program);
290
+ if (preEmit.length) {
291
+ // If you want "transpile anyway", you can choose to not throw here.
292
+ throw new Error(formatDiagnostics(preEmit));
293
+ }
294
+ const emitResult = program.emit();
295
+ const emitDiagnostics = emitResult.diagnostics ?? [];
296
+ if (emitDiagnostics.length) {
297
+ throw new Error(formatDiagnostics(emitDiagnostics));
298
+ }
299
+ if (emitResult.emitSkipped) {
300
+ throw new Error("Emit was skipped (check diagnostics above).");
301
+ }
302
+ }
303
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxzREFlQztBQUVELGdFQVdDO0FBRUQsMENBYUM7QUFFRCwwQ0FJQztBQUVELDBDQWVDO0FBRUQsd0NBdUNDO0FBRUQsMENBZUM7QUFFRCwwREF3Q0M7QUFFRCxvQkFHQztBQUVELDBDQWlDQztBQUVELHdDQStCQztBQUVELHdEQWtDQztBQTJCRCwwREFVQztBQVdELG9FQThEQztBQXZZRCxpREFBeUM7QUFDekMsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QiwyREFBd0Q7QUFDeEQsNERBQTRCO0FBRTVCLFNBQWdCLHFCQUFxQixDQUNuQyxnQkFBd0IsbUJBQW1CO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUEsd0JBQVEsRUFDckIsa0JBQWtCLGFBQWEsaUNBQWlDLENBQ2pFO2FBQ0UsUUFBUSxFQUFFO2FBQ1YsSUFBSSxFQUFFLENBQUM7UUFFVixPQUFPLE1BQU0sS0FBSyxHQUFHLENBQUM7SUFDeEIsQ0FBQztJQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSwwQkFBMEIsQ0FDOUMsZ0JBQXdCLG1CQUFtQixFQUMzQyxVQUFrQixJQUFJLEVBQ3RCLFdBQW1CLEVBQUU7SUFFckIsT0FBTyxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDN0MsSUFBSSxFQUFFLFFBQVEsSUFBSSxDQUFDO1lBQUUsTUFBTSxJQUFJLDZCQUFhLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUUxRSxP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LENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7SUFDckQsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDakUsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gZGlkSW5mcmFzdHJ1Y3R1cmVCb290KFxuICBjb250YWluZXJOYW1lOiBzdHJpbmcgPSBcImJvb3Qtb3JnLWMtcGVlci0wXCJcbik6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IG91dHB1dCA9IGV4ZWNTeW5jKFxuICAgICAgYGRvY2tlciBpbnNwZWN0ICR7Y29udGFpbmVyTmFtZX0gLS1mb3JtYXQ9J3t7LlN0YXRlLkV4aXRDb2RlfX0nYFxuICAgIClcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAudHJpbSgpO1xuXG4gICAgcmV0dXJuIG91dHB1dCA9PT0gXCIwXCI7XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIGluc3BlY3RpbmcgY29udGFpbmVyOlwiLCBlcnIubWVzc2FnZSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVJbmZyYXN0cnVjdHVyZUJvb3RlZChcbiAgY29udGFpbmVyTmFtZTogc3RyaW5nID0gXCJib290LW9yZy1jLXBlZXItMFwiLFxuICB0aW1lb3V0OiBudW1iZXIgPSA1MDAwLFxuICBhdHRlbXB0czogbnVtYmVyID0gMTBcbik6IFByb21pc2U8dm9pZD4ge1xuICB3aGlsZSAoIWRpZEluZnJhc3RydWN0dXJlQm9vdChjb250YWluZXJOYW1lKSkge1xuICAgIGlmICgtLWF0dGVtcHRzIDw9IDApIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiZXhjZWVkZWQgYWxsb3dlZCBhdHRlbXB0c1wiKTtcblxuICAgIGNvbnNvbGUubG9nKFwiV2FpdGluZyBmb3IgaW5mcmFzdHJ1Y3R1cmUgdG8gYm9vdC4uLlwiKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCB0aW1lb3V0KSk7IC8vIFdhaXQgZm9yIDUgc2Vjb25kcyBiZWZvcmUgcmV0cnlpbmdcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFja2FnZUNvbnRyYWN0KFxuICBkb2NrZXJOYW1lOiBzdHJpbmcsXG4gIGNvbnRyYWN0Rm9sZGVyOiBzdHJpbmcsXG4gIGNvbnRyYWN0TmFtZTogc3RyaW5nLFxuICB2ZXJzaW9uOiBzdHJpbmcgPSBcIjEuMFwiXG4pOiB2b2lkIHtcbiAgZXhlY1N5bmMoYGRvY2tlciBleGVjICR7ZG9ja2VyTmFtZX0gbm9kZSAuL3dlYXZlci9saWIvY29yZS9jbGkuY2pzIHBhY2thZ2UtY2hhaW5jb2RlIC1kIFxcXG4gICAgLS1jaGFpbmNvZGUtcGF0aCAuL3dlYXZlci9jaGFpbmNvZGUvJHtjb250cmFjdEZvbGRlcn0gXFxcbiAgICAtLWxhbmcgbm9kZSBcXFxuICAgIC0tY2hhaW5jb2RlLW91dHB1dCAvd2VhdmVyL3BlZXIvJHtjb250cmFjdE5hbWV9LnRhci5neiBcXFxuICAgIC0tY2hhaW5jb2RlLW5hbWUgJHtjb250cmFjdE5hbWV9IFxcXG4gICAgLS1jaGFpbmNvZGUtdmVyc2lvbiAke3ZlcnNpb259IC1zXG4gICAgYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsQ29udHJhY3QoZG9ja2VyTmFtZTogc3RyaW5nLCBjb250cmFjdE5hbWU6IHN0cmluZykge1xuICBleGVjU3luYyhcbiAgICBgZG9ja2VyIGV4ZWMgJHtkb2NrZXJOYW1lfSBub2RlIC4vd2VhdmVyL2xpYi9jb3JlL2NsaS5janMgaW5zdGFsbC1jaGFpbmNvZGUgLWQgLXMgLS1jaGFpbmNvZGUtcGF0aCAuL3dlYXZlci9wZWVyLyR7Y29udHJhY3ROYW1lfS50YXIuZ3pgXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHByb3ZlQ29udHJhY3QoXG4gIGRvY2tlck5hbWU6IHN0cmluZyxcbiAgY29udHJhY3ROYW1lOiBzdHJpbmcsXG4gIHRsc0NlcnROYW1lOiBzdHJpbmcsXG4gIHNlcXVlbmNlOiBudW1iZXIgPSAxLFxuICB2ZXJzaW9uOiBzdHJpbmcgPSBcIjEuMFwiXG4pIHtcbiAgZXhlY1N5bmMoYGRvY2tlciBleGVjICR7ZG9ja2VyTmFtZX0gbm9kZSAuL3dlYXZlci9saWIvY29yZS9jbGkuY2pzIGFwcHJvdmUtY2hhaW5jb2RlIC1kIC1zIFxcXG4gICAgLS1vcmRlcmVyLWFkZHJlc3Mgb3JnLWEtb3JkZXJlci0wOjcwMjEgXFxcbiAgICAtLWNoYW5uZWwtaWQgc2ltcGxlLWNoYW5uZWwgXFxcbiAgICAtLWNoYWluY29kZS1uYW1lICR7Y29udHJhY3ROYW1lfSBcXFxuICAgIC0tY2hhaW5jb2RlLXZlcnNpb24gJHt2ZXJzaW9ufSBcXFxuICAgIC0tc2VxdWVuY2UgJHtzZXF1ZW5jZX0gXFxcbiAgICAtLWVuYWJsZS10bHMgXFxcbiAgICAtLXRscy1jYS1jZXJ0LWZpbGUgL3dlYXZlci9wZWVyLyR7dGxzQ2VydE5hbWV9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXBsb3lDb250cmFjdChcbiAgY29udHJhY3RGb2xkZXI6IHN0cmluZyxcbiAgY29udHJhY3ROYW1lOiBzdHJpbmcsXG4gIHZlcnNpb246IHN0cmluZyA9IFwiMS4wXCIsXG4gIHBlZXJzOiBzdHJpbmdbXSA9IFtcIm9yZy1hLXBlZXItMFwiLCBcIm9yZy1iLXBlZXItMFwiLCBcIm9yZy1jLXBlZXItMFwiXVxuKSB7XG4gIGxldCBzZXF1ZW5jZTogbnVtYmVyO1xuICBjb25zdCBjb3VudFBhdGggPSBwYXRoLnJlc29sdmUoXG4gICAgcGF0aC5qb2luKFxuICAgICAgYCR7X19kaXJuYW1lfWAsXG4gICAgICBcIi4uXCIsXG4gICAgICBcImludGVncmF0aW9uXCIsXG4gICAgICBcImNoYWluY29kZVRyYWNrZXJzXCIsXG4gICAgICBgJHtjb250cmFjdE5hbWV9LmNvdW50YFxuICAgIClcbiAgKTtcbiAgdHJ5IHtcbiAgICBzZXF1ZW5jZSA9IHBhcnNlSW50KGZzLnJlYWRGaWxlU3luYyhjb3VudFBhdGgpLnRvU3RyaW5nKFwidXRmLThcIikpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIHNlcXVlbmNlID0gMTtcbiAgfVxuICBmcy53cml0ZUZpbGVTeW5jKGNvdW50UGF0aCwgc2VxdWVuY2UudG9TdHJpbmcoKSk7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IHBlZXIgb2YgcGVlcnMpIHtcbiAgICAgIHBhY2thZ2VDb250cmFjdChwZWVyLCBjb250cmFjdEZvbGRlciwgY29udHJhY3ROYW1lLCB2ZXJzaW9uKTtcbiAgICAgIGluc3RhbGxDb250cmFjdChwZWVyLCBjb250cmFjdE5hbWUpO1xuICAgICAgYXBwcm92ZUNvbnRyYWN0KFxuICAgICAgICBwZWVyLFxuICAgICAgICBjb250cmFjdE5hbWUsXG4gICAgICAgIHBlZXIgPT09IFwib3JnLWEtcGVlci0wXCIgPyBcInRscy1jYS1jZXJ0LnBlbVwiIDogXCJvcmRlcmVyLXRscy1jYS1jZXJ0LnBlbVwiLFxuICAgICAgICBzZXF1ZW5jZSxcbiAgICAgICAgdmVyc2lvblxuICAgICAgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY29uc29sZS5sb2coXCJFcnJvciBkZXBsb3lpbmcgY29udHJhY3Q6XCIsIGVyci5tZXNzYWdlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWl0Q2hhaW5jb2RlKFxuICBjb250cmFjdE5hbWU6IHN0cmluZyxcbiAgc2VxdWVuY2U6IG51bWJlciA9IDEsXG4gIHZlcnNpb246IHN0cmluZyA9IFwiMS4wXCJcbik6IHZvaWQge1xuICBleGVjU3luYyhgZG9ja2VyIGV4ZWMgb3JnLWEtcGVlci0wIG5vZGUgLi93ZWF2ZXIvbGliL2NvcmUvY2xpLmNqcyBjb21taXQtY2hhaW5jb2RlIC1kIC1zIFxcXG4gICAgLS1vcmRlcmVyLWFkZHJlc3Mgb3JnLWEtb3JkZXJlci0wOjcwMjEgXFxcbiAgICAtLWNoYW5uZWwtaWQgc2ltcGxlLWNoYW5uZWwgXFxcbiAgICAtLWNoYWluY29kZS1uYW1lICR7Y29udHJhY3ROYW1lfSBcXFxuICAgIC0tY2hhaW5jb2RlLXZlcnNpb24gJHt2ZXJzaW9ufSBcXFxuICAgIC0tc2VxdWVuY2UgJHtzZXF1ZW5jZX0gXFxcbiAgICAtLWVuYWJsZS10bHMgXFxcbiAgICAtLXRscy1jYS1jZXJ0LWZpbGUgL3dlYXZlci9wZWVyL3Rscy1jYS1jZXJ0LnBlbSBcXFxuICAgIC0tcGVlci1hZGRyZXNzZXMgb3JnLWEtcGVlci0wOjcwMzEsb3JnLWItcGVlci0wOjcwMzIsb3JnLWMtcGVlci0wOjcwMzMgXFxcbiAgICAtLXBlZXItcm9vdC10bHMgLi93ZWF2ZXIvcGVlci90bHMtY2EtY2VydC5wZW0sLi93ZWF2ZXIvcGVlci9vcmctYi10bHMtY2EtY2VydC5wZW0sLi93ZWF2ZXIvcGVlci9vcmctYy10bHMtY2EtY2VydC5wZW1gKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUNvbnRyYWN0UmVhZGluZXNzKFxuICBjb250cmFjdE5hbWU6IHN0cmluZyxcbiAgZG9ja2VyTmFtZTogc3RyaW5nID0gXCJvcmctYS1wZWVyLTBcIixcbiAgdGxzQ2VydDogc3RyaW5nID0gXCJ0bHMtY2EtY2VydC5wZW1cIixcbiAgY291bnRlciA9IDBcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHRyeSB7XG4gICAgLy8gUHJlcGFyZSB0aGUgSlNPTiBhcmd1bWVudCBmb3IgdGhlIGNoYWluY29kZVxuICAgIGNvbnN0IGNoYWluY29kZUFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBmdW5jdGlvbjogXCJoZWFsdGhjaGVja1wiLFxuICAgICAgQXJnczogW10sXG4gICAgfSk7XG5cbiAgICBpZiAoY291bnRlciA+IDEwKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICAvLyBJbnZva2UgdGhlIGNoYWluY29kZVxuICAgIGNvbnN0IHJlcyA9IGV4ZWNTeW5jKFxuICAgICAgYGRvY2tlciBleGVjICR7ZG9ja2VyTmFtZX0gcGVlciBjaGFpbmNvZGUgcXVlcnkgXFxcbiAgICAgICAgLUMgc2ltcGxlLWNoYW5uZWwgXFxcbiAgICAgICAgLW4gJHtjb250cmFjdE5hbWV9IFxcXG4gICAgICAgIC1jICcke2NoYWluY29kZUFyZ3N9JyBcXFxuICAgICAgICAtLXRscyAtLWNhZmlsZSAvd2VhdmVyL3BlZXIvJHt0bHNDZXJ0fWBcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXMudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gcmVzdWx0LmhlYWx0aGNoZWNrLnRvU3RyaW5nKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKFwiQ2hhaW5jb2RlIG5vdCByZWFkeS4gUmV0cnlpbmcuLi5cIik7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgNTAwMCkpOyAvLyBXYWl0IGZvciA1IHNlY29uZHMgYmVmb3JlIHJldHJ5aW5nXG4gICAgcmV0dXJuIGVuc3VyZUNvbnRyYWN0UmVhZGluZXNzKFxuICAgICAgY29udHJhY3ROYW1lLFxuICAgICAgZG9ja2VyTmFtZSxcbiAgICAgIHRsc0NlcnQsXG4gICAgICBjb3VudGVyKytcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc29sZS53YXJuKFwiQ29udHJhY3Qgbm90IHRyaW1taW5nIHJlc3BvbnNlIHByb3Blcmx5OiBcIiwgc3RyKTtcbiAgcmV0dXJuIHN0ci50cmltKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VDaGFpbmNvZGUoXG4gIGNvbnRyYWN0TmFtZTogc3RyaW5nLFxuICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgYXJnczogYW55W10sXG4gIHRyYW5zaWVudDogYW55ID0ge30sXG4gIGRvY2tlck5hbWU6IHN0cmluZyA9IFwib3JnLWEtcGVlci0wXCIsXG4gIHRsczogc3RyaW5nID0gXCJ0bHMtY2EtY2VydC5wZW1cIlxuKSB7XG4gIC8vIFByZXBhcmUgdGhlIEpTT04gYXJndW1lbnQgZm9yIHRoZSBjaGFpbmNvZGVcbiAgY29uc3QgY2hhaW5jb2RlQXJncyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBmdW5jdGlvbjogZnVuY3Rpb25OYW1lLFxuICAgIEFyZ3M6IGFyZ3MsXG4gIH0pO1xuXG4gIGNvbnN0IHRyYW5zaWVudERhdGEgPSBKU09OLnN0cmluZ2lmeSh0cmFuc2llbnQpO1xuICBjb25zdCB0cmFuc2llbnRTdHJpbmcgPSBgLS10cmFuc2llbnQgJyR7dHJhbnNpZW50RGF0YX0nYDtcblxuICAvLyBJbnZva2UgdGhlIGNoYWluY29kZVxuICByZXR1cm4gZXhlY1N5bmMoXG4gICAgYGRvY2tlciBleGVjICR7ZG9ja2VyTmFtZX0gcGVlciBjaGFpbmNvZGUgaW52b2tlIFxcXG4gICAgLUMgc2ltcGxlLWNoYW5uZWwgXFxcbiAgICAtbiAke2NvbnRyYWN0TmFtZX0gXFxcbiAgICAtYyAnJHtjaGFpbmNvZGVBcmdzfScgXFxcbiAgICAtLXBlZXJBZGRyZXNzZXMgb3JnLWEtcGVlci0wOjcwMzEgXFxcbiAgICAtLXRsc1Jvb3RDZXJ0RmlsZXMgL3dlYXZlci9wZWVyL3Rscy1jYS1jZXJ0LnBlbSBcXFxuICAgIC0tcGVlckFkZHJlc3NlcyBvcmctYi1wZWVyLTA6NzAzMiBcXFxuICAgIC0tdGxzUm9vdENlcnRGaWxlcyAvd2VhdmVyL3BlZXIvb3JnLWItdGxzLWNhLWNlcnQucGVtIFxcXG4gICAgLS1wZWVyQWRkcmVzc2VzIG9yZy1jLXBlZXItMDo3MDMzIFxcXG4gICAgLS10bHNSb290Q2VydEZpbGVzIC93ZWF2ZXIvcGVlci9vcmctYy10bHMtY2EtY2VydC5wZW0gXFxcbiAgICAtbyBvcmctYS1vcmRlcmVyLTA6NzAyMSBcXFxuICAgIC0tdGxzIC0tY2FmaWxlIC93ZWF2ZXIvcGVlci8ke3Rsc30gXFxcbiAgICAke3RyYW5zaWVudCA/IHRyYW5zaWVudFN0cmluZyA6IFwiXCJ9YFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlDaGFpbmNvZGUoXG4gIGNvbnRyYWN0TmFtZTogc3RyaW5nLFxuICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgYXJnczogYW55W10sXG4gIGRvY2tlck5hbWU6IHN0cmluZyA9IFwib3JnLWEtcGVlci0wXCIsXG4gIHRsczogc3RyaW5nID0gXCJ0bHMtY2EtY2VydC5wZW1cIlxuKSB7XG4gIHRyeSB7XG4gICAgLy8gUHJlcGFyZSB0aGUgSlNPTiBhcmd1bWVudCBmb3IgdGhlIGNoYWluY29kZVxuICAgIGNvbnN0IGNoYWluY29kZUFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBmdW5jdGlvbjogZnVuY3Rpb25OYW1lLFxuICAgICAgQXJnczogYXJncyxcbiAgICB9KTtcblxuICAgIC8vIEludm9rZSB0aGUgY2hhaW5jb2RlXG4gICAgY29uc3QgcmVzID0gZXhlY1N5bmMoXG4gICAgICBgZG9ja2VyIGV4ZWMgJHtkb2NrZXJOYW1lfSBwZWVyIGNoYWluY29kZSBxdWVyeSBcXFxuICAgICAgICAtQyBzaW1wbGUtY2hhbm5lbCBcXFxuICAgICAgICAtbiAke2NvbnRyYWN0TmFtZX0gXFxcbiAgICAgICAgLWMgJyR7Y2hhaW5jb2RlQXJnc30nIFxcXG4gICAgICAgIC0tdGxzIC0tY2FmaWxlICR7dGxzfWBcbiAgICApO1xuXG4gICAgY29uc3QgcHJvY2Vzc2VkID0gcmVzLnRvU3RyaW5nKCk7XG4gICAgY29uc29sZS5sb2coXCJCbG9ja2NoYWluIHJlYWQ6XCIsIHByb2Nlc3NlZCk7XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKFwiRmFpbGVkIHRvIHJlYWQgYmxvY2tjaGFpblwiKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludm9rZVByaXZhdGVDaGFpbmNvZGUoXG4gIGNvbnRyYWN0TmFtZTogc3RyaW5nLFxuICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgYXJnczogYW55W10sXG4gIHRyYW5zaWVudDogYW55ID0ge30sXG4gIGRvY2tlck5hbWU6IHN0cmluZyA9IFwib3JnLWEtcGVlci0wXCIsXG4gIHRsczogc3RyaW5nID0gXCJ0bHMtY2EtY2VydC5wZW1cIlxuKSB7XG4gIC8vIFByZXBhcmUgdGhlIEpTT04gYXJndW1lbnQgZm9yIHRoZSBjaGFpbmNvZGVcbiAgY29uc3QgY2hhaW5jb2RlQXJncyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBmdW5jdGlvbjogZnVuY3Rpb25OYW1lLFxuICAgIEFyZ3M6IGFyZ3MsXG4gIH0pO1xuXG4gIGNvbnN0IHRyYW5zaWVudERhdGEgPSBKU09OLnN0cmluZ2lmeSh0cmFuc2llbnQpO1xuICBjb25zdCB0cmFuc2llbnRTdHJpbmcgPSBgLS10cmFuc2llbnQgJyR7dHJhbnNpZW50RGF0YX0nYDtcblxuICAvLyBJbnZva2UgdGhlIGNoYWluY29kZVxuICByZXR1cm4gZXhlY1N5bmMoXG4gICAgYGRvY2tlciBleGVjICR7ZG9ja2VyTmFtZX0gcGVlciBjaGFpbmNvZGUgaW52b2tlIFxcXG4gICAgLUMgc2ltcGxlLWNoYW5uZWwgXFxcbiAgICAtbiAke2NvbnRyYWN0TmFtZX0gXFxcbiAgICAtYyAnJHtjaGFpbmNvZGVBcmdzfScgXFxcbiAgICAtLXBlZXJBZGRyZXNzZXMgb3JnLWEtcGVlci0wOjcwMzEgXFxcbiAgICAtLXRsc1Jvb3RDZXJ0RmlsZXMgL3dlYXZlci9wZWVyL3Rscy1jYS1jZXJ0LnBlbSBcXFxuICAgIC1vIG9yZy1hLW9yZGVyZXItMDo3MDIxIFxcXG4gICAgLS10bHMgLS1jYWZpbGUgL3dlYXZlci9wZWVyLyR7dGxzfSBcXFxuICAgICR7dHJhbnNpZW50ID8gdHJhbnNpZW50U3RyaW5nIDogXCJcIn1gXG4gICk7XG5cbiAgLy8gICAtLXBlZXJBZGRyZXNzZXMgb3JnLWItcGVlci0wOjcwMzIgXFxcbiAgLy8gLS10bHNSb290Q2VydEZpbGVzIC93ZWF2ZXIvcGVlci9vcmctYi10bHMtY2EtY2VydC5wZW0gXFxcbiAgLy8gLS1wZWVyQWRkcmVzc2VzIG9yZy1jLXBlZXItMDo3MDMzIFxcXG4gIC8vIC0tdGxzUm9vdENlcnRGaWxlcyAvd2VhdmVyL3BlZXIvb3JnLWMtdGxzLWNhLWNlcnQucGVtIFxcXG59XG5cbmV4cG9ydCBlbnVtIFNjcmlwdENvbW1hbmRzIHtcbiAgU1RBUlQgPSBcImZhYnJpYy1jaGFpbmNvZGUtbm9kZSBzdGFydCBcXFxuICAgICAgICAgIC0tZ3JwYy5tYXhfcmVjZWl2ZV9tZXNzYWdlX2xlbmd0aCAke0NIQUlOQ09ERV9NQVhSRUNWTVNHU0laRS0xNTcyODY0MH0gXFxcbiAgICAgICAgICAtLWdycGMubWF4X3NlbmRfbWVzc2FnZV9sZW5ndGggJHtDSEFJTkNPREVfTUFYU0VORE1TR1NJWkUtMTU3Mjg2NDB9IFwiLFxuICBTVEFSVF9DQ0FBUyA9IFwiZmFicmljLWNoYWluY29kZS1ub2RlIHNlcnZlciBcXFxuICAgICAgICAgIC0tY2hhaW5jb2RlLWFkZHJlc3M9JENIQUlOQ09ERV9TRVJWRVJfQUREUkVTUyBcXFxuICAgICAgICAgIC0tY2hhaW5jb2RlLWlkPSRDSEFJTkNPREVfSUQgXFxcbiAgICAgICAgICAtLWNoYWluY29kZS10bHMtY2VydC1maWxlPSR7Q0hBSU5DT0RFX1RMU19DRVJUfSBcXFxuICAgICAgICAgIC0tY2hhaW5jb2RlLXRscy1rZXktZmlsZT0ke0NIQUlOQ09ERV9UTFNfS0VZfSBcXFxuICAgICAgICAgIC0tZ3JwYy5tYXhfcmVjZWl2ZV9tZXNzYWdlX2xlbmd0aCAke0NIQUlOQ09ERV9NQVhSRUNWTVNHU0laRS0xNTcyODY0MH0gXFxcbiAgICAgICAgICAtLWdycGMubWF4X3NlbmRfbWVzc2FnZV9sZW5ndGggJHtDSEFJTkNPREVfTUFYU0VORE1TR1NJWkUtMTU3Mjg2NDB9IFxcXG4gICAgICAgICAgLS10bHMuZW5hYmxlZD10cnVlXCIsXG4gIFNUQVJUX0NDQUFTX0RFQlVHID0gXCJub2RlIC0taW5zcGVjdD0wLjAuMC4wOjkyMjkgLi9ub2RlX21vZHVsZXMvLmJpbi9mYWJyaWMtY2hhaW5jb2RlLW5vZGUgc2VydmVyIFxcXG4gICAgICAgICAgLS1jaGFpbmNvZGUtYWRkcmVzcz0kQ0hBSU5DT0RFX1NFUlZFUl9BRERSRVNTIFxcXG4gICAgICAgICAgLS1jaGFpbmNvZGUtaWQ9JENIQUlOQ09ERV9JRCBcXFxuICAgICAgICAgIC0tY2hhaW5jb2RlLXRscy1jZXJ0LWZpbGU9JHtDSEFJTkNPREVfVExTX0NFUlR9IFxcXG4gICAgICAgICAgLS1jaGFpbmNvZGUtdGxzLWtleS1maWxlPSR7Q0hBSU5DT0RFX1RMU19LRVl9IFxcXG4gICAgICAgICAgLS1ncnBjLm1heF9yZWNlaXZlX21lc3NhZ2VfbGVuZ3RoICR7Q0hBSU5DT0RFX01BWFJFQ1ZNU0dTSVpFLTE1NzI4NjQwfSBcXFxuICAgICAgICAgIC0tZ3JwYy5tYXhfc2VuZF9tZXNzYWdlX2xlbmd0aCAke0NIQUlOQ09ERV9NQVhTRU5ETVNHU0laRS0xNTcyODY0MH0gXFxcbiAgICAgICAgICAtLXRscy5lbmFibGVkPXRydWVcIixcbiAgU1RBUlRfREVCVUcgPSBcIm5vZGUgLS1pbnNwZWN0PTAuMC4wLjA6OTIyOSAvdXNyL2xvY2FsL3NyYy9ub2RlX21vZHVsZXMvLmJpbi9mYWJyaWMtY2hhaW5jb2RlLW5vZGUgc3RhcnQgXFxcbiAgICAgICAgICAtLWdycGMubWF4X3JlY2VpdmVfbWVzc2FnZV9sZW5ndGggJHtDSEFJTkNPREVfTUFYUkVDVk1TR1NJWkUtMTU3Mjg2NDB9IFxcXG4gICAgICAgICAgLS1ncnBjLm1heF9zZW5kX21lc3NhZ2VfbGVuZ3RoICR7Q0hBSU5DT0RFX01BWFNFTkRNU0dTSVpFLTE1NzI4NjQwfVwiLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJhY3RTdGFydENvbW1hbmQoXG4gIGRlYnVnOiBib29sZWFuLFxuICBjY2FhczogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgaWYgKGNjYWFzKSB7XG4gICAgcmV0dXJuIGRlYnVnXG4gICAgICA/IFNjcmlwdENvbW1hbmRzLlNUQVJUX0NDQUFTX0RFQlVHXG4gICAgICA6IFNjcmlwdENvbW1hbmRzLlNUQVJUX0NDQUFTO1xuICB9XG4gIHJldHVybiBkZWJ1ZyA/IFNjcmlwdENvbW1hbmRzLlNUQVJUX0RFQlVHIDogU2NyaXB0Q29tbWFuZHMuU1RBUlQ7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERpYWdub3N0aWNzKGRpYWdzOiByZWFkb25seSB0cy5EaWFnbm9zdGljW10pOiBzdHJpbmcge1xuICBjb25zdCBob3N0OiB0cy5Gb3JtYXREaWFnbm9zdGljc0hvc3QgPSB7XG4gICAgZ2V0Q2Fub25pY2FsRmlsZU5hbWU6IChmKSA9PiBmLFxuICAgIGdldEN1cnJlbnREaXJlY3Rvcnk6IHRzLnN5cy5nZXRDdXJyZW50RGlyZWN0b3J5LFxuICAgIGdldE5ld0xpbmU6ICgpID0+IHRzLnN5cy5uZXdMaW5lLFxuICB9O1xuICByZXR1cm4gdHMuZm9ybWF0RGlhZ25vc3RpY3NXaXRoQ29sb3JBbmRDb250ZXh0KGRpYWdzLCBob3N0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVXaXRoVHNjb25maWdPdmVycmlkZXMoXG4gIHRzY29uZmlnUGF0aDogc3RyaW5nLFxuICBvdmVycmlkZXM6IFBhcnRpYWw8dHMuQ29tcGlsZXJPcHRpb25zPlxuKTogdm9pZCB7XG4gIGNvbnN0IGFic0NvbmZpZ1BhdGggPSBwYXRoLmlzQWJzb2x1dGUodHNjb25maWdQYXRoKVxuICAgID8gdHNjb25maWdQYXRoXG4gICAgOiBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgdHNjb25maWdQYXRoKTtcblxuICAvLyAxKSBSZWFkIHRoZSB0c2NvbmZpZy5qc29uXG4gIGNvbnN0IGNvbmZpZ0ZpbGUgPSB0cy5yZWFkQ29uZmlnRmlsZShhYnNDb25maWdQYXRoLCB0cy5zeXMucmVhZEZpbGUpO1xuICBpZiAoY29uZmlnRmlsZS5lcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihmb3JtYXREaWFnbm9zdGljcyhbY29uZmlnRmlsZS5lcnJvcl0pKTtcbiAgfVxuXG4gIC8vIDIpIFBhcnNlIGl0IChyZXNvbHZlcyBcImV4dGVuZHNcIiwgaW5jbHVkZS9leGNsdWRlL2ZpbGVzLCBldGMuKVxuICBjb25zdCBjb25maWdEaXIgPSBwYXRoLmRpcm5hbWUoYWJzQ29uZmlnUGF0aCk7XG4gIGNvbnN0IHBhcnNlZCA9IHRzLnBhcnNlSnNvbkNvbmZpZ0ZpbGVDb250ZW50KFxuICAgIGNvbmZpZ0ZpbGUuY29uZmlnLFxuICAgIHRzLnN5cyxcbiAgICBjb25maWdEaXIsXG4gICAgLypleGlzdGluZ09wdGlvbnMqLyB1bmRlZmluZWQsXG4gICAgYWJzQ29uZmlnUGF0aFxuICApO1xuXG4gIGlmIChwYXJzZWQuZXJyb3JzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihmb3JtYXREaWFnbm9zdGljcyhwYXJzZWQuZXJyb3JzKSk7XG4gIH1cblxuICAvLyAzKSBPdmVycmlkZSBjb21waWxlciBvcHRpb25zIGluLW1lbW9yeVxuICBjb25zdCBvcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMgPSB7XG4gICAgLi4ucGFyc2VkLm9wdGlvbnMsXG4gICAgLi4ub3ZlcnJpZGVzLFxuICB9O1xuXG4gIC8vIE9wdGlvbmFsOiBJZiB5b3Ugb3ZlcnJpZGUgb3V0RGlyL3Jvb3REaXIsIGVuc3VyZSB0aGV54oCZcmUgYWJzb2x1dGVcbiAgLy8gdG8gYXZvaWQgc3VycHJpc2VzIGRlcGVuZGluZyBvbiBDV0QuXG4gIGlmIChvcHRpb25zLm91dERpcikgb3B0aW9ucy5vdXREaXIgPSBwYXRoLnJlc29sdmUoY29uZmlnRGlyLCBvcHRpb25zLm91dERpcik7XG4gIGlmIChvcHRpb25zLnJvb3REaXIpXG4gICAgb3B0aW9ucy5yb290RGlyID0gcGF0aC5yZXNvbHZlKGNvbmZpZ0Rpciwgb3B0aW9ucy5yb290RGlyKTtcblxuICAvLyA0KSBDcmVhdGUgcHJvZ3JhbSArIGVtaXRcbiAgY29uc3QgcHJvZ3JhbSA9IHRzLmNyZWF0ZVByb2dyYW0oe1xuICAgIHJvb3ROYW1lczogcGFyc2VkLmZpbGVOYW1lcyxcbiAgICBvcHRpb25zLFxuICAgIHByb2plY3RSZWZlcmVuY2VzOiBwYXJzZWQucHJvamVjdFJlZmVyZW5jZXMsXG4gIH0pO1xuXG4gIGNvbnN0IHByZUVtaXQgPSB0cy5nZXRQcmVFbWl0RGlhZ25vc3RpY3MocHJvZ3JhbSk7XG4gIGlmIChwcmVFbWl0Lmxlbmd0aCkge1xuICAgIC8vIElmIHlvdSB3YW50IFwidHJhbnNwaWxlIGFueXdheVwiLCB5b3UgY2FuIGNob29zZSB0byBub3QgdGhyb3cgaGVyZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoZm9ybWF0RGlhZ25vc3RpY3MocHJlRW1pdCkpO1xuICB9XG5cbiAgY29uc3QgZW1pdFJlc3VsdCA9IHByb2dyYW0uZW1pdCgpO1xuICBjb25zdCBlbWl0RGlhZ25vc3RpY3MgPSBlbWl0UmVzdWx0LmRpYWdub3N0aWNzID8/IFtdO1xuICBpZiAoZW1pdERpYWdub3N0aWNzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihmb3JtYXREaWFnbm9zdGljcyhlbWl0RGlhZ25vc3RpY3MpKTtcbiAgfVxuXG4gIGlmIChlbWl0UmVzdWx0LmVtaXRTa2lwcGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRW1pdCB3YXMgc2tpcHBlZCAoY2hlY2sgZGlhZ25vc3RpY3MgYWJvdmUpLlwiKTtcbiAgfVxufVxuIl19
@@ -1,3 +1,4 @@
1
+ import ts from "typescript";
1
2
  export declare function didInfrastructureBoot(containerName?: string): boolean;
2
3
  export declare function ensureInfrastructureBooted(containerName?: string, timeout?: number, attempts?: number): Promise<void>;
3
4
  export declare function packageContract(dockerName: string, contractFolder: string, contractName: string, version?: string): void;
@@ -17,3 +18,4 @@ export declare enum ScriptCommands {
17
18
  START_DEBUG = "node --inspect=0.0.0.0:9229 /usr/local/src/node_modules/.bin/fabric-chaincode-node start --grpc.max_receive_message_length ${CHAINCODE_MAXRECVMSGSIZE-15728640} --grpc.max_send_message_length ${CHAINCODE_MAXSENDMSGSIZE-15728640}"
18
19
  }
19
20
  export declare function getContractStartCommand(debug: boolean, ccaas: boolean): string;
21
+ export declare function compileWithTsconfigOverrides(tsconfigPath: string, overrides: Partial<ts.CompilerOptions>): void;