@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,670 @@
1
+ /**
2
+ * @module web-filesystem-space-v1
3
+ *
4
+ * uuids unique
5
+ */
6
+ import { clone, extractErrorMsg, } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
7
+ import { getIbAndGib, getIbGibAddr, } from '@ibgib/ts-gib/dist/helper.mjs';
8
+ import { getGib, getGibInfo, } from '@ibgib/ts-gib/dist/V1/transforms/transform-helper.mjs';
9
+ import {
10
+ IbGib_V1, IbGibRel8ns_V1,
11
+ } from '@ibgib/ts-gib/dist/V1/types.mjs';
12
+ import { Gib, Ib, IbGibAddr } from '@ibgib/ts-gib/dist/types.mjs';
13
+ import { validateIbGibAddr } from '@ibgib/ts-gib/dist/V1/validate-helper.mjs';
14
+ import { IBGIB_DELIMITER } from '@ibgib/ts-gib/dist/V1/constants.mjs';
15
+ import { isBinary, parseBinIb, toDto, } from '@ibgib/core-gib/dist/common/other/ibgib-helper.mjs';
16
+ import { FilesystemSpace_V1 } from '@ibgib/core-gib/dist/witness/space/filesystem-space/filesystem-space-v1.mjs';
17
+ import { getSpaceIb } from '@ibgib/core-gib/dist/witness/space/space-helper.mjs';
18
+
19
+ import { GLOBAL_LOG_A_LOT } from '../../../constants.mjs';
20
+ import {
21
+ DeleteIbGibFileOpts, DeleteIbGibFilesResult,
22
+ GetIbGibFileOpts,
23
+ GetIbGibFileResult,
24
+ PutIbGibFileOpts,
25
+ PutIbGibFileResult
26
+ } from '@ibgib/core-gib/dist/witness/space/filesystem-space/filesystem-types.mjs';
27
+ import {
28
+ IBGIB_BASE_SUBPATH, IBGIB_SPACE_SUBPATH_DEFAULT, IBGIB_BASE_DIR,
29
+ IBGIB_ENCODING, IBGIB_IBGIBS_SUBPATH, IBGIB_META_SUBPATH,
30
+ IBGIB_BIN_SUBPATH,
31
+ IBGIB_DNA_SUBPATH,
32
+ DEFAULT_LONG_PATH_LENGTH,
33
+ IBGIB_LONG_SUBPATH,
34
+ } from '@ibgib/core-gib/dist/witness/space/filesystem-space/filesystem-constants.mjs';
35
+ import {
36
+ WebFilesystemSpaceData_V1, WebFilesystemSpaceRel8ns_V1,
37
+ WebFilesystemSpaceOptionsData, WebFilesystemSpaceOptionsRel8ns, WebFilesystemSpaceOptionsIbGib,
38
+ WebFilesystemSpaceResultData, WebFilesystemSpaceResultRel8ns,
39
+ DEFAULT_WEB_FILESYSTEM_SPACE_DATA_V1,
40
+ FileDataInfo,
41
+ } from './web-filesystem-space-types.mjs';
42
+ import { META_STONE_ATOM } from '@ibgib/core-gib/dist/common/meta-stone/meta-stone-constants.mjs';
43
+ import { isMetaStone, validateCommonMetaStoneIb } from '@ibgib/core-gib/dist/common/meta-stone/meta-stone-helper.mjs';
44
+ import { BinIbGib_V1 } from '@ibgib/core-gib/dist/common/bin/bin-types.mjs';
45
+ import { readdir, rm, tryRead, tryRead_bin, writeFile } from './web-filesystem-space-helper.mjs';
46
+ import { PathUtilsHelper } from '../../../helpers.web.mjs';
47
+ import { INDEXED_DB_LONG_PATH_LENGTH } from './web-filesystem-space-constants.mjs';
48
+
49
+ const logalot = GLOBAL_LOG_A_LOT;
50
+ const pathUtils = new PathUtilsHelper();
51
+
52
+ /**
53
+ * Base class convenience for a local space with V1 ibgibs working with the node
54
+ * filesystem.
55
+ *
56
+ * Unfortunately, file systems have short file name requirements, where 255 is
57
+ * often the max length of a filename. So this cannot store ibgibs directly by
58
+ * their address.
59
+ *
60
+ * This naively caches ibGibs in memory. When not found there, will looks in
61
+ * files using Ionic `FileSystem`.
62
+ */
63
+ export class WebFilesystemSpace_V1<
64
+ TData extends WebFilesystemSpaceData_V1 = WebFilesystemSpaceData_V1,
65
+ TRel8ns extends WebFilesystemSpaceRel8ns_V1 = WebFilesystemSpaceRel8ns_V1
66
+ > extends FilesystemSpace_V1<
67
+ WebFilesystemSpaceOptionsData,
68
+ WebFilesystemSpaceOptionsRel8ns,
69
+ WebFilesystemSpaceResultData,
70
+ WebFilesystemSpaceResultRel8ns,
71
+ TData,
72
+ TRel8ns
73
+ > {
74
+
75
+ /**
76
+ * Log context for convenience with logging. (Ignore if you don't want to use this.)
77
+ */
78
+ protected lc: string = `[${WebFilesystemSpace_V1.name}]`;
79
+
80
+ constructor(
81
+ // /**
82
+ // * Default predicate value when putting an unknown ibGib.
83
+ // *
84
+ // * ## notes
85
+ // *
86
+ // * So when a repo witnesses another ibGib, it either defaults to
87
+ // * storing that ibGib or not storing that ibGib. This is what that
88
+ // * is referring to. If it's optimistic, then it stores any ibGib by
89
+ // * default and it passes its put predicate.
90
+ // */
91
+ // public optimisticPut: boolean = true,
92
+ initialData?: TData,
93
+ initialRel8ns?: TRel8ns,
94
+ ) {
95
+ super(initialData ?? clone(DEFAULT_WEB_FILESYSTEM_SPACE_DATA_V1), initialRel8ns);
96
+ const lc = `${this.lc}[ctor]`;
97
+
98
+ // try {
99
+ // if (logalot) { console.log(`${lc} starting...`); }
100
+ // this.initialize();
101
+ // } catch (error) {
102
+ // console.error(`${lc} ${extractErrorMsg(error)}`);
103
+ // throw error;
104
+ // } finally {
105
+ // if (logalot) { console.log(`${lc} complete.`); }
106
+ // }
107
+ }
108
+
109
+ /**
110
+ * Factory static method to create the space with the given
111
+ * `dto` param's ibGib properties.
112
+ *
113
+ * We do this because when we persist this space (and its settings
114
+ * located in `data`), we do not save the actual class instantiation
115
+ * but just the ibgib properties. Use this factory method to
116
+ * create a new space instance and rehydrate from that saved dto.
117
+ *
118
+ * ## notes
119
+ *
120
+ * * DTO stands for data transfer object.
121
+ *
122
+ * @param dto space ibGib dto that we're going to load from
123
+ * @returns newly created space built upon `dto`
124
+ */
125
+ static async createFromDto<
126
+ TData extends WebFilesystemSpaceData_V1 = WebFilesystemSpaceData_V1,
127
+ TRel8ns extends IbGibRel8ns_V1 = IbGibRel8ns_V1
128
+ >(dto: IbGib_V1<TData, TRel8ns>): Promise<WebFilesystemSpace_V1<TData, TRel8ns>> {
129
+ const lc = `[${FilesystemSpace_V1.name}][${this.createFromDto.name}]`;
130
+ if (logalot) { console.log(`${lc}`); }
131
+ const space = new WebFilesystemSpace_V1<TData, TRel8ns>();
132
+ await space.initialized;
133
+ await space.loadIbGibDto(dto);
134
+ return space;
135
+ }
136
+
137
+ protected async validateWitnessArg(arg: WebFilesystemSpaceOptionsIbGib): Promise<string[]> {
138
+ const lc = `${this.lc}[${this.validateWitnessArg.name}]`;
139
+ let errors: string[] = [];
140
+ try {
141
+ errors = (await super.validateWitnessArg(arg)) || [];
142
+ if (arg.data?.cmd === 'put' && (arg.ibGibs || []).length === 0) {
143
+ errors.push(`when "put" cmd is called, ibGibs required.`);
144
+ }
145
+ if (arg.data?.cmd === 'get' && (arg.data?.ibGibAddrs || []).length === 0) {
146
+ errors.push(`when "get" cmd is called, ibGibAddrs required.`);
147
+ }
148
+ } catch (error) {
149
+ console.error(`${lc} ${extractErrorMsg(error)}`);
150
+ throw error;
151
+ } finally {
152
+ if (errors?.length > 0) { console.error(`${lc} errors: ${errors}`); }
153
+ }
154
+
155
+ return errors;
156
+ }
157
+
158
+ // _pathUtils: PathUtilsHelper | undefined;
159
+ // get pathUtils(): PathUtilsHelper {
160
+ // if (!this._pathUtils) { this._pathUtils = new PathUtilsHelper(); }
161
+ // return this._pathUtils;
162
+ // }
163
+
164
+ /**
165
+ * Initializes to default space values.
166
+ */
167
+ protected async initialize(): Promise<void> {
168
+ const lc = `${this.lc}[${this.initialize.name}]`;
169
+ try {
170
+ if (logalot) { console.log(`${lc} starting...`); }
171
+ if (!this.data) {
172
+ this.data = clone(DEFAULT_WEB_FILESYSTEM_SPACE_DATA_V1);
173
+ this.data = this.data!; // why does ts compiler need this?
174
+ }
175
+ // if (!this.data?.classname) { this.data!.classname = WebFilesystemSpace_V1.name }
176
+ if (this.data!.classname !== WebFilesystemSpace_V1.name) {
177
+ if (this.data.classname) {
178
+ // only warn if the consumer has explicitly set a different classname
179
+ console.warn(`${lc} this.data.classname (${this.data.classname}) !== ${WebFilesystemSpace_V1.name}. overriding this. (W: 400ef8f8626132bf763b5c68bc1d3424)`);
180
+ }
181
+ this.data!.classname = WebFilesystemSpace_V1.name; // always set?
182
+ }
183
+ if (!this.data.encoding) { this.data.encoding = IBGIB_ENCODING; }
184
+ if (!this.data.baseDir) { this.data.baseDir = IBGIB_BASE_DIR; }
185
+ // if (!this.data.baseSubPath) { this.data.baseSubPath = IBGIB_BASE_SUBPATH; }
186
+ if (!this.data.uuid) { throw new Error(`this.data.uuid is falsy. right now i'm assuming data.uuid is truthy. this is what i'm using atow (12/2024) as the indexeddb db.store to be the uuid via the baseSubPath (E: cd3475cc43d1384dccf0b20dd322b124)`); }
187
+ this.data.baseSubPath = this.data.uuid;
188
+ if (!this.data.spaceSubPath) { this.data.spaceSubPath = IBGIB_SPACE_SUBPATH_DEFAULT; }
189
+ if (!this.data.ibgibsSubPath) { this.data.ibgibsSubPath = IBGIB_IBGIBS_SUBPATH; }
190
+ if (!this.data.metaSubPath) { this.data.metaSubPath = IBGIB_META_SUBPATH; }
191
+ if (!this.data.binSubPath) { this.data.binSubPath = IBGIB_BIN_SUBPATH; }
192
+ if (!this.data.dnaSubPath) { this.data.dnaSubPath = IBGIB_DNA_SUBPATH; }
193
+
194
+ // do nothing, allow falsy
195
+ if (this.data.longSubPath === undefined) { this.data.longSubPath = IBGIB_LONG_SUBPATH; }
196
+ if (this.data.longPathLength === undefined) { this.data.longPathLength = INDEXED_DB_LONG_PATH_LENGTH; }
197
+ if (this.data.mitigateLongPaths === undefined) { this.data.mitigateLongPaths = false; }
198
+
199
+ this.ib = getSpaceIb({ space: this, classname: this.data!.classname });
200
+ this.gib = await getGib({ ibGib: this });
201
+ } catch (error) {
202
+ console.error(`${lc} ${extractErrorMsg(error)}`);
203
+ } finally {
204
+ if (logalot) { console.log(`${lc} complete.`); }
205
+ }
206
+ }
207
+
208
+ protected async putFile({
209
+ ibGib,
210
+ isDna,
211
+ }: PutIbGibFileOpts): Promise<PutIbGibFileResult> {
212
+ const lc = `${this.lc}[${this.putFile.name}]`;
213
+
214
+ let result: PutIbGibFileResult = {};
215
+
216
+ try {
217
+ if (!ibGib) { throw new Error(`ibGib required. (E: bb41678a0e46f60782db4641e7355a24)`) };
218
+
219
+ const thisData = this.data!;
220
+ // await this.ensureAllDirsExist();
221
+ let path: string = "";
222
+ let data: any = "";
223
+
224
+ const addr = getIbGibAddr({ ibGib });
225
+ const isBin = isBinary({ addr });
226
+ path = await this.buildPath({
227
+ addr, isDna: isDna ?? false, isBin, ensureMetaStonePaths: true,
228
+ });
229
+ // await this.ensureDirsImpl([pathUtils.dirname(path)]); // needed in web fs space?
230
+
231
+ let fullPath = pathUtils.join(thisData.baseDir, path);
232
+
233
+ if (logalot) { console.log(`${lc} fullPath: ${fullPath} (I: accfac2f2ee924da0184e241c2408624)`); }
234
+ if (logalot) { console.log(`${lc} path: ${path}, directory: ${thisData.baseDir}, thisData.encoding: ${thisData.encoding} (I: 498dd4e293f7da0eef4b3dea2ee32524)`); }
235
+
236
+
237
+ let encoding: string | undefined;
238
+
239
+ if (!isBin) {
240
+ // not binary - most ibgibs will not be bins.
241
+
242
+ // we only want to persist the ibGib protocol properties (not
243
+ // any functions or other properties that might exist on the
244
+ // incoming ibGib arg)
245
+ const bareIbGib = toDto({ ibGib })
246
+ data = JSON.stringify(bareIbGib);
247
+
248
+ encoding = thisData.encoding || 'utf8';
249
+ await writeFile(fullPath, data, encoding as BufferEncoding);
250
+ } else {
251
+ // binary
252
+ const binIbGib = ibGib as BinIbGib_V1;
253
+ data = binIbGib.data;
254
+ if (!data) { throw new Error(`(UNEXPECTED) binIbGib.data falsy? I'm trying to have data always populated for bin ibgibs even if it is an empty Uint8Array. (E: 861489baffc294baf7b463333f389824)`); }
255
+ await writeFile(fullPath, data);
256
+ }
257
+
258
+ result.success = true;
259
+ } catch (error) {
260
+ const errorMsg = `${lc} ${extractErrorMsg(error)}`;
261
+ console.error(errorMsg);
262
+ result.errorMsg = errorMsg;
263
+ }
264
+
265
+ return result;
266
+ }
267
+
268
+ protected async deleteFile({
269
+ addr,
270
+ isDna,
271
+ }: DeleteIbGibFileOpts): Promise<DeleteIbGibFilesResult> {
272
+ const lc = `${this.lc}[${this.deleteFile.name}]`;
273
+
274
+ const result: DeleteIbGibFilesResult = {};
275
+
276
+ try {
277
+ if (!addr) { throw new Error(`addr required. (E: a2ca4b3ae9bb79891fd86c98af3de624)`) };
278
+
279
+ if (!this.data) { throw new Error(`this.data required (E: 6b6163a397c42adf5b03ca5117c0d624)`); }
280
+ const data = this.data;
281
+ let path: string = "";
282
+
283
+ if (!isBinary({ addr })) {
284
+ // regular ibGib
285
+ path = await this.buildPath({
286
+ addr, isDna: isDna ?? false, ensureMetaStonePaths: true,
287
+ });
288
+ } else {
289
+ path = await this.buildPath({
290
+ addr, isDna: false, isBin: true, ensureMetaStonePaths: false,
291
+ });
292
+ }
293
+ if (logalot) { console.log(`${lc} path: ${path}, directory: ${data.baseDir}`); }
294
+ const fullPath = pathUtils.join(this.data.baseDir, path);
295
+ await rm(fullPath, { force: true });
296
+ if (logalot) { console.log(`${lc} deleted. path: ${path}`); }
297
+ result.success = true;
298
+ } catch (error) {
299
+ const errorMsg = `${lc} ${extractErrorMsg(error)}`;
300
+ if (!errorMsg.includes('File does not exist')) {
301
+ console.error(errorMsg);
302
+ } else {
303
+ if (logalot) { console.log(`${lc} attempted to delete non-existent file. ${errorMsg} (I: 839257fb70d62a3273335d8536b15724)`); }
304
+ }
305
+ result.errorMsg = errorMsg;
306
+ }
307
+
308
+ return result;
309
+ }
310
+
311
+ protected async getFile({
312
+ addr,
313
+ isDna,
314
+ }: GetIbGibFileOpts): Promise<GetIbGibFileResult> {
315
+ let lc = `${this.lc}[${this.getFile.name}(${addr})]`;
316
+
317
+ const result: GetIbGibFileResult = {};
318
+ try {
319
+ if (logalot) { console.log(`${lc} starting... (I: 07e34fff2d9c7108dd79e5d6f93ed724)`); }
320
+ if (!addr) { throw new Error(`addr required`) };
321
+
322
+ const data = this.data!;
323
+ const { ib } = getIbAndGib({ ibGibAddr: addr });
324
+
325
+ const addrIsBin = isBinary({ addr });
326
+ const knownTransformIbs = ['fork', 'mut8', 'rel8', 'plan']; // hack/kluge here
327
+ const addrMightBeDna =
328
+ knownTransformIbs.some(x => x === ib || x.startsWith(ib + ' '));
329
+
330
+ const pathsToLook: string[] = [];
331
+
332
+ if (isDna || addrMightBeDna) {
333
+ pathsToLook.push(await this.buildPath({
334
+ addr, isDna: true, ensureMetaStonePaths: false
335
+ }));
336
+ } else if (addrIsBin) {
337
+ pathsToLook.push(await this.buildPath({
338
+ addr, isDna: false, isBin: true, ensureMetaStonePaths: false
339
+ }));
340
+ }
341
+
342
+ // always look in the main location as a last resort
343
+ pathsToLook.push(await this.buildPath({
344
+ addr, isDna: false, ensureMetaStonePaths: false
345
+ }));
346
+
347
+ // ...(pretend shortened as well as an absolute last last resort)
348
+ if (!isMetaStone({ addr })) {
349
+ pathsToLook.push(await this.buildPath({
350
+ addr, isDna: false, ensureMetaStonePaths: false,
351
+ pretendItsALongPath: true,
352
+ }));
353
+ }
354
+
355
+ // this is ugly atow (02/2024) because i'm struggling a bit of
356
+ // changing bin ibgibs to actually support binaries. i apologize.
357
+
358
+ if (!addrIsBin) {
359
+ // non-bin ibGib(s) retrieved (most ibgibs are non-bin)
360
+ let resRead: any = null;
361
+ for (const tryPath of pathsToLook) {
362
+ const x = await tryRead({ path: tryPath, directory: data.baseDir, encoding: data.encoding });
363
+ if (x) { resRead = x; break; }
364
+ }
365
+ if (resRead) {
366
+ result.ibGib = JSON.parse(resRead) as IbGib_V1;
367
+ } else {
368
+ if (logalot) { console.log(`${lc} paths not found: ${JSON.stringify(pathsToLook)} (I: 52287b4a0fb3e3fa5f893fa92bc15324)`); }
369
+ // will return success since it's not really an error, but ibgib
370
+ // will not be populated, indicating the addr was not found.
371
+ }
372
+ } else {
373
+ // bin
374
+ let resRead: FileDataInfo | null = null;
375
+ let { binEncoding, binHash } = parseBinIb({ addr });
376
+ if (binHash === '0') {
377
+ // special case: if the binHash is 0, then it is an empty file.
378
+ const { ib, gib } = getIbAndGib({ ibGibAddr: addr });
379
+ result.ibGib = {
380
+ ib,
381
+ gib,
382
+ data: new Uint8Array(0),
383
+ // data: '',
384
+ // rawData: Buffer.from([]),
385
+ } as BinIbGib_V1;
386
+ } else {
387
+ for (const tryPath of pathsToLook) {
388
+ const x = await tryRead_bin({
389
+ path: tryPath, directory: data.baseDir, encoding: binEncoding ?? data.encoding,
390
+ });
391
+ if (x) { resRead = x; break; }
392
+ }
393
+
394
+ if (resRead) {
395
+ // all bins are buffers
396
+ const { ib, gib } = getIbAndGib({ ibGibAddr: addr });
397
+ const binIbGib: BinIbGib_V1 = {
398
+ ib, gib, data: resRead.dataBuffer,
399
+ // rawData: resRead.dataBuffer,
400
+ }
401
+ result.ibGib = binIbGib;
402
+ } else {
403
+ if (logalot) { console.log(`${lc} paths not found: ${JSON.stringify(pathsToLook)} (I: 9116435fa6198d1e2e40ed4467e72924)`); }
404
+ // will return success since it's not really an error, but ibgib
405
+ // will not be populated, indicating the addr was not found.
406
+ }
407
+ }
408
+ }
409
+
410
+ result.success = true;
411
+ } catch (error) {
412
+ const errorMsg = `${lc} ${extractErrorMsg(error)}`;
413
+ console.error(errorMsg);
414
+ result.errorMsg = errorMsg;
415
+ } finally {
416
+ if (logalot) { console.log(`${lc} complete. (I: d648c9b72261e509dac1e36279f8eb24)`); }
417
+ }
418
+
419
+ return result;
420
+ }
421
+
422
+ protected async ensurePermissions(): Promise<boolean> {
423
+ const lc = `${this.lc}[${this.ensurePermissions.name}]`;
424
+ if (logalot) { console.log(`${lc} always returns true in base class (I: eaa254b35aadb047b2c4af58f9ec6f24)`); }
425
+ return true;
426
+ }
427
+
428
+ protected async ensureAllDirsExist(): Promise<void> {
429
+ const lc = `${this.lc}[${this.ensureAllDirsExist.name}]`;
430
+ try {
431
+ console.warn(`${lc} does nothing in web filesystem space. do I need to do anything in this concrete class? (W: 6f71512c4b32df68e483cf54e17e3124)`);
432
+ // if (logalot) { console.log(`${lc} starting... (I: d8ed5f71c09fc6124c36cd688edd8b24)`); }
433
+
434
+ // if (!this.data) { throw new Error(`this.data required (E: 48d1c9d922377d6c8693fd1b0a13e224)`); }
435
+ // if (!this.data.uuid) { throw new Error(`this.data.uuid required (E: 0257b3a432121db943f5e13e3c6b2d24)`); }
436
+
437
+ // const data = this.data!;
438
+
439
+ // /** these are the paths we're ensuring exist. all ibgibs are stored here. */
440
+ // const paths = [
441
+ // data.baseSubPath, // = 'ibgib';
442
+ // data.baseSubPath + '/' + data.spaceSubPath,
443
+ // data.baseSubPath + '/' + data.spaceSubPath + '/' + data.ibgibsSubPath,
444
+ // data.baseSubPath + '/' + data.spaceSubPath + '/' + data.metaSubPath,
445
+ // data.baseSubPath + '/' + data.spaceSubPath + '/' + data.binSubPath,
446
+ // data.baseSubPath + '/' + data.spaceSubPath + '/' + data.dnaSubPath,
447
+ // ];
448
+
449
+ // if (data.mitigateLongPaths) {
450
+ // paths.push(data.baseSubPath + '/' + data.spaceSubPath + '/' + data.longSubPath);
451
+ // }
452
+
453
+ // await this.ensureDirsImpl(paths);
454
+ } catch (error) {
455
+ console.error(`${lc} ${extractErrorMsg(error)}`);
456
+ throw error;
457
+ } finally {
458
+ if (logalot) { console.log(`${lc} complete.`); }
459
+ }
460
+ }
461
+
462
+ /**
463
+ * actually executes the ensure functionality for given `paths`. If they
464
+ * don't exist, then this tries to make the dirs.
465
+ * @param paths to ensure exist.
466
+ */
467
+ protected async ensureDirsImpl(paths: string[]): Promise<void> {
468
+ const lc = `${this.lc}[${this.ensureDirsImpl.name}]`;
469
+ try {
470
+ console.warn(`${lc} not implemented in this web-based class. do i need this? (W: 0c50f3eb750f11108e7cd2a1263d8124)`);
471
+
472
+ // if (logalot) { console.log(`${lc} starting... (I: 1edfc39f91edea3e92db02e95c740c24)`); }
473
+ // if (paths.length === 0) {
474
+ // console.warn(`${lc} paths empty? returning early. (W: 0722ea869cad228463151cde8ee07f24)`)
475
+ // return; /* <<<< returns early */
476
+ // }
477
+
478
+ // const directory = this.data!.baseDir;
479
+
480
+ // const getPathKey = (p: string) => { return directory.toString() + '/' + p; }
481
+
482
+ // let allExist = paths.every(p => this.pathExistsMap[getPathKey(p)]);
483
+ // if (allExist) {
484
+ // if (logalot) { console.log(`${lc} allExist (I: 00a417b53878e2fd77bce374da2aae24)`); }
485
+ // return; /* <<<< returns early */
486
+ // }
487
+
488
+ // const permitted = await this.ensurePermissions();
489
+ // if (!permitted) {
490
+ // console.error(`${lc} permission not granted.`);
491
+ // return; /* <<<< returns early */
492
+ // }
493
+
494
+ // for (let i = 0; i < paths.length; i++) {
495
+ // const path = paths[i];
496
+ // const lc2 = `${lc}[(path: ${path}, directory: ${directory})]`;
497
+ // const fullPath = pathUtils.join(directory, path);
498
+
499
+ // // check if we've already ensured for this path
500
+ // const pathExistsKey = getPathKey(path);
501
+ // let exists = this.pathExistsMap[pathExistsKey] || false;
502
+
503
+ // if (!exists) {
504
+ // // we've not checked this path (or it didn't exist)
505
+ // try {
506
+ // exists = existsSync(fullPath);
507
+ // this.pathExistsMap[pathExistsKey] = exists;
508
+ // } catch (error) {
509
+ // if (logalot) { console.log(`${lc2} Did not exist`); }
510
+ // }
511
+ // }
512
+
513
+ // if (!exists) {
514
+ // // try full path
515
+ // if (logalot) { console.log(`${lc2} creating...`); }
516
+ // try {
517
+ // mkdirSync(fullPath, { recursive: true });
518
+ // exists = existsSync(fullPath);
519
+ // if (logalot) { console.log(`${lc} exists: ${exists}`); }
520
+ // this.pathExistsMap[pathExistsKey] = exists;
521
+ // } catch (error) {
522
+ // if (logalot) { console.log(`${lc2} Error creating. Trying next`); }
523
+ // } finally {
524
+ // if (logalot) { console.log(`${lc2} complete.`); }
525
+ // }
526
+ // }
527
+ // }
528
+
529
+ } catch (error) {
530
+ console.error(`${lc} ${extractErrorMsg(error)}`);
531
+ throw error;
532
+ } finally {
533
+ if (logalot) { console.log(`${lc} complete.`); }
534
+ }
535
+ }
536
+
537
+ /** */
538
+ protected async getMetaStoneAddrs({
539
+ ibGibAddr,
540
+ tjpGib,
541
+ fnFilterIb,
542
+ }: {
543
+ /**
544
+ * addr of ibGib for which we're getting the metastones.
545
+ */
546
+ ibGibAddr: IbGibAddr,
547
+ /**
548
+ * tjpGib of the metastone's target ibgib
549
+ */
550
+ tjpGib: Gib,
551
+ fnFilterIb?: (ib: Ib) => boolean,
552
+ }): Promise<string[]> {
553
+ const lc = `${this.lc}[${this.getMetaStoneAddrs.name}]`;
554
+ try {
555
+ if (logalot) { console.log(`${lc} starting... (I: f9da77d2c1920dc33efabee27847d624)`); }
556
+
557
+ // first build the path with the given tjpGib
558
+ let pathSansBaseDir = await this.buildPath({
559
+ addr: ibGibAddr, ensureMetaStonePaths: false, isDna: false,
560
+ addrIsForAMetaStone: true,
561
+ });
562
+ let fullPath = pathUtils.join(this.data!.baseDir, pathSansBaseDir);
563
+ if (logalot) { console.log(`${lc} fullPath: ${fullPath} (I: 7d69faa728f178ef5261291b4a44a424)`); }
564
+
565
+ // the given ibgib's containing dir is the one that should contain
566
+ // the metastones.
567
+ let gibInfo = getGibInfo({ ibGibAddr });
568
+
569
+ let containingDir = !!gibInfo.tjpGib ?
570
+ pathUtils.dirname(pathUtils.join(fullPath, '..')) :
571
+ pathUtils.dirname(fullPath);
572
+ if (logalot) { console.log(`${lc} containingDir: ${containingDir} (I: 867174fbd4b3640d023dce741208b624)`); }
573
+
574
+ // iterate through the files for metastones.
575
+ const fnFilter = fnFilterIb ?
576
+ (s: string) => s.startsWith(META_STONE_ATOM) && fnFilterIb(s) :
577
+ (s: string) => s.startsWith(META_STONE_ATOM);
578
+ let filenames: string[] = [];
579
+ try {
580
+ if (logalot) { console.log(`${lc} calling readdir(containingDir) (I: 9adcee17e5b5121a36f3d6e29d3fb224)`); }
581
+ filenames = await readdir(containingDir, {
582
+ recursive: false,
583
+ withFileTypes: false,
584
+ });
585
+ } catch (error) {
586
+ let emsg = extractErrorMsg(error);
587
+ if (!emsg.includes('ENOENT')) { // no such file or directory
588
+ console.warn(`${lc} readdir error did not contain ENOENT...not sure what this is...maybe a different OS no dir exists emsg? Treating this as if dir does not exist. (W: 4fee7ed52dc4c987559eead57c89f724)`);
589
+ } else {
590
+ if (logalot) { console.log(`${lc} readdir errors: ${extractErrorMsg(error)} (I: 95d041a148844dd09700875a1a82c424)`); }
591
+ }
592
+ filenames = [];
593
+ }
594
+ if (filenames.length === 0) {
595
+ if (logalot) { console.log(`${lc} filenames: [empty]. no metastones found. (I: b42abb33f7636b49c195b36fca6dce24)`); }
596
+ return []; /* <<<< returns early */
597
+ }
598
+ if (logalot) { console.log(`${lc} filenames: ${filenames} (I: 18e77f7451ce57bbbccddf9bef768624)`); }
599
+
600
+ /**
601
+ * atow (11/2023) extensions are hard-coded to ".json",
602
+ */
603
+ const dotExt = '.json';
604
+ const dotExtLength = 5;
605
+ const metaStoneAddrs = filenames
606
+ .filter(x => {
607
+ // some filenames may be adjusted and not the full ibs.
608
+ // however, the metastones are never shortened (atow
609
+ // 11/2023), so those that don't have the delimiter will be
610
+ // stored in ibIsh but they should get filtered out.
611
+ const [ibIsh, gibPlusExt] = x.split(IBGIB_DELIMITER);
612
+ return !!gibPlusExt?.endsWith(dotExt) && fnFilter(ibIsh);
613
+ }).map(addrPlusExt => {
614
+ // strip the extension
615
+ return addrPlusExt.substring(0, addrPlusExt.length - dotExtLength);
616
+ }).filter(metaStoneAddr => {
617
+ // atow (11/2023) I'm not sure what other metastones are
618
+ // going to be in this dir, so I'm saying it has to
619
+ // explicitly contain the tjpGib.
620
+ return isMetaStone({ addr: metaStoneAddr }) && metaStoneAddr.includes(tjpGib);
621
+ });
622
+
623
+ if (logalot) { console.log(`${lc} filtered/mapped filenames -> metaStoneAddrs: ${metaStoneAddrs} (I: d0396296e7de1167d226f3c84a283424)`); }
624
+
625
+ // do some basic validation
626
+ // throw (which could cripple in the future...), or silent fail
627
+ // (which could lead to corrupt data)... hmm...going to throw for
628
+ // now.
629
+ for (let i = 0; i < metaStoneAddrs.length; i++) {
630
+ const metaStoneAddr = metaStoneAddrs[i];
631
+ let basicErrors = validateIbGibAddr({ addr: metaStoneAddr });
632
+ if ((basicErrors ?? []).length > 0) {
633
+ throw new Error(`(UNEXPECTED) invalid metastone found? metaStoneAddr (${metaStoneAddr}) had basic validation errors: ${basicErrors!.join('|')} (E: c41e8797d56833c55e32d5b4c8f79524)`);
634
+ }
635
+ const { ib } = getIbAndGib({ ibGibAddr: metaStoneAddr });
636
+ let metaStoneErrors = validateCommonMetaStoneIb({ ib });
637
+ if (metaStoneErrors.length > 0) {
638
+ throw new Error(`(UNEXPECTED) metaStoneIb had validation errors? metaStoneErrors: ${metaStoneErrors.join('|')} (E: 28ab913c2d7376843e7d94584fc94324)`);
639
+ }
640
+ }
641
+
642
+ // all good, return 'em!
643
+ if (logalot) { console.log(`${lc} returning metaStoneAddrs: ${metaStoneAddrs} (I: 491d7c31691e4938eb9d087f5854fa24)`); }
644
+ return metaStoneAddrs;
645
+ } catch (error) {
646
+ console.error(`${lc} ${extractErrorMsg(error)}`);
647
+ throw error;
648
+ } finally {
649
+ if (logalot) { console.log(`${lc} complete.`); }
650
+ }
651
+ }
652
+ }
653
+ export async function convertData({
654
+ data,
655
+ encoding,
656
+ }: {
657
+ data: string,
658
+ encoding: any,
659
+ }): Promise<any> {
660
+ const lc = `[${convertData.name}]`;
661
+ try {
662
+ if (logalot) { console.log(`${lc} starting... (I: 9de827dcf4715d3f1a81e6dd9ee9ff24)`); }
663
+
664
+ } catch (error) {
665
+ console.error(`${lc} ${extractErrorMsg(error)}`);
666
+ throw error;
667
+ } finally {
668
+ if (logalot) { console.log(`${lc} complete.`); }
669
+ }
670
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "declaration": true, /* Generates corresponding '.d.ts' file. */
5
+ "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
6
+ "sourceMap": true, /* Generates corresponding '.map' file. */
7
+ "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
8
+ "composite": true, /* Enable project compilation */
9
+ "outDir": "./dist", /* Redirect output structure to the directory. */
10
+ "module": "ESNext", /* https://www.typescriptlang.org/docs/handbook/esm-node.html */
11
+ },
12
+ "exclude": [
13
+ "./node_modules",
14
+ "**/*.spec.mts",
15
+ "./dist/**/*"
16
+ ]
17
+ }