omdev 0.0.47__tar.gz → 0.0.48__tar.gz

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 (581) hide show
  1. {omdev-0.0.47/omdev.egg-info → omdev-0.0.48}/PKG-INFO +14 -14
  2. {omdev-0.0.47 → omdev-0.0.48}/omdev/.om-manifests.json +1 -1
  3. {omdev-0.0.47 → omdev-0.0.48}/omdev/__about__.py +1 -1
  4. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/cli/main.py +29 -11
  5. omdev-0.0.48/omdev/dockerdev/resources/fragments/om.sh +8 -0
  6. {omdev-0.0.47 → omdev-0.0.48}/omdev/home/secrets.py +2 -8
  7. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/libregexp.c +18 -1
  8. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/quickjs-libc.c +2 -2
  9. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/quickjs.c +88 -65
  10. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/quickjs.h +1 -1
  11. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/ci.py +13 -4
  12. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/lib/io/pipelines.py +13 -4
  13. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/json/formats.py +3 -5
  14. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/sqlrepl.py +2 -3
  15. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/diff/underlinebar.py +44 -20
  16. {omdev-0.0.47 → omdev-0.0.48/omdev.egg-info}/PKG-INFO +14 -14
  17. {omdev-0.0.47 → omdev-0.0.48}/omdev.egg-info/requires.txt +13 -13
  18. {omdev-0.0.47 → omdev-0.0.48}/pyproject.toml +14 -14
  19. omdev-0.0.47/omdev/dockerdev/resources/fragments/om.sh +0 -21
  20. {omdev-0.0.47 → omdev-0.0.48}/LICENSE +0 -0
  21. {omdev-0.0.47 → omdev-0.0.48}/MANIFEST.in +0 -0
  22. {omdev-0.0.47 → omdev-0.0.48}/README.md +0 -0
  23. {omdev-0.0.47 → omdev-0.0.48}/omdev/README.md +0 -0
  24. {omdev-0.0.47 → omdev-0.0.48}/omdev/__init__.py +0 -0
  25. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/__init__.py +0 -0
  26. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/__main__.py +0 -0
  27. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/cli/__init__.py +0 -0
  28. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/gen/__init__.py +0 -0
  29. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/gen/gen.py +0 -0
  30. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/gen/imports.py +0 -0
  31. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/gen/manifests.py +0 -0
  32. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/gen/resources.py +0 -0
  33. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/gen/srcfiles.py +0 -0
  34. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/gen/strip.py +0 -0
  35. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/gen/types.py +0 -0
  36. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/gen/typing.py +0 -0
  37. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/info.py +0 -0
  38. {omdev-0.0.47 → omdev-0.0.48}/omdev/amalg/sources.py +0 -0
  39. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/__init__.py +0 -0
  40. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/compute/__init__.py +0 -0
  41. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/compute/cache.py +0 -0
  42. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/compute/contexts.py +0 -0
  43. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/compute/currents.py +0 -0
  44. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/compute/fns.py +0 -0
  45. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/compute/resolvers.py +0 -0
  46. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/compute/storage.py +0 -0
  47. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/compute/types.py +0 -0
  48. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/data/__init__.py +0 -0
  49. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/data/actions.py +0 -0
  50. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/data/cache.py +0 -0
  51. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/data/consts.py +0 -0
  52. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/data/defaults.py +0 -0
  53. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/data/manifests.py +0 -0
  54. {omdev-0.0.47 → omdev-0.0.48}/omdev/cache/data/specs.py +0 -0
  55. {omdev-0.0.47 → omdev-0.0.48}/omdev/capi/__init__.py +0 -0
  56. {omdev-0.0.47 → omdev-0.0.48}/omdev/capi/darwin/__init__.py +0 -0
  57. {omdev-0.0.47 → omdev-0.0.48}/omdev/capi/darwin/aps.py +0 -0
  58. {omdev-0.0.47 → omdev-0.0.48}/omdev/capi/darwin/ax.py +0 -0
  59. {omdev-0.0.47 → omdev-0.0.48}/omdev/capi/darwin/cf.py +0 -0
  60. {omdev-0.0.47 → omdev-0.0.48}/omdev/capi/darwin/cg.py +0 -0
  61. {omdev-0.0.47 → omdev-0.0.48}/omdev/capi/linux/__init__.py +0 -0
  62. {omdev-0.0.47 → omdev-0.0.48}/omdev/capi/linux/x11.py +0 -0
  63. {omdev-0.0.47 → omdev-0.0.48}/omdev/cc/__init__.py +0 -0
  64. {omdev-0.0.47 → omdev-0.0.48}/omdev/cc/__main__.py +0 -0
  65. {omdev-0.0.47 → omdev-0.0.48}/omdev/cc/cdeps.py +0 -0
  66. {omdev-0.0.47 → omdev-0.0.48}/omdev/cc/cdeps.toml +0 -0
  67. {omdev-0.0.47 → omdev-0.0.48}/omdev/cc/cli.py +0 -0
  68. {omdev-0.0.47 → omdev-0.0.48}/omdev/cc/srclangs.py +0 -0
  69. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/__init__.py +0 -0
  70. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_boilerplate.cc +0 -0
  71. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/LICENSE +0 -0
  72. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/__init__.py +0 -0
  73. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/build_ext.py +0 -0
  74. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  75. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  76. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/compilers/options.py +0 -0
  77. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  78. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/dir_util.py +0 -0
  79. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/errors.py +0 -0
  80. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/extension.py +0 -0
  81. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/file_util.py +0 -0
  82. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/modified.py +0 -0
  83. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/spawn.py +0 -0
  84. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/sysconfig.py +0 -0
  85. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/util.py +0 -0
  86. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/_distutils/version.py +0 -0
  87. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/build.py +0 -0
  88. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/cmake.py +0 -0
  89. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/configs.py +0 -0
  90. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/importhook.py +0 -0
  91. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/magic.py +0 -0
  92. {omdev-0.0.47 → omdev-0.0.48}/omdev/cexts/scan.py +0 -0
  93. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/__init__.py +0 -0
  94. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/__main__.py +0 -0
  95. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/cache.py +0 -0
  96. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/ci.py +0 -0
  97. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/cli.py +0 -0
  98. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/compose.py +0 -0
  99. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/consts.py +0 -0
  100. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/docker/__init__.py +0 -0
  101. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/docker/buildcaching.py +0 -0
  102. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/docker/cache.py +0 -0
  103. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  104. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/docker/cacheserved/cache.py +0 -0
  105. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  106. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/docker/cmds.py +0 -0
  107. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/docker/dataserver.py +0 -0
  108. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/docker/imagepulling.py +0 -0
  109. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/docker/inject.py +0 -0
  110. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/docker/packing.py +0 -0
  111. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/docker/repositories.py +0 -0
  112. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/docker/utils.py +0 -0
  113. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/__init__.py +0 -0
  114. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/api/__init__.py +0 -0
  115. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/api/clients.py +0 -0
  116. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/api/v1/__init__.py +0 -0
  117. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/api/v1/api.py +0 -0
  118. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/api/v1/client.py +0 -0
  119. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/api/v2/__init__.py +0 -0
  120. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/api/v2/api.py +0 -0
  121. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/api/v2/azure.py +0 -0
  122. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/api/v2/client.py +0 -0
  123. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/bootstrap.py +0 -0
  124. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/cache.py +0 -0
  125. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/cli.py +0 -0
  126. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/env.py +0 -0
  127. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/github/inject.py +0 -0
  128. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/inject.py +0 -0
  129. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/requirements.py +0 -0
  130. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/shell.py +0 -0
  131. {omdev-0.0.47 → omdev-0.0.48}/omdev/ci/utils.py +0 -0
  132. {omdev-0.0.47 → omdev-0.0.48}/omdev/cli/__init__.py +0 -0
  133. {omdev-0.0.47 → omdev-0.0.48}/omdev/cli/__main__.py +0 -0
  134. {omdev-0.0.47 → omdev-0.0.48}/omdev/cli/_pathhack.py +0 -0
  135. {omdev-0.0.47 → omdev-0.0.48}/omdev/cli/clicli.py +0 -0
  136. {omdev-0.0.47 → omdev-0.0.48}/omdev/cli/install.py +0 -0
  137. {omdev-0.0.47 → omdev-0.0.48}/omdev/cli/main.py +0 -0
  138. {omdev-0.0.47 → omdev-0.0.48}/omdev/cli/managers.py +0 -0
  139. {omdev-0.0.47 → omdev-0.0.48}/omdev/cli/types.py +0 -0
  140. {omdev-0.0.47 → omdev-0.0.48}/omdev/clipboard/__init__.py +0 -0
  141. {omdev-0.0.47 → omdev-0.0.48}/omdev/clipboard/capi/__init__.py +0 -0
  142. {omdev-0.0.47 → omdev-0.0.48}/omdev/clipboard/capi/darwin_cf.py +0 -0
  143. {omdev-0.0.47 → omdev-0.0.48}/omdev/clipboard/capi/linux_x11.py +0 -0
  144. {omdev-0.0.47 → omdev-0.0.48}/omdev/clipboard/commands.py +0 -0
  145. {omdev-0.0.47 → omdev-0.0.48}/omdev/clipboard/platform.py +0 -0
  146. {omdev-0.0.47 → omdev-0.0.48}/omdev/clipboard/types.py +0 -0
  147. {omdev-0.0.47 → omdev-0.0.48}/omdev/cmake.py +0 -0
  148. {omdev-0.0.47 → omdev-0.0.48}/omdev/cmdlog/__init__.py +0 -0
  149. {omdev-0.0.47 → omdev-0.0.48}/omdev/cmdlog/__main__.py +0 -0
  150. {omdev-0.0.47 → omdev-0.0.48}/omdev/cmdlog/_cmdlog.py +0 -0
  151. {omdev-0.0.47 → omdev-0.0.48}/omdev/cmdlog/cli.py +0 -0
  152. {omdev-0.0.47 → omdev-0.0.48}/omdev/cmdlog/cmdlog.py +0 -0
  153. {omdev-0.0.47 → omdev-0.0.48}/omdev/dataclasses/__init__.py +0 -0
  154. {omdev-0.0.47 → omdev-0.0.48}/omdev/dataclasses/__main__.py +0 -0
  155. {omdev-0.0.47 → omdev-0.0.48}/omdev/dataclasses/_dumping.py +0 -0
  156. {omdev-0.0.47 → omdev-0.0.48}/omdev/dataclasses/_template.py +0 -0
  157. {omdev-0.0.47 → omdev-0.0.48}/omdev/dataclasses/cli.py +0 -0
  158. {omdev-0.0.47 → omdev-0.0.48}/omdev/dataclasses/codegen.py +0 -0
  159. {omdev-0.0.47 → omdev-0.0.48}/omdev/dataclasses/dumping.py +0 -0
  160. {omdev-0.0.47 → omdev-0.0.48}/omdev/dataserver/__init__.py +0 -0
  161. {omdev-0.0.47 → omdev-0.0.48}/omdev/dataserver/handlers.py +0 -0
  162. {omdev-0.0.47 → omdev-0.0.48}/omdev/dataserver/http.py +0 -0
  163. {omdev-0.0.47 → omdev-0.0.48}/omdev/dataserver/routes.py +0 -0
  164. {omdev-0.0.47 → omdev-0.0.48}/omdev/dataserver/server.py +0 -0
  165. {omdev-0.0.47 → omdev-0.0.48}/omdev/dataserver/targets.py +0 -0
  166. {omdev-0.0.47 → omdev-0.0.48}/omdev/diffs/__init__.py +0 -0
  167. {omdev-0.0.47 → omdev-0.0.48}/omdev/diffs/__main__.py +0 -0
  168. {omdev-0.0.47 → omdev-0.0.48}/omdev/diffs/cli.py +0 -0
  169. {omdev-0.0.47 → omdev-0.0.48}/omdev/diffs/parsing.py +0 -0
  170. {omdev-0.0.47 → omdev-0.0.48}/omdev/diffs/rendering.py +0 -0
  171. {omdev-0.0.47 → omdev-0.0.48}/omdev/diffs/types.py +0 -0
  172. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/__init__.py +0 -0
  173. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/__main__.py +0 -0
  174. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/build.py +0 -0
  175. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/cli.py +0 -0
  176. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/config.py +0 -0
  177. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/config.toml +0 -0
  178. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/content.py +0 -0
  179. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/discovery.py +0 -0
  180. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/gen.py +0 -0
  181. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/helpers.py +0 -0
  182. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/ops.py +0 -0
  183. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/rendering.py +0 -0
  184. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/.python-versions.json +0 -0
  185. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/configs/.gdbinit +0 -0
  186. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/configs/.sqliterc +0 -0
  187. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/configs/.tmux.conf +0 -0
  188. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/configs/.vimrc +0 -0
  189. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/depsets/python.toml +0 -0
  190. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/depsets/system.toml +0 -0
  191. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
  192. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/apt.sh +0 -0
  193. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/chgrp.sh +0 -0
  194. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/docker.sh +0 -0
  195. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/firefox.sh +0 -0
  196. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/go.sh +0 -0
  197. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/jdk.sh +0 -0
  198. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/man.sh +0 -0
  199. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/nvm.sh +0 -0
  200. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -0
  201. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/rbenv.sh +0 -0
  202. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/rust.sh +0 -0
  203. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/sshd.sh +0 -0
  204. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/user.sh +0 -0
  205. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/uv.sh +0 -0
  206. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -0
  207. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/workdir.sh +0 -0
  208. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/fragments/zig.sh +0 -0
  209. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/scripts/install-claude +0 -0
  210. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/scripts/install-codex +0 -0
  211. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/scripts/install-pi +0 -0
  212. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/scripts/run-dbus +0 -0
  213. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/scripts/run-mysql +0 -0
  214. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/scripts/run-postgres +0 -0
  215. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/resources/shift-uid.sh +0 -0
  216. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/run.py +0 -0
  217. {omdev-0.0.47 → omdev-0.0.48}/omdev/dockerdev/utils.py +0 -0
  218. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/__init__.py +0 -0
  219. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/magic.py +0 -0
  220. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/revisions.py +0 -0
  221. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/shallow.py +0 -0
  222. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/status.py +0 -0
  223. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/vendor/__init__.py +0 -0
  224. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/vendor/aborting.py +0 -0
  225. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/vendor/diffing.py +0 -0
  226. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/vendor/errors.py +0 -0
  227. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/vendor/journals.py +0 -0
  228. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/vendor/merging.py +0 -0
  229. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/vendor/paths.py +0 -0
  230. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/vendor/pulling.py +0 -0
  231. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/vendor/runners.py +0 -0
  232. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/vendor/specs.py +0 -0
  233. {omdev-0.0.47 → omdev-0.0.48}/omdev/git/vendor/upstreams.py +0 -0
  234. {omdev-0.0.47 → omdev-0.0.48}/omdev/home/__init__.py +0 -0
  235. {omdev-0.0.47 → omdev-0.0.48}/omdev/home/__main__.py +0 -0
  236. {omdev-0.0.47 → omdev-0.0.48}/omdev/home/cli.py +0 -0
  237. {omdev-0.0.47 → omdev-0.0.48}/omdev/home/paths.py +0 -0
  238. {omdev-0.0.47 → omdev-0.0.48}/omdev/home/shadow.py +0 -0
  239. {omdev-0.0.47 → omdev-0.0.48}/omdev/imgur.py +0 -0
  240. {omdev-0.0.47 → omdev-0.0.48}/omdev/intellij/__init__.py +0 -0
  241. {omdev-0.0.47 → omdev-0.0.48}/omdev/intellij/cli.py +0 -0
  242. {omdev-0.0.47 → omdev-0.0.48}/omdev/intellij/ides.py +0 -0
  243. {omdev-0.0.47 → omdev-0.0.48}/omdev/intellij/open.py +0 -0
  244. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/__init__.py +0 -0
  245. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/__main__.py +0 -0
  246. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/cli.py +0 -0
  247. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/default.py +0 -0
  248. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/inject.py +0 -0
  249. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/inspect.py +0 -0
  250. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/providers/__init__.py +0 -0
  251. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/providers/base.py +0 -0
  252. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/providers/inject.py +0 -0
  253. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/providers/running.py +0 -0
  254. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/providers/standalone.py +0 -0
  255. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/providers/system.py +0 -0
  256. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/pyenv/__init__.py +0 -0
  257. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/pyenv/inject.py +0 -0
  258. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/pyenv/install.py +0 -0
  259. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/pyenv/provider.py +0 -0
  260. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/pyenv/pyenv.py +0 -0
  261. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/resolvers.py +0 -0
  262. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/types.py +0 -0
  263. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/uv/__init__.py +0 -0
  264. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/uv/inject.py +0 -0
  265. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/uv/provider.py +0 -0
  266. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/uv/uv.py +0 -0
  267. {omdev-0.0.47 → omdev-0.0.48}/omdev/interp/venvs.py +0 -0
  268. {omdev-0.0.47 → omdev-0.0.48}/omdev/java/__init__.py +0 -0
  269. {omdev-0.0.47 → omdev-0.0.48}/omdev/java/__main__.py +0 -0
  270. {omdev-0.0.47 → omdev-0.0.48}/omdev/java/cli.py +0 -0
  271. {omdev-0.0.47 → omdev-0.0.48}/omdev/java/pomgen.py +0 -0
  272. {omdev-0.0.47 → omdev-0.0.48}/omdev/java/utils.py +0 -0
  273. {omdev-0.0.47 → omdev-0.0.48}/omdev/java/xml.py +0 -0
  274. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/__init__.py +0 -0
  275. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/LICENSE +0 -0
  276. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/TODO.md +0 -0
  277. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/__init__.py +0 -0
  278. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_pyqjsng.c +0 -0
  279. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_pyqjsng.pyi +0 -0
  280. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/LICENSE +0 -0
  281. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/builtin-array-fromasync.h +0 -0
  282. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/builtin-iterator-zip-keyed.h +0 -0
  283. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/builtin-iterator-zip.h +0 -0
  284. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/cutils.h +0 -0
  285. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/dtoa.c +0 -0
  286. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/dtoa.h +0 -0
  287. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/libregexp-opcode.h +0 -0
  288. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/libregexp.h +0 -0
  289. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/libunicode-table.h +0 -0
  290. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/libunicode.c +0 -0
  291. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/libunicode.h +0 -0
  292. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/list.h +0 -0
  293. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/quickjs-atom.h +0 -0
  294. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/quickjs-c-atomics.h +0 -0
  295. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/quickjs-libc.h +0 -0
  296. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/_quickjs/quickjs-opcode.h +0 -0
  297. {omdev-0.0.47 → omdev-0.0.48}/omdev/js/quickjs/snapshots.py +0 -0
  298. {omdev-0.0.47 → omdev-0.0.48}/omdev/magic/__init__.py +0 -0
  299. {omdev-0.0.47 → omdev-0.0.48}/omdev/magic/__main__.py +0 -0
  300. {omdev-0.0.47 → omdev-0.0.48}/omdev/magic/cli.py +0 -0
  301. {omdev-0.0.47 → omdev-0.0.48}/omdev/magic/find.py +0 -0
  302. {omdev-0.0.47 → omdev-0.0.48}/omdev/magic/magic.py +0 -0
  303. {omdev-0.0.47 → omdev-0.0.48}/omdev/magic/prepare.py +0 -0
  304. {omdev-0.0.47 → omdev-0.0.48}/omdev/magic/styles.py +0 -0
  305. {omdev-0.0.47 → omdev-0.0.48}/omdev/manifests/__init__.py +0 -0
  306. {omdev-0.0.47 → omdev-0.0.48}/omdev/manifests/__main__.py +0 -0
  307. {omdev-0.0.47 → omdev-0.0.48}/omdev/manifests/_dumping.py +0 -0
  308. {omdev-0.0.47 → omdev-0.0.48}/omdev/manifests/building.py +0 -0
  309. {omdev-0.0.47 → omdev-0.0.48}/omdev/manifests/dumping.py +0 -0
  310. {omdev-0.0.47 → omdev-0.0.48}/omdev/manifests/main.py +0 -0
  311. {omdev-0.0.47 → omdev-0.0.48}/omdev/markdownit/__init__.py +0 -0
  312. {omdev-0.0.47 → omdev-0.0.48}/omdev/markdownit/incparse.py +0 -0
  313. {omdev-0.0.47 → omdev-0.0.48}/omdev/markdownit/tokens.py +0 -0
  314. {omdev-0.0.47 → omdev-0.0.48}/omdev/mypy/__init__.py +0 -0
  315. {omdev-0.0.47 → omdev-0.0.48}/omdev/mypy/debug.py +0 -0
  316. {omdev-0.0.47 → omdev-0.0.48}/omdev/mypy/report.py +0 -0
  317. {omdev-0.0.47 → omdev-0.0.48}/omdev/packaging/__init__.py +0 -0
  318. {omdev-0.0.47 → omdev-0.0.48}/omdev/packaging/marshal.py +0 -0
  319. {omdev-0.0.47 → omdev-0.0.48}/omdev/packaging/names.py +0 -0
  320. {omdev-0.0.47 → omdev-0.0.48}/omdev/packaging/requirements.py +0 -0
  321. {omdev-0.0.47 → omdev-0.0.48}/omdev/packaging/revisions.py +0 -0
  322. {omdev-0.0.47 → omdev-0.0.48}/omdev/packaging/specifiers.py +0 -0
  323. {omdev-0.0.47 → omdev-0.0.48}/omdev/packaging/versions.py +0 -0
  324. {omdev-0.0.47 → omdev-0.0.48}/omdev/packaging/wheelfile.py +0 -0
  325. {omdev-0.0.47 → omdev-0.0.48}/omdev/pip.py +0 -0
  326. {omdev-0.0.47 → omdev-0.0.48}/omdev/precheck/__init__.py +0 -0
  327. {omdev-0.0.47 → omdev-0.0.48}/omdev/precheck/__main__.py +0 -0
  328. {omdev-0.0.47 → omdev-0.0.48}/omdev/precheck/base.py +0 -0
  329. {omdev-0.0.47 → omdev-0.0.48}/omdev/precheck/blanklines.py +0 -0
  330. {omdev-0.0.47 → omdev-0.0.48}/omdev/precheck/caches.py +0 -0
  331. {omdev-0.0.47 → omdev-0.0.48}/omdev/precheck/git.py +0 -0
  332. {omdev-0.0.47 → omdev-0.0.48}/omdev/precheck/imports.py +0 -0
  333. {omdev-0.0.47 → omdev-0.0.48}/omdev/precheck/lite.py +0 -0
  334. {omdev-0.0.47 → omdev-0.0.48}/omdev/precheck/main.py +0 -0
  335. {omdev-0.0.47 → omdev-0.0.48}/omdev/precheck/manifests.py +0 -0
  336. {omdev-0.0.47 → omdev-0.0.48}/omdev/precheck/scripts.py +0 -0
  337. {omdev-0.0.47 → omdev-0.0.48}/omdev/precheck/unicode.py +0 -0
  338. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/__init__.py +0 -0
  339. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/asts/__init__.py +0 -0
  340. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/asts/parents.py +0 -0
  341. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/asts/toplevel.py +0 -0
  342. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/asts/visitors.py +0 -0
  343. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/attrdocs.py +0 -0
  344. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/bracepy.py +0 -0
  345. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/classdot.py +0 -0
  346. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/docstrings/LICENSE +0 -0
  347. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/docstrings/__init__.py +0 -0
  348. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/docstrings/attrdoc.py +0 -0
  349. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/docstrings/common.py +0 -0
  350. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/docstrings/epydoc.py +0 -0
  351. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/docstrings/google.py +0 -0
  352. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/docstrings/numpydoc.py +0 -0
  353. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/docstrings/parser.py +0 -0
  354. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/docstrings/rest.py +0 -0
  355. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/findimports.py +0 -0
  356. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/reprs.py +0 -0
  357. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/scripts/__init__.py +0 -0
  358. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/scripts/bumpversion.py +0 -0
  359. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/scripts/importtrace.py +0 -0
  360. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/srcheaders.py +0 -0
  361. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/tokens/__init__.py +0 -0
  362. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/tokens/all.py +0 -0
  363. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/tokens/tokenizert.py +0 -0
  364. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/tokens/utils.py +0 -0
  365. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/tools/__init__.py +0 -0
  366. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/tools/fixdocstrings.py +0 -0
  367. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/tools/importscan.py +0 -0
  368. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/tools/mkrelimp.py +0 -0
  369. {omdev-0.0.47 → omdev-0.0.48}/omdev/py/tools/pipdepup.py +0 -0
  370. {omdev-0.0.47 → omdev-0.0.48}/omdev/py.typed +0 -0
  371. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/__init__.py +0 -0
  372. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/__main__.py +0 -0
  373. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/cli.py +0 -0
  374. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/configs.py +0 -0
  375. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/inject.py +0 -0
  376. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/pkg.py +0 -0
  377. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/reqs.py +0 -0
  378. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/resources/dockerdev.sh +0 -0
  379. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/resources/python.sh +0 -0
  380. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/tools/__init__.py +0 -0
  381. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/tools/aboutdeps.py +0 -0
  382. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/tools/buildrs.py +0 -0
  383. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/tools/pyversions.py +0 -0
  384. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/venvs.py +0 -0
  385. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyproject/versions.py +0 -0
  386. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyright/__init__.py +0 -0
  387. {omdev-0.0.47 → omdev-0.0.48}/omdev/pyright/report.py +0 -0
  388. {omdev-0.0.47 → omdev-0.0.48}/omdev/rs/__init__.py +0 -0
  389. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/__init__.py +0 -0
  390. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/interp.py +0 -0
  391. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/lib/__init__.py +0 -0
  392. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/lib/formats/__init__.py +0 -0
  393. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/lib/formats/goyaml.py +0 -0
  394. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/lib/inject.py +0 -0
  395. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/lib/io/__init__.py +0 -0
  396. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/lib/io/streambufs.py +0 -0
  397. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/lib/logs.py +0 -0
  398. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/lib/marshal.py +0 -0
  399. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/pidfiles.py +0 -0
  400. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/pyproject.py +0 -0
  401. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/slowcat.py +0 -0
  402. {omdev-0.0.47 → omdev-0.0.48}/omdev/scripts/tmpexec.py +0 -0
  403. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/__init__.py +0 -0
  404. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/__init__.py +0 -0
  405. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/messages/__init__.py +0 -0
  406. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/messages/base.py +0 -0
  407. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/messages/formats.py +0 -0
  408. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/messages/messages.py +0 -0
  409. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/messages/parsing.py +0 -0
  410. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/numerics/__init__.py +0 -0
  411. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/numerics/formats.py +0 -0
  412. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/numerics/numerics.py +0 -0
  413. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/numerics/types.py +0 -0
  414. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/protocol/LICENSE +0 -0
  415. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/protocol/__init__.py +0 -0
  416. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/protocol/consts.py +0 -0
  417. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/protocol/errors.py +0 -0
  418. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/protocol/message.py +0 -0
  419. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/protocol/nuh.py +0 -0
  420. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/protocol/parsing.py +0 -0
  421. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/protocol/rendering.py +0 -0
  422. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/protocol/tags.py +0 -0
  423. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/irc/protocol/utils.py +0 -0
  424. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/jsonschema/__init__.py +0 -0
  425. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/jsonschema/codegen/__init__.py +0 -0
  426. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/jsonschema/codegen/__main__.py +0 -0
  427. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/jsonschema/codegen/analysis.py +0 -0
  428. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/jsonschema/codegen/cli.py +0 -0
  429. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/jsonschema/codegen/config.py +0 -0
  430. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/jsonschema/codegen/errors.py +0 -0
  431. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/jsonschema/codegen/generator.py +0 -0
  432. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/jsonschema/codegen/ir.py +0 -0
  433. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/jsonschema/codegen/names.py +0 -0
  434. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/jsonschema/codegen/rendering.py +0 -0
  435. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/jsonschema/codegen/transforms.py +0 -0
  436. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/jsonschema/codegen/typing.py +0 -0
  437. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/oci/__init__.py +0 -0
  438. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/oci/building.py +0 -0
  439. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/oci/compression.py +0 -0
  440. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/oci/data.py +0 -0
  441. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/oci/datarefs.py +0 -0
  442. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/oci/dataserver.py +0 -0
  443. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/oci/loading.py +0 -0
  444. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/oci/media.py +0 -0
  445. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/oci/pack/__init__.py +0 -0
  446. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/oci/pack/packing.py +0 -0
  447. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/oci/pack/repositories.py +0 -0
  448. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/oci/pack/unpacking.py +0 -0
  449. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/oci/repositories.py +0 -0
  450. {omdev-0.0.47 → omdev-0.0.48}/omdev/specs/oci/tars.py +0 -0
  451. {omdev-0.0.47 → omdev-0.0.48}/omdev/tagstrings.py +0 -0
  452. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/__init__.py +0 -0
  453. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/cloc.py +0 -0
  454. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/diff.py +0 -0
  455. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/doc.py +0 -0
  456. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/docker.py +0 -0
  457. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/git/__init__.py +0 -0
  458. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/git/__main__.py +0 -0
  459. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/git/cli.py +0 -0
  460. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/git/cloning.py +0 -0
  461. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/git/consts.py +0 -0
  462. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/git/messages.py +0 -0
  463. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/json/__init__.py +0 -0
  464. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/json/__main__.py +0 -0
  465. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/json/cli.py +0 -0
  466. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/json/io.py +0 -0
  467. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/json/parsing.py +0 -0
  468. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/json/processing.py +0 -0
  469. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/json/rendering.py +0 -0
  470. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/jsonview/__init__.py +0 -0
  471. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/jsonview/__main__.py +0 -0
  472. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/jsonview/cli.py +0 -0
  473. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  474. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
  475. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  476. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/linehisto.py +0 -0
  477. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/mkenv.py +0 -0
  478. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/notebook.py +0 -0
  479. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/ocr.py +0 -0
  480. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/pawk/README.md +0 -0
  481. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/pawk/__init__.py +0 -0
  482. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/pawk/__main__.py +0 -0
  483. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/pawk/pawk.py +0 -0
  484. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/pip.py +0 -0
  485. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/prof.py +0 -0
  486. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/qr.py +0 -0
  487. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/shadow.py +0 -0
  488. {omdev-0.0.47 → omdev-0.0.48}/omdev/tools/shell.py +0 -0
  489. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/__init__.py +0 -0
  490. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/README.md +0 -0
  491. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/__init__.py +0 -0
  492. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/_dataclasses.py +0 -0
  493. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/_devdocs/design.md +0 -0
  494. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/_devdocs/dev_00_initial.md +0 -0
  495. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/_devdocs/dev_01_parity_push.md +0 -0
  496. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/_devdocs/intro.md +0 -0
  497. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/_devdocs/requirements.md +0 -0
  498. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/_devdocs/research.md +0 -0
  499. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/controls/__init__.py +0 -0
  500. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/controls/base.py +0 -0
  501. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/controls/cards.py +0 -0
  502. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/controls/history.py +0 -0
  503. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/controls/markdown.py +0 -0
  504. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/controls/spinners.py +0 -0
  505. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/controls/stacks.py +0 -0
  506. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/controls/static.py +0 -0
  507. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/controls/status.py +0 -0
  508. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/controls/suggestions.py +0 -0
  509. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/controls/textarea.py +0 -0
  510. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/docs/__init__.py +0 -0
  511. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/docs/cursors.py +0 -0
  512. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/docs/documents.py +0 -0
  513. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/docs/edits.py +0 -0
  514. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/docs/highlighting.py +0 -0
  515. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/docs/positions.py +0 -0
  516. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/docs/searching.py +0 -0
  517. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/docs/treesitter.py +0 -0
  518. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/events/__init__.py +0 -0
  519. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/events/keymaps.py +0 -0
  520. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/events/keys.py +0 -0
  521. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/events/parsing.py +0 -0
  522. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/events/types.py +0 -0
  523. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/events/xterm.py +0 -0
  524. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/runtime/__init__.py +0 -0
  525. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/runtime/asyncs.py +0 -0
  526. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/runtime/drivers.py +0 -0
  527. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/runtime/timers.py +0 -0
  528. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/screens/__init__.py +0 -0
  529. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/screens/cells.py +0 -0
  530. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/screens/diffs.py +0 -0
  531. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/surfaces/__init__.py +0 -0
  532. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/surfaces/alts.py +0 -0
  533. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/surfaces/base.py +0 -0
  534. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/surfaces/inlines.py +0 -0
  535. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/surfaces/writers.py +0 -0
  536. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/text/__init__.py +0 -0
  537. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/text/colors.py +0 -0
  538. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/text/highlights.py +0 -0
  539. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/text/markdown.py +0 -0
  540. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/text/markdownit.py +0 -0
  541. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/text/pdcmark.py +0 -0
  542. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/text/pygments.py +0 -0
  543. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/text/segments.py +0 -0
  544. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/text/sgr.py +0 -0
  545. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/text/styles.py +0 -0
  546. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/text/themes.py +0 -0
  547. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/text/widths.py +0 -0
  548. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/text/wraps.py +0 -0
  549. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/tty/__init__.py +0 -0
  550. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/tty/terminals.py +0 -0
  551. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/vim/__init__.py +0 -0
  552. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/vim/engine.py +0 -0
  553. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/vim/modes.py +0 -0
  554. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/vim/motions.py +0 -0
  555. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/vim/options.py +0 -0
  556. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/vim/parsing.py +0 -0
  557. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/vim/registers.py +0 -0
  558. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/vim/scans.py +0 -0
  559. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/vim/status.py +0 -0
  560. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/vim/substitutes.py +0 -0
  561. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/minitui/vim/textobjs.py +0 -0
  562. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/__init__.py +0 -0
  563. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/console2.py +0 -0
  564. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/diff/LICENSE +0 -0
  565. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/diff/__init__.py +0 -0
  566. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/diff/__main__.py +0 -0
  567. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/diff/_compat.py +0 -0
  568. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/diff/cli.py +0 -0
  569. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/diff/renderables.py +0 -0
  570. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/diff/rendering.py +0 -0
  571. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/markdown2.py +0 -0
  572. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/textual/__init__.py +0 -0
  573. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/textual/dark.py +0 -0
  574. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/textual/dump.py +0 -0
  575. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/textual/themes.py +0 -0
  576. {omdev-0.0.47 → omdev-0.0.48}/omdev/tui/rich/trirule.py +0 -0
  577. {omdev-0.0.47 → omdev-0.0.48}/omdev.egg-info/SOURCES.txt +0 -0
  578. {omdev-0.0.47 → omdev-0.0.48}/omdev.egg-info/dependency_links.txt +0 -0
  579. {omdev-0.0.47 → omdev-0.0.48}/omdev.egg-info/entry_points.txt +0 -0
  580. {omdev-0.0.47 → omdev-0.0.48}/omdev.egg-info/top_level.txt +0 -0
  581. {omdev-0.0.47 → omdev-0.0.48}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.47
