@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,167 @@
|
|
|
1
|
+
import { c, glyph, NOT_REPORTED } from "./theme.js";
|
|
2
|
+
// AR: عارضة الرخصة. **مكان واحد يقرّر كيف تُقرَأ حالة الرخصة في الطرفية** — يستعمله activate
|
|
3
|
+
// وstatus وhealth وdoctor. أربع نسخ من هذا المنطق تعني أربع إجابات لسؤال واحد، ويقرأ
|
|
4
|
+
// الفنّي «active» في أمرٍ و«grace» في آخر عن اللحظة نفسها.
|
|
5
|
+
// ولا منطق هنا: تحويل حالةٍ إلى نصّ ولون، لا قرار عمّا إذا كانت الرخصة صالحة.
|
|
6
|
+
// EN: The licence renderer. **One place decides how licence state reads in the terminal** — used by
|
|
7
|
+
// `activate`, `status`, `health` and `doctor`. Four copies of this logic would mean four answers
|
|
8
|
+
// to one question, with the technician reading "active" in one command and "grace" in another
|
|
9
|
+
// about the same instant.
|
|
10
|
+
// No logic lives here: state to text and colour, never a decision about whether a licence is valid.
|
|
11
|
+
/** سطر الحالة بلونه: كلمة واحدة يقرؤها الفنّي من بعيد. */
|
|
12
|
+
export function licenceBadge(device) {
|
|
13
|
+
if (!device)
|
|
14
|
+
return c.dim(NOT_REPORTED);
|
|
15
|
+
switch (device.status) {
|
|
16
|
+
case "active":
|
|
17
|
+
return c.ok("active");
|
|
18
|
+
case "grace":
|
|
19
|
+
return c.warn(`grace (${device.graceDaysLeft ?? "?"}d left)`);
|
|
20
|
+
case "expired":
|
|
21
|
+
// AR: كلمتان مختلفتان لأن العلاجين متعاكسان: التجديد من الشركة مقابل اتصال إنترنت.
|
|
22
|
+
// EN: Two different words because the remedies are opposites: a renewal from the company
|
|
23
|
+
// versus an internet connection.
|
|
24
|
+
return device.expiredReason === "grace" ? c.bad("grace exhausted") : c.bad("expired");
|
|
25
|
+
case "invalid":
|
|
26
|
+
return c.bad(`invalid (${device.reason ?? "?"})`);
|
|
27
|
+
// AR: كودُ المركز لا كلمةُ «invalid». الفنّي الذي يقرأ refused (DEVICE_NOT_AUTHORIZED)
|
|
28
|
+
// يعرف أن الملفّ سليم وأن القرار في اللوحة، فلا يضيّع ساعةً في إعادة تفعيلٍ لن تنجح.
|
|
29
|
+
// EN: The centre's code rather than the word "invalid". A technician reading
|
|
30
|
+
// `refused (DEVICE_NOT_AUTHORIZED)` knows the file is sound and the decision is in the
|
|
31
|
+
// dashboard, and does not lose an hour on a re-activation that cannot succeed.
|
|
32
|
+
case "refused":
|
|
33
|
+
return c.bad(`refused (${device.reason ?? "?"})`);
|
|
34
|
+
case "none":
|
|
35
|
+
return c.dim("not activated");
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** كتلة كاملة لـactivate وhealth: الخطّة والانتهاء والأجهزة وبصمة الجهاز. */
|
|
39
|
+
export function renderLicenceCard(device, options = {}) {
|
|
40
|
+
if (!device)
|
|
41
|
+
return ` ${c.dim("Licence")} ${c.dim(NOT_REPORTED)}`;
|
|
42
|
+
const lines = [];
|
|
43
|
+
if (options.heading) {
|
|
44
|
+
const network = device.networkName ? ` ${c.dim("—")} ${device.networkName}` : "";
|
|
45
|
+
lines.push(`${c.ok(glyph.pass)} ${c.ok("Activated")}${network}`);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
lines.push(` ${c.label("Licence")} ${licenceBadge(device)}`);
|
|
49
|
+
}
|
|
50
|
+
const row = (label, value) => ` ${c.dim(label.padEnd(9))} ${value}`;
|
|
51
|
+
// AR: **اسم الشبكة صفٌّ في البطاقة لا سطرَ عنوانٍ وحده.** كان يظهر في ترويسة activate فقط،
|
|
52
|
+
// فيقرأ من ينادي status حالةً ومدّةً بلا اسم العقد الذي تخصّه — وهو أوّل ما يتأكّد منه
|
|
53
|
+
// المالك حين يملك أكثر من استراحة.
|
|
54
|
+
// EN: **The network name is a row in the card, not a heading alone.** It only ever appeared in
|
|
55
|
+
// `activate`'s heading, so whoever ran `status` read a state and a term without the name of
|
|
56
|
+
// the contract they belong to — the first thing an owner with more than one rest-house checks.
|
|
57
|
+
if (!options.heading && device.networkName)
|
|
58
|
+
lines.push(row("Name", c.value(device.networkName)));
|
|
59
|
+
// الكود يصل من النواة مُخفًى أصلًا (maskLicenseCode)، فلا إخفاء هنا ولا كشف.
|
|
60
|
+
if (device.code)
|
|
61
|
+
lines.push(row("Code", c.value(device.code)));
|
|
62
|
+
if (device.expiresAt)
|
|
63
|
+
lines.push(row("Expires", isoDateTime(device.expiresAt)));
|
|
64
|
+
// AR: **السقف وحده بلا العدد المستعمل.** الجهاز يعرف سقفه من الرخصة الموقَّعة، ولا يعرف كم
|
|
65
|
+
// جهازًا آخر فعّله العميل — تلك معلومة المركز. طباعة «1 / 2» من هنا كانت تخترع الرقم
|
|
66
|
+
// الأول وتبدو أدقّ ممّا هي، والفنّي يبني عليها قرارًا خاطئًا. الرقم الصحيح في لوحة الشركة.
|
|
67
|
+
// EN: **The ceiling alone, without the used count.** The appliance knows its ceiling from the
|
|
68
|
+
// signed licence and has no idea how many other machines the customer activated — that is
|
|
69
|
+
// the centre's knowledge. Printing "1 / 2" here would invent the first number and look more
|
|
70
|
+
// precise than it is, and the technician would act on it. The real figure is in the company
|
|
71
|
+
// dashboard.
|
|
72
|
+
if (device.maxDevices !== undefined)
|
|
73
|
+
lines.push(row("Devices", `up to ${device.maxDevices}`));
|
|
74
|
+
lines.push(row("Device", c.value(shortId(device.deviceId))));
|
|
75
|
+
// AR: **الباقة ومحتواها — أوّل ما يُسأل عنه حين «هذه الشاشة مقفلة عندي».**
|
|
76
|
+
//
|
|
77
|
+
// تُطبع بعد بيانات الرخصة لأنها تفصيلها لا ترويستها؛ ومن ينادي status لأن شيئًا لا يعمل
|
|
78
|
+
// يجد الجواب في الشاشة نفسها بدل فتح متصفّح أو الاتصال بالشركة.
|
|
79
|
+
// EN: **The package and what it contains — the first thing asked when "this screen is locked for
|
|
80
|
+
// me".** Printed after the licence data because it is its detail rather than its heading; and
|
|
81
|
+
// whoever runs `status` because something does not work finds the answer on the same screen
|
|
82
|
+
// instead of opening a browser or calling the company.
|
|
83
|
+
lines.push(...packageLines(device, row));
|
|
84
|
+
return lines.join("\n");
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* AR: أسطر الباقة: مفتاحها، ثم المشمول وغير المشمول.
|
|
88
|
+
*
|
|
89
|
+
* **المفتاح لا الاسم العربيّ.** أسماء الباقات يصنعها موظّفو الشركة وقت التشغيل، ولا تحملها
|
|
90
|
+
* حمولةٌ موقَّعة — فالجهاز لا يعرفها أصلًا (research R14b). والمفتاح هو نفسه ما يظهر في رفض
|
|
91
|
+
* الحارس وفي سجلّات الدعم، فيتكلّم الطرفان عن الشيء نفسه في المكالمة.
|
|
92
|
+
*
|
|
93
|
+
* **والعلامة تحمل المعنى لا اللون.** glyph.pass وglyph.fail لهما بديلان نصّيان في طرفية
|
|
94
|
+
* بلا يونيكود، واللون يزيد الوضوح ولا يصنعه — فطرفيةٌ بلا ألوان تقرأ الجدول كاملًا.
|
|
95
|
+
*
|
|
96
|
+
* **ولا كتالوج هنا.** featureStates تصل محسوبةً من النواة؛ نسخةٌ ثانية من الحساب في
|
|
97
|
+
* الطرفية كانت ستفترق عن الشاشة عند أوّل ميزة تُعطَّل، فيقرأ المالك إجابتين عن اللحظة نفسها.
|
|
98
|
+
*
|
|
99
|
+
* EN: The package lines: its key, then what is included and what is not.
|
|
100
|
+
*
|
|
101
|
+
* **The key, not an Arabic name.** Package names are created by company staff at runtime and no
|
|
102
|
+
* signed payload carries them, so the appliance does not know them (research R14b). The key is
|
|
103
|
+
* also what appears in the guard's refusal and in support's logs, so both sides of a phone call
|
|
104
|
+
* name the same thing.
|
|
105
|
+
*
|
|
106
|
+
* **And the marker carries the meaning, not the colour.** `glyph.pass` and `glyph.fail` have
|
|
107
|
+
* text fallbacks on a terminal without unicode, and colour reinforces the distinction rather
|
|
108
|
+
* than creating it — so a colourless terminal still reads the whole table.
|
|
109
|
+
*
|
|
110
|
+
* **No catalogue lives here.** `featureStates` arrives computed by the core; a second copy of
|
|
111
|
+
* the derivation in the terminal would diverge from the screen at the first capability anybody
|
|
112
|
+
* deactivates, leaving the owner with two answers about the same instant.
|
|
113
|
+
*/
|
|
114
|
+
function packageLines(device, row) {
|
|
115
|
+
const lines = [];
|
|
116
|
+
if (device.plan)
|
|
117
|
+
lines.push(row("Package", c.value(device.plan)));
|
|
118
|
+
const states = device.featureStates ?? [];
|
|
119
|
+
if (states.length === 0)
|
|
120
|
+
return lines;
|
|
121
|
+
const included = states.filter((state) => state.included).map((state) => state.key);
|
|
122
|
+
const excluded = states.filter((state) => !state.included).map((state) => state.key);
|
|
123
|
+
if (included.length > 0) {
|
|
124
|
+
lines.push(row("Included", included.map((key) => `${c.ok(glyph.pass)} ${key}`).join(" ")));
|
|
125
|
+
}
|
|
126
|
+
if (excluded.length > 0) {
|
|
127
|
+
lines.push(row("Excluded", excluded.map((key) => `${c.bad(glyph.fail)} ${key}`).join(" ")));
|
|
128
|
+
}
|
|
129
|
+
return lines;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* AR: بصمةٌ من ٦٤ محرفًا لا تُقرأ على الهاتف. الاثنا عشر الأولى تكفي للتمييز وللبحث في شاشة
|
|
133
|
+
* الأجهزة، وهي نفس ما تعرضه اللوحة — فلا يقرأ العميل رقمًا لا يجده الدعم.
|
|
134
|
+
* EN: A 64-character digest is unreadable over the phone. The first twelve are enough to identify
|
|
135
|
+
* and to search the devices screen, and they are exactly what the dashboard shows — so the
|
|
136
|
+
* customer never reads out a number support cannot find.
|
|
137
|
+
*/
|
|
138
|
+
function shortId(deviceId) {
|
|
139
|
+
if (!deviceId)
|
|
140
|
+
return NOT_REPORTED;
|
|
141
|
+
return deviceId.length > 12 ? deviceId.slice(0, 12) : deviceId;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* AR: التاريخ **والساعة** بالتوقيت المحلّي للجهاز.
|
|
145
|
+
*
|
|
146
|
+
* كان التاريخ وحده، بحجّة أن الصلاحية «قرار أيام لا دقائق». وهي حجّة تنكسر في اليوم الأخير
|
|
147
|
+
* بالذات: مالكٌ يقرأ 2026-08-09 صباحَ التاسع لا يعرف أهو يملك اليوم كلّه أم ساعتين، وهو
|
|
148
|
+
* اليوم الوحيد الذي يهمّ فيه الفرق. والساعة محلّية لا UTC لأن من يقرؤها يقارنها بساعة الحائط
|
|
149
|
+
* أمامه، لا بخطّ غرينتش.
|
|
150
|
+
* EN: The date **and the time**, in the machine's local zone.
|
|
151
|
+
*
|
|
152
|
+
* It used to be the date alone, on the grounds that validity is "a matter of days, not minutes".
|
|
153
|
+
* That reasoning breaks on precisely the last day: an owner reading `2026-08-09` on the morning
|
|
154
|
+
* of the ninth cannot tell whether he has the whole day or two hours — the one day the
|
|
155
|
+
* difference matters. And the time is local rather than UTC because whoever reads it compares it
|
|
156
|
+
* to the clock on the wall in front of him, not to Greenwich.
|
|
157
|
+
*/
|
|
158
|
+
function isoDateTime(iso) {
|
|
159
|
+
const date = new Date(iso);
|
|
160
|
+
if (Number.isNaN(date.getTime()))
|
|
161
|
+
return iso;
|
|
162
|
+
const pad = (value) => String(value).padStart(2, "0");
|
|
163
|
+
const day = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
|
|
164
|
+
const time = `${pad(date.getHours())}:${pad(date.getMinutes())}`;
|
|
165
|
+
return `${day} ${time}`;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=licence.render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"licence.render.js","sourceRoot":"","sources":["../../src/render/licence.render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Profile } from "../profiles/types.js";
|
|
2
|
+
import type { ServiceState } from "../supervisor/inspect.js";
|
|
3
|
+
export declare function renderStatusTable(states: ServiceState[]): string;
|
|
4
|
+
/** سطر السياق أسفل الجدول: أي ملفّ تشغيل، وأين القاعدة، وكم حجمها. لا تخمين صامت. */
|
|
5
|
+
export declare function renderProfileFooter(profile: Profile): string;
|
|
6
|
+
//# sourceMappingURL=status.render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.render.d.ts","sourceRoot":"","sources":["../../src/render/status.render.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAmB7D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAuBhE;AAED,qFAAqF;AACrF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAQ5D"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { existsSync, statSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import Table from "cli-table3";
|
|
4
|
+
import { NOT_REPORTED, c, formatBytes, formatDuration, glyph } from "./theme.js";
|
|
5
|
+
// AR: عارضة جدول الحالة. تأخذ حالة مجموعة ولا تحسبها، فيبقى الحساب في supervisor/inspect وحده.
|
|
6
|
+
// EN: The status-table renderer. It takes collected state and never computes it, so the computation
|
|
7
|
+
// stays in supervisor/inspect alone.
|
|
8
|
+
function stateCell(state) {
|
|
9
|
+
if (!state.running)
|
|
10
|
+
return c.bad(`${glyph.bad} stopped`);
|
|
11
|
+
// خدمة أطلقناها لكنها لا تردّ على المسبار: حيّة كعملية، غير جاهزة كخدمة. الفرق يستحق لونًا خاصًا.
|
|
12
|
+
if (!state.probe.reachable)
|
|
13
|
+
return c.warn(`${glyph.warn} not responding`);
|
|
14
|
+
return c.ok(`${glyph.ok} running`);
|
|
15
|
+
}
|
|
16
|
+
function sourceNote(state) {
|
|
17
|
+
if (state.source === "probe")
|
|
18
|
+
return c.dim("(started outside the CLI)");
|
|
19
|
+
return "";
|
|
20
|
+
}
|
|
21
|
+
export function renderStatusTable(states) {
|
|
22
|
+
const table = new Table({
|
|
23
|
+
head: ["Service", "State", "Port", "PID", "Uptime"].map((header) => c.dim(header)),
|
|
24
|
+
style: { head: [], border: [], "padding-left": 1, "padding-right": 1 },
|
|
25
|
+
chars: {
|
|
26
|
+
top: "─", "top-mid": "┬", "top-left": "┌", "top-right": "┐",
|
|
27
|
+
bottom: "─", "bottom-mid": "┴", "bottom-left": "└", "bottom-right": "┘",
|
|
28
|
+
left: "│", "left-mid": "├", mid: "─", "mid-mid": "┼", right: "│", "right-mid": "┤",
|
|
29
|
+
middle: "│",
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
for (const state of states) {
|
|
33
|
+
table.push([
|
|
34
|
+
`${state.definition.label} ${sourceNote(state)}`.trim(),
|
|
35
|
+
stateCell(state),
|
|
36
|
+
String(state.definition.port),
|
|
37
|
+
state.record ? String(state.record.pid) : NOT_REPORTED,
|
|
38
|
+
formatDuration(state.uptimeSeconds),
|
|
39
|
+
]);
|
|
40
|
+
}
|
|
41
|
+
return table.toString();
|
|
42
|
+
}
|
|
43
|
+
/** سطر السياق أسفل الجدول: أي ملفّ تشغيل، وأين القاعدة، وكم حجمها. لا تخمين صامت. */
|
|
44
|
+
export function renderProfileFooter(profile) {
|
|
45
|
+
const dbPath = join(profile.dataDir, "fantastic.db");
|
|
46
|
+
const size = existsSync(dbPath) ? formatBytes(statSync(dbPath).size) : "missing";
|
|
47
|
+
return [
|
|
48
|
+
c.dim("profile: ") + c.value(profile.kind),
|
|
49
|
+
c.dim("database: ") + c.value(dbPath) + c.dim(` (${size})`),
|
|
50
|
+
].join(c.dim(" · "));
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=status.render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.render.js","sourceRoot":"","sources":["../../src/render/status.render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/** الألوان تُعطَّل تلقائيًا خارج الطرفية (CI أو مخرَج مُمرَّر بأنبوب). */
|
|
2
|
+
export declare const isTty: boolean;
|
|
3
|
+
export declare const c: {
|
|
4
|
+
ok: import("chalk").ChalkInstance;
|
|
5
|
+
bad: import("chalk").ChalkInstance;
|
|
6
|
+
warn: import("chalk").ChalkInstance;
|
|
7
|
+
dim: import("chalk").ChalkInstance;
|
|
8
|
+
accent: import("chalk").ChalkInstance;
|
|
9
|
+
label: import("chalk").ChalkInstance;
|
|
10
|
+
value: import("chalk").ChalkInstance;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* AR: **هل تستطيع هذه الطرفية رسم ما هو خارج ASCII؟**
|
|
14
|
+
*
|
|
15
|
+
* السؤال ليس ترفًا: على «موجّه الأوامر» التقليدي في ويندوز — وهو ما يفتحه الفنّي عند العميل —
|
|
16
|
+
* كل محرف خارج ASCII يظهر ?. فيصير سطر الترحيب 52 علامة استفهام، وتصير كل علامة ✔ سؤالًا،
|
|
17
|
+
* ويقرأ الفنّي شاشة تبدو معطوبة بينما كل شيء يعمل. قِيس على جهاز عميل حقيقي أثناء ٠١٨.
|
|
18
|
+
*
|
|
19
|
+
* ولا نستطيع أن نسأل الطرفية، فنستدلّ: كل ما ليس ويندوز يرسم يونيكود، ونوافذ الطرفية الحديثة
|
|
20
|
+
* (Windows Terminal، VS Code، ConEmu) تُعرّف عن نفسها بمتغيّرات بيئة. وما عداها يُفترَض قديمًا —
|
|
21
|
+
* **والافتراض عند الشكّ هو الأبسط لا الأجمل**، لأن ثمن الخطأ متباعد: رمز ASCII في طرفية حديثة
|
|
22
|
+
* أقلّ جمالًا بقليل، وعلامة استفهام عند عميل تبدو عطبًا.
|
|
23
|
+
* EN: **Can this terminal draw anything beyond ASCII?**
|
|
24
|
+
*
|
|
25
|
+
* Not a cosmetic question: in Windows' classic Command Prompt — the one a technician opens at a
|
|
26
|
+
* customer site — every non-ASCII character renders as `?`. The banner rule becomes 52 question
|
|
27
|
+
* marks, every `✔` becomes a query, and the technician reads a screen that looks broken while
|
|
28
|
+
* everything works. Measured on a real customer machine during 018.
|
|
29
|
+
*
|
|
30
|
+
* We cannot ask the terminal, so we infer: everything that is not Windows draws Unicode, and
|
|
31
|
+
* modern Windows terminals (Windows Terminal, VS Code, ConEmu) announce themselves through
|
|
32
|
+
* environment variables. Anything else is assumed legacy — **and when in doubt the assumption is
|
|
33
|
+
* the plainer one, not the prettier one**, because the costs are lopsided: an ASCII mark in a
|
|
34
|
+
* modern terminal is slightly less handsome, a question mark at a customer looks like a fault.
|
|
35
|
+
*/
|
|
36
|
+
export declare const unicodeSafe: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* AR: رموز المخرَج، **مكانًا واحدًا لا متناثرة**. كانت تُكتب حرفيًّا في إحدى وسبعين ملفًّا، فلم يكن
|
|
39
|
+
* ثمّة موضع واحد يقرّر — ولا سبيل إلى بديل ASCII إلا بتعديل الجميع. البدائل أحادية المحرف كلّها
|
|
40
|
+
* فتبقى الأعمدة محاذاة كما هي.
|
|
41
|
+
* EN: Output glyphs, **in one place rather than scattered**. They were written literally across
|
|
42
|
+
* seventy-one files, so no single place decided — and no ASCII alternative was possible without
|
|
43
|
+
* touching all of them. Every fallback is one character wide, so columns stay aligned.
|
|
44
|
+
*/
|
|
45
|
+
export declare const glyph: {
|
|
46
|
+
ok: string;
|
|
47
|
+
bad: string;
|
|
48
|
+
warn: string;
|
|
49
|
+
step: string;
|
|
50
|
+
none: string;
|
|
51
|
+
pass: string;
|
|
52
|
+
fail: string;
|
|
53
|
+
arrow: string;
|
|
54
|
+
rule: string;
|
|
55
|
+
};
|
|
56
|
+
/** الشرطة تعني «غير متاح» صراحةً. الصفر ادّعاء، والشرطة اعتراف. */
|
|
57
|
+
export declare const NOT_REPORTED: string;
|
|
58
|
+
export declare function formatDuration(seconds: number | undefined): string;
|
|
59
|
+
export declare function formatBytes(bytes: number | undefined): string;
|
|
60
|
+
/** ألوان بادئات السجلات، ثابتة لكل خدمة حتى تُميَّز بالعين وحدها. */
|
|
61
|
+
export declare const servicePrefixColor: {
|
|
62
|
+
readonly live: import("chalk").ChalkInstance;
|
|
63
|
+
readonly core: import("chalk").ChalkInstance;
|
|
64
|
+
readonly portal: import("chalk").ChalkInstance;
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/render/theme.ts"],"names":[],"mappings":"AASA,0EAA0E;AAC1E,eAAO,MAAM,KAAK,SAAgC,CAAC;AAEnD,eAAO,MAAM,CAAC;;;;;;;;CAQb,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,WAAW,SAKa,CAAC;AAEtC;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;CAEqF,CAAC;AAExG,mEAAmE;AACnE,eAAO,MAAM,YAAY,QAAa,CAAC;AAEvC,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQlE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAc7D;AAED,qEAAqE;AACrE,eAAO,MAAM,kBAAkB;;;;CAIrB,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
// AR: طبقة التنسيق. **لا منطق هنا** — ألوان ورموز وتحويل أرقام إلى نصّ مقروء فقط.
|
|
3
|
+
// ملاحظة اتجاهية: الطرفية ثنائية الاتجاه غير موثوقة، فنُبقي القيم اللاتينية (مسارات، منافذ،
|
|
4
|
+
// روابط) في أعمدة مستقلة ولا ندسّها داخل جملة عربية.
|
|
5
|
+
// EN: The presentation layer. **No logic here** — colours, glyphs and number-to-text only.
|
|
6
|
+
// A directional note: terminal bidi is unreliable, so Latin values (paths, ports, URLs) stay in
|
|
7
|
+
// their own columns and are never embedded mid-Arabic-sentence.
|
|
8
|
+
/** الألوان تُعطَّل تلقائيًا خارج الطرفية (CI أو مخرَج مُمرَّر بأنبوب). */
|
|
9
|
+
export const isTty = Boolean(process.stdout.isTTY);
|
|
10
|
+
export const c = {
|
|
11
|
+
ok: chalk.green,
|
|
12
|
+
bad: chalk.red,
|
|
13
|
+
warn: chalk.yellow,
|
|
14
|
+
dim: chalk.dim,
|
|
15
|
+
accent: chalk.hex("#FF5A1F"),
|
|
16
|
+
label: chalk.bold,
|
|
17
|
+
value: chalk.cyan,
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* AR: **هل تستطيع هذه الطرفية رسم ما هو خارج ASCII؟**
|
|
21
|
+
*
|
|
22
|
+
* السؤال ليس ترفًا: على «موجّه الأوامر» التقليدي في ويندوز — وهو ما يفتحه الفنّي عند العميل —
|
|
23
|
+
* كل محرف خارج ASCII يظهر ?. فيصير سطر الترحيب 52 علامة استفهام، وتصير كل علامة ✔ سؤالًا،
|
|
24
|
+
* ويقرأ الفنّي شاشة تبدو معطوبة بينما كل شيء يعمل. قِيس على جهاز عميل حقيقي أثناء ٠١٨.
|
|
25
|
+
*
|
|
26
|
+
* ولا نستطيع أن نسأل الطرفية، فنستدلّ: كل ما ليس ويندوز يرسم يونيكود، ونوافذ الطرفية الحديثة
|
|
27
|
+
* (Windows Terminal، VS Code، ConEmu) تُعرّف عن نفسها بمتغيّرات بيئة. وما عداها يُفترَض قديمًا —
|
|
28
|
+
* **والافتراض عند الشكّ هو الأبسط لا الأجمل**، لأن ثمن الخطأ متباعد: رمز ASCII في طرفية حديثة
|
|
29
|
+
* أقلّ جمالًا بقليل، وعلامة استفهام عند عميل تبدو عطبًا.
|
|
30
|
+
* EN: **Can this terminal draw anything beyond ASCII?**
|
|
31
|
+
*
|
|
32
|
+
* Not a cosmetic question: in Windows' classic Command Prompt — the one a technician opens at a
|
|
33
|
+
* customer site — every non-ASCII character renders as `?`. The banner rule becomes 52 question
|
|
34
|
+
* marks, every `✔` becomes a query, and the technician reads a screen that looks broken while
|
|
35
|
+
* everything works. Measured on a real customer machine during 018.
|
|
36
|
+
*
|
|
37
|
+
* We cannot ask the terminal, so we infer: everything that is not Windows draws Unicode, and
|
|
38
|
+
* modern Windows terminals (Windows Terminal, VS Code, ConEmu) announce themselves through
|
|
39
|
+
* environment variables. Anything else is assumed legacy — **and when in doubt the assumption is
|
|
40
|
+
* the plainer one, not the prettier one**, because the costs are lopsided: an ASCII mark in a
|
|
41
|
+
* modern terminal is slightly less handsome, a question mark at a customer looks like a fault.
|
|
42
|
+
*/
|
|
43
|
+
export const unicodeSafe = process.platform !== "win32" ||
|
|
44
|
+
Boolean(process.env.WT_SESSION) ||
|
|
45
|
+
Boolean(process.env.ConEmuANSI) ||
|
|
46
|
+
process.env.TERM_PROGRAM === "vscode" ||
|
|
47
|
+
Boolean(process.env.FANTASTIC_UTF8);
|
|
48
|
+
/**
|
|
49
|
+
* AR: رموز المخرَج، **مكانًا واحدًا لا متناثرة**. كانت تُكتب حرفيًّا في إحدى وسبعين ملفًّا، فلم يكن
|
|
50
|
+
* ثمّة موضع واحد يقرّر — ولا سبيل إلى بديل ASCII إلا بتعديل الجميع. البدائل أحادية المحرف كلّها
|
|
51
|
+
* فتبقى الأعمدة محاذاة كما هي.
|
|
52
|
+
* EN: Output glyphs, **in one place rather than scattered**. They were written literally across
|
|
53
|
+
* seventy-one files, so no single place decided — and no ASCII alternative was possible without
|
|
54
|
+
* touching all of them. Every fallback is one character wide, so columns stay aligned.
|
|
55
|
+
*/
|
|
56
|
+
export const glyph = unicodeSafe
|
|
57
|
+
? { ok: "●", bad: "●", warn: "●", step: "▸", none: "—", pass: "✔", fail: "✖", arrow: "→", rule: "━" }
|
|
58
|
+
: { ok: "*", bad: "*", warn: "*", step: ">", none: "-", pass: "+", fail: "x", arrow: ">", rule: "=" };
|
|
59
|
+
/** الشرطة تعني «غير متاح» صراحةً. الصفر ادّعاء، والشرطة اعتراف. */
|
|
60
|
+
export const NOT_REPORTED = glyph.none;
|
|
61
|
+
export function formatDuration(seconds) {
|
|
62
|
+
if (seconds === undefined)
|
|
63
|
+
return NOT_REPORTED;
|
|
64
|
+
const hours = Math.floor(seconds / 3600);
|
|
65
|
+
const minutes = Math.floor((seconds % 3600) / 60);
|
|
66
|
+
const secs = Math.floor(seconds % 60);
|
|
67
|
+
return [hours, minutes, secs].map((part) => String(part).padStart(2, "0")).join(":");
|
|
68
|
+
}
|
|
69
|
+
export function formatBytes(bytes) {
|
|
70
|
+
if (bytes === undefined)
|
|
71
|
+
return NOT_REPORTED;
|
|
72
|
+
if (bytes < 1024)
|
|
73
|
+
return `${bytes} B`;
|
|
74
|
+
const units = ["KB", "MB", "GB", "TB"];
|
|
75
|
+
let value = bytes / 1024;
|
|
76
|
+
let unit = 0;
|
|
77
|
+
while (value >= 1024 && unit < units.length - 1) {
|
|
78
|
+
value /= 1024;
|
|
79
|
+
unit += 1;
|
|
80
|
+
}
|
|
81
|
+
return `${value.toFixed(1)} ${units[unit]}`;
|
|
82
|
+
}
|
|
83
|
+
/** ألوان بادئات السجلات، ثابتة لكل خدمة حتى تُميَّز بالعين وحدها. */
|
|
84
|
+
export const servicePrefixColor = {
|
|
85
|
+
live: chalk.magenta,
|
|
86
|
+
core: chalk.cyan,
|
|
87
|
+
portal: chalk.yellow,
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/render/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** الحدّ الأدنى المُعلَن في package.json. رقمٌ واحد لا رقمان: تعديلُ أحدهما وحده يُنتج وعدين. */
|
|
2
|
+
export declare const MINIMUM_NODE_MAJOR = 20;
|
|
3
|
+
export type RuntimeVerdict = {
|
|
4
|
+
ok: true;
|
|
5
|
+
} | {
|
|
6
|
+
ok: false;
|
|
7
|
+
message: string;
|
|
8
|
+
remedy: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* AR: يقارن الإصدار الجاري بالحدّ الأدنى. يُمرَّر الإصدار وسيطًا ليكون الفحص قابلًا للاختبار بلا
|
|
12
|
+
* إشغال عملية Node ثانية — والاختبار هنا هو الدليل الوحيد، إذ لا أحد يشغّل Node 18 عمدًا
|
|
13
|
+
* ليرى الرسالة.
|
|
14
|
+
* EN: Compares the running version against the minimum. The version is passed in so the check can be
|
|
15
|
+
* tested without spawning a second Node process — and the test is the only proof available here,
|
|
16
|
+
* since nobody runs Node 18 on purpose just to see the message.
|
|
17
|
+
*/
|
|
18
|
+
export declare function checkRuntime(version?: string): RuntimeVerdict;
|
|
19
|
+
//# sourceMappingURL=runtime-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-guard.d.ts","sourceRoot":"","sources":["../src/runtime-guard.ts"],"names":[],"mappings":"AA8BA,mGAAmG;AACnG,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,MAAM,MAAM,cAAc,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3F;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,MAAwB,GAAG,cAAc,CAiB9E"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// AR: **الشرط الوحيد الذي تفرضه هذه الأداة على جهاز العميل** (٠٢٦/FR-002).
|
|
2
|
+
//
|
|
3
|
+
// قبل الفصل كانت الواجهة تُشحن داخل الحزمة وتعمل على runtime\node.exe المشحون معها، فلا
|
|
4
|
+
// يعنيها ما على الجهاز. وبعد الفصل صارت تُثبَّت من سِجلّ الحزم وتعمل على بيئة تشغيل العميل —
|
|
5
|
+
// وهذا هو الاستثناء الوحيد المنصوص عليه في فقرة النطاق بالمبدأ الأول، والخدمات كلّها ما زالت
|
|
6
|
+
// على البيئة المشحونة.
|
|
7
|
+
//
|
|
8
|
+
// **والرفض المبكر ليس تشدّدًا بل رحمة.** بيئةٌ أقدم لا تنهار عند أوّل سطر، بل عند أوّل ميزةٍ
|
|
9
|
+
// لغويّة غير مدعومة — أي في منتصف تثبيتٍ يكتب على القرص، بأثرِ استدعاءٍ إنجليزيٍّ خامّ لا يقول
|
|
10
|
+
// للفنّي شيئًا عن السبب ولا عن العلاج. فحصٌ في أوّل سطرٍ يقول الاثنين معًا.
|
|
11
|
+
//
|
|
12
|
+
// ولا يُنادى الفحص من bin/run.js: ذلك الملفّ يُنفَّذ قبل أن يُحمَّل dist/، وبيئةٌ قديمةٌ جدًّا
|
|
13
|
+
// قد تفشل في تحليله هو نفسه. موضعه هنا، في أساس كل أمر، وهو أبكر موضعٍ **مضمونٍ** أن يُبلغه
|
|
14
|
+
// التنفيذ.
|
|
15
|
+
// EN: **The one requirement this tool places on a customer's machine** (026/FR-002).
|
|
16
|
+
//
|
|
17
|
+
// Before the separation the CLI shipped inside the bundle and ran on the `runtime\node.exe`
|
|
18
|
+
// shipped with it, so what the machine carried was none of its business. After the separation it
|
|
19
|
+
// is installed from a package registry and runs on the customer's runtime — the single stated
|
|
20
|
+
// exception in principle I's scope paragraph, with every service still on the bundled runtime.
|
|
21
|
+
//
|
|
22
|
+
// **And refusing early is mercy, not strictness.** An older runtime does not fail on the first
|
|
23
|
+
// line; it fails at the first unsupported language feature — that is, in the middle of an
|
|
24
|
+
// install already writing to disk, with a raw English stack trace that tells the technician
|
|
25
|
+
// nothing about the cause and nothing about the remedy. A check on the first line says both.
|
|
26
|
+
//
|
|
27
|
+
// The check is not called from `bin/run.js`: that file runs before `dist/` is loaded, and a very
|
|
28
|
+
// old runtime may fail to parse it at all. Its home is here, in the base of every command — the
|
|
29
|
+
// earliest place execution is **guaranteed** to reach.
|
|
30
|
+
/** الحدّ الأدنى المُعلَن في package.json. رقمٌ واحد لا رقمان: تعديلُ أحدهما وحده يُنتج وعدين. */
|
|
31
|
+
export const MINIMUM_NODE_MAJOR = 20;
|
|
32
|
+
/**
|
|
33
|
+
* AR: يقارن الإصدار الجاري بالحدّ الأدنى. يُمرَّر الإصدار وسيطًا ليكون الفحص قابلًا للاختبار بلا
|
|
34
|
+
* إشغال عملية Node ثانية — والاختبار هنا هو الدليل الوحيد، إذ لا أحد يشغّل Node 18 عمدًا
|
|
35
|
+
* ليرى الرسالة.
|
|
36
|
+
* EN: Compares the running version against the minimum. The version is passed in so the check can be
|
|
37
|
+
* tested without spawning a second Node process — and the test is the only proof available here,
|
|
38
|
+
* since nobody runs Node 18 on purpose just to see the message.
|
|
39
|
+
*/
|
|
40
|
+
export function checkRuntime(version = process.version) {
|
|
41
|
+
const major = Number.parseInt(version.replace(/^v/, "").split(".")[0] ?? "", 10);
|
|
42
|
+
// AR: إصدارٌ لا يُقرأ **يمرّ**. بيئةٌ بترقيمٍ لا نتوقّعه (بناءٌ خاصّ، أو بديلٌ متوافق) قد تعمل
|
|
43
|
+
// تمامًا، ومنعُها لأننا لم نفهم سلسلة نصّية منعٌ بلا دليل — والعطل الحقيقيّ سيظهر بنفسه.
|
|
44
|
+
// EN: An unreadable version **passes**. A runtime with numbering we do not expect (a custom build,
|
|
45
|
+
// or a compatible alternative) may work perfectly, and refusing it because we failed to parse
|
|
46
|
+
// a string is refusal without evidence — a real fault will announce itself.
|
|
47
|
+
if (!Number.isFinite(major))
|
|
48
|
+
return { ok: true };
|
|
49
|
+
if (major >= MINIMUM_NODE_MAJOR)
|
|
50
|
+
return { ok: true };
|
|
51
|
+
return {
|
|
52
|
+
ok: false,
|
|
53
|
+
message: `هذه الواجهة تحتاج Node ${MINIMUM_NODE_MAJOR} أو أحدث، والمثبَّت هنا ${version}.`,
|
|
54
|
+
remedy: `ثبّت الإصدار المدعوم ثم افتح طرفية جديدة: winget install OpenJS.NodeJS.LTS`,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=runtime-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-guard.js","sourceRoot":"","sources":["../src/runtime-guard.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,8FAA8F;AAC9F,iGAAiG;AACjG,iGAAiG;AACjG,2BAA2B;AAC3B,EAAE;AACF,iGAAiG;AACjG,mGAAmG;AACnG,gFAAgF;AAChF,EAAE;AACF,uGAAuG;AACvG,gGAAgG;AAChG,eAAe;AACf,qFAAqF;AACrF,EAAE;AACF,gGAAgG;AAChG,qGAAqG;AACrG,kGAAkG;AAClG,mGAAmG;AACnG,EAAE;AACF,mGAAmG;AACnG,8FAA8F;AAC9F,gGAAgG;AAChG,iGAAiG;AACjG,EAAE;AACF,qGAAqG;AACrG,oGAAoG;AACpG,2DAA2D;AAE3D,mGAAmG;AACnG,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAIrC;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,UAAkB,OAAO,CAAC,OAAO;IAC5D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAEjF,+FAA+F;IAC/F,6FAA6F;IAC7F,mGAAmG;IACnG,kGAAkG;IAClG,gFAAgF;IAChF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAEjD,IAAI,KAAK,IAAI,kBAAkB;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAErD,OAAO;QACL,EAAE,EAAE,KAAK;QACT,OAAO,EAAE,2BAA2B,kBAAkB,2BAA2B,OAAO,GAAG;QAC3F,MAAM,EAAE,6EAA6E;KACtF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type KeypressListener = (char: unknown, key: {
|
|
2
|
+
name?: string;
|
|
3
|
+
sequence?: string;
|
|
4
|
+
}) => void;
|
|
5
|
+
/**
|
|
6
|
+
* ما نحتاجه من مجرى المُدخَل، مُصغَّرًا ليُمرَّر بديلٌ في الاختبار.
|
|
7
|
+
* الدوالّ بصيغة الطريقة لا بصيغة الخاصية عن قصد: الأولى تقبل تواقيع ReadStream الحقيقية، والثانية
|
|
8
|
+
* ترفضها تحت strictFunctionTypes على فروق في نوع الوسائط لا أثر لها هنا.
|
|
9
|
+
*/
|
|
10
|
+
export type ShellInput = {
|
|
11
|
+
isTTY?: boolean;
|
|
12
|
+
isRaw?: boolean;
|
|
13
|
+
setRawMode?(mode: boolean): unknown;
|
|
14
|
+
listeners(event: string): unknown[];
|
|
15
|
+
on(event: string, listener: KeypressListener): unknown;
|
|
16
|
+
resume(): unknown;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* يعيد الوضع الخام ويُعيد ربط مُستمِع المفاتيح إن فُقد.
|
|
20
|
+
*
|
|
21
|
+
* **يُشترَط ألّا يُضاعِف المُستمِع**: يُستدعى بعد كل أمر، وإضافةٌ بلا فحص تعني عشرة مُستمِعين بعد عشرة
|
|
22
|
+
* أوامر — فتُرسَم اللوحة عشر مرّات فوق بعضها ويُحذّر Node من تسرّب مُستمِعين.
|
|
23
|
+
*/
|
|
24
|
+
export declare function restoreShellInput(input: ShellInput, listener: KeypressListener): void;
|
|
25
|
+
//# sourceMappingURL=input-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-mode.d.ts","sourceRoot":"","sources":["../../src/shell/input-mode.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,CAAC;AAElG;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACpC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;IACpC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC;IACvD,MAAM,IAAI,OAAO,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAUrF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { emitKeypressEvents } from "node:readline";
|
|
2
|
+
/**
|
|
3
|
+
* يعيد الوضع الخام ويُعيد ربط مُستمِع المفاتيح إن فُقد.
|
|
4
|
+
*
|
|
5
|
+
* **يُشترَط ألّا يُضاعِف المُستمِع**: يُستدعى بعد كل أمر، وإضافةٌ بلا فحص تعني عشرة مُستمِعين بعد عشرة
|
|
6
|
+
* أوامر — فتُرسَم اللوحة عشر مرّات فوق بعضها ويُحذّر Node من تسرّب مُستمِعين.
|
|
7
|
+
*/
|
|
8
|
+
export function restoreShellInput(input, listener) {
|
|
9
|
+
emitKeypressEvents(input);
|
|
10
|
+
if (!input.listeners("keypress").includes(listener)) {
|
|
11
|
+
input.on("keypress", listener);
|
|
12
|
+
}
|
|
13
|
+
if (input.isTTY && !input.isRaw)
|
|
14
|
+
input.setRawMode?.(true);
|
|
15
|
+
input.resume();
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=input-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-mode.js","sourceRoot":"","sources":["../../src/shell/input-mode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAyCnD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAiB,EAAE,QAA0B;IAC7E,kBAAkB,CAAC,KAAc,CAAC,CAAC;IAEnC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;IAE1D,KAAK,CAAC,MAAM,EAAE,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* يقسّم سطرًا إلى وسائط. سطر فارغ أو مسافات وحدها يعطي مصفوفة فارغة.
|
|
3
|
+
* الاقتباس غير المغلَق يُقرأ حتى نهاية السطر بدل أن يُرمى: من نسي علامة إغلاق يريد ما كتبه، لا خطأً.
|
|
4
|
+
*/
|
|
5
|
+
export declare function splitCommandLine(line: string): string[];
|
|
6
|
+
//# sourceMappingURL=parse-line.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-line.d.ts","sourceRoot":"","sources":["../../src/shell/parse-line.ts"],"names":[],"mappings":"AA2BA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAkCvD"}
|