@transcend-io/cli 10.29.3 → 12.0.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 (367) hide show
  1. package/README.md +229 -84
  2. package/dist/app-CR3U95JW.mjs +148 -0
  3. package/dist/app-CR3U95JW.mjs.map +1 -0
  4. package/dist/{approvePrivacyRequests-DmQY27tf.mjs → approvePrivacyRequests-BDG82nlp.mjs} +2 -2
  5. package/dist/{approvePrivacyRequests-DmQY27tf.mjs.map → approvePrivacyRequests-BDG82nlp.mjs.map} +1 -1
  6. package/dist/bin/bash-complete.mjs +1 -1
  7. package/dist/bin/cli.mjs +1 -1
  8. package/dist/bin/deprecated-command.mjs +1 -1
  9. package/dist/{buildExamples-COM0o0UR.mjs → buildExamples-B6BdW0FD.mjs} +2 -2
  10. package/dist/{buildExamples-COM0o0UR.mjs.map → buildExamples-B6BdW0FD.mjs.map} +1 -1
  11. package/dist/{buildXdiSyncEndpoint-5tSouA2b.mjs → buildXdiSyncEndpoint-FExEagKc.mjs} +2 -2
  12. package/dist/{buildXdiSyncEndpoint-5tSouA2b.mjs.map → buildXdiSyncEndpoint-FExEagKc.mjs.map} +1 -1
  13. package/dist/{bulkRestartRequests-CZrXs34U.mjs → bulkRestartRequests-OKwKXc52.mjs} +2 -2
  14. package/dist/{bulkRestartRequests-CZrXs34U.mjs.map → bulkRestartRequests-OKwKXc52.mjs.map} +1 -1
  15. package/dist/{bulkRetryEnrichers-BOXW2gK0.mjs → bulkRetryEnrichers-Dl-n8AFF.mjs} +2 -2
  16. package/dist/{bulkRetryEnrichers-BOXW2gK0.mjs.map → bulkRetryEnrichers-Dl-n8AFF.mjs.map} +1 -1
  17. package/dist/{cancelPrivacyRequests-CA8X4g4A.mjs → cancelPrivacyRequests-BIgX5SDz.mjs} +2 -2
  18. package/dist/{cancelPrivacyRequests-CA8X4g4A.mjs.map → cancelPrivacyRequests-BIgX5SDz.mjs.map} +1 -1
  19. package/dist/{codecs-CTxFjCg4.mjs → codecs-CfcaFoZR.mjs} +1 -1
  20. package/dist/{codecs-CTxFjCg4.mjs.map → codecs-CfcaFoZR.mjs.map} +1 -1
  21. package/dist/{collectCsvFilesOrExit-B1VOVGWN.mjs → collectCsvFilesOrExit-BindZ0dF.mjs} +1 -1
  22. package/dist/{collectCsvFilesOrExit-B1VOVGWN.mjs.map → collectCsvFilesOrExit-BindZ0dF.mjs.map} +1 -1
  23. package/dist/{collectParquetFilesOrExit-DVlv5ctt.mjs → collectParquetFilesOrExit-CbNQ9CJc.mjs} +1 -1
  24. package/dist/{collectParquetFilesOrExit-DVlv5ctt.mjs.map → collectParquetFilesOrExit-CbNQ9CJc.mjs.map} +1 -1
  25. package/dist/command-X7lkPELf.mjs +9 -0
  26. package/dist/command-X7lkPELf.mjs.map +1 -0
  27. package/dist/command-output-BJcDRXNr.mjs +2 -0
  28. package/dist/command-output-BJcDRXNr.mjs.map +1 -0
  29. package/dist/command-output-BRfF3YFv.mjs +2 -0
  30. package/dist/command-output-BRfF3YFv.mjs.map +1 -0
  31. package/dist/commands/admin/chunk-csv/worker.mjs +1 -1
  32. package/dist/commands/admin/parquet-to-csv/worker.mjs +1 -1
  33. package/dist/{consentManagersToBusinessEntities-CBJ81aGO.mjs → consentManagersToBusinessEntities-DG0_eby5.mjs} +1 -1
  34. package/dist/{consentManagersToBusinessEntities-CBJ81aGO.mjs.map → consentManagersToBusinessEntities-DG0_eby5.mjs.map} +1 -1
  35. package/dist/constants-BRsj50Nb.mjs +2 -0
  36. package/dist/{constants-XH8NIJGC.mjs.map → constants-BRsj50Nb.mjs.map} +1 -1
  37. package/dist/{constants-DXzsg2CQ.mjs → constants-DC_bBO09.mjs} +3 -3
  38. package/dist/{constants-DXzsg2CQ.mjs.map → constants-DC_bBO09.mjs.map} +1 -1
  39. package/dist/{constants-D_HVDaOy.mjs → constants-qvGk0wlN.mjs} +1 -1
  40. package/dist/{constants-D_HVDaOy.mjs.map → constants-qvGk0wlN.mjs.map} +1 -1
  41. package/dist/{context-B33NT3ki.mjs → context-D0A0LxsP.mjs} +1 -1
  42. package/dist/{context-B33NT3ki.mjs.map → context-D0A0LxsP.mjs.map} +1 -1
  43. package/dist/{createPoolingCommandUi-BtyIMQcK.mjs → createPoolingCommandUi-CyPZ3GqN.mjs} +5 -5
  44. package/dist/{createPoolingCommandUi-BtyIMQcK.mjs.map → createPoolingCommandUi-CyPZ3GqN.mjs.map} +1 -1
  45. package/dist/{dataFlowsToDataSilos-BF6fzWcm.mjs → dataFlowsToDataSilos-CRqbNjZ0.mjs} +1 -1
  46. package/dist/{dataFlowsToDataSilos-BF6fzWcm.mjs.map → dataFlowsToDataSilos-CRqbNjZ0.mjs.map} +1 -1
  47. package/dist/deno-runtime-CB2HBach.mjs +2 -0
  48. package/dist/deno-runtime-CB2HBach.mjs.map +1 -0
  49. package/dist/{done-input-validation-BUz-aVC5.mjs → done-input-validation-LiTaCEzF.mjs} +1 -1
  50. package/dist/{done-input-validation-BUz-aVC5.mjs.map → done-input-validation-LiTaCEzF.mjs.map} +1 -1
  51. package/dist/{downloadPrivacyRequestFiles-DbZjPjHw.mjs → downloadPrivacyRequestFiles-EBySRnvd.mjs} +2 -2
  52. package/dist/{downloadPrivacyRequestFiles-DbZjPjHw.mjs.map → downloadPrivacyRequestFiles-EBySRnvd.mjs.map} +1 -1
  53. package/dist/{extractClientError-HZ2U7yqV.mjs → extractClientError-DUJxHv07.mjs} +1 -1
  54. package/dist/{extractClientError-HZ2U7yqV.mjs.map → extractClientError-DUJxHv07.mjs.map} +1 -1
  55. package/dist/{fetchAllRequests-2TZr-LfT.mjs → fetchAllRequests-BI0tFl_a.mjs} +2 -2
  56. package/dist/{fetchAllRequests-2TZr-LfT.mjs.map → fetchAllRequests-BI0tFl_a.mjs.map} +1 -1
  57. package/dist/{formatPolicyBundleVersionSummary-CJmMCLtJ.mjs → formatPolicyBundleVersionSummary-DCHl1Vhy.mjs} +1 -1
  58. package/dist/{formatPolicyBundleVersionSummary-CJmMCLtJ.mjs.map → formatPolicyBundleVersionSummary-DCHl1Vhy.mjs.map} +1 -1
  59. package/dist/{fuzzyMatchColumns-CQCzpjWC.mjs → fuzzyMatchColumns-2NmQqCZI.mjs} +2 -2
  60. package/dist/{fuzzyMatchColumns-CQCzpjWC.mjs.map → fuzzyMatchColumns-2NmQqCZI.mjs.map} +1 -1
  61. package/dist/{generateCrossAccountApiKeys-C1iD6Las.mjs → generateCrossAccountApiKeys-pWTrIUE6.mjs} +2 -2
  62. package/dist/{generateCrossAccountApiKeys-C1iD6Las.mjs.map → generateCrossAccountApiKeys-pWTrIUE6.mjs.map} +1 -1
  63. package/dist/impl-0-_oxvck.mjs +2 -0
  64. package/dist/impl-0-_oxvck.mjs.map +1 -0
  65. package/dist/{impl-CNgOWzOX.mjs → impl-1SsreZWo.mjs} +2 -2
  66. package/dist/{impl-CNgOWzOX.mjs.map → impl-1SsreZWo.mjs.map} +1 -1
  67. package/dist/{impl-BjoGaK1M.mjs → impl-7rdGuHOC.mjs} +2 -2
  68. package/dist/{impl-BjoGaK1M.mjs.map → impl-7rdGuHOC.mjs.map} +1 -1
  69. package/dist/{impl-DRpK-QLC.mjs → impl-ApZGIx6l.mjs} +2 -2
  70. package/dist/{impl-DRpK-QLC.mjs.map → impl-ApZGIx6l.mjs.map} +1 -1
  71. package/dist/{impl-DVeGQCrr.mjs → impl-Ay6JeH-7.mjs} +2 -2
  72. package/dist/{impl-DVeGQCrr.mjs.map → impl-Ay6JeH-7.mjs.map} +1 -1
  73. package/dist/{impl-BR4ReYFA.mjs → impl-B2ZXtnpX.mjs} +2 -2
  74. package/dist/{impl-BR4ReYFA.mjs.map → impl-B2ZXtnpX.mjs.map} +1 -1
  75. package/dist/impl-B440iuvL.mjs +3 -0
  76. package/dist/impl-B440iuvL.mjs.map +1 -0
  77. package/dist/{impl-v_P8hszk2.mjs → impl-B7l4bLG5.mjs} +2 -2
  78. package/dist/impl-B7l4bLG5.mjs.map +1 -0
  79. package/dist/{impl-BPoEH3Nf2.mjs → impl-B94dMG4x2.mjs} +2 -2
  80. package/dist/{impl-BPoEH3Nf2.mjs.map → impl-B94dMG4x2.mjs.map} +1 -1
  81. package/dist/{impl-DXowiNOz.mjs → impl-BH1fCPDh.mjs} +2 -2
  82. package/dist/{impl-DXowiNOz.mjs.map → impl-BH1fCPDh.mjs.map} +1 -1
  83. package/dist/{impl-CfvxD3RI.mjs → impl-BLOhoP-b2.mjs} +2 -2
  84. package/dist/impl-BLOhoP-b2.mjs.map +1 -0
  85. package/dist/{impl-CMxliF19.mjs → impl-BLQDgwxL.mjs} +2 -2
  86. package/dist/{impl-CMxliF19.mjs.map → impl-BLQDgwxL.mjs.map} +1 -1
  87. package/dist/{impl-Dqqb0lVN.mjs → impl-BWPPVXG3.mjs} +3 -3
  88. package/dist/{impl-Dqqb0lVN.mjs.map → impl-BWPPVXG3.mjs.map} +1 -1
  89. package/dist/{impl-DceiaFcK.mjs → impl-BdTxFv63.mjs} +2 -2
  90. package/dist/{impl-DceiaFcK.mjs.map → impl-BdTxFv63.mjs.map} +1 -1
  91. package/dist/impl-BpVe6fMe.mjs +3 -0
  92. package/dist/{impl--JGnR3wp.mjs.map → impl-BpVe6fMe.mjs.map} +1 -1
  93. package/dist/impl-BqTMPbwc2.mjs +2 -0
  94. package/dist/impl-BqTMPbwc2.mjs.map +1 -0
  95. package/dist/impl-CAoIp9Nl2.mjs +3 -0
  96. package/dist/impl-CAoIp9Nl2.mjs.map +1 -0
  97. package/dist/{impl-99xoQXHW.mjs → impl-CU38kdj8.mjs} +2 -2
  98. package/dist/{impl-99xoQXHW.mjs.map → impl-CU38kdj8.mjs.map} +1 -1
  99. package/dist/{impl-DxnrCWeR2.mjs → impl-CWP6AXSb.mjs} +2 -2
  100. package/dist/impl-CWP6AXSb.mjs.map +1 -0
  101. package/dist/impl-CY8C-Fvj2.mjs +2 -0
  102. package/dist/impl-CY8C-Fvj2.mjs.map +1 -0
  103. package/dist/{impl-CfPDnai_.mjs → impl-C_Ifcb00.mjs} +2 -2
  104. package/dist/{impl-CfPDnai_.mjs.map → impl-C_Ifcb00.mjs.map} +1 -1
  105. package/dist/{impl-CPSEzCc9.mjs → impl-Cb42aI60.mjs} +2 -2
  106. package/dist/{impl-CPSEzCc9.mjs.map → impl-Cb42aI60.mjs.map} +1 -1
  107. package/dist/impl-Cee7Q1Ne.mjs +2 -0
  108. package/dist/impl-Cee7Q1Ne.mjs.map +1 -0
  109. package/dist/impl-CieztjdM.mjs +2 -0
  110. package/dist/impl-CieztjdM.mjs.map +1 -0
  111. package/dist/{impl-DqhZR11m.mjs → impl-ClqrQo1M.mjs} +2 -2
  112. package/dist/{impl-DqhZR11m.mjs.map → impl-ClqrQo1M.mjs.map} +1 -1
  113. package/dist/impl-CnHfn7rr.mjs +5 -0
  114. package/dist/{impl-DPtx5iZO.mjs.map → impl-CnHfn7rr.mjs.map} +1 -1
  115. package/dist/{impl-jJnYd4tJ.mjs → impl-CrdqsTUy.mjs} +2 -2
  116. package/dist/{impl-jJnYd4tJ.mjs.map → impl-CrdqsTUy.mjs.map} +1 -1
  117. package/dist/{impl-DzUTmaID2.mjs → impl-CsaT3aM2.mjs} +2 -2
  118. package/dist/impl-CsaT3aM2.mjs.map +1 -0
  119. package/dist/{impl-DB8Kt2qF2.mjs → impl-CspH2ZWx.mjs} +2 -2
  120. package/dist/impl-CspH2ZWx.mjs.map +1 -0
  121. package/dist/{impl-H9kweQnu2.mjs → impl-CudSYx-g.mjs} +2 -2
  122. package/dist/impl-CudSYx-g.mjs.map +1 -0
  123. package/dist/{impl-DUBsZL5O.mjs → impl-Cxprr2hw.mjs} +2 -2
  124. package/dist/{impl-DUBsZL5O.mjs.map → impl-Cxprr2hw.mjs.map} +1 -1
  125. package/dist/{impl-C5Mq4wv0.mjs → impl-D-a5xGld.mjs} +2 -2
  126. package/dist/{impl-C5Mq4wv0.mjs.map → impl-D-a5xGld.mjs.map} +1 -1
  127. package/dist/{impl-CGioITgZ.mjs → impl-D1UogVAq.mjs} +2 -2
  128. package/dist/{impl-CGioITgZ.mjs.map → impl-D1UogVAq.mjs.map} +1 -1
  129. package/dist/{impl-B37wtYBz.mjs → impl-D1f9mJL_.mjs} +2 -2
  130. package/dist/{impl-B37wtYBz.mjs.map → impl-D1f9mJL_.mjs.map} +1 -1
  131. package/dist/{impl-Cl9ndadE.mjs → impl-DJcNhpbx.mjs} +2 -2
  132. package/dist/{impl-Cl9ndadE.mjs.map → impl-DJcNhpbx.mjs.map} +1 -1
  133. package/dist/impl-DQG1pMzD2.mjs +2 -0
  134. package/dist/impl-DQG1pMzD2.mjs.map +1 -0
  135. package/dist/impl-DQcgEx7V2.mjs +298 -0
  136. package/dist/impl-DQcgEx7V2.mjs.map +1 -0
  137. package/dist/impl-DRKPx_I9.mjs +2 -0
  138. package/dist/impl-DRKPx_I9.mjs.map +1 -0
  139. package/dist/{impl-CXQ3OYR9.mjs → impl-DTadLabu.mjs} +2 -2
  140. package/dist/{impl-CXQ3OYR9.mjs.map → impl-DTadLabu.mjs.map} +1 -1
  141. package/dist/{impl-B9lSnjby.mjs → impl-DXbxO2VJ.mjs} +2 -2
  142. package/dist/{impl-B9lSnjby.mjs.map → impl-DXbxO2VJ.mjs.map} +1 -1
  143. package/dist/{impl-Cel22rUg2.mjs → impl-DcL-8NEa2.mjs} +2 -2
  144. package/dist/{impl-Cel22rUg2.mjs.map → impl-DcL-8NEa2.mjs.map} +1 -1
  145. package/dist/{impl-DKepRc812.mjs → impl-DeCRXfAh2.mjs} +2 -2
  146. package/dist/{impl-DKepRc812.mjs.map → impl-DeCRXfAh2.mjs.map} +1 -1
  147. package/dist/impl-DezV3QMo.mjs +3 -0
  148. package/dist/impl-DezV3QMo.mjs.map +1 -0
  149. package/dist/{impl-COujMWgp.mjs → impl-Dg7XSQdO2.mjs} +2 -2
  150. package/dist/impl-Dg7XSQdO2.mjs.map +1 -0
  151. package/dist/{impl-a_Y8bnSn.mjs → impl-DhXzxQDN2.mjs} +5 -5
  152. package/dist/impl-DhXzxQDN2.mjs.map +1 -0
  153. package/dist/impl-DiwxYcux.mjs +2 -0
  154. package/dist/{impl-BKmibZoG.mjs.map → impl-DiwxYcux.mjs.map} +1 -1
  155. package/dist/{impl-p_M16BEd.mjs → impl-Do2TNA3-.mjs} +2 -2
  156. package/dist/{impl-p_M16BEd.mjs.map → impl-Do2TNA3-.mjs.map} +1 -1
  157. package/dist/{impl-DaH1_ZzK.mjs → impl-DqHEIzpj.mjs} +2 -2
  158. package/dist/{impl-DaH1_ZzK.mjs.map → impl-DqHEIzpj.mjs.map} +1 -1
  159. package/dist/{impl-GH9uVaGu.mjs → impl-Dr_l_SLd.mjs} +2 -2
  160. package/dist/{impl-GH9uVaGu.mjs.map → impl-Dr_l_SLd.mjs.map} +1 -1
  161. package/dist/{impl-Dt5Iik_-.mjs → impl-Ds-gQfdc.mjs} +2 -2
  162. package/dist/{impl-Dt5Iik_-.mjs.map → impl-Ds-gQfdc.mjs.map} +1 -1
  163. package/dist/{impl-CJML1Gwo.mjs → impl-DtnYcktN.mjs} +2 -2
  164. package/dist/{impl-CJML1Gwo.mjs.map → impl-DtnYcktN.mjs.map} +1 -1
  165. package/dist/impl-DtpgD_as.mjs +2 -0
  166. package/dist/{impl-DWD4fAPO.mjs.map → impl-DtpgD_as.mjs.map} +1 -1
  167. package/dist/{impl-CL0y3SFr.mjs → impl-DxQ9yj3H.mjs} +2 -2
  168. package/dist/{impl-CL0y3SFr.mjs.map → impl-DxQ9yj3H.mjs.map} +1 -1
  169. package/dist/impl-FerHBNJx2.mjs +4 -0
  170. package/dist/{impl-BFn-S-Wy2.mjs.map → impl-FerHBNJx2.mjs.map} +1 -1
  171. package/dist/{impl-Cs1z9k1h2.mjs → impl-HUfaARep.mjs} +2 -2
  172. package/dist/impl-HUfaARep.mjs.map +1 -0
  173. package/dist/impl-btKJ1-VJ.mjs +3 -0
  174. package/dist/impl-btKJ1-VJ.mjs.map +1 -0
  175. package/dist/impl-eeS2lVi5.mjs +2 -0
  176. package/dist/impl-eeS2lVi5.mjs.map +1 -0
  177. package/dist/impl-iD6Fknfe.mjs +2 -0
  178. package/dist/impl-iD6Fknfe.mjs.map +1 -0
  179. package/dist/impl-ijoNwhGI.mjs +2 -0
  180. package/dist/impl-ijoNwhGI.mjs.map +1 -0
  181. package/dist/{impl-C83WRl40.mjs → impl-vmLq6HCI.mjs} +2 -2
  182. package/dist/{impl-C83WRl40.mjs.map → impl-vmLq6HCI.mjs.map} +1 -1
  183. package/dist/{impl-C8vx7N5j.mjs → impl-wBcVYHlA.mjs} +2 -2
  184. package/dist/{impl-C8vx7N5j.mjs.map → impl-wBcVYHlA.mjs.map} +1 -1
  185. package/dist/index.d.mts +2 -2
  186. package/dist/index.mjs +2 -2
  187. package/dist/index.mjs.map +1 -1
  188. package/dist/{initializeCliRuntime-6wI_VIHV.mjs → initializeCliRuntime-BaATMO1X.mjs} +1 -1
  189. package/dist/{initializeCliRuntime-6wI_VIHV.mjs.map → initializeCliRuntime-BaATMO1X.mjs.map} +1 -1
  190. package/dist/{inquirer-BeaBetMO.mjs → inquirer-BU5IpgA8.mjs} +2 -2
  191. package/dist/{inquirer-BeaBetMO.mjs.map → inquirer-BU5IpgA8.mjs.map} +1 -1
  192. package/dist/{jsonc-D9dDWb1J.mjs → jsonc-CdTubr53.mjs} +1 -1
  193. package/dist/{jsonc-D9dDWb1J.mjs.map → jsonc-CdTubr53.mjs.map} +1 -1
  194. package/dist/{listFiles-BdFUbX5x.mjs → listFiles-DDGCBdtx.mjs} +1 -1
  195. package/dist/{listFiles-BdFUbX5x.mjs.map → listFiles-DDGCBdtx.mjs.map} +1 -1
  196. package/dist/logger-CPu6zbyQ.mjs +2 -0
  197. package/dist/logger-CPu6zbyQ.mjs.map +1 -0
  198. package/dist/{mapConsentCsvRowsToInputs-Dqb6WL4r.mjs → mapConsentCsvRowsToInputs-CkLfxaIf.mjs} +1 -1
  199. package/dist/{mapConsentCsvRowsToInputs-Dqb6WL4r.mjs.map → mapConsentCsvRowsToInputs-CkLfxaIf.mjs.map} +1 -1
  200. package/dist/{markRequestDataSiloIdsCompleted-B5JCHcqh.mjs → markRequestDataSiloIdsCompleted-BYNMCkhy.mjs} +2 -2
  201. package/dist/{markRequestDataSiloIdsCompleted-B5JCHcqh.mjs.map → markRequestDataSiloIdsCompleted-BYNMCkhy.mjs.map} +1 -1
  202. package/dist/{markSilentPrivacyRequests-BAIZ97iB.mjs → markSilentPrivacyRequests-gKYivzH1.mjs} +2 -2
  203. package/dist/{markSilentPrivacyRequests-BAIZ97iB.mjs.map → markSilentPrivacyRequests-gKYivzH1.mjs.map} +1 -1
  204. package/dist/{mergeTranscendInputs-DFQcbh8b.mjs → mergeTranscendInputs-D1CvxQu0.mjs} +2 -2
  205. package/dist/{mergeTranscendInputs-DFQcbh8b.mjs.map → mergeTranscendInputs-D1CvxQu0.mjs.map} +1 -1
  206. package/dist/missing-manifest-D8y1VL4p.mjs +2 -0
  207. package/dist/missing-manifest-D8y1VL4p.mjs.map +1 -0
  208. package/dist/{module-graph-Cb0g74Ft.mjs → module-graph-CAT8_JCG.mjs} +1 -1
  209. package/dist/{module-graph-Cb0g74Ft.mjs.map → module-graph-CAT8_JCG.mjs.map} +1 -1
  210. package/dist/{notifyPrivacyRequestsAdditionalTime-C2lUoWKP.mjs → notifyPrivacyRequestsAdditionalTime-DbERhQ1Q.mjs} +2 -2
  211. package/dist/{notifyPrivacyRequestsAdditionalTime-C2lUoWKP.mjs.map → notifyPrivacyRequestsAdditionalTime-DbERhQ1Q.mjs.map} +1 -1
  212. package/dist/{parquetToCsvOneFile-ChmPC6dL.mjs → parquetToCsvOneFile-DtbCFm08.mjs} +3 -3
  213. package/dist/{parquetToCsvOneFile-ChmPC6dL.mjs.map → parquetToCsvOneFile-DtbCFm08.mjs.map} +1 -1
  214. package/dist/{parseAttributesFromString-CO16oAlx.mjs → parseAttributesFromString-C5hJMRvt.mjs} +2 -2
  215. package/dist/{parseAttributesFromString-CO16oAlx.mjs.map → parseAttributesFromString-C5hJMRvt.mjs.map} +1 -1
  216. package/dist/{parseVariablesFromString-BOSfQ4QF.mjs → parseVariablesFromString-6TYW65LF.mjs} +1 -1
  217. package/dist/{parseVariablesFromString-BOSfQ4QF.mjs.map → parseVariablesFromString-6TYW65LF.mjs.map} +1 -1
  218. package/dist/paths-J5KScOaQ.mjs +2 -0
  219. package/dist/paths-J5KScOaQ.mjs.map +1 -0
  220. package/dist/policy-bundle-manifest-BZnBMZQq.mjs +7 -0
  221. package/dist/policy-bundle-manifest-BZnBMZQq.mjs.map +1 -0
  222. package/dist/policy-project-discovery-C29UxWwt.mjs +427 -0
  223. package/dist/policy-project-discovery-C29UxWwt.mjs.map +1 -0
  224. package/dist/{policy-runtime-BMKa-Upy.mjs → policy-runtime-6jmkXlBk.mjs} +2 -2
  225. package/dist/{policy-runtime-BMKa-Upy.mjs.map → policy-runtime-6jmkXlBk.mjs.map} +1 -1
  226. package/dist/policy-scaffold-config-BUKAyPad.mjs +76 -0
  227. package/dist/policy-scaffold-config-BUKAyPad.mjs.map +1 -0
  228. package/dist/{policyEngineCliError-DY8V-qkK.mjs → policyEngineCliError-CZrOHhLv.mjs} +1 -1
  229. package/dist/{policyEngineCliError-DY8V-qkK.mjs.map → policyEngineCliError-CZrOHhLv.mjs.map} +1 -1
  230. package/dist/{printResult-CHe3nRN4.mjs → printResult-C2K9ODeE.mjs} +3 -3
  231. package/dist/printResult-C2K9ODeE.mjs.map +1 -0
  232. package/dist/project-discovery-BkHpTXDx.mjs +2 -0
  233. package/dist/project-discovery-BkHpTXDx.mjs.map +1 -0
  234. package/dist/project-discovery-CWRjlFnC.mjs +2 -0
  235. package/dist/project-discovery-CWRjlFnC.mjs.map +1 -0
  236. package/dist/project-plan-apply-Bg_1eMX9.mjs +3 -0
  237. package/dist/{project-plan-apply-Dvndx455.mjs.map → project-plan-apply-Bg_1eMX9.mjs.map} +1 -1
  238. package/dist/project-plan-output-BHHlkLxe.mjs +4 -0
  239. package/dist/project-plan-output-BHHlkLxe.mjs.map +1 -0
  240. package/dist/prompts-BhXfYD6g.mjs +2 -0
  241. package/dist/prompts-BhXfYD6g.mjs.map +1 -0
  242. package/dist/{pullAllDatapoints-uk5ggk6O.mjs → pullAllDatapoints-Bm-Orhse.mjs} +2 -2
  243. package/dist/{pullAllDatapoints-uk5ggk6O.mjs.map → pullAllDatapoints-Bm-Orhse.mjs.map} +1 -1
  244. package/dist/{pullChunkedCustomSiloOutstandingIdentifiers-BmhJiquf.mjs → pullChunkedCustomSiloOutstandingIdentifiers-DTGQOw--.mjs} +2 -2
  245. package/dist/{pullChunkedCustomSiloOutstandingIdentifiers-BmhJiquf.mjs.map → pullChunkedCustomSiloOutstandingIdentifiers-DTGQOw--.mjs.map} +1 -1
  246. package/dist/{pullConsentManagerMetrics-Dv5n1ZGp.mjs → pullConsentManagerMetrics-DKCkfbCB.mjs} +2 -2
  247. package/dist/{pullConsentManagerMetrics-Dv5n1ZGp.mjs.map → pullConsentManagerMetrics-DKCkfbCB.mjs.map} +1 -1
  248. package/dist/{pullManualEnrichmentIdentifiersToCsv-BbQc9MDM.mjs → pullManualEnrichmentIdentifiersToCsv-DMC5CQtE.mjs} +2 -2
  249. package/dist/{pullManualEnrichmentIdentifiersToCsv-BbQc9MDM.mjs.map → pullManualEnrichmentIdentifiersToCsv-DMC5CQtE.mjs.map} +1 -1
  250. package/dist/{pullTranscendConfiguration-B63M3ild.mjs → pullTranscendConfiguration-CDUDqxpm.mjs} +2 -2
  251. package/dist/{pullTranscendConfiguration-B63M3ild.mjs.map → pullTranscendConfiguration-CDUDqxpm.mjs.map} +1 -1
  252. package/dist/{pullUnstructuredSubDataPointRecommendations-YTBzfkRZ.mjs → pullUnstructuredSubDataPointRecommendations-Ci4AOxyH.mjs} +2 -2
  253. package/dist/{pullUnstructuredSubDataPointRecommendations-YTBzfkRZ.mjs.map → pullUnstructuredSubDataPointRecommendations-Ci4AOxyH.mjs.map} +1 -1
  254. package/dist/{pushCronIdentifiersFromCsv-Cfo2GibV.mjs → pushCronIdentifiersFromCsv-DhS2z8IG.mjs} +2 -2
  255. package/dist/{pushCronIdentifiersFromCsv-Cfo2GibV.mjs.map → pushCronIdentifiersFromCsv-DhS2z8IG.mjs.map} +1 -1
  256. package/dist/{pushManualEnrichmentIdentifiersFromCsv-DokcIxh1.mjs → pushManualEnrichmentIdentifiersFromCsv-BTJGOmdU.mjs} +2 -2
  257. package/dist/{pushManualEnrichmentIdentifiersFromCsv-DokcIxh1.mjs.map → pushManualEnrichmentIdentifiersFromCsv-BTJGOmdU.mjs.map} +1 -1
  258. package/dist/{readCsv-DLg8pwjd.mjs → readCsv-DNcJ_UfU.mjs} +1 -1
  259. package/dist/{readCsv-DLg8pwjd.mjs.map → readCsv-DNcJ_UfU.mjs.map} +1 -1
  260. package/dist/{readTranscendYaml-BNn6-Ofi.mjs → readTranscendYaml-BfqQbPiT.mjs} +3 -3
  261. package/dist/{readTranscendYaml-BNn6-Ofi.mjs.map → readTranscendYaml-BfqQbPiT.mjs.map} +1 -1
  262. package/dist/{removeUnverifiedRequestIdentifiers-p4gFagI0.mjs → removeUnverifiedRequestIdentifiers-BkAcUZZN.mjs} +2 -2
  263. package/dist/{removeUnverifiedRequestIdentifiers-p4gFagI0.mjs.map → removeUnverifiedRequestIdentifiers-BkAcUZZN.mjs.map} +1 -1
  264. package/dist/{renderTable-D68QasPc.mjs → renderTable-CZP2roD1.mjs} +1 -1
  265. package/dist/{renderTable-D68QasPc.mjs.map → renderTable-CZP2roD1.mjs.map} +1 -1
  266. package/dist/{request-BiPv6jmP.mjs → request-BpKyN9Xm.mjs} +1 -1
  267. package/dist/{request-BiPv6jmP.mjs.map → request-BpKyN9Xm.mjs.map} +1 -1
  268. package/dist/{resolveBundleIdByName-qXZBrUz_.mjs → resolveBundleIdByName-Dm_o5_bg.mjs} +2 -2
  269. package/dist/{resolveBundleIdByName-qXZBrUz_.mjs.map → resolveBundleIdByName-Dm_o5_bg.mjs.map} +1 -1
  270. package/dist/{resolvePolicyBundleVersion-BG7XqBBP.mjs → resolvePolicyBundleVersion-DRUwe7fA.mjs} +2 -2
  271. package/dist/{resolvePolicyBundleVersion-BG7XqBBP.mjs.map → resolvePolicyBundleVersion-DRUwe7fA.mjs.map} +1 -1
  272. package/dist/{retryRequestDataSilos-C6mvi-ET.mjs → retryRequestDataSilos-BoPmcB8-.mjs} +2 -2
  273. package/dist/{retryRequestDataSilos-C6mvi-ET.mjs.map → retryRequestDataSilos-BoPmcB8-.mjs.map} +1 -1
  274. package/dist/{run-captured-process-BXwWXuTh.mjs → run-captured-process-BjaSDWXG.mjs} +1 -1
  275. package/dist/{run-captured-process-BXwWXuTh.mjs.map → run-captured-process-BjaSDWXG.mjs.map} +1 -1
  276. package/dist/{runOpa-CswzJxIs.mjs → runOpa-ojIqU1tO.mjs} +2 -2
  277. package/dist/{runOpa-CswzJxIs.mjs.map → runOpa-ojIqU1tO.mjs.map} +1 -1
  278. package/dist/{scaffold-model-BAbYTR0q.mjs → scaffold-model-CUZER0BC.mjs} +1 -1
  279. package/dist/scaffold-model-CUZER0BC.mjs.map +1 -0
  280. package/dist/{scaffold-planning-CNv83t_v.mjs → scaffold-planning-CaetLfv8.mjs} +9 -9
  281. package/dist/{scaffold-planning-CNv83t_v.mjs.map → scaffold-planning-CaetLfv8.mjs.map} +1 -1
  282. package/dist/{scaffold-templates-DzDGTZie.mjs → scaffold-templates-CUL82Zf8.mjs} +1 -1
  283. package/dist/{scaffold-templates-DzDGTZie.mjs.map → scaffold-templates-CUL82Zf8.mjs.map} +1 -1
  284. package/dist/{skipPreflightJobs-CgUcTgzf.mjs → skipPreflightJobs-DkBdYw-r.mjs} +2 -2
  285. package/dist/{skipPreflightJobs-CgUcTgzf.mjs.map → skipPreflightJobs-DkBdYw-r.mjs.map} +1 -1
  286. package/dist/{skipRequestDataSilos-Be-6OhWe.mjs → skipRequestDataSilos-BRFiokix.mjs} +2 -2
  287. package/dist/{skipRequestDataSilos-Be-6OhWe.mjs.map → skipRequestDataSilos-BRFiokix.mjs.map} +1 -1
  288. package/dist/{streamPrivacyRequestsToCsv-BaeFrrGF.mjs → streamPrivacyRequestsToCsv-Bt-H5J-y.mjs} +2 -2
  289. package/dist/{streamPrivacyRequestsToCsv-BaeFrrGF.mjs.map → streamPrivacyRequestsToCsv-Bt-H5J-y.mjs.map} +1 -1
  290. package/dist/{syncCodePackages-BHE2Tn1Q.mjs → syncCodePackages-CPkEukDm.mjs} +2 -2
  291. package/dist/{syncCodePackages-BHE2Tn1Q.mjs.map → syncCodePackages-CPkEukDm.mjs.map} +1 -1
  292. package/dist/{updateConsentManagerVersionToLatest-3mQX2U8F.mjs → updateConsentManagerVersionToLatest-DWblAwus.mjs} +2 -2
  293. package/dist/{updateConsentManagerVersionToLatest-3mQX2U8F.mjs.map → updateConsentManagerVersionToLatest-DWblAwus.mjs.map} +1 -1
  294. package/dist/{uploadConsents-Dnbtx9P5.mjs → uploadConsents-D7Vg8ZRW.mjs} +2 -2
  295. package/dist/{uploadConsents-Dnbtx9P5.mjs.map → uploadConsents-D7Vg8ZRW.mjs.map} +1 -1
  296. package/dist/{uploadPrivacyRequestsFromCsv-BIW2JPjA.mjs → uploadPrivacyRequestsFromCsv-B_hQwIn6.mjs} +2 -2
  297. package/dist/{uploadPrivacyRequestsFromCsv-BIW2JPjA.mjs.map → uploadPrivacyRequestsFromCsv-B_hQwIn6.mjs.map} +1 -1
  298. package/dist/validateTranscendAuth-D-dDINof.mjs +2 -0
  299. package/dist/{validateTranscendAuth-D6Wr1cxY.mjs.map → validateTranscendAuth-D-dDINof.mjs.map} +1 -1
  300. package/dist/{writeCsv-D-2siSwE.mjs → writeCsv-CNZrq3zU.mjs} +1 -1
  301. package/dist/{writeCsv-D-2siSwE.mjs.map → writeCsv-CNZrq3zU.mjs.map} +1 -1
  302. package/package.json +6 -5
  303. package/dist/app-D-IPyX64.mjs +0 -148
  304. package/dist/app-D-IPyX64.mjs.map +0 -1
  305. package/dist/command-Ddx7b9ik.mjs +0 -9
  306. package/dist/command-Ddx7b9ik.mjs.map +0 -1
  307. package/dist/constants-XH8NIJGC.mjs +0 -2
  308. package/dist/deno-runtime-DV52X8-P.mjs +0 -2
  309. package/dist/deno-runtime-DV52X8-P.mjs.map +0 -1
  310. package/dist/impl--JGnR3wp.mjs +0 -3
  311. package/dist/impl-7UqkSO3x2.mjs +0 -2
  312. package/dist/impl-7UqkSO3x2.mjs.map +0 -1
  313. package/dist/impl-B4BgGuF_.mjs +0 -3
  314. package/dist/impl-B4BgGuF_.mjs.map +0 -1
  315. package/dist/impl-BFn-S-Wy2.mjs +0 -4
  316. package/dist/impl-BKmibZoG.mjs +0 -2
  317. package/dist/impl-C6HtWd1t.mjs +0 -2
  318. package/dist/impl-C6HtWd1t.mjs.map +0 -1
  319. package/dist/impl-CO4ZqlLV.mjs +0 -3
  320. package/dist/impl-CO4ZqlLV.mjs.map +0 -1
  321. package/dist/impl-COujMWgp.mjs.map +0 -1
  322. package/dist/impl-CUOVJsRg.mjs +0 -3
  323. package/dist/impl-CUOVJsRg.mjs.map +0 -1
  324. package/dist/impl-CUiYbk6G.mjs +0 -3
  325. package/dist/impl-CUiYbk6G.mjs.map +0 -1
  326. package/dist/impl-CbAvM_1J.mjs +0 -2
  327. package/dist/impl-CbAvM_1J.mjs.map +0 -1
  328. package/dist/impl-CfvxD3RI.mjs.map +0 -1
  329. package/dist/impl-Cli2XRp02.mjs +0 -2
  330. package/dist/impl-Cli2XRp02.mjs.map +0 -1
  331. package/dist/impl-Cs1z9k1h2.mjs.map +0 -1
  332. package/dist/impl-DB8Kt2qF2.mjs.map +0 -1
  333. package/dist/impl-DHQh34Eh2.mjs +0 -303
  334. package/dist/impl-DHQh34Eh2.mjs.map +0 -1
  335. package/dist/impl-DN6CgOI6.mjs +0 -2
  336. package/dist/impl-DN6CgOI6.mjs.map +0 -1
  337. package/dist/impl-DPtx5iZO.mjs +0 -5
  338. package/dist/impl-DWD4fAPO.mjs +0 -2
  339. package/dist/impl-DXRDWiB1.mjs +0 -2
  340. package/dist/impl-DXRDWiB1.mjs.map +0 -1
  341. package/dist/impl-DdIa0zla.mjs +0 -2
  342. package/dist/impl-DdIa0zla.mjs.map +0 -1
  343. package/dist/impl-DryC3OJu.mjs +0 -2
  344. package/dist/impl-DryC3OJu.mjs.map +0 -1
  345. package/dist/impl-DxnrCWeR2.mjs.map +0 -1
  346. package/dist/impl-DzUTmaID2.mjs.map +0 -1
  347. package/dist/impl-H9kweQnu2.mjs.map +0 -1
  348. package/dist/impl-Z8oWVENM.mjs +0 -2
  349. package/dist/impl-Z8oWVENM.mjs.map +0 -1
  350. package/dist/impl-a_Y8bnSn.mjs.map +0 -1
  351. package/dist/impl-v_P8hszk2.mjs.map +0 -1
  352. package/dist/logger-zplFSeXU.mjs +0 -2
  353. package/dist/logger-zplFSeXU.mjs.map +0 -1
  354. package/dist/manifest-BNIpO_zW.mjs +0 -2
  355. package/dist/manifest-BNIpO_zW.mjs.map +0 -1
  356. package/dist/missing-manifest-DgcukXfg.mjs +0 -2
  357. package/dist/missing-manifest-DgcukXfg.mjs.map +0 -1
  358. package/dist/path-safety-D5Qwl40b.mjs +0 -2
  359. package/dist/path-safety-D5Qwl40b.mjs.map +0 -1
  360. package/dist/policy-bundle-manifest-D6dkbjNi.mjs +0 -7
  361. package/dist/policy-bundle-manifest-D6dkbjNi.mjs.map +0 -1
  362. package/dist/printResult-CHe3nRN4.mjs.map +0 -1
  363. package/dist/project-plan-apply-Dvndx455.mjs +0 -3
  364. package/dist/prompts-ClBXdELk.mjs +0 -4
  365. package/dist/prompts-ClBXdELk.mjs.map +0 -1
  366. package/dist/scaffold-model-BAbYTR0q.mjs.map +0 -1
  367. package/dist/validateTranscendAuth-D6Wr1cxY.mjs +0 -2