3
+ Version: 0.0.48
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,11 +14,11 @@ Classifier: Programming Language :: Python :: 3.15
14
14
  Requires-Python: >=3.14
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omcore==0.0.47
17
+ Requires-Dist: omcore==0.0.48
18
18
  Provides-Extra: ominfra
19
- Requires-Dist: ominfra==0.0.47; extra == "ominfra"
19
+ Requires-Dist: ominfra==0.0.48; extra == "ominfra"
20
20
  Provides-Extra: omllm
21
- Requires-Dist: omllm==0.0.47; extra == "omllm"
21
+ Requires-Dist: omllm==0.0.48; extra == "omllm"
22
22
  Provides-Extra: black
23
23
  Requires-Dist: black~=26.5; extra == "black"
24
24
  Provides-Extra: c
@@ -44,7 +44,7 @@ Provides-Extra: tui
44
44
  Requires-Dist: rich~=15.0; extra == "tui"
45
45
  Provides-Extra: tui-syntax
46
46
  Requires-Dist: tree-sitter~=0.26; extra == "tui-syntax"
47
- Requires-Dist: tree-sitter-bash~=0.24; extra == "tui-syntax"
47
+ Requires-Dist: tree-sitter-bash~=0.25; extra == "tui-syntax"
48
48
  Requires-Dist: tree-sitter-css~=0.25; extra == "tui-syntax"
