@poe-platform/safe-bash 0.1.823 → 0.1.824

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/dist/safe-bash/command-chunks/{chunk-LDR3PPM3.js → chunk-22QEL76N.js} +3 -3
  2. package/dist/safe-bash/command-chunks/{chunk-BSLXS4PE.js → chunk-3DH5QBZC.js} +1 -1
  3. package/dist/safe-bash/command-chunks/{chunk-64HIOP7Q.js → chunk-3EBQOZET.js} +33 -353
  4. package/dist/safe-bash/command-chunks/{chunk-KQE2D7PX.js → chunk-3HUCLYKJ.js} +2 -2
  5. package/dist/safe-bash/command-chunks/{chunk-J4I7KCQQ.js → chunk-4JABZEDO.js} +4 -4
  6. package/dist/safe-bash/command-chunks/{chunk-PVKSBXHB.js → chunk-4M6D4IUB.js} +4 -4
  7. package/dist/safe-bash/command-chunks/{chunk-UVM6QG2H.js → chunk-4MVQE6CT.js} +1 -1
  8. package/dist/safe-bash/command-chunks/{chunk-QWQHLMDX.js → chunk-4VTB4DGE.js} +3 -3
  9. package/dist/safe-bash/command-chunks/{chunk-JQPDVCBU.js → chunk-565AAQTV.js} +3 -3
  10. package/dist/safe-bash/command-chunks/{chunk-JSW6YH6T.js → chunk-5PRXCH54.js} +5 -5
  11. package/dist/safe-bash/command-chunks/{chunk-42OQIFPW.js → chunk-5RLK2QSY.js} +3 -3
  12. package/dist/safe-bash/command-chunks/{chunk-PYYAX5FB.js → chunk-63WEGFLL.js} +16 -16
  13. package/dist/safe-bash/command-chunks/{chunk-5QR4LTAK.js → chunk-6KZXFPOT.js} +6 -6
  14. package/dist/safe-bash/command-chunks/{chunk-LJLB7TBN.js → chunk-6YTXU3NF.js} +6 -6
  15. package/dist/safe-bash/command-chunks/{chunk-NNYOPI7K.js → chunk-7NF44M2V.js} +5 -5
  16. package/dist/safe-bash/command-chunks/{chunk-ZRHKXN6W.js → chunk-7RQGRFHJ.js} +2 -2
  17. package/dist/safe-bash/command-chunks/{chunk-QGSY4ZAU.js → chunk-7UYBNOOM.js} +2 -2
  18. package/dist/safe-bash/command-chunks/{chunk-6REH56FL.js → chunk-AA254KE5.js} +4 -4
  19. package/dist/safe-bash/command-chunks/{chunk-2VSNIHIW.js → chunk-APUXNXXQ.js} +11 -11
  20. package/dist/safe-bash/command-chunks/{chunk-XE75H5ZZ.js → chunk-AVXSR5MO.js} +6 -6
  21. package/dist/safe-bash/command-chunks/{chunk-22D6Q6SW.js → chunk-BKCVCMUX.js} +2 -2
  22. package/dist/safe-bash/command-chunks/{chunk-UDRJKA3P.js → chunk-C23L4HZB.js} +2 -2
  23. package/dist/safe-bash/command-chunks/{chunk-PAEAEFK3.js → chunk-C3EEMMQL.js} +3 -3
  24. package/dist/safe-bash/command-chunks/{chunk-NDJPULBE.js → chunk-CEKBIZGU.js} +2 -2
  25. package/dist/safe-bash/command-chunks/{chunk-75OUKYCM.js → chunk-CH5JDE3C.js} +1 -1
  26. package/dist/safe-bash/command-chunks/{chunk-XNVL6AOV.js → chunk-CIYGC7WU.js} +6 -6
  27. package/dist/safe-bash/command-chunks/{chunk-RUXY7GN5.js → chunk-CMJBRGU2.js} +1 -1
  28. package/dist/safe-bash/command-chunks/{chunk-DGFMOT4O.js → chunk-CO4HYNPS.js} +1 -1
  29. package/dist/safe-bash/command-chunks/{chunk-TMJG745A.js → chunk-CQLZM75U.js} +3 -3
  30. package/dist/safe-bash/command-chunks/{chunk-T2LZWXWF.js → chunk-DBCTHLB5.js} +4 -4
  31. package/dist/safe-bash/command-chunks/{chunk-6RE4MZYM.js → chunk-DBEJMI7J.js} +1 -1
  32. package/dist/safe-bash/command-chunks/{chunk-XXUMECE4.js → chunk-DEEZYCOQ.js} +6 -6
  33. package/dist/safe-bash/command-chunks/{chunk-YJMS5Q4Y.js → chunk-DHTTI7CE.js} +8 -8
  34. package/dist/safe-bash/command-chunks/{chunk-D3WMD32B.js → chunk-DLLGOC4Q.js} +6 -6
  35. package/dist/safe-bash/command-chunks/{chunk-HVLF3Y4B.js → chunk-DYCYAIET.js} +5 -5
  36. package/dist/safe-bash/command-chunks/{chunk-5NC2IQMQ.js → chunk-EV7A5FNN.js} +1 -1
  37. package/dist/safe-bash/command-chunks/{chunk-2YC6MWQB.js → chunk-EY3UE26F.js} +1 -1
  38. package/dist/safe-bash/command-chunks/{chunk-ZQ4NQ24M.js → chunk-FJLVISSD.js} +4 -4
  39. package/dist/safe-bash/command-chunks/{chunk-WOO3YO2X.js → chunk-HTMGN3KL.js} +4 -4
  40. package/dist/safe-bash/command-chunks/{chunk-2E53ZL5D.js → chunk-HU72CZBN.js} +4 -4
  41. package/dist/safe-bash/command-chunks/{chunk-AH3ZEPAN.js → chunk-IGHFIRXK.js} +1 -1
  42. package/dist/safe-bash/command-chunks/{chunk-WDTWJFPK.js → chunk-IKBTII7C.js} +35 -73
  43. package/dist/safe-bash/command-chunks/{chunk-J3ISXTYB.js → chunk-JTEAYB72.js} +2 -2
  44. package/dist/safe-bash/command-chunks/{chunk-NR7POLKP.js → chunk-KCS25XUJ.js} +2 -2
  45. package/dist/safe-bash/command-chunks/chunk-LKAFLJ5L.js +123 -0
  46. package/dist/safe-bash/command-chunks/{chunk-EU5SR3LS.js → chunk-LSH6UKCT.js} +2 -2
  47. package/dist/safe-bash/command-chunks/{chunk-WV3C6BRD.js → chunk-MHZ7UTRX.js} +5 -5
  48. package/dist/safe-bash/command-chunks/{chunk-K6J3KFQ2.js → chunk-MSA5BQFK.js} +3 -3
  49. package/dist/safe-bash/command-chunks/{chunk-OMD45J52.js → chunk-MW3L6JB7.js} +6 -6
  50. package/dist/safe-bash/command-chunks/{chunk-AR65HNNX.js → chunk-N2TN7IBE.js} +1 -1
  51. package/dist/safe-bash/command-chunks/{chunk-EO3RYGUZ.js → chunk-NNGWTDVJ.js} +476 -75
  52. package/dist/safe-bash/command-chunks/{chunk-NWA7ZJDV.js → chunk-NU64GWGN.js} +3 -3
  53. package/dist/safe-bash/command-chunks/{chunk-RGKHTSUY.js → chunk-NW3S6T6R.js} +1 -1
  54. package/dist/safe-bash/command-chunks/chunk-NXCJNPL3.js +47 -0
  55. package/dist/safe-bash/command-chunks/{chunk-GAYTDZPP.js → chunk-ORWYNKKL.js} +3 -3
  56. package/dist/safe-bash/command-chunks/{chunk-FCGMSOF6.js → chunk-P6YTNXRV.js} +1 -1
  57. package/dist/safe-bash/command-chunks/{chunk-3RDEX4AF.js → chunk-PAS4YSNN.js} +1 -1
  58. package/dist/safe-bash/command-chunks/{chunk-TTPT3OME.js → chunk-PSNTCRL5.js} +4 -4
  59. package/dist/safe-bash/command-chunks/{chunk-FGK6HLSY.js → chunk-QC2RWSYM.js} +3 -3
  60. package/dist/safe-bash/command-chunks/{chunk-HCZITM4C.js → chunk-QPY3NCMC.js} +5 -5
  61. package/dist/safe-bash/command-chunks/{chunk-3TXPZLFI.js → chunk-R6RVR6ZZ.js} +5 -5
  62. package/dist/safe-bash/command-chunks/{chunk-HQFX5XKV.js → chunk-RB7XAYO2.js} +3 -3
  63. package/dist/safe-bash/command-chunks/{chunk-6PDXNY3T.js → chunk-RF5VEKFU.js} +9 -9
  64. package/dist/safe-bash/command-chunks/{chunk-VAMBWXDV.js → chunk-RUAGHZNF.js} +18 -18
  65. package/dist/safe-bash/command-chunks/{chunk-3MFYCMQU.js → chunk-S2T7DDGY.js} +16 -16
  66. package/dist/safe-bash/command-chunks/{chunk-LZHFVNEV.js → chunk-S3QYSI5E.js} +1 -1
  67. package/dist/safe-bash/command-chunks/{chunk-ZLMCWAAU.js → chunk-STTXZKR6.js} +3 -3
  68. package/dist/safe-bash/command-chunks/{chunk-AXUHORS3.js → chunk-SUYSZJI3.js} +1 -1
  69. package/dist/safe-bash/command-chunks/{chunk-C5SLY3RB.js → chunk-U2C6A3QO.js} +1 -1
  70. package/dist/safe-bash/command-chunks/{chunk-HCJWEB6P.js → chunk-U6IEK2CI.js} +7 -7
  71. package/dist/safe-bash/command-chunks/{chunk-NN6OWOJG.js → chunk-UC6DUY3K.js} +2 -2
  72. package/dist/safe-bash/command-chunks/{chunk-64L57DEI.js → chunk-UQTU7H6T.js} +9 -9
  73. package/dist/safe-bash/command-chunks/{chunk-ARA57PMC.js → chunk-V5PVNBOS.js} +4 -4
  74. package/dist/safe-bash/command-chunks/{chunk-ZZ6EIACJ.js → chunk-VGHRMAI4.js} +5 -5
  75. package/dist/safe-bash/command-chunks/{chunk-DZTT5SLG.js → chunk-VP7R7HKY.js} +5 -5
  76. package/dist/safe-bash/command-chunks/{chunk-TP5MZHCB.js → chunk-W5Y7Y7PS.js} +3 -3
  77. package/dist/safe-bash/command-chunks/{chunk-ZTW2E5OT.js → chunk-WAE3OCOU.js} +3 -3
  78. package/dist/safe-bash/command-chunks/{chunk-DBYY7IDI.js → chunk-WCM47S5A.js} +10 -10
  79. package/dist/safe-bash/command-chunks/{chunk-U6VSRO6E.js → chunk-WNVBS4GV.js} +4 -4
  80. package/dist/safe-bash/command-chunks/{chunk-CXOAMPOV.js → chunk-WUIS2INH.js} +13 -13
  81. package/dist/safe-bash/command-chunks/{chunk-4HJEZGYN.js → chunk-YODHIRPW.js} +7 -7
  82. package/dist/safe-bash/command-chunks/{chunk-C3FERGHU.js → chunk-YRMTOLG5.js} +3 -3
  83. package/dist/safe-bash/command-chunks/{chunk-YXIJOYT6.js → chunk-ZUOCXDYW.js} +1 -1
  84. package/dist/safe-bash/command-chunks/{chunk-LBBJ5S3W.js → chunk-ZZKJPLIH.js} +1 -1
  85. package/dist/safe-bash/command-chunks/{engine-UPLVIV72-IGXUDNO5.js → engine-UPLVIV72-MSSFJLK4.js} +1 -1
  86. package/dist/safe-bash/commands/python/source-archive.d.ts +2 -0
  87. package/dist/safe-bash/commands/python/source-archive.js +2 -0
  88. package/dist/safe-bash/commands/python/source-zip.d.ts +2 -0
  89. package/dist/safe-bash/commands/python/source-zip.js +2 -0
  90. package/dist/safe-bash-command-exiftool/index.js +41 -0
  91. package/dist/safe-bash-command-git/git_rust.wasm +0 -0
  92. package/dist/safe-bash-command-playwright-cli/index.js +36 -36
  93. package/dist/safe-bash-command-playwright-cli/playwright/abilities.js +7 -7
  94. package/dist/safe-bash-command-playwright-cli/playwright/adapter.js +3 -3
  95. package/dist/safe-bash-command-playwright-cli/playwright/capability-events.js +1 -1
  96. package/dist/safe-bash-command-playwright-cli/playwright/capability-result.js +1 -1
  97. package/dist/safe-bash-command-playwright-cli/playwright/controller.js +15 -15
  98. package/dist/safe-bash-command-playwright-cli/playwright/download-capabilities.js +1 -1
  99. package/dist/safe-bash-command-playwright-cli/playwright/drop-capability.js +1 -1
  100. package/dist/safe-bash-command-playwright-cli/playwright/index.js +35 -35
  101. package/dist/safe-bash-command-playwright-cli/playwright/modal-capabilities.js +1 -1
  102. package/dist/safe-bash-command-playwright-cli/playwright/native-evaluation.js +1 -1
  103. package/dist/safe-bash-command-playwright-cli/playwright/native-json-snapshot.js +1 -1
  104. package/dist/safe-bash-command-playwright-cli/playwright/native-snapshot.js +1 -1
  105. package/dist/safe-bash-command-playwright-cli/playwright/native-storage-replacement.js +2 -2
  106. package/dist/safe-bash-command-playwright-cli/playwright/profile.js +3 -3
  107. package/dist/safe-bash-command-playwright-cli/playwright/recording-capabilities.js +1 -1
  108. package/dist/safe-bash-command-playwright-cli/playwright/route-capabilities.js +1 -1
  109. package/dist/safe-bash-command-playwright-cli/playwright/snapshot.js +1 -1
  110. package/dist/safe-bash-command-playwright-cli/playwright/standard-capabilities.js +6 -6
  111. package/dist/safe-bash-command-playwright-cli/playwright/storage-capabilities.js +5 -5
  112. package/dist/safe-bash-command-playwright-cli/playwright/tracing-capabilities.js +1 -1
  113. package/dist/safe-bash-command-playwright-cli/playwright/webmcp-capabilities.js +1 -1
  114. package/dist/safe-bash-command-python/build-backend.d.ts +45 -3
  115. package/dist/safe-bash-command-python/build-dependencies.d.ts +2 -1
  116. package/dist/safe-bash-command-python/executor.d.ts +1 -1
  117. package/dist/safe-bash-command-python/executor.js +5 -4
  118. package/dist/safe-bash-command-python/index.js +5 -4
  119. package/dist/safe-bash-command-python/jspi.js +2 -2
  120. package/dist/safe-bash-command-python/manifest.d.ts +5 -1
  121. package/dist/safe-bash-command-python/provisioning.d.ts +7 -3
  122. package/dist/safe-bash-command-python/provisioning.js +2 -1
  123. package/dist/safe-bash-command-python/source-archive.d.ts +4 -0
  124. package/dist/safe-bash-command-python/source-archive.js +136 -0
  125. package/dist/safe-bash-command-python/source-environment.d.ts +4 -1
  126. package/dist/safe-bash-command-python/source-zip.d.ts +8 -0
  127. package/dist/safe-bash-command-python/source-zip.js +8 -0
  128. package/dist/safe-bash-command-python/worker.js +1 -1
  129. package/dist/safe-bash-command-safejs/index.js +5 -5
  130. package/dist/safe-bash-command-safejs/runtime.js +3 -3
  131. package/dist/safe-bash-command-ssconvert/index.js +8 -8
  132. package/dist/safe-bash-compression-engine/bounded-codec.js +2 -2
  133. package/dist/safe-bash-compression-engine/codec-loader.js +1 -1
  134. package/dist/safe-bash-compression-engine/files.js +5 -5
  135. package/dist/safe-bash-compression-engine/index.js +4 -4
  136. package/dist/safe-bash-compression-engine/operand.js +5 -5
  137. package/dist/safe-bash-compression-engine/stream.js +4 -4
  138. package/dist/safe-bash-compression-engine/zstd-decode.js +3 -3
  139. package/dist/safe-bash-presentation-engine/accessibility.js +15 -15
  140. package/dist/safe-bash-presentation-engine/animation-editing.js +5 -5
  141. package/dist/safe-bash-presentation-engine/animations.js +5 -5
  142. package/dist/safe-bash-presentation-engine/backgrounds.js +6 -6
  143. package/dist/safe-bash-presentation-engine/chart-editing.js +18 -18
  144. package/dist/safe-bash-presentation-engine/chart-object-operations.js +12 -12
  145. package/dist/safe-bash-presentation-engine/charts.js +15 -15
  146. package/dist/safe-bash-presentation-engine/command-placeholder.js +39 -39
  147. package/dist/safe-bash-presentation-engine/comments.js +6 -6
  148. package/dist/safe-bash-presentation-engine/connector-operations.js +16 -16
  149. package/dist/safe-bash-presentation-engine/connectors.js +13 -13
  150. package/dist/safe-bash-presentation-engine/diff.js +21 -21
  151. package/dist/safe-bash-presentation-engine/drawing-format.js +7 -7
  152. package/dist/safe-bash-presentation-engine/drawing-operations.js +15 -15
  153. package/dist/safe-bash-presentation-engine/drawing-schema.js +8 -8
  154. package/dist/safe-bash-presentation-engine/equations.js +6 -6
  155. package/dist/safe-bash-presentation-engine/fields.js +6 -6
  156. package/dist/safe-bash-presentation-engine/image-extraction.js +7 -7
  157. package/dist/safe-bash-presentation-engine/image-formatting.js +16 -16
  158. package/dist/safe-bash-presentation-engine/image-insertion.js +6 -6
  159. package/dist/safe-bash-presentation-engine/image-replacement.js +7 -7
  160. package/dist/safe-bash-presentation-engine/images.js +6 -6
  161. package/dist/safe-bash-presentation-engine/index.js +104 -104
  162. package/dist/safe-bash-presentation-engine/layouts.js +5 -5
  163. package/dist/safe-bash-presentation-engine/links.js +5 -5
  164. package/dist/safe-bash-presentation-engine/masters.js +4 -4
  165. package/dist/safe-bash-presentation-engine/media-editing.js +13 -13
  166. package/dist/safe-bash-presentation-engine/media-extraction.js +7 -7
  167. package/dist/safe-bash-presentation-engine/media.js +6 -6
  168. package/dist/safe-bash-presentation-engine/memberships.js +5 -5
  169. package/dist/safe-bash-presentation-engine/notes.js +6 -6
  170. package/dist/safe-bash-presentation-engine/ole-insertion.js +6 -6
  171. package/dist/safe-bash-presentation-engine/opaque-objects.js +2 -2
  172. package/dist/safe-bash-presentation-engine/package-tools.js +6 -6
  173. package/dist/safe-bash-presentation-engine/presentation-model.js +38 -38
  174. package/dist/safe-bash-presentation-engine/presentation-settings.js +5 -5
  175. package/dist/safe-bash-presentation-engine/properties.js +6 -6
  176. package/dist/safe-bash-presentation-engine/retained-inspection.js +3 -3
  177. package/dist/safe-bash-presentation-engine/retained-text.js +16 -16
  178. package/dist/safe-bash-presentation-engine/sanitize.js +7 -7
  179. package/dist/safe-bash-presentation-engine/selectors.js +2 -2
  180. package/dist/safe-bash-presentation-engine/shape-groups.js +15 -15
  181. package/dist/safe-bash-presentation-engine/shape-operations.js +14 -14
  182. package/dist/safe-bash-presentation-engine/shape-path-operations.js +16 -16
  183. package/dist/safe-bash-presentation-engine/shape-paths.js +5 -5
  184. package/dist/safe-bash-presentation-engine/shape-selection.js +15 -15
  185. package/dist/safe-bash-presentation-engine/shape-transforms.js +5 -5
  186. package/dist/safe-bash-presentation-engine/shapes.js +11 -11
  187. package/dist/safe-bash-presentation-engine/slide-copy.js +7 -7
  188. package/dist/safe-bash-presentation-engine/slide-import.js +6 -6
  189. package/dist/safe-bash-presentation-engine/slide-merge-split.js +8 -8
  190. package/dist/safe-bash-presentation-engine/slide-model.js +25 -25
  191. package/dist/safe-bash-presentation-engine/slide-removal.js +7 -7
  192. package/dist/safe-bash-presentation-engine/slide-transfer-budget.js +2 -2
  193. package/dist/safe-bash-presentation-engine/slides.js +5 -5
  194. package/dist/safe-bash-presentation-engine/table-operations.js +17 -17
  195. package/dist/safe-bash-presentation-engine/table-spans.js +16 -16
  196. package/dist/safe-bash-presentation-engine/tables.js +15 -15
  197. package/dist/safe-bash-presentation-engine/tags.js +6 -6
  198. package/dist/safe-bash-presentation-engine/template-bindings.js +16 -16
  199. package/dist/safe-bash-presentation-engine/template-repeat.js +26 -26
  200. package/dist/safe-bash-presentation-engine/text-fitting.js +11 -11
  201. package/dist/safe-bash-presentation-engine/text-frames.js +11 -11
  202. package/dist/safe-bash-presentation-engine/text-paragraphs.js +11 -11
  203. package/dist/safe-bash-presentation-engine/text-reading.js +3 -3
  204. package/dist/safe-bash-presentation-engine/text-replacement.js +6 -6
  205. package/dist/safe-bash-presentation-engine/text-runs.js +8 -8
  206. package/dist/safe-bash-presentation-engine/themes.js +5 -5
  207. package/dist/safe-bash-presentation-engine/transitions.js +6 -6
  208. package/dist/safe-bash-presentation-engine/validation.js +2 -2
  209. package/dist/safe-bash-presentation-engine/xml-parts.js +5 -5
  210. package/package.json +12 -2
  211. package/dist/safe-bash/command-chunks/{biff-AYJZR2YV-YFF3BK43.js → biff-AYJZR2YV-2BK47I2W.js} +1 -1
  212. package/dist/safe-bash/command-chunks/{chunk-SKDJCMGI.js → chunk-ATUZ7J3B.js} +3 -3
  213. package/dist/safe-bash/command-chunks/{chunk-4Q4R3VZU.js → chunk-ETFJ4L7F.js} +0 -0
  214. package/dist/safe-bash/command-chunks/{chunk-QWHBQBPB.js → chunk-EXDMIGZY.js} +6 -6
  215. package/dist/safe-bash/command-chunks/{chunk-SKF6PGA5.js → chunk-I2OKE2NI.js} +3 -3
  216. package/dist/safe-bash/command-chunks/{chunk-2H6RJPCQ.js → chunk-JDDZRKC4.js} +3 -3
  217. package/dist/safe-bash/command-chunks/{chunk-3TP4SSPS.js → chunk-SRXARACJ.js} +3 -3
  218. package/dist/safe-bash/command-chunks/{chunk-D54L2IOZ.js → chunk-Y7UXJ77P.js} +3 -3
  219. package/dist/safe-bash/command-chunks/{dif-BXKPQOCO-FVJYYGYB.js → dif-BXKPQOCO-4KB3RC6G.js} +4 -4
  220. package/dist/safe-bash/command-chunks/{sylk-25D7TL2Y-NJKBZZTF.js → sylk-25D7TL2Y-RU6ANKGT.js} +4 -4