@@ -0,0 +1,2 @@
1
+ function e(e){let t=e=>e?{id:e.id,versionNumber:e.versionNumber,lifecycleState:e.lifecycleState}:null;return{version:1,command:`list`,functions:[...e].sort((e,t)=>e.name.localeCompare(t.name)).map(e=>({id:e.id,name:e.name,description:e.description??null,type:e.type,lifecycleState:e.lifecycleState,sombraId:e.sombraId??null,dataSiloId:e.dataSiloId??null,hasPendingDraft:e.hasPendingDraft,activeVersion:t(e.activeVersion),draftVersion:t(e.draftVersion)}))}}function t(e,t,n){let r=e=>n.filter(({result:t})=>t?.outcome===e).length,i=r(`test-failed`),a=n.filter(({error:e})=>e!==void 0).length,o=({outcome:e,customFunctionId:t,versionNumber:n,changedFields:r,promoted:i,testResults:a,dataSiloId:o,createdDataSilo:s})=>({outcome:e,changedFields:r,promoted:i,...t?{customFunctionId:t}:{},...n?{versionNumber:n}:{},...a?{testResults:a.map(({passed:e,payloadType:t,result:n})=>({passed:e,...t?{payloadType:t}:{},exitCode:n.exitCode,error:n.error?.message??null,timeMs:n.profile.timeMs}))}:{},...o?{dataSiloId:o}:{},...s===void 0?{}:{createdDataSilo:s}});return{version:1,command:`push`,status:i>0||a>0?`failed`:`passed`,manifestPath:e,dryRun:t,summary:{created:r(`created`)+r(`would-create`),updated:r(`updated`)+r(`would-update`),metadataUpdated:r(`metadata-updated`),skipped:r(`skipped`),rejected:i,failed:a},functions:n.map(({name:e,result:t,error:n})=>({name:e,...t?{result:o(t)}:{},...n?{error:n.message}:{}}))}}export{t as n,e as t};
2
+ //# sourceMappingURL=command-output-BRfF3YFv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-output-BRfF3YFv.mjs","names":[],"sources":["../src/lib/custom-functions/command-output.ts"],"sourcesContent":["import type {\n CustomFunctionLifecycleState,\n CustomFunctionPayloadType,\n CustomFunctionType,\n CustomFunctionVersionLifecycleState,\n} from '@transcend-io/privacy-types';\nimport type { CustomFunction, CustomFunctionSyncResult } from '@transcend-io/sdk';\n\nimport { CUSTOM_FUNCTION_RESULT_VERSION } from './scaffold-model.js';\n\n/** Safe Custom Function version metadata exposed by `list --json`. */\nexport interface CustomFunctionVersionJson {\n /** Version ID. */\n id: string;\n /** Monotonic version number. */\n versionNumber: string;\n /** Version lifecycle state. */\n lifecycleState: CustomFunctionVersionLifecycleState;\n}\n\n/** Safe Custom Function metadata exposed by `list --json`. */\nexport interface CustomFunctionListItemJson {\n /** Custom Function ID. */\n id: string;\n /** Display name. */\n name: string;\n /** Customer-provided description. */\n description: string | null;\n /** Product-facing Custom Function type. */\n type: CustomFunctionType;\n /** Custom Function lifecycle state. */\n lifecycleState: CustomFunctionLifecycleState;\n /** Sombra gateway ID. */\n sombraId: string | null;\n /** Linked DSR integration ID. */\n dataSiloId: string | null;\n /** Whether a newer draft is pending. */\n hasPendingDraft: boolean;\n /** Current active version metadata. */\n activeVersion: CustomFunctionVersionJson | null;\n /** Pending draft version metadata. */\n draftVersion: CustomFunctionVersionJson | null;\n}\n\n/** Stable result emitted by `custom-functions list --json`. */\nexport interface CustomFunctionListJsonResult {\n /** JSON contract version. */\n version: typeof CUSTOM_FUNCTION_RESULT_VERSION;\n /** Command that produced this result. */\n command: 'list';\n /** Custom Functions sorted by display name. */\n functions: CustomFunctionListItemJson[];\n}\n\n/** Safe test-run summary emitted by `push --json`. */\nexport interface CustomFunctionPushTestJson {\n /** Whether the test payload passed. */\n passed: boolean;\n /** DSR export selected by the test payload. */\n payloadType?: CustomFunctionPayloadType;\n /** Function process exit code. */\n exitCode: number;\n /** Execution error message. */\n error: string | null;\n /** Wall-clock execution time in milliseconds. */\n timeMs: number;\n}\n\n/** Safe sync result emitted by `push --json`. */\nexport interface CustomFunctionPushSyncResultJson {\n /** Function sync outcome. */\n outcome: CustomFunctionSyncResult['outcome'];\n /** Existing or newly assigned Custom Function ID. */\n customFunctionId?: string;\n /** Existing or newly assigned revision number. */\n versionNumber?: string;\n /** Fields that drove an update. */\n changedFields: string[];\n /** Whether the revision was promoted to active. */\n promoted: boolean;\n /** Test payload summaries without function logs. */\n testResults?: CustomFunctionPushTestJson[];\n /** Linked DSR integration ID. */\n dataSiloId?: string;\n /** Whether this sync created a DSR integration. */\n createdDataSilo?: boolean;\n}\n\n/** One function-level result emitted by `push --json`. */\nexport interface CustomFunctionPushItemJson {\n /** Manifest display name. */\n name: string;\n /** Successful or rejected sync result. */\n result?: CustomFunctionPushSyncResultJson;\n /** Failure message when the function could not be processed. */\n error?: string;\n}\n\n/** Aggregate counts emitted by `push --json`. */\nexport interface CustomFunctionPushSummaryJson {\n /** Functions created or that would be created. */\n created: number;\n /** Functions updated or that would be updated. */\n updated: number;\n /** Functions with metadata-only updates. */\n metadataUpdated: number;\n /** Functions skipped because nothing changed. */\n skipped: number;\n /** Functions rejected by failing tests. */\n rejected: number;\n /** Functions that failed before producing a sync result. */\n failed: number;\n}\n\n/** Stable result emitted by `custom-functions push --json`. */\nexport interface CustomFunctionPushJsonResult {\n /** JSON contract version. */\n version: typeof CUSTOM_FUNCTION_RESULT_VERSION;\n /** Command that produced this result. */\n command: 'push';\n /** Overall command status. */\n status: 'passed' | 'failed';\n /** Absolute manifest path. */\n manifestPath: string;\n /** Whether this invocation only previewed remote changes. */\n dryRun: boolean;\n /** Aggregate outcome counts. */\n summary: CustomFunctionPushSummaryJson;\n /** Manifest-order function outcomes. */\n functions: CustomFunctionPushItemJson[];\n}\n\n/**\n * Remove signed code tokens from Custom Function list output.\n *\n * @param customFunctions - API results\n * @returns Stable, safe JSON result\n */\nexport function buildCustomFunctionListJsonResult(\n customFunctions: readonly CustomFunction[],\n): CustomFunctionListJsonResult {\n const toVersion = (\n version: NonNullable<CustomFunction['activeVersion']> | undefined | null,\n ): CustomFunctionVersionJson | null =>\n version\n ? {\n id: version.id,\n versionNumber: version.versionNumber,\n lifecycleState: version.lifecycleState,\n }\n : null;\n\n return {\n version: CUSTOM_FUNCTION_RESULT_VERSION,\n command: 'list',\n functions: [...customFunctions]\n .sort((left, right) => left.name.localeCompare(right.name))\n .map((customFunction) => ({\n id: customFunction.id,\n name: customFunction.name,\n description: customFunction.description ?? null,\n type: customFunction.type,\n lifecycleState: customFunction.lifecycleState,\n sombraId: customFunction.sombraId ?? null,\n dataSiloId: customFunction.dataSiloId ?? null,\n hasPendingDraft: customFunction.hasPendingDraft,\n activeVersion: toVersion(customFunction.activeVersion),\n draftVersion: toVersion(customFunction.draftVersion),\n })),\n };\n}\n\n/**\n * Build the stable aggregate result for a Custom Function push.\n *\n * @param manifestPath - Absolute manifest path\n * @param dryRun - Whether remote changes were previewed\n * @param functions - Manifest-order function outcomes\n * @returns Stable JSON result\n */\nexport function buildCustomFunctionPushJsonResult(\n manifestPath: string,\n dryRun: boolean,\n functions: readonly {\n /** Manifest display name. */\n name: string;\n /** Successful or rejected sync result. */\n result?: CustomFunctionSyncResult;\n /** Failure before a sync result was produced. */\n error?: Error;\n }[],\n): CustomFunctionPushJsonResult {\n const count = (outcome: CustomFunctionSyncResult['outcome']): number =>\n functions.filter(({ result }) => result?.outcome === outcome).length;\n const rejected = count('test-failed');\n const failed = functions.filter(({ error }) => error !== undefined).length;\n const toResult = ({\n outcome,\n customFunctionId,\n versionNumber,\n changedFields,\n promoted,\n testResults,\n dataSiloId,\n createdDataSilo,\n }: CustomFunctionSyncResult): CustomFunctionPushSyncResultJson => ({\n outcome,\n changedFields,\n promoted,\n ...(customFunctionId ? { customFunctionId } : {}),\n ...(versionNumber ? { versionNumber } : {}),\n ...(testResults\n ? {\n testResults: testResults.map(({ passed, payloadType, result }) => ({\n passed,\n ...(payloadType ? { payloadType } : {}),\n exitCode: result.exitCode,\n error: result.error?.message ?? null,\n timeMs: result.profile.timeMs,\n })),\n }\n : {}),\n ...(dataSiloId ? { dataSiloId } : {}),\n ...(createdDataSilo !== undefined ? { createdDataSilo } : {}),\n });\n\n return {\n version: CUSTOM_FUNCTION_RESULT_VERSION,\n command: 'push',\n status: rejected > 0 || failed > 0 ? 'failed' : 'passed',\n manifestPath,\n dryRun,\n summary: {\n created: count('created') + count('would-create'),\n updated: count('updated') + count('would-update'),\n metadataUpdated: count('metadata-updated'),\n skipped: count('skipped'),\n rejected,\n failed,\n },\n functions: functions.map(({ name, result, error }) => ({\n name,\n ...(result ? { result: toResult(result) } : {}),\n ...(error ? { error: error.message } : {}),\n })),\n };\n}\n"],"mappings":"AA0IA,SAAgB,EACd,EAC8B,CAC9B,IAAM,EACJ,GAEA,EACI,CACE,GAAI,EAAQ,GACZ,cAAe,EAAQ,cACvB,eAAgB,EAAQ,eACzB,CACD,KAEN,MAAO,CACL,QAAA,EACA,QAAS,OACT,UAAW,CAAC,GAAG,EAAgB,CAC5B,MAAM,EAAM,IAAU,EAAK,KAAK,cAAc,EAAM,KAAK,CAAC,CAC1D,IAAK,IAAoB,CACxB,GAAI,EAAe,GACnB,KAAM,EAAe,KACrB,YAAa,EAAe,aAAe,KAC3C,KAAM,EAAe,KACrB,eAAgB,EAAe,eAC/B,SAAU,EAAe,UAAY,KACrC,WAAY,EAAe,YAAc,KACzC,gBAAiB,EAAe,gBAChC,cAAe,EAAU,EAAe,cAAc,CACtD,aAAc,EAAU,EAAe,aAAa,CACrD,EAAE,CACN,CAWH,SAAgB,EACd,EACA,EACA,EAQ8B,CAC9B,IAAM,EAAS,GACb,EAAU,QAAQ,CAAE,YAAa,GAAQ,UAAY,EAAQ,CAAC,OAC1D,EAAW,EAAM,cAAc,CAC/B,EAAS,EAAU,QAAQ,CAAE,WAAY,IAAU,IAAA,GAAU,CAAC,OAC9D,GAAY,CAChB,UACA,mBACA,gBACA,gBACA,WACA,cACA,aACA,sBACiE,CACjE,UACA,gBACA,WACA,GAAI,EAAmB,CAAE,mBAAkB,CAAG,EAAE,CAChD,GAAI,EAAgB,CAAE,gBAAe,CAAG,EAAE,CAC1C,GAAI,EACA,CACE,YAAa,EAAY,KAAK,CAAE,SAAQ,cAAa,aAAc,CACjE,SACA,GAAI,EAAc,CAAE,cAAa,CAAG,EAAE,CACtC,SAAU,EAAO,SACjB,MAAO,EAAO,OAAO,SAAW,KAChC,OAAQ,EAAO,QAAQ,OACxB,EAAE,CACJ,CACD,EAAE,CACN,GAAI,EAAa,CAAE,aAAY,CAAG,EAAE,CACpC,GAAI,IAAoB,IAAA,GAAkC,EAAE,CAAxB,CAAE,kBAAiB,CACxD,EAED,MAAO,CACL,QAAA,EACA,QAAS,OACT,OAAQ,EAAW,GAAK,EAAS,EAAI,SAAW,SAChD,eACA,SACA,QAAS,CACP,QAAS,EAAM,UAAU,CAAG,EAAM,eAAe,CACjD,QAAS,EAAM,UAAU,CAAG,EAAM,eAAe,CACjD,gBAAiB,EAAM,mBAAmB,CAC1C,QAAS,EAAM,UAAU,CACzB,WACA,SACD,CACD,UAAW,EAAU,KAAK,CAAE,OAAM,SAAQ,YAAa,CACrD,OACA,GAAI,EAAS,CAAE,OAAQ,EAAS,EAAO,CAAE,CAAG,EAAE,CAC9C,GAAI,EAAQ,CAAE,MAAO,EAAM,QAAS,CAAG,EAAE,CAC1C,EAAE,CACJ"}
@@ -1,2 +1,2 @@
1
- import{t as e}from"../../../logger-zplFSeXU.mjs";import{CHILD_FLAG as t,chunkOneCsvFile as n,extractErrorMessage as r}from"@transcend-io/utils";async function i(){let t=Number(process.env.WORKER_ID||`0`);e.info(`[w${t}] ready pid=${process.pid}`),process.send?.({type:`ready`}),process.on(`message`,async i=>{if(!i||typeof i!=`object`||(i.type===`shutdown`&&process.exit(0),i.type!==`task`))return;let{filePath:a,options:o}=i.payload,{outputDir:s,clearOutputDir:c,chunkSizeMB:l}=o;try{await n({filePath:a,outputDir:s,clearOutputDir:c,chunkSizeMB:l,logger:e,onProgress:(e,t)=>process.send?.({type:`progress`,payload:{filePath:a,processed:e,total:t}})}),process.send?.({type:`result`,payload:{ok:!0,filePath:a}})}catch(n){let i=r(n);e.error(`[w${t}] ERROR ${a}: ${i}`),process.send?.({type:`result`,payload:{ok:!1,filePath:a,error:i}})}}),await new Promise(()=>{})}process.argv.includes(t)&&i().catch(t=>{e.error(t),process.exit(1)});export{i as runChild};
1
+ import{t as e}from"../../../logger-CPu6zbyQ.mjs";import{CHILD_FLAG as t,chunkOneCsvFile as n,extractErrorMessage as r}from"@transcend-io/utils";async function i(){let t=Number(process.env.WORKER_ID||`0`);e.info(`[w${t}] ready pid=${process.pid}`),process.send?.({type:`ready`}),process.on(`message`,async i=>{if(!i||typeof i!=`object`||(i.type===`shutdown`&&process.exit(0),i.type!==`task`))return;let{filePath:a,options:o}=i.payload,{outputDir:s,clearOutputDir:c,chunkSizeMB:l}=o;try{await n({filePath:a,outputDir:s,clearOutputDir:c,chunkSizeMB:l,logger:e,onProgress:(e,t)=>process.send?.({type:`progress`,payload:{filePath:a,processed:e,total:t}})}),process.send?.({type:`result`,payload:{ok:!0,filePath:a}})}catch(n){let i=r(n);e.error(`[w${t}] ERROR ${a}: ${i}`),process.send?.({type:`result`,payload:{ok:!1,filePath:a,error:i}})}}),await new Promise(()=>{})}process.argv.includes(t)&&i().catch(t=>{e.error(t),process.exit(1)});export{i as runChild};
2
2
  //# sourceMappingURL=worker.mjs.map
@@ -1,2 +1,2 @@
1
- import{t as e}from"../../../logger-zplFSeXU.mjs";import{t}from"../../../parquetToCsvOneFile-ChmPC6dL.mjs";import{CHILD_FLAG as n,extractErrorMessage as r}from"@transcend-io/utils";async function i(){let n=Number(process.env.WORKER_ID||`0`);e.info(`[w${n}] ready pid=${process.pid}`),process.send?.({type:`ready`}),process.on(`message`,async i=>{if(!i||typeof i!=`object`||(i.type===`shutdown`&&process.exit(0),i.type!==`task`))return;let{filePath:a,options:o}=i.payload,{outputDir:s,clearOutputDir:c}=o;try{e.info(`[w${n}] processing ${a}`);let{DuckDBInstance:r}=await import(`@duckdb/node-api`);await t({filePath:a,outputDir:s,clearOutputDir:c,onProgress:(e,t)=>process.send?.({type:`progress`,payload:{filePath:a,processed:e,total:t}})},r),process.send?.({type:`result`,payload:{ok:!0,filePath:a}})}catch(t){let i=r(t);e.error(`[w${n}] ERROR ${a}: ${t.stack||i}`),process.send?.({type:`result`,payload:{ok:!1,filePath:a,error:i}})}}),await new Promise(()=>{})}process.argv.includes(n)&&i().catch(t=>{e.error(t),process.exit(1)});export{i as runChild};
1
+ import{t as e}from"../../../logger-CPu6zbyQ.mjs";import{t}from"../../../parquetToCsvOneFile-DtbCFm08.mjs";import{CHILD_FLAG as n,extractErrorMessage as r}from"@transcend-io/utils";async function i(){let n=Number(process.env.WORKER_ID||`0`);e.info(`[w${n}] ready pid=${process.pid}`),process.send?.({type:`ready`}),process.on(`message`,async i=>{if(!i||typeof i!=`object`||(i.type===`shutdown`&&process.exit(0),i.type!==`task`))return;let{filePath:a,options:o}=i.payload,{outputDir:s,clearOutputDir:c}=o;try{e.info(`[w${n}] processing ${a}`);let{DuckDBInstance:r}=await import(`@duckdb/node-api`);await t({filePath:a,outputDir:s,clearOutputDir:c,onProgress:(e,t)=>process.send?.({type:`progress`,payload:{filePath:a,processed:e,total:t}})},r),process.send?.({type:`result`,payload:{ok:!0,filePath:a}})}catch(t){let i=r(t);e.error(`[w${n}] ERROR ${a}: ${t.stack||i}`),process.send?.({type:`result`,payload:{ok:!1,filePath:a,error:i}})}}),await new Promise(()=>{})}process.argv.includes(n)&&i().catch(t=>{e.error(t),process.exit(1)});export{i as runChild};
2
2
  //# sourceMappingURL=worker.mjs.map
@@ -1,2 +1,2 @@
1
1
  function e(e){return e.map(({name:e,input:t})=>({title:e.replace(`.yml`,``),attributes:[...t?.domains?[{key:`Transcend Domain List`,values:[...new Set(t.domains)]}]:[],...t?.bundleUrls?[{key:`Airgap Production URL`,values:[t.bundleUrls.PRODUCTION]},{key:`Airgap Test URL`,values:[t.bundleUrls.TEST]},{key:`Airgap XDI URL`,values:[t.bundleUrls.PRODUCTION.replace(`airgap.js`,`xdi.js`)]}]:[],...t?.partition?[{key:`Consent Partition Key`,values:[t.partition]}]:[]]}))}export{e as t};
