@ecmaos/kernel 0.8.0 → 0.9.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 (214) hide show
  1. package/README.md +112 -19
  2. package/dist/.vite/manifest.json +23 -12
  3. package/dist/ecmaos-figlet.png +0 -0
  4. package/dist/ecmaos-screenshot.png +0 -0
  5. package/dist/ecmaos.sh-lighthouse-report.png +0 -0
  6. package/dist/index-CxwR4Omn.js +1651 -0
  7. package/dist/index-CxwR4Omn.js.map +1 -0
  8. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/assets/dmt/dmt-component-data.js +1 -1
  9. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/assets/dmt/dmt-search.cmp +0 -0
  10. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/assets/highlight.css +12 -12
  11. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_auth.Auth.html +2 -2
  12. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_components.Component.html +2 -2
  13. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_components.Components.html +2 -2
  14. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_dom.Dom.html +2 -2
  15. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_events.Events.html +8 -8
  16. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_fdtable.FDTable.html +14 -14
  17. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_filesystem.Filesystem.html +12 -11
  18. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_i18n.I18n.html +2 -2
  19. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_intervals.Intervals.html +6 -2
  20. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_kernel.Kernel.html +68 -60
  21. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_lib_commands.TerminalCommand.html +4 -4
  22. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_log.Log.html +3 -3
  23. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_memory.Memory.html +2 -2
  24. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_processes.Process.html +33 -33
  25. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_processes.ProcessManager.html +2 -2
  26. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_protocol.Protocol.html +2 -2
  27. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_service.Service.html +10 -10
  28. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_shell.Shell.html +16 -16
  29. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_sockets.Sockets.html +7 -7
  30. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_storage.Storage.html +8 -8
  31. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_telemetry.Telemetry.html +2 -2
  32. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_terminal.Spinner.html +2 -2
  33. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_terminal.Terminal.html +32 -32
  34. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_users.Users.html +13 -13
  35. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_wasm.Wasm.html +4 -4
  36. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_windows.Windows.html +8 -8
  37. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/classes/kernel_src_tree_workers.Workers.html +4 -4
  38. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/enums/kernel_src_tree_terminal.CommandPath.html +2 -2
  39. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/enums/types_kernel.KernelEvents.html +2 -2
  40. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/enums/types_kernel.KernelState.html +2 -2
  41. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/enums/types_processes.ProcessEvents.html +2 -2
  42. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/enums/types_terminal.TerminalEvents.html +2 -2
  43. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.TerminalCommands.html +1 -1
  44. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.chown.html +1 -1
  45. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.clear.html +1 -1
  46. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.df.html +1 -1
  47. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.download.html +1 -1
  48. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.env.html +1 -1
  49. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.load.html +1 -1
  50. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.mount.html +1 -1
  51. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.passwd.html +1 -1
  52. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.play.html +1 -1
  53. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.ps.html +1 -1
  54. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.reboot.html +1 -1
  55. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.screensaver.html +1 -1
  56. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.snake.html +1 -1
  57. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.su.html +1 -1
  58. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.umount.html +1 -1
  59. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.upload.html +1 -1
  60. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands.video.html +1 -1
  61. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands_install.default.html +1 -1
  62. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_commands_uninstall.default.html +1 -1
  63. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_crontab.parseCrontabFile.html +5 -0
  64. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_crontab.parseCrontabLine.html +5 -0
  65. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_fstab.parseFstabFile.html +5 -0
  66. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_fstab.parseFstabLine.html +5 -0
  67. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_screensavers_blank.default.html +1 -1
  68. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_screensavers_blank.exit.html +1 -1
  69. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_screensavers_matrix.default.html +1 -1
  70. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/functions/kernel_src_tree_lib_screensavers_matrix.exit.html +1 -1
  71. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/index.html +70 -16
  72. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/kernel_src_tree_lib_commands.CommandArgs.html +2 -2
  73. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/kernel_src_tree_lib_crontab.CrontabEntry.html +5 -0
  74. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_auth.Auth.html +2 -2
  75. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_components.Components.html +2 -2
  76. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_device.KernelDevice.html +4 -4
  77. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_device.KernelDeviceCLIOptions.html +6 -6
  78. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_device.KernelDeviceData.html +1 -1
  79. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_dom.Dom.html +4 -4
  80. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_dom.DomOptions.html +2 -2
  81. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_events.Events.html +8 -8
  82. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_filesystem.FileHeader.html +4 -4
  83. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_filesystem.Filesystem.html +9 -9
  84. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_filesystem.FilesystemDescriptions.html +2 -2
  85. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_filesystem.FstabEntry.html +13 -0
  86. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_i18n.I18n.html +4 -4
  87. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_i18n.I18nOptions.html +7 -7
  88. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_intervals.ITimerHandle.html +5 -0
  89. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_intervals.Intervals.html +18 -4
  90. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_kernel.BootOptions.html +2 -2
  91. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_kernel.Kernel.html +46 -46
  92. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_kernel.KernelExecuteEvent.html +2 -2
  93. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_kernel.KernelExecuteOptions.html +2 -2
  94. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_kernel.KernelOptions.html +2 -2
  95. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_kernel.KernelPanicEvent.html +2 -2
  96. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_kernel.KernelShutdownEvent.html +2 -2
  97. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_kernel.KernelUploadEvent.html +2 -2
  98. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_keyboard.Keyboard.html +2 -2
  99. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_log.Log.html +10 -10
  100. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_log.LogOptions.html +4 -4
  101. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_memory.Memory.html +16 -16
  102. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_modules.KernelModule.html +2 -2
  103. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_processes.FDTable.html +13 -13
  104. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_processes.FileHandle.html +8 -8
  105. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_processes.Process.html +31 -31
  106. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_processes.ProcessEntryParams.html +16 -16
  107. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_processes.ProcessExitEvent.html +2 -2
  108. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_processes.ProcessManager.html +8 -8
  109. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_processes.ProcessOptions.html +18 -18
  110. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_processes.ProcessPauseEvent.html +2 -2
  111. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_processes.ProcessResumeEvent.html +2 -2
  112. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_processes.ProcessStartEvent.html +2 -2
  113. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_processes.ProcessStopEvent.html +2 -2
  114. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_protocol.Protocol.html +3 -3
  115. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_protocol.ProtocolOptions.html +3 -3
  116. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_service.Service.html +9 -9
  117. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_service.ServiceOptions.html +4 -4
  118. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_shell.Shell.html +13 -13
  119. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_shell.ShellOptions.html +7 -7
  120. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_sockets.Sockets.html +7 -7
  121. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_sockets.SocketsOptions.html +2 -2
  122. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_sockets.WebSocketConnection.html +8 -8
  123. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_sockets.WebTransportConnection.html +8 -8
  124. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_storage.StorageOptions.html +3 -3
  125. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_storage.StorageProvider.html +7 -7
  126. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_telemetry.Telemetry.html +3 -3
  127. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_telemetry.TelemetryOptions.html +2 -2
  128. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.Terminal.html +30 -30
  129. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalAttachEvent.html +2 -2
  130. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalCommand.html +4 -4
  131. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalCreatedEvent.html +2 -2
  132. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalExecuteEvent.html +2 -2
  133. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalInputEvent.html +2 -2
  134. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalInterruptEvent.html +2 -2
  135. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalKeyEvent.html +2 -2
  136. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalListenEvent.html +2 -2
  137. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalMessageEvent.html +2 -2
  138. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalMountEvent.html +2 -2
  139. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalOptions.html +6 -6
  140. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalPasteEvent.html +2 -2
  141. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalResizeEvent.html +2 -2
  142. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalUnlistenEvent.html +2 -2
  143. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalWriteEvent.html +2 -2
  144. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_terminal.TerminalWritelnEvent.html +2 -2
  145. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_users.AddUserOptions.html +4 -4
  146. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_users.Passkey.html +7 -7
  147. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_users.User.html +9 -9
  148. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_users.Users.html +14 -14
  149. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_users.UsersOptions.html +2 -2
  150. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_wasm.Wasm.html +3 -3
  151. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_wasm.WasmOptions.html +2 -2
  152. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_windows.WindowOptions.html +2 -2
  153. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_windows.Windows.html +7 -7
  154. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/interfaces/types_workers.Workers.html +3 -3
  155. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/media/package.json +8 -5
  156. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/media/turbo.json +7 -7
  157. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/modules/kernel_src_tree_lib_commands.html +1 -1
  158. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/modules/kernel_src_tree_lib_crontab.html +2 -0
  159. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/modules/kernel_src_tree_lib_fstab.html +2 -0
  160. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/modules/types_filesystem.html +1 -1
  161. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/modules/types_intervals.html +1 -1
  162. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/modules.html +1 -1
  163. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/tutorials/ai.md +114 -0
  164. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/tutorials/passkey.md +147 -0
  165. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/kernel_src_tree_fdtable.ZenFSFileHandle.html +1 -1
  166. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_auth.PasswordCredentialInit.html +1 -1
  167. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_components.ComponentListener.html +1 -1
  168. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_events.EventCallback.html +1 -1
  169. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_filesystem.FilesystemConfigMounts.html +1 -1
  170. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_filesystem.FilesystemOptions.html +1 -1
  171. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_filesystem.Fstab.html +3 -0
  172. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_filesystem.Path.html +1 -1
  173. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_intervals.CronMap.html +3 -0
  174. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_intervals.IntervalMap.html +1 -1
  175. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_memory.Address.html +1 -1
  176. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_memory.Collection.html +1 -1
  177. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_memory.Config.html +1 -1
  178. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_memory.Heap.html +1 -1
  179. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_memory.Stack.html +1 -1
  180. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_memory.StackFrame.html +1 -1
  181. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_modules.KernelModules.html +1 -1
  182. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_processes.ProcessStatus.html +1 -1
  183. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_processes.ProcessesMap.html +1 -1
  184. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_sockets.SocketConnection.html +1 -1
  185. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_sockets.WebSocketState.html +1 -1
  186. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_sockets.WebTransportState.html +1 -1
  187. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_users.GID.html +1 -1
  188. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_users.UID.html +1 -1
  189. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/types/types_windows.WindowId.html +1 -1
  190. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/variables/kernel_src_tree_device.DefaultDevices.html +1 -1
  191. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/variables/kernel_src_tree_dom.DefaultDomOptions.html +1 -1
  192. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/variables/kernel_src_tree_filesystem.DefaultFilesystemOptions.html +1 -1
  193. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/variables/kernel_src_tree_i18n.DefaultI18nOptions.html +1 -1
  194. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/variables/kernel_src_tree_log.DefaultLogOptions.html +1 -1
  195. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/variables/kernel_src_tree_service.DefaultServiceOptions.html +1 -1
  196. package/dist/initfs/usr/share/docs/@ecmaos/kernel/docs/variables/kernel_src_tree_terminal.DefaultTerminalOptions.html +1 -1
  197. package/dist/initfs/usr/share/docs/@ecmaos/kernel/index.md +112 -19
  198. package/dist/initfs/usr/share/docs/@zenfs/core/index.md +192 -0
  199. package/dist/initfs.tar.gz +0 -0
  200. package/dist/{install-q2Renhgi.js → install-v7WLn3NU.js} +2 -2
  201. package/dist/{install-q2Renhgi.js.map → install-v7WLn3NU.js.map} +1 -1
  202. package/dist/{kernel-BR5am0OX.js → kernel-j5HiQNwE.js} +44130 -15230
  203. package/dist/kernel-j5HiQNwE.js.map +1 -0
  204. package/dist/kernel.css +0 -1
  205. package/dist/kernel.d.ts +12 -0
  206. package/dist/kernel.js +1 -1
  207. package/dist/{topbar.min-dK87tSZy.js → topbar.min-BKs7fUL5.js} +2 -2
  208. package/dist/{topbar.min-dK87tSZy.js.map → topbar.min-BKs7fUL5.js.map} +1 -1
  209. package/dist/ui.js +1 -1
  210. package/dist/ui.js.map +1 -1
  211. package/dist/{uninstall-CzJG8s4q.js → uninstall-DdFQZCNc.js} +2 -2
  212. package/dist/{uninstall-CzJG8s4q.js.map → uninstall-DdFQZCNc.js.map} +1 -1
  213. package/package.json +8 -4
  214. package/dist/kernel-BR5am0OX.js.map +0 -1