@@ -2,7 +2,7 @@ import {
2
2
  nodeFor,
3
3
  selected,
4
4
  validateSelection
5
- } from "./chunk-4HJEZGYN.js";
5
+ } from "./chunk-YODHIRPW.js";
6
6
  import {
7
7
  Length
8
8
  } from "./chunk-GNVAW6NL.js";
@@ -11,10 +11,10 @@ import {
11
11
  child,
12
12
  loadShared,
13
13
  required
14
- } from "./chunk-UDRJKA3P.js";
14
+ } from "./chunk-C23L4HZB.js";
15
15
  import {
16
16
  SelectionError
17
- } from "./chunk-SKF6PGA5.js";
17
+ } from "./chunk-I2OKE2NI.js";
18
18
  import {
19
19
  OfficeError
20
20
  } from "./chunk-VJQ5OWS5.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  attr,
3
3
  child
4
- } from "./chunk-UDRJKA3P.js";
4
+ } from "./chunk-C23L4HZB.js";
5
5
  import {
6
6
  OfficeError
7
7
  } from "./chunk-VJQ5OWS5.js";
@@ -67,66 +67,29 @@ function parsePythonInvocation(args, env) {
67
67
  return { startupArgs, env: runtimeEnv, module };
68
68
  }
69
69
 