49
49
  Requires-Dist: tree-sitter-go~=0.25; extra == "tui-syntax"
50
50
  Requires-Dist: tree-sitter-html~=0.23; extra == "tui-syntax"
@@ -60,14 +60,14 @@ Requires-Dist: tree-sitter-toml~=0.7; extra == "tui-syntax"
60
60
  Requires-Dist: tree-sitter-xml~=0.7; extra == "tui-syntax"
61
61
  Requires-Dist: tree-sitter-yaml~=0.7; extra == "tui-syntax"
62
62
  Provides-Extra: cext
63
- Requires-Dist: omdev-cext==0.0.47; extra == "cext"
63
+ Requires-Dist: omdev-cext==0.0.48; extra == "cext"
64
64
  Provides-Extra: rs
65
- Requires-Dist: omdev-rs==0.0.47; extra == "rs"
65
+ Requires-Dist: omdev-rs==0.0.48; extra == "rs"
66
66
  Provides-Extra: cli
67
- Requires-Dist: omdev-cli==0.0.47; extra == "cli"
67
+ Requires-Dist: omdev-cli==0.0.48; extra == "cli"
68
68
  Provides-Extra: all
69
- Requires-Dist: ominfra==0.0.47; extra == "all"
70
- Requires-Dist: omllm==0.0.47; extra == "all"
69
+ Requires-Dist: ominfra==0.0.48; extra == "all"
70
+ Requires-Dist: omllm==0.0.48; extra == "all"
71
71
  Requires-Dist: black~=26.5; extra == "all"