2
- //# sourceMappingURL=consentManagersToBusinessEntities-CBJ81aGO.mjs.map
2
+ //# sourceMappingURL=consentManagersToBusinessEntities-DG0_eby5.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"consentManagersToBusinessEntities-CBJ81aGO.mjs","names":[],"sources":["../src/lib/consent-manager/consentManagersToBusinessEntities.ts"],"sourcesContent":["import { BusinessEntityInput, ConsentManagerInput } from '../../codecs.js';\n\n/**\n * Combine multiple consent manager configurations into a list of business entity configurations\n *\n * @param inputs - Consent manager configurations to combine\n * @returns Business entity configuration input\n */\nexport function consentManagersToBusinessEntities(\n inputs: {\n /** Name of business entity */\n name: string;\n /** Consent manager input */\n input?: ConsentManagerInput;\n }[],\n): BusinessEntityInput[] {\n return inputs.map(\n ({ name, input }): BusinessEntityInput => ({\n // Title of Transcend Instance\n title: name.replace('.yml', ''),\n attributes: [\n // Sync domain list\n ...(input?.domains\n ? [\n {\n key: 'Transcend Domain List',\n values: [...new Set(input.domains)],\n },\n ]\n : []),\n // Sync bundle URLs\n ...(input?.bundleUrls\n ? [\n {\n key: 'Airgap Production URL',\n values: [input.bundleUrls.PRODUCTION],\n },\n {\n key: 'Airgap Test URL',\n values: [input.bundleUrls.TEST],\n },\n {\n key: 'Airgap XDI URL',\n values: [input.bundleUrls.PRODUCTION.replace('airgap.js', 'xdi.js')],\n },\n ]\n : []),\n // Sync partition keys\n ...(input?.partition\n ? [\n {\n key: 'Consent Partition Key',\n values: [input.partition],\n },\n ]\n : []),\n ],\n }),\n );\n}\n"],"mappings":"AAQA,SAAgB,EACd,EAMuB,CACvB,OAAO,EAAO,KACX,CAAE,OAAM,YAAkC,CAEzC,MAAO,EAAK,QAAQ,OAAQ,GAAG,CAC/B,WAAY,CAEV,GAAI,GAAO,QACP,CACE,CACE,IAAK,wBACL,OAAQ,CAAC,GAAG,IAAI,IAAI,EAAM,QAAQ,CAAC,CACpC,CACF,CACD,EAAE,CAEN,GAAI,GAAO,WACP,CACE,CACE,IAAK,wBACL,OAAQ,CAAC,EAAM,WAAW,WAAW,CACtC,CACD,CACE,IAAK,kBACL,OAAQ,CAAC,EAAM,WAAW,KAAK,CAChC,CACD,CACE,IAAK,iBACL,OAAQ,CAAC,EAAM,WAAW,WAAW,QAAQ,YAAa,SAAS,CAAC,CACrE,CACF,CACD,EAAE,CAEN,GAAI,GAAO,UACP,CACE,CACE,IAAK,wBACL,OAAQ,CAAC,EAAM,UAAU,CAC1B,CACF,CACD,EAAE,CACP,CACF,EACF"}
1
+ {"version":3,"file":"consentManagersToBusinessEntities-DG0_eby5.mjs","names":[],"sources":["../src/lib/consent-manager/consentManagersToBusinessEntities.ts"],"sourcesContent":["import { BusinessEntityInput, ConsentManagerInput } from '../../codecs.js';\n\n/**\n * Combine multiple consent manager configurations into a list of business entity configurations\n *\n * @param inputs - Consent manager configurations to combine\n * @returns Business entity configuration input\n */\nexport function consentManagersToBusinessEntities(\n inputs: {\n /** Name of business entity */\n name: string;\n /** Consent manager input */\n input?: ConsentManagerInput;\n }[],\n): BusinessEntityInput[] {\n return inputs.map(\n ({ name, input }): BusinessEntityInput => ({\n // Title of Transcend Instance\n title: name.replace('.yml', ''),\n attributes: [\n // Sync domain list\n ...(input?.domains\n ? [\n {\n key: 'Transcend Domain List',\n values: [...new Set(input.domains)],\n },\n ]\n : []),\n // Sync bundle URLs\n ...(input?.bundleUrls\n ? [\n {\n key: 'Airgap Production URL',\n values: [input.bundleUrls.PRODUCTION],\n },\n {\n key: 'Airgap Test URL',\n values: [input.bundleUrls.TEST],\n },\n {\n key: 'Airgap XDI URL',\n values: [input.bundleUrls.PRODUCTION.replace('airgap.js', 'xdi.js')],\n },\n ]\n : []),\n // Sync partition keys\n ...(input?.partition\n ? [\n {\n key: 'Consent Partition Key',\n values: [input.partition],\n },\n ]\n : []),\n ],\n }),\n );\n}\n"],"mappings":"AAQA,SAAgB,EACd,EAMuB,CACvB,OAAO,EAAO,KACX,CAAE,OAAM,YAAkC,CAEzC,MAAO,EAAK,QAAQ,OAAQ,GAAG,CAC/B,WAAY,CAEV,GAAI,GAAO,QACP,CACE,CACE,IAAK,wBACL,OAAQ,CAAC,GAAG,IAAI,IAAI,EAAM,QAAQ,CAAC,CACpC,CACF,CACD,EAAE,CAEN,GAAI,GAAO,WACP,CACE,CACE,IAAK,wBACL,OAAQ,CAAC,EAAM,WAAW,WAAW,CACtC,CACD,CACE,IAAK,kBACL,OAAQ,CAAC,EAAM,WAAW,KAAK,CAChC,CACD,CACE,IAAK,iBACL,OAAQ,CAAC,EAAM,WAAW,WAAW,QAAQ,YAAa,SAAS,CAAC,CACrE,CACF,CACD,EAAE,CAEN,GAAI,GAAO,UACP,CACE,CACE,IAAK,wBACL,OAAQ,CAAC,EAAM,UAAU,CAC1B,CACF,CACD,EAAE,CACP,CACF,EACF"}
@@ -0,0 +1,2 @@
1
+ import"./enums-OiLcZ26O.mjs";import{ScopeName as e,TRANSCEND_SCOPES as t}from"@transcend-io/privacy-types";import{keyBy as n}from"lodash-es";var r=`12.0.0`,i=`A command line interface for programmatic operations across Transcend.`;const a=`transcend`,o=`https://app.transcend.io`,s=`${o}/infrastructure/integrations`,c=`${o}/data-map/data-inventory/data-points`,l=process.env.TRANSCEND_API_URL||`https://api.transcend.io`,u=process.env.TRANSCEND_API_KEY||void 0,d=process.env.TRANSCEND_CONSENT_API_URL||`https://consent.transcend.io`,f={apiKeys:[e.ViewApiKeys],templates:[e.ManageEmailTemplates],dataSilos:[e.ManageDataMap,e.ConnectDataSilos,e.ViewApiKeys],enrichers:[e.ManageRequestIdentities],businessEntities:[e.ManageDataInventory],processingActivities:[e.ManageDataMap],identifiers:[e.ManageRequestIdentities],customFields:[e.ManageGlobalAttributes],dataFlows:[e.ManageDataFlow],cookies:[e.ManageDataFlow],consentManager:[e.ManageConsentManagerDeveloperSettings],partitions:[e.ManageConsentManagerDeveloperSettings],actions:[e.ManageDataSubjectRequestSettings],dataSubjects:[e.ManageDataSubjectRequestSettings],vendors:[e.ManageDataInventory],dataCategories:[e.ManageDataInventory],processingPurposes:[e.ManageDataInventory],actionItems:[e.ManageAllActionItems,e.ViewGlobalAttributes],actionItemCollections:[e.ManageActionItemCollections],teams:[e.ManageAccessControl],messages:[e.ManageIntlMessages],privacyCenters:[e.ManagePrivacyCenter],policies:[e.ManagePolicies],assessments:[e.ManageAssessments],assessmentTemplates:[e.ManageAssessments],purposes:[e.ManageConsentManager,e.ManagePreferenceStoreSettings],preferenceOptions:[e.ManagePreferenceStoreSettings],systemDiscovery:[e.ManageDataMap],preferenceWorkflowConfigs:[e.ManagePreferenceStoreSettings,e.ViewDataSubjectRequestSettings,e.ViewConsentManager,e.ViewDataMap,e.ManageWorkflows],workflowConfigs:[e.ManageWorkflows]},p={apiKeys:[e.ViewApiKeys],templates:[e.ViewEmailTemplates],dataSilos:[e.ViewDataMap,e.ViewDataSubjectRequestSettings,e.ViewApiKeys],enrichers:[e.ViewRequestIdentitySettings],businessEntities:[e.ViewDataInventory],processingActivities:[e.ViewDataInventory],identifiers:[e.ViewRequestIdentitySettings],customFields:[e.ViewGlobalAttributes],dataFlows:[e.ViewDataFlow],cookies:[e.ViewDataFlow],consentManager:[e.ViewConsentManager],partitions:[e.ViewConsentManager],actions:[e.ViewDataSubjectRequestSettings],dataSubjects:[e.ViewDataSubjectRequestSettings],vendors:[e.ViewDataInventory],dataCategories:[e.ViewDataInventory],processingPurposes:[e.ViewDataInventory],actionItemCollections:[e.ViewAllActionItems],actionItems:[e.ViewAllActionItems],teams:[e.ViewScopes],messages:[e.ViewIntlMessages],privacyCenters:[e.ViewPrivacyCenter],policies:[e.ViewPolicies],assessments:[e.ViewAssessments],assessmentTemplates:[e.ViewAssessments],purposes:[e.ViewConsentManager,e.ViewPreferenceStoreSettings],preferenceOptions:[e.ViewPreferenceStoreSettings],systemDiscovery:[e.ViewDataMap],preferenceWorkflowConfigs:[e.ViewPreferenceStoreSettings,e.ManageWorkflows],workflowConfigs:[e.ViewWorkflows]},m={apiKeys:`api-keys`,customFields:`attributes`,dataFlows:`data-flows`,cookies:`cookies`,consentManager:`consent-manager`,partitions:`partitions`,actions:`actions`,dataSubjects:`data-subjects`,businessEntities:`business-entities`,processingActivities:`processing-activities`,identifiers:`identifiers`,enrichers:`preflights`,dataSilos:`data-silos`,templates:`templates`,vendors:`vendors`,dataCategories:`data-categories`,processingPurposes:`processing-purposes`,actionItems:`action-items`,actionItemCollections:`action-item-collections`,teams:`teams`,messages:`messages`,privacyCenters:`privacy-center`,policies:`policies`,assessments:`assessments`,assessmentTemplates:`assessment-templates`,purposes:`purposes`,preferenceOptions:`preference-options`,systemDiscovery:`system-discovery`,preferenceWorkflowConfigs:`preference-workflow-configs`,workflowConfigs:`workflow-configs`},h=n(Object.entries(t).map(([e,t])=>({...t,name:e})),`title`),g=Object.keys(h),_=new Set([429,502,500,504,329]),v=process.env.DEBUG===`1`;export{l as a,_ as c,p as d,f,r as g,i as h,v as i,h as l,a as m,c as n,u as o,m as p,s as r,d as s,o as t,g as u};
2
+ //# sourceMappingURL=constants-BRsj50Nb.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants-XH8NIJGC.mjs","names":[],"sources":["../package.json","../src/constants.ts"],"sourcesContent":["","import { ScopeName, TRANSCEND_SCOPES, type ScopeDefinition } from '@transcend-io/privacy-types';\nimport { keyBy } from 'lodash-es';\n\nimport { TranscendInput } from './codecs.js';\nimport { TranscendPullResource } from './enums.js';\n\nexport { description, version } from '../package.json';\n/**\n * The name of the main binary for the CLI\n */\nexport const name = 'transcend';\n\nexport const ADMIN_DASH = 'https://app.transcend.io';\n\nexport const ADMIN_DASH_INTEGRATIONS = `${ADMIN_DASH}/infrastructure/integrations`;\nexport const ADMIN_DASH_DATAPOINTS = `${ADMIN_DASH}/data-map/data-inventory/data-points`;\n\n/**\n * Override default transcend API url using\n * TRANSCEND_API_URL=https://api.us.transcend.io transcend ...\n */\nexport const DEFAULT_TRANSCEND_API = process.env.TRANSCEND_API_URL || 'https://api.transcend.io';\n\n/**\n * Default the `--auth` flag to the `TRANSCEND_API_KEY` environment variable\n * when it is set, so callers do not need to pass `--auth` on every invocation:\n * TRANSCEND_API_KEY=... transcend policy bundles\n * When unset, `--auth` remains required.\n */\nexport const DEFAULT_TRANSCEND_API_KEY = process.env.TRANSCEND_API_KEY || undefined;\n\n/**\n * Override default transcend API url using\n * TRANSCEND_CONSENT_API_URL=https://consent.us.transcend.io transcend ...\n */\nexport const DEFAULT_TRANSCEND_CONSENT_API =\n process.env.TRANSCEND_CONSENT_API_URL || 'https://consent.transcend.io';\n\n/**\n * Mapping between resource type and scopes required for cli\n */\nexport const TR_PUSH_RESOURCE_SCOPE_MAP: {\n [k in TranscendPullResource]: ScopeName[];\n} = {\n [TranscendPullResource.ApiKeys]: [ScopeName.ViewApiKeys],\n [TranscendPullResource.Templates]: [ScopeName.ManageEmailTemplates],\n // ViewApiKeys — resolve api-key-title → apiKeyId when present on data silos\n [TranscendPullResource.DataSilos]: [\n ScopeName.ManageDataMap,\n ScopeName.ConnectDataSilos,\n ScopeName.ViewApiKeys,\n ],\n [TranscendPullResource.Enrichers]: [ScopeName.ManageRequestIdentities],\n [TranscendPullResource.BusinessEntities]: [ScopeName.ManageDataInventory],\n [TranscendPullResource.ProcessingActivities]: [ScopeName.ManageDataMap],\n [TranscendPullResource.Identifiers]: [ScopeName.ManageRequestIdentities],\n [TranscendPullResource.Attributes]: [ScopeName.ManageGlobalAttributes],\n [TranscendPullResource.DataFlows]: [ScopeName.ManageDataFlow],\n [TranscendPullResource.Cookies]: [ScopeName.ManageDataFlow],\n [TranscendPullResource.ConsentManager]: [ScopeName.ManageConsentManagerDeveloperSettings],\n [TranscendPullResource.Partitions]: [ScopeName.ManageConsentManagerDeveloperSettings],\n [TranscendPullResource.Actions]: [ScopeName.ManageDataSubjectRequestSettings],\n [TranscendPullResource.DataSubjects]: [ScopeName.ManageDataSubjectRequestSettings],\n [TranscendPullResource.Vendors]: [ScopeName.ManageDataInventory],\n [TranscendPullResource.DataCategories]: [ScopeName.ManageDataInventory],\n [TranscendPullResource.ProcessingPurposes]: [ScopeName.ManageDataInventory],\n [TranscendPullResource.ActionItems]: [\n ScopeName.ManageAllActionItems,\n ScopeName.ViewGlobalAttributes,\n ],\n [TranscendPullResource.ActionItemCollections]: [ScopeName.ManageActionItemCollections],\n [TranscendPullResource.Teams]: [ScopeName.ManageAccessControl],\n [TranscendPullResource.Messages]: [ScopeName.ManageIntlMessages],\n [TranscendPullResource.PrivacyCenters]: [ScopeName.ManagePrivacyCenter],\n [TranscendPullResource.Policies]: [ScopeName.ManagePolicies],\n [TranscendPullResource.Assessments]: [ScopeName.ManageAssessments],\n [TranscendPullResource.AssessmentTemplates]: [ScopeName.ManageAssessments],\n [TranscendPullResource.Purposes]: [\n ScopeName.ManageConsentManager,\n ScopeName.ManagePreferenceStoreSettings,\n ],\n [TranscendPullResource.PreferenceOptions]: [ScopeName.ManagePreferenceStoreSettings],\n [TranscendPullResource.SystemDiscovery]: [ScopeName.ManageDataMap],\n // Primary: ManagePreferenceStoreSettings (createOrUpdateConsentWorkflowTrigger).\n // Related fetches used during sync:\n // - ViewDataSubjectRequestSettings — resolve action-type / data-subject-type (legacy)\n // - ViewConsentManager — resolve purposes[].tracking-type → purposeId\n // - ViewDataMap — resolve data-silo-titles (legacy, only when present)\n // - ManageWorkflows — list DSR workflows when workflow-title is set (V2)\n [TranscendPullResource.PreferenceWorkflowConfigs]: [\n ScopeName.ManagePreferenceStoreSettings,\n ScopeName.ViewDataSubjectRequestSettings,\n ScopeName.ViewConsentManager,\n ScopeName.ViewDataMap,\n ScopeName.ManageWorkflows,\n ],\n // ManageWorkflows inherits ViewDataSubjectRequestSettings and ViewGlobalAttributes\n // (needed to resolve action/data-subject/attribute-key names to IDs on push)\n [TranscendPullResource.WorkflowConfigs]: [ScopeName.ManageWorkflows],\n};\n\n/**\n * Mapping between resource type and scopes required for cli\n */\nexport const TR_PULL_RESOURCE_SCOPE_MAP: {\n [k in TranscendPullResource]: ScopeName[];\n} = {\n [TranscendPullResource.ApiKeys]: [ScopeName.ViewApiKeys],\n [TranscendPullResource.Templates]: [ScopeName.ViewEmailTemplates],\n // ViewApiKeys — dataSilos.apiKeys on the enriched pull query\n [TranscendPullResource.DataSilos]: [\n ScopeName.ViewDataMap,\n ScopeName.ViewDataSubjectRequestSettings,\n ScopeName.ViewApiKeys,\n ],\n [TranscendPullResource.Enrichers]: [ScopeName.ViewRequestIdentitySettings],\n [TranscendPullResource.BusinessEntities]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.ProcessingActivities]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.Identifiers]: [ScopeName.ViewRequestIdentitySettings],\n [TranscendPullResource.Attributes]: [ScopeName.ViewGlobalAttributes],\n [TranscendPullResource.DataFlows]: [ScopeName.ViewDataFlow],\n [TranscendPullResource.Cookies]: [ScopeName.ViewDataFlow],\n [TranscendPullResource.ConsentManager]: [ScopeName.ViewConsentManager],\n [TranscendPullResource.Partitions]: [ScopeName.ViewConsentManager],\n [TranscendPullResource.Actions]: [ScopeName.ViewDataSubjectRequestSettings],\n [TranscendPullResource.DataSubjects]: [ScopeName.ViewDataSubjectRequestSettings],\n [TranscendPullResource.Vendors]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.DataCategories]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.ProcessingPurposes]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.ActionItemCollections]: [ScopeName.ViewAllActionItems],\n [TranscendPullResource.ActionItems]: [ScopeName.ViewAllActionItems],\n [TranscendPullResource.Teams]: [ScopeName.ViewScopes],\n [TranscendPullResource.Messages]: [ScopeName.ViewIntlMessages],\n [TranscendPullResource.PrivacyCenters]: [ScopeName.ViewPrivacyCenter],\n [TranscendPullResource.Policies]: [ScopeName.ViewPolicies],\n [TranscendPullResource.Assessments]: [ScopeName.ViewAssessments],\n [TranscendPullResource.AssessmentTemplates]: [ScopeName.ViewAssessments],\n [TranscendPullResource.Purposes]: [\n ScopeName.ViewConsentManager,\n ScopeName.ViewPreferenceStoreSettings,\n ],\n [TranscendPullResource.PreferenceOptions]: [ScopeName.ViewPreferenceStoreSettings],\n [TranscendPullResource.SystemDiscovery]: [ScopeName.ViewDataMap],\n // ViewPreferenceStoreSettings — consentWorkflowTriggers GraphQL query\n // ManageWorkflows — resolve workflowConfigId → workflow-title for V2 configs\n [TranscendPullResource.PreferenceWorkflowConfigs]: [\n ScopeName.ViewPreferenceStoreSettings,\n ScopeName.ManageWorkflows,\n ],\n [TranscendPullResource.WorkflowConfigs]: [ScopeName.ViewWorkflows],\n};\n\nexport const TR_YML_RESOURCE_TO_FIELD_NAME: Record<TranscendPullResource, keyof TranscendInput> = {\n [TranscendPullResource.ApiKeys]: 'api-keys',\n [TranscendPullResource.Attributes]: 'attributes',\n [TranscendPullResource.DataFlows]: 'data-flows',\n [TranscendPullResource.Cookies]: 'cookies',\n [TranscendPullResource.ConsentManager]: 'consent-manager',\n [TranscendPullResource.Partitions]: 'partitions',\n [TranscendPullResource.Actions]: 'actions',\n [TranscendPullResource.DataSubjects]: 'data-subjects',\n [TranscendPullResource.BusinessEntities]: 'business-entities',\n [TranscendPullResource.ProcessingActivities]: 'processing-activities',\n [TranscendPullResource.Identifiers]: 'identifiers',\n [TranscendPullResource.Enrichers]: 'preflights',\n [TranscendPullResource.DataSilos]: 'data-silos',\n [TranscendPullResource.Templates]: 'templates',\n [TranscendPullResource.Vendors]: 'vendors',\n [TranscendPullResource.DataCategories]: 'data-categories',\n [TranscendPullResource.ProcessingPurposes]: 'processing-purposes',\n [TranscendPullResource.ActionItems]: 'action-items',\n [TranscendPullResource.ActionItemCollections]: 'action-item-collections',\n [TranscendPullResource.Teams]: 'teams',\n [TranscendPullResource.Messages]: 'messages',\n [TranscendPullResource.PrivacyCenters]: 'privacy-center',\n [TranscendPullResource.Policies]: 'policies',\n [TranscendPullResource.Assessments]: 'assessments',\n [TranscendPullResource.AssessmentTemplates]: 'assessment-templates',\n [TranscendPullResource.Purposes]: 'purposes',\n [TranscendPullResource.PreferenceOptions]: 'preference-options',\n [TranscendPullResource.SystemDiscovery]: 'system-discovery',\n [TranscendPullResource.PreferenceWorkflowConfigs]: 'preference-workflow-configs',\n [TranscendPullResource.WorkflowConfigs]: 'workflow-configs',\n};\n\nexport const SCOPES_BY_TITLE = keyBy(\n Object.entries(TRANSCEND_SCOPES).map(([name, value]) => ({\n ...value,\n name,\n })),\n 'title',\n) as Record<\n string,\n ScopeDefinition & {\n /** The camelCased name which identifies the scope */\n name: ScopeName;\n }\n>;\n\nexport const SCOPE_TITLES = Object.keys(SCOPES_BY_TITLE);\n\n/**\n * HTTP statuses that should be retried *in place* without splitting.\n * 429: Rate-limited\n * 502: Upstream/edge gateway error\n * 329: Reserved for custom infra (kept defensively)\n */\nexport const RETRYABLE_BATCH_STATUSES = new Set([429, 502, 500, 504, 329] as const);\n\n/**\n * Debugging\n */\nexport const DEBUG = process.env.DEBUG === '1';\n"],"mappings":"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"}
1
+ {"version":3,"file":"constants-BRsj50Nb.mjs","names":[],"sources":["../package.json","../src/constants.ts"],"sourcesContent":["","import { ScopeName, TRANSCEND_SCOPES, type ScopeDefinition } from '@transcend-io/privacy-types';\nimport { keyBy } from 'lodash-es';\n\nimport { TranscendInput } from './codecs.js';\nimport { TranscendPullResource } from './enums.js';\n\nexport { description, version } from '../package.json';\n/**\n * The name of the main binary for the CLI\n */\nexport const name = 'transcend';\n\nexport const ADMIN_DASH = 'https://app.transcend.io';\n\nexport const ADMIN_DASH_INTEGRATIONS = `${ADMIN_DASH}/infrastructure/integrations`;\nexport const ADMIN_DASH_DATAPOINTS = `${ADMIN_DASH}/data-map/data-inventory/data-points`;\n\n/**\n * Override default transcend API url using\n * TRANSCEND_API_URL=https://api.us.transcend.io transcend ...\n */\nexport const DEFAULT_TRANSCEND_API = process.env.TRANSCEND_API_URL || 'https://api.transcend.io';\n\n/**\n * Default the `--auth` flag to the `TRANSCEND_API_KEY` environment variable\n * when it is set, so callers do not need to pass `--auth` on every invocation:\n * TRANSCEND_API_KEY=... transcend policy bundles\n * When unset, `--auth` remains required.\n */\nexport const DEFAULT_TRANSCEND_API_KEY = process.env.TRANSCEND_API_KEY || undefined;\n\n/**\n * Override default transcend API url using\n * TRANSCEND_CONSENT_API_URL=https://consent.us.transcend.io transcend ...\n */\nexport const DEFAULT_TRANSCEND_CONSENT_API =\n process.env.TRANSCEND_CONSENT_API_URL || 'https://consent.transcend.io';\n\n/**\n * Mapping between resource type and scopes required for cli\n */\nexport const TR_PUSH_RESOURCE_SCOPE_MAP: {\n [k in TranscendPullResource]: ScopeName[];\n} = {\n [TranscendPullResource.ApiKeys]: [ScopeName.ViewApiKeys],\n [TranscendPullResource.Templates]: [ScopeName.ManageEmailTemplates],\n // ViewApiKeys — resolve api-key-title → apiKeyId when present on data silos\n [TranscendPullResource.DataSilos]: [\n ScopeName.ManageDataMap,\n ScopeName.ConnectDataSilos,\n ScopeName.ViewApiKeys,\n ],\n [TranscendPullResource.Enrichers]: [ScopeName.ManageRequestIdentities],\n [TranscendPullResource.BusinessEntities]: [ScopeName.ManageDataInventory],\n [TranscendPullResource.ProcessingActivities]: [ScopeName.ManageDataMap],\n [TranscendPullResource.Identifiers]: [ScopeName.ManageRequestIdentities],\n [TranscendPullResource.Attributes]: [ScopeName.ManageGlobalAttributes],\n [TranscendPullResource.DataFlows]: [ScopeName.ManageDataFlow],\n [TranscendPullResource.Cookies]: [ScopeName.ManageDataFlow],\n [TranscendPullResource.ConsentManager]: [ScopeName.ManageConsentManagerDeveloperSettings],\n [TranscendPullResource.Partitions]: [ScopeName.ManageConsentManagerDeveloperSettings],\n [TranscendPullResource.Actions]: [ScopeName.ManageDataSubjectRequestSettings],\n [TranscendPullResource.DataSubjects]: [ScopeName.ManageDataSubjectRequestSettings],\n [TranscendPullResource.Vendors]: [ScopeName.ManageDataInventory],\n [TranscendPullResource.DataCategories]: [ScopeName.ManageDataInventory],\n [TranscendPullResource.ProcessingPurposes]: [ScopeName.ManageDataInventory],\n [TranscendPullResource.ActionItems]: [\n ScopeName.ManageAllActionItems,\n ScopeName.ViewGlobalAttributes,\n ],\n [TranscendPullResource.ActionItemCollections]: [ScopeName.ManageActionItemCollections],\n [TranscendPullResource.Teams]: [ScopeName.ManageAccessControl],\n [TranscendPullResource.Messages]: [ScopeName.ManageIntlMessages],\n [TranscendPullResource.PrivacyCenters]: [ScopeName.ManagePrivacyCenter],\n [TranscendPullResource.Policies]: [ScopeName.ManagePolicies],\n [TranscendPullResource.Assessments]: [ScopeName.ManageAssessments],\n [TranscendPullResource.AssessmentTemplates]: [ScopeName.ManageAssessments],\n [TranscendPullResource.Purposes]: [\n ScopeName.ManageConsentManager,\n ScopeName.ManagePreferenceStoreSettings,\n ],\n [TranscendPullResource.PreferenceOptions]: [ScopeName.ManagePreferenceStoreSettings],\n [TranscendPullResource.SystemDiscovery]: [ScopeName.ManageDataMap],\n // Primary: ManagePreferenceStoreSettings (createOrUpdateConsentWorkflowTrigger).\n // Related fetches used during sync:\n // - ViewDataSubjectRequestSettings — resolve action-type / data-subject-type (legacy)\n // - ViewConsentManager — resolve purposes[].tracking-type → purposeId\n // - ViewDataMap — resolve data-silo-titles (legacy, only when present)\n // - ManageWorkflows — list DSR workflows when workflow-title is set (V2)\n [TranscendPullResource.PreferenceWorkflowConfigs]: [\n ScopeName.ManagePreferenceStoreSettings,\n ScopeName.ViewDataSubjectRequestSettings,\n ScopeName.ViewConsentManager,\n ScopeName.ViewDataMap,\n ScopeName.ManageWorkflows,\n ],\n // ManageWorkflows inherits ViewDataSubjectRequestSettings and ViewGlobalAttributes\n // (needed to resolve action/data-subject/attribute-key names to IDs on push)\n [TranscendPullResource.WorkflowConfigs]: [ScopeName.ManageWorkflows],\n};\n\n/**\n * Mapping between resource type and scopes required for cli\n */\nexport const TR_PULL_RESOURCE_SCOPE_MAP: {\n [k in TranscendPullResource]: ScopeName[];\n} = {\n [TranscendPullResource.ApiKeys]: [ScopeName.ViewApiKeys],\n [TranscendPullResource.Templates]: [ScopeName.ViewEmailTemplates],\n // ViewApiKeys — dataSilos.apiKeys on the enriched pull query\n [TranscendPullResource.DataSilos]: [\n ScopeName.ViewDataMap,\n ScopeName.ViewDataSubjectRequestSettings,\n ScopeName.ViewApiKeys,\n ],\n [TranscendPullResource.Enrichers]: [ScopeName.ViewRequestIdentitySettings],\n [TranscendPullResource.BusinessEntities]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.ProcessingActivities]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.Identifiers]: [ScopeName.ViewRequestIdentitySettings],\n [TranscendPullResource.Attributes]: [ScopeName.ViewGlobalAttributes],\n [TranscendPullResource.DataFlows]: [ScopeName.ViewDataFlow],\n [TranscendPullResource.Cookies]: [ScopeName.ViewDataFlow],\n [TranscendPullResource.ConsentManager]: [ScopeName.ViewConsentManager],\n [TranscendPullResource.Partitions]: [ScopeName.ViewConsentManager],\n [TranscendPullResource.Actions]: [ScopeName.ViewDataSubjectRequestSettings],\n [TranscendPullResource.DataSubjects]: [ScopeName.ViewDataSubjectRequestSettings],\n [TranscendPullResource.Vendors]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.DataCategories]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.ProcessingPurposes]: [ScopeName.ViewDataInventory],\n [TranscendPullResource.ActionItemCollections]: [ScopeName.ViewAllActionItems],\n [TranscendPullResource.ActionItems]: [ScopeName.ViewAllActionItems],\n [TranscendPullResource.Teams]: [ScopeName.ViewScopes],\n [TranscendPullResource.Messages]: [ScopeName.ViewIntlMessages],\n [TranscendPullResource.PrivacyCenters]: [ScopeName.ViewPrivacyCenter],\n [TranscendPullResource.Policies]: [ScopeName.ViewPolicies],\n [TranscendPullResource.Assessments]: [ScopeName.ViewAssessments],\n [TranscendPullResource.AssessmentTemplates]: [ScopeName.ViewAssessments],\n [TranscendPullResource.Purposes]: [\n ScopeName.ViewConsentManager,\n ScopeName.ViewPreferenceStoreSettings,\n ],\n [TranscendPullResource.PreferenceOptions]: [ScopeName.ViewPreferenceStoreSettings],\n [TranscendPullResource.SystemDiscovery]: [ScopeName.ViewDataMap],\n // ViewPreferenceStoreSettings — consentWorkflowTriggers GraphQL query\n // ManageWorkflows — resolve workflowConfigId → workflow-title for V2 configs\n [TranscendPullResource.PreferenceWorkflowConfigs]: [\n ScopeName.ViewPreferenceStoreSettings,\n ScopeName.ManageWorkflows,\n ],\n [TranscendPullResource.WorkflowConfigs]: [ScopeName.ViewWorkflows],\n};\n\nexport const TR_YML_RESOURCE_TO_FIELD_NAME: Record<TranscendPullResource, keyof TranscendInput> = {\n [TranscendPullResource.ApiKeys]: 'api-keys',\n [TranscendPullResource.Attributes]: 'attributes',\n [TranscendPullResource.DataFlows]: 'data-flows',\n [TranscendPullResource.Cookies]: 'cookies',\n [TranscendPullResource.ConsentManager]: 'consent-manager',\n [TranscendPullResource.Partitions]: 'partitions',\n [TranscendPullResource.Actions]: 'actions',\n [TranscendPullResource.DataSubjects]: 'data-subjects',\n [TranscendPullResource.BusinessEntities]: 'business-entities',\n [TranscendPullResource.ProcessingActivities]: 'processing-activities',\n [TranscendPullResource.Identifiers]: 'identifiers',\n [TranscendPullResource.Enrichers]: 'preflights',\n [TranscendPullResource.DataSilos]: 'data-silos',\n [TranscendPullResource.Templates]: 'templates',\n [TranscendPullResource.Vendors]: 'vendors',\n [TranscendPullResource.DataCategories]: 'data-categories',\n [TranscendPullResource.ProcessingPurposes]: 'processing-purposes',\n [TranscendPullResource.ActionItems]: 'action-items',\n [TranscendPullResource.ActionItemCollections]: 'action-item-collections',\n [TranscendPullResource.Teams]: 'teams',\n [TranscendPullResource.Messages]: 'messages',\n [TranscendPullResource.PrivacyCenters]: 'privacy-center',\n [TranscendPullResource.Policies]: 'policies',\n [TranscendPullResource.Assessments]: 'assessments',\n [TranscendPullResource.AssessmentTemplates]: 'assessment-templates',\n [TranscendPullResource.Purposes]: 'purposes',\n [TranscendPullResource.PreferenceOptions]: 'preference-options',\n [TranscendPullResource.SystemDiscovery]: 'system-discovery',\n [TranscendPullResource.PreferenceWorkflowConfigs]: 'preference-workflow-configs',\n [TranscendPullResource.WorkflowConfigs]: 'workflow-configs',\n};\n\nexport const SCOPES_BY_TITLE = keyBy(\n Object.entries(TRANSCEND_SCOPES).map(([name, value]) => ({\n ...value,\n name,\n })),\n 'title',\n) as Record<\n string,\n ScopeDefinition & {\n /** The camelCased name which identifies the scope */\n name: ScopeName;\n }\n>;\n\nexport const SCOPE_TITLES = Object.keys(SCOPES_BY_TITLE);\n\n/**\n * HTTP statuses that should be retried *in place* without splitting.\n * 429: Rate-limited\n * 502: Upstream/edge gateway error\n * 329: Reserved for custom infra (kept defensively)\n */\nexport const RETRYABLE_BATCH_STATUSES = new Set([429, 502, 500, 504, 329] as const);\n\n/**\n * Debugging\n */\nexport const DEBUG = process.env.DEBUG === '1';\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import{n as e}from"./listFiles-BdFUbX5x.mjs";import{CodePackageType as t}from"@transcend-io/privacy-types";import{readFileSync as n}from"node:fs";import{dirname as r,join as i}from"node:path";import{decodeCodec as a,findAllWithRegex as o}from"@transcend-io/type-utils";import*as s from"io-ts";import c from"js-yaml";const l=/target ('|")(.*?)('|")/,u=/pod ('|")(.*?)('|")(, ('|")~> (.+?)('|")|)/,d={supportedFiles:[`Podfile`],ignoreDirs:[`Pods`,`Build`],scanFunction:e=>{let r=n(e,`utf-8`),i=o({value:new RegExp(l,`g`),matches:[`quote1`,`name`,`quote2`]},r),a=o({value:new RegExp(u,`g`),matches:[`quote1`,`name`,`quote2`,`extra`,`quote3`,`version`,`quote4`]},r);return i.map((e,n)=>({name:e.name,type:t.CocoaPods,softwareDevelopmentKits:a.filter(t=>t.matchIndex>e.matchIndex&&(!i[n+1]||t.matchIndex<i[n+1].matchIndex)).map(e=>({name:e.name,version:e.version}))}))}},f=/implementation( *)('|")(.+?):(.+?):(.+?|)('|")/,p=/apply plugin: *('|")(.+?)(:(.+?)|)('|")/,m=/implementation group:( *)('|")(.+?)('|"),( *)name:( *)('|")(.+?)('|"),( *)version:( *)('|")(.+?)('|")/,h=/applicationId( *)"(.+?)"/,g={supportedFiles:[`build.gradle**`],ignoreDirs:[`gradle-app.setting`,`gradle-wrapper.jar`,`gradle-wrapper.properties`],scanFunction:e=>{let t=n(e,`utf-8`),i=r(e),a=o({value:new RegExp(f,`g`),matches:[`space`,`quote1`,`name`,`path`,`version`,`quote2`]},t),s=o({value:new RegExp(p,`g`),matches:[`quote1`,`name`,`group`,`version`,`quote2`]},t),c=o({value:new RegExp(m,`g`),matches:[`space1`,`quote1`,`group`,`quote2`,`space2`,`space3`,`quote3`,`name`,`quote4`,`space4`,`space5`,`quote5`,`version`,`quote6`]},t),l=o({value:new RegExp(h,`g`),matches:[`space`,`name`]},t);if(l.length>1)throw Error(`Expected only one applicationId per file: ${e}`);return[{name:l[0]?.name||i.split(`/`).pop(),softwareDevelopmentKits:[...a,...c,...s].map(e=>({name:e.name,version:e.version||void 0}))}]}},_={supportedFiles:[`package.json`],ignoreDirs:[`node_modules`,`serverless-build`,`lambda-build`],scanFunction:e=>{let t=n(e,`utf-8`),i=r(e),{name:a,description:o,dependencies:s={},devDependencies:c={},optionalDependencies:l={}}=JSON.parse(t);return[{name:a||i.split(`/`).pop(),description:o,softwareDevelopmentKits:[...Object.entries(s).map(([e,t])=>({name:e,version:typeof t==`string`?t:void 0})),...Object.entries(c).map(([e,t])=>({name:e,version:typeof t==`string`?t:void 0,isDevDependency:!0})),...Object.entries(l).map(([e,t])=>({name:e,version:typeof t==`string`?t:void 0}))]}]}},v=/(.+?)(=+)(.+)/,y=/name *= *('|")(.+?)('|")/,b=/description *= *('|")(.+?)('|")/,x={supportedFiles:[`requirements.txt`],ignoreDirs:[`build`,`lib`,`lib64`],scanFunction:a=>{let s=n(a,`utf-8`),c=r(a),l=e(c).find(e=>e===`setup.py`),u=l?n(i(c,l),`utf-8`):void 0,d=u?(y.exec(u)||[])[2]:void 0,f=u?(b.exec(u)||[])[2]:void 0,p=o({value:new RegExp(v,`g`),matches:[`name`,`equals`,`version`]},s);return[{name:d||c.split(`/`).pop(),description:f||void 0,type:t.RequirementsTxt,softwareDevelopmentKits:p.map(e=>({name:e.name,version:e.version}))}]}},S=/gem *('|")(.+?)('|")(, *('|")(.+?)('|")|)/,C=/spec\.name *= *('|")(.+?)('|")/,w=/spec\.description *= *('|")(.+?)('|")/,T=/spec\.summary *= *('|")(.+?)('|")/,E={supportedFiles:[`Gemfile`],ignoreDirs:[`bin`],scanFunction:i=>{let a=n(i,`utf-8`),s=r(i),c=e(s).find(e=>e===`.gemspec`),l=c?n(c,`utf-8`):void 0,u=l?(C.exec(l)||[])[2]:void 0,d=l?(w.exec(l)||T.exec(l)||[])[1]:void 0,f=o({value:new RegExp(S,`g`),matches:[`quote1`,`name`,`quote2`,`hasVersion`,`quote3`,`version`,`quote4`]},a);return[{name:u||s.split(`/`).pop(),description:d||void 0,type:t.RequirementsTxt,softwareDevelopmentKits:f.map(e=>({name:e.name,version:e.version}))}]}};function D(e){return e.split(`
1
+ import{n as e}from"./listFiles-DDGCBdtx.mjs";import{CodePackageType as t}from"@transcend-io/privacy-types";import{dirname as n,join as r}from"node:path";import i from"js-yaml";import{readFileSync as a}from"node:fs";import{decodeCodec as o,findAllWithRegex as s}from"@transcend-io/type-utils";import*as c from"io-ts";const l=/target ('|")(.*?)('|")/,u=/pod ('|")(.*?)('|")(, ('|")~> (.+?)('|")|)/,d={supportedFiles:[`Podfile`],ignoreDirs:[`Pods`,`Build`],scanFunction:e=>{let n=a(e,`utf-8`),r=s({value:new RegExp(l,`g`),matches:[`quote1`,`name`,`quote2`]},n),i=s({value:new RegExp(u,`g`),matches:[`quote1`,`name`,`quote2`,`extra`,`quote3`,`version`,`quote4`]},n);return r.map((e,n)=>({name:e.name,type:t.CocoaPods,softwareDevelopmentKits:i.filter(t=>t.matchIndex>e.matchIndex&&(!r[n+1]||t.matchIndex<r[n+1].matchIndex)).map(e=>({name:e.name,version:e.version}))}))}},f=/implementation( *)('|")(.+?):(.+?):(.+?|)('|")/,p=/apply plugin: *('|")(.+?)(:(.+?)|)('|")/,m=/implementation group:( *)('|")(.+?)('|"),( *)name:( *)('|")(.+?)('|"),( *)version:( *)('|")(.+?)('|")/,h=/applicationId( *)"(.+?)"/,g={supportedFiles:[`build.gradle**`],ignoreDirs:[`gradle-app.setting`,`gradle-wrapper.jar`,`gradle-wrapper.properties`],scanFunction:e=>{let t=a(e,`utf-8`),r=n(e),i=s({value:new RegExp(f,`g`),matches:[`space`,`quote1`,`name`,`path`,`version`,`quote2`]},t),o=s({value:new RegExp(p,`g`),matches:[`quote1`,`name`,`group`,`version`,`quote2`]},t),c=s({value:new RegExp(m,`g`),matches:[`space1`,`quote1`,`group`,`quote2`,`space2`,`space3`,`quote3`,`name`,`quote4`,`space4`,`space5`,`quote5`,`version`,`quote6`]},t),l=s({value:new RegExp(h,`g`),matches:[`space`,`name`]},t);if(l.length>1)throw Error(`Expected only one applicationId per file: ${e}`);return[{name:l[0]?.name||r.split(`/`).pop(),softwareDevelopmentKits:[...i,...c,...o].map(e=>({name:e.name,version:e.version||void 0}))}]}},_={supportedFiles:[`package.json`],ignoreDirs:[`node_modules`,`serverless-build`,`lambda-build`],scanFunction:e=>{let t=a(e,`utf-8`),r=n(e),{name:i,description:o,dependencies:s={},devDependencies:c={},optionalDependencies:l={}}=JSON.parse(t);return[{name:i||r.split(`/`).pop(),description:o,softwareDevelopmentKits:[...Object.entries(s).map(([e,t])=>({name:e,version:typeof t==`string`?t:void 0})),...Object.entries(c).map(([e,t])=>({name:e,version:typeof t==`string`?t:void 0,isDevDependency:!0})),...Object.entries(l).map(([e,t])=>({name:e,version:typeof t==`string`?t:void 0}))]}]}},v=/(.+?)(=+)(.+)/,y=/name *= *('|")(.+?)('|")/,b=/description *= *('|")(.+?)('|")/,x={supportedFiles:[`requirements.txt`],ignoreDirs:[`build`,`lib`,`lib64`],scanFunction:i=>{let o=a(i,`utf-8`),c=n(i),l=e(c).find(e=>e===`setup.py`),u=l?a(r(c,l),`utf-8`):void 0,d=u?(y.exec(u)||[])[2]:void 0,f=u?(b.exec(u)||[])[2]:void 0,p=s({value:new RegExp(v,`g`),matches:[`name`,`equals`,`version`]},o);return[{name:d||c.split(`/`).pop(),description:f||void 0,type:t.RequirementsTxt,softwareDevelopmentKits:p.map(e=>({name:e.name,version:e.version}))}]}},S=/gem *('|")(.+?)('|")(, *('|")(.+?)('|")|)/,C=/spec\.name *= *('|")(.+?)('|")/,w=/spec\.description *= *('|")(.+?)('|")/,T=/spec\.summary *= *('|")(.+?)('|")/,E={supportedFiles:[`Gemfile`],ignoreDirs:[`bin`],scanFunction:r=>{let i=a(r,`utf-8`),o=n(r),c=e(o).find(e=>e===`.gemspec`),l=c?a(c,`utf-8`):void 0,u=l?(C.exec(l)||[])[2]:void 0,d=l?(w.exec(l)||T.exec(l)||[])[1]:void 0,f=s({value:new RegExp(S,`g`),matches:[`quote1`,`name`,`quote2`,`hasVersion`,`quote3`,`version`,`quote4`]},i);return[{name:u||o.split(`/`).pop(),description:d||void 0,type:t.RequirementsTxt,softwareDevelopmentKits:f.map(e=>({name:e.name,version:e.version}))}]}};function D(e){return e.split(`
2
2
  `).map(e=>{let t=e.indexOf(`#`);return t>-1&&!e.substring(0,t).includes(`"`)&&!e.substring(0,t).includes(`'`)?e.substring(0,t).trim():e}).filter(e=>e.length>0).join(`
3
- `)}const O={supportedFiles:[`pubspec.yml`],ignoreDirs:[`build`],scanFunction:e=>{let i=r(e),a=n(e,`utf-8`),{name:o,description:s,dev_dependencies:l={},dependencies:u={}}=c.load(D(a));return[{name:o||i.split(`/`).pop(),description:s,type:t.RequirementsTxt,softwareDevelopmentKits:[...Object.entries(u).map(([e,t])=>({name:e,version:typeof t==`string`?t:typeof t==`number`?t.toString():t?.sdk})),...Object.entries(l).map(([e,t])=>({name:e,version:typeof t==`string`?t:typeof t==`number`?t.toString():t?.sdk,isDevDependency:!0}))]}]}},k={supportedFiles:[`composer.json`],ignoreDirs:[`vendor`,`node_modules`,`cache`,`build`,`dist`],scanFunction:e=>{let t=n(e,`utf-8`),i=r(e),{name:a,description:o,require:s={},"require-dev":c={}}=JSON.parse(t);return[{name:a||i.split(`/`).pop(),description:o,softwareDevelopmentKits:[...Object.entries(s).map(([e,t])=>({name:e,version:typeof t==`string`?t:void 0})),...Object.entries(c).map(([e,t])=>({name:e,version:typeof t==`string`?t:void 0,isDevDependency:!0}))]}]}},A=s.type({pins:s.array(s.type({identity:s.string,kind:s.string,location:s.string,state:s.intersection([s.type({revision:s.string}),s.partial({version:s.union([s.string,s.undefined,s.null])})])})),version:s.number}),j=s.type({object:s.type({pins:s.array(s.type({package:s.string,repositoryURL:s.string,state:s.intersection([s.type({branch:s.union([s.string,s.undefined,s.null]),revision:s.string}),s.partial({version:s.union([s.string,s.undefined,s.null])})])}))}),version:s.number}),M={supportedFiles:[`Package.resolved`],ignoreDirs:[],scanFunction:e=>{let i=n(e,`utf-8`);try{let n=a(A,i),o=r(e).split(`/`),s=o[o.length-1],c=s;return c===`swiftpm`&&(c=o[o.length-2],c===`xcshareddata`?c=o[o.length-3]:c||=s,c===`project.xcworkspace`&&(c=o[o.length-4])),[{name:c,type:t.Swift,softwareDevelopmentKits:n.pins.map(e=>({name:e.identity,version:e.state.version||void 0}))}]}catch(n){if(!n?.message?.includes(`Failed to decode codec`))throw n;try{let n=a(j,i);return[{name:r(e).split(`/`).pop()||``,type:t.Swift,softwareDevelopmentKits:n.object.pins.map(e=>({name:e.package,version:e.state.version||void 0}))}]}catch(e){throw e?.message?.includes(`Failed to decode codec`)?n:e}}}},N=`(implementation|api|kapt|ksp|debugImplementation|releaseImplementation|androidTestImplementation|testImplementation|compileOnly|runtimeOnly)`,P=RegExp(`${N}\\s*\\(\\s*["']([^"':\\s]+):([^"':\\s]+):?([^"']*)["']\\s*\\)`,`g`),F=RegExp(`${N}\\s*\\(\\s*platform\\(\\s*["']([^"':\\s]+):([^"':\\s]+):?([^"']*)["']\\s*\\)\\s*\\)`,`g`),I=RegExp(`${N}\\s*\\(\\s*libs(?:\\.[\\w\\-\\.]+|\\[["'][^"']+["']\\])\\s*\\)`,`g`),L=/id\s*\(\s*["']([^"']+)["']\s*\)(?:\s*version\s*["']([^"']+)["'])?/g,R=/apply\s*\(\s*plugin\s*=\s*["']([^"']+)["']\s*\)/g,z=/plugins\s*\{[^}]*alias\s*\(\s*libs(?:\.plugins)?(?:\.[\w\-.]+|\[["'][^"']+["']\])\s*\)[^}]*\}/g,B=/applicationId\s*=\s*["']([^"']+)["']/g,V=/applicationId\s*\(\s*["']([^"']+)["']\s*\)/g;function H(e,t){return{name:e,version:t&&t.trim().length>0&&t!==`_`?t.trim():void 0}}const U={supportedFiles:[`**/build.gradle.kts`,`**/*.gradle.kts`],ignoreDirs:[`gradle-app.setting`,`gradle-wrapper.jar`,`gradle-wrapper.properties`],scanFunction:e=>{let t=n(e,`utf-8`),i=r(e),a=[...o({value:B,matches:[`name`]},t),...o({value:V,matches:[`name`]},t)];if(a.length>1)throw Error(`Expected only one applicationId per file: ${e}`);let s=a[0]?.name||i.split(`/`).pop(),c=[];for(let e of t.matchAll(P)){let[,,t,n,r]=e;c.push(H(`${t}:${n}`,r))}for(let e of t.matchAll(F)){let[,,t,n,r]=e;c.push(H(`${t}:${n}`,r))}for(let e of t.matchAll(I)){let t=e[0].replace(/^[^(]+\(\s*/,``).replace(/\)\s*$/,``).trim();c.push(H(t))}let l=[];for(let e of t.matchAll(L)){let[,t,n]=e;l.push(H(t,n))}for(let e of t.matchAll(R)){let[,t]=e;l.push(H(t))}if(z.test(t)){let e=t.matchAll(/alias\s*\(\s*(libs(?:\.plugins)?(?:\.[\w\-.]+|\[["'][^"']+["']\]))\s*\)/g);for(let t of e)l.push(H(t[1]))}return[{name:s,softwareDevelopmentKits:[...c,...l].reduce((e,t)=>{let n=`${t.name}@@${t.version||``}`;return e.map.has(n)||(e.map.set(n,t),e.list.push(t)),e},{map:new Map,list:[]}).list}]}},W={cocoaPods:d,gradle:g,javascriptPackageJson:_,pythonRequirementsTxt:x,gemfile:E,pubspec:O,swift:M},G={[t.CocoaPods]:d,[t.Gradle]:g,[t.PackageJson]:_,[t.RequirementsTxt]:x,[t.Gemfile]:E,[t.Pubspec]:O,[t.ComposerJson]:k,[t.Swift]:M,[t.Kotlin]:U};export{W as n,G as t};
4
- //# sourceMappingURL=constants-DXzsg2CQ.mjs.map
3
+ `)}const O={supportedFiles:[`pubspec.yml`],ignoreDirs:[`build`],scanFunction:e=>{let r=n(e),o=a(e,`utf-8`),{name:s,description:c,dev_dependencies:l={},dependencies:u={}}=i.load(D(o));return[{name:s||r.split(`/`).pop(),description:c,type:t.RequirementsTxt,softwareDevelopmentKits:[...Object.entries(u).map(([e,t])=>({name:e,version:typeof t==`string`?t:typeof t==`number`?t.toString():t?.sdk})),...Object.entries(l).map(([e,t])=>({name:e,version:typeof t==`string`?t:typeof t==`number`?t.toString():t?.sdk,isDevDependency:!0}))]}]}},k={supportedFiles:[`composer.json`],ignoreDirs:[`vendor`,`node_modules`,`cache`,`build`,`dist`],scanFunction:e=>{let t=a(e,`utf-8`),r=n(e),{name:i,description:o,require:s={},"require-dev":c={}}=JSON.parse(t);return[{name:i||r.split(`/`).pop(),description:o,softwareDevelopmentKits:[...Object.entries(s).map(([e,t])=>({name:e,version:typeof t==`string`?t:void 0})),...Object.entries(c).map(([e,t])=>({name:e,version:typeof t==`string`?t:void 0,isDevDependency:!0}))]}]}},A=c.type({pins:c.array(c.type({identity:c.string,kind:c.string,location:c.string,state:c.intersection([c.type({revision:c.string}),c.partial({version:c.union([c.string,c.undefined,c.null])})])})),version:c.number}),j=c.type({object:c.type({pins:c.array(c.type({package:c.string,repositoryURL:c.string,state:c.intersection([c.type({branch:c.union([c.string,c.undefined,c.null]),revision:c.string}),c.partial({version:c.union([c.string,c.undefined,c.null])})])}))}),version:c.number}),M={supportedFiles:[`Package.resolved`],ignoreDirs:[],scanFunction:e=>{let r=a(e,`utf-8`);try{let i=o(A,r),a=n(e).split(`/`),s=a[a.length-1],c=s;return c===`swiftpm`&&(c=a[a.length-2],c===`xcshareddata`?c=a[a.length-3]:c||=s,c===`project.xcworkspace`&&(c=a[a.length-4])),[{name:c,type:t.Swift,softwareDevelopmentKits:i.pins.map(e=>({name:e.identity,version:e.state.version||void 0}))}]}catch(i){if(!i?.message?.includes(`Failed to decode codec`))throw i;try{let i=o(j,r);return[{name:n(e).split(`/`).pop()||``,type:t.Swift,softwareDevelopmentKits:i.object.pins.map(e=>({name:e.package,version:e.state.version||void 0}))}]}catch(e){throw e?.message?.includes(`Failed to decode codec`)?i:e}}}},N=`(implementation|api|kapt|ksp|debugImplementation|releaseImplementation|androidTestImplementation|testImplementation|compileOnly|runtimeOnly)`,P=RegExp(`${N}\\s*\\(\\s*["']([^"':\\s]+):([^"':\\s]+):?([^"']*)["']\\s*\\)`,`g`),F=RegExp(`${N}\\s*\\(\\s*platform\\(\\s*["']([^"':\\s]+):([^"':\\s]+):?([^"']*)["']\\s*\\)\\s*\\)`,`g`),I=RegExp(`${N}\\s*\\(\\s*libs(?:\\.[\\w\\-\\.]+|\\[["'][^"']+["']\\])\\s*\\)`,`g`),L=/id\s*\(\s*["']([^"']+)["']\s*\)(?:\s*version\s*["']([^"']+)["'])?/g,R=/apply\s*\(\s*plugin\s*=\s*["']([^"']+)["']\s*\)/g,z=/plugins\s*\{[^}]*alias\s*\(\s*libs(?:\.plugins)?(?:\.[\w\-.]+|\[["'][^"']+["']\])\s*\)[^}]*\}/g,B=/applicationId\s*=\s*["']([^"']+)["']/g,V=/applicationId\s*\(\s*["']([^"']+)["']\s*\)/g;function H(e,t){return{name:e,version:t&&t.trim().length>0&&t!==`_`?t.trim():void 0}}const U={supportedFiles:[`**/build.gradle.kts`,`**/*.gradle.kts`],ignoreDirs:[`gradle-app.setting`,`gradle-wrapper.jar`,`gradle-wrapper.properties`],scanFunction:e=>{let t=a(e,`utf-8`),r=n(e),i=[...s({value:B,matches:[`name`]},t),...s({value:V,matches:[`name`]},t)];if(i.length>1)throw Error(`Expected only one applicationId per file: ${e}`);let o=i[0]?.name||r.split(`/`).pop(),c=[];for(let e of t.matchAll(P)){let[,,t,n,r]=e;c.push(H(`${t}:${n}`,r))}for(let e of t.matchAll(F)){let[,,t,n,r]=e;c.push(H(`${t}:${n}`,r))}for(let e of t.matchAll(I)){let t=e[0].replace(/^[^(]+\(\s*/,``).replace(/\)\s*$/,``).trim();c.push(H(t))}let l=[];for(let e of t.matchAll(L)){let[,t,n]=e;l.push(H(t,n))}for(let e of t.matchAll(R)){let[,t]=e;l.push(H(t))}if(z.test(t)){let e=t.matchAll(/alias\s*\(\s*(libs(?:\.plugins)?(?:\.[\w\-.]+|\[["'][^"']+["']\]))\s*\)/g);for(let t of e)l.push(H(t[1]))}return[{name:o,softwareDevelopmentKits:[...c,...l].reduce((e,t)=>{let n=`${t.name}@@${t.version||``}`;return e.map.has(n)||(e.map.set(n,t),e.list.push(t)),e},{map:new Map,list:[]}).list}]}},W={cocoaPods:d,gradle:g,javascriptPackageJson:_,pythonRequirementsTxt:x,gemfile:E,pubspec:O,swift:M},G={[t.CocoaPods]:d,[t.Gradle]:g,[t.PackageJson]:_,[t.RequirementsTxt]:x,[t.Gemfile]:E,[t.Pubspec]:O,[t.ComposerJson]:k,[t.Swift]:M,[t.Kotlin]:U};export{W as n,G as t};
4
+ //# sourceMappingURL=constants-DC_bBO09.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants-DXzsg2CQ.mjs","names":[],"sources":["../src/lib/code-scanning/integrations/cocoaPods.ts","../src/lib/code-scanning/integrations/gradle.ts","../src/lib/code-scanning/integrations/javascriptPackageJson.ts","../src/lib/code-scanning/integrations/pythonRequirementsTxt.ts","../src/lib/code-scanning/integrations/gemfile.ts","../src/lib/code-scanning/integrations/pubspec.ts","../src/lib/code-scanning/integrations/composerJson.ts","../src/lib/code-scanning/integrations/swift.ts","../src/lib/code-scanning/integrations/kotlin.ts","../src/lib/code-scanning/constants.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\n\nimport { CodePackageType } from '@transcend-io/privacy-types';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\n\nimport { CodePackageSdk } from '../../../codecs.js';\nimport { CodeScanningConfig } from '../types.js';\n\nconst POD_TARGET_REGEX = /target ('|\")(.*?)('|\")/;\nconst POD_PACKAGE_REGEX = /pod ('|\")(.*?)('|\")(, ('|\")~> (.+?)('|\")|)/;\n\nexport const cocoaPods: CodeScanningConfig = {\n supportedFiles: ['Podfile'],\n ignoreDirs: ['Pods', 'Build'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(POD_TARGET_REGEX, 'g'),\n matches: ['quote1', 'name', 'quote2'],\n },\n fileContents,\n );\n const packages = findAllWithRegex(\n {\n value: new RegExp(POD_PACKAGE_REGEX, 'g'),\n matches: ['quote1', 'name', 'quote2', 'extra', 'quote3', 'version', 'quote4'],\n },\n fileContents,\n );\n\n const deps: CodePackageSdk[] = targets.map((target, ind) => ({\n name: target.name,\n type: CodePackageType.CocoaPods,\n softwareDevelopmentKits: packages\n .filter(\n (pkg) =>\n pkg.matchIndex > target.matchIndex &&\n (!targets[ind + 1] || pkg.matchIndex < targets[ind + 1].matchIndex),\n )\n .map((pkg) => ({\n name: pkg.name,\n version: pkg.version,\n })),\n }));\n\n return deps;\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { findAllWithRegex } from '@transcend-io/type-utils';\n\nimport { CodeScanningConfig } from '../types.js';\n\nconst GRADLE_IMPLEMENTATION_REGEX = /implementation( *)('|\")(.+?):(.+?):(.+?|)('|\")/;\nconst GRADLE_PLUGIN_REGEX = /apply plugin: *('|\")(.+?)(:(.+?)|)('|\")/;\nconst GRADLE_IMPLEMENTATION_GROUP_REGEX =\n /implementation group:( *)('|\")(.+?)('|\"),( *)name:( *)('|\")(.+?)('|\"),( *)version:( *)('|\")(.+?)('|\")/;\nconst GRADLE_APPLICATION_NAME_REGEX = /applicationId( *)\"(.+?)\"/;\n\n/**\n * So far, there are three ways of defining dependencies that is supported\n * implementation group: 'org.eclipse.jdt', name: 'org.eclipse.jdt.core', version: '3.28.0'\n * or\n * implementation 'com.google.firebase:firebase-analytics:18.0.0'\n * or\n * apply plugin: 'com.google.gms.google-services'\n *\n * single and double quotes are both recognized\n */\nexport const gradle: CodeScanningConfig = {\n supportedFiles: ['build.gradle**'],\n ignoreDirs: ['gradle-app.setting', 'gradle-wrapper.jar', 'gradle-wrapper.properties'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(GRADLE_IMPLEMENTATION_REGEX, 'g'),\n matches: ['space', 'quote1', 'name', 'path', 'version', 'quote2'],\n },\n fileContents,\n );\n const targetPlugins = findAllWithRegex(\n {\n value: new RegExp(GRADLE_PLUGIN_REGEX, 'g'),\n matches: ['quote1', 'name', 'group', 'version', 'quote2'],\n },\n fileContents,\n );\n const targetGroups = findAllWithRegex(\n {\n value: new RegExp(GRADLE_IMPLEMENTATION_GROUP_REGEX, 'g'),\n matches: [\n 'space1',\n 'quote1',\n 'group',\n 'quote2',\n 'space2',\n 'space3',\n 'quote3',\n 'name',\n 'quote4',\n 'space4',\n 'space5',\n 'quote5',\n 'version',\n 'quote6',\n ],\n },\n fileContents,\n );\n const applications = findAllWithRegex(\n {\n value: new RegExp(GRADLE_APPLICATION_NAME_REGEX, 'g'),\n matches: ['space', 'name'],\n },\n fileContents,\n );\n if (applications.length > 1) {\n throw new Error(`Expected only one applicationId per file: ${filePath}`);\n }\n\n return [\n {\n name: applications[0]?.name || directory.split('/').pop()!,\n softwareDevelopmentKits: [...targets, ...targetGroups, ...targetPlugins].map((target) => ({\n name: target.name,\n version: target.version || undefined,\n })),\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { CodePackageSdk } from '../../../codecs.js';\nimport { CodeScanningConfig } from '../types.js';\n\nexport const javascriptPackageJson: CodeScanningConfig = {\n supportedFiles: ['package.json'],\n ignoreDirs: ['node_modules', 'serverless-build', 'lambda-build'],\n scanFunction: (filePath) => {\n const file = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const asJson = JSON.parse(file);\n const {\n name,\n description,\n dependencies = {},\n devDependencies = {},\n optionalDependencies = {},\n } = asJson;\n return [\n {\n // name of the package\n name: name || directory.split('/').pop()!,\n description,\n softwareDevelopmentKits: [\n ...Object.entries(dependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n }),\n ),\n ...Object.entries(devDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n isDevDependency: true,\n }),\n ),\n ...Object.entries(optionalDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n }),\n ),\n ],\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\n\nimport { CodePackageType } from '@transcend-io/privacy-types';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\n\nimport { listFiles } from '../../api-keys/index.js';\nimport { CodeScanningConfig } from '../types.js';\n\nconst REQUIREMENTS_PACKAGE_MATCH = /(.+?)(=+)(.+)/;\nconst PACKAGE_NAME = /name *= *('|\")(.+?)('|\")/;\nconst PACKAGE_DESCRIPTION = /description *= *('|\")(.+?)('|\")/;\n\nexport const pythonRequirementsTxt: CodeScanningConfig = {\n supportedFiles: ['requirements.txt'],\n ignoreDirs: ['build', 'lib', 'lib64'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const filesInFolder = listFiles(directory);\n\n // parse setup file for name\n const setupFile = filesInFolder.find((file) => file === 'setup.py');\n const setupFileContents = setupFile\n ? readFileSync(join(directory, setupFile), 'utf-8')\n : undefined;\n const packageName = setupFileContents\n ? (PACKAGE_NAME.exec(setupFileContents) || [])[2]\n : undefined;\n const packageDescription = setupFileContents\n ? (PACKAGE_DESCRIPTION.exec(setupFileContents) || [])[2]\n : undefined;\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(REQUIREMENTS_PACKAGE_MATCH, 'g'),\n matches: ['name', 'equals', 'version'],\n },\n fileContents,\n );\n\n return [\n {\n name: packageName || directory.split('/').pop()!,\n description: packageDescription || undefined,\n type: CodePackageType.RequirementsTxt,\n softwareDevelopmentKits: targets.map((pkg) => ({\n name: pkg.name,\n version: pkg.version,\n })),\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { CodePackageType } from '@transcend-io/privacy-types';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\n\nimport { listFiles } from '../../api-keys/index.js';\nimport { CodeScanningConfig } from '../types.js';\n\nconst GEM_PACKAGE_REGEX = /gem *('|\")(.+?)('|\")(, *('|\")(.+?)('|\")|)/;\nconst GEMFILE_PACKAGE_NAME_REGEX = /spec\\.name *= *('|\")(.+?)('|\")/;\nconst GEMFILE_PACKAGE_DESCRIPTION_REGEX = /spec\\.description *= *('|\")(.+?)('|\")/;\nconst GEMFILE_PACKAGE_SUMMARY_REGEX = /spec\\.summary *= *('|\")(.+?)('|\")/;\n\nexport const gemfile: CodeScanningConfig = {\n supportedFiles: ['Gemfile'],\n ignoreDirs: ['bin'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const filesInFolder = listFiles(directory);\n\n // parse gemspec file for name\n const gemspec = filesInFolder.find((file) => file === '.gemspec');\n const gemspecContents = gemspec ? readFileSync(gemspec, 'utf-8') : undefined;\n const gemfileName = gemspecContents\n ? (GEMFILE_PACKAGE_NAME_REGEX.exec(gemspecContents) || [])[2]\n : undefined;\n const gemfileDescription = gemspecContents\n ? (GEMFILE_PACKAGE_DESCRIPTION_REGEX.exec(gemspecContents) ||\n GEMFILE_PACKAGE_SUMMARY_REGEX.exec(gemspecContents) ||\n [])[1]\n : undefined;\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(GEM_PACKAGE_REGEX, 'g'),\n matches: ['quote1', 'name', 'quote2', 'hasVersion', 'quote3', 'version', 'quote4'],\n },\n fileContents,\n );\n\n return [\n {\n name: gemfileName || directory.split('/').pop()!,\n description: gemfileDescription || undefined,\n type: CodePackageType.RequirementsTxt,\n softwareDevelopmentKits: targets.map((pkg) => ({\n name: pkg.name,\n version: pkg.version,\n })),\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { CodePackageType } from '@transcend-io/privacy-types';\nimport yaml from 'js-yaml';\n\nimport { CodeScanningConfig } from '../types.js';\n\n/**\n * Remove YAML comments from a string\n *\n * @param yamlString - YAML string\n * @returns String without comments\n */\nfunction removeYAMLComments(yamlString: string): string {\n return yamlString\n .split('\\n')\n .map((line) => {\n // Remove inline comments\n const commentIndex = line.indexOf('#');\n if (commentIndex > -1) {\n // Check if '#' is not inside a string\n if (\n !line.substring(0, commentIndex).includes('\"') &&\n !line.substring(0, commentIndex).includes(\"'\")\n ) {\n return line.substring(0, commentIndex).trim();\n }\n }\n return line;\n })\n .filter((line) => line.length > 0)\n .join('\\n');\n}\n\nexport const pubspec: CodeScanningConfig = {\n supportedFiles: ['pubspec.yml'],\n ignoreDirs: ['build'],\n scanFunction: (filePath) => {\n const directory = dirname(filePath);\n const fileContents = readFileSync(filePath, 'utf-8');\n const {\n name,\n description,\n dev_dependencies = {},\n dependencies = {},\n } = yaml.load(removeYAMLComments(fileContents)) as {\n /** Name */\n name?: string;\n /** Description */\n description?: string;\n /** Dev dependencies */\n dev_dependencies?: { [k in string]: number | Record<string, string> };\n /** Dependencies */\n dependencies?: { [k in string]: number | Record<string, string> };\n };\n return [\n {\n name: name || directory.split('/').pop()!,\n description,\n type: CodePackageType.RequirementsTxt,\n softwareDevelopmentKits: [\n ...Object.entries(dependencies).map(([name, version]) => ({\n name,\n version:\n typeof version === 'string'\n ? version\n : typeof version === 'number'\n ? version.toString()\n : version?.sdk,\n })),\n ...Object.entries(dev_dependencies).map(([name, version]) => ({\n name,\n version:\n typeof version === 'string'\n ? version\n : typeof version === 'number'\n ? version.toString()\n : version?.sdk,\n isDevDependency: true,\n })),\n ],\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { CodePackageSdk } from '../../../codecs.js';\nimport { CodeScanningConfig } from '../types.js';\n\nexport const composerJson: CodeScanningConfig = {\n supportedFiles: ['composer.json'],\n ignoreDirs: ['vendor', 'node_modules', 'cache', 'build', 'dist'],\n scanFunction: (filePath) => {\n const file = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const asJson = JSON.parse(file);\n const {\n name,\n description,\n require: requireDependencies = {},\n 'require-dev': requiredDevDependencies = {},\n } = asJson;\n return [\n {\n // name of the package\n name: name || directory.split('/').pop()!,\n description,\n softwareDevelopmentKits: [\n ...Object.entries(requireDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n }),\n ),\n ...Object.entries(requiredDevDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n isDevDependency: true,\n }),\n ),\n ],\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { CodePackageType } from '@transcend-io/privacy-types';\nimport { decodeCodec } from '@transcend-io/type-utils';\nimport * as t from 'io-ts';\n\nimport { CodeScanningConfig } from '../types.js';\n\nconst SwiftPackage = t.type({\n pins: t.array(\n t.type({\n identity: t.string,\n kind: t.string,\n location: t.string,\n state: t.intersection([\n t.type({\n revision: t.string,\n }),\n t.partial({\n version: t.union([t.string, t.undefined, t.null]),\n }),\n ]),\n }),\n ),\n version: t.number,\n});\n\nconst SwiftPackageV1 = t.type({\n object: t.type({\n pins: t.array(\n t.type({\n package: t.string,\n repositoryURL: t.string,\n state: t.intersection([\n t.type({\n branch: t.union([t.string, t.undefined, t.null]),\n revision: t.string,\n }),\n t.partial({\n version: t.union([t.string, t.undefined, t.null]),\n }),\n ]),\n }),\n ),\n }),\n version: t.number,\n});\n\nexport const swift: CodeScanningConfig = {\n supportedFiles: ['Package.resolved'],\n ignoreDirs: [],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n\n // Attempt latest version first\n try {\n const parsed = decodeCodec(SwiftPackage, fileContents);\n const splitPath = dirname(filePath).split('/');\n const originalName = splitPath[splitPath.length - 1];\n let name = originalName;\n if (name === 'swiftpm') {\n name = splitPath[splitPath.length - 2];\n if (name === 'xcshareddata') {\n name = splitPath[splitPath.length - 3];\n } else if (!name) {\n name = originalName;\n }\n if (name === 'project.xcworkspace') {\n name = splitPath[splitPath.length - 4];\n }\n }\n return [\n {\n name,\n type: CodePackageType.Swift,\n softwareDevelopmentKits: parsed.pins.map((target) => ({\n name: target.identity,\n version: target.state.version || undefined,\n })),\n },\n ];\n } catch (e) {\n // Throw non codec errors\n if (!e?.message?.includes('Failed to decode codec')) {\n throw e;\n }\n\n // Attempt v1\n try {\n const parsed = decodeCodec(SwiftPackageV1, fileContents);\n return [\n {\n name: dirname(filePath).split('/').pop() || '', // TODO pull from Package.swift ->> name if possible\n type: CodePackageType.Swift,\n softwareDevelopmentKits: parsed.object.pins.map((target) => ({\n name: target.package,\n version: target.state.version || undefined,\n })),\n },\n ];\n } catch (e2) {\n if (!e2?.message?.includes('Failed to decode codec')) {\n throw e2;\n }\n throw e;\n }\n }\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { findAllWithRegex } from '@transcend-io/type-utils';\n\nimport { CodeScanningConfig } from '../types.js';\n\n/**\n * Kotlin DSL (build.gradle.kts) dependency & plugin parsing\n */\n\nconst KTS_DEP_CONFIGS =\n // eslint-disable-next-line max-len\n '(implementation|api|kapt|ksp|debugImplementation|releaseImplementation|androidTestImplementation|testImplementation|compileOnly|runtimeOnly)';\n\n// e.g. implementation(\"com.google.firebase:firebase-analytics:18.0.0\")\nconst KTS_DEP_STRING_COORDS_REGEX = new RegExp(\n `${KTS_DEP_CONFIGS}\\\\s*\\\\(\\\\s*[\"']([^\"':\\\\s]+):([^\"':\\\\s]+):?([^\"']*)[\"']\\\\s*\\\\)`,\n 'g',\n);\n// captures: [1]=config, [2]=group, [3]=artifact, [4]=version (may be '')\n\n// e.g. implementation(platform(\"com.google.firebase:firebase-bom:33.1.2\"))\nconst KTS_DEP_PLATFORM_REGEX = new RegExp(\n `${KTS_DEP_CONFIGS}\\\\s*\\\\(\\\\s*platform\\\\(\\\\s*[\"']([^\"':\\\\s]+):([^\"':\\\\s]+):?([^\"']*)[\"']\\\\s*\\\\)\\\\s*\\\\)`,\n 'g',\n);\n\n// e.g. implementation(libs.androidx.appcompat) / implementation(libs[\"androidx-core-ktx\"])\nconst KTS_DEP_LIBS_ALIAS_REGEX = new RegExp(\n `${KTS_DEP_CONFIGS}\\\\s*\\\\(\\\\s*libs(?:\\\\.[\\\\w\\\\-\\\\.]+|\\\\[[\"'][^\"']+[\"']\\\\])\\\\s*\\\\)`,\n 'g',\n);\n\n// Plugins:\n// plugins { id(\"com.google.gms.google-services\") version \"4.4.2\" apply false }\n// plugins { id(\"org.jetbrains.kotlin.android\") }\n// apply(plugin = \"newrelic\")\n// plugins { alias(libs.plugins.kotlin.android) }\nconst KTS_PLUGIN_ID_REGEX = /id\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)(?:\\s*version\\s*[\"']([^\"']+)[\"'])?/g;\nconst KTS_PLUGIN_APPLY_REGEX = /apply\\s*\\(\\s*plugin\\s*=\\s*[\"']([^\"']+)[\"']\\s*\\)/g;\nconst KTS_PLUGIN_ALIAS_REGEX =\n /plugins\\s*\\{[^}]*alias\\s*\\(\\s*libs(?:\\.plugins)?(?:\\.[\\w\\-.]+|\\[[\"'][^\"']+[\"']\\])\\s*\\)[^}]*\\}/g;\n\n// applicationId in Kotlin DSL:\n// applicationId = \"com.foo.bar\"\n// applicationId(\"com.foo.bar\")\nconst KTS_APPLICATION_ID_EQ_REGEX = /applicationId\\s*=\\s*[\"']([^\"']+)[\"']/g;\nconst KTS_APPLICATION_ID_CALL_REGEX = /applicationId\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g;\n\n/**\n * Input dep entry (partial)\n */\ntype DepInput = {\n /** Name of the dependency */\n name: string;\n /** Version of the dependency */\n version?: string;\n};\n\n/**\n * Helper to normalize a parsed dep entry\n *\n * @param name - name\n * @param version - version\n * @returns normalized entry\n */\nfunction depEntry(name: string, version?: string): DepInput {\n const v = version && version.trim().length > 0 && version !== '_' ? version.trim() : undefined;\n return { name, version: v };\n}\n\nexport const kotlin: CodeScanningConfig = {\n supportedFiles: ['**/build.gradle.kts', '**/*.gradle.kts'],\n ignoreDirs: ['gradle-app.setting', 'gradle-wrapper.jar', 'gradle-wrapper.properties'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n\n // ---------- applicationId ----------\n const appIds = [\n ...findAllWithRegex({ value: KTS_APPLICATION_ID_EQ_REGEX, matches: ['name'] }, fileContents),\n ...findAllWithRegex(\n { value: KTS_APPLICATION_ID_CALL_REGEX, matches: ['name'] },\n fileContents,\n ),\n ];\n if (appIds.length > 1) {\n throw new Error(`Expected only one applicationId per file: ${filePath}`);\n }\n const appName = appIds[0]?.name || directory.split('/').pop()!;\n\n // ---------- dependencies ----------\n const deps: Array<DepInput> = [];\n\n // \"group:artifact:version\"\n for (const m of fileContents.matchAll(KTS_DEP_STRING_COORDS_REGEX)) {\n const [, , group, artifact, version] = m;\n deps.push(depEntry(`${group}:${artifact}`, version));\n }\n\n // platform(\"group:artifact:version\")\n for (const m of fileContents.matchAll(KTS_DEP_PLATFORM_REGEX)) {\n const [, , group, artifact, version] = m;\n // Record as regular coord (you may prefer to tag as BoM separately)\n deps.push(depEntry(`${group}:${artifact}`, version));\n }\n\n // libs aliases (version catalogs) — keep alias as name, unknown version\n for (const m of fileContents.matchAll(KTS_DEP_LIBS_ALIAS_REGEX)) {\n // Grab the exact token as name (best-effort)\n const token = m[0]\n .replace(/^[^(]+\\(\\s*/, '')\n .replace(/\\)\\s*$/, '')\n .trim(); // e.g., libs.androidx.appcompat or libs[\"androidx-core-ktx\"]\n deps.push(depEntry(token));\n }\n\n // ---------- plugins ----------\n const plugins: Array<DepInput> = [];\n\n for (const m of fileContents.matchAll(KTS_PLUGIN_ID_REGEX)) {\n const [, pid, pver] = m;\n plugins.push(depEntry(pid, pver));\n }\n\n for (const m of fileContents.matchAll(KTS_PLUGIN_APPLY_REGEX)) {\n const [, pid] = m;\n plugins.push(depEntry(pid));\n }\n\n // alias(libs.plugins...) — keep alias token (no version)\n if (KTS_PLUGIN_ALIAS_REGEX.test(fileContents)) {\n // Collect all alias lines to preserve identifiers; light parse:\n const aliasMatches = fileContents.matchAll(\n /alias\\s*\\(\\s*(libs(?:\\.plugins)?(?:\\.[\\w\\-.]+|\\[[\"'][^\"']+[\"']\\]))\\s*\\)/g,\n );\n for (const m of aliasMatches) {\n plugins.push(depEntry(m[1]));\n }\n }\n\n // ---------- compose final list ----------\n // Merge deps + plugins as \"softwareDevelopmentKits\"\n const softwareDevelopmentKits = [...deps, ...plugins]\n // de-dup by name+version\n .reduce(\n (acc, cur) => {\n const key = `${cur.name}@@${cur.version || ''}`;\n if (!acc.map.has(key)) {\n acc.map.set(key, cur);\n acc.list.push(cur);\n }\n return acc;\n },\n {\n map: new Map<string, DepInput>(),\n list: [] as Array<DepInput>,\n },\n ).list;\n\n return [\n {\n name: appName,\n softwareDevelopmentKits,\n },\n ];\n },\n};\n","import { CodePackageType } from '@transcend-io/privacy-types';\n\nimport {\n cocoaPods,\n gradle,\n javascriptPackageJson,\n gemfile,\n composerJson,\n pubspec,\n swift,\n kotlin,\n pythonRequirementsTxt,\n} from './integrations/index.js';\nimport { CodeScanningConfig } from './types.js';\n\n/**\n * @deprecated TODO: https://transcend.height.app/T-32325 - use code scanning instead\n */\nexport const SILO_DISCOVERY_CONFIGS: {\n [k in string]: CodeScanningConfig;\n} = {\n cocoaPods,\n gradle,\n javascriptPackageJson,\n pythonRequirementsTxt,\n gemfile,\n pubspec,\n swift,\n};\n\nexport const CODE_SCANNING_CONFIGS: {\n [k in CodePackageType]: CodeScanningConfig;\n} = {\n [CodePackageType.CocoaPods]: cocoaPods,\n [CodePackageType.Gradle]: gradle,\n [CodePackageType.PackageJson]: javascriptPackageJson,\n [CodePackageType.RequirementsTxt]: pythonRequirementsTxt,\n [CodePackageType.Gemfile]: gemfile,\n [CodePackageType.Pubspec]: pubspec,\n [CodePackageType.ComposerJson]: composerJson,\n [CodePackageType.Swift]: swift,\n [CodePackageType.Kotlin]: kotlin,\n};\n"],"mappings":"4TAQA,MAAM,EAAmB,yBACnB,EAAoB,6CAEb,EAAgC,CAC3C,eAAgB,CAAC,UAAU,CAC3B,WAAY,CAAC,OAAQ,QAAQ,CAC7B,aAAe,GAAa,CAC1B,IAAM,EAAe,EAAa,EAAU,QAAQ,CAE9C,EAAU,EACd,CACE,MAAO,IAAI,OAAO,EAAkB,IAAI,CACxC,QAAS,CAAC,SAAU,OAAQ,SAAS,CACtC,CACD,EACD,CACK,EAAW,EACf,CACE,MAAO,IAAI,OAAO,EAAmB,IAAI,CACzC,QAAS,CAAC,SAAU,OAAQ,SAAU,QAAS,SAAU,UAAW,SAAS,CAC9E,CACD,EACD,CAiBD,OAf+B,EAAQ,KAAK,EAAQ,KAAS,CAC3D,KAAM,EAAO,KACb,KAAM,EAAgB,UACtB,wBAAyB,EACtB,OACE,GACC,EAAI,WAAa,EAAO,aACvB,CAAC,EAAQ,EAAM,IAAM,EAAI,WAAa,EAAQ,EAAM,GAAG,YAC3D,CACA,IAAK,IAAS,CACb,KAAM,EAAI,KACV,QAAS,EAAI,QACd,EAAE,CACN,EAEU,EAEd,CC1CK,EAA8B,iDAC9B,EAAsB,0CACtB,EACJ,wGACI,EAAgC,2BAYzB,EAA6B,CACxC,eAAgB,CAAC,iBAAiB,CAClC,WAAY,CAAC,qBAAsB,qBAAsB,4BAA4B,CACrF,aAAe,GAAa,CAC1B,IAAM,EAAe,EAAa,EAAU,QAAQ,CAC9C,EAAY,EAAQ,EAAS,CAE7B,EAAU,EACd,CACE,MAAO,IAAI,OAAO,EAA6B,IAAI,CACnD,QAAS,CAAC,QAAS,SAAU,OAAQ,OAAQ,UAAW,SAAS,CAClE,CACD,EACD,CACK,EAAgB,EACpB,CACE,MAAO,IAAI,OAAO,EAAqB,IAAI,CAC3C,QAAS,CAAC,SAAU,OAAQ,QAAS,UAAW,SAAS,CAC1D,CACD,EACD,CACK,EAAe,EACnB,CACE,MAAO,IAAI,OAAO,EAAmC,IAAI,CACzD,QAAS,CACP,SACA,SACA,QACA,SACA,SACA,SACA,SACA,OACA,SACA,SACA,SACA,SACA,UACA,SACD,CACF,CACD,EACD,CACK,EAAe,EACnB,CACE,MAAO,IAAI,OAAO,EAA+B,IAAI,CACrD,QAAS,CAAC,QAAS,OAAO,CAC3B,CACD,EACD,CACD,GAAI,EAAa,OAAS,EACxB,MAAU,MAAM,6CAA6C,IAAW,CAG1E,MAAO,CACL,CACE,KAAM,EAAa,IAAI,MAAQ,EAAU,MAAM,IAAI,CAAC,KAAK,CACzD,wBAAyB,CAAC,GAAG,EAAS,GAAG,EAAc,GAAG,EAAc,CAAC,IAAK,IAAY,CACxF,KAAM,EAAO,KACb,QAAS,EAAO,SAAW,IAAA,GAC5B,EAAE,CACJ,CACF,EAEJ,CCjFY,EAA4C,CACvD,eAAgB,CAAC,eAAe,CAChC,WAAY,CAAC,eAAgB,mBAAoB,eAAe,CAChE,aAAe,GAAa,CAC1B,IAAM,EAAO,EAAa,EAAU,QAAQ,CACtC,EAAY,EAAQ,EAAS,CAE7B,CACJ,OACA,cACA,eAAe,EAAE,CACjB,kBAAkB,EAAE,CACpB,uBAAuB,EAAE,EANZ,KAAK,MAAM,EAOhB,CACV,MAAO,CACL,CAEE,KAAM,GAAQ,EAAU,MAAM,IAAI,CAAC,KAAK,CACxC,cACA,wBAAyB,CACvB,GAAG,OAAO,QAAQ,EAAa,CAAC,KAC7B,CAAC,EAAM,MAA8B,CACpC,OACA,QAAS,OAAO,GAAY,SAAW,EAAU,IAAA,GAClD,EACF,CACD,GAAG,OAAO,QAAQ,EAAgB,CAAC,KAChC,CAAC,EAAM,MAA8B,CACpC,OACA,QAAS,OAAO,GAAY,SAAW,EAAU,IAAA,GACjD,gBAAiB,GAClB,EACF,CACD,GAAG,OAAO,QAAQ,EAAqB,CAAC,KACrC,CAAC,EAAM,MAA8B,CACpC,OACA,QAAS,OAAO,GAAY,SAAW,EAAU,IAAA,GAClD,EACF,CACF,CACF,CACF,EAEJ,CCxCK,EAA6B,gBAC7B,EAAe,2BACf,EAAsB,kCAEf,EAA4C,CACvD,eAAgB,CAAC,mBAAmB,CACpC,WAAY,CAAC,QAAS,MAAO,QAAQ,CACrC,aAAe,GAAa,CAC1B,IAAM,EAAe,EAAa,EAAU,QAAQ,CAC9C,EAAY,EAAQ,EAAS,CAI7B,EAHgB,EAAU,EAGD,CAAC,KAAM,GAAS,IAAS,WAAW,CAC7D,EAAoB,EACtB,EAAa,EAAK,EAAW,EAAU,CAAE,QAAQ,CACjD,IAAA,GACE,EAAc,GACf,EAAa,KAAK,EAAkB,EAAI,EAAE,EAAE,GAC7C,IAAA,GACE,EAAqB,GACtB,EAAoB,KAAK,EAAkB,EAAI,EAAE,EAAE,GACpD,IAAA,GAEE,EAAU,EACd,CACE,MAAO,IAAI,OAAO,EAA4B,IAAI,CAClD,QAAS,CAAC,OAAQ,SAAU,UAAU,CACvC,CACD,EACD,CAED,MAAO,CACL,CACE,KAAM,GAAe,EAAU,MAAM,IAAI,CAAC,KAAK,CAC/C,YAAa,GAAsB,IAAA,GACnC,KAAM,EAAgB,gBACtB,wBAAyB,EAAQ,IAAK,IAAS,CAC7C,KAAM,EAAI,KACV,QAAS,EAAI,QACd,EAAE,CACJ,CACF,EAEJ,CC5CK,EAAoB,4CACpB,EAA6B,iCAC7B,EAAoC,wCACpC,EAAgC,oCAEzB,EAA8B,CACzC,eAAgB,CAAC,UAAU,CAC3B,WAAY,CAAC,MAAM,CACnB,aAAe,GAAa,CAC1B,IAAM,EAAe,EAAa,EAAU,QAAQ,CAC9C,EAAY,EAAQ,EAAS,CAI7B,EAHgB,EAAU,EAGH,CAAC,KAAM,GAAS,IAAS,WAAW,CAC3D,EAAkB,EAAU,EAAa,EAAS,QAAQ,CAAG,IAAA,GAC7D,EAAc,GACf,EAA2B,KAAK,EAAgB,EAAI,EAAE,EAAE,GACzD,IAAA,GACE,EAAqB,GACtB,EAAkC,KAAK,EAAgB,EACtD,EAA8B,KAAK,EAAgB,EACnD,EAAE,EAAE,GACN,IAAA,GAEE,EAAU,EACd,CACE,MAAO,IAAI,OAAO,EAAmB,IAAI,CACzC,QAAS,CAAC,SAAU,OAAQ,SAAU,aAAc,SAAU,UAAW,SAAS,CACnF,CACD,EACD,CAED,MAAO,CACL,CACE,KAAM,GAAe,EAAU,MAAM,IAAI,CAAC,KAAK,CAC/C,YAAa,GAAsB,IAAA,GACnC,KAAM,EAAgB,gBACtB,wBAAyB,EAAQ,IAAK,IAAS,CAC7C,KAAM,EAAI,KACV,QAAS,EAAI,QACd,EAAE,CACJ,CACF,EAEJ,CCxCD,SAAS,EAAmB,EAA4B,CACtD,OAAO,EACJ,MAAM;EAAK,CACX,IAAK,GAAS,CAEb,IAAM,EAAe,EAAK,QAAQ,IAAI,CAUtC,OATI,EAAe,IAGf,CAAC,EAAK,UAAU,EAAG,EAAa,CAAC,SAAS,IAAI,EAC9C,CAAC,EAAK,UAAU,EAAG,EAAa,CAAC,SAAS,IAAI,CAEvC,EAAK,UAAU,EAAG,EAAa,CAAC,MAAM,CAG1C,GACP,CACD,OAAQ,GAAS,EAAK,OAAS,EAAE,CACjC,KAAK;EAAK,CAGf,MAAa,EAA8B,CACzC,eAAgB,CAAC,cAAc,CAC/B,WAAY,CAAC,QAAQ,CACrB,aAAe,GAAa,CAC1B,IAAM,EAAY,EAAQ,EAAS,CAC7B,EAAe,EAAa,EAAU,QAAQ,CAC9C,CACJ,OACA,cACA,mBAAmB,EAAE,CACrB,eAAe,EAAE,EACf,EAAK,KAAK,EAAmB,EAAa,CAAC,CAU/C,MAAO,CACL,CACE,KAAM,GAAQ,EAAU,MAAM,IAAI,CAAC,KAAK,CACxC,cACA,KAAM,EAAgB,gBACtB,wBAAyB,CACvB,GAAG,OAAO,QAAQ,EAAa,CAAC,KAAK,CAAC,EAAM,MAAc,CACxD,OACA,QACE,OAAO,GAAY,SACf,EACA,OAAO,GAAY,SACjB,EAAQ,UAAU,CAClB,GAAS,IAClB,EAAE,CACH,GAAG,OAAO,QAAQ,EAAiB,CAAC,KAAK,CAAC,EAAM,MAAc,CAC5D,OACA,QACE,OAAO,GAAY,SACf,EACA,OAAO,GAAY,SACjB,EAAQ,UAAU,CAClB,GAAS,IACjB,gBAAiB,GAClB,EAAE,CACJ,CACF,CACF,EAEJ,CC/EY,EAAmC,CAC9C,eAAgB,CAAC,gBAAgB,CACjC,WAAY,CAAC,SAAU,eAAgB,QAAS,QAAS,OAAO,CAChE,aAAe,GAAa,CAC1B,IAAM,EAAO,EAAa,EAAU,QAAQ,CACtC,EAAY,EAAQ,EAAS,CAE7B,CACJ,OACA,cACA,QAAS,EAAsB,EAAE,CACjC,cAAe,EAA0B,EAAE,EAL9B,KAAK,MAAM,EAMhB,CACV,MAAO,CACL,CAEE,KAAM,GAAQ,EAAU,MAAM,IAAI,CAAC,KAAK,CACxC,cACA,wBAAyB,CACvB,GAAG,OAAO,QAAQ,EAAoB,CAAC,KACpC,CAAC,EAAM,MAA8B,CACpC,OACA,QAAS,OAAO,GAAY,SAAW,EAAU,IAAA,GAClD,EACF,CACD,GAAG,OAAO,QAAQ,EAAwB,CAAC,KACxC,CAAC,EAAM,MAA8B,CACpC,OACA,QAAS,OAAO,GAAY,SAAW,EAAU,IAAA,GACjD,gBAAiB,GAClB,EACF,CACF,CACF,CACF,EAEJ,CCjCK,EAAe,EAAE,KAAK,CAC1B,KAAM,EAAE,MACN,EAAE,KAAK,CACL,SAAU,EAAE,OACZ,KAAM,EAAE,OACR,SAAU,EAAE,OACZ,MAAO,EAAE,aAAa,CACpB,EAAE,KAAK,CACL,SAAU,EAAE,OACb,CAAC,CACF,EAAE,QAAQ,CACR,QAAS,EAAE,MAAM,CAAC,EAAE,OAAQ,EAAE,UAAW,EAAE,KAAK,CAAC,CAClD,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACD,QAAS,EAAE,OACZ,CAAC,CAEI,EAAiB,EAAE,KAAK,CAC5B,OAAQ,EAAE,KAAK,CACb,KAAM,EAAE,MACN,EAAE,KAAK,CACL,QAAS,EAAE,OACX,cAAe,EAAE,OACjB,MAAO,EAAE,aAAa,CACpB,EAAE,KAAK,CACL,OAAQ,EAAE,MAAM,CAAC,EAAE,OAAQ,EAAE,UAAW,EAAE,KAAK,CAAC,CAChD,SAAU,EAAE,OACb,CAAC,CACF,EAAE,QAAQ,CACR,QAAS,EAAE,MAAM,CAAC,EAAE,OAAQ,EAAE,UAAW,EAAE,KAAK,CAAC,CAClD,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACF,QAAS,EAAE,OACZ,CAAC,CAEW,EAA4B,CACvC,eAAgB,CAAC,mBAAmB,CACpC,WAAY,EAAE,CACd,aAAe,GAAa,CAC1B,IAAM,EAAe,EAAa,EAAU,QAAQ,CAGpD,GAAI,CACF,IAAM,EAAS,EAAY,EAAc,EAAa,CAChD,EAAY,EAAQ,EAAS,CAAC,MAAM,IAAI,CACxC,EAAe,EAAU,EAAU,OAAS,GAC9C,EAAO,EAYX,OAXI,IAAS,YACX,EAAO,EAAU,EAAU,OAAS,GAChC,IAAS,eACX,EAAO,EAAU,EAAU,OAAS,GAEpC,IAAO,EAEL,IAAS,wBACX,EAAO,EAAU,EAAU,OAAS,KAGjC,CACL,CACE,OACA,KAAM,EAAgB,MACtB,wBAAyB,EAAO,KAAK,IAAK,IAAY,CACpD,KAAM,EAAO,SACb,QAAS,EAAO,MAAM,SAAW,IAAA,GAClC,EAAE,CACJ,CACF,OACM,EAAG,CAEV,GAAI,CAAC,GAAG,SAAS,SAAS,yBAAyB,CACjD,MAAM,EAIR,GAAI,CACF,IAAM,EAAS,EAAY,EAAgB,EAAa,CACxD,MAAO,CACL,CACE,KAAM,EAAQ,EAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAI,GAC5C,KAAM,EAAgB,MACtB,wBAAyB,EAAO,OAAO,KAAK,IAAK,IAAY,CAC3D,KAAM,EAAO,QACb,QAAS,EAAO,MAAM,SAAW,IAAA,GAClC,EAAE,CACJ,CACF,OACM,EAAI,CAIX,MAHK,GAAI,SAAS,SAAS,yBAAyB,CAG9C,EAFE,KAMf,CClGK,EAEJ,+IAGI,EAAkC,OACtC,GAAG,EAAgB,+DACnB,IACD,CAIK,EAA6B,OACjC,GAAG,EAAgB,qFACnB,IACD,CAGK,EAA+B,OACnC,GAAG,EAAgB,gEACnB,IACD,CAOK,EAAsB,qEACtB,EAAyB,mDACzB,EACJ,iGAKI,EAA8B,wCAC9B,EAAgC,8CAmBtC,SAAS,EAAS,EAAc,EAA4B,CAE1D,MAAO,CAAE,OAAM,QADL,GAAW,EAAQ,MAAM,CAAC,OAAS,GAAK,IAAY,IAAM,EAAQ,MAAM,CAAG,IAAA,GAC1D,CAG7B,MAAa,EAA6B,CACxC,eAAgB,CAAC,sBAAuB,kBAAkB,CAC1D,WAAY,CAAC,qBAAsB,qBAAsB,4BAA4B,CACrF,aAAe,GAAa,CAC1B,IAAM,EAAe,EAAa,EAAU,QAAQ,CAC9C,EAAY,EAAQ,EAAS,CAG7B,EAAS,CACb,GAAG,EAAiB,CAAE,MAAO,EAA6B,QAAS,CAAC,OAAO,CAAE,CAAE,EAAa,CAC5F,GAAG,EACD,CAAE,MAAO,EAA+B,QAAS,CAAC,OAAO,CAAE,CAC3D,EACD,CACF,CACD,GAAI,EAAO,OAAS,EAClB,MAAU,MAAM,6CAA6C,IAAW,CAE1E,IAAM,EAAU,EAAO,IAAI,MAAQ,EAAU,MAAM,IAAI,CAAC,KAAK,CAGvD,EAAwB,EAAE,CAGhC,IAAK,IAAM,KAAK,EAAa,SAAS,EAA4B,CAAE,CAClE,GAAM,GAAK,EAAO,EAAU,GAAW,EACvC,EAAK,KAAK,EAAS,GAAG,EAAM,GAAG,IAAY,EAAQ,CAAC,CAItD,IAAK,IAAM,KAAK,EAAa,SAAS,EAAuB,CAAE,CAC7D,GAAM,GAAK,EAAO,EAAU,GAAW,EAEvC,EAAK,KAAK,EAAS,GAAG,EAAM,GAAG,IAAY,EAAQ,CAAC,CAItD,IAAK,IAAM,KAAK,EAAa,SAAS,EAAyB,CAAE,CAE/D,IAAM,EAAQ,EAAE,GACb,QAAQ,cAAe,GAAG,CAC1B,QAAQ,SAAU,GAAG,CACrB,MAAM,CACT,EAAK,KAAK,EAAS,EAAM,CAAC,CAI5B,IAAM,EAA2B,EAAE,CAEnC,IAAK,IAAM,KAAK,EAAa,SAAS,EAAoB,CAAE,CAC1D,GAAM,EAAG,EAAK,GAAQ,EACtB,EAAQ,KAAK,EAAS,EAAK,EAAK,CAAC,CAGnC,IAAK,IAAM,KAAK,EAAa,SAAS,EAAuB,CAAE,CAC7D,GAAM,EAAG,GAAO,EAChB,EAAQ,KAAK,EAAS,EAAI,CAAC,CAI7B,GAAI,EAAuB,KAAK,EAAa,CAAE,CAE7C,IAAM,EAAe,EAAa,SAChC,2EACD,CACD,IAAK,IAAM,KAAK,EACd,EAAQ,KAAK,EAAS,EAAE,GAAG,CAAC,CAuBhC,MAAO,CACL,CACE,KAAM,EACN,wBApB4B,CAAC,GAAG,EAAM,GAAG,EAAQ,CAElD,QACE,EAAK,IAAQ,CACZ,IAAM,EAAM,GAAG,EAAI,KAAK,IAAI,EAAI,SAAW,KAK3C,OAJK,EAAI,IAAI,IAAI,EAAI,GACnB,EAAI,IAAI,IAAI,EAAK,EAAI,CACrB,EAAI,KAAK,KAAK,EAAI,EAEb,GAET,CACE,IAAK,IAAI,IACT,KAAM,EAAE,CACT,CACF,CAAC,KAMD,CACF,EAEJ,CCtJY,EAET,CACF,YACA,SACA,wBACA,wBACA,UACA,UACA,QACD,CAEY,EAET,EACD,EAAgB,WAAY,GAC5B,EAAgB,QAAS,GACzB,EAAgB,aAAc,GAC9B,EAAgB,iBAAkB,GAClC,EAAgB,SAAU,GAC1B,EAAgB,SAAU,GAC1B,EAAgB,cAAe,GAC/B,EAAgB,OAAQ,GACxB,EAAgB,QAAS,EAC3B"}
1
+ {"version":3,"file":"constants-DC_bBO09.mjs","names":[],"sources":["../src/lib/code-scanning/integrations/cocoaPods.ts","../src/lib/code-scanning/integrations/gradle.ts","../src/lib/code-scanning/integrations/javascriptPackageJson.ts","../src/lib/code-scanning/integrations/pythonRequirementsTxt.ts","../src/lib/code-scanning/integrations/gemfile.ts","../src/lib/code-scanning/integrations/pubspec.ts","../src/lib/code-scanning/integrations/composerJson.ts","../src/lib/code-scanning/integrations/swift.ts","../src/lib/code-scanning/integrations/kotlin.ts","../src/lib/code-scanning/constants.ts"],"sourcesContent":["import { readFileSync } from 'node:fs';\n\nimport { CodePackageType } from '@transcend-io/privacy-types';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\n\nimport { CodePackageSdk } from '../../../codecs.js';\nimport { CodeScanningConfig } from '../types.js';\n\nconst POD_TARGET_REGEX = /target ('|\")(.*?)('|\")/;\nconst POD_PACKAGE_REGEX = /pod ('|\")(.*?)('|\")(, ('|\")~> (.+?)('|\")|)/;\n\nexport const cocoaPods: CodeScanningConfig = {\n supportedFiles: ['Podfile'],\n ignoreDirs: ['Pods', 'Build'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(POD_TARGET_REGEX, 'g'),\n matches: ['quote1', 'name', 'quote2'],\n },\n fileContents,\n );\n const packages = findAllWithRegex(\n {\n value: new RegExp(POD_PACKAGE_REGEX, 'g'),\n matches: ['quote1', 'name', 'quote2', 'extra', 'quote3', 'version', 'quote4'],\n },\n fileContents,\n );\n\n const deps: CodePackageSdk[] = targets.map((target, ind) => ({\n name: target.name,\n type: CodePackageType.CocoaPods,\n softwareDevelopmentKits: packages\n .filter(\n (pkg) =>\n pkg.matchIndex > target.matchIndex &&\n (!targets[ind + 1] || pkg.matchIndex < targets[ind + 1].matchIndex),\n )\n .map((pkg) => ({\n name: pkg.name,\n version: pkg.version,\n })),\n }));\n\n return deps;\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { findAllWithRegex } from '@transcend-io/type-utils';\n\nimport { CodeScanningConfig } from '../types.js';\n\nconst GRADLE_IMPLEMENTATION_REGEX = /implementation( *)('|\")(.+?):(.+?):(.+?|)('|\")/;\nconst GRADLE_PLUGIN_REGEX = /apply plugin: *('|\")(.+?)(:(.+?)|)('|\")/;\nconst GRADLE_IMPLEMENTATION_GROUP_REGEX =\n /implementation group:( *)('|\")(.+?)('|\"),( *)name:( *)('|\")(.+?)('|\"),( *)version:( *)('|\")(.+?)('|\")/;\nconst GRADLE_APPLICATION_NAME_REGEX = /applicationId( *)\"(.+?)\"/;\n\n/**\n * So far, there are three ways of defining dependencies that is supported\n * implementation group: 'org.eclipse.jdt', name: 'org.eclipse.jdt.core', version: '3.28.0'\n * or\n * implementation 'com.google.firebase:firebase-analytics:18.0.0'\n * or\n * apply plugin: 'com.google.gms.google-services'\n *\n * single and double quotes are both recognized\n */\nexport const gradle: CodeScanningConfig = {\n supportedFiles: ['build.gradle**'],\n ignoreDirs: ['gradle-app.setting', 'gradle-wrapper.jar', 'gradle-wrapper.properties'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(GRADLE_IMPLEMENTATION_REGEX, 'g'),\n matches: ['space', 'quote1', 'name', 'path', 'version', 'quote2'],\n },\n fileContents,\n );\n const targetPlugins = findAllWithRegex(\n {\n value: new RegExp(GRADLE_PLUGIN_REGEX, 'g'),\n matches: ['quote1', 'name', 'group', 'version', 'quote2'],\n },\n fileContents,\n );\n const targetGroups = findAllWithRegex(\n {\n value: new RegExp(GRADLE_IMPLEMENTATION_GROUP_REGEX, 'g'),\n matches: [\n 'space1',\n 'quote1',\n 'group',\n 'quote2',\n 'space2',\n 'space3',\n 'quote3',\n 'name',\n 'quote4',\n 'space4',\n 'space5',\n 'quote5',\n 'version',\n 'quote6',\n ],\n },\n fileContents,\n );\n const applications = findAllWithRegex(\n {\n value: new RegExp(GRADLE_APPLICATION_NAME_REGEX, 'g'),\n matches: ['space', 'name'],\n },\n fileContents,\n );\n if (applications.length > 1) {\n throw new Error(`Expected only one applicationId per file: ${filePath}`);\n }\n\n return [\n {\n name: applications[0]?.name || directory.split('/').pop()!,\n softwareDevelopmentKits: [...targets, ...targetGroups, ...targetPlugins].map((target) => ({\n name: target.name,\n version: target.version || undefined,\n })),\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { CodePackageSdk } from '../../../codecs.js';\nimport { CodeScanningConfig } from '../types.js';\n\nexport const javascriptPackageJson: CodeScanningConfig = {\n supportedFiles: ['package.json'],\n ignoreDirs: ['node_modules', 'serverless-build', 'lambda-build'],\n scanFunction: (filePath) => {\n const file = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const asJson = JSON.parse(file);\n const {\n name,\n description,\n dependencies = {},\n devDependencies = {},\n optionalDependencies = {},\n } = asJson;\n return [\n {\n // name of the package\n name: name || directory.split('/').pop()!,\n description,\n softwareDevelopmentKits: [\n ...Object.entries(dependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n }),\n ),\n ...Object.entries(devDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n isDevDependency: true,\n }),\n ),\n ...Object.entries(optionalDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n }),\n ),\n ],\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\n\nimport { CodePackageType } from '@transcend-io/privacy-types';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\n\nimport { listFiles } from '../../api-keys/index.js';\nimport { CodeScanningConfig } from '../types.js';\n\nconst REQUIREMENTS_PACKAGE_MATCH = /(.+?)(=+)(.+)/;\nconst PACKAGE_NAME = /name *= *('|\")(.+?)('|\")/;\nconst PACKAGE_DESCRIPTION = /description *= *('|\")(.+?)('|\")/;\n\nexport const pythonRequirementsTxt: CodeScanningConfig = {\n supportedFiles: ['requirements.txt'],\n ignoreDirs: ['build', 'lib', 'lib64'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const filesInFolder = listFiles(directory);\n\n // parse setup file for name\n const setupFile = filesInFolder.find((file) => file === 'setup.py');\n const setupFileContents = setupFile\n ? readFileSync(join(directory, setupFile), 'utf-8')\n : undefined;\n const packageName = setupFileContents\n ? (PACKAGE_NAME.exec(setupFileContents) || [])[2]\n : undefined;\n const packageDescription = setupFileContents\n ? (PACKAGE_DESCRIPTION.exec(setupFileContents) || [])[2]\n : undefined;\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(REQUIREMENTS_PACKAGE_MATCH, 'g'),\n matches: ['name', 'equals', 'version'],\n },\n fileContents,\n );\n\n return [\n {\n name: packageName || directory.split('/').pop()!,\n description: packageDescription || undefined,\n type: CodePackageType.RequirementsTxt,\n softwareDevelopmentKits: targets.map((pkg) => ({\n name: pkg.name,\n version: pkg.version,\n })),\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { CodePackageType } from '@transcend-io/privacy-types';\nimport { findAllWithRegex } from '@transcend-io/type-utils';\n\nimport { listFiles } from '../../api-keys/index.js';\nimport { CodeScanningConfig } from '../types.js';\n\nconst GEM_PACKAGE_REGEX = /gem *('|\")(.+?)('|\")(, *('|\")(.+?)('|\")|)/;\nconst GEMFILE_PACKAGE_NAME_REGEX = /spec\\.name *= *('|\")(.+?)('|\")/;\nconst GEMFILE_PACKAGE_DESCRIPTION_REGEX = /spec\\.description *= *('|\")(.+?)('|\")/;\nconst GEMFILE_PACKAGE_SUMMARY_REGEX = /spec\\.summary *= *('|\")(.+?)('|\")/;\n\nexport const gemfile: CodeScanningConfig = {\n supportedFiles: ['Gemfile'],\n ignoreDirs: ['bin'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const filesInFolder = listFiles(directory);\n\n // parse gemspec file for name\n const gemspec = filesInFolder.find((file) => file === '.gemspec');\n const gemspecContents = gemspec ? readFileSync(gemspec, 'utf-8') : undefined;\n const gemfileName = gemspecContents\n ? (GEMFILE_PACKAGE_NAME_REGEX.exec(gemspecContents) || [])[2]\n : undefined;\n const gemfileDescription = gemspecContents\n ? (GEMFILE_PACKAGE_DESCRIPTION_REGEX.exec(gemspecContents) ||\n GEMFILE_PACKAGE_SUMMARY_REGEX.exec(gemspecContents) ||\n [])[1]\n : undefined;\n\n const targets = findAllWithRegex(\n {\n value: new RegExp(GEM_PACKAGE_REGEX, 'g'),\n matches: ['quote1', 'name', 'quote2', 'hasVersion', 'quote3', 'version', 'quote4'],\n },\n fileContents,\n );\n\n return [\n {\n name: gemfileName || directory.split('/').pop()!,\n description: gemfileDescription || undefined,\n type: CodePackageType.RequirementsTxt,\n softwareDevelopmentKits: targets.map((pkg) => ({\n name: pkg.name,\n version: pkg.version,\n })),\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { CodePackageType } from '@transcend-io/privacy-types';\nimport yaml from 'js-yaml';\n\nimport { CodeScanningConfig } from '../types.js';\n\n/**\n * Remove YAML comments from a string\n *\n * @param yamlString - YAML string\n * @returns String without comments\n */\nfunction removeYAMLComments(yamlString: string): string {\n return yamlString\n .split('\\n')\n .map((line) => {\n // Remove inline comments\n const commentIndex = line.indexOf('#');\n if (commentIndex > -1) {\n // Check if '#' is not inside a string\n if (\n !line.substring(0, commentIndex).includes('\"') &&\n !line.substring(0, commentIndex).includes(\"'\")\n ) {\n return line.substring(0, commentIndex).trim();\n }\n }\n return line;\n })\n .filter((line) => line.length > 0)\n .join('\\n');\n}\n\nexport const pubspec: CodeScanningConfig = {\n supportedFiles: ['pubspec.yml'],\n ignoreDirs: ['build'],\n scanFunction: (filePath) => {\n const directory = dirname(filePath);\n const fileContents = readFileSync(filePath, 'utf-8');\n const {\n name,\n description,\n dev_dependencies = {},\n dependencies = {},\n } = yaml.load(removeYAMLComments(fileContents)) as {\n /** Name */\n name?: string;\n /** Description */\n description?: string;\n /** Dev dependencies */\n dev_dependencies?: { [k in string]: number | Record<string, string> };\n /** Dependencies */\n dependencies?: { [k in string]: number | Record<string, string> };\n };\n return [\n {\n name: name || directory.split('/').pop()!,\n description,\n type: CodePackageType.RequirementsTxt,\n softwareDevelopmentKits: [\n ...Object.entries(dependencies).map(([name, version]) => ({\n name,\n version:\n typeof version === 'string'\n ? version\n : typeof version === 'number'\n ? version.toString()\n : version?.sdk,\n })),\n ...Object.entries(dev_dependencies).map(([name, version]) => ({\n name,\n version:\n typeof version === 'string'\n ? version\n : typeof version === 'number'\n ? version.toString()\n : version?.sdk,\n isDevDependency: true,\n })),\n ],\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { CodePackageSdk } from '../../../codecs.js';\nimport { CodeScanningConfig } from '../types.js';\n\nexport const composerJson: CodeScanningConfig = {\n supportedFiles: ['composer.json'],\n ignoreDirs: ['vendor', 'node_modules', 'cache', 'build', 'dist'],\n scanFunction: (filePath) => {\n const file = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n const asJson = JSON.parse(file);\n const {\n name,\n description,\n require: requireDependencies = {},\n 'require-dev': requiredDevDependencies = {},\n } = asJson;\n return [\n {\n // name of the package\n name: name || directory.split('/').pop()!,\n description,\n softwareDevelopmentKits: [\n ...Object.entries(requireDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n }),\n ),\n ...Object.entries(requiredDevDependencies).map(\n ([name, version]): CodePackageSdk => ({\n name,\n version: typeof version === 'string' ? version : undefined,\n isDevDependency: true,\n }),\n ),\n ],\n },\n ];\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { CodePackageType } from '@transcend-io/privacy-types';\nimport { decodeCodec } from '@transcend-io/type-utils';\nimport * as t from 'io-ts';\n\nimport { CodeScanningConfig } from '../types.js';\n\nconst SwiftPackage = t.type({\n pins: t.array(\n t.type({\n identity: t.string,\n kind: t.string,\n location: t.string,\n state: t.intersection([\n t.type({\n revision: t.string,\n }),\n t.partial({\n version: t.union([t.string, t.undefined, t.null]),\n }),\n ]),\n }),\n ),\n version: t.number,\n});\n\nconst SwiftPackageV1 = t.type({\n object: t.type({\n pins: t.array(\n t.type({\n package: t.string,\n repositoryURL: t.string,\n state: t.intersection([\n t.type({\n branch: t.union([t.string, t.undefined, t.null]),\n revision: t.string,\n }),\n t.partial({\n version: t.union([t.string, t.undefined, t.null]),\n }),\n ]),\n }),\n ),\n }),\n version: t.number,\n});\n\nexport const swift: CodeScanningConfig = {\n supportedFiles: ['Package.resolved'],\n ignoreDirs: [],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n\n // Attempt latest version first\n try {\n const parsed = decodeCodec(SwiftPackage, fileContents);\n const splitPath = dirname(filePath).split('/');\n const originalName = splitPath[splitPath.length - 1];\n let name = originalName;\n if (name === 'swiftpm') {\n name = splitPath[splitPath.length - 2];\n if (name === 'xcshareddata') {\n name = splitPath[splitPath.length - 3];\n } else if (!name) {\n name = originalName;\n }\n if (name === 'project.xcworkspace') {\n name = splitPath[splitPath.length - 4];\n }\n }\n return [\n {\n name,\n type: CodePackageType.Swift,\n softwareDevelopmentKits: parsed.pins.map((target) => ({\n name: target.identity,\n version: target.state.version || undefined,\n })),\n },\n ];\n } catch (e) {\n // Throw non codec errors\n if (!e?.message?.includes('Failed to decode codec')) {\n throw e;\n }\n\n // Attempt v1\n try {\n const parsed = decodeCodec(SwiftPackageV1, fileContents);\n return [\n {\n name: dirname(filePath).split('/').pop() || '', // TODO pull from Package.swift ->> name if possible\n type: CodePackageType.Swift,\n softwareDevelopmentKits: parsed.object.pins.map((target) => ({\n name: target.package,\n version: target.state.version || undefined,\n })),\n },\n ];\n } catch (e2) {\n if (!e2?.message?.includes('Failed to decode codec')) {\n throw e2;\n }\n throw e;\n }\n }\n },\n};\n","import { readFileSync } from 'node:fs';\nimport { dirname } from 'node:path';\n\nimport { findAllWithRegex } from '@transcend-io/type-utils';\n\nimport { CodeScanningConfig } from '../types.js';\n\n/**\n * Kotlin DSL (build.gradle.kts) dependency & plugin parsing\n */\n\nconst KTS_DEP_CONFIGS =\n // eslint-disable-next-line max-len\n '(implementation|api|kapt|ksp|debugImplementation|releaseImplementation|androidTestImplementation|testImplementation|compileOnly|runtimeOnly)';\n\n// e.g. implementation(\"com.google.firebase:firebase-analytics:18.0.0\")\nconst KTS_DEP_STRING_COORDS_REGEX = new RegExp(\n `${KTS_DEP_CONFIGS}\\\\s*\\\\(\\\\s*[\"']([^\"':\\\\s]+):([^\"':\\\\s]+):?([^\"']*)[\"']\\\\s*\\\\)`,\n 'g',\n);\n// captures: [1]=config, [2]=group, [3]=artifact, [4]=version (may be '')\n\n// e.g. implementation(platform(\"com.google.firebase:firebase-bom:33.1.2\"))\nconst KTS_DEP_PLATFORM_REGEX = new RegExp(\n `${KTS_DEP_CONFIGS}\\\\s*\\\\(\\\\s*platform\\\\(\\\\s*[\"']([^\"':\\\\s]+):([^\"':\\\\s]+):?([^\"']*)[\"']\\\\s*\\\\)\\\\s*\\\\)`,\n 'g',\n);\n\n// e.g. implementation(libs.androidx.appcompat) / implementation(libs[\"androidx-core-ktx\"])\nconst KTS_DEP_LIBS_ALIAS_REGEX = new RegExp(\n `${KTS_DEP_CONFIGS}\\\\s*\\\\(\\\\s*libs(?:\\\\.[\\\\w\\\\-\\\\.]+|\\\\[[\"'][^\"']+[\"']\\\\])\\\\s*\\\\)`,\n 'g',\n);\n\n// Plugins:\n// plugins { id(\"com.google.gms.google-services\") version \"4.4.2\" apply false }\n// plugins { id(\"org.jetbrains.kotlin.android\") }\n// apply(plugin = \"newrelic\")\n// plugins { alias(libs.plugins.kotlin.android) }\nconst KTS_PLUGIN_ID_REGEX = /id\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)(?:\\s*version\\s*[\"']([^\"']+)[\"'])?/g;\nconst KTS_PLUGIN_APPLY_REGEX = /apply\\s*\\(\\s*plugin\\s*=\\s*[\"']([^\"']+)[\"']\\s*\\)/g;\nconst KTS_PLUGIN_ALIAS_REGEX =\n /plugins\\s*\\{[^}]*alias\\s*\\(\\s*libs(?:\\.plugins)?(?:\\.[\\w\\-.]+|\\[[\"'][^\"']+[\"']\\])\\s*\\)[^}]*\\}/g;\n\n// applicationId in Kotlin DSL:\n// applicationId = \"com.foo.bar\"\n// applicationId(\"com.foo.bar\")\nconst KTS_APPLICATION_ID_EQ_REGEX = /applicationId\\s*=\\s*[\"']([^\"']+)[\"']/g;\nconst KTS_APPLICATION_ID_CALL_REGEX = /applicationId\\s*\\(\\s*[\"']([^\"']+)[\"']\\s*\\)/g;\n\n/**\n * Input dep entry (partial)\n */\ntype DepInput = {\n /** Name of the dependency */\n name: string;\n /** Version of the dependency */\n version?: string;\n};\n\n/**\n * Helper to normalize a parsed dep entry\n *\n * @param name - name\n * @param version - version\n * @returns normalized entry\n */\nfunction depEntry(name: string, version?: string): DepInput {\n const v = version && version.trim().length > 0 && version !== '_' ? version.trim() : undefined;\n return { name, version: v };\n}\n\nexport const kotlin: CodeScanningConfig = {\n supportedFiles: ['**/build.gradle.kts', '**/*.gradle.kts'],\n ignoreDirs: ['gradle-app.setting', 'gradle-wrapper.jar', 'gradle-wrapper.properties'],\n scanFunction: (filePath) => {\n const fileContents = readFileSync(filePath, 'utf-8');\n const directory = dirname(filePath);\n\n // ---------- applicationId ----------\n const appIds = [\n ...findAllWithRegex({ value: KTS_APPLICATION_ID_EQ_REGEX, matches: ['name'] }, fileContents),\n ...findAllWithRegex(\n { value: KTS_APPLICATION_ID_CALL_REGEX, matches: ['name'] },\n fileContents,\n ),\n ];\n if (appIds.length > 1) {\n throw new Error(`Expected only one applicationId per file: ${filePath}`);\n }\n const appName = appIds[0]?.name || directory.split('/').pop()!;\n\n // ---------- dependencies ----------\n const deps: Array<DepInput> = [];\n\n // \"group:artifact:version\"\n for (const m of fileContents.matchAll(KTS_DEP_STRING_COORDS_REGEX)) {\n const [, , group, artifact, version] = m;\n deps.push(depEntry(`${group}:${artifact}`, version));\n }\n\n // platform(\"group:artifact:version\")\n for (const m of fileContents.matchAll(KTS_DEP_PLATFORM_REGEX)) {\n const [, , group, artifact, version] = m;\n // Record as regular coord (you may prefer to tag as BoM separately)\n deps.push(depEntry(`${group}:${artifact}`, version));\n }\n\n // libs aliases (version catalogs) — keep alias as name, unknown version\n for (const m of fileContents.matchAll(KTS_DEP_LIBS_ALIAS_REGEX)) {\n // Grab the exact token as name (best-effort)\n const token = m[0]\n .replace(/^[^(]+\\(\\s*/, '')\n .replace(/\\)\\s*$/, '')\n .trim(); // e.g., libs.androidx.appcompat or libs[\"androidx-core-ktx\"]\n deps.push(depEntry(token));\n }\n\n // ---------- plugins ----------\n const plugins: Array<DepInput> = [];\n\n for (const m of fileContents.matchAll(KTS_PLUGIN_ID_REGEX)) {\n const [, pid, pver] = m;\n plugins.push(depEntry(pid, pver));\n }\n\n for (const m of fileContents.matchAll(KTS_PLUGIN_APPLY_REGEX)) {\n const [, pid] = m;\n plugins.push(depEntry(pid));\n }\n\n // alias(libs.plugins...) — keep alias token (no version)\n if (KTS_PLUGIN_ALIAS_REGEX.test(fileContents)) {\n // Collect all alias lines to preserve identifiers; light parse:\n const aliasMatches = fileContents.matchAll(\n /alias\\s*\\(\\s*(libs(?:\\.plugins)?(?:\\.[\\w\\-.]+|\\[[\"'][^\"']+[\"']\\]))\\s*\\)/g,\n );\n for (const m of aliasMatches) {\n plugins.push(depEntry(m[1]));\n }\n }\n\n // ---------- compose final list ----------\n // Merge deps + plugins as \"softwareDevelopmentKits\"\n const softwareDevelopmentKits = [...deps, ...plugins]\n // de-dup by name+version\n .reduce(\n (acc, cur) => {\n const key = `${cur.name}@@${cur.version || ''}`;\n if (!acc.map.has(key)) {\n acc.map.set(key, cur);\n acc.list.push(cur);\n }\n return acc;\n },\n {\n map: new Map<string, DepInput>(),\n list: [] as Array<DepInput>,\n },\n ).list;\n\n return [\n {\n name: appName,\n softwareDevelopmentKits,\n },\n ];\n },\n};\n","import { CodePackageType } from '@transcend-io/privacy-types';\n\nimport {\n cocoaPods,\n gradle,\n javascriptPackageJson,\n gemfile,\n composerJson,\n pubspec,\n swift,\n kotlin,\n pythonRequirementsTxt,\n} from './integrations/index.js';\nimport { CodeScanningConfig } from './types.js';\n\n/**\n * @deprecated TODO: https://transcend.height.app/T-32325 - use code scanning instead\n */\nexport const SILO_DISCOVERY_CONFIGS: {\n [k in string]: CodeScanningConfig;\n} = {\n cocoaPods,\n gradle,\n javascriptPackageJson,\n pythonRequirementsTxt,\n gemfile,\n pubspec,\n swift,\n};\n\nexport const CODE_SCANNING_CONFIGS: {\n [k in CodePackageType]: CodeScanningConfig;\n} = {\n [CodePackageType.CocoaPods]: cocoaPods,\n [CodePackageType.Gradle]: gradle,\n [CodePackageType.PackageJson]: javascriptPackageJson,\n [CodePackageType.RequirementsTxt]: pythonRequirementsTxt,\n [CodePackageType.Gemfile]: gemfile,\n [CodePackageType.Pubspec]: pubspec,\n [CodePackageType.ComposerJson]: composerJson,\n [CodePackageType.Swift]: swift,\n [CodePackageType.Kotlin]: kotlin,\n};\n"],"mappings":"4TAQA,MAAM,EAAmB,yBACnB,EAAoB,6CAEb,EAAgC,CAC3C,eAAgB,CAAC,UAAU,CAC3B,WAAY,CAAC,OAAQ,QAAQ,CAC7B,aAAe,GAAa,CAC1B,IAAM,EAAe,EAAa,EAAU,QAAQ,CAE9C,EAAU,EACd,CACE,MAAO,IAAI,OAAO,EAAkB,IAAI,CACxC,QAAS,CAAC,SAAU,OAAQ,SAAS,CACtC,CACD,EACD,CACK,EAAW,EACf,CACE,MAAO,IAAI,OAAO,EAAmB,IAAI,CACzC,QAAS,CAAC,SAAU,OAAQ,SAAU,QAAS,SAAU,UAAW,SAAS,CAC9E,CACD,EACD,CAiBD,OAf+B,EAAQ,KAAK,EAAQ,KAAS,CAC3D,KAAM,EAAO,KACb,KAAM,EAAgB,UACtB,wBAAyB,EACtB,OACE,GACC,EAAI,WAAa,EAAO,aACvB,CAAC,EAAQ,EAAM,IAAM,EAAI,WAAa,EAAQ,EAAM,GAAG,YAC3D,CACA,IAAK,IAAS,CACb,KAAM,EAAI,KACV,QAAS,EAAI,QACd,EAAE,CACN,EAEU,EAEd,CC1CK,EAA8B,iDAC9B,EAAsB,0CACtB,EACJ,wGACI,EAAgC,2BAYzB,EAA6B,CACxC,eAAgB,CAAC,iBAAiB,CAClC,WAAY,CAAC,qBAAsB,qBAAsB,4BAA4B,CACrF,aAAe,GAAa,CAC1B,IAAM,EAAe,EAAa,EAAU,QAAQ,CAC9C,EAAY,EAAQ,EAAS,CAE7B,EAAU,EACd,CACE,MAAO,IAAI,OAAO,EAA6B,IAAI,CACnD,QAAS,CAAC,QAAS,SAAU,OAAQ,OAAQ,UAAW,SAAS,CAClE,CACD,EACD,CACK,EAAgB,EACpB,CACE,MAAO,IAAI,OAAO,EAAqB,IAAI,CAC3C,QAAS,CAAC,SAAU,OAAQ,QAAS,UAAW,SAAS,CAC1D,CACD,EACD,CACK,EAAe,EACnB,CACE,MAAO,IAAI,OAAO,EAAmC,IAAI,CACzD,QAAS,CACP,SACA,SACA,QACA,SACA,SACA,SACA,SACA,OACA,SACA,SACA,SACA,SACA,UACA,SACD,CACF,CACD,EACD,CACK,EAAe,EACnB,CACE,MAAO,IAAI,OAAO,EAA+B,IAAI,CACrD,QAAS,CAAC,QAAS,OAAO,CAC3B,CACD,EACD,CACD,GAAI,EAAa,OAAS,EACxB,MAAU,MAAM,6CAA6C,IAAW,CAG1E,MAAO,CACL,CACE,KAAM,EAAa,IAAI,MAAQ,EAAU,MAAM,IAAI,CAAC,KAAK,CACzD,wBAAyB,CAAC,GAAG,EAAS,GAAG,EAAc,GAAG,EAAc,CAAC,IAAK,IAAY,CACxF,KAAM,EAAO,KACb,QAAS,EAAO,SAAW,IAAA,GAC5B,EAAE,CACJ,CACF,EAEJ,CCjFY,EAA4C,CACvD,eAAgB,CAAC,eAAe,CAChC,WAAY,CAAC,eAAgB,mBAAoB,eAAe,CAChE,aAAe,GAAa,CAC1B,IAAM,EAAO,EAAa,EAAU,QAAQ,CACtC,EAAY,EAAQ,EAAS,CAE7B,CACJ,OACA,cACA,eAAe,EAAE,CACjB,kBAAkB,EAAE,CACpB,uBAAuB,EAAE,EANZ,KAAK,MAAM,EAOhB,CACV,MAAO,CACL,CAEE,KAAM,GAAQ,EAAU,MAAM,IAAI,CAAC,KAAK,CACxC,cACA,wBAAyB,CACvB,GAAG,OAAO,QAAQ,EAAa,CAAC,KAC7B,CAAC,EAAM,MAA8B,CACpC,OACA,QAAS,OAAO,GAAY,SAAW,EAAU,IAAA,GAClD,EACF,CACD,GAAG,OAAO,QAAQ,EAAgB,CAAC,KAChC,CAAC,EAAM,MAA8B,CACpC,OACA,QAAS,OAAO,GAAY,SAAW,EAAU,IAAA,GACjD,gBAAiB,GAClB,EACF,CACD,GAAG,OAAO,QAAQ,EAAqB,CAAC,KACrC,CAAC,EAAM,MAA8B,CACpC,OACA,QAAS,OAAO,GAAY,SAAW,EAAU,IAAA,GAClD,EACF,CACF,CACF,CACF,EAEJ,CCxCK,EAA6B,gBAC7B,EAAe,2BACf,EAAsB,kCAEf,EAA4C,CACvD,eAAgB,CAAC,mBAAmB,CACpC,WAAY,CAAC,QAAS,MAAO,QAAQ,CACrC,aAAe,GAAa,CAC1B,IAAM,EAAe,EAAa,EAAU,QAAQ,CAC9C,EAAY,EAAQ,EAAS,CAI7B,EAHgB,EAAU,EAGD,CAAC,KAAM,GAAS,IAAS,WAAW,CAC7D,EAAoB,EACtB,EAAa,EAAK,EAAW,EAAU,CAAE,QAAQ,CACjD,IAAA,GACE,EAAc,GACf,EAAa,KAAK,EAAkB,EAAI,EAAE,EAAE,GAC7C,IAAA,GACE,EAAqB,GACtB,EAAoB,KAAK,EAAkB,EAAI,EAAE,EAAE,GACpD,IAAA,GAEE,EAAU,EACd,CACE,MAAO,IAAI,OAAO,EAA4B,IAAI,CAClD,QAAS,CAAC,OAAQ,SAAU,UAAU,CACvC,CACD,EACD,CAED,MAAO,CACL,CACE,KAAM,GAAe,EAAU,MAAM,IAAI,CAAC,KAAK,CAC/C,YAAa,GAAsB,IAAA,GACnC,KAAM,EAAgB,gBACtB,wBAAyB,EAAQ,IAAK,IAAS,CAC7C,KAAM,EAAI,KACV,QAAS,EAAI,QACd,EAAE,CACJ,CACF,EAEJ,CC5CK,EAAoB,4CACpB,EAA6B,iCAC7B,EAAoC,wCACpC,EAAgC,oCAEzB,EAA8B,CACzC,eAAgB,CAAC,UAAU,CAC3B,WAAY,CAAC,MAAM,CACnB,aAAe,GAAa,CAC1B,IAAM,EAAe,EAAa,EAAU,QAAQ,CAC9C,EAAY,EAAQ,EAAS,CAI7B,EAHgB,EAAU,EAGH,CAAC,KAAM,GAAS,IAAS,WAAW,CAC3D,EAAkB,EAAU,EAAa,EAAS,QAAQ,CAAG,IAAA,GAC7D,EAAc,GACf,EAA2B,KAAK,EAAgB,EAAI,EAAE,EAAE,GACzD,IAAA,GACE,EAAqB,GACtB,EAAkC,KAAK,EAAgB,EACtD,EAA8B,KAAK,EAAgB,EACnD,EAAE,EAAE,GACN,IAAA,GAEE,EAAU,EACd,CACE,MAAO,IAAI,OAAO,EAAmB,IAAI,CACzC,QAAS,CAAC,SAAU,OAAQ,SAAU,aAAc,SAAU,UAAW,SAAS,CACnF,CACD,EACD,CAED,MAAO,CACL,CACE,KAAM,GAAe,EAAU,MAAM,IAAI,CAAC,KAAK,CAC/C,YAAa,GAAsB,IAAA,GACnC,KAAM,EAAgB,gBACtB,wBAAyB,EAAQ,IAAK,IAAS,CAC7C,KAAM,EAAI,KACV,QAAS,EAAI,QACd,EAAE,CACJ,CACF,EAEJ,CCxCD,SAAS,EAAmB,EAA4B,CACtD,OAAO,EACJ,MAAM;EAAK,CACX,IAAK,GAAS,CAEb,IAAM,EAAe,EAAK,QAAQ,IAAI,CAUtC,OATI,EAAe,IAGf,CAAC,EAAK,UAAU,EAAG,EAAa,CAAC,SAAS,IAAI,EAC9C,CAAC,EAAK,UAAU,EAAG,EAAa,CAAC,SAAS,IAAI,CAEvC,EAAK,UAAU,EAAG,EAAa,CAAC,MAAM,CAG1C,GACP,CACD,OAAQ,GAAS,EAAK,OAAS,EAAE,CACjC,KAAK;EAAK,CAGf,MAAa,EAA8B,CACzC,eAAgB,CAAC,cAAc,CAC/B,WAAY,CAAC,QAAQ,CACrB,aAAe,GAAa,CAC1B,IAAM,EAAY,EAAQ,EAAS,CAC7B,EAAe,EAAa,EAAU,QAAQ,CAC9C,CACJ,OACA,cACA,mBAAmB,EAAE,CACrB,eAAe,EAAE,EACf,EAAK,KAAK,EAAmB,EAAa,CAAC,CAU/C,MAAO,CACL,CACE,KAAM,GAAQ,EAAU,MAAM,IAAI,CAAC,KAAK,CACxC,cACA,KAAM,EAAgB,gBACtB,wBAAyB,CACvB,GAAG,OAAO,QAAQ,EAAa,CAAC,KAAK,CAAC,EAAM,MAAc,CACxD,OACA,QACE,OAAO,GAAY,SACf,EACA,OAAO,GAAY,SACjB,EAAQ,UAAU,CAClB,GAAS,IAClB,EAAE,CACH,GAAG,OAAO,QAAQ,EAAiB,CAAC,KAAK,CAAC,EAAM,MAAc,CAC5D,OACA,QACE,OAAO,GAAY,SACf,EACA,OAAO,GAAY,SACjB,EAAQ,UAAU,CAClB,GAAS,IACjB,gBAAiB,GAClB,EAAE,CACJ,CACF,CACF,EAEJ,CC/EY,EAAmC,CAC9C,eAAgB,CAAC,gBAAgB,CACjC,WAAY,CAAC,SAAU,eAAgB,QAAS,QAAS,OAAO,CAChE,aAAe,GAAa,CAC1B,IAAM,EAAO,EAAa,EAAU,QAAQ,CACtC,EAAY,EAAQ,EAAS,CAE7B,CACJ,OACA,cACA,QAAS,EAAsB,EAAE,CACjC,cAAe,EAA0B,EAAE,EAL9B,KAAK,MAAM,EAMhB,CACV,MAAO,CACL,CAEE,KAAM,GAAQ,EAAU,MAAM,IAAI,CAAC,KAAK,CACxC,cACA,wBAAyB,CACvB,GAAG,OAAO,QAAQ,EAAoB,CAAC,KACpC,CAAC,EAAM,MAA8B,CACpC,OACA,QAAS,OAAO,GAAY,SAAW,EAAU,IAAA,GAClD,EACF,CACD,GAAG,OAAO,QAAQ,EAAwB,CAAC,KACxC,CAAC,EAAM,MAA8B,CACpC,OACA,QAAS,OAAO,GAAY,SAAW,EAAU,IAAA,GACjD,gBAAiB,GAClB,EACF,CACF,CACF,CACF,EAEJ,CCjCK,EAAe,EAAE,KAAK,CAC1B,KAAM,EAAE,MACN,EAAE,KAAK,CACL,SAAU,EAAE,OACZ,KAAM,EAAE,OACR,SAAU,EAAE,OACZ,MAAO,EAAE,aAAa,CACpB,EAAE,KAAK,CACL,SAAU,EAAE,OACb,CAAC,CACF,EAAE,QAAQ,CACR,QAAS,EAAE,MAAM,CAAC,EAAE,OAAQ,EAAE,UAAW,EAAE,KAAK,CAAC,CAClD,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACD,QAAS,EAAE,OACZ,CAAC,CAEI,EAAiB,EAAE,KAAK,CAC5B,OAAQ,EAAE,KAAK,CACb,KAAM,EAAE,MACN,EAAE,KAAK,CACL,QAAS,EAAE,OACX,cAAe,EAAE,OACjB,MAAO,EAAE,aAAa,CACpB,EAAE,KAAK,CACL,OAAQ,EAAE,MAAM,CAAC,EAAE,OAAQ,EAAE,UAAW,EAAE,KAAK,CAAC,CAChD,SAAU,EAAE,OACb,CAAC,CACF,EAAE,QAAQ,CACR,QAAS,EAAE,MAAM,CAAC,EAAE,OAAQ,EAAE,UAAW,EAAE,KAAK,CAAC,CAClD,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,CAAC,CACF,QAAS,EAAE,OACZ,CAAC,CAEW,EAA4B,CACvC,eAAgB,CAAC,mBAAmB,CACpC,WAAY,EAAE,CACd,aAAe,GAAa,CAC1B,IAAM,EAAe,EAAa,EAAU,QAAQ,CAGpD,GAAI,CACF,IAAM,EAAS,EAAY,EAAc,EAAa,CAChD,EAAY,EAAQ,EAAS,CAAC,MAAM,IAAI,CACxC,EAAe,EAAU,EAAU,OAAS,GAC9C,EAAO,EAYX,OAXI,IAAS,YACX,EAAO,EAAU,EAAU,OAAS,GAChC,IAAS,eACX,EAAO,EAAU,EAAU,OAAS,GAEpC,IAAO,EAEL,IAAS,wBACX,EAAO,EAAU,EAAU,OAAS,KAGjC,CACL,CACE,OACA,KAAM,EAAgB,MACtB,wBAAyB,EAAO,KAAK,IAAK,IAAY,CACpD,KAAM,EAAO,SACb,QAAS,EAAO,MAAM,SAAW,IAAA,GAClC,EAAE,CACJ,CACF,OACM,EAAG,CAEV,GAAI,CAAC,GAAG,SAAS,SAAS,yBAAyB,CACjD,MAAM,EAIR,GAAI,CACF,IAAM,EAAS,EAAY,EAAgB,EAAa,CACxD,MAAO,CACL,CACE,KAAM,EAAQ,EAAS,CAAC,MAAM,IAAI,CAAC,KAAK,EAAI,GAC5C,KAAM,EAAgB,MACtB,wBAAyB,EAAO,OAAO,KAAK,IAAK,IAAY,CAC3D,KAAM,EAAO,QACb,QAAS,EAAO,MAAM,SAAW,IAAA,GAClC,EAAE,CACJ,CACF,OACM,EAAI,CAIX,MAHK,GAAI,SAAS,SAAS,yBAAyB,CAG9C,EAFE,KAMf,CClGK,EAEJ,+IAGI,EAAkC,OACtC,GAAG,EAAgB,+DACnB,IACD,CAIK,EAA6B,OACjC,GAAG,EAAgB,qFACnB,IACD,CAGK,EAA+B,OACnC,GAAG,EAAgB,gEACnB,IACD,CAOK,EAAsB,qEACtB,EAAyB,mDACzB,EACJ,iGAKI,EAA8B,wCAC9B,EAAgC,8CAmBtC,SAAS,EAAS,EAAc,EAA4B,CAE1D,MAAO,CAAE,OAAM,QADL,GAAW,EAAQ,MAAM,CAAC,OAAS,GAAK,IAAY,IAAM,EAAQ,MAAM,CAAG,IAAA,GAC1D,CAG7B,MAAa,EAA6B,CACxC,eAAgB,CAAC,sBAAuB,kBAAkB,CAC1D,WAAY,CAAC,qBAAsB,qBAAsB,4BAA4B,CACrF,aAAe,GAAa,CAC1B,IAAM,EAAe,EAAa,EAAU,QAAQ,CAC9C,EAAY,EAAQ,EAAS,CAG7B,EAAS,CACb,GAAG,EAAiB,CAAE,MAAO,EAA6B,QAAS,CAAC,OAAO,CAAE,CAAE,EAAa,CAC5F,GAAG,EACD,CAAE,MAAO,EAA+B,QAAS,CAAC,OAAO,CAAE,CAC3D,EACD,CACF,CACD,GAAI,EAAO,OAAS,EAClB,MAAU,MAAM,6CAA6C,IAAW,CAE1E,IAAM,EAAU,EAAO,IAAI,MAAQ,EAAU,MAAM,IAAI,CAAC,KAAK,CAGvD,EAAwB,EAAE,CAGhC,IAAK,IAAM,KAAK,EAAa,SAAS,EAA4B,CAAE,CAClE,GAAM,GAAK,EAAO,EAAU,GAAW,EACvC,EAAK,KAAK,EAAS,GAAG,EAAM,GAAG,IAAY,EAAQ,CAAC,CAItD,IAAK,IAAM,KAAK,EAAa,SAAS,EAAuB,CAAE,CAC7D,GAAM,GAAK,EAAO,EAAU,GAAW,EAEvC,EAAK,KAAK,EAAS,GAAG,EAAM,GAAG,IAAY,EAAQ,CAAC,CAItD,IAAK,IAAM,KAAK,EAAa,SAAS,EAAyB,CAAE,CAE/D,IAAM,EAAQ,EAAE,GACb,QAAQ,cAAe,GAAG,CAC1B,QAAQ,SAAU,GAAG,CACrB,MAAM,CACT,EAAK,KAAK,EAAS,EAAM,CAAC,CAI5B,IAAM,EAA2B,EAAE,CAEnC,IAAK,IAAM,KAAK,EAAa,SAAS,EAAoB,CAAE,CAC1D,GAAM,EAAG,EAAK,GAAQ,EACtB,EAAQ,KAAK,EAAS,EAAK,EAAK,CAAC,CAGnC,IAAK,IAAM,KAAK,EAAa,SAAS,EAAuB,CAAE,CAC7D,GAAM,EAAG,GAAO,EAChB,EAAQ,KAAK,EAAS,EAAI,CAAC,CAI7B,GAAI,EAAuB,KAAK,EAAa,CAAE,CAE7C,IAAM,EAAe,EAAa,SAChC,2EACD,CACD,IAAK,IAAM,KAAK,EACd,EAAQ,KAAK,EAAS,EAAE,GAAG,CAAC,CAuBhC,MAAO,CACL,CACE,KAAM,EACN,wBApB4B,CAAC,GAAG,EAAM,GAAG,EAAQ,CAElD,QACE,EAAK,IAAQ,CACZ,IAAM,EAAM,GAAG,EAAI,KAAK,IAAI,EAAI,SAAW,KAK3C,OAJK,EAAI,IAAI,IAAI,EAAI,GACnB,EAAI,IAAI,IAAI,EAAK,EAAI,CACrB,EAAI,KAAK,KAAK,EAAI,EAEb,GAET,CACE,IAAK,IAAI,IACT,KAAM,EAAE,CACT,CACF,CAAC,KAMD,CACF,EAEJ,CCtJY,EAET,CACF,YACA,SACA,wBACA,wBACA,UACA,UACA,QACD,CAEY,EAET,EACD,EAAgB,WAAY,GAC5B,EAAgB,QAAS,GACzB,EAAgB,aAAc,GAC9B,EAAgB,iBAAkB,GAClC,EAAgB,SAAU,GAC1B,EAAgB,SAAU,GAC1B,EAAgB,cAAe,GAC/B,EAAgB,OAAQ,GACxB,EAAgB,QAAS,EAC3B"}
@@ -1,2 +1,2 @@
1
1
  import{CompletedRequestStatus as e,IsoCountryCode as t,IsoCountrySubdivisionCode as n,RequestAction as r}from"@transcend-io/privacy-types";import{LOCALE_KEY as i}from"@transcend-io/internationalization";import{applyEnum as a,valuesOf as o}from"@transcend-io/type-utils";import*as s from"io-ts";const c=`[NONE]`,l=`[APPLY VALUE TO ALL ROWS]`,u=`<blank>`,d=[`email`,`coreIdentifier`];let f=function(e){return e.Email=`email`,e.CoreIdentifier=`coreIdentifier`,e.RequestType=`requestType`,e.SubjectType=`subjectType`,e.Locale=`locale`,e.Country=`country`,e.CountrySubDivision=`countrySubDivision`,e.RequestStatus=`requestStatus`,e.CreatedAt=`createdAt`,e.DataSiloIds=`dataSiloIds`,e}({});const p={email:!1,coreIdentifier:!0,requestType:!0,subjectType:!0,requestStatus:!1,createdAt:!1,dataSiloIds:!1,locale:!1,country:!1,countrySubDivision:!1},m={requestType:!0,subjectType:!0},h=s.type({columnNames:s.partial(a(f,()=>s.string)),identifierNames:s.record(s.string,s.string),attributeNames:s.record(s.string,s.string),requestTypeToRequestAction:s.record(s.string,o(r)),subjectTypeToSubjectName:s.record(s.string,s.string),languageToLocale:s.record(s.string,o(i)),regionToCountry:s.record(s.string,o({...t,[c]:c})),regionToCountrySubDivision:s.record(s.string,o({...n,[c]:c})),statusToRequestStatus:s.record(s.string,o({...e,[c]:c}))}),g=s.type({id:s.string,link:s.string,rowIndex:s.number,coreIdentifier:s.string,attemptedAt:s.string}),_=s.type({failingRequests:s.array(s.record(s.string,s.any)),successfulRequests:s.array(g),duplicateRequests:s.array(s.type({rowIndex:s.number,coreIdentifier:s.string,attemptedAt:s.string}))});export{_ as a,p as c,h as i,c as l,l as n,f as o,m as r,d as s,u as t,g as u};
2
- //# sourceMappingURL=constants-D_HVDaOy.mjs.map
2
+ //# sourceMappingURL=constants-qvGk0wlN.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants-D_HVDaOy.mjs","names":[],"sources":["../src/lib/requests/constants.ts"],"sourcesContent":["import { LOCALE_KEY } from '@transcend-io/internationalization';\nimport {\n CompletedRequestStatus,\n RequestAction,\n IsoCountryCode,\n IsoCountrySubdivisionCode,\n} from '@transcend-io/privacy-types';\nimport { applyEnum, valuesOf } from '@transcend-io/type-utils';\nimport * as t from 'io-ts';\n\nexport const NONE = '[NONE]' as const;\nexport const BULK_APPLY = '[APPLY VALUE TO ALL ROWS]' as const;\nexport const BLANK = '<blank>' as const;\n\n/** These are uploaded at the top level of the request */\nexport const IDENTIFIER_BLOCK_LIST = ['email', 'coreIdentifier'];\n\n/**\n * Column names to map\n */\nexport enum ColumnName {\n /** The title of the email column */\n Email = 'email',\n /** The title of the core identifier column */\n CoreIdentifier = 'coreIdentifier',\n /** The title of the requestType column */\n RequestType = 'requestType',\n /** The title of the subjectType column */\n SubjectType = 'subjectType',\n /** The title of the locale column */\n Locale = 'locale',\n /** The country */\n Country = 'country',\n /** The country sub division */\n CountrySubDivision = 'countrySubDivision',\n /** The title of the requestStatus column */\n RequestStatus = 'requestStatus',\n /** The title of the createdAt column */\n CreatedAt = 'createdAt',\n /** The title of the dataSiloIds column */\n DataSiloIds = 'dataSiloIds',\n}\n\n/** These parameters are required in the Transcend DSR API */\nexport const IS_REQUIRED: { [k in ColumnName]: boolean } = {\n [ColumnName.Email]: false,\n [ColumnName.CoreIdentifier]: true,\n [ColumnName.RequestType]: true,\n [ColumnName.SubjectType]: true,\n [ColumnName.RequestStatus]: false,\n [ColumnName.CreatedAt]: false,\n [ColumnName.DataSiloIds]: false,\n [ColumnName.Locale]: false,\n [ColumnName.Country]: false,\n [ColumnName.CountrySubDivision]: false,\n};\n\n/** These parameters can be specified for the entire CSV set if needed */\nexport const CAN_APPLY_IN_BULK: { [k in ColumnName]?: boolean } = {\n [ColumnName.RequestType]: true,\n [ColumnName.SubjectType]: true,\n};\n\n// Cache state\nexport const CachedFileState = t.type({\n /** Mapping between the default request input column names and the CSV column name for that input */\n columnNames: t.partial(applyEnum(ColumnName, () => t.string)),\n /** Mapping between the identifier names and the CSV column name for that input */\n identifierNames: t.record(t.string, t.string),\n /** Mapping between the request attribute inputs and the CSV column name for that input */\n attributeNames: t.record(t.string, t.string),\n /** Mapping between CSV request type and Transcend Request Action */\n requestTypeToRequestAction: t.record(t.string, valuesOf(RequestAction)),\n /** Mapping between CSV data subject type and the name of the data subject in Transcend */\n subjectTypeToSubjectName: t.record(t.string, t.string),\n /** Mapping between language imported and Transcend locale code */\n languageToLocale: t.record(t.string, valuesOf(LOCALE_KEY)),\n /** Mapping between region and country code */\n regionToCountry: t.record(t.string, valuesOf({ ...IsoCountryCode, [NONE]: NONE })),\n /** Mapping between region and country sub division code */\n regionToCountrySubDivision: t.record(\n t.string,\n valuesOf({ ...IsoCountrySubdivisionCode, [NONE]: NONE }),\n ),\n /** Mapping between request status in import to Transcend request status */\n statusToRequestStatus: t.record(t.string, valuesOf({ ...CompletedRequestStatus, [NONE]: NONE })),\n});\n\n/** Type override */\nexport type CachedFileState = t.TypeOf<typeof CachedFileState>;\n\n/**\n * Successfully processed request\n */\nexport const SuccessfulRequest = t.type({\n id: t.string,\n link: t.string,\n rowIndex: t.number,\n coreIdentifier: t.string,\n attemptedAt: t.string,\n});\n\n/** Type override */\nexport type SuccessfulRequest = t.TypeOf<typeof SuccessfulRequest>;\n\n// Cache state\nexport const CachedRequestState = t.type({\n /** Set of privacy requests that failed to upload */\n failingRequests: t.array(t.record(t.string, t.any)),\n /** Successfully uploaded requests */\n successfulRequests: t.array(SuccessfulRequest),\n /** Duplicate requests */\n duplicateRequests: t.array(\n t.type({\n rowIndex: t.number,\n coreIdentifier: t.string,\n attemptedAt: t.string,\n }),\n ),\n});\n\n/** Type override */\nexport type CachedRequestState = t.TypeOf<typeof CachedRequestState>;\n"],"mappings":"sSAUA,MAAa,EAAO,SACP,EAAa,4BACb,EAAQ,UAGR,EAAwB,CAAC,QAAS,iBAAiB,CAKhE,IAAY,EAAL,SAAA,EAAA,OAEL,GAAA,MAAA,QAEA,EAAA,eAAA,iBAEA,EAAA,YAAA,cAEA,EAAA,YAAA,cAEA,EAAA,OAAA,SAEA,EAAA,QAAA,UAEA,EAAA,mBAAA,qBAEA,EAAA,cAAA,gBAEA,EAAA,UAAA,YAEA,EAAA,YAAA,oBACD,CAGD,MAAa,EAA8C,OACrC,kBACS,eACH,eACA,iBACE,aACJ,eACE,UACL,WACC,sBACW,GAClC,CAGY,EAAqD,aACtC,eACA,GAC3B,CAGY,EAAkB,EAAE,KAAK,CAEpC,YAAa,EAAE,QAAQ,EAAU,MAAkB,EAAE,OAAO,CAAC,CAE7D,gBAAiB,EAAE,OAAO,EAAE,OAAQ,EAAE,OAAO,CAE7C,eAAgB,EAAE,OAAO,EAAE,OAAQ,EAAE,OAAO,CAE5C,2BAA4B,EAAE,OAAO,EAAE,OAAQ,EAAS,EAAc,CAAC,CAEvE,yBAA0B,EAAE,OAAO,EAAE,OAAQ,EAAE,OAAO,CAEtD,iBAAkB,EAAE,OAAO,EAAE,OAAQ,EAAS,EAAW,CAAC,CAE1D,gBAAiB,EAAE,OAAO,EAAE,OAAQ,EAAS,CAAE,GAAG,GAAiB,GAAO,EAAM,CAAC,CAAC,CAElF,2BAA4B,EAAE,OAC5B,EAAE,OACF,EAAS,CAAE,GAAG,GAA4B,GAAO,EAAM,CAAC,CACzD,CAED,sBAAuB,EAAE,OAAO,EAAE,OAAQ,EAAS,CAAE,GAAG,GAAyB,GAAO,EAAM,CAAC,CAAC,CACjG,CAAC,CAQW,EAAoB,EAAE,KAAK,CACtC,GAAI,EAAE,OACN,KAAM,EAAE,OACR,SAAU,EAAE,OACZ,eAAgB,EAAE,OAClB,YAAa,EAAE,OAChB,CAAC,CAMW,EAAqB,EAAE,KAAK,CAEvC,gBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,OAAQ,EAAE,IAAI,CAAC,CAEnD,mBAAoB,EAAE,MAAM,EAAkB,CAE9C,kBAAmB,EAAE,MACnB,EAAE,KAAK,CACL,SAAU,EAAE,OACZ,eAAgB,EAAE,OAClB,YAAa,EAAE,OAChB,CAAC,CACH,CACF,CAAC"}
1
+ {"version":3,"file":"constants-qvGk0wlN.mjs","names":[],"sources":["../src/lib/requests/constants.ts"],"sourcesContent":["import { LOCALE_KEY } from '@transcend-io/internationalization';\nimport {\n CompletedRequestStatus,\n RequestAction,\n IsoCountryCode,\n IsoCountrySubdivisionCode,\n} from '@transcend-io/privacy-types';\nimport { applyEnum, valuesOf } from '@transcend-io/type-utils';\nimport * as t from 'io-ts';\n\nexport const NONE = '[NONE]' as const;\nexport const BULK_APPLY = '[APPLY VALUE TO ALL ROWS]' as const;\nexport const BLANK = '<blank>' as const;\n\n/** These are uploaded at the top level of the request */\nexport const IDENTIFIER_BLOCK_LIST = ['email', 'coreIdentifier'];\n\n/**\n * Column names to map\n */\nexport enum ColumnName {\n /** The title of the email column */\n Email = 'email',\n /** The title of the core identifier column */\n CoreIdentifier = 'coreIdentifier',\n /** The title of the requestType column */\n RequestType = 'requestType',\n /** The title of the subjectType column */\n SubjectType = 'subjectType',\n /** The title of the locale column */\n Locale = 'locale',\n /** The country */\n Country = 'country',\n /** The country sub division */\n CountrySubDivision = 'countrySubDivision',\n /** The title of the requestStatus column */\n RequestStatus = 'requestStatus',\n /** The title of the createdAt column */\n CreatedAt = 'createdAt',\n /** The title of the dataSiloIds column */\n DataSiloIds = 'dataSiloIds',\n}\n\n/** These parameters are required in the Transcend DSR API */\nexport const IS_REQUIRED: { [k in ColumnName]: boolean } = {\n [ColumnName.Email]: false,\n [ColumnName.CoreIdentifier]: true,\n [ColumnName.RequestType]: true,\n [ColumnName.SubjectType]: true,\n [ColumnName.RequestStatus]: false,\n [ColumnName.CreatedAt]: false,\n [ColumnName.DataSiloIds]: false,\n [ColumnName.Locale]: false,\n [ColumnName.Country]: false,\n [ColumnName.CountrySubDivision]: false,\n};\n\n/** These parameters can be specified for the entire CSV set if needed */\nexport const CAN_APPLY_IN_BULK: { [k in ColumnName]?: boolean } = {\n [ColumnName.RequestType]: true,\n [ColumnName.SubjectType]: true,\n};\n\n// Cache state\nexport const CachedFileState = t.type({\n /** Mapping between the default request input column names and the CSV column name for that input */\n columnNames: t.partial(applyEnum(ColumnName, () => t.string)),\n /** Mapping between the identifier names and the CSV column name for that input */\n identifierNames: t.record(t.string, t.string),\n /** Mapping between the request attribute inputs and the CSV column name for that input */\n attributeNames: t.record(t.string, t.string),\n /** Mapping between CSV request type and Transcend Request Action */\n requestTypeToRequestAction: t.record(t.string, valuesOf(RequestAction)),\n /** Mapping between CSV data subject type and the name of the data subject in Transcend */\n subjectTypeToSubjectName: t.record(t.string, t.string),\n /** Mapping between language imported and Transcend locale code */\n languageToLocale: t.record(t.string, valuesOf(LOCALE_KEY)),\n /** Mapping between region and country code */\n regionToCountry: t.record(t.string, valuesOf({ ...IsoCountryCode, [NONE]: NONE })),\n /** Mapping between region and country sub division code */\n regionToCountrySubDivision: t.record(\n t.string,\n valuesOf({ ...IsoCountrySubdivisionCode, [NONE]: NONE }),\n ),\n /** Mapping between request status in import to Transcend request status */\n statusToRequestStatus: t.record(t.string, valuesOf({ ...CompletedRequestStatus, [NONE]: NONE })),\n});\n\n/** Type override */\nexport type CachedFileState = t.TypeOf<typeof CachedFileState>;\n\n/**\n * Successfully processed request\n */\nexport const SuccessfulRequest = t.type({\n id: t.string,\n link: t.string,\n rowIndex: t.number,\n coreIdentifier: t.string,\n attemptedAt: t.string,\n});\n\n/** Type override */\nexport type SuccessfulRequest = t.TypeOf<typeof SuccessfulRequest>;\n\n// Cache state\nexport const CachedRequestState = t.type({\n /** Set of privacy requests that failed to upload */\n failingRequests: t.array(t.record(t.string, t.any)),\n /** Successfully uploaded requests */\n successfulRequests: t.array(SuccessfulRequest),\n /** Duplicate requests */\n duplicateRequests: t.array(\n t.type({\n rowIndex: t.number,\n coreIdentifier: t.string,\n attemptedAt: t.string,\n }),\n ),\n});\n\n/** Type override */\nexport type CachedRequestState = t.TypeOf<typeof CachedRequestState>;\n"],"mappings":"sSAUA,MAAa,EAAO,SACP,EAAa,4BACb,EAAQ,UAGR,EAAwB,CAAC,QAAS,iBAAiB,CAKhE,IAAY,EAAL,SAAA,EAAA,OAEL,GAAA,MAAA,QAEA,EAAA,eAAA,iBAEA,EAAA,YAAA,cAEA,EAAA,YAAA,cAEA,EAAA,OAAA,SAEA,EAAA,QAAA,UAEA,EAAA,mBAAA,qBAEA,EAAA,cAAA,gBAEA,EAAA,UAAA,YAEA,EAAA,YAAA,oBACD,CAGD,MAAa,EAA8C,OACrC,kBACS,eACH,eACA,iBACE,aACJ,eACE,UACL,WACC,sBACW,GAClC,CAGY,EAAqD,aACtC,eACA,GAC3B,CAGY,EAAkB,EAAE,KAAK,CAEpC,YAAa,EAAE,QAAQ,EAAU,MAAkB,EAAE,OAAO,CAAC,CAE7D,gBAAiB,EAAE,OAAO,EAAE,OAAQ,EAAE,OAAO,CAE7C,eAAgB,EAAE,OAAO,EAAE,OAAQ,EAAE,OAAO,CAE5C,2BAA4B,EAAE,OAAO,EAAE,OAAQ,EAAS,EAAc,CAAC,CAEvE,yBAA0B,EAAE,OAAO,EAAE,OAAQ,EAAE,OAAO,CAEtD,iBAAkB,EAAE,OAAO,EAAE,OAAQ,EAAS,EAAW,CAAC,CAE1D,gBAAiB,EAAE,OAAO,EAAE,OAAQ,EAAS,CAAE,GAAG,GAAiB,GAAO,EAAM,CAAC,CAAC,CAElF,2BAA4B,EAAE,OAC5B,EAAE,OACF,EAAS,CAAE,GAAG,GAA4B,GAAO,EAAM,CAAC,CACzD,CAED,sBAAuB,EAAE,OAAO,EAAE,OAAQ,EAAS,CAAE,GAAG,GAAyB,GAAO,EAAM,CAAC,CAAC,CACjG,CAAC,CAQW,EAAoB,EAAE,KAAK,CACtC,GAAI,EAAE,OACN,KAAM,EAAE,OACR,SAAU,EAAE,OACZ,eAAgB,EAAE,OAClB,YAAa,EAAE,OAChB,CAAC,CAMW,EAAqB,EAAE,KAAK,CAEvC,gBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,OAAQ,EAAE,IAAI,CAAC,CAEnD,mBAAoB,EAAE,MAAM,EAAkB,CAE9C,kBAAmB,EAAE,MACnB,EAAE,KAAK,CACL,SAAU,EAAE,OACZ,eAAgB,EAAE,OAClB,YAAa,EAAE,OAChB,CAAC,CACH,CACF,CAAC"}
@@ -1,2 +1,2 @@
1
1
  import e from"node:fs";function t(t,n={}){return{process:t,fs:n.fs??e,logger:n.logger??console}}export{t};
2
- //# sourceMappingURL=context-B33NT3ki.mjs.map
2
+ //# sourceMappingURL=context-D0A0LxsP.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"context-B33NT3ki.mjs","names":[],"sources":["../src/context.ts"],"sourcesContent":["import fs from 'node:fs';\n\nimport type { StricliAutoCompleteContext } from '@stricli/auto-complete';\nimport type { CommandContext } from '@stricli/core';\n\n/**\n * Logger methods available to CLI commands.\n */\nexport type CliLogger = Pick<Console, 'debug' | 'error' | 'info' | 'log' | 'warn'>;\n\n/**\n * Runtime dependencies used to build a CLI context.\n */\nexport interface BuildContextOptions {\n /** Filesystem implementation */\n readonly fs?: typeof fs;\n /** Logger implementation */\n readonly logger?: CliLogger;\n}\n\nexport interface LocalContext extends CommandContext, StricliAutoCompleteContext {\n /** The Node.js process object */\n readonly process: NodeJS.Process;\n /** Filesystem implementation */\n readonly fs: typeof fs;\n /** Logger implementation */\n readonly logger: CliLogger;\n}\n\n/**\n * Builds the context for the CLI.\n *\n * @param process - The Node.js process object.\n * @param options - Optional runtime dependency overrides.\n * @returns The context for the CLI.\n */\nexport function buildContext(\n process: NodeJS.Process,\n options: BuildContextOptions = {},\n): LocalContext {\n return {\n process,\n fs: options.fs ?? fs,\n logger: options.logger ?? console,\n };\n}\n"],"mappings":"uBAoCA,SAAgB,EACd,EACA,EAA+B,EAAE,CACnB,CACd,MAAO,CACL,UACA,GAAI,EAAQ,IAAM,EAClB,OAAQ,EAAQ,QAAU,QAC3B"}
1
+ {"version":3,"file":"context-D0A0LxsP.mjs","names":[],"sources":["../src/context.ts"],"sourcesContent":["import fs from 'node:fs';\n\nimport type { StricliAutoCompleteContext } from '@stricli/auto-complete';\nimport type { CommandContext } from '@stricli/core';\n\n/**\n * Logger methods available to CLI commands.\n */\nexport type CliLogger = Pick<Console, 'debug' | 'error' | 'info' | 'log' | 'warn'>;\n\n/**\n * Runtime dependencies used to build a CLI context.\n */\nexport interface BuildContextOptions {\n /** Filesystem implementation */\n readonly fs?: typeof fs;\n /** Logger implementation */\n readonly logger?: CliLogger;\n}\n\nexport interface LocalContext extends CommandContext, StricliAutoCompleteContext {\n /** The Node.js process object */\n readonly process: NodeJS.Process;\n /** Filesystem implementation */\n readonly fs: typeof fs;\n /** Logger implementation */\n readonly logger: CliLogger;\n}\n\n/**\n * Builds the context for the CLI.\n *\n * @param process - The Node.js process object.\n * @param options - Optional runtime dependency overrides.\n * @returns The context for the CLI.\n */\nexport function buildContext(\n process: NodeJS.Process,\n options: BuildContextOptions = {},\n): LocalContext {\n return {\n process,\n fs: options.fs ?? fs,\n logger: options.logger ?? console,\n };\n}\n"],"mappings":"uBAoCA,SAAgB,EACd,EACA,EAA+B,EAAE,CACnB,CACd,MAAO,CACL,UACA,GAAI,EAAQ,IAAM,EAClB,OAAQ,EAAQ,QAAU,QAC3B"}
@@ -1,14 +1,14 @@
1
- import{i as e}from"./constants-XH8NIJGC.mjs";import{createReadStream as t,readFileSync as n,statSync as r}from"node:fs";import{basename as i}from"node:path";import a from"colors";import*as o from"node:readline";const s={readFile:e=>n(e,`utf8`),stdout:process.stdout};function c(e,t,n,r={}){let i=r.readFile??s.readFile,a=r.stdout??s.stdout;a.write(`\x1B[2J\x1B[H`);let o=e=>/\b(ERROR|uncaughtException|unhandledRejection)\b/i.test(e),c=e=>/\b(WARN|WARNING)\b/i.test(e),l=[];for(let[,r]of e){if(!r)continue;let e=[];for(let n of t)n===`out`&&r.outPath&&e.push({path:r.outPath,src:`out`}),n===`err`&&r.errPath&&e.push({path:r.errPath,src:`err`}),n===`structured`&&r.structuredPath&&e.push({path:r.structuredPath,src:`structured`}),r.warnPath&&n===`warn`&&e.push({path:r.warnPath,src:`warn`}),r.infoPath&&n===`info`&&e.push({path:r.infoPath,src:`info`});for(let{path:t,src:r}of e){let e=``;try{e=i(t)}catch{continue}for(let t of e.split(`
1
+ import{i as e}from"./constants-BRsj50Nb.mjs";import{basename as t}from"node:path";import n from"colors";import{createReadStream as r,readFileSync as i,statSync as a}from"node:fs";import*as o from"node:readline";const s={readFile:e=>i(e,`utf8`),stdout:process.stdout};function c(e,t,n,r={}){let i=r.readFile??s.readFile,a=r.stdout??s.stdout;a.write(`\x1B[2J\x1B[H`);let o=e=>/\b(ERROR|uncaughtException|unhandledRejection)\b/i.test(e),c=e=>/\b(WARN|WARNING)\b/i.test(e),l=[];for(let[,r]of e){if(!r)continue;let e=[];for(let n of t)n===`out`&&r.outPath&&e.push({path:r.outPath,src:`out`}),n===`err`&&r.errPath&&e.push({path:r.errPath,src:`err`}),n===`structured`&&r.structuredPath&&e.push({path:r.structuredPath,src:`structured`}),r.warnPath&&n===`warn`&&e.push({path:r.warnPath,src:`warn`}),r.infoPath&&n===`info`&&e.push({path:r.infoPath,src:`info`});for(let{path:t,src:r}of e){let e=``;try{e=i(t)}catch{continue}for(let t of e.split(`
2
2
  `)){if(!t)continue;let e=t.replace(/\x1B\[[0-9;]*m/g,``);if(n===`all`){l.push(t);continue}if(n===`error`){o(e)&&l.push(t);continue}if(c(e)||r===`err`&&!o(e)){l.push(t);continue}}}}l.sort((e,t)=>{let n=e.match(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/)?.[0]??``,r=t.match(/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/)?.[0]??``;return n.localeCompare(r)}),a.write(`${l.join(`
3
3
  `)}\n`),a.write(`
4
4
  Press Esc/Ctrl+] to return to dashboard.
5
- `)}function l(e,t,n){if(t.ctrl&&t.name===`c`)return{type:`CTRL_C`};if(n===`dashboard`)return t.name&&/^[0-9]$/.test(t.name)?{type:`ATTACH`,id:Number(t.name)}:t.name===`tab`&&!t.shift?{type:`CYCLE`,delta:1}:t.name===`tab`&&t.shift?{type:`CYCLE`,delta:-1}:t.name===`q`?{type:`QUIT`}:null;if(t.name===`escape`||t.ctrl&&t.name===`]`)return{type:`DETACH`};if(t.ctrl&&t.name===`d`)return{type:`CTRL_D`};let r=t.sequence??e??``;return r?{type:`FORWARD`,sequence:r}:null}const u={createReadStream:t,statSync:r};async function d(e,t,n,r=u){await new Promise(i=>{try{let a=r.statSync(e),o=Math.max(0,a.size-t),s=r.createReadStream(e,{start:o,encoding:`utf8`});s.on(`data`,e=>n(e)),s.on(`end`,()=>i()),s.on(`error`,()=>i())}catch{i()}})}function f(e){return[...e.keys()].sort((e,t)=>e-t)}function p(e,t,n){if(!e.length)return null;let r=t??e[0],i=e.indexOf(r);return i===-1&&(i=0),i=(i+n+e.length)%e.length,e[i]}function m(t){let{workers:n,onAttach:r,onDetach:i,onCtrlC:a,getLogPaths:s,replayBytes:c=200*1024,replayWhich:u=[`out`,`err`],onEnterAttachScreen:m,ports:h}=t,g=h?.stdin??process.stdin,_=h?.stdout??process.stdout,v=h?.stderr??process.stderr,y=(...t)=>{if(e)try{(h?.stderr??process.stderr).write(`[keys] ${t.map(String).join(` `)}\n`)}catch{}};if(!g.isTTY)return()=>{};(h?.emitKeypressEvents??o.emitKeypressEvents)(g),g.setRawMode?.(!0);let b=`dashboard`,x=null,S=null,C=null;async function w(e){if(!s)return;let t=s(e);if(!t)return;let n=[];for(let e of u)e===`out`&&n.push(t.outPath),e===`err`&&n.push(t.errPath),e===`structured`&&n.push(t.structuredPath);if(n.length){_.write(`
5
+ `)}function l(e,t,n){if(t.ctrl&&t.name===`c`)return{type:`CTRL_C`};if(n===`dashboard`)return t.name&&/^[0-9]$/.test(t.name)?{type:`ATTACH`,id:Number(t.name)}:t.name===`tab`&&!t.shift?{type:`CYCLE`,delta:1}:t.name===`tab`&&t.shift?{type:`CYCLE`,delta:-1}:t.name===`q`?{type:`QUIT`}:null;if(t.name===`escape`||t.ctrl&&t.name===`]`)return{type:`DETACH`};if(t.ctrl&&t.name===`d`)return{type:`CTRL_D`};let r=t.sequence??e??``;return r?{type:`FORWARD`,sequence:r}:null}const u={createReadStream:r,statSync:a};async function d(e,t,n,r=u){await new Promise(i=>{try{let a=r.statSync(e),o=Math.max(0,a.size-t),s=r.createReadStream(e,{start:o,encoding:`utf8`});s.on(`data`,e=>n(e)),s.on(`end`,()=>i()),s.on(`error`,()=>i())}catch{i()}})}function f(e){return[...e.keys()].sort((e,t)=>e-t)}function p(e,t,n){if(!e.length)return null;let r=t??e[0],i=e.indexOf(r);return i===-1&&(i=0),i=(i+n+e.length)%e.length,e[i]}function m(t){let{workers:n,onAttach:r,onDetach:i,onCtrlC:a,getLogPaths:s,replayBytes:c=200*1024,replayWhich:u=[`out`,`err`],onEnterAttachScreen:m,ports:h}=t,g=h?.stdin??process.stdin,_=h?.stdout??process.stdout,v=h?.stderr??process.stderr,y=(...t)=>{if(e)try{(h?.stderr??process.stderr).write(`[keys] ${t.map(String).join(` `)}\n`)}catch{}};if(!g.isTTY)return()=>{};(h?.emitKeypressEvents??o.emitKeypressEvents)(g),g.setRawMode?.(!0);let b=`dashboard`,x=null,S=null,C=null;async function w(e){if(!s)return;let t=s(e);if(!t)return;let n=[];for(let e of u)e===`out`&&n.push(t.outPath),e===`err`&&n.push(t.errPath),e===`structured`&&n.push(t.structuredPath);if(n.length){_.write(`
6
6
  ------------ replay ------------
7
7
  `);for(let e of n)_.write(`\n--- ${e} (last ~${Math.floor(c/1024)}KB) ---\n`),await d(e,c,e=>_.write(e));_.write(`
8
8
  --------------------------------
9
9
 
10
- `)}}let T=async e=>{y(`attach()`,`id=${e}`);let t=n.get(e);t&&(b===`attached`&&E(),b=`attached`,x=e,m?.(e),r?.(e),await w(e),S=e=>_.write(e),C=e=>v.write(e),t.stdout?.on(`data`,S),t.stderr?.on(`data`,C),t.once(`exit`,()=>{x===e&&E()}))},E=()=>{if(y(`detach()`,`id=${x}`),x==null)return;let e=x,t=n.get(e);t&&(S&&t.stdout?.off(`data`,S),C&&t.stderr?.off(`data`,C)),S=null,C=null,x=null,b=`dashboard`,i?.()},D=(e,t)=>{y(`keypress`,JSON.stringify({str:e,name:t.name,seq:t.sequence,ctrl:t.ctrl,meta:t.meta,shift:t.shift,mode:b}));let r=l(e,t,b);if(y(`mapped`,JSON.stringify(r)),r)switch(r.type){case`CTRL_C`:if(y(`CTRL_C`),b===`attached`&&x!=null){let e=n.get(x);try{e?.kill(`SIGINT`)}catch{}E();return}a?.();return;case`ATTACH`:if(y(`ATTACH`,`id=${r.id}`,`has=${n.has(r.id)}`),b!==`dashboard`)return;n.has(r.id)&&T(r.id);return;case`CYCLE`:{if(y(`CYCLE`,`delta=${r.delta}`),b!==`dashboard`)return;let e=p(f(n),x,r.delta);e!=null&&T(e);return}case`QUIT`:if(b!==`dashboard`)return;a?.();return;case`DETACH`:y(`DETACH`),b===`attached`&&E();return;case`CTRL_D`:if(b===`attached`&&x!=null){let e=n.get(x);try{e?.stdin?.end()}catch{}}return;case`FORWARD`:if(b===`attached`&&x!=null){let e=n.get(x);try{e?.stdin?.write(r.sequence)}catch{}}}},O=e=>{if(b===`attached`&&x!=null){let t=n.get(x);try{t?.stdin?.write(e)}catch{}}};return g.on(`keypress`,D),g.on(`data`,O),()=>{g.off(`keypress`,D),g.off(`data`,O),g.setRawMode?.(!1),_.write(`\x1B[?25h`)}}const h={stdout:process.stdout,cursorTo:o.cursorTo,clearScreenDown:o.clearScreenDown},g=new WeakMap,_=(e,t)=>{let n=Math.min(e-1,9),r=e<=1?`0`:`0-${n}`,i=e>10?` (Tab/Shift+Tab for ≥10)`:``;return t?a.dim(`Run complete — digits to view logs • Tab/Shift+Tab cycle • Esc/Ctrl+] detach • q to quit`):a.dim(`Hotkeys: [${r}] attach${i} • e=errors • w=warnings • i=info • l=logs • Tab/Shift+Tab • Esc/Ctrl+] detach • Ctrl+C exit`)};function v(e,t,n=!1,r=h){let i=[...t.renderHeader(e),``,...t.renderWorkers(e),...n?[]:[``,_(e.poolSize,e.final)],...t.renderExtras?[``].concat(t.renderExtras(e)):[]].join(`
11
- `);!e.final&&i===g.get(r.stdout)||(g.set(r.stdout,i),e.final?r.stdout.write(`\x1B[?25h`):(r.stdout.write(`\x1B[?25l`),r.cursorTo(r.stdout,0,0),r.clearScreenDown(r.stdout)),r.stdout.write(`${i}\n`))}function y(e){return typeof e==`number`?e.toLocaleString():`0`}function b(e,t=40){let n=Math.floor(Math.max(0,Math.min(100,Math.floor(e)))/100*t);return`█`.repeat(n)+`░`.repeat(t-n)}function x(e){let t=[...e.workerState.values()].filter(e=>e.busy).length,n=e.filesCompleted+e.filesFailed;return{done:n,inProgress:t,pct:e.filesTotal===0?100:Math.floor(n/Math.max(1,e.filesTotal)*100)}}function S(e,t=[]){let{title:n,poolSize:r,cpuCount:i,filesTotal:o,filesCompleted:s,filesFailed:c,throughput:l}=e,{inProgress:u,pct:d}=x(e),f=[`${a.bold(n)} — ${r} workers ${a.dim(`(CPU avail: ${i})`)}`,`${a.dim(`Files`)} ${y(o)} ${a.dim(`Completed`)} ${y(s)} ${a.dim(`Failed`)} ${c?a.red(y(c)):y(c)} ${a.dim(`In-flight`)} ${y(u)}`,`[${b(d)}] ${d}%`];if(l){let t=l.jobsR10s>0||l.jobsR60s>0,n=Math.round((t?l.jobsR10s:l.r10s)*3600).toLocaleString(),r=Math.round((t?l.jobsR60s:l.r60s)*3600).toLocaleString(),i=t?`rec`:`files`,o=e.throughput?.successSoFar==null?``:` Newly uploaded: ${y(e.throughput.successSoFar)}`;f.push(a.cyan(`Throughput: ${n} ${i}/hr (1h: ${r} ${i}/hr)${o}`))}return t.length?f.concat(t):f}function C(e,t=e=>e?i(e):`-`){return[...e.workerState.entries()].map(([e,n])=>{let r=n.lastLevel===`error`?a.red(`ERROR `):n.lastLevel===`warn`?a.yellow(`WARN `):n.busy?a.green(`WORKING`):a.dim(`IDLE `),i=t(n.file),o=n.startedAt?`${Math.floor((Date.now()-n.startedAt)/1e3)}s`:`-`,s=n.progress?.processed??0,c=n.progress?.total??0,l=c>0?Math.floor(s/c*100):0;return` [w${e}] ${r} | ${i} | ${o} | [${c>0?b(l,18):` `.repeat(18)}] ${c>0?`${s.toLocaleString()}/${c.toLocaleString()} (${l}%)`:a.dim(`—`)}`})}function w(e){let{logsBySlot:t,repaint:n,setPaused:r,exportMgr:i,exportStatus:a,stdout:o=process.stdout,now:s=Date.now,custom:l}=e,u=e=>{o.write(`${e}\n`)},d=(e,t)=>{let r=s(),i=a?.[e]??{path:t};a&&(a[e]={path:t||i.path,savedAt:r,exported:!0},n())},f=!1,p=(e,i)=>{f||(f=!0,r(!0),o.write(`\x1B[2J\x1B[H`),o.write(`Combined logs viewer (press Esc or Ctrl+] to return)
10
+ `)}}let T=async e=>{y(`attach()`,`id=${e}`);let t=n.get(e);t&&(b===`attached`&&E(),b=`attached`,x=e,m?.(e),r?.(e),await w(e),S=e=>_.write(e),C=e=>v.write(e),t.stdout?.on(`data`,S),t.stderr?.on(`data`,C),t.once(`exit`,()=>{x===e&&E()}))},E=()=>{if(y(`detach()`,`id=${x}`),x==null)return;let e=x,t=n.get(e);t&&(S&&t.stdout?.off(`data`,S),C&&t.stderr?.off(`data`,C)),S=null,C=null,x=null,b=`dashboard`,i?.()},D=(e,t)=>{y(`keypress`,JSON.stringify({str:e,name:t.name,seq:t.sequence,ctrl:t.ctrl,meta:t.meta,shift:t.shift,mode:b}));let r=l(e,t,b);if(y(`mapped`,JSON.stringify(r)),r)switch(r.type){case`CTRL_C`:if(y(`CTRL_C`),b===`attached`&&x!=null){let e=n.get(x);try{e?.kill(`SIGINT`)}catch{}E();return}a?.();return;case`ATTACH`:if(y(`ATTACH`,`id=${r.id}`,`has=${n.has(r.id)}`),b!==`dashboard`)return;n.has(r.id)&&T(r.id);return;case`CYCLE`:{if(y(`CYCLE`,`delta=${r.delta}`),b!==`dashboard`)return;let e=p(f(n),x,r.delta);e!=null&&T(e);return}case`QUIT`:if(b!==`dashboard`)return;a?.();return;case`DETACH`:y(`DETACH`),b===`attached`&&E();return;case`CTRL_D`:if(b===`attached`&&x!=null){let e=n.get(x);try{e?.stdin?.end()}catch{}}return;case`FORWARD`:if(b===`attached`&&x!=null){let e=n.get(x);try{e?.stdin?.write(r.sequence)}catch{}}}},O=e=>{if(b===`attached`&&x!=null){let t=n.get(x);try{t?.stdin?.write(e)}catch{}}};return g.on(`keypress`,D),g.on(`data`,O),()=>{g.off(`keypress`,D),g.off(`data`,O),g.setRawMode?.(!1),_.write(`\x1B[?25h`)}}const h={stdout:process.stdout,cursorTo:o.cursorTo,clearScreenDown:o.clearScreenDown},g=new WeakMap,_=(e,t)=>{let r=Math.min(e-1,9),i=e<=1?`0`:`0-${r}`,a=e>10?` (Tab/Shift+Tab for ≥10)`:``;return t?n.dim(`Run complete — digits to view logs • Tab/Shift+Tab cycle • Esc/Ctrl+] detach • q to quit`):n.dim(`Hotkeys: [${i}] attach${a} • e=errors • w=warnings • i=info • l=logs • Tab/Shift+Tab • Esc/Ctrl+] detach • Ctrl+C exit`)};function v(e,t,n=!1,r=h){let i=[...t.renderHeader(e),``,...t.renderWorkers(e),...n?[]:[``,_(e.poolSize,e.final)],...t.renderExtras?[``].concat(t.renderExtras(e)):[]].join(`
11
+ `);!e.final&&i===g.get(r.stdout)||(g.set(r.stdout,i),e.final?r.stdout.write(`\x1B[?25h`):(r.stdout.write(`\x1B[?25l`),r.cursorTo(r.stdout,0,0),r.clearScreenDown(r.stdout)),r.stdout.write(`${i}\n`))}function y(e){return typeof e==`number`?e.toLocaleString():`0`}function b(e,t=40){let n=Math.floor(Math.max(0,Math.min(100,Math.floor(e)))/100*t);return`█`.repeat(n)+`░`.repeat(t-n)}function x(e){let t=[...e.workerState.values()].filter(e=>e.busy).length,n=e.filesCompleted+e.filesFailed;return{done:n,inProgress:t,pct:e.filesTotal===0?100:Math.floor(n/Math.max(1,e.filesTotal)*100)}}function S(e,t=[]){let{title:r,poolSize:i,cpuCount:a,filesTotal:o,filesCompleted:s,filesFailed:c,throughput:l}=e,{inProgress:u,pct:d}=x(e),f=[`${n.bold(r)} — ${i} workers ${n.dim(`(CPU avail: ${a})`)}`,`${n.dim(`Files`)} ${y(o)} ${n.dim(`Completed`)} ${y(s)} ${n.dim(`Failed`)} ${c?n.red(y(c)):y(c)} ${n.dim(`In-flight`)} ${y(u)}`,`[${b(d)}] ${d}%`];if(l){let t=l.jobsR10s>0||l.jobsR60s>0,r=Math.round((t?l.jobsR10s:l.r10s)*3600).toLocaleString(),i=Math.round((t?l.jobsR60s:l.r60s)*3600).toLocaleString(),a=t?`rec`:`files`,o=e.throughput?.successSoFar==null?``:` Newly uploaded: ${y(e.throughput.successSoFar)}`;f.push(n.cyan(`Throughput: ${r} ${a}/hr (1h: ${i} ${a}/hr)${o}`))}return t.length?f.concat(t):f}function C(e,r=e=>e?t(e):`-`){return[...e.workerState.entries()].map(([e,t])=>{let i=t.lastLevel===`error`?n.red(`ERROR `):t.lastLevel===`warn`?n.yellow(`WARN `):t.busy?n.green(`WORKING`):n.dim(`IDLE `),a=r(t.file),o=t.startedAt?`${Math.floor((Date.now()-t.startedAt)/1e3)}s`:`-`,s=t.progress?.processed??0,c=t.progress?.total??0,l=c>0?Math.floor(s/c*100):0;return` [w${e}] ${i} | ${a} | ${o} | [${c>0?b(l,18):` `.repeat(18)}] ${c>0?`${s.toLocaleString()}/${c.toLocaleString()} (${l}%)`:n.dim(`—`)}`})}function w(e){let{logsBySlot:t,repaint:n,setPaused:r,exportMgr:i,exportStatus:a,stdout:o=process.stdout,now:s=Date.now,custom:l}=e,u=e=>{o.write(`${e}\n`)},d=(e,t)=>{let r=s(),i=a?.[e]??{path:t};a&&(a[e]={path:t||i.path,savedAt:r,exported:!0},n())},f=!1,p=(e,i)=>{f||(f=!0,r(!0),o.write(`\x1B[2J\x1B[H`),o.write(`Combined logs viewer (press Esc or Ctrl+] to return)
12
12
 
13
13
  `),(async()=>{try{await c(t,e,i,{stdout:o})}catch{f=!1,r(!1),n()}})())},m=(e,n)=>{if(i)try{let r=i.exportCombinedLogs(t,e);u(`\nWrote combined ${n} logs to: ${r}`),d(e,r)}catch{u(`\nFailed to write combined ${n} logs`)}};return e=>{let t=e.toString(`utf8`);if(t===`e`){p([`err`],`error`);return}if(t===`w`){p([`warn`,`err`],`warn`);return}if(t===`i`){p([`info`],`all`);return}if(t===`l`){p([`out`,`err`,`structured`],`all`);return}if(t===`E`){m(`error`,`error`);return}if(t===`W`){m(`warn`,`warn`);return}if(t===`I`){m(`info`,`info`);return}if(t===`A`){m(`all`,`ALL`);return}let i=l?.[t];if(i){i({noteExport:d,say:u});return}(t===`\x1B`||t===``)&&(f=!1,r(!1),n())}}function T(e,t,n){let{process:r}=e;return{render:e=>v(e,t,n,{stdout:r.stdout,cursorTo:o.cursorTo,clearScreenDown:o.clearScreenDown}),installInteractiveSwitcher:n?void 0:({workers:e,onCtrlC:t,getLogPaths:n,replayBytes:i,replayWhich:a,setPaused:s,repaint:c})=>m({workers:e,onCtrlC:t,getLogPaths:n,replayBytes:i,replayWhich:a,ports:{stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,emitKeypressEvents:o.emitKeypressEvents},onAttach:()=>s(!0),onDetach:()=>{s(!1),c()},onEnterAttachScreen:e=>{s(!0),r.stdout.write(`\x1B[2J\x1B[H`),r.stdout.write(`Attached to worker ${e}. (Esc/Ctrl+] detach • Ctrl+D EOF • Ctrl+C SIGINT)\n`)}}),extraKeyHandler:({logsBySlot:e,repaint:t,setPaused:n})=>w({logsBySlot:e,repaint:t,setPaused:n,stdout:r.stdout})}}export{S as n,C as r,T as t};
14
- //# sourceMappingURL=createPoolingCommandUi-BtyIMQcK.mjs.map
14
+ //# sourceMappingURL=createPoolingCommandUi-CyPZ3GqN.mjs.map