70
- // packages/safe-bash-command-python/src/native-wheel.ts
71
- var pythonNativeWheel = `
72
- def _safe_extract_native_wheel(read, serialized):
73
- import io as _native_io, json as _native_json, shutil as _native_shutil
74
- from pathlib import Path as _NativePath
75
- from zipfile import ZipFile as _NativeZip
76
- from pyodide import _package_loader as _native_loader
77
- from pyodide.ffi import run_sync as _native_sync
70
+ // packages/safe-bash-command-python/src/package-program.generated.ts
71
+ var pythonPackageProgramGzip = "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";
78
72
 
79
- class _NativeWheel(_native_io.RawIOBase):
80
- def __init__(self, size):
81
- self.size, self.position = size, 0
82
- def readable(self):
83
- return True
84
- def seekable(self):
85
- return True
86
- def tell(self):
87
- return self.position
88
- def seek(self, offset, whence=0):
89
- if whence not in (0, 1, 2):
90
- raise ValueError('invalid whence')
91
- position = offset + (0, self.position, self.size)[whence]
92
- if position < 0:
93
- raise OSError(22, 'Invalid argument')
94
- self.position = position
95
- return position
96
- def read(self, size=-1):
97
- remaining = max(0, self.size - self.position)
98
- size = remaining if size is None or size < 0 else min(size, remaining)
99
- output = bytearray()
100
- while len(output) < size:
101
- result = read(self.position, min(size-len(output), 65536))
102
- if hasattr(result, 'then'):
103
- result = _native_sync(result)
104
- chunk = bytes(result)
105
- if not chunk or len(chunk) > size-len(output):
106
- raise OSError('Invalid Python package chunk')
107
- output.extend(chunk)
108
- self.position += len(chunk)
109
- return bytes(output)
73
+ // packages/safe-bash-command-python/src/package-program.ts
74
+ var decoded;
75
+ function loadPythonPackageProgram() {
76
+ return decoded ??= new Response(new Blob([Uint8Array.from(atob(pythonPackageProgramGzip), (character) => character.charCodeAt(0))]).stream().pipeThrough(new DecompressionStream("gzip"))).text();
77
+ }
110
78
 
111
- _native_config = _native_json.loads(serialized)
112
- with _NativeWheel(_native_config['size']) as _native_archive:
113
- if 'metadata_name' in _native_config:
114
- from micropip.metadata import wheel_dist_info_dir as _native_metadata_dir
115
- from zipfile import Path as _NativeZipPath
116
- with _NativeZip(_native_archive) as _native_zip:
117
- path = _NativePath(_native_metadata_dir(_native_zip, _native_config['metadata_name'])) / 'METADATA'
118
- return _native_json.dumps(_NativeZipPath(_native_zip, str(path)).read_text(encoding='utf-8'))
119
- _native_target = _NativePath(_native_config['extract_dir'] if 'extract_dir' in _native_config else _native_loader.get_install_dir(_native_config['target']))
120
- _native_target.mkdir(parents=True, exist_ok=True)
121
- _native_shutil._unpack_zipfile(_native_archive, _native_target)
122
- with _NativeZip(_native_archive) as _native_zip:
123
- if _NativePath(_native_config['filename']).suffix == '.whl':
124
- _native_loader.set_wheel_metadata(_native_config['filename'], _native_zip, _native_target, _native_config['metadata'])
125
- _native_loader.install_datafiles(_native_config['filename'], _native_zip, _native_target)
126
- _native_dynlibs = _native_loader.get_dynlibs(_native_archive, _NativePath(_native_config['filename']).suffix, _native_target)
127
- return _native_json.dumps(_native_dynlibs)
128
- _safe_extract_native_wheel(_safe_native_wheel_read, _safe_native_wheel_config)
129
- `;
79
+ // packages/safe-bash-command-python/src/native-wheel.generated.ts
80
+ var pythonNativeWheelGzip = "H4sIAAAAAAACA51WTW/cNhC976+Y5iIJltWNgwSFYRVw0RTIoUnQGi3gYCHQ0mg1XYkUSMq7619f8ENaSl67aG7icGbe45vhUKsKaygUq7HAg5as1AVnmh6x2DeIbSyRVSkolMRaesIquV4Bdb2QGkgAUzC6k0jhHyV4aDPrFFQzaGpDu7OsoJaig57ppqWHMetXphvr+9n6mqV3fKK+phZHx3vqfzPLk+899WPOo6iomlyLnpU7tsWiFaxCGVJxlnlYVtc0hsqBF+rIyxn9Iy9XKyhbpibsv61aJzGyP9j+05dfmEKjGFiVC+KkiyJW2NYpKHpye2DWmVmm7rMXijQJDjk469pnMMVgDy3aDC5Woh4khzs5oHdSiLv/dNLYts8dZuhBOs9Y1LVCncK+QV5ivnaxVHsDcKGBOMTrFN6mcOW2QTJSCH+xdsCPUgoZR8QfWUuVD4sS4xac2cHAhU00o5SepEq+ueiNpzDF38A6xP3ypwO9ukoh+uSBmdwOHXLtoJeaBwKMwiw0MXUIqphfvh1l7Bhx4lvIoWOHib9xgss5kIM2G3kQR7WzkYLPgiMI6dY3sAZsFUJHPHZNMQXZTGLQ/aAhh4ejRiYlO8bWvm/MHWmRx84jgRub0WuEami1ZeBPFGg9Ql0G0Sl8eP/+3YfE5jZsG6aY1jJ2mVKIdIM88qU/5Q+vjvd1Kcpm4DtPW812qLYN5RyEtGewiwR+hiWvEW9W86neX4+6ERz8FHApXe29bhkeNPLK57cb8664yAP8oDEcbU9itZrOWQpe0zY4uBmFmRk2Kg6G6Qr2pJvzM8Sl+BaZo0abJBxATJYNPdoaUg0RcY1bSfoYmes3j3dX1M2yhikzaY2FtVshSTddCnjosdRYBWRH6FNie83KBsudGjrIx1QZx3085QoazlXtOl9SzmyjuR669g3gkmZDXzGNgcRUnzYbPFS0RaXjBH7IJ84vTZhFwadzQEeqY7psriGCC5gz9yWN3ryJvLAdalYxzQrOOnxJXPtydFRK0VOfjSGj5vYVLSpSuiBei6Ki2fMzIVQkp2SLh27xIt5T7x5FmDXPPfXxQuxZzzxR79Qy762p9el9jc+xiYPA9FlnzJXZJAn8CNHvH+9uf729u438bLFyzi5ANXS9iucHmQMpLWPDMElsqxQaDzpGXoqK+DaPBl1f/hTZ8TOGaSa3qF840ch3/LepSEYbW9vQ8ryybtjOfxKyLZoiKs3adqbQCOKYGDWe0cu6nYnomUSuVW5eYnPzTFuInV2GMe7/KCsGbjq48P2wLG+6wDAZvqcjqH5VOgPtq5ypoa7pAHkOUbZv2sh11EImhdr9PE799ErOFM72mTvRy30XbZJz0FN1mGYGQ30vcliN6shbelDBfAz6wW+eqc3/kvQM/iv3Z04sWb3y/+62QlPhfunPbDh6yepfGFf6SBQMAAA=";
81
+
82
+ // packages/safe-bash-command-python/src/native-wheel.ts
83
+ var decoded2;
84
+ function loadPythonNativeWheel() {
85
+ return decoded2 ??= new Response(new Blob([Uint8Array.from(atob(pythonNativeWheelGzip), (character) => character.charCodeAt(0))]).stream().pipeThrough(new DecompressionStream("gzip"))).text();
86
+ }
87
+
88
+ // packages/safe-bash-command-python/src/package-url-hash.ts
89
+ function pythonPackageUrlHash(url) {
90
+ const match = /(sha1|sha224|sha384|sha256|sha512|md5)=([a-f0-9]+)/.exec(url);
91
+ return match ? [match[1], match[2]] : void 0;
92
+ }
130
93
 