@@ -51,7 +51,7 @@ This is NOT intended to be a "Linux kernel in Javascript" - while it takes its h
51
51
  - Install any client-side npm package (this doesn't mean it will work out of the box as expected)
52
52
  - Event manager for dispatching and subscribing to events
53
53
  - Process manager for running applications and daemons
54
- - Interval manager for scheduling recurring operations
54
+ - Interval manager for scheduling recurring operations with support for cron expressions via the `cron` command
55
55
  - Memory manager for managing pseudo-memory: Collections, Config, Heap, and Stack
56
56
  - Storage manager for managing Storage API capabilities: IndexedDB, localStorage, etc.
57
57
  - Internationalization framework for translating text powered by [i18next](https://www.i18next.com)
@@ -111,6 +111,92 @@ This is NOT intended to be a "Linux kernel in Javascript" - while it takes its h
111
111
  - Devices may also be directly read/written using `fs` methods, and will behave accordingly (or have no effect if not supported)
112
112
  - An individual device module can provide multiple device drivers, e.g. `/dev/usb` provides `/dev/usb-mydevice-0001-0002`
113
113
 
114
+ ### Filesystems
115
+
116
+ > [/core/utils/src/commands/mount.ts](/core/utils/src/commands/mount.ts)
117
+
118
+ ecmaOS supports multiple filesystem backends powered by [zenfs](https://zenfs.dev), allowing you to mount various storage types into the virtual filesystem.
119
+
120
+ #### Supported Filesystem Types
121
+
122
+ - **memory**: In-memory filesystem (temporary, lost on page reload)
123
+ - **indexeddb**: IndexedDB-backed persistent filesystem
124
+ - **webstorage**: WebStorage-backed filesystem (localStorage or sessionStorage)
125
+ - **webaccess**: File System Access API filesystem (requires user interaction)
126
+ - **singlebuffer**: Filesystem backed by a single buffer
127
+ - **fetch**: Remote filesystem via HTTP fetch
128
+ - **xml**: DOM XML filesystem (WIP)
129
+ - **zip**: Read-only filesystem from a zip archive (file or URL)
130
+ - **iso**: Read-only filesystem from an ISO image (file or URL)
131
+ - **dropbox**: Dropbox filesystem (WIP)
132
+ - **s3**: S3 filesystem (WIP)
133
+ - **googledrive**: Google Drive filesystem (WIP)
134
+
135
+ #### Basic Usage
136
+
137
+ ```sh
138
+ # Mount a memory filesystem
139
+ mount -t memory /mnt/tmp
140
+
141
+ # Mount an IndexedDB store
142
+ mount -t indexeddb mydb /mnt/db
143
+
144
+ # Mount WebStorage (localStorage by default)
145
+ mount -t webstorage /mnt/storage
146
+
147
+ # Mount WebStorage using sessionStorage
148
+ mount -t webstorage /mnt/storage -o storage=sessionStorage
149
+
150
+ # Mount a zip archive
151
+ mount -t zip /tmp/archive.zip /mnt/zip
152
+
153
+ # Mount from a remote URL
154
+ mount -t zip https://example.com/archive.zip /mnt/zip
155
+
156
+ # Mount a fetch filesystem (see utils/fetch-fs-server.js)
157
+ mount -t fetch index.json /mnt/api -o baseUrl=http://localhost:30808
158
+
159
+ # List all mounted filesystems
160
+ mount -l
161
+
162
+ # Unmount a filesystem
163
+ umount /mnt/tmp
164
+ ```
165
+
166
+ #### /etc/fstab
167
+
168
+ The kernel automatically processes `/etc/fstab` during boot to mount filesystems. The fstab format is space or tab-separated:
169
+
170
+ ```plaintext
171
+ source target type [options]
172
+ ```
173
+
174
+ **Format:**
175
+
176
+ - `source`: Device/URL/database name (use `none` for filesystems that don't require a source)
177
+ - `target`: Mount point (absolute path)
178
+ - `type`: Filesystem type
179
+ - `options`: Optional comma-separated key=value pairs
180
+
181
+ **Example /etc/fstab:**
182
+
183
+ ```plaintext
184
+ # ecmaOS fstab - Filesystem mount table
185
+ # Format: source target type [options]
186
+
187
+ # Memory filesystem for temporary data
188
+ none /mnt/tmp memory
189
+
190
+ # IndexedDB filesystem for persistent storage
191
+ mydb /mnt/db indexeddb
192
+
193
+ # WebStorage filesystem using localStorage
194
+ none /mnt/storage webstorage storage=localStorage
195
+
196
+ # Fetch filesystem from a remote API
197
+ index.json /mnt/api fetch baseUrl=http://localhost:30808
198
+ ```
199
+
114
200
  ### Generators
115
201
 
116
202
  > [/turbo/generators](/turbo/generators)
@@ -141,7 +227,7 @@ This is NOT intended to be a "Linux kernel in Javascript" - while it takes its h
141
227
  - Events (CustomEvents)
142
228
  - Filesystem (ZenFS)
143
229
  - Internationalization (i18next)
144
- - Interval Manager (setInterval)
230
+ - Interval Manager (setInterval and cron scheduling)
145
231
  - Log Manager (tslog)
146
232
  - Memory Manager (Abstractions)
147
233
  - Process Manager
@@ -155,8 +241,8 @@ This is NOT intended to be a "Linux kernel in Javascript" - while it takes its h
155
241
  - User Manager
156
242
  - WASM Loader
157
243
  <!-- - [WebContainer](https://github.com/stackblitz/webcontainer-core) for running Node.js apps -->
158
- - Window Manager (WinBox)
159
244
  - Web Workers
245
+ - Window Manager (WinBox)
160
246
 
161
247
  ### Metal
162
248
 
@@ -172,8 +258,8 @@ This is NOT intended to be a "Linux kernel in Javascript" - while it takes its h
172
258
  - Refer to the full list of [official modules on npm](https://www.npmjs.com/org/ecmaos-modules)
173
259
  - See the [MODULES.md](/MODULES.md) file for a list of community modules; submit a PR to add your module!
174
260
  - Modules are dynamically loaded into the kernel at boot and can be enabled or disabled
175
- - They are specified during build via the `VITE_KERNEL_MODULES` environment variable
176
- - e.g. `VITE_KERNEL_MODULES=@ecmaos-modules/boilerplate@0.1.0,@your/package@1.2.3`
261
+ - They are specified during build via the `ECMAOS_KERNEL_MODULES` environment variable
262
+ - e.g. `ECMAOS_KERNEL_MODULES=@ecmaos-modules/boilerplate@0.1.0,@your/package@1.2.3`
177
263
  - Versions must be pinned and are mandatory - you cannot use NPM version specifiers
178
264
  - They can provide additional functionality, devices, commands, etc.
179
265
  - They offer a [common interface](./core/types/modules.ts) for interacting with the kernel
@@ -209,7 +295,7 @@ This is NOT intended to be a "Linux kernel in Javascript" - while it takes its h
209
295
  ### Telemetry
210
296
 
211
297
  - [OpenTelemetry](https://opentelemetry.io) is used for collecting and analyzing telemetry data from the kernel and applications
212
- - It is only active if the VITE_OPENTELEMETRY_ENDPOINT environment variable is set when building the kernel
298
+ - It is only active if the ECMAOS_OPENTELEMETRY_ENDPOINT environment variable is set when building the kernel
213
299
  - There is a simple test server included in the `utils/opentelemetry` directory that can be used to test the telemetry system: `python3 utils/opentelemetry/otlp-server.py`
214
300
 
215
301
  ### Utils
@@ -221,11 +307,13 @@ This is NOT intended to be a "Linux kernel in Javascript" - while it takes its h
221
307
  ## Important Files and Directories
222
308
 
223
309
  - `/bin/`: Built-in commands
224
- - `/bios/`: The BIOS filesystem
310
+ <!-- - `/bios/`: The BIOS filesystem -->
225
311
  - `/boot/init`: A script that runs on boot
226
312
  - `/dev/`: All devices are here
313
+ - `/etc/crontab`: System-wide crontab file (loaded on boot)
227
314
  - `/etc/packages`: A list of installed packages to load on boot
228
315
  - `/home/`: Contains user home directories
316
+ - `~/.config/crontab`: User-specific crontab file (loaded on login)
229
317
  - `/proc/`: Contains various dynamic system information
230
318
  - `/root/`: The home directory for the root user
231
319
  - `/usr/bin/`: Executable packages get linked here
@@ -235,18 +323,23 @@ This is NOT intended to be a "Linux kernel in Javascript" - while it takes its h
235
323
  ## Command Examples
236
324
 
237
325
  ```sh
238
- ai "Despite all my rage" # use `env OPENAI_API_KEY --set sk-`
239
- cat /var/log/kernel.log
326
+ ai "Despite all my rage" # use `env OPENAI_API_KEY=`
327
+ cat /var/log/kernel.lo
240
328
  cd /tmp
241
329
  echo "Hello, world!" > hello.txt
242
330
  chmod 700 hello.txt
243
331
  chown user hello.txt
244
332
  clear
245
333
  cp /tmp/hello.txt /tmp/hi.txt
334
+ cron add "* * * * *" "echo hello" # add a cron job
335
+ cron reload # reload crontabs from files
336
+ cron list # list all cron jobs
246
337
  download hello.txt
247
338
  edit hello.txt
248
339
  env hello --set world ; env
249
340
  fetch https://ipecho.net/plain > /tmp/myip.txt
341
+ fetch -o /tmp/initfs.tar.gz /initfs.tar.gz
342
+ fetch /initfs.tar.gz | head | hex
250
343
  fetch /xkcd-os.sixel # xterm.js includes sixel support
251
344
  fetch /swapi/fs/home/user/hello.txt # fetch a file from the filesystem
252
345
  fetch /swapi/fake/person/fullName # fetch a random person from the SWAPI
@@ -255,7 +348,7 @@ install @ecmaos-apps/boilerplate
255
348
  ls /dev
256
349
  mkdir /tmp/zip ; cd /tmp/zip
257
350
  upload
258
- mount myuploadedzip.zip /mnt/zip -t zip
351
+ mount -t zip myuploaded.zip /mnt/zip
259
352
  cd .. ; pwd
260
353
  unzip zip/myuploaded.zip
261
354
  mv zip/myuploaded.zip /tmp/backup.zip
@@ -268,7 +361,7 @@ snake
268
361
  stat /tmp/hello.txt
269
362
  touch /tmp/test.bin
270
363
  umount /mnt/zip
271
- user add --username user
364
+ user add user
272
365
  su user
273
366
  video /root/video.mp4
274
367
  zip /root/tmp.zip /tmp
@@ -280,24 +373,22 @@ zip /root/tmp.zip /tmp
280
373
  /dev/audio test
281
374
  /dev/battery status
282
375
  /dev/bluetooth scan
283
- echo "This will error" > /dev/full
284
376
  /dev/gamepad list
285
377
  /dev/geo position
286
378
  /dev/gpu test
287
379
  /dev/hid list
288
380
  /dev/midi list
289
- echo "Goodbye" > /dev/null
290
381
  /dev/presentation start https://wikipedia.org
291
- cat /dev/random --bytes 10
292
382
  /dev/sensors list
293
383
  /dev/serial devices
294
384
  /dev/usb list
295
385
  /dev/webgpu test
296
- cat /dev/zero --bytes 10 > /dev/null
386
+ echo "Goodbye" > /dev/null
387
+ echo "This will error" > /dev/full
388
+ head -c 32 /dev/random > /tmp/random.txt
389
+ head -c 32 /dev/zero > /dev/null
297
390
  ```
298
391
 
299
- Note: many device implementations are incomplete, but provide a solid starting point
300
-
301
392
  ## Code Execution Example
302
393
 
303
394
  ```sh
@@ -316,9 +407,11 @@ install jquery
316
407
  ## Startup
317
408
 
318
409
  - `/boot/init` is a script that runs on boot inside the init process (PID 0)
410
+ - `/etc/crontab` is loaded on boot and contains system-wide scheduled tasks
411
+ - `~/.config/crontab` is loaded on user login and contains user-specific scheduled tasks
319
412
  - `/etc/packages` is a list of already installed packages to load on boot; one per line
320
- - The env var `VITE_KERNEL_MODULES` is a list of modules to load on boot; CSV with pinned versions
321
- - The env var `VITE_RECOMMENDED_APPS` is a list of apps to suggest to new users
413
+ - The env var `ECMAOS_KERNEL_MODULES` is a list of modules to load on boot; CSV with pinned versions
414
+ - The env var `ECMAOS_RECOMMENDED_APPS` is a list of apps to suggest to new users
322
415
 
323
416
  ## App Development
324
417
 
@@ -0,0 +1,192 @@
1
+ # ZenFS
2
+
3
+ ZenFS is a cross-platform library that emulates the [Node.js filesystem API](http://nodejs.org/api/fs.html).
4
+ It works using a system of backends, which are used by ZenFS to store and retrieve data.
5
+ ZenFS can also integrate with other tools.
6
+
7
+ ## Backends
8
+
9
+ ZenFS is modular and easily extended. The core includes some built-in backends:
10
+
11
+ - `InMemory`: Stores files in-memory. This is cleared when the runtime ends (e.g. a user navigating away from a web page or a Node process exiting)
12
+ - `CopyOnWrite`: Use readable and writable file systems with [copy-on-write](https://en.wikipedia.org/wiki/Copy-on-write).
13
+ - `Fetch`: Downloads files over HTTP with the `fetch` API
14
+ - `Port`: Interacts with a remote over a `MessagePort`-like interface (e.g. a worker)
15
+ - `Passthrough`: Use an existing `node:fs` interface with ZenFS
16
+ - `SingleBuffer`: A backend contained within a single buffer. Can be used for synchronous multi-threaded operations using `SharedArrayBuffer`
17
+
18
+ ZenFS supports a number of other backends.
19
+ Many are provided as separate packages under `@zenfs`.
20
+ More backends can be defined by separate libraries by extending the `FileSystem` class and providing a `Backend` object.
21
+
22
+ You can find all of the packages available over on [NPM](https://www.npmjs.com/org/zenfs). Below is a list of the backends included with some of them:
23
+
24
+ - @zenfs/archives: `Zip`, `Iso`
25
+ - @zenfs/cloud: `Dropbox`, `GoogleDrive`, `S3Bucket`
26
+ - @zenfs/dom: `WebAccess` (Web [File System Access API](https://developer.mozilla.org/en-US/docs/Web/API/File_System_API)/OPFS), `IndexedDB`, `WebStorage` (`localStorage`/`sessionStorage`), `XML` (DOM elements)
27
+ - @zenfs/emscripten: `Emscripten` and a plugin for Emscripten's file system API
28
+
29
+ As an added bonus, all ZenFS backends support synchronous operations.
30
+ Additionally, all of the backends included with the core are cross-platform.
31
+
32
+ For more information, see the [docs](https://zenfs.dev/core).
33
+
34
+ ## Installing
35
+
36
+ ```sh
37
+ npm install @zenfs/core
38
+ ```
39
+
40
+ If you're using ZenFS, especially for big projects, please consider supporting the project.
41
+ Thousands of hours have been dedicated to its development.
42
+ Your financial support would go a long way toward improving ZenFS and its community.
43
+
44
+ ## Usage
45
+
46
+ ```js
47
+ import { fs } from '@zenfs/core'; // You can also use the default export
48
+
49
+ fs.writeFileSync('/test.txt', 'You can do this anywhere, including browsers!');
50
+
51
+ const contents = fs.readFileSync('/test.txt', 'utf-8');
52
+ console.log(contents);
53
+ ```
54
+
55
+ #### Using different and/or multiple backends
56
+
57
+ A single `InMemory` backend is created by default, mounted on `/`.
58
+
59
+ You can configure ZenFS to use a different backend and mount multiple backends. It is strongly recommended to do so using the `configure` function.
60
+
61
+ You can use multiple backends by passing an object to `configure` which maps paths to file systems.
62
+
63
+ The following example mounts a zip file to `/zip`, in-memory storage to `/tmp`, and IndexedDB to `/home`. Note that `/` has the default in-memory backend.
64
+
65
+ ```js
66
+ import { configure, InMemory } from '@zenfs/core';
67
+ import { IndexedDB } from '@zenfs/dom';
68
+ import { Zip } from '@zenfs/archives';
69
+
70
+ const res = await fetch('mydata.zip');
71
+
72
+ await configure({
73
+ mounts: {
74
+ '/mnt/zip': { backend: Zip, data: await res.arrayBuffer() },
75
+ '/tmp': InMemory,
76
+ '/home': IndexedDB,
77
+ },
78
+ });
79
+ ```
80
+
81
+ Note that while you aren't required to use absolute paths for the keys of `mounts`, it is a good practice to do so.
82
+
83
+ > [!TIP]
84
+ > When configuring a mount point, you can pass in
85
+ >
86
+ > 1. A `Backend` object, if the backend has no required options
87
+ > 2. An object that has the options accepted by the backend and a `backend` property which is a `Backend` object
88
+ > 3. A `FileSystem` instance
89
+
90
+ Here is an example that mounts the `WebStorage` backend from `@zenfs/dom` on `/`:
91
+
92
+ ```js
93
+ import { configureSingle, fs } from '@zenfs/core';
94
+ import { WebStorage } from '@zenfs/dom';
95
+
96
+ await configureSingle({ backend: WebStorage });
97
+
98
+ if (!fs.existsSync('/test.txt')) {
99
+ fs.writeFileSync('/test.txt', 'This will persist across reloads!');
100
+ }
101
+
102
+ const contents = fs.readFileSync('/test.txt', 'utf-8');
103
+ console.log(contents);
104
+ ```
105
+
106
+ #### FS Promises
107
+
108
+ The FS promises API is exposed as `promises`.
109
+
110
+ ```js
111
+ import { configureSingle } from '@zenfs/core';
112
+ import { exists, writeFile } from '@zenfs/core/promises';
113
+ import { IndexedDB } from '@zenfs/dom';
114
+
115
+ await configureSingle({ backend: IndexedDB });
116
+
117
+ const exists = await exists('/myfile.txt');
118
+ if (!exists) {
119
+ await writeFile('/myfile.txt', 'Lots of persistent data');
120
+ }
121
+ ```
122
+
123
+ > [!NOTE]
124
+ > You can import the promises API using:
125
+ >
126
+ > 1. Exports from `@zenfs/core/promises`
127
+ > 2. The `promises` export from `@zenfs/core`
128
+ > 3. `fs.promises` on the exported `fs` from `@zenfs/core`.
129
+
130
+ #### Mounting and unmounting, creating backends
131
+
132
+ If you would like to create backends without configure (e.g. to do something dynamic at runtime), you may do so by importing the backend and calling `resolveMountConfig` with it.
133
+
134
+ You can then mount and unmount the backend instance by using `mount` and `umount`.
135
+
136
+ ```js
137
+ import { configure, resolveMountConfig, InMemory } from '@zenfs/core';
138
+ import { IndexedDB } from '@zenfs/dom';
139
+ import { Zip } from '@zenfs/archives';
140
+
141
+ await configure({
142
+ mounts: {
143
+ '/tmp': InMemory,
144
+ '/home': IndexedDB,
145
+ },
146
+ });
147
+
148
+ fs.mkdirSync('/mnt/zip', { recursive: true });
149
+
150
+ const res = await fetch('mydata.zip');
151
+ const zipfs = await resolveMountConfig({ backend: Zip, data: await res.arrayBuffer() });
152
+ fs.mount('/mnt/zip', zipfs);
153
+
154
+ // do stuff with the mounted zip
155
+
156
+ fs.umount('/mnt/zip'); // finished using the zip
157
+ ```
158
+
159
+ > [!CAUTION]
160
+ > Instances of backends follow the _internal_ API. You should never use a backend's methods unless you are extending a backend.
161
+
162
+ ### Devices and device files
163
+
164
+ ZenFS includes support for device files. These are designed to follow Linux's device file behavior, for consistency and ease of use. Check out the [Devices and Device Drivers](https://zenfs.dev/core/documents/Devices_and_Device_Drivers) documentation for more information.
165
+
166
+ ## `node:*` emulation
167
+
168
+ ZenFS also includes emulation of some other `node:` modules for various reasons, importable from `@zenfs/core/<name>`:
169
+
170
+ - `node:path`
171
+ - `node:readline`
172
+
173
+ For example:
174
+
175
+ ```ts
176
+ import * as path from '@zenfs/core/path';
177
+ ```
178
+
179
+ ## Bundling
180
+
181
+ ZenFS exports a drop-in for Node's `fs` module, so you can use it for your bundler of preference using the default export.
182
+
183
+ > [!IMPORTANT]
184
+ > See [COPYING.md](./COPYING.md)
185
+
186
+ ## Sponsors
187
+
188
+ A huge thank you to [deco.cx](https://github.com/deco-cx) for sponsoring ZenFS and helping to make this possible.
189
+
190
+ ## Contact and Support
191
+
192
+ You can reach out [on Discord](https://zenfs.dev/discord) or by emailing jp@zenfs.dev
Binary file
@@ -1,6 +1,6 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- import { c as chalk, s as semver, p as path } from "./kernel-BR5am0OX.js";
3
+ import { c as chalk, s as semver, p as path } from "./kernel-j5HiQNwE.js";
4
4
  const install = /* @__PURE__ */ __name(async ({ kernel, shell, terminal, args }) => {
5
5
  const [packageArg, registryArg, reinstallArg] = args;
6
6
  if (!packageArg) {
@@ -118,4 +118,4 @@ const install = /* @__PURE__ */ __name(async ({ kernel, shell, terminal, args })
118
118
  export {
119
119
  install as default
120
120
  };
121
- //# sourceMappingURL=install-q2Renhgi.js.map
121
+ //# sourceMappingURL=install-v7WLn3NU.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-q2Renhgi.js","sources":["../src/tree/lib/commands/install.ts"],"sourcesContent":["import chalk from 'chalk'\nimport path from 'path'\nimport semver from 'semver'\n\nimport { CommandArgs } from './'\n\nconst install = async ({ kernel, shell, terminal, args }: CommandArgs) => {\n const [packageArg, registryArg, reinstallArg] = args as [string, string, boolean]\n if (!packageArg) {\n terminal.writeln(chalk.red('Usage: install <package-name>[@version]'))\n return 1\n }\n\n const spec = packageArg.match(/(@[^/]+\\/[^@]+|[^@]+)(?:@([^/]+))?/)\n if (!spec) {\n terminal.writeln(chalk.red('Invalid package name format'))\n return 1\n }\n\n const registry = registryArg || shell.env.get('REGISTRY') || 'https://registry.npmjs.org'\n const packageName = spec[1]?.replace('vnpm:', '')\n let version = spec[2] || 'latest'\n\n if (!packageName) {\n terminal.writeln(chalk.red('Invalid package name format'))\n return 1\n }\n\n const url = `${registry}/${packageName}`\n const packageInfo = await globalThis.fetch(url)\n const data = await packageInfo.json()\n\n if (!data.versions || !data['dist-tags']) {\n terminal.writeln(chalk.red(`No versions found for ${packageName}`))\n return 1\n }\n\n if (version === 'latest') version = data['dist-tags'].latest\n else version = semver.maxSatisfying(Object.keys(data.versions), version) || version\n\n if (reinstallArg) {\n try {\n const pkgData = JSON.parse(await kernel.filesystem.fs.readFile(path.join('/usr/lib', packageName, version, 'package.json'), 'utf-8'))\n for (const bin in pkgData.bin) await kernel.filesystem.fs.unlink(path.join('/usr/bin', bin))\n await kernel.filesystem.fs.rm(path.join('/usr/lib', packageName, version), { recursive: true, force: true })\n } catch {}\n }\n\n const packagePath = path.join('/usr/lib', packageName, version, 'package.json')\n if (await kernel.filesystem.fs.exists(packagePath)) {\n terminal.writeln(chalk.green(`${packageName} v${version} is already installed`))\n return 0\n }\n\n terminal.writeln(`Installing ${data.name} v${version} from ${registry}...`)\n\n const tarballUrl = data.versions[version]?.dist?.tarball\n const tarballChecksum = data.versions[version]?.dist?.shasum?.toLowerCase()\n if (!tarballUrl || !tarballChecksum) {\n terminal.writeln(chalk.red(`No tarball URL or checksum found for ${packageName} v${version}`))\n return 1\n }\n\n const tarball = await globalThis.fetch(tarballUrl)\n const arrayBuffer = await tarball.arrayBuffer()\n const hashBuffer = await crypto.subtle.digest('SHA-1', arrayBuffer)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n const downloadChecksum = hashArray.map(b => b.toString(16).padStart(2, '0')).join('')\n\n if (downloadChecksum !== tarballChecksum) {\n terminal.writeln(chalk.red(`Checksum verification failed. Expected ${tarballChecksum} but got ${downloadChecksum}`))\n return 1\n }\n\n const tarballFilename = `${data.name.replace('@', '').replace('/', '-')}-${version}.tar.gz`\n await kernel.filesystem.fs.writeFile(`/tmp/${tarballFilename}`, new Uint8Array(arrayBuffer))\n\n // TODO: Support user packages installed to user's home?\n const extractPath = `/usr/lib/${data.name}/${version}`\n\n await kernel.filesystem.fs.mkdir(extractPath, { mode: 0o755, recursive: true })\n await kernel.filesystem.extractTarball(`/tmp/${tarballFilename}`, extractPath)\n await kernel.filesystem.fs.unlink(`/tmp/${tarballFilename}`)\n terminal.writeln(chalk.green(`Installed ${data.name} v${version} to ${extractPath}`))\n\n const packageData = await kernel.filesystem.fs.readFile(packagePath, 'utf-8')\n const packageJson = JSON.parse(packageData)\n\n try { // execute preinstall script\n if (packageJson.scripts?.['ecmaos:preinstall']) await shell.execute(packageJson.scripts['ecmaos:preinstall'])\n } catch (error) {\n terminal.writeln(chalk.red(`Failed to execute preinstall script for ${packageName}@${version}: ${error}`))\n return 1\n }\n\n try { // link any bins\n if (packageJson.bin) {\n if (typeof packageJson.bin === 'string') {\n const binPath = path.join('/usr/lib', packageName, version, packageJson.bin)\n if (!await kernel.filesystem.fs.exists(binPath)) {\n terminal.writeln(chalk.red(`${binPath} does not exist`))\n return 1\n }\n\n await kernel.filesystem.fs.symlink(binPath, path.join('/usr/bin', packageJson.name))\n terminal.writeln(chalk.blue(`Linked ${packageJson.name} to ${path.join('/usr/bin', packageJson.name)}`))\n } else if (typeof packageJson.bin === 'object') {\n for (const bin in packageJson.bin) {\n const binPath = path.join('/usr/lib', packageName, version, packageJson.bin[bin])\n if (!await kernel.filesystem.fs.exists(binPath)) {\n terminal.writeln(chalk.red(`${binPath} does not exist`))\n return 1\n }\n\n await kernel.filesystem.fs.symlink(binPath, path.join('/usr/bin', bin))\n terminal.writeln(chalk.blue(`Linked ${bin} to ${path.join('/usr/bin', bin)}`))\n }\n }\n }\n } catch (error) {\n terminal.writeln(chalk.red(`Failed to link bins for ${packageName}@${version}: ${error}`))\n }\n\n try { // install dependencies\n if (packageJson.dependencies) {\n for (const dependency in packageJson.dependencies) {\n const packageSpec = `${dependency}${packageJson.dependencies[dependency] ? `@${packageJson.dependencies[dependency]}` : ''}`\n await install({ kernel, shell, terminal, args: [packageSpec, registryArg] })\n }\n }\n } catch (error) {\n terminal.writeln(chalk.red(`Failed to install dependencies for ${packageName}@${version}: ${error}`))\n return 1\n }\n\n try { // execute postinstall script\n if (packageJson.scripts?.['ecmaos:postinstall']) await shell.execute(packageJson.scripts['ecmaos:postinstall'])\n } catch (error) {\n terminal.writeln(chalk.red(`Failed to execute postinstall script for ${packageName}@${version}: ${error}`))\n return 1\n }\n}\n\nexport default install\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-v7WLn3NU.js","sources":["../src/tree/lib/commands/install.ts"],"sourcesContent":["import chalk from 'chalk'\nimport path from 'path'\nimport semver from 'semver'\n\nimport { CommandArgs } from './'\n\nconst install = async ({ kernel, shell, terminal, args }: CommandArgs) => {\n const [packageArg, registryArg, reinstallArg] = args as [string, string, boolean]\n if (!packageArg) {\n terminal.writeln(chalk.red('Usage: install <package-name>[@version]'))\n return 1\n }\n\n const spec = packageArg.match(/(@[^/]+\\/[^@]+|[^@]+)(?:@([^/]+))?/)\n if (!spec) {\n terminal.writeln(chalk.red('Invalid package name format'))\n return 1\n }\n\n const registry = registryArg || shell.env.get('REGISTRY') || 'https://registry.npmjs.org'\n const packageName = spec[1]?.replace('vnpm:', '')\n let version = spec[2] || 'latest'\n\n if (!packageName) {\n terminal.writeln(chalk.red('Invalid package name format'))\n return 1\n }\n\n const url = `${registry}/${packageName}`\n const packageInfo = await globalThis.fetch(url)\n const data = await packageInfo.json()\n\n if (!data.versions || !data['dist-tags']) {\n terminal.writeln(chalk.red(`No versions found for ${packageName}`))\n return 1\n }\n\n if (version === 'latest') version = data['dist-tags'].latest\n else version = semver.maxSatisfying(Object.keys(data.versions), version) || version\n\n if (reinstallArg) {\n try {\n const pkgData = JSON.parse(await kernel.filesystem.fs.readFile(path.join('/usr/lib', packageName, version, 'package.json'), 'utf-8'))\n for (const bin in pkgData.bin) await kernel.filesystem.fs.unlink(path.join('/usr/bin', bin))\n await kernel.filesystem.fs.rm(path.join('/usr/lib', packageName, version), { recursive: true, force: true })\n } catch {}\n }\n\n const packagePath = path.join('/usr/lib', packageName, version, 'package.json')\n if (await kernel.filesystem.fs.exists(packagePath)) {\n terminal.writeln(chalk.green(`${packageName} v${version} is already installed`))\n return 0\n }\n\n terminal.writeln(`Installing ${data.name} v${version} from ${registry}...`)\n\n const tarballUrl = data.versions[version]?.dist?.tarball\n const tarballChecksum = data.versions[version]?.dist?.shasum?.toLowerCase()\n if (!tarballUrl || !tarballChecksum) {\n terminal.writeln(chalk.red(`No tarball URL or checksum found for ${packageName} v${version}`))\n return 1\n }\n\n const tarball = await globalThis.fetch(tarballUrl)\n const arrayBuffer = await tarball.arrayBuffer()\n const hashBuffer = await crypto.subtle.digest('SHA-1', arrayBuffer)\n const hashArray = Array.from(new Uint8Array(hashBuffer))\n const downloadChecksum = hashArray.map(b => b.toString(16).padStart(2, '0')).join('')\n\n if (downloadChecksum !== tarballChecksum) {\n terminal.writeln(chalk.red(`Checksum verification failed. Expected ${tarballChecksum} but got ${downloadChecksum}`))\n return 1\n }\n\n const tarballFilename = `${data.name.replace('@', '').replace('/', '-')}-${version}.tar.gz`\n await kernel.filesystem.fs.writeFile(`/tmp/${tarballFilename}`, new Uint8Array(arrayBuffer))\n\n // TODO: Support user packages installed to user's home?\n const extractPath = `/usr/lib/${data.name}/${version}`\n\n await kernel.filesystem.fs.mkdir(extractPath, { mode: 0o755, recursive: true })\n await kernel.filesystem.extractTarball(`/tmp/${tarballFilename}`, extractPath)\n await kernel.filesystem.fs.unlink(`/tmp/${tarballFilename}`)\n terminal.writeln(chalk.green(`Installed ${data.name} v${version} to ${extractPath}`))\n\n const packageData = await kernel.filesystem.fs.readFile(packagePath, 'utf-8')\n const packageJson = JSON.parse(packageData)\n\n try { // execute preinstall script\n if (packageJson.scripts?.['ecmaos:preinstall']) await shell.execute(packageJson.scripts['ecmaos:preinstall'])\n } catch (error) {\n terminal.writeln(chalk.red(`Failed to execute preinstall script for ${packageName}@${version}: ${error}`))\n return 1\n }\n\n try { // link any bins\n if (packageJson.bin) {\n if (typeof packageJson.bin === 'string') {\n const binPath = path.join('/usr/lib', packageName, version, packageJson.bin)\n if (!await kernel.filesystem.fs.exists(binPath)) {\n terminal.writeln(chalk.red(`${binPath} does not exist`))\n return 1\n }\n\n await kernel.filesystem.fs.symlink(binPath, path.join('/usr/bin', packageJson.name))\n terminal.writeln(chalk.blue(`Linked ${packageJson.name} to ${path.join('/usr/bin', packageJson.name)}`))\n } else if (typeof packageJson.bin === 'object') {\n for (const bin in packageJson.bin) {\n const binPath = path.join('/usr/lib', packageName, version, packageJson.bin[bin])\n if (!await kernel.filesystem.fs.exists(binPath)) {\n terminal.writeln(chalk.red(`${binPath} does not exist`))\n return 1\n }\n\n await kernel.filesystem.fs.symlink(binPath, path.join('/usr/bin', bin))\n terminal.writeln(chalk.blue(`Linked ${bin} to ${path.join('/usr/bin', bin)}`))\n }\n }\n }\n } catch (error) {\n terminal.writeln(chalk.red(`Failed to link bins for ${packageName}@${version}: ${error}`))\n }\n\n try { // install dependencies\n if (packageJson.dependencies) {\n for (const dependency in packageJson.dependencies) {\n const packageSpec = `${dependency}${packageJson.dependencies[dependency] ? `@${packageJson.dependencies[dependency]}` : ''}`\n await install({ kernel, shell, terminal, args: [packageSpec, registryArg] })\n }\n }\n } catch (error) {\n terminal.writeln(chalk.red(`Failed to install dependencies for ${packageName}@${version}: ${error}`))\n return 1\n }\n\n try { // execute postinstall script\n if (packageJson.scripts?.['ecmaos:postinstall']) await shell.execute(packageJson.scripts['ecmaos:postinstall'])\n } catch (error) {\n terminal.writeln(chalk.red(`Failed to execute postinstall script for ${packageName}@${version}: ${error}`))\n return 1\n }\n}\n\nexport default install\n"],"names":[],"mappings":";;;AAMA,MAAM,UAAU,8BAAO,EAAE,QAAQ,OAAO,UAAU,WAAwB;AACxE,QAAM,CAAC,YAAY,aAAa,YAAY,IAAI;AAChD,MAAI,CAAC,YAAY;AACf,aAAS,QAAQ,MAAM,IAAI,yCAAyC,CAAC;AACrE,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,WAAW,MAAM,oCAAoC;AAClE,MAAI,CAAC,MAAM;AACT,aAAS,QAAQ,MAAM,IAAI,6BAA6B,CAAC;AACzD,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,eAAe,MAAM,IAAI,IAAI,UAAU,KAAK;AAC7D,QAAM,cAAc,KAAK,CAAC,GAAG,QAAQ,SAAS,EAAE;AAChD,MAAI,UAAU,KAAK,CAAC,KAAK;AAEzB,MAAI,CAAC,aAAa;AAChB,aAAS,QAAQ,MAAM,IAAI,6BAA6B,CAAC;AACzD,WAAO;AAAA,EACT;AAEA,QAAM,MAAM,GAAG,QAAQ,IAAI,WAAW;AACtC,QAAM,cAAc,MAAM,WAAW,MAAM,GAAG;AAC9C,QAAM,OAAO,MAAM,YAAY,KAAA;AAE/B,MAAI,CAAC,KAAK,YAAY,CAAC,KAAK,WAAW,GAAG;AACxC,aAAS,QAAQ,MAAM,IAAI,yBAAyB,WAAW,EAAE,CAAC;AAClE,WAAO;AAAA,EACT;AAEA,MAAI,YAAY,SAAU,WAAU,KAAK,WAAW,EAAE;AAAA,MACjD,WAAU,OAAO,cAAc,OAAO,KAAK,KAAK,QAAQ,GAAG,OAAO,KAAK;AAE5E,MAAI,cAAc;AAChB,QAAI;AACF,YAAM,UAAU,KAAK,MAAM,MAAM,OAAO,WAAW,GAAG,SAAS,KAAK,KAAK,YAAY,aAAa,SAAS,cAAc,GAAG,OAAO,CAAC;AACpI,iBAAW,OAAO,QAAQ,IAAK,OAAM,OAAO,WAAW,GAAG,OAAO,KAAK,KAAK,YAAY,GAAG,CAAC;AAC3F,YAAM,OAAO,WAAW,GAAG,GAAG,KAAK,KAAK,YAAY,aAAa,OAAO,GAAG,EAAE,WAAW,MAAM,OAAO,MAAM;AAAA,IAC7G,QAAQ;AAAA,IAAC;AAAA,EACX;AAEA,QAAM,cAAc,KAAK,KAAK,YAAY,aAAa,SAAS,cAAc;AAC9E,MAAI,MAAM,OAAO,WAAW,GAAG,OAAO,WAAW,GAAG;AAClD,aAAS,QAAQ,MAAM,MAAM,GAAG,WAAW,KAAK,OAAO,uBAAuB,CAAC;AAC/E,WAAO;AAAA,EACT;AAEA,WAAS,QAAQ,cAAc,KAAK,IAAI,KAAK,OAAO,SAAS,QAAQ,KAAK;AAE1E,QAAM,aAAa,KAAK,SAAS,OAAO,GAAG,MAAM;AACjD,QAAM,kBAAkB,KAAK,SAAS,OAAO,GAAG,MAAM,QAAQ,YAAA;AAC9D,MAAI,CAAC,cAAc,CAAC,iBAAiB;AACnC,aAAS,QAAQ,MAAM,IAAI,wCAAwC,WAAW,KAAK,OAAO,EAAE,CAAC;AAC7F,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,MAAM,WAAW,MAAM,UAAU;AACjD,QAAM,cAAc,MAAM,QAAQ,YAAA;AAClC,QAAM,aAAa,MAAM,OAAO,OAAO,OAAO,SAAS,WAAW;AAClE,QAAM,YAAY,MAAM,KAAK,IAAI,WAAW,UAAU,CAAC;AACvD,QAAM,mBAAmB,UAAU,IAAI,CAAA,MAAK,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAEpF,MAAI,qBAAqB,iBAAiB;AACxC,aAAS,QAAQ,MAAM,IAAI,0CAA0C,eAAe,YAAY,gBAAgB,EAAE,CAAC;AACnH,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB,GAAG,KAAK,KAAK,QAAQ,KAAK,EAAE,EAAE,QAAQ,KAAK,GAAG,CAAC,IAAI,OAAO;AAClF,QAAM,OAAO,WAAW,GAAG,UAAU,QAAQ,eAAe,IAAI,IAAI,WAAW,WAAW,CAAC;AAG3F,QAAM,cAAc,YAAY,KAAK,IAAI,IAAI,OAAO;AAEpD,QAAM,OAAO,WAAW,GAAG,MAAM,aAAa,EAAE,MAAM,KAAO,WAAW,MAAM;AAC9E,QAAM,OAAO,WAAW,eAAe,QAAQ,eAAe,IAAI,WAAW;AAC7E,QAAM,OAAO,WAAW,GAAG,OAAO,QAAQ,eAAe,EAAE;AAC3D,WAAS,QAAQ,MAAM,MAAM,aAAa,KAAK,IAAI,KAAK,OAAO,OAAO,WAAW,EAAE,CAAC;AAEpF,QAAM,cAAc,MAAM,OAAO,WAAW,GAAG,SAAS,aAAa,OAAO;AAC5E,QAAM,cAAc,KAAK,MAAM,WAAW;AAE1C,MAAI;AACF,QAAI,YAAY,UAAU,mBAAmB,EAAG,OAAM,MAAM,QAAQ,YAAY,QAAQ,mBAAmB,CAAC;AAAA,EAC9G,SAAS,OAAO;AACd,aAAS,QAAQ,MAAM,IAAI,2CAA2C,WAAW,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;AACzG,WAAO;AAAA,EACT;AAEA,MAAI;AACF,QAAI,YAAY,KAAK;AACnB,UAAI,OAAO,YAAY,QAAQ,UAAU;AACvC,cAAM,UAAU,KAAK,KAAK,YAAY,aAAa,SAAS,YAAY,GAAG;AAC3E,YAAI,CAAC,MAAM,OAAO,WAAW,GAAG,OAAO,OAAO,GAAG;AAC/C,mBAAS,QAAQ,MAAM,IAAI,GAAG,OAAO,iBAAiB,CAAC;AACvD,iBAAO;AAAA,QACT;AAEA,cAAM,OAAO,WAAW,GAAG,QAAQ,SAAS,KAAK,KAAK,YAAY,YAAY,IAAI,CAAC;AACnF,iBAAS,QAAQ,MAAM,KAAK,UAAU,YAAY,IAAI,OAAO,KAAK,KAAK,YAAY,YAAY,IAAI,CAAC,EAAE,CAAC;AAAA,MACzG,WAAW,OAAO,YAAY,QAAQ,UAAU;AAC9C,mBAAW,OAAO,YAAY,KAAK;AACjC,gBAAM,UAAU,KAAK,KAAK,YAAY,aAAa,SAAS,YAAY,IAAI,GAAG,CAAC;AAChF,cAAI,CAAC,MAAM,OAAO,WAAW,GAAG,OAAO,OAAO,GAAG;AAC/C,qBAAS,QAAQ,MAAM,IAAI,GAAG,OAAO,iBAAiB,CAAC;AACvD,mBAAO;AAAA,UACT;AAEA,gBAAM,OAAO,WAAW,GAAG,QAAQ,SAAS,KAAK,KAAK,YAAY,GAAG,CAAC;AACtE,mBAAS,QAAQ,MAAM,KAAK,UAAU,GAAG,OAAO,KAAK,KAAK,YAAY,GAAG,CAAC,EAAE,CAAC;AAAA,QAC/E;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,aAAS,QAAQ,MAAM,IAAI,2BAA2B,WAAW,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;AAAA,EAC3F;AAEA,MAAI;AACF,QAAI,YAAY,cAAc;AAC5B,iBAAW,cAAc,YAAY,cAAc;AACjD,cAAM,cAAc,GAAG,UAAU,GAAG,YAAY,aAAa,UAAU,IAAI,IAAI,YAAY,aAAa,UAAU,CAAC,KAAK,EAAE;AAC1H,cAAM,QAAQ,EAAE,QAAQ,OAAO,UAAU,MAAM,CAAC,aAAa,WAAW,GAAG;AAAA,MAC7E;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,aAAS,QAAQ,MAAM,IAAI,sCAAsC,WAAW,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;AACpG,WAAO;AAAA,EACT;AAEA,MAAI;AACF,QAAI,YAAY,UAAU,oBAAoB,EAAG,OAAM,MAAM,QAAQ,YAAY,QAAQ,oBAAoB,CAAC;AAAA,EAChH,SAAS,OAAO;AACd,aAAS,QAAQ,MAAM,IAAI,4CAA4C,WAAW,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;AAC1G,WAAO;AAAA,EACT;AACF,GAvIgB;"}