vivth 1.4.9 → 1.5.0

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 (379) hide show
  1. package/README.md +6060 -2037
  2. package/README.src.md +22 -14
  3. package/bun.lock +154 -194
  4. package/dev/auto/.src.ignore +25 -0
  5. package/dev/auto-doc.mjs +137 -0
  6. package/generated/types/generated/vivth/exports/all.d.mts +145 -0
  7. package/generated/types/generated/vivth/exports/neutral.d.mts +105 -0
  8. package/generated/types/generated/vivth/exports/node.d.mts +40 -0
  9. package/generated/types/src/bundler/CompileAS.d.mts +30 -0
  10. package/generated/types/src/bundler/CompileJS.d.mts +109 -0
  11. package/{types → generated/types}/src/bundler/CreateESPlugin.d.mts +1 -1
  12. package/{types → generated/types}/src/bundler/EsBundler.d.mts +9 -7
  13. package/generated/types/src/bundler/FSAnalyzer.d.mts +58 -0
  14. package/generated/types/src/bundler/FSasar.bundled.d.mts +28 -0
  15. package/generated/types/src/bundler/FSasar.d.mts +51 -0
  16. package/generated/types/src/bundler/FileSelfMapper.d.mts +137 -0
  17. package/generated/types/src/bundler/JSDirMapper.d.mts +128 -0
  18. package/generated/types/src/bundler/RunWatchThenCompileJSOnSafeExit.d.mts +63 -0
  19. package/generated/types/src/bundler/adds/BrowserExternals.d.mts +21 -0
  20. package/generated/types/src/bundler/adds/CreateTransform.d.mts +26 -0
  21. package/generated/types/src/bundler/adds/LastEditedUnix.d.mts +5 -0
  22. package/generated/types/src/bundler/adds/NodeModuleList.d.mts +15 -0
  23. package/generated/types/src/bundler/adds/PathFSBundles.bundled.d.mts +25 -0
  24. package/generated/types/src/bundler/adds/PathFSBundles.d.mts +48 -0
  25. package/generated/types/src/bundler/adds/PathFSDir.bundled.d.mts +30 -0
  26. package/generated/types/src/bundler/adds/PathFSDir.d.mts +48 -0
  27. package/generated/types/src/bundler/adds/PathFSFile.bundled.d.mts +25 -0
  28. package/generated/types/src/bundler/adds/PathFSFile.d.mts +40 -0
  29. package/{types → generated/types}/src/bundler/adds/ToBundledJSPlugin.d.mts +6 -6
  30. package/generated/types/src/bundler/adds/autoExternalize.d.mts +2 -0
  31. package/generated/types/src/bundler/adds/emptyBufferValue.d.mts +1 -0
  32. package/generated/types/src/bundler/adds/isModuleTheBundledVersion.d.mts +1 -0
  33. package/generated/types/src/bundler/adds/onEndEsBuildErrorLogger.d.mts +1 -0
  34. package/generated/types/src/bundler/adds/resolveJSDependencyPath.d.mts +1 -0
  35. package/generated/types/src/class/AwaitSignal.d.mts +48 -0
  36. package/generated/types/src/class/Console.d.mts +82 -0
  37. package/generated/types/src/class/DataLog.d.mts +25 -0
  38. package/generated/types/src/class/Derived.d.mts +74 -0
  39. package/generated/types/src/class/Effect.d.mts +213 -0
  40. package/{types → generated/types}/src/class/EnvSignal.d.mts +6 -2
  41. package/generated/types/src/class/EsWatcher.d.mts +36 -0
  42. package/{types → generated/types}/src/class/EventSignal.d.mts +39 -39
  43. package/generated/types/src/class/FSDirArchWatcher.d.mts +110 -0
  44. package/{types → generated/types}/src/class/FileSafe.d.mts +32 -16
  45. package/generated/types/src/class/ForEach.d.mts +57 -0
  46. package/generated/types/src/class/ForSignal.d.mts +63 -0
  47. package/generated/types/src/class/GetterSetter.d.mts +38 -0
  48. package/generated/types/src/class/JSONFileHandler.d.mts +50 -0
  49. package/{types → generated/types}/src/class/ListSignal.d.mts +49 -15
  50. package/{types → generated/types}/src/class/LitExp.d.mts +18 -18
  51. package/generated/types/src/class/ObjectSignal.d.mts +267 -0
  52. package/generated/types/src/class/Paths.d.mts +95 -0
  53. package/generated/types/src/class/Prettivy.d.mts +26 -0
  54. package/{types → generated/types}/src/class/QChannel.d.mts +24 -16
  55. package/generated/types/src/class/SafeExit.d.mts +69 -0
  56. package/{types → generated/types}/src/class/Setup.d.mts +29 -16
  57. package/{types → generated/types}/src/class/Signal.d.mts +29 -15
  58. package/generated/types/src/class/SignalCollection.d.mts +96 -0
  59. package/{types → generated/types}/src/class/WalkThrough.d.mts +4 -19
  60. package/generated/types/src/class/WorkerMainThread.bundled.d.mts +83 -0
  61. package/{types → generated/types}/src/class/WorkerMainThread.d.mts +33 -39
  62. package/{types → generated/types}/src/class/WorkerThread.d.mts +11 -5
  63. package/{types → generated/types}/src/common/Base64URL.d.mts +2 -1
  64. package/generated/types/src/common/Base64URLFromFile.d.mts +20 -0
  65. package/generated/types/src/common/BundledV.bundled.d.mts +3 -0
  66. package/generated/types/src/common/BundledV.d.mts +36 -0
  67. package/{types → generated/types}/src/common/CreateStringID.d.mts +5 -4
  68. package/generated/types/src/common/EnvMode.d.mts +79 -0
  69. package/generated/types/src/common/FactoryKey.d.mts +9 -0
  70. package/generated/types/src/common/Preferrence.d.mts +25 -0
  71. package/{types → generated/types}/src/common/Trace.d.mts +1 -1
  72. package/{types → generated/types}/src/common/TracePath.d.mts +1 -1
  73. package/generated/types/src/common/VivthUnBundledCodeBlock.d.mts +6 -0
  74. package/generated/types/src/doc/JSautoDOC.d.mts +172 -0
  75. package/generated/types/src/doc/cleanPreserveTypedef.d.mts +1 -0
  76. package/{types/src/doc/parsedFile.d.mts → generated/types/src/doc/parsedFileForDOC.d.mts} +56 -27
  77. package/generated/types/src/function/ClearRequireCache.d.mts +1 -0
  78. package/{types → generated/types}/src/function/CreateImmutable.d.mts +5 -4
  79. package/{types → generated/types}/src/function/EventCheck.d.mts +3 -1
  80. package/{types → generated/types}/src/function/EventObject.d.mts +2 -6
  81. package/generated/types/src/function/ForInAsync.d.mts +36 -0
  82. package/generated/types/src/function/ForInSync.d.mts +36 -0
  83. package/generated/types/src/function/ForOfAsync.d.mts +25 -0
  84. package/generated/types/src/function/ForOfSync.d.mts +36 -0
  85. package/generated/types/src/function/GetBufferFromRelativePath.d.mts +15 -0
  86. package/generated/types/src/function/GetFilesFromDir.d.mts +14 -0
  87. package/generated/types/src/function/GetMaxFilenameLength.d.mts +9 -0
  88. package/generated/types/src/function/GetModuleEsbuildPlatform.d.mts +13 -0
  89. package/{types → generated/types}/src/function/GetNamedImportAlias.d.mts +1 -1
  90. package/generated/types/src/function/GetRuntime.d.mts +2 -0
  91. package/generated/types/src/function/InstantiateAssemblyScript.d.mts +15 -0
  92. package/{types → generated/types}/src/function/IsAsync.d.mts +1 -1
  93. package/generated/types/src/function/IsInstanceOf.d.mts +25 -0
  94. package/generated/types/src/function/IsSameFile.d.mts +16 -0
  95. package/generated/types/src/function/IsStringLooksLikeAPath.d.mts +16 -0
  96. package/generated/types/src/function/IsTypeOf.d.mts +25 -0
  97. package/{types → generated/types}/src/function/LazyFactory.d.mts +9 -10
  98. package/generated/types/src/function/MonkeyPatch.d.mts +33 -0
  99. package/generated/types/src/function/NewAnimationTimeline.d.mts +24 -0
  100. package/generated/types/src/function/NewChainable.d.mts +35 -0
  101. package/generated/types/src/function/NewDynamicsExport.d.mts +49 -0
  102. package/generated/types/src/function/NewObjectWrapper.d.mts +10 -0
  103. package/generated/types/src/function/ObjectRegistrar.d.mts +17 -0
  104. package/generated/types/src/function/ParseSQLFile.d.mts +25 -0
  105. package/generated/types/src/function/PipeAsync.d.mts +19 -0
  106. package/generated/types/src/function/PipeSync.d.mts +17 -0
  107. package/generated/types/src/function/SafeImport.d.mts +21 -0
  108. package/generated/types/src/function/TemplateLiteral.d.mts +23 -0
  109. package/{types → generated/types}/src/function/Timeout.d.mts +1 -1
  110. package/{types → generated/types}/src/function/Tries.d.mts +4 -4
  111. package/{types → generated/types}/src/function/TryAsync.d.mts +2 -2
  112. package/{types → generated/types}/src/function/TryNew.d.mts +1 -1
  113. package/generated/types/src/function/TsToMjs.d.mts +27 -0
  114. package/generated/types/src/function/UniqueFSTempName.d.mts +9 -0
  115. package/generated/types/src/function/errorToMessage.d.mts +5 -0
  116. package/generated/types/src/neinth/VivthyNeinth.d.mts +202 -0
  117. package/generated/types/src/typehints/ArrayToKeys.d.mts +23 -0
  118. package/generated/types/src/typehints/AssemblyScriptExportsType.d.mts +4 -0
  119. package/generated/types/src/typehints/AssemblyScriptLoaderInstantiate.d.mts +4 -0
  120. package/generated/types/src/typehints/AutoDocASOptions.d.mts +15 -0
  121. package/generated/types/src/typehints/ChainableType.d.mts +3 -0
  122. package/generated/types/src/typehints/ComponentDecorator_Constructor.d.mts +3 -0
  123. package/generated/types/src/typehints/ConsoleAdditionalSettingType.d.mts +3 -0
  124. package/generated/types/src/typehints/Decorator.d.mts +11 -0
  125. package/generated/types/src/typehints/DecoratorMonkeyPatch.d.mts +15 -0
  126. package/{types/src/types → generated/types/src/typehints}/DevTestCB.d.mts +2 -2
  127. package/generated/types/src/typehints/EnvModeType.d.mts +4 -0
  128. package/generated/types/src/typehints/ListArg.d.mts +4 -0
  129. package/generated/types/src/typehints/MonkeyPatchedType.d.mts +1 -0
  130. package/generated/types/src/typehints/ParametersFollowingN.d.mts +13 -0
  131. package/generated/types/src/typehints/PrefixedKeysOf.d.mts +1 -0
  132. package/generated/types/src/typehints/Runtime.d.mts +4 -0
  133. package/generated/types/src/typehints/SafeImportReturnType.d.mts +1 -0
  134. package/generated/types/src/typehints/StylePropRefType.d.mts +2 -0
  135. package/generated/types/src/typehints/TemplateLiteralValueHandler.d.mts +10 -0
  136. package/generated/types/src/typehints/VLifecycleCallbacks.d.mts +6 -0
  137. package/generated/types/src/typehints/VivthCleanup.d.mts +12 -0
  138. package/generated/types/src/web/BrowserDirMapper.d.mts +70 -0
  139. package/generated/types/src/web/EnsureValidTag.d.mts +7 -0
  140. package/generated/types/src/web/ViteAddDynamics.d.mts +28 -0
  141. package/generated/types/src/web/ViteGetAllHTMLFile.d.mts +9 -0
  142. package/generated/types/src/web/WC_extendsA.d.mts +135 -0
  143. package/generated/types/src/web/WC_extendsB.d.mts +135 -0
  144. package/generated/types/src/web/bindings/WC_StyleProp_bind.d.mts +42 -0
  145. package/generated/types/src/web/bindings/WC_createElement_bind.d.mts +51 -0
  146. package/generated/types/src/web/bindings/WC_createNamedSlot.d.mts +26 -0
  147. package/generated/types/src/web/bindings/WC_litRender_bind.d.mts +20 -0
  148. package/generated/types/src/web/bindings/WC_litStyleMap.d.mts +7 -0
  149. package/generated/types/src/web/common/CSS.d.mts +23 -0
  150. package/generated/types/src/web/common/E.d.mts +41 -0
  151. package/generated/types/src/web/common/NewStyleSheetAsync.d.mts +15 -0
  152. package/generated/types/src/web/common/NewStyleSheetSync.d.mts +15 -0
  153. package/generated/types/src/web/common/WC_TagName_type.d.mts +15 -0
  154. package/generated/types/src/web/signals/IsInViewPortSignal.d.mts +52 -0
  155. package/generated/types/src/web/signals/ObserverSignal.d.mts +32 -0
  156. package/generated/types/src/web/signals/WC_litRef.d.mts +26 -0
  157. package/generated/types/src/web/signals/WC_loopedSiblingsRef.d.mts +44 -0
  158. package/generated/vivth/exports/all.mjs +233 -0
  159. package/generated/vivth/exports/neutral.mjs +193 -0
  160. package/generated/vivth/exports/node.mjs +46 -0
  161. package/package.json +50 -14
  162. package/src/bundler/CompileAS.mjs +36 -0
  163. package/src/bundler/CompileJS.mjs +98 -171
  164. package/src/bundler/CreateESPlugin.mjs +1 -1
  165. package/src/bundler/EsBundler.mjs +38 -13
  166. package/src/bundler/FSAnalyzer.mjs +253 -0
  167. package/src/bundler/FSasar.bundled.mjs +128 -0
  168. package/src/bundler/FSasar.mjs +96 -0
  169. package/src/bundler/FileSelfMapper.mjs +491 -0
  170. package/src/bundler/JSDirMapper.mjs +528 -0
  171. package/src/bundler/RunWatchThenCompileJSOnSafeExit.mjs +129 -0
  172. package/src/bundler/adds/BrowserExternals.mjs +37 -0
  173. package/src/bundler/adds/CreateTransform.mjs +36 -0
  174. package/src/bundler/adds/LastEditedUnix.mjs +12 -0
  175. package/src/bundler/adds/NodeModuleList.mjs +33 -0
  176. package/src/bundler/adds/PathFSBundles.bundled.mjs +41 -0
  177. package/src/bundler/adds/PathFSBundles.mjs +91 -0
  178. package/src/bundler/adds/PathFSDir.bundled.mjs +53 -0
  179. package/src/bundler/adds/PathFSDir.mjs +100 -0
  180. package/src/bundler/adds/PathFSFile.bundled.mjs +40 -0
  181. package/src/bundler/adds/PathFSFile.mjs +85 -0
  182. package/src/bundler/adds/ToBundledJSPlugin.mjs +116 -55
  183. package/src/bundler/adds/autoExternalize.mjs +81 -0
  184. package/src/bundler/adds/emptyBufferValue.mjs +5 -0
  185. package/src/bundler/adds/isModuleTheBundledVersion.mjs +10 -0
  186. package/src/bundler/adds/onEndEsBuildErrorLogger.mjs +34 -0
  187. package/src/bundler/adds/resolveJSDependencyPath.mjs +17 -0
  188. package/src/class/AwaitSignal.mjs +119 -0
  189. package/src/class/Console.mjs +36 -14
  190. package/src/class/DataLog.mjs +29 -0
  191. package/src/class/Derived.mjs +67 -55
  192. package/src/class/Effect.mjs +270 -84
  193. package/src/class/EnvSignal.mjs +11 -8
  194. package/src/class/EsWatcher.mjs +60 -0
  195. package/src/class/EventSignal.mjs +46 -58
  196. package/src/class/FSDirArchWatcher.mjs +246 -0
  197. package/src/class/FileSafe.mjs +72 -24
  198. package/src/class/ForEach.mjs +78 -0
  199. package/src/class/ForSignal.mjs +115 -0
  200. package/src/class/GetterSetter.mjs +40 -0
  201. package/src/class/JSONFileHandler.mjs +90 -0
  202. package/src/class/ListSignal.mjs +68 -26
  203. package/src/class/LitExp.mjs +59 -36
  204. package/src/class/ObjectSignal.mjs +225 -0
  205. package/src/class/Paths.mjs +56 -20
  206. package/src/class/Prettivy.mjs +51 -0
  207. package/src/class/QChannel.mjs +48 -26
  208. package/src/class/SafeExit.mjs +156 -99
  209. package/src/class/Setup.mjs +28 -16
  210. package/src/class/Signal.mjs +50 -27
  211. package/src/class/SignalCollection.mjs +130 -0
  212. package/src/class/WalkThrough.mjs +6 -23
  213. package/src/class/{WorkerMainThreadBundled.mjs → WorkerMainThread.bundled.mjs} +61 -84
  214. package/src/class/WorkerMainThread.mjs +103 -102
  215. package/src/class/WorkerThread.mjs +24 -17
  216. package/src/common/Base64URL.mjs +6 -3
  217. package/src/common/Base64URLFromFile.mjs +17 -4
  218. package/src/common/BundledV.bundled.mjs +7 -0
  219. package/src/common/BundledV.mjs +45 -0
  220. package/src/common/CreateStringID.mjs +8 -7
  221. package/src/common/EnvMode.mjs +172 -0
  222. package/src/common/FactoryKey.mjs +11 -0
  223. package/src/common/Preferrence.mjs +27 -0
  224. package/src/common/Trace.mjs +1 -1
  225. package/src/common/TracePath.mjs +53 -3
  226. package/src/common/VivthUnBundledCodeBlock.mjs +8 -0
  227. package/src/doc/JSautoDOC.mjs +673 -284
  228. package/src/doc/cleanPreserveTypedef.mjs +27 -0
  229. package/src/doc/correctBeforeParse.mjs +57 -48
  230. package/src/doc/{parsedFile.mjs → parsedFileForDOC.mjs} +133 -120
  231. package/src/function/ClearRequireCache.mjs +33 -0
  232. package/src/function/CreateImmutable.mjs +40 -37
  233. package/src/function/EventCheck.mjs +5 -2
  234. package/src/function/EventObject.mjs +2 -6
  235. package/src/function/ForInAsync.mjs +76 -0
  236. package/src/function/ForInSync.mjs +87 -0
  237. package/src/function/ForOfAsync.mjs +61 -0
  238. package/src/function/ForOfSync.mjs +70 -0
  239. package/src/function/GetBufferFromRelativePath.mjs +25 -0
  240. package/src/function/GetFilesFromDir.mjs +49 -0
  241. package/src/function/GetMaxFilenameLength.mjs +32 -0
  242. package/src/function/GetModuleEsbuildPlatform.mjs +118 -0
  243. package/src/function/GetNamedImportAlias.mjs +2 -2
  244. package/src/function/GetRuntime.mjs +10 -14
  245. package/src/function/InstantiateAssemblyScript.mjs +22 -0
  246. package/src/function/IsAsync.mjs +1 -1
  247. package/src/function/IsInstanceOf.mjs +29 -0
  248. package/src/function/IsSameFile.mjs +41 -0
  249. package/src/function/IsStringLooksLikeAPath.mjs +20 -0
  250. package/src/function/IsTypeOf.mjs +27 -0
  251. package/src/function/IsTypeOf.mts +31 -0
  252. package/src/function/LazyFactory.mjs +25 -23
  253. package/src/function/MonkeyPatch.mjs +38 -0
  254. package/src/function/NewAnimationTimeline.mjs +55 -0
  255. package/src/function/NewChainable.mjs +69 -0
  256. package/src/function/NewDynamicsExport.mjs +312 -0
  257. package/src/function/NewObjectWrapper.mjs +14 -0
  258. package/src/function/ObjectRegistrar.mjs +23 -0
  259. package/src/function/ParseSQLFile.mjs +129 -0
  260. package/src/function/PipeAsync.mjs +30 -0
  261. package/src/function/PipeSync.mjs +28 -0
  262. package/src/function/SafeImport.mjs +77 -0
  263. package/src/function/TemplateLiteral.mjs +42 -23
  264. package/src/function/Timeout.mjs +4 -4
  265. package/src/function/Tries.mjs +22 -16
  266. package/src/function/TryAsync.mjs +3 -2
  267. package/src/function/TryNew.mjs +1 -1
  268. package/src/function/TsToMjs.mjs +184 -21
  269. package/src/function/UniqueFSTempName.mjs +33 -0
  270. package/src/function/errorToMessage.mjs +21 -0
  271. package/src/function/resolveErrorArray.mjs +15 -1
  272. package/src/neinth/VivthyNeinth.mjs +487 -0
  273. package/src/typehints/ArrayToKeys.mjs +17 -0
  274. package/src/typehints/ArrayToKeys.mts +31 -0
  275. package/src/typehints/AssemblyScriptExportsType.mjs +7 -0
  276. package/src/typehints/AssemblyScriptLoaderInstantiate.mjs +7 -0
  277. package/src/typehints/AutoDocASOptions.mjs +14 -0
  278. package/src/typehints/ChainableType.mjs +11 -0
  279. package/src/typehints/ComponentDecorator_Constructor.mjs +10 -0
  280. package/src/typehints/ConsoleAdditionalSettingType.mjs +6 -0
  281. package/src/typehints/Decorator.mjs +9 -0
  282. package/src/typehints/Decorator.mts +31 -0
  283. package/src/typehints/DecoratorMonkeyPatch.mjs +10 -0
  284. package/src/typehints/DecoratorMonkeyPatch.mts +43 -0
  285. package/src/{types → typehints}/DevTestCB.mjs +2 -2
  286. package/src/typehints/EnvModeType.mjs +6 -0
  287. package/src/{types → typehints}/ListArg.mjs +1 -1
  288. package/src/{types → typehints}/LitExpResultType.mjs +1 -1
  289. package/src/typehints/MonkeyPatchedType.mjs +13 -0
  290. package/src/typehints/ParametersFollowingN.mjs +8 -0
  291. package/src/typehints/ParametersFollowingN.mts +17 -0
  292. package/src/typehints/PrefixedKeysOf.mjs +9 -0
  293. package/src/typehints/Runtime.mjs +6 -0
  294. package/src/typehints/SafeImportReturnType.mjs +6 -0
  295. package/src/typehints/StylePropRefType.mjs +12 -0
  296. package/src/typehints/TemplateLiteralValueHandler.mjs +14 -0
  297. package/src/typehints/VLifecycleCallbacks.mjs +10 -0
  298. package/src/typehints/VivthCleanup.mjs +14 -0
  299. package/src/web/BrowserDirMapper.mjs +255 -0
  300. package/src/web/EnsureValidTag.mjs +5 -0
  301. package/src/web/EnsureValidTag.mts +10 -0
  302. package/src/web/ViteAddDynamics.mjs +34 -0
  303. package/src/web/ViteGetAllHTMLFile.mjs +97 -0
  304. package/src/web/WC_extendsA.mjs +330 -0
  305. package/src/web/WC_extendsB.mjs +332 -0
  306. package/src/web/bindings/WC_StyleProp_bind.mjs +70 -0
  307. package/src/web/bindings/WC_createElement_bind.mjs +95 -0
  308. package/src/web/bindings/WC_createNamedSlot.mjs +29 -0
  309. package/src/web/bindings/WC_litRender_bind.mjs +26 -0
  310. package/src/web/bindings/WC_litStyleMap.mjs +14 -0
  311. package/src/web/common/CSS.mjs +35 -0
  312. package/src/web/common/E.mjs +126 -0
  313. package/src/web/common/NewStyleSheetAsync.mjs +21 -0
  314. package/src/web/common/NewStyleSheetSync.mjs +21 -0
  315. package/src/web/common/WC_TagName_type.mjs +10 -0
  316. package/src/web/common/WC_TagName_type.mts +36 -0
  317. package/src/web/signals/IsInViewPortSignal.mjs +140 -0
  318. package/src/web/signals/ObserverSignal.mjs +93 -0
  319. package/src/web/signals/WC_litRef.mjs +61 -0
  320. package/src/web/signals/WC_loopedSiblingsRef.mjs +100 -0
  321. package/tsconfig.json +44 -41
  322. package/index.mjs +0 -91
  323. package/src/bundler/FSInline.mjs +0 -67
  324. package/src/bundler/FSInlineAnalyzer.mjs +0 -228
  325. package/src/bundler/FSInlineBundled.mjs +0 -38
  326. package/src/bundler/adds/externals.mjs +0 -8
  327. package/src/class/ListDerived.mjs +0 -42
  328. package/src/common/Dev.mjs +0 -134
  329. package/src/common/DevBundled.mjs +0 -5
  330. package/src/common/lazie.mjs +0 -3
  331. package/src/types/IsListSignal.mjs +0 -6
  332. package/src/types/Runtime.mjs +0 -6
  333. package/src/types/VivthDevCodeBlockStringType.mjs +0 -6
  334. package/types/index.d.mts +0 -58
  335. package/types/src/bundler/CompileJS.d.mts +0 -119
  336. package/types/src/bundler/FSInline.d.mts +0 -50
  337. package/types/src/bundler/FSInlineAnalyzer.d.mts +0 -37
  338. package/types/src/bundler/FSInlineBundled.d.mts +0 -22
  339. package/types/src/bundler/adds/externals.d.mts +0 -1
  340. package/types/src/class/Console.d.mts +0 -71
  341. package/types/src/class/Derived.d.mts +0 -98
  342. package/types/src/class/Effect.d.mts +0 -216
  343. package/types/src/class/ListDerived.d.mts +0 -38
  344. package/types/src/class/Paths.d.mts +0 -69
  345. package/types/src/class/SafeExit.d.mts +0 -103
  346. package/types/src/class/WorkerMainThreadBundled.d.mts +0 -83
  347. package/types/src/common/Base64URLFromFile.d.mts +0 -16
  348. package/types/src/common/Dev.d.mts +0 -68
  349. package/types/src/common/DevBundled.d.mts +0 -3
  350. package/types/src/common/lazie.d.mts +0 -1
  351. package/types/src/doc/JSautoDOC.d.mts +0 -83
  352. package/types/src/function/GetRuntime.d.mts +0 -2
  353. package/types/src/function/TemplateLiteral.d.mts +0 -22
  354. package/types/src/function/TsToMjs.d.mts +0 -23
  355. package/types/src/types/IsListSignal.d.mts +0 -4
  356. package/types/src/types/ListArg.d.mts +0 -4
  357. package/types/src/types/Runtime.d.mts +0 -4
  358. package/types/src/types/VivthDevCodeBlockStringType.d.mts +0 -4
  359. /package/{types → generated/types}/src/bundler/adds/pluginVivthBundle.d.mts +0 -0
  360. /package/{types → generated/types}/src/class/WorkerResult.d.mts +0 -0
  361. /package/{types → generated/types}/src/common/EventNameSpace.d.mts +0 -0
  362. /package/{types → generated/types}/src/common/eventObjects.d.mts +0 -0
  363. /package/{types → generated/types}/src/common/keys.d.mts +0 -0
  364. /package/{types → generated/types}/src/doc/correctBeforeParse.d.mts +0 -0
  365. /package/{types → generated/types}/src/function/TrySync.d.mts +0 -0
  366. /package/{types → generated/types}/src/function/resolveErrorArray.d.mts +0 -0
  367. /package/{types/src/types → generated/types/src/typehints}/AnyButUndefined.d.mts +0 -0
  368. /package/{types/src/types → generated/types/src/typehints}/ExtnameType.d.mts +0 -0
  369. /package/{types/src/types → generated/types/src/typehints}/LitExpKeyType.d.mts +0 -0
  370. /package/{types/src/types → generated/types/src/typehints}/LitExpResultType.d.mts +0 -0
  371. /package/{types/src/types → generated/types/src/typehints}/MutationType.d.mts +0 -0
  372. /package/{types/src/types → generated/types/src/typehints}/QCBFIFOReturn.d.mts +0 -0
  373. /package/{types/src/types → generated/types/src/typehints}/QCBReturn.d.mts +0 -0
  374. /package/src/{types → typehints}/AnyButUndefined.mjs +0 -0
  375. /package/src/{types → typehints}/ExtnameType.mjs +0 -0
  376. /package/src/{types → typehints}/LitExpKeyType.mjs +0 -0
  377. /package/src/{types → typehints}/MutationType.mjs +0 -0
  378. /package/src/{types → typehints}/QCBFIFOReturn.mjs +0 -0
  379. /package/src/{types → typehints}/QCBReturn.mjs +0 -0