131
94
  // packages/safe-bash-command-python/src/provisioning-runtime.ts
132
95
  async function installPythonPackages(supplied, start, request, maxTransferBytes) {
@@ -179,7 +142,7 @@ async function installPythonPackages(supplied, start, request, maxTransferBytes)
179
142
  try {
180
143
  runtime.globals.set(globals[0], read);
181
144
  runtime.globals.set(globals[1], JSON.stringify({ ...configuration, size }));
182
- const result = JSON.parse(await runtime.runPythonAsync(pythonNativeWheel));
145
+ const result = JSON.parse(await runtime.runPythonAsync(await loadPythonNativeWheel()));
183
146
  if (Array.isArray(result)) for (const path of result) await runtime._api.loadDynlib(path);
184
147
  return result;
185
148
  } finally {
@@ -236,14 +199,16 @@ async function installPythonPackages(supplied, start, request, maxTransferBytes)
236
199
  installedGlobals.push(name);
237
200
  };
238
201
  try {
239
- await loadPackages(["micropip"]);
202
+ await loadPackages(["micropip", ...start.bootstrapPackages ?? []]);
240
203
  bind("_safe_package_native", loadPackages);
241
204
  bind("_safe_package_bytes", async (url, hash) => (await fetch(url, hash)).bytes);
242
205
  bind("_safe_package_metadata", async (url) => {
243
206
  const result = await fetch(url, void 0, "metadata");
244
207
  return JSON.stringify({ text: new TextDecoder().decode(result.bytes), headers: Object.fromEntries(result.headers.map(([name, value]) => [name.toLowerCase(), value])) });
245
208
  });
246
- bind("_safe_package_wheel_download", async (url, expected) => withArtifact(url, expected, void 0, async (opened) => {
209
+ bind("_safe_package_wheel_download", async (url, expected) => withArtifact(url, expected, void 0, async (opened, read) => {
210
+ const hash = pythonPackageUrlHash(url);
211
+ if (hash) await wheel(opened.size, read, { integrity: hash });
247
212
  return JSON.stringify(await request("package-retain", start.session, opened.key));
248
213
  }));
249
214
  bind("_safe_package_wheel_metadata", async (serialized) => transfer(async () => {
@@ -279,303 +244,13 @@ async function installPythonPackages(supplied, start, request, maxTransferBytes)
279
244
  }
280
245
  return new TextDecoder().decode(Uint8Array.from(bytes));
281
246
  });
282
- await runtime.runPythonAsync(`
283
- import json as _safe_json
284
- import importlib.metadata as _safe_metadata
285
- _safe_preloaded = [d.metadata['Name'] for d in _safe_metadata.distributions() if d.metadata['Name']]
286
- from micropip._compat import compatibility_layer as _safe_compat
287
- from micropip.package_manager import PackageManager as _SafePackageManager
288
- from micropip.wheelinfo import WheelInfo as _SafeWheelInfo
289
- from micropip._utils import check_compatible as _safe_check_compatible
290
- from micropip._vendored.packaging.src.packaging.requirements import Requirement as _SafeRequirement, InvalidRequirement as _SafeInvalidRequirement
291
- from micropip._vendored.packaging.src.packaging.utils import canonicalize_name as _safe_name
292
-
293
- class _SafePackageCompatibility(_safe_compat):
294
- @staticmethod
295
- async def loadPackage(names):
296
- return await _safe_package_native(names)
297
- @staticmethod
298
- async def fetch_bytes(url, kwargs):
299
- return (await _safe_package_bytes(url)).to_bytes()
300
- @staticmethod
301
- async def fetch_string_and_headers(url, kwargs):
302
- value = _safe_json.loads(await _safe_package_metadata(url))
303
- return value['text'], value['headers']
304
-
305
- async def _safe_wheel_fetch(self, url, kwargs, compat):
306
- expected = self.sha256 if url == self.url else None
307
- if url == self.metadata_url and isinstance(self.core_metadata, dict):
308
- expected = self.core_metadata.get('sha256')
309
- return (await _safe_package_bytes(url, expected)).to_bytes()
310
- _SafeWheelInfo._fetch_bytes = _safe_wheel_fetch
311
- from micropip.metadata import Metadata as _SafeWheelMetadata
312
- async def _safe_wheel_download(self, fetch_kwargs, compat_layer):
313
- if self._data is not None:
314
- return
315
- self._data = _safe_json.loads(await _safe_package_wheel_download(self.url, self.sha256))
316
- if self._metadata is None:
317
- metadata = await _safe_package_wheel_metadata(_safe_json.dumps({'source': self._data, 'name': self.name}))
318
- self._metadata = _SafeWheelMetadata(metadata.encode('utf-8'))
319
- async def _safe_wheel_install(self, target, compat_layer):
320
- if not self._data:
321
- raise RuntimeError('Micropip internal error: attempted to install wheel before downloading it?')
322
- source = 'pypi' if self.sha256 is not None else self.url
323
- metadata = {'PYODIDE_SOURCE': source, 'PYODIDE_URL': self.url, 'PYODIDE_SHA256': self._data['key'], 'INSTALLER': 'micropip'}
324
- if self._requires:
325
- metadata['PYODIDE_REQUIRES'] = _safe_json.dumps(sorted(x.name for x in self._requires))
326
- await _safe_package_wheel_install(_safe_json.dumps({'source': self._data, 'filename': self.filename, 'extract_dir': str(target), 'metadata': metadata}))
327
- setattr(compat_layer.loadedPackages, self._project_name, source)
328
- _SafeWheelInfo.download = _safe_wheel_download
329
- _SafeWheelInfo.install = _safe_wheel_install
330
- _safe_preloaded = {_safe_name(name) for name in _safe_preloaded}
331
- _safe_manager = _SafePackageManager(_SafePackageCompatibility)
332
- async def _safe_parse_sources(sources, download=True):
333
- roots = []
334
- for source in sources:
335
- try:
336
- root = _SafeRequirement(source)
337
- if root.name.endswith('.whl'):
338
- raise _SafeInvalidRequirement(source)
339
- except _SafeInvalidRequirement:
340
- wheel = _SafeWheelInfo.from_url(source)
341
- root = _SafeRequirement(wheel.name + ' @ ' + source)
342
- roots.append(root)
343
- if (not root.marker or root.marker.evaluate({'extra': ''})) and root.url:
344
- direct = _SafeWheelInfo.from_url(root.url)
345
- _safe_check_compatible(direct.filename)
346
- if download:
347
- await direct.download({}, _SafePackageCompatibility)
348
- return roots
349
-
350
- def _safe_validate(roots):
351
- for root in roots:
352
- if root.marker and not root.marker.evaluate({'extra': ''}):
353
- continue
354
- version = _safe_metadata.version(root.name)
355
- if not root.specifier.contains(version, prereleases=True):
356
- raise ValueError('Python package version conflict: ' + str(root))
357
- if root.url:
358
- wheel = _SafeWheelInfo.from_url(root.url)
359
- pin = _SafeRequirement(wheel.name + '==' + str(wheel.version))
360
- if _safe_name(wheel.name) != _safe_name(root.name) or not pin.specifier.contains(version, prereleases=True):
361
- raise ValueError('Python package wheel version conflict: ' + str(root))
362
- async def _safe_resolve(_safe_roots, upgrade=False, force=False):
363
- _safe_extras = {}
364
- for _safe_root in _safe_roots:
365
- if not _safe_root.marker or _safe_root.marker.evaluate({'extra': ''}):
366
- _safe_extras.setdefault(_safe_name(_safe_root.name), set()).update(_safe_root.extras)
367
- for _safe_root in _safe_roots:
368
- _safe_root.extras.update(_safe_extras.get(_safe_name(_safe_root.name), set()))
369
- _safe_requested_names = set(_safe_extras)
370
- import micropip.package_manager as _safe_pm
371
- _SafeTransaction = _safe_pm.Transaction
372
- class _SafeReplacementTransaction(_SafeTransaction):
373
- def check_version_satisfied(self, req, *, allow_reinstall=False):
374
- if req.url:
375
- wheel = _SafeWheelInfo.from_url(req.url)
376
- if _safe_name(wheel.name) != req.name:
377
- raise ValueError('Python package wheel name conflict: ' + str(req))
378
- req = _SafeRequirement(req.name + '==' + str(wheel.version))
379
- if req.name in _safe_preloaded or req.name in self.locked:
380
- return super().check_version_satisfied(req)
381
- if force or (upgrade and req.name in _safe_requested_names):
382
- return False, ''
383
- return super().check_version_satisfied(req, allow_reinstall=allow_reinstall)
384
- async def _safe_install(requirements):
385
- _safe_pm.Transaction = _SafeReplacementTransaction
386
- try:
387
- await _safe_manager.install(requirements, deps=True, pre=_safe_package_pre, reinstall=True)
388
- finally:
389
- _safe_pm.Transaction = _SafeTransaction
390
- _safe_validate([root for root in _safe_roots if _safe_name(root.name) in _safe_preloaded])
391
- await _safe_install([str(root) for root in _safe_roots])
392
- _safe_managed = set(_safe_requested_names)
393
- _safe_previous_pending = set()
394
- while True:
395
- _safe_distributions = [d for d in _safe_metadata.distributions() if d.metadata['Name']]
396
- _safe_versions = {_safe_name(d.metadata['Name']): d.version for d in _safe_distributions}
397
- while True:
398
- _safe_changed = False
399
- _safe_dependencies = []
400
- for _safe_dist in _safe_distributions:
401
- if _safe_name(_safe_dist.metadata['Name']) not in _safe_managed:
402
- continue
403
- _safe_contexts = {''} | _safe_extras.get(_safe_name(_safe_dist.metadata['Name']), set())
404
- for _safe_dep in _safe_dist.requires or []:
405
- _safe_requirement = _SafeRequirement(_safe_dep)
406
- if _safe_requirement.marker and not any(_safe_requirement.marker.evaluate({'extra': extra}) for extra in _safe_contexts):
407
- continue
408
- _safe_requirement.marker = None
409
- _safe_dependencies.append(_safe_requirement)
410
- _safe_dependency_name = _safe_name(_safe_requirement.name)
411
- if _safe_dependency_name not in _safe_managed:
412
- _safe_managed.add(_safe_dependency_name)
413
- _safe_changed = True
414
- _safe_selected = _safe_extras.setdefault(_safe_name(_safe_requirement.name), set())
415
- if not _safe_requirement.extras.issubset(_safe_selected):
416
- _safe_selected.update(_safe_requirement.extras)
417
- _safe_changed = True
418
- if not _safe_changed:
419
- break
420
- _safe_pending = set()
421
- for _safe_requirement in _safe_dependencies:
422
- _safe_version = _safe_versions.get(_safe_name(_safe_requirement.name))
423
- if _safe_version is None or not _safe_requirement.specifier.contains(_safe_version, prereleases=True):
424
- _safe_pending.add(str(_safe_requirement))
425
- if not _safe_pending:
426
- break
427
- if frozenset(_safe_pending) in _safe_previous_pending:
428
- raise ValueError('Python package dependencies remain missing: ' + ', '.join(sorted(_safe_pending)))
429
- _safe_previous_pending.add(frozenset(_safe_pending))
430
- await _safe_install(sorted(_safe_pending))
431
- _safe_validate(_safe_roots)
432
- return _safe_managed
433
- def _safe_removal_listing(_safe_dist):
434
- from micropip._utils import get_files_in_distribution as _safe_distribution_files
435
- import os as _safe_os
436
- def _safe_compact(paths):
437
- compact = []
438
- for path in sorted(paths, key=len):
439
- if not any(path.startswith(parent.rstrip('*').rstrip('/') + '/') for parent in compact):
440
- compact.append(path)
441
- return compact
442
- _safe_files = {str(path) for path in _safe_distribution_files(_safe_dist) if not str(path).endswith('.pyc')}
443
- _safe_folders = _safe_compact({_safe_os.path.dirname(path) for path in _safe_files if path.endswith('__init__.py') or '.dist-info' in path})
444
- _safe_skipped = set()
445
- for _safe_folder in _safe_folders:
446
- for _safe_dir, _, _safe_names in _safe_os.walk(_safe_folder):
447
- for _safe_name_ in _safe_names:
448
- _safe_path = _safe_os.path.join(_safe_dir, _safe_name_)
449
- if not _safe_name_.endswith('.pyc') and _safe_os.path.isfile(_safe_path) and _safe_path not in _safe_files:
450
- _safe_skipped.add(_safe_path)
451
- _safe_listing = set(_safe_files) | {_safe_os.path.join(folder, '*') for folder in _safe_folders}
452
- return [sorted(_safe_compact(_safe_listing)), sorted(_safe_compact(_safe_skipped))]
453
- _safe_uninstall = _safe_json.loads(_safe_package_uninstall_json)
454
- _safe_records = _safe_json.loads(_safe_package_records_json)
455
- _safe_metadata_only = _safe_uninstall is not None and _safe_records is not None
456
- _safe_record_by_name = {}
457
- _safe_snapshot_paths = {}
458
- if _safe_records is not None:
459
- for _safe_record in _safe_records:
460
- _safe_record_name = _safe_record[0]
461
- if _SafeRequirement(_safe_record_name).name != _safe_record_name or _safe_name(_safe_record_name) != _safe_record_name or _safe_record_name in _safe_record_by_name:
462
- raise ValueError('Invalid Python package metadata snapshot')
463
- _safe_record_by_name[_safe_record_name] = _safe_record
464
- if _safe_metadata_only:
465
- from pathlib import Path as _SafePath
466
- import sysconfig as _safe_sysconfig
467
- for _safe_record_name, _safe_record in _safe_record_by_name.items():
468
- if _safe_record_name in _safe_preloaded:
469
- continue
470
- _safe_path = (_SafePath(_safe_sysconfig.get_path('purelib')) / (_safe_record_name.replace('-', '_') + '-snapshot.dist-info')).resolve()
471
- _safe_path.mkdir()
472
- (_safe_path / 'METADATA').write_text(_safe_record[1])
473
- (_safe_path / 'PYODIDE_URL').write_text(_safe_record[2])
474
- (_safe_path / 'RECORD').write_text('')
475
- _safe_dist = _safe_metadata.Distribution.at(_safe_path)
476
- if _safe_name(_safe_dist.metadata['Name']) != _safe_record_name:
477
- raise ValueError('Python package metadata name conflict: ' + _safe_record_name)
478
- _SafeRequirement(_safe_record_name + '==' + _safe_dist.version)
479
- _safe_snapshot_paths[_safe_record_name] = str(_safe_path)
480
- _safe_metadata.MetadataPathFinder.invalidate_caches()
481
- _safe_restore = _safe_json.loads(_safe_package_restore_json)
482
- _safe_restored_roots = await _safe_parse_sources(_safe_restore, not _safe_metadata_only)
483
- if _safe_package_legacy:
484
- _safe_restored_names = await _safe_resolve(_safe_restored_roots)
485
- else:
486
- if not _safe_metadata_only:
487
- await _safe_manager.install(_safe_restore, deps=False)
488
- _safe_validate(_safe_restored_roots)
489
- _safe_restored_names = {_safe_name(root.name) for root in _safe_restored_roots if not root.marker or root.marker.evaluate({'extra': ''})}
490
- if _safe_metadata_only and set(_safe_record_by_name) != _safe_restored_names:
491
- raise ValueError('Python package metadata snapshot does not match installed requirements')
492
- _safe_roots = await _safe_parse_sources(_safe_json.loads(_safe_package_requirements_json), not _safe_metadata_only)
493
- if _safe_metadata_only:
494
- for _safe_root in _safe_roots:
495
- if _safe_root.url and _safe_name(_safe_root.name) in _safe_snapshot_paths:
496
- _safe_wheel = _SafeWheelInfo.from_url(_safe_root.url)
497
- if _safe_name(_safe_wheel.name) == _safe_name(_safe_root.name) and str(_safe_wheel.version) == _safe_metadata.version(_safe_root.name):
498
- _safe_root.url = None
499
- _safe_root.specifier = _SafeRequirement(_safe_root.name + '==' + str(_safe_wheel.version)).specifier
500
- _safe_managed = await _safe_resolve(_safe_roots, _safe_package_upgrade, _safe_package_forceReinstall)
501
- _safe_distributions = [d for d in _safe_metadata.distributions() if d.metadata['Name']]
502
- _safe_versions = {_safe_name(d.metadata['Name']): d.version for d in _safe_distributions}
503
- _safe_removed = []
504
- if _safe_uninstall:
505
- _safe_targets = list(dict.fromkeys(_safe_name(_SafeRequirement(source).name) for source in _safe_uninstall['packages']))
506
- for _safe_target in _safe_targets:
507
- if _safe_target in _safe_preloaded or _safe_target in _safe_managed:
508
- raise ValueError('Cannot uninstall host-required Python package: ' + _safe_target)
509
- for _safe_target in _safe_targets:
510
- if _safe_target not in _safe_versions:
511
- await _safe_package_emit('stderr', 'WARNING: Skipping ' + _safe_target + ' as it is not installed.\\n')
512
- continue
513
- _safe_dist = _safe_metadata.distribution(_safe_target)
514
- _safe_version = _safe_dist.version
515
- await _safe_package_emit('stdout', 'Found existing installation: ' + _safe_target + ' ' + _safe_version + '\\nUninstalling ' + _safe_target + '-' + _safe_version + ':\\n')
516
- if not _safe_uninstall['yes']:
517
- _safe_record = _safe_record_by_name.get(_safe_target)
518
- _safe_lists = _safe_record[3:] if _safe_snapshot_paths.get(_safe_target) == str(_safe_dist._path) else _safe_removal_listing(_safe_dist)
519
- for _safe_heading, _safe_paths in zip(['Would remove:', 'Would not remove (might be manually added):'], _safe_lists):
520
- if _safe_paths:
521
- await _safe_package_emit('stdout', ' ' + _safe_heading + '\\n')
522
- for _safe_path in _safe_paths:
523
- await _safe_package_emit('stdout', ' ' + _safe_path + '\\n')
524
- while True:
525
- await _safe_package_emit('stdout', 'Proceed (Y/n)? ')
526
- _safe_answer = (await _safe_package_line()).strip().lower()
527
- if _safe_answer in ('y', 'n', ''):
528
- break
529
- await _safe_package_emit('stdout', 'Your response (' + repr(_safe_answer) + ') was not one of the expected responses: y, n, \\n')
530
- if _safe_answer == 'n':
531
- continue
532
- import logging as _safe_logging
533
- _safe_logger = _safe_logging.getLogger('micropip')
534
- _safe_disabled = _safe_logger.disabled
535
- try:
536
- _safe_logger.disabled = True
537
- _safe_manager.uninstall([_safe_target])
538
- finally:
539
- _safe_logger.disabled = _safe_disabled
540
- _safe_metadata.MetadataPathFinder.invalidate_caches()
541
- try:
542
- _safe_metadata.distribution(_safe_target)
543
- except _safe_metadata.PackageNotFoundError:
544
- pass
545
- else:
546
- raise ValueError('Python package removal did not complete: ' + _safe_target)
547
- _safe_restored_names.discard(_safe_target)
548
- _safe_removed.append(_safe_target + '-' + _safe_version)
549
- _safe_distributions = [d for d in _safe_metadata.distributions() if d.metadata['Name']]
550
- _safe_versions = {_safe_name(d.metadata['Name']): d.version for d in _safe_distributions}
551
- _safe_uninstalled_json = _safe_json.dumps(_safe_removed)
552
- _safe_managed.update(_safe_restored_names)
553
- _safe_sources = []
554
- _safe_final_records = []
555
- for _safe_dist in _safe_distributions:
556
- _safe_dist_name = _safe_name(_safe_dist.metadata['Name'])
557
- if _safe_dist_name in _safe_managed:
558
- _safe_origin = _safe_dist.read_text('PYODIDE_URL')
559
- if _safe_origin:
560
- _safe_sources.append(_safe_dist_name + ' @ ' + _safe_origin.strip())
561
- if _safe_snapshot_paths.get(_safe_dist_name) == str(_safe_dist._path):
562
- _safe_final_records.append(_safe_record_by_name[_safe_dist_name])
563
- else:
564
- _safe_headers = _safe_dist.metadata
565
- _safe_metadata_text = ''.join(key + ': ' + value + '\\n' for key in ['Metadata-Version', 'Name', 'Version', 'Requires-Python', 'Requires-Dist', 'Provides-Extra'] for value in _safe_headers.get_all(key, []))
566
- _safe_final_records.append([_safe_dist_name, _safe_metadata_text, (_safe_origin or '').strip(), *_safe_removal_listing(_safe_dist)])
567
- _safe_installed_json = _safe_json.dumps(_safe_sources + [name + '==' + version for name, version in sorted(_safe_versions.items()) if name in _safe_managed])
568
- _safe_records_json = _safe_json.dumps(_safe_final_records)
569
- _safe_metadata.MetadataPathFinder.invalidate_caches()
570
- import gc as _safe_gc
571
- _safe_gc.collect()
572
- `);
247
+ await runtime.runPythonAsync(await loadPythonPackageProgram());
573
248
  await installing;
574
249
  accepting = false;
575
250
  await pending;
576
251
  if (transportFailure) throw transportFailure.error;
577
252
  const pinned = JSON.parse(runtime.runPython("_safe_installed_json"));
578
- await request("package-commit", start.session, start.restore === void 0 ? pinned : { version: 2, installed: pinned, records: JSON.parse(runtime.runPython("_safe_records_json")) });
253
+ await request("package-commit", start.session, start.restore === void 0 ? pinned : { version: 3, installed: pinned, records: JSON.parse(runtime.runPython("_safe_records_json")) });
579
254
  if (start.uninstall) {
580
255
  const removed = JSON.parse(runtime.runPython("_safe_uninstalled_json"));
581
256
  for (const name of removed) {
@@ -724,6 +399,10 @@ def _safe_launch():
724
399
  main = types.ModuleType('__main__')
725
400
  main.__dict__.update(__package__=None, __spec__=None, __loader__=__import__('importlib.machinery', fromlist=['BuiltinImporter']).BuiltinImporter, __builtins__=__builtins__)
726
401
  sys.modules['__main__'] = main
402
+ if not sys.flags.no_site:
403
+ sys.argv = [args[0]] + args[2:] if not options_terminated and args and args[0] in ('-c', '-m') else args or ['']
404
+ import site
405
+ site.addsitepackages(site.addusersitepackages(None), [_safe_runtime_mount])
727
406
  if not options_terminated and args and args[0] == '-c':
728
407
  sys.argv = ['-c'] + args[2:]
729
408
  if not safe_path: sys.path.insert(0, '')
@@ -982,6 +661,7 @@ shutil._rmtree_impl = _safe_rmtree_impl
982
661
  export {
983
662
  PythonInvocationError,
984
663
  parsePythonInvocation,
664
+ pythonPackageUrlHash,
985
665
  installPythonPackages,
986
666
  pythonExecution,
987
667
  pythonRuntimeRelocation,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  validateColor
3
- } from "./chunk-75OUKYCM.js";
3
+ } from "./chunk-CH5JDE3C.js";
4
4
  import {
5
5
  attr,
6
6
  child,
@@ -12,7 +12,7 @@ import {
12
12
  relPart,
13
13
  required,
14
14
  unique
15
- } from "./chunk-UDRJKA3P.js";
15
+ } from "./chunk-C23L4HZB.js";
16
16
  import {
17
17
  parseXmlPart
18
18
  } from "./chunk-YWP62BAZ.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  openRetainedPresentationIndex
3
- } from "./chunk-LZHFVNEV.js";
3
+ } from "./chunk-S3QYSI5E.js";
4
4
  import {
5
5
  stageRetainedOutput,
6
6
  streamJson
@@ -10,13 +10,13 @@ import {
10
10
  child,
11
11
  invalid,
12
12
  loadShared
13
- } from "./chunk-UDRJKA3P.js";
13
+ } from "./chunk-C23L4HZB.js";
14
14
  import {
15
15
  SelectionError
16
- } from "./chunk-SKF6PGA5.js";
16
+ } from "./chunk-I2OKE2NI.js";
17
17
  import {
18
18
  openRetainedPresentationValidation
19
- } from "./chunk-SKDJCMGI.js";
19
+ } from "./chunk-ATUZ7J3B.js";
20
20
  import {
21
21
  OfficeError,
22
22
  RetainedValues,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  openRetainedPresentationIndex
3
- } from "./chunk-LZHFVNEV.js";
3
+ } from "./chunk-S3QYSI5E.js";
4
4
  import {
5
5
  stageRetainedOutput,
6
6
  streamJson
@@ -14,13 +14,13 @@ import {
14
14
  nextRel,
15
15
  relPart,
16
16
  required
17
- } from "./chunk-UDRJKA3P.js";
17
+ } from "./chunk-C23L4HZB.js";
18
18
  import {
19
19
  SelectionError
20
- } from "./chunk-SKF6PGA5.js";
20
+ } from "./chunk-I2OKE2NI.js";
21
21
  import {
22
22
  openRetainedPresentationValidation
23
- } from "./chunk-SKDJCMGI.js";
23
+ } from "./chunk-ATUZ7J3B.js";
24
24
  import {
25
25
  dialects
26
26
  } from "./chunk-P3LHQOX7.js";
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-52DDLGBS.js";
4
4
  import {
5
5
  boundedCodec
6
- } from "./chunk-RUXY7GN5.js";
6
+ } from "./chunk-CMJBRGU2.js";
7
7
 
