@wasmsoft/fantastic 1.0.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.
- package/README.md +65 -0
- package/bin/run.js +27 -0
- package/bin/supervisor.js +65 -0
- package/dist/acquire/central-url.d.ts +9 -0
- package/dist/acquire/central-url.d.ts.map +1 -0
- package/dist/acquire/central-url.js +74 -0
- package/dist/acquire/central-url.js.map +1 -0
- package/dist/acquire/code.d.ts +21 -0
- package/dist/acquire/code.d.ts.map +1 -0
- package/dist/acquire/code.js +66 -0
- package/dist/acquire/code.js.map +1 -0
- package/dist/acquire/compatibility.d.ts +18 -0
- package/dist/acquire/compatibility.d.ts.map +1 -0
- package/dist/acquire/compatibility.js +36 -0
- package/dist/acquire/compatibility.js.map +1 -0
- package/dist/acquire/fetch.d.ts +26 -0
- package/dist/acquire/fetch.d.ts.map +1 -0
- package/dist/acquire/fetch.js +72 -0
- package/dist/acquire/fetch.js.map +1 -0
- package/dist/acquire/latest.d.ts +24 -0
- package/dist/acquire/latest.d.ts.map +1 -0
- package/dist/acquire/latest.js +95 -0
- package/dist/acquire/latest.js.map +1 -0
- package/dist/backup/archive.d.ts +26 -0
- package/dist/backup/archive.d.ts.map +1 -0
- package/dist/backup/archive.js +123 -0
- package/dist/backup/archive.js.map +1 -0
- package/dist/backup/restore.d.ts +46 -0
- package/dist/backup/restore.d.ts.map +1 -0
- package/dist/backup/restore.js +164 -0
- package/dist/backup/restore.js.map +1 -0
- package/dist/base-command.d.ts +54 -0
- package/dist/base-command.d.ts.map +1 -0
- package/dist/base-command.js +120 -0
- package/dist/base-command.js.map +1 -0
- package/dist/bundle-format/index.d.ts +6 -0
- package/dist/bundle-format/index.d.ts.map +1 -0
- package/dist/bundle-format/index.js +36 -0
- package/dist/bundle-format/index.js.map +1 -0
- package/dist/commands/activate.d.ts +15 -0
- package/dist/commands/activate.d.ts.map +1 -0
- package/dist/commands/activate.js +139 -0
- package/dist/commands/activate.js.map +1 -0
- package/dist/commands/backup.d.ts +11 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +75 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/config/get.d.ts +10 -0
- package/dist/commands/config/get.d.ts.map +1 -0
- package/dist/commands/config/get.js +33 -0
- package/dist/commands/config/get.js.map +1 -0
- package/dist/commands/config/list.d.ts +7 -0
- package/dist/commands/config/list.d.ts.map +1 -0
- package/dist/commands/config/list.js +43 -0
- package/dist/commands/config/list.js.map +1 -0
- package/dist/commands/config/set.d.ts +11 -0
- package/dist/commands/config/set.d.ts.map +1 -0
- package/dist/commands/config/set.js +56 -0
- package/dist/commands/config/set.js.map +1 -0
- package/dist/commands/db/migrate.d.ts +10 -0
- package/dist/commands/db/migrate.d.ts.map +1 -0
- package/dist/commands/db/migrate.js +67 -0
- package/dist/commands/db/migrate.js.map +1 -0
- package/dist/commands/dev.d.ts +19 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +149 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/doctor.d.ts +11 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +75 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/health.d.ts +12 -0
- package/dist/commands/health.d.ts.map +1 -0
- package/dist/commands/health.js +109 -0
- package/dist/commands/health.js.map +1 -0
- package/dist/commands/install.d.ts +60 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +486 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/iptv/snapshot.d.ts +10 -0
- package/dist/commands/iptv/snapshot.d.ts.map +1 -0
- package/dist/commands/iptv/snapshot.js +55 -0
- package/dist/commands/iptv/snapshot.js.map +1 -0
- package/dist/commands/library/drives.d.ts +7 -0
- package/dist/commands/library/drives.d.ts.map +1 -0
- package/dist/commands/library/drives.js +71 -0
- package/dist/commands/library/drives.js.map +1 -0
- package/dist/commands/library/relink.d.ts +10 -0
- package/dist/commands/library/relink.d.ts.map +1 -0
- package/dist/commands/library/relink.js +72 -0
- package/dist/commands/library/relink.js.map +1 -0
- package/dist/commands/library/scan.d.ts +16 -0
- package/dist/commands/library/scan.d.ts.map +1 -0
- package/dist/commands/library/scan.js +87 -0
- package/dist/commands/library/scan.js.map +1 -0
- package/dist/commands/library/sections.d.ts +7 -0
- package/dist/commands/library/sections.d.ts.map +1 -0
- package/dist/commands/library/sections.js +33 -0
- package/dist/commands/library/sections.js.map +1 -0
- package/dist/commands/library/status.d.ts +7 -0
- package/dist/commands/library/status.d.ts.map +1 -0
- package/dist/commands/library/status.js +37 -0
- package/dist/commands/library/status.js.map +1 -0
- package/dist/commands/list.d.ts +7 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +73 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/live/channels.d.ts +10 -0
- package/dist/commands/live/channels.d.ts.map +1 -0
- package/dist/commands/live/channels.js +55 -0
- package/dist/commands/live/channels.js.map +1 -0
- package/dist/commands/live/test.d.ts +15 -0
- package/dist/commands/live/test.d.ts.map +1 -0
- package/dist/commands/live/test.js +116 -0
- package/dist/commands/live/test.js.map +1 -0
- package/dist/commands/logs.d.ts +16 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +77 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/migrate-cli.d.ts +11 -0
- package/dist/commands/migrate-cli.d.ts.map +1 -0
- package/dist/commands/migrate-cli.js +116 -0
- package/dist/commands/migrate-cli.js.map +1 -0
- package/dist/commands/owner/reset.d.ts +7 -0
- package/dist/commands/owner/reset.d.ts.map +1 -0
- package/dist/commands/owner/reset.js +74 -0
- package/dist/commands/owner/reset.js.map +1 -0
- package/dist/commands/restart.d.ts +11 -0
- package/dist/commands/restart.d.ts.map +1 -0
- package/dist/commands/restart.js +53 -0
- package/dist/commands/restart.js.map +1 -0
- package/dist/commands/restore.d.ts +17 -0
- package/dist/commands/restore.d.ts.map +1 -0
- package/dist/commands/restore.js +148 -0
- package/dist/commands/restore.js.map +1 -0
- package/dist/commands/self-update.d.ts +10 -0
- package/dist/commands/self-update.d.ts.map +1 -0
- package/dist/commands/self-update.js +98 -0
- package/dist/commands/self-update.js.map +1 -0
- package/dist/commands/setup.d.ts +19 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +111 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/shell.d.ts +118 -0
- package/dist/commands/shell.d.ts.map +1 -0
- package/dist/commands/shell.js +415 -0
- package/dist/commands/shell.js.map +1 -0
- package/dist/commands/start.d.ts +12 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +108 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/status.d.ts +8 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +115 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +11 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +45 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/stream/cancel.d.ts +13 -0
- package/dist/commands/stream/cancel.d.ts.map +1 -0
- package/dist/commands/stream/cancel.js +31 -0
- package/dist/commands/stream/cancel.js.map +1 -0
- package/dist/commands/stream/encoders.d.ts +7 -0
- package/dist/commands/stream/encoders.d.ts.map +1 -0
- package/dist/commands/stream/encoders.js +42 -0
- package/dist/commands/stream/encoders.js.map +1 -0
- package/dist/commands/stream/queue.d.ts +7 -0
- package/dist/commands/stream/queue.d.ts.map +1 -0
- package/dist/commands/stream/queue.js +52 -0
- package/dist/commands/stream/queue.js.map +1 -0
- package/dist/commands/stream/sessions.d.ts +7 -0
- package/dist/commands/stream/sessions.d.ts.map +1 -0
- package/dist/commands/stream/sessions.js +44 -0
- package/dist/commands/stream/sessions.js.map +1 -0
- package/dist/commands/uninstall.d.ts +23 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +290 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +21 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +290 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/watch.d.ts +10 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +38 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/config/local-config.d.ts +22 -0
- package/dist/config/local-config.d.ts.map +1 -0
- package/dist/config/local-config.js +79 -0
- package/dist/config/local-config.js.map +1 -0
- package/dist/core-scripts/run.d.ts +22 -0
- package/dist/core-scripts/run.d.ts.map +1 -0
- package/dist/core-scripts/run.js +65 -0
- package/dist/core-scripts/run.js.map +1 -0
- package/dist/doctor/check.types.d.ts +51 -0
- package/dist/doctor/check.types.d.ts.map +1 -0
- package/dist/doctor/check.types.js +14 -0
- package/dist/doctor/check.types.js.map +1 -0
- package/dist/doctor/checks/core.check.d.ts +11 -0
- package/dist/doctor/checks/core.check.d.ts.map +1 -0
- package/dist/doctor/checks/core.check.js +104 -0
- package/dist/doctor/checks/core.check.js.map +1 -0
- package/dist/doctor/checks/data.check.d.ts +11 -0
- package/dist/doctor/checks/data.check.d.ts.map +1 -0
- package/dist/doctor/checks/data.check.js +70 -0
- package/dist/doctor/checks/data.check.js.map +1 -0
- package/dist/doctor/checks/environment.check.d.ts +6 -0
- package/dist/doctor/checks/environment.check.d.ts.map +1 -0
- package/dist/doctor/checks/environment.check.js +70 -0
- package/dist/doctor/checks/environment.check.js.map +1 -0
- package/dist/doctor/checks/integrity.check.d.ts +4 -0
- package/dist/doctor/checks/integrity.check.d.ts.map +1 -0
- package/dist/doctor/checks/integrity.check.js +89 -0
- package/dist/doctor/checks/integrity.check.js.map +1 -0
- package/dist/doctor/checks/isolation.check.d.ts +49 -0
- package/dist/doctor/checks/isolation.check.d.ts.map +1 -0
- package/dist/doctor/checks/isolation.check.js +220 -0
- package/dist/doctor/checks/isolation.check.js.map +1 -0
- package/dist/doctor/checks/licence.check.d.ts +8 -0
- package/dist/doctor/checks/licence.check.d.ts.map +1 -0
- package/dist/doctor/checks/licence.check.js +172 -0
- package/dist/doctor/checks/licence.check.js.map +1 -0
- package/dist/doctor/checks/ports.check.d.ts +4 -0
- package/dist/doctor/checks/ports.check.d.ts.map +1 -0
- package/dist/doctor/checks/ports.check.js +52 -0
- package/dist/doctor/checks/ports.check.js.map +1 -0
- package/dist/doctor/checks/supervisor.check.d.ts +19 -0
- package/dist/doctor/checks/supervisor.check.d.ts.map +1 -0
- package/dist/doctor/checks/supervisor.check.js +152 -0
- package/dist/doctor/checks/supervisor.check.js.map +1 -0
- package/dist/doctor/checks/tooling.check.d.ts +3 -0
- package/dist/doctor/checks/tooling.check.d.ts.map +1 -0
- package/dist/doctor/checks/tooling.check.js +43 -0
- package/dist/doctor/checks/tooling.check.js.map +1 -0
- package/dist/doctor/registry.d.ts +15 -0
- package/dist/doctor/registry.d.ts.map +1 -0
- package/dist/doctor/registry.js +53 -0
- package/dist/doctor/registry.js.map +1 -0
- package/dist/exit-codes.d.ts +18 -0
- package/dist/exit-codes.d.ts.map +1 -0
- package/dist/exit-codes.js +23 -0
- package/dist/exit-codes.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/logs/sink.d.ts +11 -0
- package/dist/logs/sink.d.ts.map +1 -0
- package/dist/logs/sink.js +73 -0
- package/dist/logs/sink.js.map +1 -0
- package/dist/logs/tail.d.ts +17 -0
- package/dist/logs/tail.d.ts.map +1 -0
- package/dist/logs/tail.js +98 -0
- package/dist/logs/tail.js.map +1 -0
- package/dist/packaging/boot-task.d.ts +56 -0
- package/dist/packaging/boot-task.d.ts.map +1 -0
- package/dist/packaging/boot-task.js +151 -0
- package/dist/packaging/boot-task.js.map +1 -0
- package/dist/packaging/install.d.ts +154 -0
- package/dist/packaging/install.d.ts.map +1 -0
- package/dist/packaging/install.js +381 -0
- package/dist/packaging/install.js.map +1 -0
- package/dist/packaging/layout.d.ts +153 -0
- package/dist/packaging/layout.d.ts.map +1 -0
- package/dist/packaging/layout.js +168 -0
- package/dist/packaging/layout.js.map +1 -0
- package/dist/packaging/machine-path.d.ts +52 -0
- package/dist/packaging/machine-path.d.ts.map +1 -0
- package/dist/packaging/machine-path.js +237 -0
- package/dist/packaging/machine-path.js.map +1 -0
- package/dist/packaging/manifest.d.ts +37 -0
- package/dist/packaging/manifest.d.ts.map +1 -0
- package/dist/packaging/manifest.js +115 -0
- package/dist/packaging/manifest.js.map +1 -0
- package/dist/packaging/shims.d.ts +31 -0
- package/dist/packaging/shims.d.ts.map +1 -0
- package/dist/packaging/shims.js +165 -0
- package/dist/packaging/shims.js.map +1 -0
- package/dist/probes/internal-paths.d.ts +35 -0
- package/dist/probes/internal-paths.d.ts.map +1 -0
- package/dist/probes/internal-paths.js +58 -0
- package/dist/probes/internal-paths.js.map +1 -0
- package/dist/probes/internal.client.d.ts +54 -0
- package/dist/probes/internal.client.d.ts.map +1 -0
- package/dist/probes/internal.client.js +123 -0
- package/dist/probes/internal.client.js.map +1 -0
- package/dist/probes/port.probe.d.ts +21 -0
- package/dist/probes/port.probe.d.ts.map +1 -0
- package/dist/probes/port.probe.js +42 -0
- package/dist/probes/port.probe.js.map +1 -0
- package/dist/probes/service.probe.d.ts +29 -0
- package/dist/probes/service.probe.d.ts.map +1 -0
- package/dist/probes/service.probe.js +65 -0
- package/dist/probes/service.probe.js.map +1 -0
- package/dist/profiles/appliance.profile.d.ts +20 -0
- package/dist/profiles/appliance.profile.d.ts.map +1 -0
- package/dist/profiles/appliance.profile.js +137 -0
- package/dist/profiles/appliance.profile.js.map +1 -0
- package/dist/profiles/dev.profile.d.ts +22 -0
- package/dist/profiles/dev.profile.d.ts.map +1 -0
- package/dist/profiles/dev.profile.js +104 -0
- package/dist/profiles/dev.profile.js.map +1 -0
- package/dist/profiles/resolve.d.ts +37 -0
- package/dist/profiles/resolve.d.ts.map +1 -0
- package/dist/profiles/resolve.js +198 -0
- package/dist/profiles/resolve.js.map +1 -0
- package/dist/profiles/types.d.ts +57 -0
- package/dist/profiles/types.d.ts.map +1 -0
- package/dist/profiles/types.js +15 -0
- package/dist/profiles/types.js.map +1 -0
- package/dist/registry/local-registry.d.ts +79 -0
- package/dist/registry/local-registry.d.ts.map +1 -0
- package/dist/registry/local-registry.js +252 -0
- package/dist/registry/local-registry.js.map +1 -0
- package/dist/render/banner.d.ts +13 -0
- package/dist/render/banner.d.ts.map +1 -0
- package/dist/render/banner.js +83 -0
- package/dist/render/banner.js.map +1 -0
- package/dist/render/boot.render.d.ts +123 -0
- package/dist/render/boot.render.d.ts.map +1 -0
- package/dist/render/boot.render.js +288 -0
- package/dist/render/boot.render.js.map +1 -0
- package/dist/render/brand.d.ts +16 -0
- package/dist/render/brand.d.ts.map +1 -0
- package/dist/render/brand.js +22 -0
- package/dist/render/brand.js.map +1 -0
- package/dist/render/doctor.render.d.ts +12 -0
- package/dist/render/doctor.render.d.ts.map +1 -0
- package/dist/render/doctor.render.js +95 -0
- package/dist/render/doctor.render.js.map +1 -0
- package/dist/render/json.d.ts +29 -0
- package/dist/render/json.d.ts.map +1 -0
- package/dist/render/json.js +19 -0
- package/dist/render/json.js.map +1 -0
- package/dist/render/licence.render.d.ts +10 -0
- package/dist/render/licence.render.d.ts.map +1 -0
- package/dist/render/licence.render.js +167 -0
- package/dist/render/licence.render.js.map +1 -0
- package/dist/render/status.render.d.ts +6 -0
- package/dist/render/status.render.d.ts.map +1 -0
- package/dist/render/status.render.js +52 -0
- package/dist/render/status.render.js.map +1 -0
- package/dist/render/theme.d.ts +66 -0
- package/dist/render/theme.d.ts.map +1 -0
- package/dist/render/theme.js +89 -0
- package/dist/render/theme.js.map +1 -0
- package/dist/runtime-guard.d.ts +19 -0
- package/dist/runtime-guard.d.ts.map +1 -0
- package/dist/runtime-guard.js +57 -0
- package/dist/runtime-guard.js.map +1 -0
- package/dist/shell/input-mode.d.ts +25 -0
- package/dist/shell/input-mode.d.ts.map +1 -0
- package/dist/shell/input-mode.js +17 -0
- package/dist/shell/input-mode.js.map +1 -0
- package/dist/shell/parse-line.d.ts +6 -0
- package/dist/shell/parse-line.d.ts.map +1 -0
- package/dist/shell/parse-line.js +62 -0
- package/dist/shell/parse-line.js.map +1 -0
- package/dist/shell/suggestions.d.ts +14 -0
- package/dist/shell/suggestions.d.ts.map +1 -0
- package/dist/shell/suggestions.js +35 -0
- package/dist/shell/suggestions.js.map +1 -0
- package/dist/supervisor/dependencies.d.ts +2 -0
- package/dist/supervisor/dependencies.d.ts.map +1 -0
- package/dist/supervisor/dependencies.js +38 -0
- package/dist/supervisor/dependencies.js.map +1 -0
- package/dist/supervisor/entry.d.ts +36 -0
- package/dist/supervisor/entry.d.ts.map +1 -0
- package/dist/supervisor/entry.js +171 -0
- package/dist/supervisor/entry.js.map +1 -0
- package/dist/supervisor/inspect.d.ts +17 -0
- package/dist/supervisor/inspect.d.ts.map +1 -0
- package/dist/supervisor/inspect.js +39 -0
- package/dist/supervisor/inspect.js.map +1 -0
- package/dist/supervisor/invocation.d.ts +27 -0
- package/dist/supervisor/invocation.d.ts.map +1 -0
- package/dist/supervisor/invocation.js +33 -0
- package/dist/supervisor/invocation.js.map +1 -0
- package/dist/supervisor/monitor.d.ts +63 -0
- package/dist/supervisor/monitor.d.ts.map +1 -0
- package/dist/supervisor/monitor.js +141 -0
- package/dist/supervisor/monitor.js.map +1 -0
- package/dist/supervisor/orchestrator.d.ts +52 -0
- package/dist/supervisor/orchestrator.d.ts.map +1 -0
- package/dist/supervisor/orchestrator.js +154 -0
- package/dist/supervisor/orchestrator.js.map +1 -0
- package/dist/supervisor/pidfile.d.ts +21 -0
- package/dist/supervisor/pidfile.d.ts.map +1 -0
- package/dist/supervisor/pidfile.js +39 -0
- package/dist/supervisor/pidfile.js.map +1 -0
- package/dist/supervisor/process-identity.d.ts +19 -0
- package/dist/supervisor/process-identity.d.ts.map +1 -0
- package/dist/supervisor/process-identity.js +51 -0
- package/dist/supervisor/process-identity.js.map +1 -0
- package/dist/supervisor/readiness.d.ts +17 -0
- package/dist/supervisor/readiness.d.ts.map +1 -0
- package/dist/supervisor/readiness.js +52 -0
- package/dist/supervisor/readiness.js.map +1 -0
- package/dist/supervisor/restart-consumer.d.ts +37 -0
- package/dist/supervisor/restart-consumer.d.ts.map +1 -0
- package/dist/supervisor/restart-consumer.js +119 -0
- package/dist/supervisor/restart-consumer.js.map +1 -0
- package/dist/supervisor/runner.d.ts +2 -0
- package/dist/supervisor/runner.d.ts.map +1 -0
- package/dist/supervisor/runner.js +118 -0
- package/dist/supervisor/runner.js.map +1 -0
- package/dist/supervisor/schedule-timer.d.ts +38 -0
- package/dist/supervisor/schedule-timer.d.ts.map +1 -0
- package/dist/supervisor/schedule-timer.js +148 -0
- package/dist/supervisor/schedule-timer.js.map +1 -0
- package/dist/supervisor/spawn.d.ts +18 -0
- package/dist/supervisor/spawn.d.ts.map +1 -0
- package/dist/supervisor/spawn.js +119 -0
- package/dist/supervisor/spawn.js.map +1 -0
- package/dist/supervisor/state-files.d.ts +33 -0
- package/dist/supervisor/state-files.d.ts.map +1 -0
- package/dist/supervisor/state-files.js +110 -0
- package/dist/supervisor/state-files.js.map +1 -0
- package/dist/supervisor/tree-kill.d.ts +14 -0
- package/dist/supervisor/tree-kill.d.ts.map +1 -0
- package/dist/supervisor/tree-kill.js +82 -0
- package/dist/supervisor/tree-kill.js.map +1 -0
- package/dist/ui/health-panel.d.ts +8 -0
- package/dist/ui/health-panel.d.ts.map +1 -0
- package/dist/ui/health-panel.js +91 -0
- package/dist/ui/health-panel.js.map +1 -0
- package/dist/updating/apply.d.ts +50 -0
- package/dist/updating/apply.d.ts.map +1 -0
- package/dist/updating/apply.js +172 -0
- package/dist/updating/apply.js.map +1 -0
- package/dist/updating/download.d.ts +44 -0
- package/dist/updating/download.d.ts.map +1 -0
- package/dist/updating/download.js +144 -0
- package/dist/updating/download.js.map +1 -0
- package/dist/updating/rollback.d.ts +33 -0
- package/dist/updating/rollback.d.ts.map +1 -0
- package/dist/updating/rollback.js +54 -0
- package/dist/updating/rollback.js.map +1 -0
- package/dist/updating/self.d.ts +16 -0
- package/dist/updating/self.d.ts.map +1 -0
- package/dist/updating/self.js +50 -0
- package/dist/updating/self.js.map +1 -0
- package/dist/updating/verify.d.ts +25 -0
- package/dist/updating/verify.d.ts.map +1 -0
- package/dist/updating/verify.js +51 -0
- package/dist/updating/verify.js.map +1 -0
- package/dist/updating/versions.d.ts +31 -0
- package/dist/updating/versions.d.ts.map +1 -0
- package/dist/updating/versions.js +78 -0
- package/dist/updating/versions.js.map +1 -0
- package/dist/version.d.ts +4 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +29 -0
- package/dist/version.js.map +1 -0
- package/package.json +106 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../src/exit-codes.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,iGAAiG;AACjG,mDAAmD;AACnD,+FAA+F;AAC/F,gGAAgG;AAChG,mFAAmF;AAEnF,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,YAAY;IACZ,EAAE,EAAE,CAAC;IACL,oCAAoC;IACpC,OAAO,EAAE,CAAC;IACV,gEAAgE;IAChE,KAAK,EAAE,CAAC;IACR,gDAAgD;IAChD,aAAa,EAAE,CAAC;IAChB,0EAA0E;IAC1E,WAAW,EAAE,CAAC;IACd,2DAA2D;IAC3D,UAAU,EAAE,CAAC;IACb,qFAAqF;IACrF,kBAAkB,EAAE,CAAC;CACb,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// AR: مدخل المكتبة، لا مدخل الأمر. الأمر fantastic يدخل من bin/run.js عبر oclif؛ وهذا الملفّ
|
|
2
|
+
// هو ما يراه من يستورد الحزمة بدل أن يشغّلها — ومستهلكه الوحيد اليوم مستودع المنتج.
|
|
3
|
+
//
|
|
4
|
+
// **ولا يُصدَّر منه شيء ثقيل.** الاستيراد هنا يعني تحميل الوحدة عند كل import، وأدوات
|
|
5
|
+
// الإصدار في مستودع المنتج لا تحتاج oclif ولا Ink ولا صَدَفة — تحتاج تعريف شكل الحزمة، وهو
|
|
6
|
+
// على مسارٍ فرعيٍّ خاصّ به (./bundle-format) لهذا السبب بالذات.
|
|
7
|
+
// EN: The library entry point, not the command's. The `fantastic` command enters through
|
|
8
|
+
// bin/run.js via oclif; this file is what someone importing the package rather than running it
|
|
9
|
+
// sees — and its only consumer today is the product repository.
|
|
10
|
+
//
|
|
11
|
+
// **Nothing heavy is exported from here.** An import means loading the module on every
|
|
12
|
+
// `import`, and the product repository's release tooling needs neither oclif nor Ink nor the
|
|
13
|
+
// shell — it needs the bundle-format definition, which lives on its own subpath
|
|
14
|
+
// (`./bundle-format`) for exactly that reason.
|
|
15
|
+
export { VERSION } from "./version.js";
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,wFAAwF;AACxF,EAAE;AACF,4FAA4F;AAC5F,+FAA+F;AAC/F,sEAAsE;AACtE,yFAAyF;AACzF,mGAAmG;AACnG,oEAAoE;AACpE,EAAE;AACF,2FAA2F;AAC3F,iGAAiG;AACjG,oFAAoF;AACpF,mDAAmD;AAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ServiceName } from "../profiles/types.js";
|
|
2
|
+
export declare function logFilePath(logDir: string, service: ServiceName): string;
|
|
3
|
+
/** يدوّر بالحجم: core.log ← core.log.1 ← core.log.2، ويُسقط الأقدم. */
|
|
4
|
+
export declare function rotateIfNeeded(logDir: string, service: ServiceName, maxBytes?: number): void;
|
|
5
|
+
/**
|
|
6
|
+
* يفتح ملف سجلّ الخدمة للإلحاق ويعيد واصفه. المتّصل مسؤول عن إغلاقه.
|
|
7
|
+
* يُدوَّر الملف قبل الفتح لأن التدوير أثناء الإمساك مستحيل.
|
|
8
|
+
*/
|
|
9
|
+
export declare function openLogFd(logDir: string, service: ServiceName): number;
|
|
10
|
+
export declare function closeLogFd(fd: number): void;
|
|
11
|
+
//# sourceMappingURL=sink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sink.d.ts","sourceRoot":"","sources":["../../src/logs/sink.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA2BxD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAExE;AAED,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,SAAY,GAAG,IAAI,CAyB/F;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAItE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAM3C"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { closeSync, existsSync, mkdirSync, openSync, renameSync, rmSync, statSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
// AR: مصرف السجلات. الحقيقة المقيسة: النواة تكتب على stdout فقط — LOG_DIR موجود في إعداداتها لكن
|
|
4
|
+
// لا مصرف ملفات موصول به. فالتقاط الـ CLI للمخرَج هو ما يجعل fantastic logs ممكنًا أصلًا.
|
|
5
|
+
//
|
|
6
|
+
// في الوضع المنفصل نمرّر واصف الملف مباشرةً إلى العملية بدل أن نعترض مخرجها: لو اعترضناه لتوقّف
|
|
7
|
+
// التسجيل لحظة خروج الـ CLI. وهذا أيضًا يُنتج ملفًا نظيفًا بلا رموز ANSI، لأن pino-pretty وchalk
|
|
8
|
+
// وVite تُعطّل التلوين تلقائيًا حين لا يكون المخرَج طرفية.
|
|
9
|
+
//
|
|
10
|
+
// المقايضة المعروفة: لا يمكن تدوير ملف مفتوح بواسطة العملية، فالتدوير يقع **عند الإطلاق** لا
|
|
11
|
+
// أثناء التشغيل. جلسة تطوير طويلة جدًا قد تتجاوز السقف حتى إعادة التشغيل التالية.
|
|
12
|
+
// EN: The log sink. The measured fact: the core writes to stdout only — LOG_DIR exists in its config
|
|
13
|
+
// but no file transport is wired to it. The CLI capturing that output is what makes
|
|
14
|
+
// `fantastic logs` possible at all.
|
|
15
|
+
//
|
|
16
|
+
// In detached mode we hand the file descriptor straight to the process instead of intercepting
|
|
17
|
+
// its output: intercepting would stop logging the moment the CLI exits. It also yields a clean
|
|
18
|
+
// file with no ANSI, because pino-pretty, chalk and Vite all disable colour when the output is
|
|
19
|
+
// not a terminal.
|
|
20
|
+
//
|
|
21
|
+
// The known trade-off: a file held open by the process cannot be rotated, so rotation happens
|
|
22
|
+
// **at launch**, not during a run. A very long dev session can exceed the cap until the next
|
|
23
|
+
// restart.
|
|
24
|
+
const MAX_BYTES = 5 * 1024 * 1024;
|
|
25
|
+
const MAX_FILES = 3;
|
|
26
|
+
export function logFilePath(logDir, service) {
|
|
27
|
+
return join(logDir, `${service}.log`);
|
|
28
|
+
}
|
|
29
|
+
/** يدوّر بالحجم: core.log ← core.log.1 ← core.log.2، ويُسقط الأقدم. */
|
|
30
|
+
export function rotateIfNeeded(logDir, service, maxBytes = MAX_BYTES) {
|
|
31
|
+
const path = logFilePath(logDir, service);
|
|
32
|
+
if (!existsSync(path))
|
|
33
|
+
return;
|
|
34
|
+
let size = 0;
|
|
35
|
+
try {
|
|
36
|
+
size = statSync(path).size;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (size < maxBytes)
|
|
42
|
+
return;
|
|
43
|
+
rmSync(`${path}.${MAX_FILES - 1}`, { force: true });
|
|
44
|
+
for (let index = MAX_FILES - 2; index >= 1; index -= 1) {
|
|
45
|
+
const from = `${path}.${index}`;
|
|
46
|
+
if (existsSync(from))
|
|
47
|
+
renameSync(from, `${path}.${index + 1}`);
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
renameSync(path, `${path}.1`);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// الملف قد يكون ممسوكًا بعملية أخرى؛ نتركه ونكمل بدل أن نُفشل الإقلاع من أجل تدوير.
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* يفتح ملف سجلّ الخدمة للإلحاق ويعيد واصفه. المتّصل مسؤول عن إغلاقه.
|
|
58
|
+
* يُدوَّر الملف قبل الفتح لأن التدوير أثناء الإمساك مستحيل.
|
|
59
|
+
*/
|
|
60
|
+
export function openLogFd(logDir, service) {
|
|
61
|
+
mkdirSync(logDir, { recursive: true });
|
|
62
|
+
rotateIfNeeded(logDir, service);
|
|
63
|
+
return openSync(logFilePath(logDir, service), "a");
|
|
64
|
+
}
|
|
65
|
+
export function closeLogFd(fd) {
|
|
66
|
+
try {
|
|
67
|
+
closeSync(fd);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// مغلق سلفًا.
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=sink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sink.js","sourceRoot":"","sources":["../../src/logs/sink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,mGAAmG;AACnG,gGAAgG;AAChG,EAAE;AACF,oGAAoG;AACpG,qGAAqG;AACrG,+DAA+D;AAC/D,EAAE;AACF,iGAAiG;AACjG,sFAAsF;AACtF,qGAAqG;AACrG,wFAAwF;AACxF,wCAAwC;AACxC,EAAE;AACF,mGAAmG;AACnG,mGAAmG;AACnG,mGAAmG;AACnG,sBAAsB;AACtB,EAAE;AACF,kGAAkG;AAClG,iGAAiG;AACjG,eAAe;AAEf,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAClC,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,OAAoB;IAC9D,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,MAAM,CAAC,CAAC;AACxC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAoB,EAAE,QAAQ,GAAG,SAAS;IACvF,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO;IAE9B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,CAAC;QACH,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,IAAI,IAAI,GAAG,QAAQ;QAAE,OAAO;IAE5B,MAAM,CAAC,GAAG,IAAI,IAAI,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpD,KAAK,IAAI,KAAK,GAAG,SAAS,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;QAChC,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAAC;QACH,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,oFAAoF;IACtF,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,OAAoB;IAC5D,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAU;IACnC,IAAI,CAAC;QACH,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ServiceName } from "../profiles/types.js";
|
|
2
|
+
export declare function readTail(logDir: string, service: ServiceName, lines: number): string[];
|
|
3
|
+
export interface FollowOptions {
|
|
4
|
+
logDir: string;
|
|
5
|
+
services: ServiceName[];
|
|
6
|
+
onLine: (service: ServiceName, line: string) => void;
|
|
7
|
+
pollMs?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface Follower {
|
|
10
|
+
stop: () => void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* يتابع ملفات السجلّ ويصدر الأسطر الجديدة بترتيب وصولها.
|
|
14
|
+
* الاستطلاع بالحجم لا fs.watch: الأخير غير موثوق على ويندوز مع ملفات تكتبها عملية أخرى.
|
|
15
|
+
*/
|
|
16
|
+
export declare function followLogs(options: FollowOptions): Follower;
|
|
17
|
+
//# sourceMappingURL=tail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tail.d.ts","sourceRoot":"","sources":["../../src/logs/tail.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAkBxD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAatF;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,QAAQ,CAkE3D"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { existsSync, openSync, readSync, closeSync, statSync, readFileSync } from "node:fs";
|
|
2
|
+
import stripAnsi from "strip-ansi";
|
|
3
|
+
import { logFilePath } from "./sink.js";
|
|
4
|
+
// AR: قراءة السجلات وتتبّعها. التجريد من ANSI يقع **عند القراءة** لا عند الكتابة: في الوضع المنفصل
|
|
5
|
+
// يكتب النظام مباشرةً إلى الملف بلا وسيط، فأدوات مثل tsc تسرّب رموز مسح الشاشة إلى الملف.
|
|
6
|
+
// التنظيف هنا يجعل الملف صالحًا للعرض دون أن نفقد التسجيل بعد خروج الـ CLI.
|
|
7
|
+
//
|
|
8
|
+
// ملاحظة صادقة عن الترتيب: أسطر Vite بلا طوابع زمنية، وطابع pino لا يحمل تاريخًا. فالدمج
|
|
9
|
+
// التاريخي عبر الخدمات ليس دقيقًا، ولذلك نعرض التاريخ **مقسّمًا بالخدمة** ونحصر الدمج الحقيقي
|
|
10
|
+
// في وضع المتابعة حيث يكون الترتيب ترتيب الوصول الفعلي.
|
|
11
|
+
// EN: Log reading and following. ANSI is stripped **on read**, not on write: in detached mode the OS
|
|
12
|
+
// writes straight to the file with nothing in between, so tools like tsc leak screen-clear codes
|
|
13
|
+
// into it. Cleaning here keeps the file presentable without losing capture after the CLI exits.
|
|
14
|
+
//
|
|
15
|
+
// An honest note on ordering: Vite's lines carry no timestamp and pino's carries no date, so
|
|
16
|
+
// cross-service historical merging cannot be accurate. History is therefore shown **grouped by
|
|
17
|
+
// service**, and true merging is confined to follow mode where the order is real arrival order.
|
|
18
|
+
export function readTail(logDir, service, lines) {
|
|
19
|
+
const path = logFilePath(logDir, service);
|
|
20
|
+
if (!existsSync(path))
|
|
21
|
+
return [];
|
|
22
|
+
try {
|
|
23
|
+
return readFileSync(path, "utf8")
|
|
24
|
+
.split(/\r?\n/)
|
|
25
|
+
.map((line) => stripAnsi(line).trimEnd())
|
|
26
|
+
.filter((line) => line.trim().length > 0)
|
|
27
|
+
.slice(-lines);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* يتابع ملفات السجلّ ويصدر الأسطر الجديدة بترتيب وصولها.
|
|
35
|
+
* الاستطلاع بالحجم لا fs.watch: الأخير غير موثوق على ويندوز مع ملفات تكتبها عملية أخرى.
|
|
36
|
+
*/
|
|
37
|
+
export function followLogs(options) {
|
|
38
|
+
const { logDir, services, onLine, pollMs = 400 } = options;
|
|
39
|
+
// نبدأ من نهاية كل ملف: المتابعة تعني الجديد، والتاريخ له -n.
|
|
40
|
+
const offsets = new Map();
|
|
41
|
+
const carry = new Map();
|
|
42
|
+
for (const service of services) {
|
|
43
|
+
const path = logFilePath(logDir, service);
|
|
44
|
+
offsets.set(service, existsSync(path) ? statSync(path).size : 0);
|
|
45
|
+
carry.set(service, "");
|
|
46
|
+
}
|
|
47
|
+
const drain = (service) => {
|
|
48
|
+
const path = logFilePath(logDir, service);
|
|
49
|
+
if (!existsSync(path))
|
|
50
|
+
return;
|
|
51
|
+
let size;
|
|
52
|
+
try {
|
|
53
|
+
size = statSync(path).size;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const from = offsets.get(service) ?? 0;
|
|
59
|
+
// تقلّص الملف يعني تدويرًا: نعيد البدء من أوله بدل قراءة إزاحة لم تعد صالحة.
|
|
60
|
+
if (size < from) {
|
|
61
|
+
offsets.set(service, 0);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (size === from)
|
|
65
|
+
return;
|
|
66
|
+
const length = size - from;
|
|
67
|
+
const buffer = Buffer.alloc(length);
|
|
68
|
+
let fd;
|
|
69
|
+
try {
|
|
70
|
+
fd = openSync(path, "r");
|
|
71
|
+
readSync(fd, buffer, 0, length, from);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
if (fd !== undefined)
|
|
78
|
+
closeSync(fd);
|
|
79
|
+
}
|
|
80
|
+
offsets.set(service, size);
|
|
81
|
+
const text = (carry.get(service) ?? "") + buffer.toString("utf8");
|
|
82
|
+
const parts = text.split(/\r?\n/);
|
|
83
|
+
carry.set(service, parts.pop() ?? "");
|
|
84
|
+
for (const part of parts) {
|
|
85
|
+
const line = stripAnsi(part).trimEnd();
|
|
86
|
+
if (line.trim().length > 0)
|
|
87
|
+
onLine(service, line);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const timer = setInterval(() => {
|
|
91
|
+
for (const service of services)
|
|
92
|
+
drain(service);
|
|
93
|
+
}, pollMs);
|
|
94
|
+
return {
|
|
95
|
+
stop: () => clearInterval(timer),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=tail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tail.js","sourceRoot":"","sources":["../../src/logs/tail.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AR: اسم المهمة. **ثابت واحد لأن التسجيل والحذف والاستعلام تكتبه ثلاثتها** — واسمٌ يختلف حرفًا بين
|
|
3
|
+
* التثبيت والإزالة يترك مهمةً يتيمة تحاول تشغيل مجلد محذوف عند كل إقلاع، إلى الأبد.
|
|
4
|
+
* EN: The task's name. **One constant because registration, removal and the query all write it** —
|
|
5
|
+
* and a name differing by a character between install and uninstall leaves an orphan task trying
|
|
6
|
+
* to launch a deleted folder on every boot, forever.
|
|
7
|
+
*/
|
|
8
|
+
export declare const BOOT_TASK_NAME = "Fantastic Supervisor";
|
|
9
|
+
export interface BootTaskChange {
|
|
10
|
+
changed: boolean;
|
|
11
|
+
detail: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* AR: ما يشغّله ويندوز عند الإقلاع: شيمة bin\، بلا وسائط.
|
|
15
|
+
*
|
|
16
|
+
* كانت "...\fantastic.cmd" watch حتى ٠٢٦، حين كانت الشيمة تصل إلى الواجهة الكاملة فتحتاج أن
|
|
17
|
+
* تُسمّى لها الأمر. وقد خرجت الواجهة من الحزمة، وصارت الشيمة تصل إلى **المُشرِف وحده** — وهو
|
|
18
|
+
* لا يفعل شيئًا آخر ولا يقرأ وسائط. فكلمةٌ باقيةٌ هنا تُمرَّر إلى ملفٍّ يتجاهلها.
|
|
19
|
+
*
|
|
20
|
+
* **ولا تنادي المهمّةُ الواجهةَ العالمية بحال.** npm i -g على ويندوز يكتب في
|
|
21
|
+
* %AppData%\Roaming\npm الخاصّ بمن نفّذ التثبيت، وهذه المهمّة تعمل بحسابٍ آخر (SYSTEM
|
|
22
|
+
* غالبًا) وقد لا ترى ذلك المجلد أصلًا — بعد انقطاع كهرباء، بلا أحدٍ يقرأ رسالة الفشل.
|
|
23
|
+
* EN: What Windows runs at boot: the `bin\` shim, with no arguments.
|
|
24
|
+
*
|
|
25
|
+
* It was `"...\fantastic.cmd" watch` until 026, when the shim reached the full CLI and therefore
|
|
26
|
+
* had to be told which command to run. The CLI has left the bundle, and the shim now reaches
|
|
27
|
+
* **the supervisor alone** — which does nothing else and reads no arguments. A leftover word
|
|
28
|
+
* here would be forwarded to a file that ignores it.
|
|
29
|
+
*
|
|
30
|
+
* **And the task never calls the global CLI.** `npm i -g` on Windows writes into
|
|
31
|
+
* `%AppData%\Roaming\npm` belonging to whoever ran the install, while this task runs as another
|
|
32
|
+
* account (usually `SYSTEM`) that may not see that folder at all — after a power cut, with
|
|
33
|
+
* nobody there to read the failure.
|
|
34
|
+
*/
|
|
35
|
+
export declare function bootTaskCommand(root: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* AR: هل المهمة مسجَّلة **ومُفعَّلة**؟ الشرطان معًا: مهمة موجودة ومعطَّلة تجتاز /Query ولا تعمل
|
|
38
|
+
* أبدًا — وهي أسوأ من الغياب، لأنها تُعلن استعدادًا كاذبًا فتُتيح إطفاء الآلة.
|
|
39
|
+
* EN: Is the task registered **and enabled**? Both conditions: a present-but-disabled task passes
|
|
40
|
+
* `/Query` and never runs — which is worse than absence, because it announces a false readiness
|
|
41
|
+
* and so unlocks switching the machine off.
|
|
42
|
+
*/
|
|
43
|
+
export declare function isBootTaskInstalled(): Promise<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* AR: يسجّل المهمة (أو يستبدلها بـ/F فيكون التثبيت فوق تثبيت آمن التكرار). الفشل **لا يُفشل
|
|
46
|
+
* التثبيت**: النظام يعمل تمامًا، وما فات هو العودة التلقائية بعد انقطاع كهرباء — يُعلَن سطرًا
|
|
47
|
+
* ويُعرَض في doctor، ولا يُمحى تثبيت سليم من أجله.
|
|
48
|
+
* EN: Registers the task (or replaces it with `/F`, so reinstalling over an install is idempotent).
|
|
49
|
+
* A failure **does not fail the install**: the system runs perfectly, and what was lost is the
|
|
50
|
+
* automatic return after a power cut — announced in a line and surfaced by `doctor`, not a
|
|
51
|
+
* reason to erase a sound installation.
|
|
52
|
+
*/
|
|
53
|
+
export declare function registerBootTask(root: string): Promise<BootTaskChange>;
|
|
54
|
+
/** يزيل المهمة. ما يكتبه التثبيت تُزيله الإزالة، وإلّا بقيت مهمة تحاول تشغيل مجلد محذوف. */
|
|
55
|
+
export declare function removeBootTask(): Promise<BootTaskChange>;
|
|
56
|
+
//# sourceMappingURL=boot-task.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boot-task.d.ts","sourceRoot":"","sources":["../../src/packaging/boot-task.ts"],"names":[],"mappings":"AAqCA;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,yBAAyB,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD;AAWD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAe5D;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA+B5E;AAED,4FAA4F;AAC5F,wBAAsB,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC,CAY9D"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { execa } from "execa";
|
|
3
|
+
import { BUNDLE_DIRS, SHIM_FILES } from "./layout.js";
|
|
4
|
+
// AR: مهمة الإقلاع: كيف يعود الجهاز وحده بعد انقطاع الكهرباء (٠٢٠/R2، FR-012).
|
|
5
|
+
//
|
|
6
|
+
// **لماذا مهمة مجدولة لا خدمة ويندوز؟** الخدمة أنظف تشغيليًّا (sc، إعادة تلقائية، تبعيات)،
|
|
7
|
+
// لكنها تحتاج غلافًا خارجيًّا يحوّل عملية Node إلى خدمة — أي اعتمادية جديدة في منتج فخره أنه لا
|
|
8
|
+
// يطلب من الآلة شيئًا (٠١٧/٠١٨). والمهمة المجدولة موجودة في كل ويندوز، ولا تحتاج حزمة، وتعمل
|
|
9
|
+
// **قبل تسجيل الدخول**، وصلاحياتها هي نفسها التي يحملها المثبِّت أصلًا. وطبقة التسجيل هذه
|
|
10
|
+
// معزولة عمدًا: استبدالها بخدمة حقيقية يومًا لا يمسّ حلقة المشرف بسطر.
|
|
11
|
+
//
|
|
12
|
+
// **ولماذا SYSTEM؟** لأن الجهاز في الاستراحة يُعاد تشغيله ولا يدخل إليه أحد. مهمةٌ مربوطة
|
|
13
|
+
// بحساب مستخدم لا تعمل حتى يُسجّل ذلك المستخدم دخوله — أي حتى يمرّ إنسان — وهو بالضبط ما بُنيت
|
|
14
|
+
// الميزة كلّها لإلغائه. واختصار المجلد Startup يفشل للسبب نفسه.
|
|
15
|
+
//
|
|
16
|
+
// **والنداء عبر الشيمة لا عبر node.exe مباشرة**: الشيمة تحسب مسار زمن التشغيل من موقعها، فتنجو
|
|
17
|
+
// المهمة من ترقيةٍ تغيّر بنية المجلدات تحتها ما دام bin\fantastic.cmd في مكانه.
|
|
18
|
+
//
|
|
19
|
+
// EN: The boot task: how the appliance comes back on its own after a power cut (020/R2, FR-012).
|
|
20
|
+
//
|
|
21
|
+
// **Why a scheduled task rather than a Windows service?** A service is operationally cleaner
|
|
22
|
+
// (`sc`, auto-restart, dependencies), but it needs an external wrapper to turn a Node process
|
|
23
|
+
// into one — a new dependency in a product whose pride is asking the machine for nothing
|
|
24
|
+
// (017/018). A scheduled task exists on every Windows, needs no package, runs **before logon**,
|
|
25
|
+
// and needs exactly the rights the installer already holds. This registration layer is isolated
|
|
26
|
+
// deliberately: swapping it for a real service one day touches not a line of the supervisor loop.
|
|
27
|
+
//
|
|
28
|
+
// **And why `SYSTEM`?** Because a rest-house appliance reboots with nobody signing in. A task
|
|
29
|
+
// bound to a user account does not run until that user logs on — that is, until a human walks
|
|
30
|
+
// past — which is the very thing this feature exists to abolish. A Startup-folder shortcut fails
|
|
31
|
+
// for the same reason.
|
|
32
|
+
//
|
|
33
|
+
// **And it is invoked through the shim rather than `node.exe` directly**: the shim computes the
|
|
34
|
+
// runtime's path from its own location, so the task survives an upgrade that reshapes the
|
|
35
|
+
// directories beneath it as long as `bin\fantastic.cmd` stays where it is.
|
|
36
|
+
/**
|
|
37
|
+
* AR: اسم المهمة. **ثابت واحد لأن التسجيل والحذف والاستعلام تكتبه ثلاثتها** — واسمٌ يختلف حرفًا بين
|
|
38
|
+
* التثبيت والإزالة يترك مهمةً يتيمة تحاول تشغيل مجلد محذوف عند كل إقلاع، إلى الأبد.
|
|
39
|
+
* EN: The task's name. **One constant because registration, removal and the query all write it** —
|
|
40
|
+
* and a name differing by a character between install and uninstall leaves an orphan task trying
|
|
41
|
+
* to launch a deleted folder on every boot, forever.
|
|
42
|
+
*/
|
|
43
|
+
export const BOOT_TASK_NAME = "Fantastic Supervisor";
|
|
44
|
+
/**
|
|
45
|
+
* AR: ما يشغّله ويندوز عند الإقلاع: شيمة bin\، بلا وسائط.
|
|
46
|
+
*
|
|
47
|
+
* كانت "...\fantastic.cmd" watch حتى ٠٢٦، حين كانت الشيمة تصل إلى الواجهة الكاملة فتحتاج أن
|
|
48
|
+
* تُسمّى لها الأمر. وقد خرجت الواجهة من الحزمة، وصارت الشيمة تصل إلى **المُشرِف وحده** — وهو
|
|
49
|
+
* لا يفعل شيئًا آخر ولا يقرأ وسائط. فكلمةٌ باقيةٌ هنا تُمرَّر إلى ملفٍّ يتجاهلها.
|
|
50
|
+
*
|
|
51
|
+
* **ولا تنادي المهمّةُ الواجهةَ العالمية بحال.** npm i -g على ويندوز يكتب في
|
|
52
|
+
* %AppData%\Roaming\npm الخاصّ بمن نفّذ التثبيت، وهذه المهمّة تعمل بحسابٍ آخر (SYSTEM
|
|
53
|
+
* غالبًا) وقد لا ترى ذلك المجلد أصلًا — بعد انقطاع كهرباء، بلا أحدٍ يقرأ رسالة الفشل.
|
|
54
|
+
* EN: What Windows runs at boot: the `bin\` shim, with no arguments.
|
|
55
|
+
*
|
|
56
|
+
* It was `"...\fantastic.cmd" watch` until 026, when the shim reached the full CLI and therefore
|
|
57
|
+
* had to be told which command to run. The CLI has left the bundle, and the shim now reaches
|
|
58
|
+
* **the supervisor alone** — which does nothing else and reads no arguments. A leftover word
|
|
59
|
+
* here would be forwarded to a file that ignores it.
|
|
60
|
+
*
|
|
61
|
+
* **And the task never calls the global CLI.** `npm i -g` on Windows writes into
|
|
62
|
+
* `%AppData%\Roaming\npm` belonging to whoever ran the install, while this task runs as another
|
|
63
|
+
* account (usually `SYSTEM`) that may not see that folder at all — after a power cut, with
|
|
64
|
+
* nobody there to read the failure.
|
|
65
|
+
*/
|
|
66
|
+
export function bootTaskCommand(root) {
|
|
67
|
+
return `"${join(root, BUNDLE_DIRS.bin, SHIM_FILES.command)}"`;
|
|
68
|
+
}
|
|
69
|
+
async function schtasks(args) {
|
|
70
|
+
try {
|
|
71
|
+
const { stdout } = await execa("schtasks", args, { timeout: 20_000, windowsHide: true });
|
|
72
|
+
return { ok: true, output: stdout };
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
return { ok: false, output: error instanceof Error ? error.message : String(error) };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* AR: هل المهمة مسجَّلة **ومُفعَّلة**؟ الشرطان معًا: مهمة موجودة ومعطَّلة تجتاز /Query ولا تعمل
|
|
80
|
+
* أبدًا — وهي أسوأ من الغياب، لأنها تُعلن استعدادًا كاذبًا فتُتيح إطفاء الآلة.
|
|
81
|
+
* EN: Is the task registered **and enabled**? Both conditions: a present-but-disabled task passes
|
|
82
|
+
* `/Query` and never runs — which is worse than absence, because it announces a false readiness
|
|
83
|
+
* and so unlocks switching the machine off.
|
|
84
|
+
*/
|
|
85
|
+
export async function isBootTaskInstalled() {
|
|
86
|
+
if (process.platform !== "win32")
|
|
87
|
+
return false;
|
|
88
|
+
// /FO LIST لا /FO CSV: الأخير يُحوّل الحقول بحسب لغة ويندوز، وقائمةٌ بسطور «مفتاح: قيمة» أثبت.
|
|
89
|
+
const query = await schtasks(["/Query", "/TN", BOOT_TASK_NAME, "/FO", "LIST"]);
|
|
90
|
+
if (!query.ok)
|
|
91
|
+
return false;
|
|
92
|
+
// AR: **لا نطابق كلمة الحالة بلغتها.** ويندوز عربيّ يكتب «معطَّل» لا Disabled، فمطابقة
|
|
93
|
+
// "Ready" كانت ستقول «غير مثبَّتة» على كل جهاز عميل. نبحث عن الصيغة المعطّلة وحدها بلغتيها،
|
|
94
|
+
// وما عداها يُعدّ صالحًا — والخطأ في هذا الاتجاه يُعرَض للمالك لا يُخفى عنه.
|
|
95
|
+
// EN: **We do not match the state word in its language.** An Arabic Windows writes «معطَّل», not
|
|
96
|
+
// `Disabled`, so matching `"Ready"` would have reported "not installed" on every customer
|
|
97
|
+
// machine. We look for the disabled form alone, in both languages, and treat anything else as
|
|
98
|
+
// usable — and an error in that direction is shown to the owner rather than hidden from him.
|
|
99
|
+
return !/\b(disabled)\b|معطّل|معطل/i.test(query.output);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* AR: يسجّل المهمة (أو يستبدلها بـ/F فيكون التثبيت فوق تثبيت آمن التكرار). الفشل **لا يُفشل
|
|
103
|
+
* التثبيت**: النظام يعمل تمامًا، وما فات هو العودة التلقائية بعد انقطاع كهرباء — يُعلَن سطرًا
|
|
104
|
+
* ويُعرَض في doctor، ولا يُمحى تثبيت سليم من أجله.
|
|
105
|
+
* EN: Registers the task (or replaces it with `/F`, so reinstalling over an install is idempotent).
|
|
106
|
+
* A failure **does not fail the install**: the system runs perfectly, and what was lost is the
|
|
107
|
+
* automatic return after a power cut — announced in a line and surfaced by `doctor`, not a
|
|
108
|
+
* reason to erase a sound installation.
|
|
109
|
+
*/
|
|
110
|
+
export async function registerBootTask(root) {
|
|
111
|
+
if (process.platform !== "win32") {
|
|
112
|
+
return { changed: false, detail: "not Windows — no boot task to register" };
|
|
113
|
+
}
|
|
114
|
+
const result = await schtasks([
|
|
115
|
+
"/Create",
|
|
116
|
+
"/TN",
|
|
117
|
+
BOOT_TASK_NAME,
|
|
118
|
+
"/TR",
|
|
119
|
+
bootTaskCommand(root),
|
|
120
|
+
"/SC",
|
|
121
|
+
"ONSTART",
|
|
122
|
+
"/RU",
|
|
123
|
+
"SYSTEM",
|
|
124
|
+
// HIGHEST: المشرف يوقف عمليات ويشغّلها ويقرأ منافذ. مهمةٌ بأدنى امتياز تفشل عند أول taskkill.
|
|
125
|
+
"/RL",
|
|
126
|
+
"HIGHEST",
|
|
127
|
+
"/F",
|
|
128
|
+
]);
|
|
129
|
+
if (!result.ok) {
|
|
130
|
+
return {
|
|
131
|
+
changed: false,
|
|
132
|
+
detail: /denied|access/i.test(result.output)
|
|
133
|
+
? "needs an administrator terminal — the appliance will not restart itself after a power cut"
|
|
134
|
+
: "could not be registered — the appliance will not restart itself after a power cut",
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
return { changed: true, detail: "registered to start at boot" };
|
|
138
|
+
}
|
|
139
|
+
/** يزيل المهمة. ما يكتبه التثبيت تُزيله الإزالة، وإلّا بقيت مهمة تحاول تشغيل مجلد محذوف. */
|
|
140
|
+
export async function removeBootTask() {
|
|
141
|
+
if (process.platform !== "win32")
|
|
142
|
+
return { changed: false, detail: "not Windows" };
|
|
143
|
+
if (!(await schtasks(["/Query", "/TN", BOOT_TASK_NAME])).ok) {
|
|
144
|
+
return { changed: false, detail: "was not registered" };
|
|
145
|
+
}
|
|
146
|
+
const result = await schtasks(["/Delete", "/TN", BOOT_TASK_NAME, "/F"]);
|
|
147
|
+
return result.ok
|
|
148
|
+
? { changed: true, detail: "removed the boot task" }
|
|
149
|
+
: { changed: false, detail: "could not be removed — remove it by hand: schtasks /Delete /TN \"" + BOOT_TASK_NAME + "\" /F" };
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=boot-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boot-task.js","sourceRoot":"","sources":["../../src/packaging/boot-task.ts"],"names":[],"mappings":"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"}
|