@@ -0,0 +1,312 @@
1
+ // @ts-check
2
+
3
+ import { extname, join, relative } from 'node:path';
4
+
5
+ import { lookup } from 'mime-types';
6
+
7
+ import { FSDirArchWatcher } from '../class/FSDirArchWatcher.mjs';
8
+ import { TryAsync } from './TryAsync.mjs';
9
+ import { Console } from '../class/Console.mjs';
10
+ import { LastEditedUnix } from '../bundler/adds/LastEditedUnix.mjs';
11
+ import { ForEach } from '../class/ForEach.mjs';
12
+ import { Paths } from '../class/Paths.mjs';
13
+ import { ForOfSync } from './ForOfSync.mjs';
14
+ import { FileSafe } from '../class/FileSafe.mjs';
15
+ import { Prettivy } from '../class/Prettivy.mjs';
16
+
17
+ /**
18
+ * @description
19
+ * generate generator watcher to `Dynamics`;
20
+ * 1) `./dynamics`: directory;
21
+ * 2) `./dynamics/**[blank]/*`(except 3)): watched source for 3);
22
+ * 3) `./dynamics/Dynamics.mjs`: collection of `modules`|`css`|`commonFile`(with `mimeTypes`);
23
+ * - this module assumes [Paths](#paths) to be already instantiated;
24
+ * @param {Object} options
25
+ * @param {string} options.rootPath
26
+ * - relative path to pseudo root;
27
+ * @param {number} [options.debounce]
28
+ * @param {boolean} [options.useFetchForAssets]
29
+ * - default: `true`;
30
+ * >- non js file will be `fetch`ed;
31
+ * - `false`;
32
+ * >- will use `import` instead;
33
+ * >- useful for vite Plugin;
34
+ * @param {import('chokidar').ChokidarOptions} [options.chokidarOptions]
35
+ * @param {(normalizedPath:string)=>boolean} [options.eachFilter]
36
+ * @returns {ReturnType<typeof TryAsync<FSDirArchWatcher<{ handler: string; mime: string | false; lastEditedUnixValue: number; }>>>}
37
+ */
38
+ export function NewDynamicsExport(
39
+ /** */
40
+ { rootPath, useFetchForAssets = true, debounce, chokidarOptions, eachFilter },
41
+ ) {
42
+ const dynamicImports = 'Dynamics';
43
+ const pathDynamic = Paths.diskAbsolute(join(rootPath, 'vivth', dynamicImports.toLowerCase()));
44
+ const pathGeneratedDynamicMapped = Paths.normalize(join(pathDynamic, `${dynamicImports}.mjs`));
45
+ const jsPrettivy = new Prettivy(pathGeneratedDynamicMapped);
46
+ return TryAsync(async () => {
47
+ return new FSDirArchWatcher([pathDynamic], {
48
+ debounce,
49
+ chokidarOptions,
50
+ each: async (eventName, path, stats) => {
51
+ if (eachFilter && !eachFilter(path)) {
52
+ throw '';
53
+ }
54
+ if (path === pathGeneratedDynamicMapped) {
55
+ throw '';
56
+ }
57
+ switch (eventName) {
58
+ case 'add':
59
+ case 'change':
60
+ if (!stats?.isFile()) {
61
+ throw '';
62
+ }
63
+ break;
64
+ default:
65
+ throw '';
66
+ }
67
+ const extension = extname(path);
68
+ switch (extension) {
69
+ case '.mts':
70
+ case '.mjs':
71
+ return {
72
+ handler: 'importable',
73
+ mime: lookup(path),
74
+ lastEditedUnixValue: await LastEditedUnix(path),
75
+ };
76
+ case '.ts':
77
+ case '.js':
78
+ Console.warn({
79
+ path,
80
+ extension,
81
+ message: `BrowserDirMapper /dynamics/ doesn't handle '${extension}' file, use '.mts' or '.mjs' instead`,
82
+ });
83
+ throw ``;
84
+ case '.wasm':
85
+ Console.warn({
86
+ path,
87
+ extension,
88
+ message: `BrowserDirMapper /dynamics/ doesn't handle '${extension}' file`,
89
+ });
90
+ throw ``;
91
+ default:
92
+ let mime;
93
+ switch (extension) {
94
+ case '.sass':
95
+ case '.scss':
96
+ throw '';
97
+ default:
98
+ mime = lookup(path);
99
+ break;
100
+ }
101
+ return {
102
+ handler: 'fetchable',
103
+ mime,
104
+ lastEditedUnixValue: await LastEditedUnix(path),
105
+ };
106
+ }
107
+ },
108
+ full: async ({ array }) => {
109
+ /**
110
+ * @type {string[]}
111
+ */
112
+ const content = [];
113
+ /**
114
+ * @type {Map<string, string>}
115
+ */
116
+ const types = new Map();
117
+ /**
118
+ * @type {string[]}
119
+ */
120
+ const cssList = [];
121
+ /**
122
+ * @type {string[]}
123
+ */
124
+ const withMimeNotCSS = [];
125
+ /**
126
+ * @type {string[]}
127
+ */
128
+ const moduleImports = [];
129
+ const cssMime = 'text/css';
130
+ ForEach.array(array, ([path, { handler, mime, lastEditedUnixValue }]) => {
131
+ if (!handler) {
132
+ return;
133
+ }
134
+ const relativePath = Paths.normalize(relative(pathDynamic, path));
135
+ switch (handler) {
136
+ case 'fetchable':
137
+ if (!mime) {
138
+ Console.error(
139
+ {
140
+ path,
141
+ message: `path is ignored due to, unable to check fetchable mime-type`,
142
+ },
143
+ { now: true },
144
+ );
145
+ } else {
146
+ const typeName = `${mime.replace(/\//g, '_')}Mime`;
147
+ if (!types.has(mime)) {
148
+ let defintion;
149
+ if (mime !== cssMime) {
150
+ defintion = ` * @typedef { string & { __mime: '${mime}' } } ${typeName}`;
151
+ } else {
152
+ defintion = '';
153
+ }
154
+ types.set(mime, defintion);
155
+ }
156
+ let returnType = '';
157
+ if (mime !== cssMime) {
158
+ returnType = `/** @type { Promise<${typeName}> } */\n`;
159
+ }
160
+ let pseudoImporter;
161
+ let exprectingError = '';
162
+ if (mime === cssMime) {
163
+ if (useFetchForAssets) {
164
+ pseudoImporter = `return getCSS('./${relativePath}?t=${lastEditedUnixValue}');`;
165
+ } else {
166
+ pseudoImporter = `return getCSS('./${relativePath}',\n// @ts-expect-error\n import('./${relativePath}?inline'));`;
167
+ }
168
+ cssList.push(
169
+ `${returnType}get '${relativePath}'() {${exprectingError}${pseudoImporter}},`,
170
+ );
171
+ } else {
172
+ if (useFetchForAssets) {
173
+ pseudoImporter = `fetch_('./${relativePath}?t=${lastEditedUnixValue}');`;
174
+ } else {
175
+ pseudoImporter = `fetch_(import('./${relativePath}?raw'));`;
176
+ }
177
+ exprectingError = '\n// @ts-expect-error\n';
178
+ withMimeNotCSS.push(
179
+ `${returnType}get '${relativePath}'() {${exprectingError}return ${pseudoImporter}},`,
180
+ );
181
+ }
182
+ }
183
+ break;
184
+ case 'importable':
185
+ let version = '';
186
+ if (useFetchForAssets) {
187
+ version = ` /** @version ${lastEditedUnixValue} */`;
188
+ }
189
+ moduleImports.push(
190
+ `get '${relativePath.replace(/\.m/, '-').replace('-js', '')}'(){return import('./${relativePath}' ${version});},`,
191
+ );
192
+ break;
193
+ }
194
+ });
195
+ /**
196
+ * @type {string[]}
197
+ */
198
+ const mimeTypeHandlers = [];
199
+ ForOfSync(types, ([, fullTypeVal]) => {
200
+ if (!fullTypeVal) {
201
+ return;
202
+ }
203
+ mimeTypeHandlers.push(fullTypeVal);
204
+ });
205
+ const helpers = ['// @ts-check'];
206
+ if (withMimeNotCSS.length) {
207
+ mimeTypeHandlers.unshift('/**');
208
+ mimeTypeHandlers.push(' */');
209
+ }
210
+ if (cssList.length || withMimeNotCSS.length) {
211
+ if (types.has(cssMime)) {
212
+ helpers.push(`import { NewStyleSheetAsync } from 'vivth/neutral';`);
213
+ }
214
+ if (useFetchForAssets) {
215
+ helpers.push('const metaURL = import.meta.url;');
216
+ helpers.push(
217
+ `/** @param {string} url */\nconst fetch_ = (url) => fetch(new URL(url, metaURL).href).then((r) => r.text());`,
218
+ );
219
+ } else if (withMimeNotCSS.length) {
220
+ helpers.push(
221
+ `/** @param {Promise<string>} imported */\nconst fetch_ = (imported)=> imported.then((r) =>
222
+ // @ts-expect-error
223
+ r.default);`,
224
+ );
225
+ }
226
+ if (types.has(cssMime)) {
227
+ helpers.push(`const mappedCSS = new Map();`);
228
+ if (useFetchForAssets) {
229
+ helpers.push(`/** @type { (url: string) => Promise<CSSStyleSheet>} */
230
+ const getCSS = (url) => {
231
+ if (!mappedCSS.has(url)) {
232
+ const sheetPromise = fetch_(url).then((text) => NewStyleSheetAsync(text));
233
+ mappedCSS.set(url, sheetPromise);
234
+ }
235
+ return mappedCSS.get(url);
236
+ };
237
+ `);
238
+ } else {
239
+ helpers.push(`/** @type { (url: string, imported:Promise<string>) => Promise<CSSStyleSheet>} */
240
+ const getCSS = (url, imported) => {
241
+ if (!mappedCSS.has(url)) {
242
+ const sheetPromise = imported.then((text) =>
243
+ // @ts-expect-error
244
+ NewStyleSheetAsync(text.default));
245
+ mappedCSS.set(url, sheetPromise);
246
+ }
247
+ return mappedCSS.get(url);
248
+ };
249
+ `);
250
+ }
251
+ }
252
+ }
253
+ content.unshift(
254
+ ...helpers,
255
+ mimeTypeHandlers.join('\n'),
256
+ `export const ${dynamicImports} = {`,
257
+ );
258
+ ForOfSync(
259
+ [
260
+ { arr: moduleImports, name: 'modules' },
261
+ { arr: cssList, name: 'css' },
262
+ { arr: withMimeNotCSS, name: 'commons' },
263
+ ],
264
+ ({ arr, name }) => {
265
+ if (!arr.length) {
266
+ return;
267
+ }
268
+ content.push(`${name}:{`);
269
+ content.push(...arr);
270
+ content.push('},');
271
+ },
272
+ );
273
+ content.push('};');
274
+ const preFormated = `${content.join('\n')}\n`;
275
+ const [contentFormatted, errorFormatting] = await TryAsync(async () => {
276
+ return await jsPrettivy.format(preFormated);
277
+ });
278
+ if (errorFormatting) {
279
+ Console.error(
280
+ {
281
+ BrowserDirMapper: `❌ Error to formatting '${pathGeneratedDynamicMapped}'`,
282
+ errorFormatting,
283
+ },
284
+ { now: true },
285
+ );
286
+ return;
287
+ }
288
+ const [, errorWritePrettifiedDynamicMapped] = await FileSafe.write(
289
+ pathGeneratedDynamicMapped,
290
+ contentFormatted,
291
+ { encoding: 'utf-8' },
292
+ );
293
+ if (errorWritePrettifiedDynamicMapped) {
294
+ Console.error(
295
+ {
296
+ BrowserDirMapper: `❌ Error to write '${pathGeneratedDynamicMapped}'`,
297
+ errorWritePrettifiedDynamicMapped,
298
+ },
299
+ { now: true },
300
+ );
301
+ return;
302
+ }
303
+ Console.info(
304
+ {
305
+ BrowserDirMapper: `✅ Successfully write '${pathGeneratedDynamicMapped}'`,
306
+ },
307
+ { now: true },
308
+ );
309
+ },
310
+ });
311
+ });
312
+ }
@@ -0,0 +1,14 @@
1
+ // @ts-check
2
+
3
+ /**
4
+ * @description
5
+ * - object creation mapper;
6
+ * @template {Object} OBJ
7
+ * @template {any} MODIFIED
8
+ * @param {OBJ} object
9
+ * @param {(obj:OBJ)=>MODIFIED} callback
10
+ * @returns {MODIFIED}
11
+ */
12
+ export function NewObjectWrapper(object, callback) {
13
+ return callback(object);
14
+ }
@@ -0,0 +1,23 @@
1
+ // @ts-check
2
+
3
+ /**
4
+ * @description
5
+ * - function helper to object registrar;
6
+ * @template {any[]} ARGS
7
+ * @template {any} OBJ
8
+ * @param {(...args:ARGS)=>OBJ} registrarCallback
9
+ * @returns {Parameters<typeof ObjectRegistrar<ARGS, OBJ>>[0]}
10
+ * @example
11
+ * import { ObjectRegistrar, Signal, ForOfSync } from 'vivth/neutral';
12
+ *
13
+ * const autoCleanedUpSignal = ObjectRegistrar(()=>{
14
+ *
15
+ * })
16
+ *
17
+ * const mySignal = autoCleanedUpSignal(1);
18
+ */
19
+ export function ObjectRegistrar(registrarCallback) {
20
+ return (...obj) => {
21
+ return registrarCallback(...obj);
22
+ };
23
+ }
@@ -0,0 +1,129 @@
1
+ // @ts-check
2
+
3
+ import { basename, extname } from 'node:path';
4
+
5
+ import { FileSafe } from '../class/FileSafe.mjs';
6
+ import { TryAsync } from './TryAsync.mjs';
7
+ import { readFile } from 'node:fs/promises';
8
+ import { Preferrence } from '../common/Preferrence.mjs';
9
+ import { LitExp } from '../class/LitExp.mjs';
10
+ import { LazyFactory } from './LazyFactory.mjs';
11
+ import { TrySync } from './TrySync.mjs';
12
+ import { FactoryKey } from '../common/FactoryKey.mjs';
13
+ import { ForOfSync } from './ForOfSync.mjs';
14
+ import { Paths } from '../class/Paths.mjs';
15
+ import { Console } from '../class/Console.mjs';
16
+
17
+ const templater = LazyFactory(() => {
18
+ return TrySync(() => {
19
+ const temp = LitExp.prepare({
20
+ typeBrace0: /\/\*\s+/,
21
+ type: /[\w]+/,
22
+ typeBrace1: /\s+\*\/\s*?/,
23
+ name: /(?:\:|)[\w]+/,
24
+ closing: /[,\s;]/,
25
+ });
26
+ const [literalSQLTemplate, errorTemplating] = temp;
27
+ if (errorTemplating) {
28
+ throw errorTemplating;
29
+ }
30
+ return literalSQLTemplate`${'typeBrace0'}${'type'}${'typeBrace1'}${'name'}`;
31
+ });
32
+ });
33
+
34
+ /**
35
+ * @description
36
+ * - parse then generate file right next to said sql file;
37
+ * - this function assume `Paths` already instantiated;s
38
+ * @param {string} path
39
+ * @param {(
40
+ * arg0:{input:Record<string, string>,output:Record<string, string>, sqlString:string}
41
+ * )=>
42
+ * {ext:string, content:string}
43
+ * } [fileGenerator]
44
+ * - file string generator;
45
+ * - the default will generate mjs callback type, and sql string;
46
+ * >- `callback` type: basename + 'CBType';
47
+ * >- `sql` string: basename + 'SQL';
48
+ * @returns {ReturnType<typeof TryAsync<boolean>>}
49
+ */
50
+ export async function ParseSQLFile(
51
+ path,
52
+ fileGenerator = ({ input, output, sqlString }) => {
53
+ const exportname = basename(path).replace(/\./g, '').replace(/sql$/, '');
54
+ const content = `// @ts-check
55
+ /**
56
+ * @typedef {${JSON.stringify(input).replace(/"/g, '')}} INPUT
57
+ * @typedef {${JSON.stringify(output).replace(/"/g, '')}[]} RESPONSE
58
+ */
59
+ /**
60
+ * @callback ${exportname}CBType
61
+ * @param {INPUT} input
62
+ * @returns {Promise<RESPONSE>}
63
+ */
64
+ export const ${exportname}SQL = \`${sqlString.replace(/\`/g, '\\`')}\`;
65
+ `;
66
+ return { ext: '.mjs', content };
67
+ },
68
+ ) {
69
+ return await TryAsync(async () => {
70
+ path = Paths.diskAbsolute(path);
71
+ if (extname(path) !== '.sql') {
72
+ Console.warn(`'${path}' not an sql file`);
73
+ return false;
74
+ }
75
+ if (!(await FileSafe.exist(path))) {
76
+ throw `'${!(await FileSafe.exist(path))}' doesn't exist`;
77
+ }
78
+ templater[FactoryKey];
79
+ const [templateHandler, errorTemplating] = templater;
80
+ if (errorTemplating) {
81
+ throw { errorTemplating };
82
+ }
83
+ const sqlString = (await readFile(path, { encoding: Preferrence.encoding })).replace(
84
+ /\s+/g,
85
+ ' ',
86
+ );
87
+ const [matchedAndGrouped, errorMatching] = templateHandler.evaluate.matchedAllAndGrouped(
88
+ sqlString,
89
+ {
90
+ flags: 'g',
91
+ whiteSpaceSensitive: false,
92
+ },
93
+ );
94
+ if (errorMatching) {
95
+ throw { errorMatching };
96
+ }
97
+ const {
98
+ result: { named },
99
+ } = matchedAndGrouped;
100
+ if (!Object.keys(named).length) {
101
+ throw { path, message: 'detected no input nor output' };
102
+ }
103
+ const res = { input: {}, output: {} };
104
+ ForOfSync(named, ({ type, name }) => {
105
+ if (name.startsWith(':')) {
106
+ name = name.replace(':', '').toString();
107
+ // @ts-expect-error
108
+ res.input[name] = type;
109
+ } else {
110
+ // @ts-expect-error
111
+ res.output[name] = type;
112
+ }
113
+ });
114
+ const { content, ext } = fileGenerator({ input: res.input, output: res.output, sqlString });
115
+ let extTrue = ext;
116
+ if (!ext.startsWith('.')) {
117
+ extTrue = `.${ext}`;
118
+ }
119
+ const pathMJS = `${path}${extTrue}`;
120
+ const [, errorWrite] = await FileSafe.write(pathMJS, content, {
121
+ encoding: Preferrence.encoding,
122
+ });
123
+ if (errorWrite) {
124
+ throw { errorWrite };
125
+ }
126
+ Console.info(`✅ Successfully generate type from '${path}' to '${pathMJS}'`);
127
+ return true;
128
+ });
129
+ }
@@ -0,0 +1,30 @@
1
+ // @ts-check
2
+
3
+ /**
4
+ * @description
5
+ * - create an async pipeline starting from an initial value;
6
+ * - every step must return the same type (VALUE), but may be sync or async.
7
+ * @template {any} VALUE
8
+ * @param {VALUE} intialValue
9
+ * @param {...((currentvalue:VALUE)=>VALUE|Promise<VALUE>)} pipeFunctions
10
+ * @returns {Promise<VALUE>}
11
+ * @example
12
+ * import { PipeAsync } from 'vivth/neutral';
13
+ *
14
+ * const res = await PipeAsync(
15
+ * 'intialValue', // res: Promise<"intialValue">
16
+ * (val) => `${val}:1`, // res: Promise<"intialValue:1">
17
+ * async (val) => `${val}:2`, // res: Promise<"intialValue:1:2">
18
+ * (val) => `${val}:3` // res: Promise<"intialValue:1:2:3">
19
+ * );
20
+ */
21
+ export async function PipeAsync(intialValue, ...pipeFunctions) {
22
+ for (let i = 0; i < pipeFunctions.length; i++) {
23
+ const function_ = pipeFunctions[i];
24
+ if (!function_) {
25
+ continue;
26
+ }
27
+ intialValue = await function_(intialValue);
28
+ }
29
+ return intialValue;
30
+ }
@@ -0,0 +1,28 @@
1
+ // @ts-check
2
+
3
+ /**
4
+ * @description
5
+ * @template {any} VALUE
6
+ * @param {VALUE} intialValue
7
+ * @param {...((currentvalue:VALUE)=>VALUE)} pipeFunctions
8
+ * @returns {VALUE}
9
+ * @example
10
+ * import { PipeSync } from 'vivth/neutral';
11
+ *
12
+ * const res = PipeSync(
13
+ * 'intialValue', // res: "intialValue"
14
+ * (val) => `${val}:1`, // res: "intialValue:1"
15
+ * (val) => `${val}:2`, // res: "intialValue:1:2"
16
+ * (val) => `${val}:3` // res: "intialValue:1:2:3"
17
+ * );
18
+ */
19
+ export function PipeSync(intialValue, ...pipeFunctions) {
20
+ for (let i = 0; i < pipeFunctions.length; i++) {
21
+ const function_ = pipeFunctions[i];
22
+ if (!function_) {
23
+ continue;
24
+ }
25
+ intialValue = function_(intialValue);
26
+ }
27
+ return intialValue;
28
+ }
@@ -0,0 +1,77 @@
1
+ // @ts-check
2
+
3
+ import { pathToFileURL } from 'node:url';
4
+
5
+ import { GetRuntime } from './GetRuntime.mjs';
6
+ import { ClearRequireCache } from './ClearRequireCache.mjs';
7
+ import { Paths } from '../class/Paths.mjs';
8
+ import { init } from 'import-without-cache';
9
+ import { LazyFactory } from './LazyFactory.mjs';
10
+ import { QChannel } from '../class/QChannel.mjs';
11
+ import { PipeSync } from './PipeSync.mjs';
12
+
13
+ let isInited = false;
14
+
15
+ const q = LazyFactory(() => new QChannel('SafeImport'));
16
+
17
+ /**
18
+ * @param {string} path
19
+ * @returns {string}
20
+ */
21
+ const ifNodeThenCorrectPath = (path) => {
22
+ if (GetRuntime() !== 'node') {
23
+ return path;
24
+ }
25
+ return (path = pathToFileURL(path).href);
26
+ };
27
+
28
+ /**
29
+ * @param {string} path
30
+ * @returns {Promise<any>}
31
+ */
32
+ const queuedCallback = async (path) => {
33
+ if (GetRuntime() === 'node' && !isInited) {
34
+ isInited = true;
35
+ init({ skipNodeModules: true });
36
+ }
37
+ ClearRequireCache(path);
38
+ const result = await import(
39
+ /** */
40
+ path,
41
+ { with: { cache: 'no' } }
42
+ );
43
+ ClearRequireCache(path);
44
+ return result;
45
+ };
46
+
47
+ /**
48
+ * @description
49
+ * - import while imediately call clearing require caches;
50
+ * - `usecases`:
51
+ * >- long running process that need to prevent memory leak from uncleanable `cached import`;
52
+ * >- to simply import fresh everytime;
53
+ * - the imported module can then just be treated like any other variable, to only lived and tracked by variable reference only;
54
+ * - due to how `vivth/node.ClearRequireCache` works, parallel await (like using Promise.all, or not awaited until later) will be done squentially(if targetting the same path);
55
+ * @template { any } T
56
+ * - put the type
57
+ * @param {string} path
58
+ * - either absolute `diskAbsolutepath` or from `Paths.root`;
59
+ * @returns {ReturnType<typeof import('./TryAsync.mjs').TryAsync<T>>}
60
+ * @example
61
+ * // Paths.root/myscript.mjs
62
+ * import { SafeImport } from 'vivth/node';
63
+ *
64
+ * // add type with: import('vivth/neutral').SafeImportReturnType<import('./something.mjs')>
65
+ * const [importedModule, errorSafeImport] = await SafeImport('/absolute/path/from/Paths.root/something.mjs');
66
+ */
67
+ export async function SafeImport(path) {
68
+ path = PipeSync(
69
+ /** */
70
+ Paths.diskAbsolute(path),
71
+ Paths.nativeSep,
72
+ ifNodeThenCorrectPath,
73
+ );
74
+ return await q.callback(path, async () => {
75
+ return await queuedCallback(path);
76
+ });
77
+ }