72
72
  Requires-Dist: pycparser~=3.0; extra == "all"
73
73
  Requires-Dist: pcpp~=1.30; extra == "all"
@@ -83,7 +83,7 @@ Requires-Dist: gprof2dot~=2025.4; extra == "all"
83
83
  Requires-Dist: segno~=1.6; extra == "all"
84
84
  Requires-Dist: rich~=15.0; extra == "all"
85
85
  Requires-Dist: tree-sitter~=0.26; extra == "all"
86
- Requires-Dist: tree-sitter-bash~=0.24; extra == "all"
86
+ Requires-Dist: tree-sitter-bash~=0.25; extra == "all"
87
87
  Requires-Dist: tree-sitter-css~=0.25; extra == "all"
88
88
  Requires-Dist: tree-sitter-go~=0.25; extra == "all"
89
89
  Requires-Dist: tree-sitter-html~=0.23; extra == "all"
@@ -98,9 +98,9 @@ Requires-Dist: tree-sitter-sql~=0.3; extra == "all"
98
98
  Requires-Dist: tree-sitter-toml~=0.7; extra == "all"
99
99
  Requires-Dist: tree-sitter-xml~=0.7; extra == "all"
100
100
  Requires-Dist: tree-sitter-yaml~=0.7; extra == "all"