8
8
  // packages/safe-bash-compression-engine/src/zstd-decode.ts
9
9
  import { PublicDiagnostic } from "../../safe-bash-contracts/diagnostics.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  requireLegacyCommentRemapping
3
- } from "./chunk-AR65HNNX.js";
3
+ } from "./chunk-N2TN7IBE.js";
4
4
  import {
5
5
  attr,
6
6
  child,
@@ -9,11 +9,11 @@ import {
9
9
  loadShared,
10
10
  nextRel,
11
11
  relPart
12
- } from "./chunk-UDRJKA3P.js";
12
+ } from "./chunk-C23L4HZB.js";
13
13
  import {
14
14
  SelectionError,
15
15
  decodeSelectionToken
16
- } from "./chunk-SKF6PGA5.js";
16
+ } from "./chunk-I2OKE2NI.js";
17
17
  import {
18
18
  parseXmlPart
19
19
  } from "./chunk-YWP62BAZ.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  nodeFor
3
- } from "./chunk-4HJEZGYN.js";
3
+ } from "./chunk-YODHIRPW.js";
4
4
  import {
5
5
  TextFrame,
6
6
  applyFrameFormatting,
7
7
  readShape
8
- } from "./chunk-64L57DEI.js";
8
+ } from "./chunk-UQTU7H6T.js";
9
9
  import {
10
10
  Length
11
11
  } from "./chunk-GNVAW6NL.js";
