@sakajunquality/bunko 0.8.0 → 0.8.1
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.
- package/PROVENANCE.jsonl +1 -1
- package/README.md +4 -4
- package/SHA256SUMS +1 -1
- package/bunko.js +1 -1
- package/package.json +1 -1
package/PROVENANCE.jsonl
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"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"},"tlogEntries":[{"logIndex":"2815094422","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"dsse","version":"0.0.1"},"integratedTime":"1789283410","inclusionPromise":{"signedEntryTimestamp":"MEUCIB0Vozivl7UNnqOa3UNmrNxMDEq2bD9hfhiLkSCTdxDSAiEAu+bxyrZGuYkWvgK0vpco+ddSLfUID/eOsKt5g2Oomic="},"inclusionProof":{"logIndex":"2693190160","rootHash":"ck0xqrLrTMpxBAL/gFNjNX2QqN1YZfWkHcfEnHSfykg=","treeSize":"2693190181","hashes":["vf/jmtwtedaAlbHn/qHdj54+0NKOklAt6vzt/veo6dk=","57MDgZWWYjdg2cd8WFpslzgilBpTkTRFPNvmoDzljC0=","aevg2vZd9QITwmaidiLH+znoa7r9Zb2yRkK8T9Wbnig=","QJ9/uLDfAj/de8n5J/q8D9L6tigNcgvPqS1Ik1adUxQ=","djB4axDA48wCl5Ziseccw3ZVjE1tHdivhWnbeaUtEJQ=","yZvutfZpGwXPvdCm9qgNp5BFdPyrB2E+bFzlCwMNJSQ=","N3Vmoew+WYK6VB2zKD6ydDnGvJHCsIxvUHQbXBV9ZJw=","b7gF3rNFTRhSO/p3IF86Sa2VRL/HpsR6VCMXrViS5WY=","IIHISYzl79DFLpouCGkuGRA8OUmJPjb1ZBxdhW82oY4=","/q8VcgcU1JRKtS9oefYp3uyZwjeEbmyE3VCbk2unBYQ=","KrC+krMAftM0IG3H0/SvS5MaeYNRjjXdspEwlYrmlZk=","0aaMWWYvGQZ6lwk/izhs27P1JBMZZc3qlluO2wPibqQ=","S39m2eTD1rqRuAMs4r+sGsYIwW0BlTWuysWTKJ8RKVk=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n2693190181\nck0xqrLrTMpxBAL/gFNjNX2QqN1YZfWkHcfEnHSfykg=\n\n— rekor.sigstore.dev wNI9ajBGAiEAo55vwnMHQB4E+xbpFJN9ikCwtHmntNiLMNvWEV/sPusCIQCiZVvEJMAHlyTJgUZgBAhjWTAaYF8wQht0sXdq51q5TA==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiZjE5NmU0NjZlZTJiY2NhNjQ1ZmE0MGFkZDY4YTI0YzhlNGViNzE5OTY3Y2ZmYTAzZTMyZDA4ZmRhMDVkZjdmNCJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6ImY0Zjk4MzQ3NzYzNzc5ZmIxNWRiZjE0NzQxZGJiMjFlYmNhYWU3ZTRiNGM3OGNkZTU2YzNjNjE2NWI4ZWU3ZGQifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVVQ0lRREpRcXVvMHVPaXVrb1lSNGNHM1dzS05TQU9udjRsYzVhb2o1cGdYRnpNV1FJZ0NQWENFQWgvdFVKNDZPQVJ1T25qcGZkSFpJZjJnRVMxeitYUjFacVhnVG89IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoR1ZFTkRRbkJ4WjBGM1NVSkJaMGxWVUVkbFRFUlRUMnd6WVZFMk9VVjZiRVZIVEdsS05UVjNiMnBOZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwWmQwOVVSWHBOUkdONFRVUkZkMWRvWTA1TmFsbDNUMVJGZWsxRVkzbE5SRVYzVjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVm9TVEZsYUN0SFpFVkJkbEUxVURnek9FOXlZa29yYjNaamVqZFVaVUZqYVhWNVkwc0taRzByWldGblQwaFRhMWRYY2xoT01FOUNSR0ZhTmtaQ1lrMUZkbFoxUzBWWmRqTjZjRGwyVG1KcVRERjJTM0l6VEV0UFEwSmlhM2RuWjFjeFRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVnpXVEJhQ2pKRWIxaDJNaTloZG0xcEszbERibGw2V0ZSbWF6UlJkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMXBCV1VSV1VqQlNRVkZJTDBKR2IzZFhTVnBYWVVoU01HTklUVFpNZVRsdVlWaFNiMlJYU1hWWk1qbDBURE5PYUdFeVJuRmtWelY0WkZkR2N3cGhXRkkxVERKS01XSnRkSFpNZVRWdVlWaFNiMlJYU1haa01qbDVZVEphYzJJelpIcE1NMHBzWWtkV2FHTXlWWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVDbU41T1RKTlF6UTBUR3BCZDA5UldVdExkMWxDUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEFLWkVkb01WbHVWbnBhV0VwcVlqSTFNRnBYTlRCTWJVNTJZbFJCVTBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVZKM1pGaE9iMDFFV1VkRGFYTkhRVkZSUWdwbk56aDNRVkZOUlV0RWJHeFpla1UxV1dwamVWbFVTbXhhYW1ocFRtcFdhMDE2YTNwTmVrVXhUa1JSTkU1SFJUTmFSMVV4V1dwTmQwMVhSVEpOYWtGM0NrWlJXVXRMZDFsQ1FrRkhSSFo2UVVKQ1FWRklWVzFXYzFwWFJucGFWRUZwUW1kdmNrSm5SVVZCV1U4dlRVRkZSa0pDVW5wWlYzUm9ZVzVXZFdOWVZtZ0tZa2RzTUdWVE9XbGtWelZ5WW5wQlpVSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrSjVXbGRhZWt3elVtaGFNMDEyWkdwQmRVOUROSGROUkhOSFEybHpSd3BCVVZGQ1p6YzRkMEZSWjBWTVVYZHlZVWhTTUdOSVRUWk1lVGt3WWpKMGJHSnBOV2haTTFKd1lqSTFla3h0WkhCa1IyZ3hXVzVXZWxwWVNtcGlNalV3Q2xwWE5UQk1iVTUyWWxSQ2JVSm5iM0pDWjBWRlFWbFBMMDFCUlVwQ1JtZE5WbTFvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVlbGxYZEdnS1lXNVdkV05ZVm1oaVIyd3daVk01YVdSWE5YSmllVGgxV2pKc01HRklWbWxNTTJSMlkyMTBiV0pIT1ROamVUbDVXbGQ0YkZsWVRteE1ibXgwWWtWQ2VRcGFWMXA2VEROU2FGb3pUWFprYWtGMVQwTTBkMDFFWjBkRGFYTkhRVkZSUW1jM09IZEJVVzlGUzJkM2IwOVhWbXBOVkd4cFRucEthRTF0Vm0xUFIwa3lDazVYVVhwUFZFMTZUVlJWTUU1RVp6QlpWR1JyV2xSV2FVMTZRWGhaVkZsNVRVUkJaRUpuYjNKQ1owVkZRVmxQTDAxQlJVeENRVGhOUkZka2NHUkhhREVLV1dreGIySXpUakJhVjFGM1RuZFpTMHQzV1VKQ1FVZEVkbnBCUWtSQlVYQkVRMlJ2WkVoU2QyTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJZekpHY2dwWlYzQXhZbTVHTVZsWGVIQmtTR3QyV1c1V2RXRXlPSGRQUVZsTFMzZFpRa0pCUjBSMmVrRkNSRkZSY1VSRFp6VmFWMDE0VDFkSk0wMXRSWGxhVjFrMENsbHFXVEZhUkUwMVRYcE5lRTVVVVRCUFJGSm9UakpTYkU1WFNYcE5SRVpvVG1wSmQwMURRVWREYVhOSFFWRlJRbWMzT0hkQlVUUkZSV2QzVVdOdFZtMEtZM2s1TUZsWFpIcE1NMWwzVEdwbmRVMUVRV0ZDWjI5eVFtZEZSVUZaVHk5TlFVVlFRa0YzVFVOcVJYcE9WR3MwVFZSVk5FNUVRWGROVVZsTFMzZFpRZ3BDUVVkRWRucEJRa1ZCVVdwRVEwWnZaRWhTZDJONmIzWk1NbVJ3WkVkb01WbHBOV3BpTWpCMll6SkdjbGxYY0RGaWJrWXhXVmQ0Y0dSSWEzZEdkMWxMQ2t0M1dVSkNRVWRFZG5wQlFrVlJVVXBFUVdONVRucEZNVTE2U1RCTlIxbEhRMmx6UjBGUlVVSm5OemgzUVZKSlJWZEJlRmRoU0ZJd1kwaE5Oa3g1T1c0S1lWaFNiMlJYU1hWWk1qbDBURE5PYUdFeVJuRmtWelY0WkZkR2MyRllValZNTWtveFltMTBka3g1Tlc1aFdGSnZaRmRKZG1ReU9YbGhNbHB6WWpOa2VncE1NMHBzWWtkV2FHTXlWWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxRE5EUk1ha0YzVDBGWlMwdDNXVUpDUVVkRWRucEJRa1YzVVhGRVEyYzFDbHBYVFhoUFYwa3pUVzFGZVZwWFdUUlphbGt4V2tSTk5VMTZUWGhPVkZFd1QwUlNhRTR5VW14T1YwbDZUVVJHYUU1cVNYZE5RbEZIUTJselIwRlJVVUlLWnpjNGQwRlNVVVZDWjNkRlkwaFdlbUZFUW1KQ1oyOXlRbWRGUlVGWlR5OU5RVVZXUWtVd1RWTXlhREJrU0VKNlQyazRkbG95YkRCaFNGWnBURzFPZGdwaVV6bDZXVmQwYUdGdVZuVmpXRlpvWWtkc01HVlRPV2xrVnpWeVluazVhRmt6VW5CaU1qVjZURE5LTVdKdVRYWk5lbEV6VGtSUk1FNUVRVFZPYWtsMkNsbFlVakJhVnpGM1pFaE5kazFVUVZkQ1oyOXlRbWRGUlVGWlR5OU5RVVZYUWtGblRVSnVRakZaYlhod1dYcENVa0puYjNKQ1owVkZRVmxQTDAxQlJWa0tRa1ZOVFZGWVNteGpSemcyWXpKR2NsbFhjREZpYmtZeFdWZDRjR1JJYkVGTmFtTjRUbFJOZVU1RE9XbGtWelZ5WWpCQmVFMTZWVFZQUkVVeFQwUlJkd3BQYmtwc1dtcHdlVnBYV25wTU0xSm9Xak5OZG1ScVFYVlBRelIzVFVsSFMwSm5iM0pDWjBWRlFXUmFOVUZuVVVOQ1NIZEZaV2RDTkVGSVdVRXpWREIzQ21GellraEZWRXBxUjFJMFkyMVhZek5CY1VwTFdISnFaVkJMTXk5b05IQjVaME00Y0Rkdk5FRkJRVWRuYlZwdmFXaFJRVUZDUVUxQlVucENSa0ZwUlVFS2JIZERNRlJoU214cWF6WnhZVVJqT1ZGaEszZGtUMWxzZWxSamJHUlhSbnBTU2k5T1RVWm1kRkI1VVVOSlJTOW9RemwxZVhnMlZuZHpVbFZEU0hCdk5BcFhkMUp0TUdoYVdWTlBUMVphYURkVk1IQmhURGxCZEhKTlFXOUhRME54UjFOTk5EbENRVTFFUVRKclFVMUhXVU5OVVVReWIxQndlWGxQTUhsNmF6bFZDbXAyYm1GbFJVOVVjbUpOVFhGV1VYaFdTbVpUWlRodmQwSnhNV3RTTWpoR1QwUTBRWE4yTWxVNVlqRlNOMDFEWlRWelowTk5VVU5XWVZoQ05FZFpWWG9LY2xrclpVazVSRXhDTDNBMFEweDRTMVJwU20xVU5UWkZWMlF6VVVKelUwOHdNbEkzU0d4NVNuaGpUSE5ZZFRkdlMzQktjM2x2VlQwS0xTMHRMUzFGVGtRZ1EwVlNWRWxHU1VOQlZFVXRMUzB0TFFvPSJ9XX19"}],"timestampVerificationData":{}},"dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjEiLCJzdWJqZWN0IjpbeyJuYW1lIjoiYnVua28uanMiLCJkaWdlc3QiOnsic2hhMjU2IjoiZWNlY2YyOTZiZDlhZTIwMmQxY2U0ZGZjNTRlOGMxMjU1MzEzYTA5ODNlNzBhOWU2MThkZDllMDVjZDU4ZDdlNyJ9fSx7Im5hbWUiOiJTSEEyNTZTVU1TIiwiZGlnZXN0Ijp7InNoYTI1NiI6ImY4MzQ0NTE0YTIwZTczZTBlNTJjZGE4Y2QzMjNiNzBjM2RlOTliNDlmMzA1ZGE2ZTk0MDc0NDQ4NTAxZWIyNDcifX0seyJuYW1lIjoiTElDRU5TRSIsImRpZ2VzdCI6eyJzaGEyNTYiOiJiNzY2M2E5YzE1N2RlNDc3NzAwN2VhZDQyMTVjNDI3NDIwZjhlYmZiODlhMjQzNTk4NDU0YzdhNmU5MWE5MjNkIn19LHsibmFtZSI6IlRISVJEX1BBUlRZX05PVElDRVMubWQiLCJkaWdlc3QiOnsic2hhMjU2IjoiODQzNzljZWM4ZGM1YjkzYmMyYWQzM2I2ZDJiMmIzNzEzZDRiMjAxZWI1MGNhNGNiNTFiMjcxZDY2Y2JlYjI3MCJ9fV0sInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjEiLCJwcmVkaWNhdGUiOnsiYnVpbGREZWZpbml0aW9uIjp7ImJ1aWxkVHlwZSI6Imh0dHBzOi8vYWN0aW9ucy5naXRodWIuaW8vYnVpbGR0eXBlcy93b3JrZmxvdy92MSIsImV4dGVybmFsUGFyYW1ldGVycyI6eyJ3b3JrZmxvdyI6eyJyZWYiOiJyZWZzL3RhZ3MvdjAuOC4wIiwicmVwb3NpdG9yeSI6Imh0dHBzOi8vZ2l0aHViLmNvbS9zYWthanVucXVhbGl0eS9idW5rbyIsInBhdGgiOiIuZ2l0aHViL3dvcmtmbG93cy9yZWxlYXNlLnltbCJ9fSwiaW50ZXJuYWxQYXJhbWV0ZXJzIjp7ImdpdGh1YiI6eyJldmVudF9uYW1lIjoicHVzaCIsInJlcG9zaXRvcnlfaWQiOiIxMzU5ODE1ODQwIiwicmVwb3NpdG9yeV9vd25lcl9pZCI6IjI3MTUzMjQiLCJydW5uZXJfZW52aXJvbm1lbnQiOiJnaXRodWItaG9zdGVkIn19LCJyZXNvbHZlZERlcGVuZGVuY2llcyI6W3sidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9zYWthanVucXVhbGl0eS9idW5rb0ByZWZzL3RhZ3MvdjAuOC4wIiwiZGlnZXN0Ijp7ImdpdENvbW1pdCI6IjllYzE5YjcyYTJlZjhiNjVkMzkzMzE1NDQ4NGE3ZGU1YjMwMWE2MjAifX1dfSwicnVuRGV0YWlscyI6eyJidWlsZGVyIjp7ImlkIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nha2FqdW5xdWFsaXR5L2J1bmtvLy5naXRodWIvd29ya2Zsb3dzL3JlbGVhc2UueW1sQHJlZnMvdGFncy92MC44LjAifSwibWV0YWRhdGEiOnsiaW52b2NhdGlvbklkIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nha2FqdW5xdWFsaXR5L2J1bmtvL2FjdGlvbnMvcnVucy8zNDc0NDQ0MDk2Mi9hdHRlbXB0cy8xIn19fX0=","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MEUCIQDJQquo0uOiukoYR4cG3WsKNSAOnv4lc5aoj5pgXFzMWQIgCPXCEAh/tUJ46OARuOnjpfdHZIf2gES1z+XR1ZqXgTo="}]}}
|
|
1
|
+
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"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"},"tlogEntries":[{"logIndex":"2827113301","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"dsse","version":"0.0.1"},"integratedTime":"1789366594","inclusionPromise":{"signedEntryTimestamp":"MEQCIHic37hNHLGFLD3AWn0OmrJAzuw57wiyc0L5Ck03fu9BAiAlYR+fI5ENBDVtO8d4zaATRdBwCB4MaLYCY2Bvko4hIQ=="},"inclusionProof":{"logIndex":"2705209039","rootHash":"Q/UtDo7mCGTTXXdGa+R6NZqeKBBnYMWbNe31d3fkwlo=","treeSize":"2705209073","hashes":["fFAp3p0Hd0ywhOhI7KnCT1SVwrJKLcFqBLADsOHV1vI=","fIQNApcgvOZrtrIl1NX6t2iZWppiTk9NVUxswwhLPhs=","Ih7sBuCP9eOAzlg+OC5i/uAAGxnAVXWXC2Ow3dq0UK8=","2aOn+ST0M9oBHn2wqkfoCUbDIyU717KWpSeULnFER/w=","m3sGQV2RN1GNgs4zFMldDqDiJhuw+ISiD5K0DItp0tQ=","iFf2HPtid/o6arzGbLTFwPYeOWWCnkc9GhCueN99goc=","V6vgTlYgSDAwhCicc1ny3sDWH8/QJe2+fFkor3BsAj4=","SRar112n0n/YDyMhXPC+Iz7dyI2Oo7ds4IZuyP1GsHc=","vBh+MDLmVSxcxaKenqrtnOd6max5gmHWrXbDYKOtZVo=","e6O/xUyiXzPLx1lmHEj1Ha0acKgjkT9jbU0a63KyrQs=","q9rSGks34K8vd2+TaQyE4aL9PvXuXXuuZCw1x6mSD9o=","mx9cVBA+TCO8O3Yjf+VeIWDdciEPJ7nuzT6YBM39Auc=","K2Ah2VEAY9IgGpCUIX4XTvMz9K9hlXU0UNItDJzhqiQ=","pEIiCyDRsQWhN7EYpl0e5VaGq7WSH0D6gH6csAASk/A=","y9EqrL8imhzuX9Zx9JB3oZ0QvobWFxV2a41mQPVYi6c=","E8K59oTNLb5hshbH2mabBSbPxethkEOQXT0v79AD0kM=","rEAJO+tw8QfMrycoZxTUIWR0OVQ2ZWzeM/oggHRtw3A=","FsoZw7l0TP5j/5XRBwYg1E2gkvnQTw6uUBqVvQoSp8c=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n2705209073\nQ/UtDo7mCGTTXXdGa+R6NZqeKBBnYMWbNe31d3fkwlo=\n\n— rekor.sigstore.dev wNI9ajBGAiEApZwCJ7XQqgXtg7CfZXqnZZP34hg/S3g6bbPI2BTscBUCIQCIu10VcCnEYNBe/0Ujb3KO0WIoUnJjBtsQIbISHuy0+Q==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiZHNzZSIsInNwZWMiOnsiZW52ZWxvcGVIYXNoIjp7ImFsZ29yaXRobSI6InNoYTI1NiIsInZhbHVlIjoiNWJhNTAxYmJkYWMwOGZjZjVmZjlkZDRmOTMwODUwNGJlNjA2ZGI4NDU5OTM1ZTcwMzY5NzZlMzU1N2Y2NjU5ZiJ9LCJwYXlsb2FkSGFzaCI6eyJhbGdvcml0aG0iOiJzaGEyNTYiLCJ2YWx1ZSI6ImM3NGE0ZWIwMDdkYzBhMWEzZGQyNDFmMmIzNWYwNGM5ZjM1NWM5MDUwYjIyYWZkZjRkZjc3Nzk0MWQzZjNiZjQifSwic2lnbmF0dXJlcyI6W3sic2lnbmF0dXJlIjoiTUVVQ0lHclkrSkcwVkJUQkFLNFNjOUlyWEhVRTVkbGZuT05vTll6SVd3dEpoMjZ5QWlFQTc5MnExZHBySHl3V3BaWURFYmYxWTNENXhTU09KZE1BTHhtVitXdE50MDA9IiwidmVyaWZpZXIiOiJMUzB0TFMxQ1JVZEpUaUJEUlZKVVNVWkpRMEZVUlMwdExTMHRDazFKU1VoR1ZFTkRRbkIxWjBGM1NVSkJaMGxWUkZwM2VHRm1Ta1J3UXpGRmJWQndLekJQY1c5WFdqUnJLelZ6ZDBObldVbExiMXBKZW1vd1JVRjNUWGNLVG5wRlZrMUNUVWRCTVZWRlEyaE5UV015Ykc1ak0xSjJZMjFWZFZwSFZqSk5ValIzU0VGWlJGWlJVVVJGZUZaNllWZGtlbVJIT1hsYVV6RndZbTVTYkFwamJURnNXa2RzYUdSSFZYZElhR05PVFdwWmQwOVVSVEJOUkZsNFRtcE5lbGRvWTA1TmFsbDNUMVJGTUUxRVdYbE9hazE2VjJwQlFVMUdhM2RGZDFsSUNrdHZXa2w2YWpCRFFWRlpTVXR2V2tsNmFqQkVRVkZqUkZGblFVVlNkWFIxWTIxSU5rMUNjMWRRUmt4RmEzVndWRVkwU0hrNVJYWkZjVFpuUVZNNWJXNEtTbUpxTkdaSGJucGhaMFp1VVRScFduSndSbmwwWlZGNVUyWkdZMG93ZW1kdmMyOWpiRk5sWW1SaVozUkxNa0Y1TTNGUFEwSmliM2RuWjFjeVRVRTBSd3BCTVZWa1JIZEZRaTkzVVVWQmQwbElaMFJCVkVKblRsWklVMVZGUkVSQlMwSm5aM0pDWjBWR1FsRmpSRUY2UVdSQ1owNVdTRkUwUlVablVWVjNiSFZGQ2trelZqSnhaSGhRU1RoRU1sSXlRV2R5UWpCb1JGTTBkMGgzV1VSV1VqQnFRa0puZDBadlFWVXpPVkJ3ZWpGWmEwVmFZalZ4VG1wd1MwWlhhWGhwTkZrS1drUTRkMXBCV1VSV1VqQlNRVkZJTDBKR2IzZFhTVnBYWVVoU01HTklUVFpNZVRsdVlWaFNiMlJYU1hWWk1qbDBURE5PYUdFeVJuRmtWelY0WkZkR2N3cGhXRkkxVERKS01XSnRkSFpNZVRWdVlWaFNiMlJYU1haa01qbDVZVEphYzJJelpIcE1NMHBzWWtkV2FHTXlWWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVDbU41T1RKTlF6UTBUR3BGZDA5UldVdExkMWxDUWtGSFJIWjZRVUpCVVZGeVlVaFNNR05JVFRaTWVUa3dZakowYkdKcE5XaFpNMUp3WWpJMWVreHRaSEFLWkVkb01WbHVWbnBhV0VwcVlqSTFNRnBYTlRCTWJVNTJZbFJCVTBKbmIzSkNaMFZGUVZsUEwwMUJSVU5DUVZKM1pGaE9iMDFFV1VkRGFYTkhRVkZSUWdwbk56aDNRVkZOUlV0RVVUSlpWMDVxV1ZkUmVVNXRVbTFhYlVVMVRXMUdhVTFFVFRWTlJFMTRXVlJOZWsxRVJteGFha2t3V2xkRk5WcHFaM2RhYlZsM0NrWlJXVXRMZDFsQ1FrRkhSSFo2UVVKQ1FWRklWVzFXYzFwWFJucGFWRUZwUW1kdmNrSm5SVVZCV1U4dlRVRkZSa0pDVW5wWlYzUm9ZVzVXZFdOWVZtZ0tZa2RzTUdWVE9XbGtWelZ5WW5wQlpVSm5iM0pDWjBWRlFWbFBMMDFCUlVkQ1FrSjVXbGRhZWt3elVtaGFNMDEyWkdwQmRVOUROSGhOUkhOSFEybHpSd3BCVVZGQ1p6YzRkMEZSWjBWTVVYZHlZVWhTTUdOSVRUWk1lVGt3WWpKMGJHSnBOV2haTTFKd1lqSTFla3h0WkhCa1IyZ3hXVzVXZWxwWVNtcGlNalV3Q2xwWE5UQk1iVTUyWWxSQ2JVSm5iM0pDWjBWRlFWbFBMMDFCUlVwQ1JtZE5WbTFvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVlbGxYZEdnS1lXNVdkV05ZVm1oaVIyd3daVk01YVdSWE5YSmllVGgxV2pKc01HRklWbWxNTTJSMlkyMTBiV0pIT1ROamVUbDVXbGQ0YkZsWVRteE1ibXgwWWtWQ2VRcGFWMXA2VEROU2FGb3pUWFprYWtGMVQwTTBlRTFFWjBkRGFYTkhRVkZSUW1jM09IZEJVVzlGUzJkM2IwNUVXbWhaTWs1b1drUkpNbHBIV20xWlZHdDVDbGxYU1hkTmVtdDNUWHBHYUUxNlRYZE5WMVp0VFdwU2JGbFViRzFQUkVKdFdtcEJaRUpuYjNKQ1owVkZRVmxQTDAxQlJVeENRVGhOUkZka2NHUkhhREVLV1dreGIySXpUakJhVjFGM1RuZFpTMHQzV1VKQ1FVZEVkbnBCUWtSQlVYQkVRMlJ2WkVoU2QyTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJZekpHY2dwWlYzQXhZbTVHTVZsWGVIQmtTR3QyV1c1V2RXRXlPSGRQUVZsTFMzZFpRa0pCUjBSMmVrRkNSRkZSY1VSRFp6Qk9iVVpxV1RKR2EwMXFXbXRhYlZwb0NrOVVTbWhaYWtGNlQxUkJlazFYUlhwTmVrRjRXbGRaZVU1SFZtaFBWMWswVFVkYWJVMURRVWREYVhOSFFWRlJRbWMzT0hkQlVUUkZSV2QzVVdOdFZtMEtZM2s1TUZsWFpIcE1NMWwzVEdwbmRVMVVRV0ZDWjI5eVFtZEZSVUZaVHk5TlFVVlFRa0YzVFVOcVJYcE9WR3MwVFZSVk5FNUVRWGROVVZsTFMzZFpRZ3BDUVVkRWRucEJRa1ZCVVdwRVEwWnZaRWhTZDJONmIzWk1NbVJ3WkVkb01WbHBOV3BpTWpCMll6SkdjbGxYY0RGaWJrWXhXVmQ0Y0dSSWEzZEdkMWxMQ2t0M1dVSkNRVWRFZG5wQlFrVlJVVXBFUVdONVRucEZNVTE2U1RCTlIxbEhRMmx6UjBGUlVVSm5OemgzUVZKSlJWZEJlRmRoU0ZJd1kwaE5Oa3g1T1c0S1lWaFNiMlJYU1hWWk1qbDBURE5PYUdFeVJuRmtWelY0WkZkR2MyRllValZNTWtveFltMTBka3g1Tlc1aFdGSnZaRmRKZG1ReU9YbGhNbHB6WWpOa2VncE1NMHBzWWtkV2FHTXlWWFZsVnpGelVVaEtiRnB1VFhaa1IwWnVZM2s1TWsxRE5EUk1ha1YzVDBGWlMwdDNXVUpDUVVkRWRucEJRa1YzVVhGRVEyY3dDazV0Um1wWk1rWnJUV3BhYTFwdFdtaFBWRXBvV1dwQmVrOVVRWHBOVjBWNlRYcEJlRnBYV1hsT1IxWm9UMWRaTkUxSFdtMU5RbEZIUTJselIwRlJVVUlLWnpjNGQwRlNVVVZDWjNkRlkwaFdlbUZFUW1KQ1oyOXlRbWRGUlVGWlR5OU5RVVZXUWtVd1RWTXlhREJrU0VKNlQyazRkbG95YkRCaFNGWnBURzFPZGdwaVV6bDZXVmQwYUdGdVZuVmpXRlpvWWtkc01HVlRPV2xrVnpWeVluazVhRmt6VW5CaU1qVjZURE5LTVdKdVRYWk5lbEUwVFZSSk1VMXFWVEpQVkUxMkNsbFlVakJhVnpGM1pFaE5kazFVUVZkQ1oyOXlRbWRGUlVGWlR5OU5RVVZYUWtGblRVSnVRakZaYlhod1dYcENVa0puYjNKQ1owVkZRVmxQTDAxQlJWa0tRa1ZOVFZGWVNteGpSemcyWXpKR2NsbFhjREZpYmtZeFdWZDRjR1JJYkVGTmFtTjRUbFJOZVU1RE9XbGtWelZ5WWpCQmVFMTZWVFZQUkVVeFQwUlJkd3BQYmtwc1dtcHdlVnBYV25wTU0xSm9Xak5OZG1ScVFYVlBRelI0VFVsSFRFSm5iM0pDWjBWRlFXUmFOVUZuVVVOQ1NEQkZaWGRDTlVGSVkwRXpWREIzQ21GellraEZWRXBxUjFJMFkyMVhZek5CY1VwTFdISnFaVkJMTXk5b05IQjVaME00Y0Rkdk5FRkJRVWRuYm04NWNGaDNRVUZDUVUxQlUwUkNSMEZwUlVFS2JUaE9jVEJHZWs5VWQyTjBSMGRwVlRsd0szRlZhamxMZWtwUFlYbFliMEZaU0ZkR1UyRjBjVXBKYTBOSlVVTXhibXB5TkZoeVFtbHNiaXRUZGtsbWRncHlOMUpKYVRaYVNIVldaa1Z1YUVobFRrZFJNVUZGVEVoQ1ZFRkxRbWRuY1docmFrOVFVVkZFUVhkT2IwRkVRbXhCYWtGWk5uTjZlRkpUSzNKd1QzbFNDbFJ1TDB0elEyNHhMek5sWmpSclYyOUxjR0paZWxaNlNtaFJOV1JoU0hkcFlWQkxWRzFPUVROVFVrNXFOM3BOUkdGb01FTk5VVVJ3Y1UxTlFsWnJVemNLU1RRclluaHVkME41Y2pWVWQxbGtORTVrWkhFMldXeElSSGN6VEUxeWJHZ3ZOa2hpYmtrMloydDRaMEZXWkRoQ1IxTnRVMFlyWXowS0xTMHRMUzFGVGtRZ1EwVlNWRWxHU1VOQlZFVXRMUzB0TFFvPSJ9XX19"}],"timestampVerificationData":{}},"dsseEnvelope":{"payload":"eyJfdHlwZSI6Imh0dHBzOi8vaW4tdG90by5pby9TdGF0ZW1lbnQvdjEiLCJzdWJqZWN0IjpbeyJuYW1lIjoiYnVua28uanMiLCJkaWdlc3QiOnsic2hhMjU2IjoiMTA3MzgwMWU1MzdjMWRjZmEwNmEzZDhmYjI0ZWQxZGM3MWVmZjBlYWZjMmU2NWRjZTQ1MDQ3ZDZlMTZiOTcxOCJ9fSx7Im5hbWUiOiJTSEEyNTZTVU1TIiwiZGlnZXN0Ijp7InNoYTI1NiI6ImUwZTAxZjM1YzAwMTk4NDFkMGU3NDdkODIxODJlOGM4ZDNhMDQxZDAyZTU0MTk4MmI4MTIyYzZhZGZjMjk4Y2YifX0seyJuYW1lIjoiTElDRU5TRSIsImRpZ2VzdCI6eyJzaGEyNTYiOiJiNzY2M2E5YzE1N2RlNDc3NzAwN2VhZDQyMTVjNDI3NDIwZjhlYmZiODlhMjQzNTk4NDU0YzdhNmU5MWE5MjNkIn19LHsibmFtZSI6IlRISVJEX1BBUlRZX05PVElDRVMubWQiLCJkaWdlc3QiOnsic2hhMjU2IjoiODQzNzljZWM4ZGM1YjkzYmMyYWQzM2I2ZDJiMmIzNzEzZDRiMjAxZWI1MGNhNGNiNTFiMjcxZDY2Y2JlYjI3MCJ9fV0sInByZWRpY2F0ZVR5cGUiOiJodHRwczovL3Nsc2EuZGV2L3Byb3ZlbmFuY2UvdjEiLCJwcmVkaWNhdGUiOnsiYnVpbGREZWZpbml0aW9uIjp7ImJ1aWxkVHlwZSI6Imh0dHBzOi8vYWN0aW9ucy5naXRodWIuaW8vYnVpbGR0eXBlcy93b3JrZmxvdy92MSIsImV4dGVybmFsUGFyYW1ldGVycyI6eyJ3b3JrZmxvdyI6eyJyZWYiOiJyZWZzL3RhZ3MvdjAuOC4xIiwicmVwb3NpdG9yeSI6Imh0dHBzOi8vZ2l0aHViLmNvbS9zYWthanVucXVhbGl0eS9idW5rbyIsInBhdGgiOiIuZ2l0aHViL3dvcmtmbG93cy9yZWxlYXNlLnltbCJ9fSwiaW50ZXJuYWxQYXJhbWV0ZXJzIjp7ImdpdGh1YiI6eyJldmVudF9uYW1lIjoicHVzaCIsInJlcG9zaXRvcnlfaWQiOiIxMzU5ODE1ODQwIiwicmVwb3NpdG9yeV9vd25lcl9pZCI6IjI3MTUzMjQiLCJydW5uZXJfZW52aXJvbm1lbnQiOiJnaXRodWItaG9zdGVkIn19LCJyZXNvbHZlZERlcGVuZGVuY2llcyI6W3sidXJpIjoiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9zYWthanVucXVhbGl0eS9idW5rb0ByZWZzL3RhZ3MvdjAuOC4xIiwiZGlnZXN0Ijp7ImdpdENvbW1pdCI6IjQ2YWNjYWQyNmRmZmE5MmFiMDM5MDMxYTMzMDFlZjI0ZWE5ZjgwZmYifX1dfSwicnVuRGV0YWlscyI6eyJidWlsZGVyIjp7ImlkIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nha2FqdW5xdWFsaXR5L2J1bmtvLy5naXRodWIvd29ya2Zsb3dzL3JlbGVhc2UueW1sQHJlZnMvdGFncy92MC44LjEifSwibWV0YWRhdGEiOnsiaW52b2NhdGlvbklkIjoiaHR0cHM6Ly9naXRodWIuY29tL3Nha2FqdW5xdWFsaXR5L2J1bmtvL2FjdGlvbnMvcnVucy8zNDgxMjUyNTY5My9hdHRlbXB0cy8xIn19fX0=","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MEUCIGrY+JG0VBTBAK4Sc9IrXHUE5dlfnONoNYzIWwtJh26yAiEA792q1dprHywWpZYDEbf1Y3D5xSSOJdMALxmV+WtNt00="}]}}
|
package/README.md
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
Build OCI images from Bun applications without Dockerfiles. Requires Bun >=1.3.13 <1.5 on Linux or macOS (x64 or arm64). npm installation does not install Bun.
|
|
4
4
|
|
|
5
5
|
```sh
|
|
6
|
-
bunx @sakajunquality/bunko@0.8.
|
|
7
|
-
bunx @sakajunquality/bunko@0.8.
|
|
6
|
+
bunx @sakajunquality/bunko@0.8.1 version
|
|
7
|
+
bunx @sakajunquality/bunko@0.8.1 build .
|
|
8
8
|
# Or install globally (Bun must be on PATH):
|
|
9
|
-
npm install -g @sakajunquality/bunko@0.8.
|
|
9
|
+
npm install -g @sakajunquality/bunko@0.8.1
|
|
10
10
|
bunko version
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
This package contains the unchanged JavaScript CLI and license files from [v0.8.
|
|
13
|
+
This package contains the unchanged JavaScript CLI and license files from [v0.8.1](https://github.com/sakajunquality/bunko/releases/tag/v0.8.1), plus its checksums and GitHub release provenance bundle. It has no install scripts or runtime npm dependencies. The release provenance authenticates the enclosed release assets; npm package provenance is a separate attestation of the packaging workflow.
|
|
14
14
|
|
|
15
15
|
See the [documentation](https://github.com/sakajunquality/bunko#readme), [trust boundaries](https://github.com/sakajunquality/bunko/blob/main/docs/CONFIGURATION.md), and [MIT license](LICENSE).
|
package/SHA256SUMS
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
1073801e537c1dcfa06a3d8fb24ed1dc71eff0eafc2e65dce45047d6e16b9718 bunko.js
|
|
2
2
|
b7663a9c157de4777007ead4215c427420f8ebfb89a243598454c7a6e91a923d LICENSE
|
|
3
3
|
84379cec8dc5b93bc2ad33b6d2b2b3713d4b201eb50ca4cb51b271d66cbeb270 THIRD_PARTY_NOTICES.md
|
package/bunko.js
CHANGED
|
@@ -911,7 +911,7 @@ For compatibility reasons, the following packages are embedded into Bun's binary
|
|
|
911
911
|
|
|
912
912
|
- Bun's JS transpiler, CSS lexer, and Node.js module resolver source code is a port of [@evanw](https://github.com/evanw)\u2019s [esbuild](https://github.com/evanw/esbuild) project.
|
|
913
913
|
- Credit to [@kipply](https://github.com/kipply) for the name "Bun"!`};var LT0=jc0(),sL2=mc0();import{createReadStream as YI2}from"fs";import{rm as sc0}from"fs/promises";import{pipeline as WI2}from"stream/promises";import{join as ic0,posix as sN}from"path";import{createHash as iL2}from"crypto";import{createReadStream as nL2,createWriteStream as aL2}from"fs";import{Transform as rL2,Writable as oL2}from"stream";import{pipeline as IT0}from"stream/promises";import{createGunzip as tL2,createZstdDecompress as eL2,constants as $I2}from"zlib";async function XO(W,T,w,P,L=2147483648){await W.ensure(T);let S=iL2("sha256"),k=0,d=new rL2({transform(Q0,F0,l){if(k+=Q0.length,k>L){l(Error("Decoded layer exceeds size limit"));return}S.update(Q0),l(null,Q0)}}),i=nL2(W.path(T.digest)),G0=P?aL2(P,{flags:"wx"}):new oL2({write(Q0,F0,l){l()}});if(T.mediaType===t4.gzip||T.mediaType===t4.dockerGzip)await IT0(i,tL2(),d,G0);else if(T.mediaType===t4.zstd)await IT0(i,eL2({params:{[$I2.ZSTD_d_windowLogMax]:27}}),d,G0);else if(T.mediaType===t4.tar)await IT0(i,d,G0);else throw Error(`Cannot decode layer media type: ${T.mediaType}`);if(`sha256:${S.digest("hex")}`!==w)throw Error(`Layer DiffID mismatch: ${T.digest}`)}import{createHash as _I2}from"crypto";import{createReadStream as XI2}from"fs";import{posix as hx}from"path";import{Readable as GI2}from"stream";import{pipeline as DI2}from"stream/promises";import{createGzip as QI2}from"zlib";function X3(W){if(!W||W.startsWith("/")||W.includes("\\")||/[\x00-\x1f\x7f]/.test(W)||W.split("/").some((T)=>!T||T==="."||T===".."||T.startsWith(".wh.")||Buffer.byteLength(T)>255))throw Error(`Unsafe archive path: ${JSON.stringify(W)}`);return W}function lc0(W,T){let w=new Set(W.map((k)=>k.path)),P=new Map,L=new Map;function S(k,d=!1){X3(k.path);let i=k.path.toLowerCase();if(L.has(i)&&L.get(i)!==k.path)throw Error(`Case-colliding archive path: ${k.path}`);L.set(i,k.path);let G0=P.get(k.path);if(G0&&(G0.type!=="directory"||k.type!=="directory"))throw Error(`Overlapping archive path: ${k.path}`);if(!G0||!d)P.set(k.path,k)}for(let k of W){S(k);let d=hx.dirname(k.path);while(d!==".")S({path:d,type:"directory"},!0),d=hx.dirname(d);if(k.type==="symlink"){if(!k.target||hx.isAbsolute(k.target)||/[\\\x00-\x1f\x7f]/.test(k.target))throw Error(`Unsafe symlink: ${k.path}`);let i=hx.normalize(hx.join(hx.dirname(k.path),k.target));if(i===".."||i.startsWith("../"))throw Error(`Escaping symlink: ${k.path}`)}}return[...P.values()].filter((k)=>!T||w.has(k.path)||T.some((d)=>k.path===d||k.path.startsWith(`${d}/`))).sort((k,d)=>Buffer.compare(Buffer.from(k.path),Buffer.from(d.path)))}function pc0(W){lc0(W)}function Hd(W,T,w,P){let L=P.toString(8);if(!Number.isSafeInteger(P)||P<0||L.length>=w)throw Error("Tar number overflow");W.write(`${L.padStart(w-1,"0")}\x00`,T,w,"ascii")}function ZI2(W){if(Buffer.byteLength(W)<=100)return{name:W,prefix:""};for(let T=W.lastIndexOf("/");T>0;T=W.lastIndexOf("/",T-1)){let w=W.slice(0,T),P=W.slice(T+1);if(Buffer.byteLength(w)<=155&&Buffer.byteLength(P)<=100)return{prefix:w,name:P}}}function dc0(W,T,w,P,L,S=""){let k=Buffer.alloc(512);k.write(W.name,0,100,"utf8"),Hd(k,100,8,P),Hd(k,108,8,0),Hd(k,116,8,0),Hd(k,124,12,w),Hd(k,136,12,L),k.fill(32,148,156),k.write(T,156,1,"ascii"),k.write(S,157,100,"utf8"),k.write("ustar\x00",257,6,"ascii"),k.write("00",263,2,"ascii"),k.write(W.prefix,345,155,"utf8");let d=k.reduce((i,G0)=>i+G0,0);return k.write(`${d.toString(8).padStart(6,"0")}\x00 `,148,8,"ascii"),k}function h20(W,T){let w=` ${W}=${T}
|
|
914
|
-
`,P=Buffer.byteLength(w)+1;while(P!==Buffer.byteLength(w)+String(P).length)P=Buffer.byteLength(w)+String(P).length;return Buffer.from(`${P}${w}`)}var cc0=(W)=>Buffer.alloc((512-W%512)%512);async function*ET0(W,T,w){if(!Number.isSafeInteger(T)||T<0)throw Error("Invalid tar epoch");for(let P of lc0(W,w?.map(X3))){let L=ZI2(P.path),S=P.type==="file"?"content"in P?P.content.byteLength:P.size:0,k=P.type==="symlink"?P.target:"",d=[];if(!L)d.push(h20("path",P.path));if(Buffer.byteLength(k)>100)d.push(h20("linkpath",k));if(S>=8589934592)d.push(h20("size",String(S)));if(T>=8589934592)d.push(h20("mtime",String(T)));if(d.length){let Q0=Buffer.concat(d);yield dc0({name:`PaxHeaders/${q5(P.path).slice(7,39)}`,prefix:""},"x",Q0.length,420,0),yield Q0,yield cc0(Q0.length)}let i=P.type==="directory"?"5":P.type==="symlink"?"2":"0";if(P.type==="file"&&P.mode!==void 0&&![292,365,420,493].includes(P.mode))throw Error("Unsupported archive file mode");let G0=P.type==="directory"?493:P.type==="symlink"?511:P.mode??(P.executable?493:420);if(yield dc0(L??{name:"PaxEntry",prefix:""},i,S<8589934592?S:0,G0,T<8589934592?T:0,Buffer.byteLength(k)<=100?k:""),P.type==="file"){if("content"in P)yield P.content;else{let Q0=0;for await(let F0 of XI2(P.source)){if(Q0+=F0.length,Q0>S)throw Error(`File changed while packing: ${P.path}`);yield F0}if(Q0!==S)throw Error(`File changed while packing: ${P.path}`)}yield cc0(S)}}yield Buffer.alloc(1024)}async function GO(W,T,w,P,L){if(T.length===0)return;let S=_I2("sha256");async function*k(){for await(let F0 of ET0(T,P,L))S.update(F0),yield F0}let d=GI2.from(k()),i=QI2({level:6}),G0=DI2(d,i);G0.catch(()=>{});async function*Q0(){let F0=Buffer.alloc(0),l=!1;for await(let u0 of i){if(l){yield u0;continue}if(F0=Buffer.concat([F0,u0]),F0.length>=10)F0.fill(0,4,8),F0[9]=255,l=!0,yield F0,F0=Buffer.alloc(0)}if(!l)throw Error("Incomplete gzip stream")}try{let F0=await W.putStream(Q0(),t4.gzip);await G0;let l=`sha256:${S.digest("hex")}`;return{kind:w,descriptor:F0,diffId:l}}finally{d.destroy(),i.destroy(),await G0.catch(()=>{})}}function FT0(W){if(Buffer.byteLength(W)>8192)throw Error("Base filesystem path exceeds inspection limits");let T=W.replace(/^(\/+|\.\/)+/,"").replace(/\/$/,"");if(!T||T===".")return"";if(Buffer.byteLength(T)>4096||T.split("/").length>128)throw Error("Base filesystem path exceeds inspection limits");if(/[\\\x00-\x1f\x7f]/.test(T)||T.split("/").some((w)=>!w||w===".."||w==="."))throw Error(`Unsupported path in runtime base filesystem: ${JSON.stringify(W.slice(0,200)).replace(/\x7f/g,"\\u007f")}`);return T}var g20=FT0;function v20(W){let T=W.split("/");return T.map((w,P)=>T.slice(0,P+1).join("/"))}async function u20(W,T,w){let P=await Jd(W,T,w,async(L,S,k,d)=>{if(!/^etc\/ld-musl-(?:x86_64|aarch64)\.path$/.test(S)||k.type!=="file"||!d||k.size>4096)return;let i=[],G0=0;for await(let Q0 of d){let F0=Buffer.from(Q0);if(G0+=F0.length,G0>4096)throw Error("musl library search configuration exceeds inspection limits");i.push(F0)}try{k.muslSearchPath=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(Buffer.concat(i))}catch{}});for(let L of P.values())delete L.layer;return P}async function Jd(W,T,w,P,L=200000,S){if(!Number.isSafeInteger(L)||L<1||L>200000)throw Error("Invalid base filesystem entry limit");let k=new Map,d=0,i=await J_(ic0(w,"base-inspect-"));try{for(let[G0,Q0]of T.manifest.layers.entries()){let F0=ic0(i,`${G0}.tar`),l=new Map,u0=new Set,x0=new Set;try{await XO(W,Q0,T.config.rootfs.diff_ids[G0],F0);let O0=LT0();O0.on("entry",(W2,d0,r0)=>{d0.on("error",(M2)=>O0.destroy(M2));let j2=d0;(async()=>{if(++d>L)throw Error("Runtime base has too many entries");let M2=g20(W2.name),K2=sN.basename(M2),Z2=sN.dirname(M2);if(M2)if(K2===".wh..wh..opq")S?.(G0,Z2==="."?"":Z2),x0.add(Z2==="."?"":Z2);else if(K2.startsWith(".wh.")){let E2=Z2==="."?K2.slice(4):`${Z2}/${K2.slice(4)}`;S?.(G0,E2),u0.add(E2)}else{let E2={type:W2.type??"file",link:W2.linkname,mode:W2.mode??0,size:W2.size??0,...P?{layer:G0}:{}};l.set(M2,E2),await P?.(G0,M2,E2,j2,{uid:W2.uid??0,gid:W2.gid??0,...W2.pax?{pax:W2.pax}:{}})}if(!j2.readableEnded)for await(let E2 of j2);})().then(()=>r0(),(M2)=>{j2.destroy(M2),O0.destroy(M2)})}),await WI2(YI2(F0),O0);for(let W2 of k.keys()){let d0=v20(W2);if(x0.has("")||d0.some((r0)=>u0.has(r0))||d0.slice(0,-1).some((r0)=>x0.has(r0)||l.has(r0)&&l.get(r0).type!=="directory"))k.delete(W2)}for(let[W2,d0]of l)k.set(W2,d0);for(let W2 of l.keys())for(let d0 of v20(W2).slice(0,-1)){if(k.has(d0))continue;if(++d>L)throw Error("Runtime base has too many entries");let r0={type:"directory",mode:493,size:0,...P?{layer:G0}:{}};k.set(d0,r0),await P?.(G0,d0,r0)}}finally{await sc0(F0,{force:!0})}}return k}finally{await sc0(i,{recursive:!0,force:!0})}}function sW(W,T){let w=g20(T.replace(/^\//,""));for(let P=0;P<40;P++){let L=v20(w),S=!1;for(let[k,d]of L.entries()){let i=W.get(d);if(i&&(i.type==="symlink"||i.type==="link")){if(!i.link||/[\\\x00-\x1f\x7f]/.test(i.link))throw Error("Invalid link in runtime base");let G0=i.link.startsWith("/")?i.link:`/${i.type==="link"?"":sN.dirname(d)+"/"}${i.link}`;w=g20(sN.normalize(G0+(k<L.length-1?`/${w.slice(d.length+1)}`:"")).slice(1)),S=!0;break}if(k<L.length-1&&i&&i.type!=="directory")return}if(!S)return W.get(w)}throw Error("Runtime base contains a link cycle")}function NT0(W,T,w=""){let P=sW(T,W.interpreter);if(!P||P.type!=="file"||!P.size||!(P.mode&73))throw Error(`Runtime base is missing the executable ${W.libc} loader ${W.interpreter}; this base cannot run the selected release`);if(W.libc!=="musl")return;let L=`/etc/${sN.basename(W.interpreter).replace(".so.1",".path")}`,S=sW(T,L);if(S&&(S.type!=="file"||S.muslSearchPath===void 0))throw Error(`Cannot inspect musl library search configuration ${L}; use a regular file of at most 4096 bytes at this path`);let k=`${w}:${S?.muslSearchPath??"/lib:/usr/local/lib:/usr/lib"}`.split(/[:\n]/).filter(Boolean);if(k.some((d)=>!d.startsWith("/")||/[\x00-\x1f\x7f]/.test(d)))throw Error("musl library search paths must be absolute paths without control characters");for(let d of W.needed){if(d==="libc.so"||d===sN.basename(W.interpreter).replace("ld-","libc."))continue;if(!k.some((G0)=>{let Q0=sW(T,sN.join(G0,d));return Q0?.type==="file"&&Q0.size>0}))throw Error(`musl runtime base is missing ${d}; install the runtime libraries (Alpine typically needs libstdc++) before injection`)}}function nc0(W,T,w,P=""){let L=g20(W.path.slice(1));if(!L||W.path!==`/${L}`)throw Error("Invalid runtime injection destination");for(let k of v20(L).slice(0,-1)){let d=w.get(k);if(d&&d.type!=="directory")throw Error("Runtime destination has a non-directory or symlink parent in the base")}let S=w.get(L);if(S&&S.type!=="file")throw Error("Runtime destination overlaps a non-regular base entry");return NT0(W,w,P),[{path:L,type:"file",content:T,executable:!0}]}async function m20(W,T,w,P,L,S=""){let k=nc0(T,w,P,S),d=jx[T.version];if(!d)throw Error("Missing injected runtime licensing notices");for(let[i,G0]of[["/usr/share/licenses/bunko-runtime/LICENSE.md",d],["/usr/share/licenses/bunko-runtime/SOURCE.json",d4({version:T.version,revision:T.releaseRevision,source:`https://github.com/oven-sh/bun/tree/${T.releaseRevision}`,archive:T.url,archiveDigest:T.archiveDigest})]]){let Q0=nc0({...T,path:i},Buffer.from(G0),P,S);k.push(...Q0.map((F0)=>({...F0,executable:!1})))}return{entries:k,layer:await GO(W,k,"runtime",L,[])}}function fL(W){if(W===void 0)return"glibc";if(W!=="glibc"&&W!=="musl")throw Error("runtime.libc must be glibc or musl");return W}function gx(W,T){return W==="musl"?`/lib/ld-musl-${T.architecture==="amd64"?"x86_64":"aarch64"}.so.1`:T.architecture==="amd64"?"/lib64/ld-linux-x86-64.so.2":"/lib/ld-linux-aarch64.so.1"}function d20(W,T,w){let P=(S)=>{let k=sW(W,S);return k?.type==="file"&&k.size>0&&Boolean(k.mode&73)},L=gx(T,w);if(T==="musl"&&!P(L))throw Error(`musl runtime base requires executable loader ${L}; choose an Alpine/musl base`);if(T==="glibc"&&!P(L)&&P(gx("musl",w)))throw Error("Base uses musl; set runtime.libc to musl and use compatible runtime and native dependencies")}function ac0(W,T,w){if(W!=="musl")return;let P=T.find((L)=>!w.has(L.path)&&L.needed.includes("libc.so.6"));if(P)throw Error(`Native dependency ${P.path} requires glibc; supply a musl build or select runtime.libc glibc`)}import{readFile as HI2,realpath as RT0}from"fs/promises";import{dirname as rc0,resolve as oc0}from"path";async function c20(W){let T={};for(let[w,P]of Object.entries(W)){let L=await RT0(w);if(T[L])throw Error("Duplicate canonical dependency target");T[L]=P}return T}async function tc0(W){let T=X6(JSON.parse(await HI2(W,"utf8")),"Dependency map"),w={};for(let[P,L]of Object.entries(T)){let S=await RT0(oc0(rc0(W),P));if(w[S])throw Error("Duplicate canonical dependency target");let k=X6(L,"Dependency platforms"),d={};if(!Object.keys(k).length)throw Error("Dependency platform map cannot be empty");for(let[i,G0]of Object.entries(k)){if(!["linux/amd64","linux/arm64"].includes(i)||typeof G0!=="string"||!G0)throw Error("Invalid dependency platform reference");if(!G0.startsWith("layout:")&&!/@sha256:[a-f0-9]{64}$/.test(G0))throw Error("Dependency artifacts must be layouts or digest-pinned references");d[i]=G0.startsWith("layout:")?`layout:${await RT0(oc0(rc0(W),G0.slice(7)))}`:G0}w[S]=d}return w}import{join as qM0}from"path";import{posix as JI2}from"path";function yL(W){if(W===void 0||W==="preserve")return;if(!["0444","0555","0644","0755"].includes(String(W))||typeof W!=="string")throw Error("Asset mode must be preserve, 0444, 0555, 0644 or 0755");return parseInt(W,8)}function Ud(W){let T=W.map((w)=>new Bun.Glob(w));return(w)=>{for(let P=w;P!==".";P=JI2.dirname(P))if(T.some((L)=>L.match(P)))return!0;return!1}}function ec0(W,T,w,P){let L=Ud(w);return W.filter((S)=>!L(S.path.slice(T.length+1))).map((S)=>S.type==="file"&&P!==void 0?{...S,mode:P,executable:Boolean(P&73)}:S)}function iJ(W){if(W==="linux/amd64")return{os:"linux",architecture:"amd64"};if(W==="linux/arm64"||W==="linux/arm64/v8")return{os:"linux",architecture:"arm64",variant:"v8"};throw Error(`Supported platforms: linux/amd64 or linux/arm64 (received ${W})`)}var ST0=(W)=>`${W.os}/${W.architecture}/${W.variant??""}`;var UI2=new Set(["--watch","--hot","--no-clear-screen","--smol","--cpu-prof","--cpu-prof-md","--heap-prof","--heap-prof-md","--no-install","--prefer-offline","--prefer-latest","--expose-gc","--no-deprecation","--throw-deprecation","--zero-fill-buffers","--use-system-ca","--use-openssl-ca","--use-bundled-ca","--redis-preconnect","--sql-preconnect","--no-addons","--no-env-file","--no-orphans","--experimental-http2-fetch","--experimental-http3-fetch","--insecure-http-parser","--experimental-stream-iter","--no-warnings","--trace-warnings","--trace-deprecation","--pending-deprecation","--tls-min-v1.0","--tls-min-v1.1","--tls-min-v1.2","--tls-min-v1.3","--tls-max-v1.2","--tls-max-v1.3","--no-ffi-cc","--preserve-symlinks","--preserve-symlinks-main","--no-macros","--jsx-side-effects","--ignore-dce-annotations"]),BI2=new Set(["--preload","--require","--import","--cpu-prof-name","--cpu-prof-dir","--cpu-prof-interval","--heap-prof-name","--heap-prof-dir","--heap-prof-interval","--port","--conditions","--fetch-preconnect","--max-http-header-size","--dns-result-order","--title","--unhandled-rejections","--console-depth","--user-agent","--env-file","--cwd","--config","--watch-kill-signal","--redirect-warnings","--disable-warning","--main-fields","--extension-order","--tsconfig-override","--define","--drop","--feature","--loader","--jsx-factory","--jsx-fragment","--jsx-import-source","--jsx-runtime"]),$l0=new Set(["--inspect","--inspect-wait","--inspect-brk"]),_l0={"-r":"--preload","-c":"--config","-d":"--define","-l":"--loader"};function Xl0(W){let T=[];for(let w=0;w<W.length;w++){let P=W[w],L=P.indexOf("="),S=L<0?P:P.slice(0,L),k=Object.hasOwn(_l0,S)?_l0[S]:S;if(UI2.has(k)&&L<0){T.push(k);continue}if($l0.has(k)&&L<0){T.push(k);continue}if(BI2.has(k)||$l0.has(k)){let d=L<0?W[++w]:P.slice(L+1);if(d&&(L>=0||!d.startsWith("-"))&&!d.includes("\x00")){T.push(`${k}=${d}`);continue}throw Error(`runtime.args requires a non-empty value for ${k}; use --option=value`)}throw Error(`Invalid runtime.args at index ${w}: expected a supported Bun runtime option; put application arguments in args`)}return T}var VI2=new Set(["mode","base","platforms","assets","assetExcludes","assetMode","assetMappings","external","env","ports","user","workdir","labels","annotations","args","build","runtime","deps","inheritBaseOciLabels","toolchain"]),Gl0=["env","labels","annotations","build","runtime","deps","toolchain"];function Dl0(W,T,w=!1){if(W.defaults!==void 0&&!w)throw Error("bunko.defaults is only supported at a workspace root");let P=X6(T??{},"Workspace bunko"),L=X6(P.defaults??{},"bunko.defaults");if(Object.keys(L).some((i)=>!VI2.has(i)))throw Error("Unsupported workspace default option");let{defaults:S,...k}=W,d={...L,...k};for(let i of Gl0)if(k[i]===null)d[i]=void 0;else if(L[i]!==void 0&&k[i]!==void 0)d[i]={...X6(L[i],`defaults.${i}`),...X6(k[i],i)};if(L.build!==void 0&&k.build!==void 0&&k.build!==null){let i=X6(L.build,"defaults.build"),G0=X6(k.build,"build");if(i.define!==void 0&&G0.define!==void 0)d.build.define=G0.define===null?{}:{...X6(i.define,"defaults.build.define"),...X6(G0.define,"build.define")}}return d}function Ql0(W,T){let w=X6(T??{},"Workspace bunko"),P=X6(w.defaults??{},"bunko.defaults"),L=[];for(let[S,k]of Object.entries(P)){if(!Gl0.includes(S)){if(W[S]===void 0)L.push(S);continue}if(W[S]===null||k===null)continue;let d=X6(k,`defaults.${S}`),i=X6(W[S]??{},S);for(let[G0,Q0]of Object.entries(d))if(S==="build"&&G0==="define"){if(i.define===null||Q0===null)continue;let F0=X6(Q0,"defaults.build.define"),l=X6(i.define??{},"build.define");for(let u0 of Object.keys(F0))if(l[u0]===void 0)L.push(`build.define.${u0}`)}else if(i[G0]===void 0)L.push(`${S}.${G0}`)}return L.sort()}function Zl0(W,T,w=[]){let P=X6(T??{},"toolchain");if(Object.keys(P).some((k)=>!["version","revision"].includes(k)))throw Error("toolchain accepts version and revision only");let L=[],S=new Map;if(P.version!==void 0){if(!mN(P.version))throw Error("toolchain.version must be an exact supported Bun version (>=1.3.13 <1.5)");L.push({version:P.version,source:"bunko.toolchain.version"})}if(P.revision!==void 0&&(typeof P.revision!=="string"||!/^[a-f0-9]{7,40}$/.test(P.revision)))throw Error("toolchain.revision must be the exact revision printed by bun --revision");if(W.forEach((k,d)=>{let i=w[d]??"package.json";if(typeof k.packageManager==="string"&&k.packageManager.startsWith("bun@")){let Q0=k.packageManager.slice(4);if(!mN(Q0))throw Error(`Bun packageManager must declare an exact supported version (${i}#packageManager)`);L.push({version:Q0,source:`${i}#packageManager`})}let G0=X6(k.engines??{},"engines");if(G0.bun!==void 0){if(typeof G0.bun!=="string"||!G0.bun.trim())throw Error(`engines.bun must be a nonempty version range (${i}#engines.bun)`);if(!S.has(G0.bun))S.set(G0.bun,`${i}#engines.bun`)}}),new Set(L.map((k)=>k.version)).size>1)throw Error(`Conflicting Bun toolchain version declarations: ${L.map((k)=>`${k.version} (${k.source})`).join(", ")}`);return{version:L[0]?.version,versionSource:L[0]?.source,revision:P.revision,ranges:[...S.keys()],rangeSources:[...S.values()]}}function vx(W,T){let w=`Selected Bun ${T.version} (${T.path})`;if(W.version&&W.version!==T.version)throw Error(`${w} does not match the declared version ${W.version} (${W.versionSource??"package.json#packageManager"}). Install Bun ${W.version} and select it with --bun-path, or change the declaration.`);if(W.revision&&W.revision!==T.revision)throw Error(`${w} revision ${T.revision} does not match the declared revision ${W.revision} (bunko.toolchain.revision). Install that Bun build and select it with --bun-path, or change the declaration.`);W.ranges.forEach((L,S)=>{if(!Bun.semver.satisfies(T.version,L))throw Error(`${w} does not satisfy engines.bun ${L} (${W.rangeSources?.[S]??"package.json#engines.bun"}). Install a Bun version in that range and select it with --bun-path, or change the declaration.`)})}import{basename as TI2,extname as MI2}from"path";var Yl0=["usr/share/fonts","usr/local/share/fonts"];function iN(W){return Yl0.some((T)=>W===T||W.startsWith(`${T}/`))}function l20(W,T,w){if(Yl0.includes(W)||T&73)throw Error("System font mappings require non-executable files below a font directory");if(/\.(ttf|otf|ttc|otc)$/i.test(W)){if(w<12||w>134217728)throw Error("System font file must be between 12 bytes and 128 MiB");return"font"}if(/^(?:OFL|LICENSE|LICENCE|COPYING|NOTICE|README)(?:[._-][a-z0-9._-]+)?$/i.test(TI2(W))&&w<=1048576)return"notice";throw Error("System font mappings only accept TTF, OTF, TTC, OTC and license/notice files")}async function p20(W,T,w){let P=Bun.file(W),L=P.size;if(l20(T,w,L)==="notice"){try{if(new TextDecoder("utf-8",{fatal:!0}).decode(await P.arrayBuffer()).includes("\x00"))throw Error()}catch{throw Error("System font license/notice files must be UTF-8 text without NUL bytes")}return}let S=()=>Error("Invalid system font SFNT data");async function k(Q0,F0){if(Q0<0||Q0+F0>L)throw S();let l=Buffer.from(await P.slice(Q0,Q0+F0).arrayBuffer());if(l.length!==F0)throw S();return l}let d=await k(0,12),i=[".ttc",".otc"].includes(MI2(T).toLowerCase()),G0=[0];if(i){let Q0=d.readUInt32BE(8);if(d.readUInt32BE(0)!==1953784678||![65536,131072].includes(d.readUInt32BE(4))||Q0<1||Q0>64)throw S();let F0=await k(12,Q0*4);if(G0=Array.from({length:Q0},(l,u0)=>F0.readUInt32BE(u0*4)),G0.some((l)=>l<12+Q0*4))throw S()}for(let Q0 of G0){let F0=await k(Q0,12),l=F0.readUInt32BE(0),u0=F0.readUInt16BE(4);if(![65536,1330926671,1953658213].includes(l)||u0<1||u0>4096)throw S();let x0=await k(Q0+12,u0*16),O0=new Set;for(let W2=0;W2<u0;W2++){let d0=W2*16,r0=x0.toString("latin1",d0,d0+4),j2=x0.readUInt32BE(d0+8),M2=x0.readUInt32BE(d0+12);if(O0.has(r0)||!/^[\x20-\x7e]{4}$/.test(r0)||j2<12||j2+M2>L||["head","name","cmap"].includes(r0)&&M2===0)throw S();O0.add(r0)}if(!["head","name","cmap"].every((W2)=>O0.has(W2)))throw S()}}import{chmod as lE2,copyFile as pE2,lstat as J10,mkdir as sE2,readdir as iE2,realpath as Jp0}from"fs/promises";import{basename as nE2,dirname as aE2,join as mK,relative as rE2,resolve as Up0}from"path";import{lstat as qI2}from"fs/promises";import{dirname as AI2,resolve as OI2}from"path";function wI2(W,T){if(typeof W!=="string"||!W||W!==W.trim())throw Error(`Invalid --cache-${T} location`);if(!W.includes("="))return{type:"registry",repo:O3(JT(W))};let w=new Map;for(let k of W.split(",")){let d=k.indexOf("="),i=k.slice(0,d),G0=k.slice(d+1);if(d<1||!G0||G0!==G0.trim()||w.has(i))throw Error(`Invalid --cache-${T} location`);w.set(i,G0)}let P=w.get("type"),L=T==="from"?"src":"dest",S=P==="registry"?"repo":L;if(P!=="registry"&&P!=="local")throw Error("Supported cache types are registry and local");if(w.size!==2||!w.has(S))throw Error(`Cache type=${P} requires only type and ${S}`);return P==="registry"?{type:P,repo:O3(JT(w.get(S)))}:{type:P,path:OI2(w.get(S))}}function DO(W,T){let w=T==="from"?32:8;if(W!==void 0&&(!Array.isArray(W)||W.length>w))throw Error(`Use at most ${w} cache ${T==="from"?"read sources":"write destinations"}`);return[...new Map((W??[]).map((P)=>{let L=wI2(P,T);return[JSON.stringify(L),L]})).values()]}async function ux(W){let T=await X$(W);if(AI2(T)===T)throw Error("A filesystem root cannot be used as an explicit cache location");try{if((await qI2(T)).isSymbolicLink())throw Error("Explicit cache roots must not be symbolic links")}catch(w){if(w.code!=="ENOENT")throw w}return T}import{AsyncLocalStorage as zI2}from"async_hooks";import{setTimeout as PI2}from"timers/promises";import{randomBytes as LI2}from"crypto";var nN={name:"bunko",version:"0.8.0",private:!0,license:"MIT",type:"module",description:"Build OCI images from Bun applications without Dockerfiles",bin:{bunko:"./packages/bunko/cli.ts"},engines:{bun:">=1.3.13 <1.5"},scripts:{dev:"bun packages/bunko/cli.ts",build:"bun scripts/bundle.ts",test:"bun test --timeout 15000","bench:syntax":"bun test/syntax-benchmark.ts","release:prepare":"bun scripts/release.ts",typecheck:"tsc --noEmit","test:smoke":"bun test/smoke.ts","test:registry":"bun test/registry-conformance.ts","test:registry-local":"bun test/registry-local.ts","test:build-smoke":"bun test/build-smoke.ts","test:resolve-smoke":"bun test/resolve-smoke.ts","test:bundled-smoke":"bun test/bundled-smoke.ts","test:closure-smoke":"bun test/closure-smoke.ts","test:workspace-smoke":"bun test/workspace-smoke.ts",check:"bun run typecheck && bun run test","test:compile-smoke":"bun test/compile-smoke.ts","test:native-ca":"bun test/native-ca-smoke.ts","test:runtime-ca-compile":"bun test/runtime-ca-compile-smoke.ts","test:operations-smoke":"bun test/operations-smoke.ts","test:apply-smoke":"bun test/apply-smoke.ts","bench:performance":"bun test/performance-benchmark.ts","test:runtime-smoke":"bun test/runtime-smoke.ts","test:ko-smoke":"bun test/ko-smoke.ts","bench:builders":"bun test/buildkit-benchmark.ts","test:local-resolve":"bun test/local-resolve-smoke.ts","test:prepared-deps":"bun test/buildkit-deps-smoke.ts","test:zstd-smoke":"bun test/zstd-smoke.ts","test:metadata":"bun test/metadata-smoke.ts","test:cache-distribution":"bun test/cache-distribution-smoke.ts","test:signing-smoke":"bun test/signing-smoke.ts","test:prune-smoke":"bun test/prune-smoke.ts","test:multiple-entrypoints":"bun test/multiple-entrypoints-smoke.ts","test:asset-contexts":"bun test/asset-contexts-smoke.ts","test:application-validation":"bun scripts/validation/run-fixture.ts","test:rebase":"bun scripts/validation/rebase-smoke.ts","test:rebase-registry":"bun scripts/validation/rebase-registry.ts","test:musl":"bun scripts/validation/musl-smoke.ts","test:runtime-injection":"bun scripts/validation/runtime-smoke.ts","test:telemetry":"bun scripts/validation/telemetry-smoke.ts","test:fonts":"bun scripts/validation/fonts-smoke.ts"},devDependencies:{"@types/bun":"1.3.13","@types/tar-stream":"3.1.4","@types/yauzl":"3.4.0",ignore:"7.0.9","tar-stream":"3.2.1",typescript:"5.9.3",yaml:"2.9.0",yauzl:"3.4.0"}};var Bd=new zI2,s20=(W)=>Object.entries(W).map(([T,w])=>({key:T,value:{stringValue:w}})),CT0=(W)=>LI2(W).toString("hex"),i20=[0.01,0.05,0.1,0.5,1,5,10,30,60,300];function Wl0(W,T=process.env){if(!W||T.OTEL_SDK_DISABLED?.toLowerCase()==="true")return;T=Object.fromEntries(Object.entries(T).filter(([,d])=>d!==""));let w={};try{for(let d of(T.OTEL_EXPORTER_OTLP_HEADERS??"").split(",").filter(Boolean)){let i=d.indexOf("=");if(i<1)throw Error();let G0=d.slice(0,i).trim().toLowerCase(),Q0=decodeURIComponent(d.slice(i+1).trim());if(!/^[!#$%&'*+.^_`|~0-9a-z-]+$/.test(G0)||/[\r\n]/.test(Q0)||["host","content-type","content-length","connection","transfer-encoding"].includes(G0))throw Error();w[G0]=Q0}new Headers(w)}catch{throw Error("Invalid OTEL_EXPORTER_OTLP_HEADERS")}let P=Number(T.OTEL_EXPORTER_OTLP_TIMEOUT??"2000");if(!Number.isInteger(P)||P<1||P>1e4)throw Error("OTEL_EXPORTER_OTLP_TIMEOUT must be 1\u201310000 milliseconds");let L=(d)=>{let i=T[`OTEL_${d}_EXPORTER`]??"otlp";if(i==="none")return;if(i!=="otlp")throw Error(`OTEL_${d}_EXPORTER must be otlp or none`);if((T[`OTEL_EXPORTER_OTLP_${d}_PROTOCOL`]??T.OTEL_EXPORTER_OTLP_PROTOCOL??"http/json")!=="http/json")throw Error("Bunko telemetry supports only OTLP http/json");let G0;try{let Q0=T[`OTEL_EXPORTER_OTLP_${d}_ENDPOINT`];if(G0=new URL(Q0??T.OTEL_EXPORTER_OTLP_ENDPOINT??"http://127.0.0.1:4318"),!["https:","http:"].includes(G0.protocol)||G0.username||G0.password||G0.search||G0.hash)throw Error();if(!Q0)G0.pathname=`${G0.pathname.replace(/\/$/,"")}/v1/${d.toLowerCase()}`}catch{throw Error(`Invalid OTLP ${d.toLowerCase()} endpoint`)}if(G0.protocol==="http:"&&Object.keys(w).length)throw Error("OTLP exporter headers require HTTPS endpoints");return G0},S=L("TRACES"),k=L("METRICS");return S||k?{traces:S,metrics:k,headers:w,timeout:P}:void 0}class bT0{config;warn;traceId=CT0(16);root=CT0(8);wall=BigInt(Date.now())*1000000n;start=performance.now();spans=[];series=new Map;groups=new Map;targets=new Map;dropped=0;ended=!1;running=!1;timestamp(){return(this.wall+BigInt(Math.round((performance.now()-this.start)*1e6))).toString()}constructor(W,T=()=>{}){this.config=W;this.warn=T}span(W,T,w={}){let P=this.timestamp();return{traceId:this.traceId,spanId:CT0(8),parentSpanId:T,name:W,kind:1,startTimeUnixNano:P,endTimeUnixNano:P,attributes:s20(w),status:{code:0}}}group(W,T,w,P){let L=this.groups.get(W);if(!L){if(this.groups.size>=256)return this.dropped++,w;L=this.span(T,w,P),this.groups.set(W,L)}return L.spanId}async phase(W,T,w,P){let L=Bd.getStore();w??=L.target,P??=L.platform;let S=L.parent;if(w!==L.target||P!==L.platform){if(S=this.root,w){if(!this.targets.has(w)&&this.targets.size<128)this.targets.set(w,String(this.targets.size));let F0=this.targets.get(w)??"overflow";if(S=this.group(`target:${F0}`,"bunko.target",S,{"bunko.target.index":F0}),P)S=this.group(`target:${F0}:${P}`,"bunko.platform",S,{"bunko.platform":P})}}let k={"bunko.phase":W,...P?{"bunko.platform":P}:{}},d=this.span(`bunko.${W}`,S,k),i=performance.now(),G0=this.spans.length<4096;if(G0)this.spans.push(d);else this.dropped++;let Q0="success";try{return await Bd.run({session:this,parent:G0?d.spanId:S,target:w,platform:P},T)}catch(F0){throw Q0="failure",d.status.code=2,F0}finally{d.endTimeUnixNano=this.timestamp();let F0=w?this.targets.get(w)??"overflow":void 0;for(let l of F0===void 0?[]:[`target:${F0}`,`target:${F0}:${P}`]){let u0=this.groups.get(l);if(u0)u0.endTimeUnixNano=d.endTimeUnixNano}this.record("bunko.phase.duration","s",(performance.now()-i)/1000,{...k,"bunko.result":Q0},!0)}}record(W,T,w,P,L=!1){if(!Number.isFinite(w)||w<0)return;let S=JSON.stringify([W,Object.entries(P).sort()]),k=this.series.get(S);if(!k){if(this.series.size>=512){this.dropped++;return}k={name:W,unit:T,attributes:P,sum:0,count:0,buckets:L?Array(i20.length+1).fill(0):void 0},this.series.set(S,k)}if(k.sum+=w,k.count++,k.buckets){let d=i20.findIndex((i)=>w<=i);k.buckets[d<0?i20.length:d]++}}async run(W,T,w=()=>!1){if(this.running)throw Error("Telemetry invocation may only run once");this.running=!0;let P="success";try{let L=await Bd.run({session:this,parent:this.root},T);if(w(L))P="failure";return L}catch(L){throw P="failure",L}finally{let L=this.timestamp();for(let S of this.groups.values())this.spans.push(S);this.spans.push({...this.span("bunko.build"),spanId:this.root,startTimeUnixNano:this.wall.toString(),endTimeUnixNano:L,attributes:s20({"bunko.command":W}),status:{code:P==="failure"?2:1}}),this.record("bunko.build.count","{build}",1,{"bunko.command":W,"bunko.result":P}),this.record("bunko.build.duration","s",(performance.now()-this.start)/1000,{"bunko.command":W,"bunko.result":P},!0),await this.flush()}}async flush(){if(this.ended)return;this.ended=!0;let W={attributes:s20({"service.name":"bunko","service.version":nN.version})},T={name:"bunko",version:nN.version},w=this.timestamp(),P=new Map;for(let i of this.series.values()){let G0=P.get(i.name),Q0=i.buckets?"histogram":"sum";if(!G0)G0={name:i.name,unit:i.unit,[Q0]:{aggregationTemporality:1,...i.buckets?{}:{isMonotonic:!0},dataPoints:[]}},P.set(i.name,G0);G0[Q0].dataPoints.push({attributes:s20(i.attributes),startTimeUnixNano:this.wall.toString(),timeUnixNano:w,...i.buckets?{count:String(i.count),sum:i.sum,explicitBounds:i20,bucketCounts:i.buckets.map(String)}:{asDouble:i.sum}})}let L=[[this.config.traces,{resourceSpans:[{resource:W,scopeSpans:[{scope:T,spans:this.spans}]}]}],[this.config.metrics,{resourceMetrics:[{resource:W,scopeMetrics:[{scope:T,metrics:[...P.values()]}]}]}]],S=new AbortController,k=setTimeout(()=>S.abort(),this.config.timeout),d=this.dropped>0;try{await Promise.all(L.map(async([i,G0])=>{if(!i)return;try{let Q0=JSON.stringify(G0),l=await(async()=>{for(let d0=0;;d0++){HY();let r0;try{r0=await fetch(i,{method:"POST",headers:{...this.config.headers,"content-type":"application/json"},body:Q0,redirect:"manual",signal:iM(S.signal)})}catch{if(d0||S.signal.aborted)throw Error()}if(r0&&![429,502,503,504].includes(r0.status))return r0;let j2=r0?.headers.get("retry-after"),M2=100;if(j2){let K2=/^\d+$/.test(j2)?Number(j2)*1000:Date.parse(j2)-Date.now();if(Number.isFinite(K2))M2=Math.max(M2,K2)}if(r0)await r0.body?.cancel();if(d0||M2>=this.config.timeout)throw Error();await PI2(M2,void 0,{signal:iM(S.signal)})}})();if(l.status!==200||!l.body)throw await l.body?.cancel(),Error();let u0=l.body.getReader(),x0=0,O0=[];try{while(!0){let{done:d0,value:r0}=await u0.read();if(d0)break;if(x0+=r0.length,x0>65536)throw Error();O0.push(r0)}}finally{await u0.cancel()}let W2=JSON.parse(Buffer.concat(O0).toString());if(!W2||typeof W2!=="object"||Array.isArray(W2))throw Error();if(W2.partialSuccess!==void 0){let d0=W2.partialSuccess;if(!d0||typeof d0!=="object"||Array.isArray(d0))throw Error();let r0=d0.rejectedSpans??d0.rejectedDataPoints??0;if(!/^[0-9]+$/.test(String(r0))||!Number.isSafeInteger(Number(r0))||d0.errorMessage!==void 0&&typeof d0.errorMessage!=="string")throw Error();if(Number(r0)>0||d0.errorMessage)d=!0}}catch{d=!0}}))}catch{d=!0}finally{if(S.abort(),clearTimeout(k),d)try{this.warn()}catch{}}}}function Hl0(W,T,w,P){let L=Bd.getStore();return L?L.session.phase(W,T,w,P):T()}function cH(W,T,w,P,L=!1){Bd.getStore()?.session.record(W,T,w,P,L)}function Jl0(W,T,w,P){let L=W.type==="registry"?W.repo:W.path,S=new hL(T,{...W.type==="registry"?{readRepositories:[W.repo],registry:w}:{directory:W.path},lookupMetrics:!1,log:P}),k=new Map,d=new Map;return{type:W.type,destination:L,async read(...i){if(W.type==="local")await ux(W.path);let G0=await S.get(...i);if(G0)k.set(G0.key,G0);return{record:G0,unavailable:S.events.at(-1)?.reason==="invalid-or-unavailable"}},...W.type==="registry"?{async readPlan(...i){let G0=await S.remotePlan(...i);if(G0.record)d.set(G0.record.planKey,G0.record);return{record:G0.record,unavailable:G0.unavailable}},async writePlan(i){let G0=d.get(i.planKey);if(G0&&Buffer.from(d4(G0)).equals(Buffer.from(d4(i)))){let l={backend:"registry",destination:L,key:i.planKey,kind:i.kind,status:"already-present",bytes:0,durationMs:0};return Vd(l),{event:l}}let F0=await new hL(T,{repository:W.repo,exportError:"fail",registry:w,log:P}).publishPlan(i);return Vd(F0.event),F0}}:{},async write(i){if(d4(i).length>tY){let l={backend:W.type,destination:L,key:i.key,kind:i.kind,status:"failed",reason:"invalid",bytes:0,durationMs:0};return Vd(l),{event:l,error:Error("Cache metadata exceeds size limit")}}if(W.type==="registry"){let l=k.get(i.key);if(l&&Buffer.from(d4(l)).equals(Buffer.from(d4(i)))){let W2={backend:"registry",destination:L,key:i.key,kind:i.kind,status:"already-present",bytes:0,durationMs:0};return Vd(W2),{event:W2}}let u0=new hL(T,{repository:W.repo,exportError:"fail",registry:w,log:P});await u0.remember(i);let x0;try{await u0.publish()}catch(W2){x0=W2 instanceof Td?W2.cause:W2}let O0=u0.exports[0];if(!O0)throw Error("Cache exporter produced no result");return{event:O0,error:x0}}let G0=performance.now(),Q0={backend:"local",destination:L,key:i.key,kind:i.kind,status:"written",bytes:0,durationMs:0},F0;try{await ux(W.path);let u0=await new hL(T,{directory:W.path,strictLocal:!0,lookupMetrics:!1,log:P}).get(i.key,i.kind,!1,{destination:i.destination,platform:i.platform});if(u0){if(!Buffer.from(d4(u0)).equals(Buffer.from(d4(i))))throw new KB("Different output for the same local cache key");Q0.status="already-present"}else await new hL(T,{directory:W.path,strictLocal:!0,lookupMetrics:!1,log:P}).remember(i),Q0.bytes=i.layer.descriptor.size+d4(i).length}catch(l){F0=l,Q0.status="failed",Q0.reason=l instanceof KB?"conflict":"unavailable",P(`Could not export ${i.kind} local cache (${Q0.reason})
|
|
914
|
+
`,P=Buffer.byteLength(w)+1;while(P!==Buffer.byteLength(w)+String(P).length)P=Buffer.byteLength(w)+String(P).length;return Buffer.from(`${P}${w}`)}var cc0=(W)=>Buffer.alloc((512-W%512)%512);async function*ET0(W,T,w){if(!Number.isSafeInteger(T)||T<0)throw Error("Invalid tar epoch");for(let P of lc0(W,w?.map(X3))){let L=ZI2(P.path),S=P.type==="file"?"content"in P?P.content.byteLength:P.size:0,k=P.type==="symlink"?P.target:"",d=[];if(!L)d.push(h20("path",P.path));if(Buffer.byteLength(k)>100)d.push(h20("linkpath",k));if(S>=8589934592)d.push(h20("size",String(S)));if(T>=8589934592)d.push(h20("mtime",String(T)));if(d.length){let Q0=Buffer.concat(d);yield dc0({name:`PaxHeaders/${q5(P.path).slice(7,39)}`,prefix:""},"x",Q0.length,420,0),yield Q0,yield cc0(Q0.length)}let i=P.type==="directory"?"5":P.type==="symlink"?"2":"0";if(P.type==="file"&&P.mode!==void 0&&![292,365,420,493].includes(P.mode))throw Error("Unsupported archive file mode");let G0=P.type==="directory"?493:P.type==="symlink"?511:P.mode??(P.executable?493:420);if(yield dc0(L??{name:"PaxEntry",prefix:""},i,S<8589934592?S:0,G0,T<8589934592?T:0,Buffer.byteLength(k)<=100?k:""),P.type==="file"){if("content"in P)yield P.content;else{let Q0=0;for await(let F0 of XI2(P.source)){if(Q0+=F0.length,Q0>S)throw Error(`File changed while packing: ${P.path}`);yield F0}if(Q0!==S)throw Error(`File changed while packing: ${P.path}`)}yield cc0(S)}}yield Buffer.alloc(1024)}async function GO(W,T,w,P,L){if(T.length===0)return;let S=_I2("sha256");async function*k(){for await(let F0 of ET0(T,P,L))S.update(F0),yield F0}let d=GI2.from(k()),i=QI2({level:6}),G0=DI2(d,i);G0.catch(()=>{});async function*Q0(){let F0=Buffer.alloc(0),l=!1;for await(let u0 of i){if(l){yield u0;continue}if(F0=Buffer.concat([F0,u0]),F0.length>=10)F0.fill(0,4,8),F0[9]=255,l=!0,yield F0,F0=Buffer.alloc(0)}if(!l)throw Error("Incomplete gzip stream")}try{let F0=await W.putStream(Q0(),t4.gzip);await G0;let l=`sha256:${S.digest("hex")}`;return{kind:w,descriptor:F0,diffId:l}}finally{d.destroy(),i.destroy(),await G0.catch(()=>{})}}function FT0(W){if(Buffer.byteLength(W)>8192)throw Error("Base filesystem path exceeds inspection limits");let T=W.replace(/^(\/+|\.\/)+/,"").replace(/\/$/,"");if(!T||T===".")return"";if(Buffer.byteLength(T)>4096||T.split("/").length>128)throw Error("Base filesystem path exceeds inspection limits");if(/[\\\x00-\x1f\x7f]/.test(T)||T.split("/").some((w)=>!w||w===".."||w==="."))throw Error(`Unsupported path in runtime base filesystem: ${JSON.stringify(W.slice(0,200)).replace(/\x7f/g,"\\u007f")}`);return T}var g20=FT0;function v20(W){let T=W.split("/");return T.map((w,P)=>T.slice(0,P+1).join("/"))}async function u20(W,T,w){let P=await Jd(W,T,w,async(L,S,k,d)=>{if(!/^etc\/ld-musl-(?:x86_64|aarch64)\.path$/.test(S)||k.type!=="file"||!d||k.size>4096)return;let i=[],G0=0;for await(let Q0 of d){let F0=Buffer.from(Q0);if(G0+=F0.length,G0>4096)throw Error("musl library search configuration exceeds inspection limits");i.push(F0)}try{k.muslSearchPath=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0}).decode(Buffer.concat(i))}catch{}});for(let L of P.values())delete L.layer;return P}async function Jd(W,T,w,P,L=200000,S){if(!Number.isSafeInteger(L)||L<1||L>200000)throw Error("Invalid base filesystem entry limit");let k=new Map,d=0,i=await J_(ic0(w,"base-inspect-"));try{for(let[G0,Q0]of T.manifest.layers.entries()){let F0=ic0(i,`${G0}.tar`),l=new Map,u0=new Set,x0=new Set;try{await XO(W,Q0,T.config.rootfs.diff_ids[G0],F0);let O0=LT0();O0.on("entry",(W2,d0,r0)=>{d0.on("error",(M2)=>O0.destroy(M2));let j2=d0;(async()=>{if(++d>L)throw Error("Runtime base has too many entries");let M2=g20(W2.name),K2=sN.basename(M2),Z2=sN.dirname(M2);if(M2)if(K2===".wh..wh..opq")S?.(G0,Z2==="."?"":Z2),x0.add(Z2==="."?"":Z2);else if(K2.startsWith(".wh.")){let E2=Z2==="."?K2.slice(4):`${Z2}/${K2.slice(4)}`;S?.(G0,E2),u0.add(E2)}else{let E2={type:W2.type??"file",link:W2.linkname,mode:W2.mode??0,size:W2.size??0,...P?{layer:G0}:{}};l.set(M2,E2),await P?.(G0,M2,E2,j2,{uid:W2.uid??0,gid:W2.gid??0,...W2.pax?{pax:W2.pax}:{}})}if(!j2.readableEnded)for await(let E2 of j2);})().then(()=>r0(),(M2)=>{j2.destroy(M2),O0.destroy(M2)})}),await WI2(YI2(F0),O0);for(let W2 of k.keys()){let d0=v20(W2);if(x0.has("")||d0.some((r0)=>u0.has(r0))||d0.slice(0,-1).some((r0)=>x0.has(r0)||l.has(r0)&&l.get(r0).type!=="directory"))k.delete(W2)}for(let[W2,d0]of l)k.set(W2,d0);for(let W2 of l.keys())for(let d0 of v20(W2).slice(0,-1)){if(k.has(d0))continue;if(++d>L)throw Error("Runtime base has too many entries");let r0={type:"directory",mode:493,size:0,...P?{layer:G0}:{}};k.set(d0,r0),await P?.(G0,d0,r0)}}finally{await sc0(F0,{force:!0})}}return k}finally{await sc0(i,{recursive:!0,force:!0})}}function sW(W,T){let w=g20(T.replace(/^\//,""));for(let P=0;P<40;P++){let L=v20(w),S=!1;for(let[k,d]of L.entries()){let i=W.get(d);if(i&&(i.type==="symlink"||i.type==="link")){if(!i.link||/[\\\x00-\x1f\x7f]/.test(i.link))throw Error("Invalid link in runtime base");let G0=i.link.startsWith("/")?i.link:`/${i.type==="link"?"":sN.dirname(d)+"/"}${i.link}`;w=g20(sN.normalize(G0+(k<L.length-1?`/${w.slice(d.length+1)}`:"")).slice(1)),S=!0;break}if(k<L.length-1&&i&&i.type!=="directory")return}if(!S)return W.get(w)}throw Error("Runtime base contains a link cycle")}function NT0(W,T,w=""){let P=sW(T,W.interpreter);if(!P||P.type!=="file"||!P.size||!(P.mode&73))throw Error(`Runtime base is missing the executable ${W.libc} loader ${W.interpreter}; this base cannot run the selected release`);if(W.libc!=="musl")return;let L=`/etc/${sN.basename(W.interpreter).replace(".so.1",".path")}`,S=sW(T,L);if(S&&(S.type!=="file"||S.muslSearchPath===void 0))throw Error(`Cannot inspect musl library search configuration ${L}; use a regular file of at most 4096 bytes at this path`);let k=`${w}:${S?.muslSearchPath??"/lib:/usr/local/lib:/usr/lib"}`.split(/[:\n]/).filter(Boolean);if(k.some((d)=>!d.startsWith("/")||/[\x00-\x1f\x7f]/.test(d)))throw Error("musl library search paths must be absolute paths without control characters");for(let d of W.needed){if(d==="libc.so"||d===sN.basename(W.interpreter).replace("ld-","libc."))continue;if(!k.some((G0)=>{let Q0=sW(T,sN.join(G0,d));return Q0?.type==="file"&&Q0.size>0}))throw Error(`musl runtime base is missing ${d}; install the runtime libraries (Alpine typically needs libstdc++) before injection`)}}function nc0(W,T,w,P=""){let L=g20(W.path.slice(1));if(!L||W.path!==`/${L}`)throw Error("Invalid runtime injection destination");for(let k of v20(L).slice(0,-1)){let d=w.get(k);if(d&&d.type!=="directory")throw Error("Runtime destination has a non-directory or symlink parent in the base")}let S=w.get(L);if(S&&S.type!=="file")throw Error("Runtime destination overlaps a non-regular base entry");return NT0(W,w,P),[{path:L,type:"file",content:T,executable:!0}]}async function m20(W,T,w,P,L,S=""){let k=nc0(T,w,P,S),d=jx[T.version];if(!d)throw Error("Missing injected runtime licensing notices");for(let[i,G0]of[["/usr/share/licenses/bunko-runtime/LICENSE.md",d],["/usr/share/licenses/bunko-runtime/SOURCE.json",d4({version:T.version,revision:T.releaseRevision,source:`https://github.com/oven-sh/bun/tree/${T.releaseRevision}`,archive:T.url,archiveDigest:T.archiveDigest})]]){let Q0=nc0({...T,path:i},Buffer.from(G0),P,S);k.push(...Q0.map((F0)=>({...F0,executable:!1})))}return{entries:k,layer:await GO(W,k,"runtime",L,[])}}function fL(W){if(W===void 0)return"glibc";if(W!=="glibc"&&W!=="musl")throw Error("runtime.libc must be glibc or musl");return W}function gx(W,T){return W==="musl"?`/lib/ld-musl-${T.architecture==="amd64"?"x86_64":"aarch64"}.so.1`:T.architecture==="amd64"?"/lib64/ld-linux-x86-64.so.2":"/lib/ld-linux-aarch64.so.1"}function d20(W,T,w){let P=(S)=>{let k=sW(W,S);return k?.type==="file"&&k.size>0&&Boolean(k.mode&73)},L=gx(T,w);if(T==="musl"&&!P(L))throw Error(`musl runtime base requires executable loader ${L}; choose an Alpine/musl base`);if(T==="glibc"&&!P(L)&&P(gx("musl",w)))throw Error("Base uses musl; set runtime.libc to musl and use compatible runtime and native dependencies")}function ac0(W,T,w){if(W!=="musl")return;let P=T.find((L)=>!w.has(L.path)&&L.needed.includes("libc.so.6"));if(P)throw Error(`Native dependency ${P.path} requires glibc; supply a musl build or select runtime.libc glibc`)}import{readFile as HI2,realpath as RT0}from"fs/promises";import{dirname as rc0,resolve as oc0}from"path";async function c20(W){let T={};for(let[w,P]of Object.entries(W)){let L=await RT0(w);if(T[L])throw Error("Duplicate canonical dependency target");T[L]=P}return T}async function tc0(W){let T=X6(JSON.parse(await HI2(W,"utf8")),"Dependency map"),w={};for(let[P,L]of Object.entries(T)){let S=await RT0(oc0(rc0(W),P));if(w[S])throw Error("Duplicate canonical dependency target");let k=X6(L,"Dependency platforms"),d={};if(!Object.keys(k).length)throw Error("Dependency platform map cannot be empty");for(let[i,G0]of Object.entries(k)){if(!["linux/amd64","linux/arm64"].includes(i)||typeof G0!=="string"||!G0)throw Error("Invalid dependency platform reference");if(!G0.startsWith("layout:")&&!/@sha256:[a-f0-9]{64}$/.test(G0))throw Error("Dependency artifacts must be layouts or digest-pinned references");d[i]=G0.startsWith("layout:")?`layout:${await RT0(oc0(rc0(W),G0.slice(7)))}`:G0}w[S]=d}return w}import{join as qM0}from"path";import{posix as JI2}from"path";function yL(W){if(W===void 0||W==="preserve")return;if(!["0444","0555","0644","0755"].includes(String(W))||typeof W!=="string")throw Error("Asset mode must be preserve, 0444, 0555, 0644 or 0755");return parseInt(W,8)}function Ud(W){let T=W.map((w)=>new Bun.Glob(w));return(w)=>{for(let P=w;P!==".";P=JI2.dirname(P))if(T.some((L)=>L.match(P)))return!0;return!1}}function ec0(W,T,w,P){let L=Ud(w);return W.filter((S)=>!L(S.path.slice(T.length+1))).map((S)=>S.type==="file"&&P!==void 0?{...S,mode:P,executable:Boolean(P&73)}:S)}function iJ(W){if(W==="linux/amd64")return{os:"linux",architecture:"amd64"};if(W==="linux/arm64"||W==="linux/arm64/v8")return{os:"linux",architecture:"arm64",variant:"v8"};throw Error(`Supported platforms: linux/amd64 or linux/arm64 (received ${W})`)}var ST0=(W)=>`${W.os}/${W.architecture}/${W.variant??""}`;var UI2=new Set(["--watch","--hot","--no-clear-screen","--smol","--cpu-prof","--cpu-prof-md","--heap-prof","--heap-prof-md","--no-install","--prefer-offline","--prefer-latest","--expose-gc","--no-deprecation","--throw-deprecation","--zero-fill-buffers","--use-system-ca","--use-openssl-ca","--use-bundled-ca","--redis-preconnect","--sql-preconnect","--no-addons","--no-env-file","--no-orphans","--experimental-http2-fetch","--experimental-http3-fetch","--insecure-http-parser","--experimental-stream-iter","--no-warnings","--trace-warnings","--trace-deprecation","--pending-deprecation","--tls-min-v1.0","--tls-min-v1.1","--tls-min-v1.2","--tls-min-v1.3","--tls-max-v1.2","--tls-max-v1.3","--no-ffi-cc","--preserve-symlinks","--preserve-symlinks-main","--no-macros","--jsx-side-effects","--ignore-dce-annotations"]),BI2=new Set(["--preload","--require","--import","--cpu-prof-name","--cpu-prof-dir","--cpu-prof-interval","--heap-prof-name","--heap-prof-dir","--heap-prof-interval","--port","--conditions","--fetch-preconnect","--max-http-header-size","--dns-result-order","--title","--unhandled-rejections","--console-depth","--user-agent","--env-file","--cwd","--config","--watch-kill-signal","--redirect-warnings","--disable-warning","--main-fields","--extension-order","--tsconfig-override","--define","--drop","--feature","--loader","--jsx-factory","--jsx-fragment","--jsx-import-source","--jsx-runtime"]),$l0=new Set(["--inspect","--inspect-wait","--inspect-brk"]),_l0={"-r":"--preload","-c":"--config","-d":"--define","-l":"--loader"};function Xl0(W){let T=[];for(let w=0;w<W.length;w++){let P=W[w],L=P.indexOf("="),S=L<0?P:P.slice(0,L),k=Object.hasOwn(_l0,S)?_l0[S]:S;if(UI2.has(k)&&L<0){T.push(k);continue}if($l0.has(k)&&L<0){T.push(k);continue}if(BI2.has(k)||$l0.has(k)){let d=L<0?W[++w]:P.slice(L+1);if(d&&(L>=0||!d.startsWith("-"))&&!d.includes("\x00")){T.push(`${k}=${d}`);continue}throw Error(`runtime.args requires a non-empty value for ${k}; use --option=value`)}throw Error(`Invalid runtime.args at index ${w}: expected a supported Bun runtime option; put application arguments in args`)}return T}var VI2=new Set(["mode","base","platforms","assets","assetExcludes","assetMode","assetMappings","external","env","ports","user","workdir","labels","annotations","args","build","runtime","deps","inheritBaseOciLabels","toolchain"]),Gl0=["env","labels","annotations","build","runtime","deps","toolchain"];function Dl0(W,T,w=!1){if(W.defaults!==void 0&&!w)throw Error("bunko.defaults is only supported at a workspace root");let P=X6(T??{},"Workspace bunko"),L=X6(P.defaults??{},"bunko.defaults");if(Object.keys(L).some((i)=>!VI2.has(i)))throw Error("Unsupported workspace default option");let{defaults:S,...k}=W,d={...L,...k};for(let i of Gl0)if(k[i]===null)d[i]=void 0;else if(L[i]!==void 0&&k[i]!==void 0)d[i]={...X6(L[i],`defaults.${i}`),...X6(k[i],i)};if(L.build!==void 0&&k.build!==void 0&&k.build!==null){let i=X6(L.build,"defaults.build"),G0=X6(k.build,"build");if(i.define!==void 0&&G0.define!==void 0)d.build.define=G0.define===null?{}:{...X6(i.define,"defaults.build.define"),...X6(G0.define,"build.define")}}return d}function Ql0(W,T){let w=X6(T??{},"Workspace bunko"),P=X6(w.defaults??{},"bunko.defaults"),L=[];for(let[S,k]of Object.entries(P)){if(!Gl0.includes(S)){if(W[S]===void 0)L.push(S);continue}if(W[S]===null||k===null)continue;let d=X6(k,`defaults.${S}`),i=X6(W[S]??{},S);for(let[G0,Q0]of Object.entries(d))if(S==="build"&&G0==="define"){if(i.define===null||Q0===null)continue;let F0=X6(Q0,"defaults.build.define"),l=X6(i.define??{},"build.define");for(let u0 of Object.keys(F0))if(l[u0]===void 0)L.push(`build.define.${u0}`)}else if(i[G0]===void 0)L.push(`${S}.${G0}`)}return L.sort()}function Zl0(W,T,w=[]){let P=X6(T??{},"toolchain");if(Object.keys(P).some((k)=>!["version","revision"].includes(k)))throw Error("toolchain accepts version and revision only");let L=[],S=new Map;if(P.version!==void 0){if(!mN(P.version))throw Error("toolchain.version must be an exact supported Bun version (>=1.3.13 <1.5)");L.push({version:P.version,source:"bunko.toolchain.version"})}if(P.revision!==void 0&&(typeof P.revision!=="string"||!/^[a-f0-9]{7,40}$/.test(P.revision)))throw Error("toolchain.revision must be the exact revision printed by bun --revision");if(W.forEach((k,d)=>{let i=w[d]??"package.json";if(typeof k.packageManager==="string"&&k.packageManager.startsWith("bun@")){let Q0=k.packageManager.slice(4);if(!mN(Q0))throw Error(`Bun packageManager must declare an exact supported version (${i}#packageManager)`);L.push({version:Q0,source:`${i}#packageManager`})}let G0=X6(k.engines??{},"engines");if(G0.bun!==void 0){if(typeof G0.bun!=="string"||!G0.bun.trim())throw Error(`engines.bun must be a nonempty version range (${i}#engines.bun)`);if(!S.has(G0.bun))S.set(G0.bun,`${i}#engines.bun`)}}),new Set(L.map((k)=>k.version)).size>1)throw Error(`Conflicting Bun toolchain version declarations: ${L.map((k)=>`${k.version} (${k.source})`).join(", ")}`);return{version:L[0]?.version,versionSource:L[0]?.source,revision:P.revision,ranges:[...S.keys()],rangeSources:[...S.values()]}}function vx(W,T){let w=`Selected Bun ${T.version} (${T.path})`;if(W.version&&W.version!==T.version)throw Error(`${w} does not match the declared version ${W.version} (${W.versionSource??"package.json#packageManager"}). Install Bun ${W.version} and select it with --bun-path, or change the declaration.`);if(W.revision&&W.revision!==T.revision)throw Error(`${w} revision ${T.revision} does not match the declared revision ${W.revision} (bunko.toolchain.revision). Install that Bun build and select it with --bun-path, or change the declaration.`);W.ranges.forEach((L,S)=>{if(!Bun.semver.satisfies(T.version,L))throw Error(`${w} does not satisfy engines.bun ${L} (${W.rangeSources?.[S]??"package.json#engines.bun"}). Install a Bun version in that range and select it with --bun-path, or change the declaration.`)})}import{basename as TI2,extname as MI2}from"path";var Yl0=["usr/share/fonts","usr/local/share/fonts"];function iN(W){return Yl0.some((T)=>W===T||W.startsWith(`${T}/`))}function l20(W,T,w){if(Yl0.includes(W)||T&73)throw Error("System font mappings require non-executable files below a font directory");if(/\.(ttf|otf|ttc|otc)$/i.test(W)){if(w<12||w>134217728)throw Error("System font file must be between 12 bytes and 128 MiB");return"font"}if(/^(?:OFL|LICENSE|LICENCE|COPYING|NOTICE|README)(?:[._-][a-z0-9._-]+)?$/i.test(TI2(W))&&w<=1048576)return"notice";throw Error("System font mappings only accept TTF, OTF, TTC, OTC and license/notice files")}async function p20(W,T,w){let P=Bun.file(W),L=P.size;if(l20(T,w,L)==="notice"){try{if(new TextDecoder("utf-8",{fatal:!0}).decode(await P.arrayBuffer()).includes("\x00"))throw Error()}catch{throw Error("System font license/notice files must be UTF-8 text without NUL bytes")}return}let S=()=>Error("Invalid system font SFNT data");async function k(Q0,F0){if(Q0<0||Q0+F0>L)throw S();let l=Buffer.from(await P.slice(Q0,Q0+F0).arrayBuffer());if(l.length!==F0)throw S();return l}let d=await k(0,12),i=[".ttc",".otc"].includes(MI2(T).toLowerCase()),G0=[0];if(i){let Q0=d.readUInt32BE(8);if(d.readUInt32BE(0)!==1953784678||![65536,131072].includes(d.readUInt32BE(4))||Q0<1||Q0>64)throw S();let F0=await k(12,Q0*4);if(G0=Array.from({length:Q0},(l,u0)=>F0.readUInt32BE(u0*4)),G0.some((l)=>l<12+Q0*4))throw S()}for(let Q0 of G0){let F0=await k(Q0,12),l=F0.readUInt32BE(0),u0=F0.readUInt16BE(4);if(![65536,1330926671,1953658213].includes(l)||u0<1||u0>4096)throw S();let x0=await k(Q0+12,u0*16),O0=new Set;for(let W2=0;W2<u0;W2++){let d0=W2*16,r0=x0.toString("latin1",d0,d0+4),j2=x0.readUInt32BE(d0+8),M2=x0.readUInt32BE(d0+12);if(O0.has(r0)||!/^[\x20-\x7e]{4}$/.test(r0)||j2<12||j2+M2>L||["head","name","cmap"].includes(r0)&&M2===0)throw S();O0.add(r0)}if(!["head","name","cmap"].every((W2)=>O0.has(W2)))throw S()}}import{chmod as lE2,copyFile as pE2,lstat as J10,mkdir as sE2,readdir as iE2,realpath as Jp0}from"fs/promises";import{basename as nE2,dirname as aE2,join as mK,relative as rE2,resolve as Up0}from"path";import{lstat as qI2}from"fs/promises";import{dirname as AI2,resolve as OI2}from"path";function wI2(W,T){if(typeof W!=="string"||!W||W!==W.trim())throw Error(`Invalid --cache-${T} location`);if(!W.includes("="))return{type:"registry",repo:O3(JT(W))};let w=new Map;for(let k of W.split(",")){let d=k.indexOf("="),i=k.slice(0,d),G0=k.slice(d+1);if(d<1||!G0||G0!==G0.trim()||w.has(i))throw Error(`Invalid --cache-${T} location`);w.set(i,G0)}let P=w.get("type"),L=T==="from"?"src":"dest",S=P==="registry"?"repo":L;if(P!=="registry"&&P!=="local")throw Error("Supported cache types are registry and local");if(w.size!==2||!w.has(S))throw Error(`Cache type=${P} requires only type and ${S}`);return P==="registry"?{type:P,repo:O3(JT(w.get(S)))}:{type:P,path:OI2(w.get(S))}}function DO(W,T){let w=T==="from"?32:8;if(W!==void 0&&(!Array.isArray(W)||W.length>w))throw Error(`Use at most ${w} cache ${T==="from"?"read sources":"write destinations"}`);return[...new Map((W??[]).map((P)=>{let L=wI2(P,T);return[JSON.stringify(L),L]})).values()]}async function ux(W){let T=await X$(W);if(AI2(T)===T)throw Error("A filesystem root cannot be used as an explicit cache location");try{if((await qI2(T)).isSymbolicLink())throw Error("Explicit cache roots must not be symbolic links")}catch(w){if(w.code!=="ENOENT")throw w}return T}import{AsyncLocalStorage as zI2}from"async_hooks";import{setTimeout as PI2}from"timers/promises";import{randomBytes as LI2}from"crypto";var nN={name:"bunko",version:"0.8.1",private:!0,license:"MIT",type:"module",description:"Build OCI images from Bun applications without Dockerfiles",bin:{bunko:"./packages/bunko/cli.ts"},engines:{bun:">=1.3.13 <1.5"},scripts:{dev:"bun packages/bunko/cli.ts",build:"bun scripts/bundle.ts",test:"bun test --timeout 15000","bench:syntax":"bun test/syntax-benchmark.ts","release:prepare":"bun scripts/release.ts",typecheck:"tsc --noEmit","test:smoke":"bun test/smoke.ts","test:registry":"bun test/registry-conformance.ts","test:registry-local":"bun test/registry-local.ts","test:build-smoke":"bun test/build-smoke.ts","test:resolve-smoke":"bun test/resolve-smoke.ts","test:bundled-smoke":"bun test/bundled-smoke.ts","test:closure-smoke":"bun test/closure-smoke.ts","test:workspace-smoke":"bun test/workspace-smoke.ts",check:"bun run typecheck && bun run test","test:compile-smoke":"bun test/compile-smoke.ts","test:native-ca":"bun test/native-ca-smoke.ts","test:runtime-ca-compile":"bun test/runtime-ca-compile-smoke.ts","test:operations-smoke":"bun test/operations-smoke.ts","test:apply-smoke":"bun test/apply-smoke.ts","bench:performance":"bun test/performance-benchmark.ts","test:runtime-smoke":"bun test/runtime-smoke.ts","test:ko-smoke":"bun test/ko-smoke.ts","bench:builders":"bun test/buildkit-benchmark.ts","test:local-resolve":"bun test/local-resolve-smoke.ts","test:prepared-deps":"bun test/buildkit-deps-smoke.ts","test:zstd-smoke":"bun test/zstd-smoke.ts","test:metadata":"bun test/metadata-smoke.ts","test:cache-distribution":"bun test/cache-distribution-smoke.ts","test:signing-smoke":"bun test/signing-smoke.ts","test:prune-smoke":"bun test/prune-smoke.ts","test:multiple-entrypoints":"bun test/multiple-entrypoints-smoke.ts","test:asset-contexts":"bun test/asset-contexts-smoke.ts","test:application-validation":"bun scripts/validation/run-fixture.ts","test:rebase":"bun scripts/validation/rebase-smoke.ts","test:rebase-registry":"bun scripts/validation/rebase-registry.ts","test:musl":"bun scripts/validation/musl-smoke.ts","test:runtime-injection":"bun scripts/validation/runtime-smoke.ts","test:telemetry":"bun scripts/validation/telemetry-smoke.ts","test:fonts":"bun scripts/validation/fonts-smoke.ts","test:image-acceptance":"bun scripts/validation/image-acceptance.ts","test:cross-device":"bun scripts/validation/cross-device-smoke.ts"},devDependencies:{"@types/bun":"1.3.13","@types/tar-stream":"3.1.4","@types/yauzl":"3.4.0",ignore:"7.0.9","tar-stream":"3.2.1",typescript:"5.9.3",yaml:"2.9.0",yauzl:"3.4.0"}};var Bd=new zI2,s20=(W)=>Object.entries(W).map(([T,w])=>({key:T,value:{stringValue:w}})),CT0=(W)=>LI2(W).toString("hex"),i20=[0.01,0.05,0.1,0.5,1,5,10,30,60,300];function Wl0(W,T=process.env){if(!W||T.OTEL_SDK_DISABLED?.toLowerCase()==="true")return;T=Object.fromEntries(Object.entries(T).filter(([,d])=>d!==""));let w={};try{for(let d of(T.OTEL_EXPORTER_OTLP_HEADERS??"").split(",").filter(Boolean)){let i=d.indexOf("=");if(i<1)throw Error();let G0=d.slice(0,i).trim().toLowerCase(),Q0=decodeURIComponent(d.slice(i+1).trim());if(!/^[!#$%&'*+.^_`|~0-9a-z-]+$/.test(G0)||/[\r\n]/.test(Q0)||["host","content-type","content-length","connection","transfer-encoding"].includes(G0))throw Error();w[G0]=Q0}new Headers(w)}catch{throw Error("Invalid OTEL_EXPORTER_OTLP_HEADERS")}let P=Number(T.OTEL_EXPORTER_OTLP_TIMEOUT??"2000");if(!Number.isInteger(P)||P<1||P>1e4)throw Error("OTEL_EXPORTER_OTLP_TIMEOUT must be 1\u201310000 milliseconds");let L=(d)=>{let i=T[`OTEL_${d}_EXPORTER`]??"otlp";if(i==="none")return;if(i!=="otlp")throw Error(`OTEL_${d}_EXPORTER must be otlp or none`);if((T[`OTEL_EXPORTER_OTLP_${d}_PROTOCOL`]??T.OTEL_EXPORTER_OTLP_PROTOCOL??"http/json")!=="http/json")throw Error("Bunko telemetry supports only OTLP http/json");let G0;try{let Q0=T[`OTEL_EXPORTER_OTLP_${d}_ENDPOINT`];if(G0=new URL(Q0??T.OTEL_EXPORTER_OTLP_ENDPOINT??"http://127.0.0.1:4318"),!["https:","http:"].includes(G0.protocol)||G0.username||G0.password||G0.search||G0.hash)throw Error();if(!Q0)G0.pathname=`${G0.pathname.replace(/\/$/,"")}/v1/${d.toLowerCase()}`}catch{throw Error(`Invalid OTLP ${d.toLowerCase()} endpoint`)}if(G0.protocol==="http:"&&Object.keys(w).length)throw Error("OTLP exporter headers require HTTPS endpoints");return G0},S=L("TRACES"),k=L("METRICS");return S||k?{traces:S,metrics:k,headers:w,timeout:P}:void 0}class bT0{config;warn;traceId=CT0(16);root=CT0(8);wall=BigInt(Date.now())*1000000n;start=performance.now();spans=[];series=new Map;groups=new Map;targets=new Map;dropped=0;ended=!1;running=!1;timestamp(){return(this.wall+BigInt(Math.round((performance.now()-this.start)*1e6))).toString()}constructor(W,T=()=>{}){this.config=W;this.warn=T}span(W,T,w={}){let P=this.timestamp();return{traceId:this.traceId,spanId:CT0(8),parentSpanId:T,name:W,kind:1,startTimeUnixNano:P,endTimeUnixNano:P,attributes:s20(w),status:{code:0}}}group(W,T,w,P){let L=this.groups.get(W);if(!L){if(this.groups.size>=256)return this.dropped++,w;L=this.span(T,w,P),this.groups.set(W,L)}return L.spanId}async phase(W,T,w,P){let L=Bd.getStore();w??=L.target,P??=L.platform;let S=L.parent;if(w!==L.target||P!==L.platform){if(S=this.root,w){if(!this.targets.has(w)&&this.targets.size<128)this.targets.set(w,String(this.targets.size));let F0=this.targets.get(w)??"overflow";if(S=this.group(`target:${F0}`,"bunko.target",S,{"bunko.target.index":F0}),P)S=this.group(`target:${F0}:${P}`,"bunko.platform",S,{"bunko.platform":P})}}let k={"bunko.phase":W,...P?{"bunko.platform":P}:{}},d=this.span(`bunko.${W}`,S,k),i=performance.now(),G0=this.spans.length<4096;if(G0)this.spans.push(d);else this.dropped++;let Q0="success";try{return await Bd.run({session:this,parent:G0?d.spanId:S,target:w,platform:P},T)}catch(F0){throw Q0="failure",d.status.code=2,F0}finally{d.endTimeUnixNano=this.timestamp();let F0=w?this.targets.get(w)??"overflow":void 0;for(let l of F0===void 0?[]:[`target:${F0}`,`target:${F0}:${P}`]){let u0=this.groups.get(l);if(u0)u0.endTimeUnixNano=d.endTimeUnixNano}this.record("bunko.phase.duration","s",(performance.now()-i)/1000,{...k,"bunko.result":Q0},!0)}}record(W,T,w,P,L=!1){if(!Number.isFinite(w)||w<0)return;let S=JSON.stringify([W,Object.entries(P).sort()]),k=this.series.get(S);if(!k){if(this.series.size>=512){this.dropped++;return}k={name:W,unit:T,attributes:P,sum:0,count:0,buckets:L?Array(i20.length+1).fill(0):void 0},this.series.set(S,k)}if(k.sum+=w,k.count++,k.buckets){let d=i20.findIndex((i)=>w<=i);k.buckets[d<0?i20.length:d]++}}async run(W,T,w=()=>!1){if(this.running)throw Error("Telemetry invocation may only run once");this.running=!0;let P="success";try{let L=await Bd.run({session:this,parent:this.root},T);if(w(L))P="failure";return L}catch(L){throw P="failure",L}finally{let L=this.timestamp();for(let S of this.groups.values())this.spans.push(S);this.spans.push({...this.span("bunko.build"),spanId:this.root,startTimeUnixNano:this.wall.toString(),endTimeUnixNano:L,attributes:s20({"bunko.command":W}),status:{code:P==="failure"?2:1}}),this.record("bunko.build.count","{build}",1,{"bunko.command":W,"bunko.result":P}),this.record("bunko.build.duration","s",(performance.now()-this.start)/1000,{"bunko.command":W,"bunko.result":P},!0),await this.flush()}}async flush(){if(this.ended)return;this.ended=!0;let W={attributes:s20({"service.name":"bunko","service.version":nN.version})},T={name:"bunko",version:nN.version},w=this.timestamp(),P=new Map;for(let i of this.series.values()){let G0=P.get(i.name),Q0=i.buckets?"histogram":"sum";if(!G0)G0={name:i.name,unit:i.unit,[Q0]:{aggregationTemporality:1,...i.buckets?{}:{isMonotonic:!0},dataPoints:[]}},P.set(i.name,G0);G0[Q0].dataPoints.push({attributes:s20(i.attributes),startTimeUnixNano:this.wall.toString(),timeUnixNano:w,...i.buckets?{count:String(i.count),sum:i.sum,explicitBounds:i20,bucketCounts:i.buckets.map(String)}:{asDouble:i.sum}})}let L=[[this.config.traces,{resourceSpans:[{resource:W,scopeSpans:[{scope:T,spans:this.spans}]}]}],[this.config.metrics,{resourceMetrics:[{resource:W,scopeMetrics:[{scope:T,metrics:[...P.values()]}]}]}]],S=new AbortController,k=setTimeout(()=>S.abort(),this.config.timeout),d=this.dropped>0;try{await Promise.all(L.map(async([i,G0])=>{if(!i)return;try{let Q0=JSON.stringify(G0),l=await(async()=>{for(let d0=0;;d0++){HY();let r0;try{r0=await fetch(i,{method:"POST",headers:{...this.config.headers,"content-type":"application/json"},body:Q0,redirect:"manual",signal:iM(S.signal)})}catch{if(d0||S.signal.aborted)throw Error()}if(r0&&![429,502,503,504].includes(r0.status))return r0;let j2=r0?.headers.get("retry-after"),M2=100;if(j2){let K2=/^\d+$/.test(j2)?Number(j2)*1000:Date.parse(j2)-Date.now();if(Number.isFinite(K2))M2=Math.max(M2,K2)}if(r0)await r0.body?.cancel();if(d0||M2>=this.config.timeout)throw Error();await PI2(M2,void 0,{signal:iM(S.signal)})}})();if(l.status!==200||!l.body)throw await l.body?.cancel(),Error();let u0=l.body.getReader(),x0=0,O0=[];try{while(!0){let{done:d0,value:r0}=await u0.read();if(d0)break;if(x0+=r0.length,x0>65536)throw Error();O0.push(r0)}}finally{await u0.cancel()}let W2=JSON.parse(Buffer.concat(O0).toString());if(!W2||typeof W2!=="object"||Array.isArray(W2))throw Error();if(W2.partialSuccess!==void 0){let d0=W2.partialSuccess;if(!d0||typeof d0!=="object"||Array.isArray(d0))throw Error();let r0=d0.rejectedSpans??d0.rejectedDataPoints??0;if(!/^[0-9]+$/.test(String(r0))||!Number.isSafeInteger(Number(r0))||d0.errorMessage!==void 0&&typeof d0.errorMessage!=="string")throw Error();if(Number(r0)>0||d0.errorMessage)d=!0}}catch{d=!0}}))}catch{d=!0}finally{if(S.abort(),clearTimeout(k),d)try{this.warn()}catch{}}}}function Hl0(W,T,w,P){let L=Bd.getStore();return L?L.session.phase(W,T,w,P):T()}function cH(W,T,w,P,L=!1){Bd.getStore()?.session.record(W,T,w,P,L)}function Jl0(W,T,w,P){let L=W.type==="registry"?W.repo:W.path,S=new hL(T,{...W.type==="registry"?{readRepositories:[W.repo],registry:w}:{directory:W.path},lookupMetrics:!1,log:P}),k=new Map,d=new Map;return{type:W.type,destination:L,async read(...i){if(W.type==="local")await ux(W.path);let G0=await S.get(...i);if(G0)k.set(G0.key,G0);return{record:G0,unavailable:S.events.at(-1)?.reason==="invalid-or-unavailable"}},...W.type==="registry"?{async readPlan(...i){let G0=await S.remotePlan(...i);if(G0.record)d.set(G0.record.planKey,G0.record);return{record:G0.record,unavailable:G0.unavailable}},async writePlan(i){let G0=d.get(i.planKey);if(G0&&Buffer.from(d4(G0)).equals(Buffer.from(d4(i)))){let l={backend:"registry",destination:L,key:i.planKey,kind:i.kind,status:"already-present",bytes:0,durationMs:0};return Vd(l),{event:l}}let F0=await new hL(T,{repository:W.repo,exportError:"fail",registry:w,log:P}).publishPlan(i);return Vd(F0.event),F0}}:{},async write(i){if(d4(i).length>tY){let l={backend:W.type,destination:L,key:i.key,kind:i.kind,status:"failed",reason:"invalid",bytes:0,durationMs:0};return Vd(l),{event:l,error:Error("Cache metadata exceeds size limit")}}if(W.type==="registry"){let l=k.get(i.key);if(l&&Buffer.from(d4(l)).equals(Buffer.from(d4(i)))){let W2={backend:"registry",destination:L,key:i.key,kind:i.kind,status:"already-present",bytes:0,durationMs:0};return Vd(W2),{event:W2}}let u0=new hL(T,{repository:W.repo,exportError:"fail",registry:w,log:P});await u0.remember(i);let x0;try{await u0.publish()}catch(W2){x0=W2 instanceof Td?W2.cause:W2}let O0=u0.exports[0];if(!O0)throw Error("Cache exporter produced no result");return{event:O0,error:x0}}let G0=performance.now(),Q0={backend:"local",destination:L,key:i.key,kind:i.kind,status:"written",bytes:0,durationMs:0},F0;try{await ux(W.path);let u0=await new hL(T,{directory:W.path,strictLocal:!0,lookupMetrics:!1,log:P}).get(i.key,i.kind,!1,{destination:i.destination,platform:i.platform});if(u0){if(!Buffer.from(d4(u0)).equals(Buffer.from(d4(i))))throw new KB("Different output for the same local cache key");Q0.status="already-present"}else await new hL(T,{directory:W.path,strictLocal:!0,lookupMetrics:!1,log:P}).remember(i),Q0.bytes=i.layer.descriptor.size+d4(i).length}catch(l){F0=l,Q0.status="failed",Q0.reason=l instanceof KB?"conflict":"unavailable",P(`Could not export ${i.kind} local cache (${Q0.reason})
|
|
915
915
|
`)}return Q0.durationMs=performance.now()-G0,Vd(Q0),{event:Q0,error:F0}}}}function Vd(W){let T={"bunko.cache.backend":W.backend,"bunko.cache.kind":W.kind,"bunko.cache.result":W.status,"bunko.cache.reason":W.reason??"none"};cH("bunko.cache.export.count","{export}",1,T),cH("bunko.cache.export.bytes","By",W.bytes,T),cH("bunko.cache.export.duration","s",W.durationMs/1000,T,!0)}var s7=F20(a20(),1),Vl0="Bundling may relocate this module-relative path. Use an explicit runtime asset root and verify file reads in the image.",Bl0=/^(?:@[a-zA-Z0-9_.-]+\/)?[a-zA-Z0-9_.-]+$/,II2=new Set(["dir","dirname","path","filename","url"]),EI2=new Set(["__dirname","__filename"]),FI2=100;function Tl0(W){if(!W?.length)return;let T=new Set,w=new Map,P=[];for(let k of W)if(k.declared)T.add(k.name);else if(k.via.length){let d=k.via.join(", ");for(let i of k.via)T.add(i);(w.get(d)??w.set(d,[]).get(d)).push(k.name)}else P.push(k.name);let L=(k)=>[...k].sort().map((d)=>JSON.stringify(d)).join(", "),S=[];if(T.size)S.push(`Add ${L(T)} to bunko.external so ${T.size===1?"it stays":"they stay"} in node_modules with ${T.size===1?"its":"their"} module-relative files${w.size?` (${[...w].map(([k,d])=>`${d.join(", ")} reached through ${k}`).join("; ")})`:""}`);if(P.length)S.push(`${L(P)} ${P.length===1?"is":"are"} flagged inside node_modules without a declared dependency path; externalize the declared dependency that loads ${P.length===1?"it":"them"}`);return S.join(". ")}function r20(W){let T=W;if(!T||!Number.isSafeInteger(T.total)||T.total<0||!Array.isArray(T.warnings)||T.warnings.length!==Math.min(T.total,FI2))throw Error("Invalid module-location diagnostics");let w=new Set;for(let P of T.warnings){if(!P||P.code!=="BUNKO_MODULE_LOCATION"||typeof P.file!=="string"||!P.file||P.file.length>4096||/[\x00-\x1f\\]/.test(P.file)||P.file.startsWith("/")||P.file.split("/").some((S)=>S===".."||S==="."||!S)||!Number.isSafeInteger(P.line)||P.line<1||!Number.isSafeInteger(P.column)||P.column<1||![...EI2,...[...II2].map((S)=>`import.meta.${S}`)].includes(P.expression))throw Error("Invalid module-location warning");let L=`${P.file}\x00${P.expression}`;if(w.has(L))throw Error("Duplicate module-location warning");w.add(L)}if(T.packages!==void 0){if(!Array.isArray(T.packages)||T.packages.length>1e4)throw Error("Invalid module-location packages");let P="";for(let L of T.packages){if(!L||typeof L.name!=="string"||!Bl0.test(L.name)||L.name<=P||typeof L.declared!=="boolean"||!Array.isArray(L.via)||L.via.length>1e4||L.via.some((S,k)=>typeof S!=="string"||!Bl0.test(S)||k&&S<=L.via[k-1])||L.declared&&L.via.length)throw Error("Invalid module-location package");P=L.name}}return T}import{mkdir as pl0,rename as sl0,rm as il0,writeFile as nl0}from"fs/promises";import{randomUUID as al0}from"crypto";import{join as ZO}from"path";var jl0=F20(Sl0(),1);import{createReadStream as _E2}from"fs";import{lstat as Cl0}from"fs/promises";import{dirname as XE2,join as bl0,relative as GE2}from"path";function G10(W){let T=new Map,w=new Map,P=0;function L(k){if(!T.has(k))T.set(k,(async()=>{if(k){let Q0=await Cl0(bl0(W,k));if(!Q0.isDirectory()||Q0.isSymbolicLink())throw Error("Source ignore scope must be a regular directory")}let d=bl0(W,k,".gitignore"),i;try{i=await Cl0(d)}catch(Q0){if(Q0.code==="ENOENT")return;throw Q0}if(!i.isFile()||i.isSymbolicLink()||i.size>262144)throw Error("Source .gitignore must be a regular file of at most 256 KiB");let G0=await Bun.file(d).slice(0,262145).text();if(P+=Buffer.byteLength(G0),Buffer.byteLength(G0)>262144||P>4194304)throw Error("Source .gitignore rules exceed the size limit");return jl0.default({ignorecase:!1}).add(G0)})());return T.get(k)}function S(k,d=!1){if(!k||k===".")return Promise.resolve(!1);let i=k+(d?"/":"");if(!w.has(i))w.set(i,(async()=>{let G0=XE2(k);if(G0!=="."&&await S(G0,!0))return!0;let Q0=k.split("/"),F0=!1;for(let l=0;l<Q0.length;l++){let u0=Q0.slice(0,l).join("/"),O0=(await L(u0))?.test(GE2(u0||".",k)+(d?"/":""));if(O0?.ignored)F0=!0;else if(O0?.unignored)F0=!1}return F0})());return w.get(i)}return S}async function xl0(W,T){let w="";for await(let P of _E2(W,{highWaterMark:65536})){let L=w+Buffer.from(P).toString("latin1");if(/-----BEGIN [A-Z0-9 ]{0,64}PRIVATE KEY-----/.test(L))throw Error(`Private-key marker in source input: ${T}; remove the credential or exclude the file`);w=L.slice(-128)}}import{lstat as fl0,readFile as yl0,readdir as DE2}from"fs/promises";import{dirname as QE2,join as pH,relative as kl0,resolve as ZE2}from"path";var lx=new Set([".git",".cursor","node_modules",".bunko-output",".bunko-build",".npmrc",".bunko-cache",".docker",".aws",".config",".yarnrc.yml",".DS_Store",".ssh",".kube",".gnupg",".netrc",".terraform","id_rsa","id_dsa","id_ecdsa","id_ed25519","terraform.tfstate","terraform.tfstate.backup"]);function hl0(W){return lx.has(W)||W.startsWith(".env")}function uK(W){return W.split("/").includes(".DS_Store")}async function px(W,T,w=[],P=[],L=new Set){let S=await rN(W),k=T.some((l)=>l.mode==="source")?G10(W):void 0,d=(l)=>l.split("/").some((u0,x0,O0)=>S(O0.slice(0,x0+1).join("/"))),i=(l)=>l.split("/").some((u0)=>lx.has(u0)||u0.startsWith(".env"))||[...w,...P].some((u0)=>pH(W,l)===u0||pH(W,l).startsWith(`${u0}/`)),G0=new Set(["package.json","bun.lock","tsconfig.json","jsconfig.json"]);for(let l of T){for(let O0 of Object.values(l.entrypoints??{default:l.entrypoint}))G0.add(pH(l.targetPath,O0));for(let O0 of["tsconfig.json","jsconfig.json"])G0.add(pH(l.targetPath,O0));for(let O0 of l.workspace?.packages??[])G0.add(pH(O0.path,"package.json"));let u0=Ud(l.assetExcludes);async function x0(O0){if(uK(O0))return;if(u0(kl0(l.targetPath||".",O0))){if(l.mode==="source"&&[...G0].some((d0)=>d0===O0||d0.startsWith(`${O0}/`)))throw Error(`Asset exclusion overlaps a required source input: ${O0}`);P.push(pH(W,O0));return}G0.add(O0),L.add(O0);let W2=await fl0(pH(W,O0));if(W2.isSymbolicLink())throw Error(`Source symlinks are not supported: ${O0}`);if(W2.isDirectory())for(let d0 of await DE2(pH(W,O0)))await x0(pH(O0,d0));else if(!W2.isFile())throw Error(`Unsupported asset file type: ${O0}`)}for(let O0 of l.assets){let W2=!1;for await(let d0 of new Bun.Glob(O0).scan({cwd:pH(W,l.targetPath),dot:!0,onlyFiles:!1,followSymlinks:!1})){if(uK(d0))continue;W2=!0,await x0(pH(l.targetPath,d0))}if(!W2)throw Error(`Asset pattern matched no files: ${O0}`)}for(let O0 of l.workspace?.packages??[{manifest:JSON.parse(l.manifestText)}])for(let W2 of Object.values(O0.manifest.patchedDependencies??{}))if(typeof W2==="string")G0.add(W2)}let Q0=new Set;async function F0(l){if(Q0.has(l))return;if(Q0.add(l),d(l)||await k?.(l))throw Error(`Ignored required input: ${l}`);G0.add(l);let u0=X6(Bun.JSONC.parse(await yl0(pH(W,l),"utf8")),"tsconfig");for(let x0 of u0.extends===void 0?[]:Array.isArray(u0.extends)?u0.extends:[u0.extends]){if(typeof x0!=="string"||!x0.startsWith("."))continue;let O0=ZE2(W,QE2(l),x0.endsWith(".json")?x0:x0+".json"),W2=kl0(W,O0);if(W2===".."||W2.startsWith("../"))throw Error("tsconfig extends must stay inside the project snapshot");await F0(W2)}}for await(let l of new Bun.Glob("**/{tsconfig,jsconfig}.json").scan({cwd:W,dot:!0,followSymlinks:!1}))if(!i(l)&&!d(l)&&!await k?.(l))await F0(l);if(T.some((l)=>l.mode==="source")){for(let l of G0)if(P.some((u0)=>pH(W,l)===u0||pH(W,l).startsWith(`${u0}/`)))throw Error(`Asset exclusion overlaps a required source input: ${l}`)}return[...G0]}async function rN(W){let T;try{let P=pH(W,".bunkoignore");if(!(await fl0(P)).isFile())throw Error(".bunkoignore must be a regular file");T=await yl0(P,"utf8")}catch(P){if(P.code==="ENOENT")return()=>!1;throw P}let w=T.split(/\r?\n/).map((P)=>P.trim()).filter((P)=>P&&!P.startsWith("#")).map((P)=>{let L=P.replace(/^(?:\.\/)+/,"").replace(/\/$/,"");if(!L||L.startsWith("/")||L.startsWith("!")||/[\\\x00-\x1f]/.test(L)||L.split("/").includes(".."))throw Error("Invalid .bunkoignore pattern");return new Bun.Glob(L)});return(P)=>P!==".bunkoignore"&&w.some((L)=>L.match(P))}import{createHash as YE2}from"crypto";import{chmod as WE2,copyFile as HE2,lstat as yT0,mkdir as JE2,readdir as gl0,readFile as Hd2,open as UE2}from"fs/promises";import{join as sx,posix as D10,relative as BE2,resolve as vl0}from"path";var m_=F20(a20(),1);/*! TypeScript 5.9.3 — Copyright Microsoft Corporation.
|
|
916
916
|
Apache License
|
|
917
917
|
|