101
- Requires-Dist: omdev-cext==0.0.47; extra == "all"
102
- Requires-Dist: omdev-rs==0.0.47; extra == "all"
103
- Requires-Dist: omdev-cli==0.0.47; extra == "all"
101
+ Requires-Dist: omdev-cext==0.0.48; extra == "all"
102
+ Requires-Dist: omdev-rs==0.0.48; extra == "all"
103
+ Requires-Dist: omdev-cli==0.0.48; extra == "all"
104
104
  Dynamic: license-file
105
105
 
106
106
  # Overview
@@ -577,7 +577,7 @@
577
577
  "module": ".tools.sqlrepl",
578
578
  "attr": "_CLI_MODULE",
579
579
  "file": "omdev/tools/sqlrepl.py",
580
- "line": 307,
580
+ "line": 306,
581
581
  "value": {
582
582
  "!.cli.types.CliModule": {
583
583
  "name": "sqlrepl",
@@ -68,7 +68,7 @@ class Project(ProjectBase):
68
68
 
69
69
  'tui-syntax': [
70
70
  'tree-sitter ~= 0.26',
71
- 'tree-sitter-bash ~= 0.24',
71
+ 'tree-sitter-bash ~= 0.25',
72
72
  'tree-sitter-css ~= 0.25',
73
73
  'tree-sitter-go ~= 0.25',
74
74
  'tree-sitter-html ~= 0.23',
@@ -29,6 +29,7 @@ Targets:
29
29
  import argparse
30
30
  import os.path
31
31
  import stat
32
+ import tempfile
32
33
  import typing as ta
33
34
 
34
35
  from omcore import check
@@ -59,18 +60,35 @@ def _gen_one(
59
60
  ).gen_amalg()
60
61
 
61
62
  if output_path is not None:
62
- os.makedirs(os.path.dirname(output_path), exist_ok=True)
63
- with open(output_path, 'w') as f:
64
- f.write(src)
65
-
66
- src_mode = os.stat(input_path).st_mode
67
- out_mode = (
68
- src_mode
69
- | (stat.S_IXUSR if src_mode & stat.S_IRUSR else 0)
70
- | (stat.S_IXGRP if src_mode & stat.S_IRGRP else 0)
71
- | (stat.S_IXOTH if src_mode & stat.S_IROTH else 0)
63
+ od = os.path.dirname(output_path)
64
+ os.makedirs(od, exist_ok=True)
65
+
66
+ on = os.path.basename(output_path)
67
+ fd, fp = tempfile.mkstemp(
68
+ prefix=('.' if not on.startswith('.') else '') + on,
69
+ suffix='.tmp',
70
+ dir=od,
72
71
  )
73
- os.chmod(output_path, out_mode)
72
+ try:
73
+ os.write(fd, src.encode('utf-8'))
74
+
75
+ src_mode = os.stat(input_path).st_mode
76
+ out_mode = (
77
+ src_mode |
78
+ (stat.S_IXUSR if src_mode & stat.S_IRUSR else 0) |
79
+ (stat.S_IXGRP if src_mode & stat.S_IRGRP else 0) |
80
+ (stat.S_IXOTH if src_mode & stat.S_IROTH else 0)
81
+ )
82
+ os.chmod(fp, out_mode)
83
+
84
+ os.replace(fp, output_path)
85
+
86
+ except BaseException:
87
+ os.unlink(fp)
88
+ raise
89
+
90
+ finally:
91
+ os.close(fd)
74
92
 
75
93
  else:
76
94
  print(src)
@@ -0,0 +1,8 @@
1
+ curl -LsSf 'https://raw.githubusercontent.com/wrmsr/om/master/omdev/cli/install.py' | bash --login -c 'python3 - $@' - \
2
+ 'omcore[cext,mypyc,plus]' \
3
+ 'omdev[cext]' \
4
+ 'ominfra' \
5
+ 'omllm' \
6
+ \
7
+ 'pip' \
8
+ ;
@@ -1,19 +1,13 @@
1
1
  import os.path
2
2
  import typing as ta
3
3
 
4
- from omcore import lang
4
+ from omcore.formats.yaml import all as yaml
5
5
  from omcore.os.environ import EnvVar
6
6
  from omcore.secrets import all as sec
7
7
 
8
8
  from .paths import get_home_paths
9
9
 
10
10
 
11
- if ta.TYPE_CHECKING:
12
- import yaml
13
- else:
14
- yaml = lang.proxy_import('yaml')
15
-
16
-
17
11
  ##
18
12
 
19
13
 
@@ -31,7 +25,7 @@ def load_secrets() -> sec.Secrets:
31
25
  dct: dict[str, sec.Secret] = {}
32
26
  try:
33
27
  with open(get_secrets_file()) as f:
34
- for k, v in yaml.safe_load(f).items():
28
+ for k, v in yaml.loads(f.read()).items():
35
29
  if isinstance(v, str):
36
30
  dct[k] = sec.Secret(key=k, value=v)
37
31
  except FileNotFoundError:
@@ -1025,7 +1025,7 @@ static int parse_class_string_disjunction(REParseState *s, REStringList *cr,
1025
1025
  for(;;) {
1026
1026
  str.size = 0;
1027
1027
  while (*p != '}' && *p != '|') {
1028
- c = get_class_atom(s, NULL, &p, false);
1028
+ c = get_class_atom(s, NULL, &p, true);
1029
1029
  if (c < 0)
1030
1030
  goto fail;
1031
1031
  if (dbuf_put_u32(&str, c)) {
@@ -1119,6 +1119,23 @@ static int get_class_atom(REParseState *s, REStringList *cr,
1119
1119
  if (!inclass && s->is_unicode)
1120
1120
  goto invalid_escape;
1121
1121
  break;
1122
+ case '&':
1123
+ case '!':
1124
+ case '#':
1125
+ case '%':
1126
+ case ',':
1127
+ case ':':
1128
+ case ';':
1129
+ case '<':
1130
+ case '=':
1131
+ case '>':
1132
+ case '@':
1133
+ case '`':
1134
+ case '~':
1135
+ if (s->is_unicode && (!inclass || !s->unicode_sets))
1136
+ /* Only illegal if in unicode mode and not in a class */
1137
+ goto invalid_escape;
1138
+ break;
1122
1139
  case '^':
1123
1140
  case '$':
1124
1141
  case '\\':
@@ -1920,7 +1920,7 @@ static const JSCFunctionListEntry js_std_funcs[] = {
1920
1920
  JS_CFUNC_DEF("evalScript", 1, js_evalScript ),
1921
1921
  JS_CFUNC_DEF("loadScript", 1, js_loadScript ),
1922
1922
  JS_CFUNC_DEF("getenv", 1, js_std_getenv ),
1923
- JS_CFUNC_DEF("setenv", 1, js_std_setenv ),
1923
+ JS_CFUNC_DEF("setenv", 2, js_std_setenv ),
1924
1924
  JS_CFUNC_DEF("unsetenv", 1, js_std_unsetenv ),
1925
1925
  JS_CFUNC_DEF("getenviron", 1, js_std_getenviron ),
1926
1926
  #if !defined(__wasi__)
@@ -4449,7 +4449,7 @@ static const JSCFunctionListEntry js_os_funcs[] = {
4449
4449
  JS_CFUNC_DEF("sleepAsync", 1, js_os_sleepAsync ),
4450
4450
  JS_PROP_STRING_DEF("platform", OS_PLATFORM, 0 ),
4451
4451
  JS_CFUNC_DEF("getcwd", 0, js_os_getcwd ),
4452
- JS_CFUNC_DEF("chdir", 0, js_os_chdir ),
4452
+ JS_CFUNC_DEF("chdir", 1, js_os_chdir ),
4453
4453
  JS_CFUNC_DEF("mkdir", 1, js_os_mkdir ),
4454
4454
  JS_CFUNC_DEF("readdir", 1, js_os_readdir ),
4455
4455
  #if !defined(_WIN32) && !defined(__wasi__)
@@ -4178,7 +4178,7 @@ bool JS_IsRegisteredClass(JSRuntime *rt, JSClassID class_id)
4178
4178
  JSAtom JS_GetClassName(JSRuntime *rt, JSClassID class_id)
4179
4179
  {
4180
4180
  if (JS_IsRegisteredClass(rt, class_id)) {
4181
- return JS_DupAtomRT(rt, rt->class_array[class_id].class_id);
4181
+ return JS_DupAtomRT(rt, rt->class_array[class_id].class_name);
4182
4182
  } else {
4183
4183
  return JS_ATOM_NULL;
4184
4184
  }
@@ -6324,48 +6324,21 @@ JSValue JS_NewObjectProto(JSContext *ctx, JSValueConst proto)
6324
6324
  JSValue JS_NewObjectFrom(JSContext *ctx, int count, const JSAtom *props,
6325
6325
  const JSValue *values)
6326
6326
  {
6327
- JSShapeProperty *pr;
6328
- uint32_t *hash;
6329
- JSRuntime *rt;
6330
- JSObject *p;
6331
- JSShape *sh;
6332
6327
  JSValue obj;
6333
- JSAtom atom;
6334
- intptr_t h;
6335
6328
  int i;
6336
6329
 
6337
- rt = ctx->rt;
6338
6330
  obj = JS_NewObject(ctx);
6339
6331
  if (JS_IsException(obj))
6340
6332
  return JS_EXCEPTION;
6341
- if (count > 0) {
6342
- p = JS_VALUE_GET_OBJ(obj);
6343
- sh = p->shape;
6344
- assert(sh->is_hashed);
6345
- assert(JS_REF_COUNT(sh) == 1);
6346
- js_shape_hash_unlink(rt, sh);
6347
- if (resize_properties(ctx, &sh, p, count)) {
6348
- js_shape_hash_link(rt, sh);
6349
- JS_FreeValue(ctx, obj);
6350
- return JS_EXCEPTION;
6351
- }
6352
- p->shape = sh;
6353
- for (i = 0; i < count; i++) {
6354
- atom = props[i];
6355
- pr = &get_shape_prop(sh)[i];
6356
- sh->hash = shape_hash(shape_hash(sh->hash, atom), JS_PROP_C_W_E);
6357
- h = atom & sh->prop_hash_mask;
6358
- hash = &prop_hash_end(sh)[-h - 1];
6359
- pr->hash_next = *hash;
6360
- *hash = i + 1;
6361
- pr->atom = JS_DupAtom(ctx, atom);
6362
- pr->flags = JS_PROP_C_W_E;
6363
- p->prop[i].u.value = values[i];
6364
- }
6365
- js_shape_hash_link(rt, sh);
6366
- sh->prop_count = count;
6367
- }
6333
+ for (i = 0; i < count; i++)
6334
+ if (JS_SetProperty(ctx, obj, props[i], values[i]) < 0)
6335
+ goto fail;
6368
6336
  return obj;
6337
+ fail:
6338
+ for (/*empty*/; i < count; i++)
6339
+ JS_FreeValue(ctx, values[i]);
6340
+ JS_FreeValue(ctx, obj);
6341
+ return JS_EXCEPTION;
6369
6342
  }
6370
6343
 
6371
6344
  JSValue JS_NewObjectFromStr(JSContext *ctx, int count, const char **props,
@@ -37051,8 +37024,8 @@ static JSValue js_create_function(JSContext *ctx, JSFunctionDef *fd)
37051
37024
  goto fail;
37052
37025
 
37053
37026
  function_size = sizeof(*b);
37054
- cpool_offset = function_size;
37055
- function_size += fd->cpool_count * sizeof(*fd->cpool);
37027
+ cpool_offset = (function_size + 7) & ~7;
37028
+ function_size = cpool_offset + fd->cpool_count * sizeof(*fd->cpool);
37056
37029
  vardefs_offset = function_size;
37057
37030
  function_size += (fd->arg_count + fd->var_count) * sizeof(*b->vardefs);
37058
37031
  closure_var_offset = function_size;
@@ -39753,8 +39726,8 @@ static JSValue JS_ReadFunctionTag(BCReaderState *s)
39753
39726
  goto fail;
39754
39727
 
39755
39728
  function_size = sizeof(*b);
39756
- cpool_offset = function_size;
39757
- function_size += bc.cpool_count * sizeof(*bc.cpool);
39729
+ cpool_offset = (function_size + 7) & ~7;
39730
+ function_size = cpool_offset + bc.cpool_count * sizeof(*bc.cpool);
39758
39731
  vardefs_offset = function_size;
39759
39732
  function_size += local_count * sizeof(*bc.vardefs);
39760
39733
  closure_var_offset = function_size;
@@ -40958,7 +40931,7 @@ static JSValue JS_NewCConstructor(JSContext *ctx, int class_id, const char *name
40958
40931
  const JSCFunctionListEntry *proto_fields, int n_proto_fields,
40959
40932
  int flags)
40960
40933
  {
40961
- JSValue ctor = JS_UNDEFINED, proto, parent_proto;
40934
+ JSValue ctor = JS_UNDEFINED, proto, parent_proto, *class_proto;
40962
40935
  int proto_class_id, proto_flags, ctor_flags;
40963
40936
 
40964
40937
  proto_flags = 0;
@@ -40989,8 +40962,12 @@ static JSValue JS_NewCConstructor(JSContext *ctx, int class_id, const char *name
40989
40962
  n_proto_fields + 1);
40990
40963
  if (JS_IsException(proto))
40991
40964
  goto fail;
40992
- if (class_id >= 0)
40993
- ctx->class_proto[class_id] = js_dup(proto);
40965
+ if (class_id >= 0) {
40966
+ class_proto = &ctx->class_proto[class_id];
40967
+ if (!JS_IsNull(*class_proto))
40968
+ JS_FreeValue(ctx, *class_proto);
40969
+ *class_proto = js_dup(proto);
40970
+ }
40994
40971
  }
40995
40972
  if (JS_SetPropertyFunctionList(ctx, proto, proto_fields, n_proto_fields))
40996
40973
  goto fail;
@@ -41189,8 +41166,9 @@ static int js_obj_to_desc(JSContext *ctx, JSPropertyDescriptor *d,
41189
41166
  if (present) {
41190
41167
  flags |= JS_PROP_HAS_GET;
41191
41168
  getter = JS_GetProperty(ctx, desc, JS_ATOM_get);
41192
- if (JS_IsException(getter) ||
41193
- !(JS_IsUndefined(getter) || JS_IsFunction(ctx, getter))) {
41169
+ if (JS_IsException(getter))
41170
+ goto fail;
41171
+ if (!(JS_IsUndefined(getter) || JS_IsFunction(ctx, getter))) {
41194
41172
  JS_ThrowTypeError(ctx, "Getter must be a function");
41195
41173
  goto fail;
41196
41174
  }
@@ -41201,8 +41179,9 @@ static int js_obj_to_desc(JSContext *ctx, JSPropertyDescriptor *d,
41201
41179
  if (present) {
41202
41180
  flags |= JS_PROP_HAS_SET;
41203
41181
  setter = JS_GetProperty(ctx, desc, JS_ATOM_set);
41204
- if (JS_IsException(setter) ||
41205
- !(JS_IsUndefined(setter) || JS_IsFunction(ctx, setter))) {
41182
+ if (JS_IsException(setter))
41183
+ goto fail;
41184
+ if (!(JS_IsUndefined(setter) || JS_IsFunction(ctx, setter))) {
41206
41185
  JS_ThrowTypeError(ctx, "Setter must be a function");
41207
41186
  goto fail;
41208
41187
  }
@@ -43575,6 +43554,8 @@ static JSValue js_array_every(JSContext *ctx, JSValueConst this_val,
43575
43554
  n = 0;
43576
43555
 
43577
43556
  for(k = 0; k < len; k++) {
43557
+ if (js_poll_interrupts(ctx))
43558
+ goto exception;
43578
43559
  if (special & special_TA) {
43579
43560
  val = JS_GetPropertyInt64(ctx, obj, k);
43580
43561
  if (JS_IsException(val))
@@ -43696,6 +43677,8 @@ static JSValue js_array_reduce(JSContext *ctx, JSValueConst this_val,
43696
43677
  acc = js_dup(argv[1]);
43697
43678
  } else {
43698
43679
  for(;;) {
43680
+ if (js_poll_interrupts(ctx))
43681
+ goto exception;
43699
43682
  if (k >= len) {
43700
43683
  JS_ThrowTypeError(ctx, "empty array");
43701
43684
  goto exception;
@@ -43717,6 +43700,8 @@ static JSValue js_array_reduce(JSContext *ctx, JSValueConst this_val,
43717
43700
  }
43718
43701
  }
43719
43702
  for (; k < len; k++) {
43703
+ if (js_poll_interrupts(ctx))
43704
+ goto exception;
43720
43705
  k1 = (special & special_reduceRight) ? len - k - 1 : k;
43721
43706
  if (special & special_TA) {
43722
43707
  val = JS_GetPropertyInt64(ctx, obj, k1);
@@ -43818,6 +43803,8 @@ static JSValue js_array_includes(JSContext *ctx, JSValueConst this_val,
43818
43803
  }
43819
43804
  }
43820
43805
  for (; n < len; n++) {
43806
+ if (js_poll_interrupts(ctx))
43807
+ goto exception;
43821
43808
  val = JS_GetPropertyInt64(ctx, obj, n);
43822
43809
  if (JS_IsException(val))
43823
43810
  goto exception;
@@ -43864,6 +43851,8 @@ static JSValue js_array_indexOf(JSContext *ctx, JSValueConst this_val,
43864
43851
  }
43865
43852
  }
43866
43853
  for (; n < len; n++) {
43854
+ if (js_poll_interrupts(ctx))
43855
+ goto exception;
43867
43856
  int present = JS_TryGetPropertyInt64(ctx, obj, n, &val);
43868
43857
  if (present < 0)
43869
43858
  goto exception;
@@ -43893,6 +43882,7 @@ static JSValue js_array_lastIndexOf(JSContext *ctx, JSValueConst this_val,
43893
43882
  int64_t len, n;
43894
43883
  JSValue *arrp;
43895
43884
  uint32_t count;
43885
+ int present;
43896
43886
 
43897
43887
  obj = JS_ToObject(ctx, this_val);
43898
43888
  if (js_get_length64(ctx, &len, obj))
@@ -43913,7 +43903,9 @@ static JSValue js_array_lastIndexOf(JSContext *ctx, JSValueConst this_val,
43913
43903
  }
43914
43904
  }
43915
43905
  for (; n >= 0; n--) {
43916
- int present = JS_TryGetPropertyInt64(ctx, obj, n, &val);
43906
+ if (js_poll_interrupts(ctx))
43907
+ goto exception;
43908
+ present = JS_TryGetPropertyInt64(ctx, obj, n, &val);
43917
43909
  if (present < 0)
43918
43910
  goto exception;
43919
43911
  if (present) {
@@ -43976,6 +43968,8 @@ static JSValue js_array_find(JSContext *ctx, JSValueConst this_val,
43976
43968
 
43977
43969
  // TODO(bnoordhuis) add fast path for fast arrays
43978
43970
  for(; k != end; k += dir) {
43971
+ if (js_poll_interrupts(ctx))
43972
+ goto exception;
43979
43973
  index_val = js_int64(k);
43980
43974
  val = JS_GetPropertyValue(ctx, obj, index_val);
43981
43975
  if (JS_IsException(val))
@@ -44684,11 +44678,6 @@ static int js_array_cmp_generic(const void *a, const void *b, void *opaque) {
44684
44678
  return 0;
44685
44679
 
44686
44680
  if (psc->has_method) {
44687
- /* custom sort function is specified as returning 0 for identical
44688
- * objects: avoid method call overhead.
44689
- */
44690
- if (!memcmp(&ap->val, &bp->val, sizeof(ap->val)))
44691
- goto cmp_same;
44692
44681
  argv[0] = ap->val;
44693
44682
  argv[1] = bp->val;
44694
44683
  res = JS_Call(ctx, psc->method, JS_UNDEFINED, 2, argv);
@@ -44723,7 +44712,6 @@ static int js_array_cmp_generic(const void *a, const void *b, void *opaque) {
44723
44712
  }
44724
44713
  if (cmp != 0)
44725
44714
  return cmp;
44726
- cmp_same:
44727
44715
  /* make sort stable: compare array offsets */
44728
44716
  return (ap->pos > bp->pos) - (ap->pos < bp->pos);
44729
44717
 
@@ -52235,7 +52223,7 @@ static int js_proxy_has(JSContext *ctx, JSValueConst obj, JSAtom atom)
52235
52223
  int res;
52236
52224
  JSObject *p;
52237
52225
  JSValueConst args[2];
52238
- bool ret, res2;
52226
+ bool ret;
52239
52227
 
52240
52228
  s = get_proxy_method(ctx, &method, obj, JS_ATOM_has);
52241
52229
  if (!s)
@@ -52261,8 +52249,15 @@ static int js_proxy_has(JSContext *ctx, JSValueConst obj, JSAtom atom)
52261
52249
  if (res < 0)
52262
52250
  return -1;
52263
52251
  if (res) {
52264
- res2 = !(desc_flags & JS_PROP_CONFIGURABLE);
52265
- if (res2 || !p->extensible) {
52252
+ if (!(desc_flags & JS_PROP_CONFIGURABLE))
52253
+ goto inconsistent;
52254
+ /* must go through IsExtensible(): the target can be a proxy
52255
+ itself, whose isExtensible trap is observable */
52256
+ res = JS_IsExtensible(ctx, s->target);
52257
+ if (res < 0)
52258
+ return -1;
52259
+ if (!res) {
52260
+ inconsistent:
52266
52261
  JS_ThrowTypeError(ctx, "proxy: inconsistent has");
52267
52262
  return -1;
52268
52263
  }
@@ -52458,7 +52453,14 @@ static int js_proxy_get_own_property(JSContext *ctx, JSPropertyDescriptor *pdesc
52458
52453
  js_free_desc(ctx, &target_desc);
52459
52454
  if (JS_IsUndefined(trap_result_obj)) {
52460
52455
  if (target_desc_ret) {
52461
- if (!(target_desc.flags & JS_PROP_CONFIGURABLE) || !p->extensible)
52456
+ if (!(target_desc.flags & JS_PROP_CONFIGURABLE))
52457
+ goto fail;
52458
+ /* must go through IsExtensible(): the target can be a proxy
52459
+ itself, whose isExtensible trap is observable */
52460
+ res = JS_IsExtensible(ctx, s->target);
52461
+ if (res < 0)
52462
+ return -1;
52463
+ if (!res)
52462
52464
  goto fail;
52463
52465
  }
52464
52466
  ret = false;
@@ -52521,7 +52523,7 @@ static int js_proxy_define_own_property(JSContext *ctx, JSValueConst obj,
52521
52523
  {
52522
52524
  JSProxyData *s;
52523
52525
  JSValue method, ret1, prop_val, desc_val;
52524
- int res;
52526
+ int res, extensible_target;
52525
52527
  JSObject *p;
52526
52528
  JSValueConst args[3];
52527
52529
  JSPropertyDescriptor desc;
@@ -52565,11 +52567,19 @@ static int js_proxy_define_own_property(JSContext *ctx, JSValueConst obj,
52565
52567
  res = JS_GetOwnPropertyInternal(ctx, &desc, p, prop);
52566
52568
  if (res < 0)
52567
52569
  return -1;
52570
+ /* must go through IsExtensible(): the target can be a proxy itself, in
52571
+ which case its isExtensible trap is observable and may throw */
52572
+ extensible_target = JS_IsExtensible(ctx, s->target);
52573
+ if (extensible_target < 0) {
52574
+ if (res)
52575
+ js_free_desc(ctx, &desc);
52576
+ return -1;
52577
+ }
52568
52578
  setting_not_configurable = ((flags & (JS_PROP_HAS_CONFIGURABLE |
52569
52579
  JS_PROP_CONFIGURABLE)) ==
52570
52580
  JS_PROP_HAS_CONFIGURABLE);
52571
52581
  if (!res) {
52572
- if (!p->extensible || setting_not_configurable)
52582
+ if (!extensible_target || setting_not_configurable)
52573
52583
  goto fail;
52574
52584
  } else {
52575
52585
  if (!check_define_prop_flags(desc.flags, flags) ||
@@ -52698,6 +52708,12 @@ static int js_proxy_get_own_property_names(JSContext *ctx,
52698
52708
  prop_array = JS_CallFree(ctx, method, s->handler, 1, vc(&s->target));
52699
52709
  if (JS_IsException(prop_array))
52700
52710
  return -1;
52711
+ /* CreateListFromArrayLike() requires an object */
52712
+ if (JS_VALUE_GET_TAG(prop_array) != JS_TAG_OBJECT) {
52713
+ JS_FreeValue(ctx, prop_array);
52714
+ JS_ThrowTypeError(ctx, "proxy: ownKeys must return an object");
52715
+ return -1;
52716
+ }
52701
52717
  tab = NULL;
52702
52718
  len = 0;
52703
52719
  tab_size = 0;
@@ -55192,7 +55208,7 @@ static JSValue js_async_dispose_step(JSContext *ctx, JSValueConst this_val,
55192
55208
  return JS_EXCEPTION;
55193
55209
  resolve_fn = JS_NewCFunctionData(ctx, js_async_dispose_rethrow, 0, 0,
55194
55210
  1, &prev_err);
55195
- reject_fn = JS_NewCFunctionData(ctx, js_async_dispose_rethrow, 0, 1,
55211
+ reject_fn = JS_NewCFunctionData(ctx, js_async_dispose_rethrow, 1, 1,
55196
55212
  1, &prev_err);
55197
55213
  then_args[0] = resolve_fn;
55198
55214
  then_args[1] = reject_fn;
@@ -55303,7 +55319,7 @@ static JSValue js_disposable_stack_dispose(JSContext *ctx,
55303
55319
  data[2] = hint_val;
55304
55320
  resolve_fn = JS_NewCFunctionData(ctx, js_async_dispose_step, 0, 0,
55305
55321
  3, data);
55306
- reject_fn = JS_NewCFunctionData(ctx, js_async_dispose_step, 0, 1,
55322
+ reject_fn = JS_NewCFunctionData(ctx, js_async_dispose_step, 1, 1,
55307
55323
  3, data);
55308
55324
  JS_FreeValue(ctx, hint_val);
55309
55325
  JS_FreeValue(ctx, res->value);
@@ -60113,10 +60129,13 @@ static JSValue js_typed_array_with(JSContext *ctx, JSValueConst this_val,
60113
60129
  if (idx < 0)
60114
60130
  idx = len + idx;
60115
60131
 
60116
- val = JS_ToPrimitive(ctx, argv[1], HINT_NUMBER);
60132
+ if (p->class_id == JS_CLASS_BIG_INT64_ARRAY || p->class_id == JS_CLASS_BIG_UINT64_ARRAY) {
60133
+ val = JS_ToBigInt(ctx, argv[1]);
60134
+ } else {
60135
+ val = JS_ToNumber(ctx, argv[1]);
60136
+ }
60117
60137
  if (JS_IsException(val))
60118
60138
  return JS_EXCEPTION;
60119
-
60120
60139
  /* re-validate after user code (spec step 9: IsValidIntegerIndex) */
60121
60140
  if (typed_array_is_oob(p)) {
60122
60141
  JS_FreeValue(ctx, val);
@@ -63772,7 +63791,7 @@ int JS_AddIntrinsicDOMException(JSContext *ctx)
63772
63791
  }
63773
63792
  JS_DefinePropertyValue(ctx, ctx->global_obj, JS_ATOM_DOMException, ctor,
63774
63793
  JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);
63775
- ctx->class_proto[JS_CLASS_DOM_EXCEPTION] = proto;
63794
+ set_value(ctx, &ctx->class_proto[JS_CLASS_DOM_EXCEPTION], proto);
63776
63795
  return 0;
63777
63796
  }
63778
63797
  /* base64 */
@@ -64836,6 +64855,10 @@ uintptr_t js_std_cmd(int cmd, ...) {
64836
64855
  if (JS_IsString(*pv))
64837
64856
  rv = JS_VALUE_GET_STRING(*pv)->kind;
64838
64857
  break;
64858
+ case 4: // GetShapeHashCount
64859
+ rt = va_arg(ap, JSRuntime *);
64860
+ rv = rt->shape_hash_count;
64861
+ break;
64839
64862
  default:
64840
64863
  rv = -1;
64841
64864
  }
@@ -1449,7 +1449,7 @@ JS_EXTERN int JS_SetModuleExportList(JSContext *ctx, JSModuleDef *m,
1449
1449
 
1450
1450
  #define QJS_VERSION_MAJOR 0
1451
1451
  #define QJS_VERSION_MINOR 16
1452
- #define QJS_VERSION_PATCH 1
1452
+ #define QJS_VERSION_PATCH 2
1453
1453
  #define QJS_VERSION_SUFFIX ""
1454
1454
 
1455
1455
  JS_EXTERN const char* JS_GetVersion(void);
@@ -135,7 +135,7 @@ def __om_amalg__(): # noqa
135
135
  dict(path='../../omcore/http/headers.py', sha1='ffafd3e3130e86716c856c6ce62ce3e6d509504f'),
136
136
  dict(path='../../omcore/http/parsing.py', sha1='24bdc721ed0005175f5ed371f4222b116a552d63'),
137
137
  dict(path='../../omcore/http/pipelines/compression/codings.py', sha1='0a249bfaede012e18fea8cd3b0f239c985a6cfec'), # noqa
138
- dict(path='../../omcore/io/pipelines/core.py', sha1='8b13702756070e8b5faae0ff14e62c5d745de857'),
138
+ dict(path='../../omcore/io/pipelines/core.py', sha1='bfdf8a42779970de1de82e7531080941d4f078d1'),
139
139
  dict(path='../../omcore/io/pipelines/yielding.py', sha1='b076ec9bfd9618c4a9fc9b55a8282066e8ade799'),
140
140
  dict(path='../../omcore/io/streambufs/types.py', sha1='b4bb4d4128321c01c58f01bf20397731509e5927'),
141
141
  dict(path='../../omcore/lite/json.py', sha1='01124e62093ebd4078602f16df0ec04cb724a612'),
@@ -7976,12 +7976,14 @@ class IoPipeline:
7976
7976
  *,
7977
7977
  never_handle_exceptions: ta.Tuple[type, ...] = (),
7978
7978
  message_tap: ta.Optional[IoPipelineMessageTap] = None,
7979
+ on_state_change: ta.Optional[ta.Callable[['IoPipeline'], None]] = None,
7979
7980
  ) -> None:
7980
7981
  super().__init__()
7981
7982
 
7982
7983
  self._config: ta.Final[IoPipeline.Config] = spec.config
7983
7984
  self._never_handle_exceptions = never_handle_exceptions
7984
7985
  self._message_tap = message_tap
7986
+ self._on_state_change = on_state_change
7985
7987
 
7986
7988
  self._metadata: ta.Final[IoPipelineMetadatas] = IoPipelineMetadatas.of(spec.metadata)
7987
7989
  self._services: ta.Final[IoPipelineServices] = IoPipelineServices.of(spec.services)
@@ -8024,7 +8026,7 @@ class IoPipeline:
8024
8026
 
8025
8027
  #
8026
8028
 
8027
- self._state = IoPipeline.State.READY
8029
+ self._set_state(IoPipeline.State.READY)
8028
8030
 
8029
8031
  #
8030
8032
 
@@ -8060,6 +8062,13 @@ class IoPipeline:
8060
8062
 
8061
8063
  _state: State = State.NEW
8062
8064
 
8065
+ def _set_state(self, state: State) -> None:
8066
+ if self._state == state:
8067
+ return
8068
+ self._state = state
8069
+ if (cb := self._on_state_change) is not None:
8070
+ cb(self)
8071
+
8063
8072
  @property
8064
8073
  def state(self) -> State:
8065
8074
  return self._state
@@ -8700,7 +8709,7 @@ class IoPipeline:
8700
8709
  return
8701
8710
 
8702
8711
  check.state(self._state == IoPipeline.State.READY)
8703
- self._state = IoPipeline.State.DESTROYING
8712
+ self._set_state(IoPipeline.State.DESTROYING)
8704
8713
 
8705
8714
  try:
8706
8715
  self._step_in()
@@ -8720,7 +8729,7 @@ class IoPipeline:
8720
8729
  try:
8721
8730
  self._fail_pending_completables(AbortedIoPipelineError('Pipeline destroyed before completion'))
8722
8731
  finally:
8723
- self._state = IoPipeline.State.DESTROYED
8732
+ self._set_state(IoPipeline.State.DESTROYED)
8724
8733
 
8725
8734
  def _fail_pending_completables(self, exc: BaseException) -> None:
8726
8735
  first_listener_exc: ta.Optional[BaseException] = None