@@ -13,7 +13,7 @@ import {
13
13
  attr,
14
14
  child,
15
15
  required
16
- } from "./chunk-UDRJKA3P.js";
16
+ } from "./chunk-C23L4HZB.js";
17
17
  import {
18
18
  parseXmlPart
19
19
  } from "./chunk-YWP62BAZ.js";
@@ -3,26 +3,26 @@ import {
3
3
  readShapePath,
4
4
  shapePathXml,
5
5
  validateShapePath
6
- } from "./chunk-BSLXS4PE.js";
6
+ } from "./chunk-3DH5QBZC.js";
7
7
  import {
8
8
  addShape,
9
9
  nodeFor,
10
10
  selected,
11
11
  validateSelection
12
- } from "./chunk-4HJEZGYN.js";
12
+ } from "./chunk-YODHIRPW.js";
13
13
  import {
14
14
  validateShapeOptions
15
- } from "./chunk-64L57DEI.js";
15
+ } from "./chunk-UQTU7H6T.js";
16
16
  import {
17
17
  Length
18
18
  } from "./chunk-GNVAW6NL.js";
19
19
  import {
20
20
  loadShared,
21
21
  required
22
- } from "./chunk-UDRJKA3P.js";
22
+ } from "./chunk-C23L4HZB.js";
23
23
  import {
24
24
  SelectionError
25
- } from "./chunk-SKF6PGA5.js";
25
+ } from "./chunk-I2OKE2NI.js";
26
26
  import {
27
27
  OfficeError
28
28
  } from "./chunk-VJQ5OWS5.js";
@@ -1,3 +1,6 @@
1
+ import {
2
+ playwrightStorageAbilities
3
+ } from "./chunk-U6IEK2CI.js";
1
4
  import {
2
5
  playwrightTracingStart,
3
6
  playwrightTracingStop
@@ -9,9 +12,6 @@ import {
9
12
  playwrightRouteAbilities,
10
13
  setPlaywrightNetworkState
11
14
  } from "./chunk-PH6IMF5Z.js";
12
- import {
13
- playwrightStorageAbilities
14
- } from "./chunk-HCJWEB6P.js";
15
15
  import {
16
16
  playwrightRecordingAbilities
17
17
  } from "./chunk-XPUHDPMZ.js";