@ibgib/web-gib 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/.ibgibignore +30 -0
  2. package/.vscode/ibgib-snippets.code-snippets +309 -0
  3. package/.vscode/launch.json +25 -0
  4. package/.vscode/settings.json +68 -0
  5. package/.vscode/tasks.json +38 -0
  6. package/CHANGELOG.md +427 -0
  7. package/README.md +66 -0
  8. package/dist/agent-texts/common-agent-texts.d.mts +14 -0
  9. package/dist/agent-texts/common-agent-texts.d.mts.map +1 -0
  10. package/dist/agent-texts/common-agent-texts.mjs +51 -0
  11. package/dist/agent-texts/common-agent-texts.mjs.map +1 -0
  12. package/dist/agent-texts/primary-agent-texts.d.mts +16 -0
  13. package/dist/agent-texts/primary-agent-texts.d.mts.map +1 -0
  14. package/dist/agent-texts/primary-agent-texts.mjs +27 -0
  15. package/dist/agent-texts/primary-agent-texts.mjs.map +1 -0
  16. package/dist/agent-texts/project-agent-texts.d.mts +8 -0
  17. package/dist/agent-texts/project-agent-texts.d.mts.map +1 -0
  18. package/dist/agent-texts/project-agent-texts.mjs +29 -0
  19. package/dist/agent-texts/project-agent-texts.mjs.map +1 -0
  20. package/dist/agent-texts/project-child-text-agent-texts.d.mts +5 -0
  21. package/dist/agent-texts/project-child-text-agent-texts.d.mts.map +1 -0
  22. package/dist/agent-texts/project-child-text-agent-texts.mjs +26 -0
  23. package/dist/agent-texts/project-child-text-agent-texts.mjs.map +1 -0
  24. package/dist/agent-texts/projects-agent-texts.d.mts +4 -0
  25. package/dist/agent-texts/projects-agent-texts.d.mts.map +1 -0
  26. package/dist/agent-texts/projects-agent-texts.mjs +15 -0
  27. package/dist/agent-texts/projects-agent-texts.mjs.map +1 -0
  28. package/dist/agent-texts/raw-agent-texts.d.mts +4 -0
  29. package/dist/agent-texts/raw-agent-texts.d.mts.map +1 -0
  30. package/dist/agent-texts/raw-agent-texts.mjs +17 -0
  31. package/dist/agent-texts/raw-agent-texts.mjs.map +1 -0
  32. package/dist/agent-texts/text-editor-agent-texts.d.mts +6 -0
  33. package/dist/agent-texts/text-editor-agent-texts.d.mts.map +1 -0
  34. package/dist/agent-texts/text-editor-agent-texts.mjs +19 -0
  35. package/dist/agent-texts/text-editor-agent-texts.mjs.map +1 -0
  36. package/dist/api/api-constants.d.mts +9 -0
  37. package/dist/api/api-constants.d.mts.map +1 -0
  38. package/dist/api/api-constants.mjs +9 -0
  39. package/dist/api/api-constants.mjs.map +1 -0
  40. package/dist/api/api-index.d.mts +10 -0
  41. package/dist/api/api-index.d.mts.map +1 -0
  42. package/dist/api/api-index.mjs +121 -0
  43. package/dist/api/api-index.mjs.map +1 -0
  44. package/dist/api/api-types.d.mts +36 -0
  45. package/dist/api/api-types.d.mts.map +1 -0
  46. package/dist/api/api-types.mjs +2 -0
  47. package/dist/api/api-types.mjs.map +1 -0
  48. package/dist/api/commands/chat/chat-index.d.mts +3 -0
  49. package/dist/api/commands/chat/chat-index.d.mts.map +1 -0
  50. package/dist/api/commands/chat/chat-index.mjs +9 -0
  51. package/dist/api/commands/chat/chat-index.mjs.map +1 -0
  52. package/dist/api/commands/chat/get-context-info.d.mts +71 -0
  53. package/dist/api/commands/chat/get-context-info.d.mts.map +1 -0
  54. package/dist/api/commands/chat/get-context-info.mjs +130 -0
  55. package/dist/api/commands/chat/get-context-info.mjs.map +1 -0
  56. package/dist/api/commands/chat/hello-world.d.mts +63 -0
  57. package/dist/api/commands/chat/hello-world.d.mts.map +1 -0
  58. package/dist/api/commands/chat/hello-world.mjs +132 -0
  59. package/dist/api/commands/chat/hello-world.mjs.map +1 -0
  60. package/dist/api/commands/chat/tell-user.d.mts +57 -0
  61. package/dist/api/commands/chat/tell-user.d.mts.map +1 -0
  62. package/dist/api/commands/chat/tell-user.mjs +199 -0
  63. package/dist/api/commands/chat/tell-user.mjs.map +1 -0
  64. package/dist/api/commands/command-constants.d.mts +22 -0
  65. package/dist/api/commands/command-constants.d.mts.map +1 -0
  66. package/dist/api/commands/command-constants.mjs +17 -0
  67. package/dist/api/commands/command-constants.mjs.map +1 -0
  68. package/dist/api/commands/command-helpers.d.mts +47 -0
  69. package/dist/api/commands/command-helpers.d.mts.map +1 -0
  70. package/dist/api/commands/command-helpers.mjs +76 -0
  71. package/dist/api/commands/command-helpers.mjs.map +1 -0
  72. package/dist/api/commands/command-service-v1.d.mts +28 -0
  73. package/dist/api/commands/command-service-v1.d.mts.map +1 -0
  74. package/dist/api/commands/command-service-v1.mjs +122 -0
  75. package/dist/api/commands/command-service-v1.mjs.map +1 -0
  76. package/dist/api/commands/command-service.respec.d.mts +7 -0
  77. package/dist/api/commands/command-service.respec.d.mts.map +1 -0
  78. package/dist/api/commands/command-service.respec.mjs +66 -0
  79. package/dist/api/commands/command-service.respec.mjs.map +1 -0
  80. package/dist/api/commands/command-types.d.mts +48 -0
  81. package/dist/api/commands/command-types.d.mts.map +1 -0
  82. package/dist/api/commands/command-types.mjs +12 -0
  83. package/dist/api/commands/command-types.mjs.map +1 -0
  84. package/dist/api/commands/ibgib/get-ibgibs.d.mts +94 -0
  85. package/dist/api/commands/ibgib/get-ibgibs.d.mts.map +1 -0
  86. package/dist/api/commands/ibgib/get-ibgibs.mjs +219 -0
  87. package/dist/api/commands/ibgib/get-ibgibs.mjs.map +1 -0
  88. package/dist/api/commands/ibgib/ibgib-index.d.mts +3 -0
  89. package/dist/api/commands/ibgib/ibgib-index.d.mts.map +1 -0
  90. package/dist/api/commands/ibgib/ibgib-index.mjs +7 -0
  91. package/dist/api/commands/ibgib/ibgib-index.mjs.map +1 -0
  92. package/dist/api/commands/ibgib/mut8-ibgib.d.mts +135 -0
  93. package/dist/api/commands/ibgib/mut8-ibgib.d.mts.map +1 -0
  94. package/dist/api/commands/ibgib/mut8-ibgib.mjs +318 -0
  95. package/dist/api/commands/ibgib/mut8-ibgib.mjs.map +1 -0
  96. package/dist/api/commands/templates/api-function-info.template.d.mts +73 -0
  97. package/dist/api/commands/templates/api-function-info.template.d.mts.map +1 -0
  98. package/dist/api/commands/templates/api-function-info.template.mjs +161 -0
  99. package/dist/api/commands/templates/api-function-info.template.mjs.map +1 -0
  100. package/dist/api/commands/text/text-edit.d.mts +54 -0
  101. package/dist/api/commands/text/text-edit.d.mts.map +1 -0
  102. package/dist/api/commands/text/text-edit.mjs +170 -0
  103. package/dist/api/commands/text/text-edit.mjs.map +1 -0
  104. package/dist/api/commands/text/text-index.d.mts +3 -0
  105. package/dist/api/commands/text/text-index.d.mts.map +1 -0
  106. package/dist/api/commands/text/text-index.mjs +5 -0
  107. package/dist/api/commands/text/text-index.mjs.map +1 -0
  108. package/dist/api/commands/ui/ui-index.d.mts +3 -0
  109. package/dist/api/commands/ui/ui-index.d.mts.map +1 -0
  110. package/dist/api/commands/ui/ui-index.mjs +5 -0
  111. package/dist/api/commands/ui/ui-index.mjs.map +1 -0
  112. package/dist/api/commands/ui/update-css-variables.d.mts +48 -0
  113. package/dist/api/commands/ui/update-css-variables.d.mts.map +1 -0
  114. package/dist/api/commands/ui/update-css-variables.mjs +145 -0
  115. package/dist/api/commands/ui/update-css-variables.mjs.map +1 -0
  116. package/dist/api/function-infos.web.d.mts +15 -0
  117. package/dist/api/function-infos.web.d.mts.map +1 -0
  118. package/dist/api/function-infos.web.mjs +63 -0
  119. package/dist/api/function-infos.web.mjs.map +1 -0
  120. package/dist/assumptions.respec.d.mts +2 -0
  121. package/dist/assumptions.respec.d.mts.map +1 -0
  122. package/dist/assumptions.respec.mjs +41 -0
  123. package/dist/assumptions.respec.mjs.map +1 -0
  124. package/dist/common/project/project-constants.d.mts +38 -0
  125. package/dist/common/project/project-constants.d.mts.map +1 -0
  126. package/dist/common/project/project-constants.mjs +71 -0
  127. package/dist/common/project/project-constants.mjs.map +1 -0
  128. package/dist/common/project/project-helper.d.mts +127 -0
  129. package/dist/common/project/project-helper.d.mts.map +1 -0
  130. package/dist/common/project/project-helper.mjs +683 -0
  131. package/dist/common/project/project-helper.mjs.map +1 -0
  132. package/dist/common/project/project-types.d.mts +91 -0
  133. package/dist/common/project/project-types.d.mts.map +1 -0
  134. package/dist/common/project/project-types.mjs +31 -0
  135. package/dist/common/project/project-types.mjs.map +1 -0
  136. package/dist/common/prompt-functions.web.d.mts +90 -0
  137. package/dist/common/prompt-functions.web.d.mts.map +1 -0
  138. package/dist/common/prompt-functions.web.mjs +426 -0
  139. package/dist/common/prompt-functions.web.mjs.map +1 -0
  140. package/dist/common/settings/settings-constants.d.mts +33 -0
  141. package/dist/common/settings/settings-constants.d.mts.map +1 -0
  142. package/dist/common/settings/settings-constants.mjs +54 -0
  143. package/dist/common/settings/settings-constants.mjs.map +1 -0
  144. package/dist/common/settings/settings-helpers.d.mts +59 -0
  145. package/dist/common/settings/settings-helpers.d.mts.map +1 -0
  146. package/dist/common/settings/settings-helpers.mjs +253 -0
  147. package/dist/common/settings/settings-helpers.mjs.map +1 -0
  148. package/dist/common/settings/settings-types.d.mts +118 -0
  149. package/dist/common/settings/settings-types.d.mts.map +1 -0
  150. package/dist/common/settings/settings-types.mjs +13 -0
  151. package/dist/common/settings/settings-types.mjs.map +1 -0
  152. package/dist/constants.d.mts +34 -0
  153. package/dist/constants.d.mts.map +1 -0
  154. package/dist/constants.mjs +35 -0
  155. package/dist/constants.mjs.map +1 -0
  156. package/dist/foo.d.mts +2 -0
  157. package/dist/foo.d.mts.map +1 -0
  158. package/dist/foo.mjs +19 -0
  159. package/dist/foo.mjs.map +1 -0
  160. package/dist/helpers.d.mts +137 -0
  161. package/dist/helpers.d.mts.map +1 -0
  162. package/dist/helpers.mjs +514 -0
  163. package/dist/helpers.mjs.map +1 -0
  164. package/dist/helpers.web.d.mts +324 -0
  165. package/dist/helpers.web.d.mts.map +1 -0
  166. package/dist/helpers.web.mjs +1133 -0
  167. package/dist/helpers.web.mjs.map +1 -0
  168. package/dist/helpers.web.respec.d.mts +2 -0
  169. package/dist/helpers.web.respec.d.mts.map +1 -0
  170. package/dist/helpers.web.respec.mjs +12 -0
  171. package/dist/helpers.web.respec.mjs.map +1 -0
  172. package/dist/index.d.mts +2 -0
  173. package/dist/index.d.mts.map +1 -0
  174. package/dist/index.mjs +3 -0
  175. package/dist/index.mjs.map +1 -0
  176. package/dist/respec-gib.node.d.mts +2 -0
  177. package/dist/respec-gib.node.d.mts.map +1 -0
  178. package/dist/respec-gib.node.mjs +211 -0
  179. package/dist/respec-gib.node.mjs.map +1 -0
  180. package/dist/spec-helper.node.respec.d.mts +13 -0
  181. package/dist/spec-helper.node.respec.d.mts.map +1 -0
  182. package/dist/spec-helper.node.respec.mjs +50 -0
  183. package/dist/spec-helper.node.respec.mjs.map +1 -0
  184. package/dist/storage/storage-helpers.web.d.mts +108 -0
  185. package/dist/storage/storage-helpers.web.d.mts.map +1 -0
  186. package/dist/storage/storage-helpers.web.mjs +757 -0
  187. package/dist/storage/storage-helpers.web.mjs.map +1 -0
  188. package/dist/storage/storage-types.web.d.mts +30 -0
  189. package/dist/storage/storage-types.web.d.mts.map +1 -0
  190. package/dist/storage/storage-types.web.mjs +2 -0
  191. package/dist/storage/storage-types.web.mjs.map +1 -0
  192. package/dist/types.web.d.mts +42 -0
  193. package/dist/types.web.d.mts.map +1 -0
  194. package/dist/types.web.mjs +2 -0
  195. package/dist/types.web.mjs.map +1 -0
  196. package/dist/ui/component/component-types.d.mts +225 -0
  197. package/dist/ui/component/component-types.d.mts.map +1 -0
  198. package/dist/ui/component/component-types.mjs +2 -0
  199. package/dist/ui/component/component-types.mjs.map +1 -0
  200. package/dist/ui/component/ibgib-component-service.d.mts +70 -0
  201. package/dist/ui/component/ibgib-component-service.d.mts.map +1 -0
  202. package/dist/ui/component/ibgib-component-service.mjs +201 -0
  203. package/dist/ui/component/ibgib-component-service.mjs.map +1 -0
  204. package/dist/ui/component/ibgib-dynamic-component-bases.d.mts +338 -0
  205. package/dist/ui/component/ibgib-dynamic-component-bases.d.mts.map +1 -0
  206. package/dist/ui/component/ibgib-dynamic-component-bases.mjs +1304 -0
  207. package/dist/ui/component/ibgib-dynamic-component-bases.mjs.map +1 -0
  208. package/dist/ui/ui-constants.d.mts +12 -0
  209. package/dist/ui/ui-constants.d.mts.map +1 -0
  210. package/dist/ui/ui-constants.mjs +93 -0
  211. package/dist/ui/ui-constants.mjs.map +1 -0
  212. package/dist/ui/ui-helpers.d.mts +42 -0
  213. package/dist/ui/ui-helpers.d.mts.map +1 -0
  214. package/dist/ui/ui-helpers.mjs +198 -0
  215. package/dist/ui/ui-helpers.mjs.map +1 -0
  216. package/dist/ui/ui-types.d.mts +13 -0
  217. package/dist/ui/ui-types.d.mts.map +1 -0
  218. package/dist/ui/ui-types.mjs +2 -0
  219. package/dist/ui/ui-types.mjs.map +1 -0
  220. package/dist/witness/agent/agent-constants.d.mts +97 -0
  221. package/dist/witness/agent/agent-constants.d.mts.map +1 -0
  222. package/dist/witness/agent/agent-constants.mjs +98 -0
  223. package/dist/witness/agent/agent-constants.mjs.map +1 -0
  224. package/dist/witness/agent/agent-helpers.d.mts +106 -0
  225. package/dist/witness/agent/agent-helpers.d.mts.map +1 -0
  226. package/dist/witness/agent/agent-helpers.mjs +601 -0
  227. package/dist/witness/agent/agent-helpers.mjs.map +1 -0
  228. package/dist/witness/agent/agent-one-file.app.d.mts +2 -0
  229. package/dist/witness/agent/agent-one-file.app.d.mts.map +1 -0
  230. package/dist/witness/agent/agent-one-file.app.mjs +8 -0
  231. package/dist/witness/agent/agent-one-file.app.mjs.map +1 -0
  232. package/dist/witness/agent/agent-one-file.d.mts +478 -0
  233. package/dist/witness/agent/agent-one-file.d.mts.map +1 -0
  234. package/dist/witness/agent/agent-one-file.mjs +1462 -0
  235. package/dist/witness/agent/agent-one-file.mjs.map +1 -0
  236. package/dist/witness/agent/agent-types.d.mts +83 -0
  237. package/dist/witness/agent/agent-types.d.mts.map +1 -0
  238. package/dist/witness/agent/agent-types.mjs +2 -0
  239. package/dist/witness/agent/agent-types.mjs.map +1 -0
  240. package/dist/witness/agent/agents-service-v1.d.mts +99 -0
  241. package/dist/witness/agent/agents-service-v1.d.mts.map +1 -0
  242. package/dist/witness/agent/agents-service-v1.mjs +453 -0
  243. package/dist/witness/agent/agents-service-v1.mjs.map +1 -0
  244. package/dist/witness/agent/function-info/function-info-one-file.d.mts +192 -0
  245. package/dist/witness/agent/function-info/function-info-one-file.d.mts.map +1 -0
  246. package/dist/witness/agent/function-info/function-info-one-file.mjs +192 -0
  247. package/dist/witness/agent/function-info/function-info-one-file.mjs.map +1 -0
  248. package/dist/witness/agent/gemini/agent-witness-gemini-v1.d.mts +51 -0
  249. package/dist/witness/agent/gemini/agent-witness-gemini-v1.d.mts.map +1 -0
  250. package/dist/witness/agent/gemini/agent-witness-gemini-v1.mjs +928 -0
  251. package/dist/witness/agent/gemini/agent-witness-gemini-v1.mjs.map +1 -0
  252. package/dist/witness/agent/gemini/gemini-agent-factory.d.mts +27 -0
  253. package/dist/witness/agent/gemini/gemini-agent-factory.d.mts.map +1 -0
  254. package/dist/witness/agent/gemini/gemini-agent-factory.mjs +144 -0
  255. package/dist/witness/agent/gemini/gemini-agent-factory.mjs.map +1 -0
  256. package/dist/witness/agent/gemini/gemini-constants.d.mts +36 -0
  257. package/dist/witness/agent/gemini/gemini-constants.d.mts.map +1 -0
  258. package/dist/witness/agent/gemini/gemini-constants.mjs +47 -0
  259. package/dist/witness/agent/gemini/gemini-constants.mjs.map +1 -0
  260. package/dist/witness/agent/gemini/gemini-helpers.d.mts +58 -0
  261. package/dist/witness/agent/gemini/gemini-helpers.d.mts.map +1 -0
  262. package/dist/witness/agent/gemini/gemini-helpers.mjs +210 -0
  263. package/dist/witness/agent/gemini/gemini-helpers.mjs.map +1 -0
  264. package/dist/witness/agent/gemini/gemini-types.d.mts +82 -0
  265. package/dist/witness/agent/gemini/gemini-types.d.mts.map +1 -0
  266. package/dist/witness/agent/gemini/gemini-types.mjs +3 -0
  267. package/dist/witness/agent/gemini/gemini-types.mjs.map +1 -0
  268. package/dist/witness/live-proxy-ibgib/live-proxy-ibgib-one-file.d.mts +136 -0
  269. package/dist/witness/live-proxy-ibgib/live-proxy-ibgib-one-file.d.mts.map +1 -0
  270. package/dist/witness/live-proxy-ibgib/live-proxy-ibgib-one-file.mjs +334 -0
  271. package/dist/witness/live-proxy-ibgib/live-proxy-ibgib-one-file.mjs.map +1 -0
  272. package/dist/witness/space/metaspace/metaspace-webspace/metaspace-webspace-helper.d.mts +35 -0
  273. package/dist/witness/space/metaspace/metaspace-webspace/metaspace-webspace-helper.d.mts.map +1 -0
  274. package/dist/witness/space/metaspace/metaspace-webspace/metaspace-webspace-helper.mjs +267 -0
  275. package/dist/witness/space/metaspace/metaspace-webspace/metaspace-webspace-helper.mjs.map +1 -0
  276. package/dist/witness/space/metaspace/metaspace-webspace/metaspace-webspace.d.mts +134 -0
  277. package/dist/witness/space/metaspace/metaspace-webspace/metaspace-webspace.d.mts.map +1 -0
  278. package/dist/witness/space/metaspace/metaspace-webspace/metaspace-webspace.mjs +389 -0
  279. package/dist/witness/space/metaspace/metaspace-webspace/metaspace-webspace.mjs.map +1 -0
  280. package/dist/witness/space/web-filesystem-space/web-filesystem-space-constants.d.mts +2 -0
  281. package/dist/witness/space/web-filesystem-space/web-filesystem-space-constants.d.mts.map +1 -0
  282. package/dist/witness/space/web-filesystem-space/web-filesystem-space-constants.mjs +2 -0
  283. package/dist/witness/space/web-filesystem-space/web-filesystem-space-constants.mjs.map +1 -0
  284. package/dist/witness/space/web-filesystem-space/web-filesystem-space-helper.d.mts +104 -0
  285. package/dist/witness/space/web-filesystem-space/web-filesystem-space-helper.d.mts.map +1 -0
  286. package/dist/witness/space/web-filesystem-space/web-filesystem-space-helper.mjs +457 -0
  287. package/dist/witness/space/web-filesystem-space/web-filesystem-space-helper.mjs.map +1 -0
  288. package/dist/witness/space/web-filesystem-space/web-filesystem-space-types.d.mts +93 -0
  289. package/dist/witness/space/web-filesystem-space/web-filesystem-space-types.d.mts.map +1 -0
  290. package/dist/witness/space/web-filesystem-space/web-filesystem-space-types.mjs +98 -0
  291. package/dist/witness/space/web-filesystem-space/web-filesystem-space-types.mjs.map +1 -0
  292. package/dist/witness/space/web-filesystem-space/web-filesystem-space-v1.d.mts +73 -0
  293. package/dist/witness/space/web-filesystem-space/web-filesystem-space-v1.d.mts.map +1 -0
  294. package/dist/witness/space/web-filesystem-space/web-filesystem-space-v1.mjs +650 -0
  295. package/dist/witness/space/web-filesystem-space/web-filesystem-space-v1.mjs.map +1 -0
  296. package/generate-version-file.js +29 -0
  297. package/package.json +60 -0
  298. package/src/agent-texts/common-agent-texts.mts +61 -0
  299. package/src/agent-texts/primary-agent-texts.mts +32 -0
  300. package/src/agent-texts/project-agent-texts.mts +29 -0
  301. package/src/agent-texts/project-child-text-agent-texts.mts +30 -0
  302. package/src/agent-texts/projects-agent-texts.mts +17 -0
  303. package/src/agent-texts/raw-agent-texts.mts +18 -0
  304. package/src/agent-texts/text-editor-agent-texts.mts +20 -0
  305. package/src/api/api-constants.mts +8 -0
  306. package/src/api/api-index.mts +110 -0
  307. package/src/api/api-types.mts +36 -0
  308. package/src/api/commands/chat/chat-index.mts +10 -0
  309. package/src/api/commands/chat/get-context-info.mts +196 -0
  310. package/src/api/commands/chat/hello-world.mts +183 -0
  311. package/src/api/commands/chat/tell-user.mts +241 -0
  312. package/src/api/commands/command-constants.mts +17 -0
  313. package/src/api/commands/command-helpers.mts +105 -0
  314. package/src/api/commands/command-service-v1.mts +136 -0
  315. package/src/api/commands/command-service.respec.mts +72 -0
  316. package/src/api/commands/command-types.mts +71 -0
  317. package/src/api/commands/ibgib/get-ibgibs.mts +269 -0
  318. package/src/api/commands/ibgib/ibgib-index.mts +8 -0
  319. package/src/api/commands/ibgib/mut8-ibgib.mts +418 -0
  320. package/src/api/commands/templates/api-function-info.template.mts +212 -0
  321. package/src/api/commands/text/text-edit.mts +217 -0
  322. package/src/api/commands/text/text-index.mts +6 -0
  323. package/src/api/commands/ui/ui-index.mts +6 -0
  324. package/src/api/commands/ui/update-css-variables.mts +187 -0
  325. package/src/api/function-infos.web.mts +66 -0
  326. package/src/assets/fullscreen-dialog.html +18 -0
  327. package/src/assumptions.respec.mts +51 -0
  328. package/src/common/project/project-constants.mts +83 -0
  329. package/src/common/project/project-helper.mts +730 -0
  330. package/src/common/project/project-types.mts +121 -0
  331. package/src/common/prompt-functions.web.mts +447 -0
  332. package/src/common/settings/settings-constants.mts +72 -0
  333. package/src/common/settings/settings-helpers.mts +280 -0
  334. package/src/common/settings/settings-types.mts +137 -0
  335. package/src/constants.mts +39 -0
  336. package/src/foo.mts +13 -0
  337. package/src/helpers.mts +574 -0
  338. package/src/helpers.web.mts +1277 -0
  339. package/src/helpers.web.respec.mts +16 -0
  340. package/src/index.mts +3 -0
  341. package/src/respec-gib.node.mts +199 -0
  342. package/src/spec-helper.node.respec.mts +50 -0
  343. package/src/storage/storage-helpers.web.mts +728 -0
  344. package/src/storage/storage-types.web.mts +29 -0
  345. package/src/types.web.mts +42 -0
  346. package/src/ui/component/component-types.mts +241 -0
  347. package/src/ui/component/ibgib-component-service.mts +201 -0
  348. package/src/ui/component/ibgib-dynamic-component-bases.mts +1369 -0
  349. package/src/ui/ui-constants.mts +101 -0
  350. package/src/ui/ui-helpers.mts +222 -0
  351. package/src/ui/ui-types.mts +11 -0
  352. package/src/witness/agent/agent-constants.mts +122 -0
  353. package/src/witness/agent/agent-helpers.mts +681 -0
  354. package/src/witness/agent/agent-one-file.app.mts +8 -0
  355. package/src/witness/agent/agent-one-file.mts +1665 -0
  356. package/src/witness/agent/agent-types.mts +92 -0
  357. package/src/witness/agent/agents-service-v1.mts +482 -0
  358. package/src/witness/agent/function-info/function-info-one-file.mts +362 -0
  359. package/src/witness/agent/gemini/agent-witness-gemini-v1.mts +910 -0
  360. package/src/witness/agent/gemini/gemini-agent-factory.mts +135 -0
  361. package/src/witness/agent/gemini/gemini-constants.mts +79 -0
  362. package/src/witness/agent/gemini/gemini-helpers.mts +216 -0
  363. package/src/witness/agent/gemini/gemini-types.mts +88 -0
  364. package/src/witness/live-proxy-ibgib/live-proxy-ibgib-one-file.mts +321 -0
  365. package/src/witness/space/metaspace/metaspace-webspace/metaspace-webspace-helper.mts +290 -0
  366. package/src/witness/space/metaspace/metaspace-webspace/metaspace-webspace.mts +407 -0
  367. package/src/witness/space/web-filesystem-space/web-filesystem-space-constants.mts +1 -0
  368. package/src/witness/space/web-filesystem-space/web-filesystem-space-helper.mts +491 -0
  369. package/src/witness/space/web-filesystem-space/web-filesystem-space-types.mts +172 -0
  370. package/src/witness/space/web-filesystem-space/web-filesystem-space-v1.mts +670 -0
  371. package/tsconfig.json +17 -0
  372. package/tsconfig.test.json +10 -0
@@ -0,0 +1,728 @@
1
+ /**
2
+ * @module storage-helpers.web.mts
3
+ *
4
+ * This is the storage abstraction that wraps indexed db.
5
+ *
6
+ * NOTE:
7
+ *
8
+ * I just want to say that callbacks are not very cool and that much of the
9
+ * ridiculousness of this code is due to this fact.
10
+ *
11
+ * That said, these functions try to ensure db is closed per function via global
12
+ * finally block. With nested promises and callbacks, this is a big f*n mess.
13
+ * But more importantly, this is why there aren't db.close() calls sprinkled
14
+ * throughout each function. But ths assumes that I am wiring up resolve/reject
15
+ * calls correctly through all the paths and this is far from certain.
16
+ */
17
+
18
+ import { extractErrorMsg } from "@ibgib/helper-gib/dist/helpers/utils-helper.mjs";
19
+
20
+ import { GLOBAL_LOG_A_LOT, } from "../constants.mjs";
21
+ import { uint8ArrayToString } from "../helpers.web.mjs";
22
+ import { Dirent } from "./storage-types.web.mjs";
23
+
24
+
25
+ let logalot = GLOBAL_LOG_A_LOT;
26
+
27
+ /**
28
+ * key/value pair interface for working with indexeddb
29
+ */
30
+ export interface IndexedDBStorageDatum {
31
+ key: string;
32
+ /**
33
+ * may have to change this to work with binary array buffers.
34
+ */
35
+ value: string | Uint8Array;
36
+ }
37
+
38
+ let initRequestCount: number = 0;
39
+
40
+ export async function askForPersistStorage(): Promise<void> {
41
+ const lc = `[${askForPersistStorage.name}]`;
42
+ try {
43
+ if (logalot) { console.log(`${lc} starting... (I: 94b9aca3633e3d4cd3d420329a9c7425)`); }
44
+ const _unusedtesting = await navigator.storage.persist();
45
+ if (navigator.storage?.persist) {
46
+ const alreadyPersisted = await navigator.storage.persisted();
47
+ if (alreadyPersisted) {
48
+ if (logalot) { console.log(`${lc} navigator.storage is already persisted (I: 2e55a7106e6d07715356b5feb5300b25)`); }
49
+ } else {
50
+ if (logalot) { console.log(`${lc} navigator.storage not already persisted. asking navigator.storage for persist... (I: 78086d15e2e94c14a0028c584099d715)`); }
51
+ const persisted = await navigator.storage.persist();
52
+ if (logalot) { console.log(`${lc} navigator.storage persist: ${persisted} (I: 923eb26c2c3240c9b5659c3266388071)`); }
53
+ }
54
+ } else {
55
+ if (logalot) { console.warn(`${lc} navigator.storage.persist not supported. (W: f5a9c3a8f7614d30b9f205f3f6c61b34)`); }
56
+ }
57
+
58
+ } catch (error) {
59
+ console.error(`${lc} ${extractErrorMsg(error)}`);
60
+ throw error;
61
+ } finally {
62
+ if (logalot) { console.log(`${lc} complete.`); }
63
+ }
64
+ }
65
+
66
+ /**
67
+ * initializes db ALWAYS but initializes store given by {@link storeName} ONLY
68
+ * WHEN VERSION IS HIGHER THAN EXISTING VERSION.
69
+ *
70
+ * @see {@link storageCreateStoreIfNotExist}
71
+ */
72
+ export async function initializeStorage({
73
+ dbName,
74
+ storeName,
75
+ version,
76
+ logalot = false,
77
+ }: {
78
+ dbName: string,
79
+ storeName?: string,
80
+ version?: number,
81
+ logalot?: boolean,
82
+ }): Promise<void> {
83
+ const lc = `[${initializeStorage.name}][${dbName}][${storeName ?? 'no store name'}]`;
84
+ const uuid = crypto.randomUUID();
85
+ if (logalot) { console.time(lc + uuid); }
86
+ /** db variable outside try block for finally access in order to close it. */
87
+ let db: IDBDatabase | undefined = undefined;
88
+ try {
89
+ if (logalot) { console.log(`${lc} starting... (I: f35d4e1ba37252f14c8532fb861b1125)`); }
90
+
91
+ const prom = new Promise<void>((resolve, reject) => {
92
+ try {
93
+ if (logalot) { console.log(`${lc} starting... (I: 0aeddd9376daa0a044677ce4cf8a4c24)`); }
94
+
95
+ // Open a database connection
96
+ if (logalot) { console.timeLog(lc + uuid, 'opening... (I: e748b4ddb445d77cb10a7ba158b49125)') }
97
+ // so when we get here via storageCreateStoreIfNotExist function,
98
+ // the version is going to be a bumped number. so is this what is
99
+ // necessarily triggering the onblocked?
100
+ const openDBRequest = indexedDB.open(dbName, /*version*/version);
101
+ initRequestCount++;
102
+ console.log(`${lc} initRequestCount: ${initRequestCount} (I: 294d5f0b12ffe5512bacebe891824d25)`);
103
+ let storeAlreadyExisted: boolean | undefined = undefined;
104
+ openDBRequest.onupgradeneeded = (event: IDBVersionChangeEvent) => {
105
+ try {
106
+ db = (event.target as any).result as IDBDatabase;
107
+ if (logalot) { console.timeLog(lc + uuid, 'onupgradeneeded... (I: e748b4ddb445d77cb10a7ba158b49125)') }
108
+
109
+ // Create a store if it doesn't exist. note that
110
+ // db.createObjectStore can only be called within this
111
+ // onupgradeneeded handler.
112
+ if (storeName) {
113
+ if (!db.objectStoreNames.contains(storeName)) {
114
+ storeAlreadyExisted = false;
115
+ db.createObjectStore(storeName, { keyPath: 'key' });
116
+ } else {
117
+ storeAlreadyExisted = true;
118
+ }
119
+ }
120
+ } catch (error) {
121
+ console.error(`${lc}[openDBRequest.onupgradeneeded] ${extractErrorMsg(error)} (E: 4a5fa1b0850be47e28bee653da287325)`);
122
+ reject(error);
123
+ }
124
+ };
125
+
126
+ openDBRequest.onblocked = (event: IDBVersionChangeEvent) => {
127
+ console.log(`${lc}[openDBRequest.onblocked] openDBRequest blocked...time wasted a bit here. version change event (old -> new): ${event.oldVersion} -> ${event.newVersion} (I: 9074ebf4afdba54d6f9d41b360b96a25)`);
128
+ console.dir(event);
129
+ };
130
+
131
+ /**
132
+ * this handler fires independently of upgradeneeded
133
+ */
134
+ openDBRequest.onsuccess = (ev) => {
135
+ try {
136
+ if (logalot) { console.log('init success (I: 297a5a71e405a0b56413af813f248d24)'); }
137
+ if (logalot) { console.timeLog(lc + uuid, 'onupgradeneeded... (I: e748b4ddb445d77cb10a7ba158b49125)') }
138
+ db = (ev.target as any).result as IDBDatabase;
139
+ if (storeName) {
140
+ storeAlreadyExisted ??= db.objectStoreNames.contains(storeName);
141
+ if (logalot) { console.log(`${lc} ${dbName} store "${storeName}" ${storeAlreadyExisted ? 'already exists' : 'does not exist'}. (I: db64712bc69c5287b1cf77af1fc13d24)`); }
142
+ }
143
+ resolve();
144
+ } catch (error) {
145
+ console.error(`${lc}[openDBRequest.onsuccess] ${extractErrorMsg(error)}`);
146
+ reject(error);
147
+ }
148
+ };
149
+
150
+ openDBRequest.onerror = (event: any) => { // IDBRequestEvent but doesn't compile
151
+ debugger; // error initializeStorage openDBRequest.onerror
152
+ console.error(`${lc}[initRequest.onerror] ${extractErrorMsg(openDBRequest.error)} (E: 74cf09e9fba2dd9e41225e943c331124)`);
153
+ reject(openDBRequest.error); // same as below?
154
+ // reject(event.target.error);
155
+ };
156
+ } catch (error) {
157
+ console.error(`${lc} ${extractErrorMsg(error)}`);
158
+ debugger; // error
159
+ reject(error);
160
+ } finally {
161
+ if (logalot) { console.log(`${lc} complete.`); }
162
+ }
163
+ });
164
+ await prom;
165
+ } catch (error) {
166
+ console.error(`${lc} ${extractErrorMsg(error)}`);
167
+ throw error;
168
+ } finally {
169
+ if (db) {
170
+ if (logalot) { console.log(`${lc} closing db ${dbName}... (I: 3f1c18eec567ea63f3927eef0f038925)`); }
171
+ (db as any).close();
172
+ if (logalot) {
173
+ console.log(`${lc} closing db ${dbName} complete. (I: bc3b2f504245d6203dbba6bd65d30325)`);
174
+ console.timeLog(lc + uuid, 'db closed. (I: e748b4ddb445d77cb10a7ba158b49125)')
175
+ }
176
+ }
177
+ if (logalot) {
178
+ console.log(`${lc} complete.`);
179
+ console.timeEnd(lc + uuid);
180
+ }
181
+ }
182
+
183
+ }
184
+
185
+ /**
186
+ * wrapper for filtered indexedDB.databases() call basically
187
+ *
188
+ * @returns db info for given dbName
189
+ */
190
+ export async function storageGetDBInfo({
191
+ dbName,
192
+ logalot = false,
193
+ }: {
194
+ dbName: string,
195
+ logalot?: boolean,
196
+ }): Promise<IDBDatabaseInfo | undefined> {
197
+ const lc = `[${storageGetDBInfo.name}]`;
198
+
199
+ const uuid = crypto.randomUUID();
200
+ if (logalot) { console.time(lc + uuid); }
201
+ try {
202
+ if (logalot) { console.log(`${lc} starting... (I: 8516795b20529d19eb6923defd7a0f24)`); }
203
+ const dbInfo = (await indexedDB.databases()).filter(x => x.name === dbName).at(0);
204
+ return dbInfo;
205
+ } catch (error) {
206
+ console.error(`${lc} ${extractErrorMsg(error)}`);
207
+ } finally {
208
+ if (logalot) { console.timeEnd(lc + uuid); }
209
+ if (logalot) { console.log(`${lc} complete.`); }
210
+ }
211
+ }
212
+
213
+
214
+ /**
215
+ * wrapper that ensures indexeddb store exists
216
+ */
217
+ export async function storageCreateStoreIfNotExist({
218
+ dbName,
219
+ storeName,
220
+ logalot = false,
221
+ }: {
222
+ dbName: string,
223
+ storeName: string,
224
+ logalot?: boolean,
225
+ }): Promise<void> {
226
+ const lc = `[${storageCreateStoreIfNotExist.name}]`;
227
+ const uuid = crypto.randomUUID();
228
+ if (logalot) { console.time(lc + uuid); }
229
+ /** db variable outside try block for finally access in order to close it. */
230
+ let db: IDBDatabase | undefined = undefined;
231
+ try {
232
+ if (logalot) { console.log(`${lc} starting... (I: 029f7caa8ea5ea08a865f3924c82b624)`); }
233
+
234
+ const dbInfo_viaIndexedDBDatabasesFn = (await indexedDB.databases()).filter(x => x.name === dbName).at(0);
235
+ if (!dbInfo_viaIndexedDBDatabasesFn) { throw new Error(`db (${dbName}) does not exist. can't create store (${storeName}) (E: 5b15f7aed6f7068d077b2c7ebcbe8524)`); }
236
+
237
+ let storeExists = false;
238
+
239
+ if (logalot) { console.timeLog(lc + uuid); }
240
+
241
+ await new Promise<void>((resolve, reject) => {
242
+ const openDBRequest = indexedDB.open(dbName);
243
+ openDBRequest.onsuccess = (ev: Event) => {
244
+ db = (ev.target as any).result as IDBDatabase;
245
+ storeExists = db.objectStoreNames?.contains(storeName);
246
+ if (logalot) { console.timeLog(lc + uuid, 'open db request'); }
247
+ resolve();
248
+ };
249
+ openDBRequest.onerror = (event: any) => { // IDBRequestEvent but doesn't compile
250
+ debugger; // error storageCreateStoreIfNotExist openDBRequest.onerror
251
+ console.error(`${lc}[openDBRequest.onerror] ${extractErrorMsg(openDBRequest.error)} (E: 63695744e9e59ff8019e04ceeb8e2524)`);
252
+ // reject(event.target.error); // same as openDBRequest.error?
253
+ reject(openDBRequest.error);
254
+ };
255
+ });
256
+
257
+ if (logalot) { console.timeLog(lc + uuid); }
258
+
259
+ if (storeExists) {
260
+ if (logalot) { console.log(`${lc} store ${storeName} already existed. (I: a2263b510c18240fc59fca54e3892324)`); }
261
+ return; /* <<<< returns early */
262
+ }
263
+
264
+ // store does not exist, so get the version number, bump it, and in the upgradeneeded handler, create the store
265
+ const dbInfo = await storageGetDBInfo({ dbName, logalot }); // does not need db closed yet
266
+ if (logalot) { console.timeLog(lc + uuid, 'storageGetDBInfo complete'); }
267
+ if (!dbInfo) { throw new Error(`db (${dbName}) does not exist. can't create store (${storeName}) (E: c771db13fa28f67079aad45e1ab7e624)`); }
268
+ const version = dbInfo.version;
269
+ if (!version) { throw new Error(`db (${dbName}) has no version. can't create store (${storeName}) (E: 3d2ec52853ad99f92b19ac5aa7fbfe24)`); }
270
+ const newVersion = version + 1;
271
+ if (logalot) { console.log(`${lc} creating store ${storeName} with version ${newVersion} (I: 312b79f28243c650cf38935114f21e24)`); }
272
+ // we need to manually close db here before calling the inititalizeStorage
273
+ if (db) {
274
+ (db as any).close();
275
+ db = undefined;
276
+ } else {
277
+ throw new Error(`(UNEXPECTED) how did we get here with db falsy? (E: b561784879e19bac54b1c4936aff0c25)`);
278
+ }
279
+ await initializeStorage({ dbName, storeName, version: newVersion, logalot });
280
+ } catch (error) {
281
+ console.error(`${lc} ${extractErrorMsg(error)}`);
282
+ throw error; // why wasn't I rethrowing??
283
+ } finally {
284
+ if (db) {
285
+ if (logalot) { console.log(`${lc} closing db ${dbName}... (I: 3f1c18eec567ea63f3927eef0f038925)`); }
286
+ (db as any).close();
287
+ if (logalot) { console.log(`${lc} closing db ${dbName} complete. (I: bc3b2f504245d6203dbba6bd65d30325)`); }
288
+ }
289
+ if (logalot) { console.timeLog(lc + uuid); }
290
+ if (logalot) { console.log(`${lc} complete.`); }
291
+ }
292
+ }
293
+
294
+ /**
295
+ * set key/value item
296
+ * helper for indexeddb storage.
297
+ */
298
+ export async function storagePut({
299
+ dbName,
300
+ version,
301
+ storeName,
302
+ key,
303
+ value,
304
+ logalot = false,
305
+ }: {
306
+ dbName: string,
307
+ version?: number,
308
+ storeName: string,
309
+ key: string,
310
+ value: string | Uint8Array,
311
+ logalot?: boolean,
312
+ }): Promise<void> {
313
+ const lc = `[${storagePut.name}]`;
314
+ /** db variable outside try block for finally access in order to close it. */
315
+ let db: IDBDatabase | undefined = undefined;
316
+ try {
317
+ if (logalot) { console.log(`${lc} starting... (I: bf7316c244888cb8ead2d3aac1d9f625)`); }
318
+
319
+ const prom = new Promise<void>((resolve, reject) => {
320
+ try {
321
+ if (logalot) { console.log(`${lc} starting... (I: 81df59e3961d711ce5d8f2ae3e2f3824)`); }
322
+
323
+ const openDBRequest = indexedDB.open(dbName, /*version*/version);
324
+ openDBRequest.onsuccess = (event: any) => { // IDBOpenDBRequestEvent?
325
+ db = event.target.result as IDBDatabase;
326
+ try {
327
+ const store = db.transaction(storeName, 'readwrite').objectStore(storeName);
328
+ const data: IndexedDBStorageDatum = { key, value };
329
+ store.put(data);
330
+ resolve();
331
+ } catch (error) {
332
+ console.error(`${lc}[putRequest.onsuccess] ${extractErrorMsg(error)}`);
333
+ reject(error);
334
+ }
335
+ };
336
+
337
+ openDBRequest.onerror = (event: any) => { // IDBRequestEvent?
338
+ debugger; // storagePut openDBRequest error
339
+ // is openDBRequest.error same as event.target.error?
340
+ console.error(`${lc}[putRequest.onerror] ${extractErrorMsg(openDBRequest.error)} (E: 7a946d99ede2b248df4dcfea4ac99724)`);
341
+ reject(openDBRequest.error);
342
+ };
343
+ } catch (error) {
344
+ console.error(`${lc} ${extractErrorMsg(error)}`);
345
+ reject(error);
346
+ } finally {
347
+ if (logalot) { console.log(`${lc} complete.`); }
348
+ }
349
+ });
350
+
351
+ await prom;
352
+ } catch (error) {
353
+ console.error(`${lc} ${extractErrorMsg(error)}`);
354
+ throw error;
355
+ } finally {
356
+ if (db) {
357
+ if (logalot) { console.log(`${lc} closing db ${dbName}... (I: 438c6edced94b83a3478c71b08c6c325)`); }
358
+ (db as any).close();
359
+ if (logalot) { console.log(`${lc} closing db ${dbName} complete. (I: 0d081553b1eb53c65ade2cedb802cf25)`); }
360
+ }
361
+ if (logalot) { console.log(`${lc} complete.`); }
362
+ }
363
+ }
364
+
365
+ /**
366
+ * get item via key
367
+ * helper for indexeddb storage.
368
+ */
369
+ export async function storageGet({
370
+ dbName,
371
+ version,
372
+ storeName,
373
+ key,
374
+ logalot = false,
375
+ }: {
376
+ dbName: string,
377
+ version?: number,
378
+ storeName: string,
379
+ key: string,
380
+ logalot?: boolean,
381
+ }): Promise<string | undefined> {
382
+ const lc = `[${storageGet.name}]`;
383
+ /** db variable outside try block for finally access in order to close it. */
384
+ let db: IDBDatabase | undefined = undefined;
385
+ try {
386
+ if (logalot) { console.log(`${lc} starting... (I: f8ba7cd5801918a8580e91b7c90aa525)`); }
387
+ const prom = new Promise<string | undefined>((resolve, reject) => {
388
+ try {
389
+ if (logalot) { console.log(`${lc} starting... (I: 24163c4a11c8712097db45febaf9c724)`); }
390
+
391
+ // Retrieve the value later
392
+ const openDBRequest = indexedDB.open(dbName, version);
393
+ openDBRequest.onsuccess = (event: any) => { // IDBOpenDBRequestEvent?
394
+ db = event.target.result as IDBDatabase;
395
+
396
+ let store: IDBObjectStore;
397
+ try {
398
+ store = db.transaction(storeName).objectStore(storeName);
399
+ } catch (error) {
400
+ debugger; // error getting objectStore
401
+ console.error(`${lc}[openDBRequest.onsuccess][objectStore] ${extractErrorMsg(error)}`);
402
+ reject(error);
403
+ return; /* <<<< returns early */
404
+ }
405
+
406
+ // Get the value using the key
407
+ const getRequest = store.get(key);
408
+ getRequest.onsuccess = (event: any) => { // IDBRequestEvent?
409
+ try {
410
+ let value = (event.target?.result as IndexedDBStorageDatum)?.value ?? undefined;
411
+ if (!value) {
412
+ resolve(value);
413
+ return; /* <<<< returns early */
414
+ }
415
+
416
+ if (logalot) { console.log('Retrieved value:', value); }
417
+ if (value instanceof Uint8Array) {
418
+ resolve(uint8ArrayToString(value as Uint8Array));
419
+ } else {
420
+ if (typeof value !== 'string') { throw new Error(`(UNEXPECTED) truthy, non-Uint8Array value is not a string? (E: 6a4ec24e2e5d9848f8b542bc2661dc24)`); }
421
+ resolve(value);
422
+ }
423
+ } catch (error) {
424
+ reject(error);
425
+ }
426
+ };
427
+
428
+ getRequest.onerror = (event: any) => {
429
+ debugger; // storageGet getRequest.onerror
430
+ const error = getRequest.error;
431
+ console.error(`${lc}[openDBRequest.onsuccess][getRequest.onerror] ${extractErrorMsg(error)}`);
432
+ reject(error);
433
+ };
434
+ };
435
+
436
+ openDBRequest.onerror = (event: any) => { // IDBRequestEvent but doesn't compile
437
+ debugger; // error indexeddb storageGet openDBRequest.onerror
438
+ // are openDBRequest.error and event.target.error the same?
439
+ console.error(`${lc}[openDBRequest.onerror] ${extractErrorMsg(openDBRequest.error)} (E: 074963a908fa9a075f01c73cae829224)`);
440
+ reject(openDBRequest.error);
441
+ };
442
+
443
+ } catch (error) {
444
+ console.error(`${lc} ${extractErrorMsg(error)}`);
445
+ reject(error);
446
+ } finally {
447
+ if (logalot) { console.log(`${lc} complete.`); }
448
+ }
449
+ });
450
+
451
+ const result = await prom;
452
+ return result;
453
+ } catch (error) {
454
+ console.error(`${lc} ${extractErrorMsg(error)}`);
455
+ throw error;
456
+ } finally {
457
+ if (db) {
458
+ if (logalot) { console.log(`${lc} closing db ${dbName}... (I: a938fc22dfdc76b15f6926bc4d458225)`); }
459
+ (db as any).close();
460
+ if (logalot) { console.log(`${lc} closing db ${dbName} complete. (I: 18f2ec1557bc83ec4e2c5d5e72264525)`); }
461
+ }
462
+ if (logalot) { console.log(`${lc} complete.`); }
463
+ }
464
+ }
465
+
466
+ /**
467
+ * checks if db exists. if store is provided, checks to see if that specific
468
+ * store exists in the db's schema.
469
+ *
470
+ * helper for indexeddb storage.
471
+ */
472
+ export async function storageDBExists({
473
+ dbName,
474
+ store,
475
+ }: {
476
+ dbName: string,
477
+ store?: string,
478
+ }): Promise<boolean> {
479
+ const lc = `[${storageDBExists.name}]`;
480
+ /** db variable outside try block for finally access in order to close it. */
481
+ let db: IDBDatabase | undefined = undefined;
482
+ try {
483
+ if (logalot) { console.log(`${lc} starting... (I: 2b4373affa3841220f0b7ca690406624)`); }
484
+
485
+ const dbs = await window.indexedDB.databases();
486
+ const dbExists = dbs.some(db => db.name === dbName);
487
+ if (dbExists) {
488
+ if (store) {
489
+ return await new Promise((resolve, reject) => {
490
+ const openDBRequest = indexedDB.open(dbName);
491
+ openDBRequest.onsuccess = (event: any) => { // IDBOpenDBRequestEvent?
492
+ db = event.target.result as IDBDatabase;
493
+ const storeExists = db.objectStoreNames.contains(store);
494
+ resolve(storeExists);
495
+ };
496
+ openDBRequest.onerror = (event: any) => { // IDBRequestEvent but doesn't compile
497
+ debugger; // onerror
498
+ db = openDBRequest.result;
499
+ const { error } = event.target;
500
+ console.error(`${lc}[openDBRequest.onerror] ${extractErrorMsg(openDBRequest.error)} (E: c783fe607451e46c1feae3a81e0f7924)`);
501
+ reject(error);
502
+ };
503
+ });
504
+ } else {
505
+ return true;
506
+ }
507
+ } else {
508
+ return false;
509
+ }
510
+ } catch (error) {
511
+ console.error(`${lc} ${extractErrorMsg(error)}`);
512
+ throw error;
513
+ } finally {
514
+ if (db) {
515
+ if (logalot) { console.log(`${lc} closing db ${dbName}... (I: 8782d9eea285cf9eb638d493a421a625)`); }
516
+ // for some reason, typescript incorrectly thinks db is type
517
+ // "never", so this any cast is necessary
518
+ (db as any).close();
519
+ if (logalot) { console.log(`${lc} closing db ${dbName} complete. (I: 76a0c5dea2643e2bb84c82c8446a8125)`); }
520
+ }
521
+ if (logalot) { console.log(`${lc} complete.`); }
522
+ }
523
+ }
524
+
525
+ /**
526
+ * helper function equivalent to rm -rf in our filesystem space
527
+ */
528
+ export async function storageRmRF({
529
+ dbName,
530
+ storeName,
531
+ pathToRm,
532
+ }: {
533
+ dbName: string;
534
+ storeName: string;
535
+ pathToRm: string;
536
+ }): Promise<void> {
537
+ const lc = `[${storageRmRF.name}]`;
538
+ /**
539
+ * turning it off for this function...note that this does not call any other
540
+ * functions in this file that would be affected.
541
+ */
542
+ const logalotInitDebug = logalot;
543
+ // logalot = false;
544
+ if (logalot) { console.log(`${lc} starting... (I: c7e4cb759789ece0a8189d7dfb4d2a24)`); }
545
+ /** db variable outside try block for finally access in order to close it. */
546
+ let db: IDBDatabase | undefined = undefined;
547
+ return new Promise<void>((resolve, reject) => {
548
+ try {
549
+ if (!dbName) { throw new Error(`(UNEXPECTED) dbName falsy? (E: ed336d88c9c4e8d4916b29356dc58324)`); }
550
+ if (!storeName) { throw new Error(`(UNEXPECTED) storeName falsy? (E: ad493bb79b63a192524b14c59a706524)`); }
551
+ if (!pathToRm) { throw new Error(`(UNEXPECTED) pathToRm falsy? (E: 88c9631d93467e17996946882254af24)`); }
552
+ const openDBRequest = indexedDB.open(dbName);
553
+
554
+ openDBRequest.onerror = () => {
555
+ debugger; // error
556
+ if (openDBRequest.result) { // Only close if a DB object was obtained
557
+ (openDBRequest.result as IDBDatabase).close();
558
+ }
559
+ console.error(`${lc}[openDBRequest.onerror] ${extractErrorMsg(openDBRequest.error)} (E: 4c5ab71a765e61b4292008fd4fafe324)`);
560
+ reject(openDBRequest.error);
561
+ };
562
+
563
+ openDBRequest.onsuccess = () => {
564
+ db = openDBRequest.result;
565
+ const transaction = db.transaction(storeName, "readwrite");
566
+ const objectStore = transaction.objectStore(storeName);
567
+
568
+ // Use IDBKeyRange.lowerBound() for efficiency
569
+ const range = IDBKeyRange.lowerBound(pathToRm);
570
+ const openCursorRequest = objectStore.openCursor(range);
571
+
572
+ openCursorRequest.onerror = () => {
573
+ debugger; // error
574
+ console.error(`${lc}[openCursorRequest.onerror] ${extractErrorMsg(openCursorRequest.error)} (E: caefdda2bb95f92e9fb8d89ee412b524)`);
575
+ reject(openCursorRequest.error);
576
+ };
577
+
578
+ openCursorRequest.onsuccess = () => {
579
+ try {
580
+ let rmCount = 0;
581
+ // does it matter if the path is a dir vs. a file?
582
+ const cursor = openCursorRequest.result;
583
+ if (cursor) {
584
+ if (cursor.key.toString().startsWith(pathToRm)) {
585
+ const deleteRequest = cursor.delete();
586
+ rmCount++;
587
+
588
+ deleteRequest.onerror = () => {
589
+ debugger; // error
590
+ console.error(`${lc}[deleteRequest.onerror] ${extractErrorMsg(deleteRequest.error)} (E: abc031c53e5387322cd8909b3ada9b24)`);
591
+ reject(deleteRequest.error);
592
+ };
593
+ cursor.continue();
594
+ } else {
595
+ // No more keys starting with dirPath, we can stop
596
+ if (logalot) { console.log(`${lc} rmCount: ${rmCount} (I: e4bc613a5514c0942484b79267e16724)`); }
597
+ resolve();
598
+ }
599
+ } else {
600
+ if (logalot) { console.log(`${lc} cursor is falsy, so either we have no more records or had no records to begin with. (I: 9ff3aec6274416501a7baf6dcc5f2624)`); }
601
+ resolve();
602
+ }
603
+ } catch (error) {
604
+ console.error(`${lc}[openCursorRequest.onsuccess] ${extractErrorMsg(error)}`);
605
+ reject(error);
606
+ }
607
+ };
608
+ };
609
+ } catch (error) {
610
+ debugger; // error storageRmDir
611
+ console.error(`${lc} ${extractErrorMsg(error)}`);
612
+ reject(error);
613
+ }
614
+ }).finally(() => {
615
+ if (db) {
616
+ if (logalot) { console.log(`${lc} closing db ${dbName}... (I: 39b4ba83de4bdfd541e3384ebab27425)`); }
617
+ db.close();
618
+ if (logalot) { console.log(`${lc} closing db ${dbName} complete. (I: e4015b9436c4b2bc0ccf0e11e2037925)`); }
619
+ }
620
+ if (logalot) { console.log(`${lc} complete.`); }
621
+ logalot = logalotInitDebug;
622
+ });
623
+ }
624
+
625
+ /**
626
+ * helper function equivalent to readdir in our filesystem space
627
+ */
628
+ export async function storageReaddir({
629
+ dbName,
630
+ storeName,
631
+ dirPath,
632
+ withFileTypes = false,
633
+ }: {
634
+ dbName: string;
635
+ storeName: string;
636
+ dirPath: string;
637
+ withFileTypes?: boolean;
638
+ }): Promise<string[] | Dirent[]> {
639
+ const lc = `[${storageReaddir.name}]`;
640
+ /** db variable outside try block for finally access in order to close it. */
641
+ let db: IDBDatabase | undefined = undefined;
642
+ try {
643
+ const prom = new Promise<string[] | Dirent[]>((resolve, reject) => {
644
+ const openDBRequest = indexedDB.open(dbName);
645
+
646
+ openDBRequest.onerror = () => {
647
+ debugger; // error
648
+ // if (openDBRequest.result) { // Only close if a DB object was obtained
649
+ // (openDBRequest.result as IDBDatabase).close();
650
+ // }
651
+ reject(openDBRequest.error);
652
+ };
653
+
654
+ openDBRequest.onsuccess = () => {
655
+ db = openDBRequest.result;
656
+ const transaction = db.transaction(storeName, "readonly");
657
+ const objectStore = transaction.objectStore(storeName);
658
+
659
+ const normalizedDirPath = dirPath.endsWith("/") ? dirPath : dirPath + "/";
660
+ const range = IDBKeyRange.lowerBound(normalizedDirPath);
661
+ const openCursorRequest = objectStore.openCursor(range);
662
+ const entries: Set<string> = new Set();
663
+ const dirents: Dirent[] = [];
664
+
665
+ openCursorRequest.onerror = () => {
666
+ debugger; // error
667
+ console.error(`${lc}[openCursorRequest.onerror] ${extractErrorMsg(openCursorRequest.error)}`);
668
+ reject(openCursorRequest.error);
669
+ };
670
+
671
+ // cursor.continue() repeatedly calls this handler ick
672
+ openCursorRequest.onsuccess = () => {
673
+ try {
674
+ const cursor = openCursorRequest.result;
675
+ if (cursor) {
676
+ const key = cursor.key.toString();
677
+ if (key.startsWith(normalizedDirPath) && key !== normalizedDirPath) {
678
+ const relativePath = key.substring(normalizedDirPath.length);
679
+ const childSegment = relativePath.split("/")[0];
680
+ if (withFileTypes) {
681
+ // Determine if it's a file or directory
682
+ const isDirectory = relativePath.substring(childSegment.length).startsWith("/");
683
+ dirents.push({
684
+ name: childSegment,
685
+ isDirectory: () => isDirectory,
686
+ isFile: () => !isDirectory,
687
+ isBlockDevice: () => false,
688
+ isCharacterDevice: () => false,
689
+ isSymbolicLink: () => false,
690
+ isFIFO: () => false,
691
+ isSocket: () => false,
692
+ });
693
+ } else {
694
+ entries.add(childSegment);
695
+ }
696
+ cursor.continue();
697
+ } else if (!key.startsWith(normalizedDirPath)) {
698
+ resolve(withFileTypes ? dirents : Array.from(entries));
699
+ } else {
700
+ cursor.continue();
701
+ }
702
+ } else {
703
+ resolve(withFileTypes ? dirents : Array.from(entries));
704
+ }
705
+ } catch (error) {
706
+ console.error(`${lc}[openCursorRequest.onsuccess] ${extractErrorMsg(error)}`);
707
+ reject(error);
708
+ }
709
+ };
710
+ };
711
+ });
712
+
713
+ const result = await prom;
714
+
715
+ return result;
716
+ } catch (error) {
717
+ console.error(`${lc} ${extractErrorMsg(error)}`);
718
+ throw error;
719
+ } finally {
720
+ if (db) {
721
+ if (logalot) { console.log(`${lc} closing db ${dbName}... (I: 39b4ba83de4bdfd541e3384ebab27425)`); }
722
+ // for some reason, typescript incorrectly thinks db is type
723
+ // "never", so this any cast is necessary
724
+ (db as any).close();
725
+ if (logalot) { console.log(`${lc} closing db ${dbName} complete. (I: e4015b9436c4b2bc0ccf0e11e2037925)`); }
726
+ }
727
+ }
728
+ }