tunli 0.0.26 → 0.1.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/CHANGELOG.md +35 -0
- package/README.md +158 -67
- package/bin/tunli +4 -5
- package/dist/api-client/ApiClient.d.ts +18 -0
- package/dist/api-client/ApiClient.d.ts.map +1 -0
- package/dist/api-client/ApiClient.js +100 -0
- package/dist/api-client/ApiClient.js.map +1 -0
- package/dist/api-client/types.d.ts +26 -0
- package/dist/api-client/types.d.ts.map +1 -0
- package/dist/api-client/types.js +2 -0
- package/dist/api-client/types.js.map +1 -0
- package/dist/api-client/utils.d.ts +4 -0
- package/dist/api-client/utils.d.ts.map +1 -0
- package/dist/api-client/utils.js +13 -0
- package/dist/api-client/utils.js.map +1 -0
- package/dist/cli-app/AppEventEmitter.d.ts +57 -0
- package/dist/cli-app/AppEventEmitter.d.ts.map +1 -0
- package/dist/cli-app/AppEventEmitter.js +11 -0
- package/dist/cli-app/AppEventEmitter.js.map +1 -0
- package/dist/cli-app/Dashboard.d.ts +4 -0
- package/dist/cli-app/Dashboard.d.ts.map +1 -0
- package/dist/cli-app/Dashboard.js +149 -0
- package/dist/cli-app/Dashboard.js.map +1 -0
- package/dist/cli-app/LiveLog.d.ts +4 -0
- package/dist/cli-app/LiveLog.d.ts.map +1 -0
- package/dist/cli-app/LiveLog.js +28 -0
- package/dist/cli-app/LiveLog.js.map +1 -0
- package/dist/cli-app/types.d.ts +10 -0
- package/dist/cli-app/types.d.ts.map +1 -0
- package/dist/cli-app/types.js +2 -0
- package/dist/cli-app/types.js.map +1 -0
- package/dist/cli-app/versionCheck.d.ts +4 -0
- package/dist/cli-app/versionCheck.d.ts.map +1 -0
- package/dist/cli-app/versionCheck.js +46 -0
- package/dist/cli-app/versionCheck.js.map +1 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +75 -0
- package/dist/client.js.map +1 -0
- package/dist/commander/Argument.d.ts +19 -0
- package/dist/commander/Argument.d.ts.map +1 -0
- package/dist/commander/Argument.js +25 -0
- package/dist/commander/Argument.js.map +1 -0
- package/dist/commander/Command.d.ts +23 -0
- package/dist/commander/Command.d.ts.map +1 -0
- package/dist/commander/Command.js +159 -0
- package/dist/commander/Command.js.map +1 -0
- package/dist/commander/InvalidArgumentError.d.ts +5 -0
- package/dist/commander/InvalidArgumentError.d.ts.map +1 -0
- package/dist/commander/InvalidArgumentError.js +8 -0
- package/dist/commander/InvalidArgumentError.js.map +1 -0
- package/dist/commander/Option.d.ts +15 -0
- package/dist/commander/Option.d.ts.map +1 -0
- package/dist/commander/Option.js +43 -0
- package/dist/commander/Option.js.map +1 -0
- package/dist/commander/index.d.ts +7 -0
- package/dist/commander/index.d.ts.map +1 -0
- package/dist/commander/index.js +5 -0
- package/dist/commander/index.js.map +1 -0
- package/dist/commander/types.d.ts +2 -0
- package/dist/commander/types.d.ts.map +1 -0
- package/dist/commander/types.js +2 -0
- package/dist/commander/types.js.map +1 -0
- package/dist/commands/CommandAuth/CommandAuth.d.ts +4 -0
- package/dist/commands/CommandAuth/CommandAuth.d.ts.map +1 -0
- package/dist/commands/CommandAuth/CommandAuth.js +24 -0
- package/dist/commands/CommandAuth/CommandAuth.js.map +1 -0
- package/dist/commands/CommandConfig/CommandConfig.d.ts +4 -0
- package/dist/commands/CommandConfig/CommandConfig.d.ts.map +1 -0
- package/dist/commands/CommandConfig/CommandConfig.js +37 -0
- package/dist/commands/CommandConfig/CommandConfig.js.map +1 -0
- package/dist/commands/CommandConfig/sub-commands/configDeleteCommand.d.ts +4 -0
- package/dist/commands/CommandConfig/sub-commands/configDeleteCommand.d.ts.map +1 -0
- package/dist/commands/CommandConfig/sub-commands/configDeleteCommand.js +20 -0
- package/dist/commands/CommandConfig/sub-commands/configDeleteCommand.js.map +1 -0
- package/dist/commands/CommandConfig/sub-commands/configGetCommand.d.ts +5 -0
- package/dist/commands/CommandConfig/sub-commands/configGetCommand.d.ts.map +1 -0
- package/dist/commands/CommandConfig/sub-commands/configGetCommand.js +23 -0
- package/dist/commands/CommandConfig/sub-commands/configGetCommand.js.map +1 -0
- package/dist/commands/CommandConfig/sub-commands/configSetCommand.d.ts +4 -0
- package/dist/commands/CommandConfig/sub-commands/configSetCommand.d.ts.map +1 -0
- package/dist/commands/CommandConfig/sub-commands/configSetCommand.js +69 -0
- package/dist/commands/CommandConfig/sub-commands/configSetCommand.js.map +1 -0
- package/dist/commands/CommandConfig/types.d.ts +6 -0
- package/dist/commands/CommandConfig/types.d.ts.map +1 -0
- package/dist/commands/CommandConfig/types.js +2 -0
- package/dist/commands/CommandConfig/types.js.map +1 -0
- package/dist/commands/CommandConfig/utils/preparePrimaryOptions.d.ts +3 -0
- package/dist/commands/CommandConfig/utils/preparePrimaryOptions.d.ts.map +1 -0
- package/dist/commands/CommandConfig/utils/preparePrimaryOptions.js +8 -0
- package/dist/commands/CommandConfig/utils/preparePrimaryOptions.js.map +1 -0
- package/dist/commands/CommandConfig/utils/resolveConfig.d.ts +8 -0
- package/dist/commands/CommandConfig/utils/resolveConfig.d.ts.map +1 -0
- package/dist/commands/CommandConfig/utils/resolveConfig.js +33 -0
- package/dist/commands/CommandConfig/utils/resolveConfig.js.map +1 -0
- package/dist/commands/CommandConfig/utils/sharedOptions.d.ts +3 -0
- package/dist/commands/CommandConfig/utils/sharedOptions.d.ts.map +1 -0
- package/dist/commands/CommandConfig/utils/sharedOptions.js +14 -0
- package/dist/commands/CommandConfig/utils/sharedOptions.js.map +1 -0
- package/dist/commands/CommandDaemon/CommandDaemon.d.ts +4 -0
- package/dist/commands/CommandDaemon/CommandDaemon.d.ts.map +1 -0
- package/dist/commands/CommandDaemon/CommandDaemon.js +57 -0
- package/dist/commands/CommandDaemon/CommandDaemon.js.map +1 -0
- package/dist/commands/CommandDashboard/CommandDashboard.d.ts +4 -0
- package/dist/commands/CommandDashboard/CommandDashboard.d.ts.map +1 -0
- package/dist/commands/CommandDashboard/CommandDashboard.js +54 -0
- package/dist/commands/CommandDashboard/CommandDashboard.js.map +1 -0
- package/dist/commands/CommandHTTP/CommandHttp.d.ts +4 -0
- package/dist/commands/CommandHTTP/CommandHttp.d.ts.map +1 -0
- package/dist/commands/CommandHTTP/CommandHttp.js +50 -0
- package/dist/commands/CommandHTTP/CommandHttp.js.map +1 -0
- package/dist/commands/CommandInit/CommandInit.d.ts +4 -0
- package/dist/commands/CommandInit/CommandInit.d.ts.map +1 -0
- package/dist/commands/CommandInit/CommandInit.js +36 -0
- package/dist/commands/CommandInit/CommandInit.js.map +1 -0
- package/dist/commands/CommandList/CommandList.d.ts +4 -0
- package/dist/commands/CommandList/CommandList.d.ts.map +1 -0
- package/dist/commands/CommandList/CommandList.js +54 -0
- package/dist/commands/CommandList/CommandList.js.map +1 -0
- package/dist/commands/CommandLogs/CommandLogs.d.ts +4 -0
- package/dist/commands/CommandLogs/CommandLogs.d.ts.map +1 -0
- package/dist/commands/CommandLogs/CommandLogs.js +33 -0
- package/dist/commands/CommandLogs/CommandLogs.js.map +1 -0
- package/dist/commands/CommandProfile/CommandProfile.d.ts +5 -0
- package/dist/commands/CommandProfile/CommandProfile.d.ts.map +1 -0
- package/dist/commands/CommandProfile/CommandProfile.js +64 -0
- package/dist/commands/CommandProfile/CommandProfile.js.map +1 -0
- package/dist/commands/CommandRegister/CommandRegister.d.ts +4 -0
- package/dist/commands/CommandRegister/CommandRegister.d.ts.map +1 -0
- package/dist/commands/CommandRegister/CommandRegister.js +43 -0
- package/dist/commands/CommandRegister/CommandRegister.js.map +1 -0
- package/dist/commands/CommandRestart/CommandRestart.d.ts +4 -0
- package/dist/commands/CommandRestart/CommandRestart.d.ts.map +1 -0
- package/dist/commands/CommandRestart/CommandRestart.js +62 -0
- package/dist/commands/CommandRestart/CommandRestart.js.map +1 -0
- package/dist/commands/CommandServer/CommandServer.d.ts +4 -0
- package/dist/commands/CommandServer/CommandServer.d.ts.map +1 -0
- package/dist/commands/CommandServer/CommandServer.js +24 -0
- package/dist/commands/CommandServer/CommandServer.js.map +1 -0
- package/dist/commands/CommandStop/CommandStop.d.ts +4 -0
- package/dist/commands/CommandStop/CommandStop.d.ts.map +1 -0
- package/dist/commands/CommandStop/CommandStop.js +25 -0
- package/dist/commands/CommandStop/CommandStop.js.map +1 -0
- package/dist/commands/CommandUpdate/CommandUpdate.d.ts +4 -0
- package/dist/commands/CommandUpdate/CommandUpdate.d.ts.map +1 -0
- package/dist/commands/CommandUpdate/CommandUpdate.js +38 -0
- package/dist/commands/CommandUpdate/CommandUpdate.js.map +1 -0
- package/dist/commands/CommandUseProfile/CommandUseProfile.d.ts +4 -0
- package/dist/commands/CommandUseProfile/CommandUseProfile.d.ts.map +1 -0
- package/dist/commands/CommandUseProfile/CommandUseProfile.js +63 -0
- package/dist/commands/CommandUseProfile/CommandUseProfile.js.map +1 -0
- package/dist/commands/helper/Help.d.ts +4 -0
- package/dist/commands/helper/Help.d.ts.map +1 -0
- package/dist/commands/helper/Help.js +134 -0
- package/dist/commands/helper/Help.js.map +1 -0
- package/dist/commands/helper/Parser.d.ts +55 -0
- package/dist/commands/helper/Parser.d.ts.map +1 -0
- package/dist/commands/helper/Parser.js +280 -0
- package/dist/commands/helper/Parser.js.map +1 -0
- package/dist/commands/shared/allowDenyCidrCommand.d.ts +3 -0
- package/dist/commands/shared/allowDenyCidrCommand.d.ts.map +1 -0
- package/dist/commands/shared/allowDenyCidrCommand.js +10 -0
- package/dist/commands/shared/allowDenyCidrCommand.js.map +1 -0
- package/dist/commands/shared/configServersCommand.d.ts +4 -0
- package/dist/commands/shared/configServersCommand.d.ts.map +1 -0
- package/dist/commands/shared/configServersCommand.js +19 -0
- package/dist/commands/shared/configServersCommand.js.map +1 -0
- package/dist/commands/utils.d.ts +3 -0
- package/dist/commands/utils.d.ts.map +1 -0
- package/dist/commands/utils.js +17 -0
- package/dist/commands/utils.js.map +1 -0
- package/dist/config/ParsedConfig.d.ts +31 -0
- package/dist/config/ParsedConfig.d.ts.map +1 -0
- package/dist/config/ParsedConfig.js +116 -0
- package/dist/config/ParsedConfig.js.map +1 -0
- package/dist/config/ParsedGlobalConfig.d.ts +5 -0
- package/dist/config/ParsedGlobalConfig.d.ts.map +1 -0
- package/dist/config/ParsedGlobalConfig.js +7 -0
- package/dist/config/ParsedGlobalConfig.js.map +1 -0
- package/dist/config/ParsedLocalConfig.d.ts +5 -0
- package/dist/config/ParsedLocalConfig.d.ts.map +1 -0
- package/dist/config/ParsedLocalConfig.js +7 -0
- package/dist/config/ParsedLocalConfig.js.map +1 -0
- package/dist/config/ParsedProfileConfig.d.ts +46 -0
- package/dist/config/ParsedProfileConfig.d.ts.map +1 -0
- package/dist/config/ParsedProfileConfig.js +120 -0
- package/dist/config/ParsedProfileConfig.js.map +1 -0
- package/dist/config/ParsedServerConfig.d.ts +20 -0
- package/dist/config/ParsedServerConfig.d.ts.map +1 -0
- package/dist/config/ParsedServerConfig.js +55 -0
- package/dist/config/ParsedServerConfig.js.map +1 -0
- package/dist/config/TempProfileConfig.d.ts +8 -0
- package/dist/config/TempProfileConfig.d.ts.map +1 -0
- package/dist/config/TempProfileConfig.js +13 -0
- package/dist/config/TempProfileConfig.js.map +1 -0
- package/dist/config/utils.d.ts +2 -0
- package/dist/config/utils.d.ts.map +1 -0
- package/dist/config/utils.js +8 -0
- package/dist/config/utils.js.map +1 -0
- package/dist/config/validations/validateProfileConfig.d.ts +4 -0
- package/dist/config/validations/validateProfileConfig.d.ts.map +1 -0
- package/dist/config/validations/validateProfileConfig.js +76 -0
- package/dist/config/validations/validateProfileConfig.js.map +1 -0
- package/dist/core/FS/utils.d.ts +12 -0
- package/dist/core/FS/utils.d.ts.map +1 -0
- package/dist/core/FS/utils.js +55 -0
- package/dist/core/FS/utils.js.map +1 -0
- package/dist/daemon/DaemonClient.d.ts +16 -0
- package/dist/daemon/DaemonClient.d.ts.map +1 -0
- package/dist/daemon/DaemonClient.js +158 -0
- package/dist/daemon/DaemonClient.js.map +1 -0
- package/dist/daemon/DaemonServer.d.ts +8 -0
- package/dist/daemon/DaemonServer.d.ts.map +1 -0
- package/dist/daemon/DaemonServer.js +201 -0
- package/dist/daemon/DaemonServer.js.map +1 -0
- package/dist/daemon/protocol.d.ts +101 -0
- package/dist/daemon/protocol.d.ts.map +1 -0
- package/dist/daemon/protocol.js +2 -0
- package/dist/daemon/protocol.js.map +1 -0
- package/dist/daemon-main.d.ts +2 -0
- package/dist/daemon-main.d.ts.map +1 -0
- package/dist/daemon-main.js +13 -0
- package/dist/daemon-main.js.map +1 -0
- package/dist/launcher-main.d.ts +2 -0
- package/dist/launcher-main.d.ts.map +1 -0
- package/dist/launcher-main.js +57 -0
- package/dist/launcher-main.js.map +1 -0
- package/dist/lib/Flow/applyUpdate.d.ts +3 -0
- package/dist/lib/Flow/applyUpdate.d.ts.map +1 -0
- package/dist/lib/Flow/applyUpdate.js +34 -0
- package/dist/lib/Flow/applyUpdate.js.map +1 -0
- package/dist/lib/Flow/downloadBinaryUpdate.d.ts +3 -0
- package/dist/lib/Flow/downloadBinaryUpdate.d.ts.map +1 -0
- package/dist/lib/Flow/downloadBinaryUpdate.js +54 -0
- package/dist/lib/Flow/downloadBinaryUpdate.js.map +1 -0
- package/dist/lib/Flow/getLatestVersion.d.ts +2 -0
- package/dist/lib/Flow/getLatestVersion.d.ts.map +1 -0
- package/dist/lib/Flow/getLatestVersion.js +13 -0
- package/dist/lib/Flow/getLatestVersion.js.map +1 -0
- package/dist/lib/defs.d.ts +18 -0
- package/dist/lib/defs.d.ts.map +1 -0
- package/dist/lib/defs.js +33 -0
- package/dist/lib/defs.js.map +1 -0
- package/dist/logger/logger.d.ts +6 -0
- package/dist/logger/logger.d.ts.map +1 -0
- package/dist/logger/logger.js +34 -0
- package/dist/logger/logger.js.map +1 -0
- package/dist/output-formats/colors.d.ts +7 -0
- package/dist/output-formats/colors.d.ts.map +1 -0
- package/dist/output-formats/colors.js +8 -0
- package/dist/output-formats/colors.js.map +1 -0
- package/dist/output-formats/formatConfig.d.ts +3 -0
- package/dist/output-formats/formatConfig.d.ts.map +1 -0
- package/dist/output-formats/formatConfig.js +59 -0
- package/dist/output-formats/formatConfig.js.map +1 -0
- package/dist/output-formats/formatConfigPath.d.ts +4 -0
- package/dist/output-formats/formatConfigPath.d.ts.map +1 -0
- package/dist/output-formats/formatConfigPath.js +7 -0
- package/dist/output-formats/formatConfigPath.js.map +1 -0
- package/dist/output-formats/formatPath.d.ts +2 -0
- package/dist/output-formats/formatPath.d.ts.map +1 -0
- package/dist/output-formats/formatPath.js +6 -0
- package/dist/output-formats/formatPath.js.map +1 -0
- package/dist/output-formats/formatProfile.d.ts +3 -0
- package/dist/output-formats/formatProfile.d.ts.map +1 -0
- package/dist/output-formats/formatProfile.js +35 -0
- package/dist/output-formats/formatProfile.js.map +1 -0
- package/dist/output-formats/formatProfilesShort.d.ts +3 -0
- package/dist/output-formats/formatProfilesShort.d.ts.map +1 -0
- package/dist/output-formats/formatProfilesShort.js +19 -0
- package/dist/output-formats/formatProfilesShort.js.map +1 -0
- package/dist/output-formats/formatSaveResult.d.ts +4 -0
- package/dist/output-formats/formatSaveResult.d.ts.map +1 -0
- package/dist/output-formats/formatSaveResult.js +7 -0
- package/dist/output-formats/formatSaveResult.js.map +1 -0
- package/dist/output-formats/table.d.ts +8 -0
- package/dist/output-formats/table.d.ts.map +1 -0
- package/dist/output-formats/table.js +15 -0
- package/dist/output-formats/table.js.map +1 -0
- package/dist/package-json/packageJson.d.ts +6 -0
- package/dist/package-json/packageJson.d.ts.map +1 -0
- package/dist/package-json/packageJson.js +12 -0
- package/dist/package-json/packageJson.js.map +1 -0
- package/dist/proxy/Proxy.d.ts +6 -0
- package/dist/proxy/Proxy.d.ts.map +1 -0
- package/dist/proxy/Proxy.js +203 -0
- package/dist/proxy/Proxy.js.map +1 -0
- package/dist/sea-main.d.ts +2 -0
- package/dist/sea-main.d.ts.map +1 -0
- package/dist/sea-main.js +20 -0
- package/dist/sea-main.js.map +1 -0
- package/dist/types/types.d.ts +55 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js +2 -0
- package/dist/types/types.js.map +1 -0
- package/dist/utils/arrayFunctions.d.ts +24 -0
- package/dist/utils/arrayFunctions.d.ts.map +1 -0
- package/dist/utils/arrayFunctions.js +43 -0
- package/dist/utils/arrayFunctions.js.map +1 -0
- package/dist/utils/assertFunctions.d.ts +7 -0
- package/dist/utils/assertFunctions.d.ts.map +1 -0
- package/dist/utils/assertFunctions.js +20 -0
- package/dist/utils/assertFunctions.js.map +1 -0
- package/dist/utils/checkFunctions.d.ts +34 -0
- package/dist/utils/checkFunctions.d.ts.map +1 -0
- package/dist/utils/checkFunctions.js +87 -0
- package/dist/utils/checkFunctions.js.map +1 -0
- package/dist/utils/cliFunctions.d.ts +10 -0
- package/dist/utils/cliFunctions.d.ts.map +1 -0
- package/dist/utils/cliFunctions.js +68 -0
- package/dist/utils/cliFunctions.js.map +1 -0
- package/dist/utils/hashFunctions.d.ts +10 -0
- package/dist/utils/hashFunctions.d.ts.map +1 -0
- package/dist/utils/hashFunctions.js +11 -0
- package/dist/utils/hashFunctions.js.map +1 -0
- package/dist/utils/npmFunctions.d.ts +3 -0
- package/dist/utils/npmFunctions.d.ts.map +1 -0
- package/dist/utils/npmFunctions.js +28 -0
- package/dist/utils/npmFunctions.js.map +1 -0
- package/dist/utils/stringFunctions.d.ts +12 -0
- package/dist/utils/stringFunctions.d.ts.map +1 -0
- package/dist/utils/stringFunctions.js +37 -0
- package/dist/utils/stringFunctions.js.map +1 -0
- package/package.json +39 -16
- package/client.js +0 -33
- package/src/cli-app/Dashboard.js +0 -211
- package/src/cli-app/Screen.js +0 -135
- package/src/cli-app/elements/ElementNode.js +0 -97
- package/src/cli-app/elements/Line.js +0 -21
- package/src/cli-app/elements/List/List.js +0 -227
- package/src/cli-app/elements/List/ListCell.js +0 -83
- package/src/cli-app/elements/List/ListColumn.js +0 -52
- package/src/cli-app/elements/List/ListRow.js +0 -118
- package/src/cli-app/elements/Row.js +0 -38
- package/src/cli-app/helper/utils.js +0 -42
- package/src/commands/Action/addDelValuesAction.js +0 -56
- package/src/commands/CommandAuth.js +0 -32
- package/src/commands/CommandClearAll.js +0 -27
- package/src/commands/CommandConfig.js +0 -59
- package/src/commands/CommandHTTP.js +0 -192
- package/src/commands/CommandInvite.js +0 -38
- package/src/commands/CommandRefresh.js +0 -35
- package/src/commands/CommandRegister.js +0 -48
- package/src/commands/Option/DeleteOption.js +0 -6
- package/src/commands/Option/ProfileListOption.js +0 -65
- package/src/commands/Option/SelectConfigOption.js +0 -52
- package/src/commands/SubCommand/AllowDenyCidrCommand.js +0 -28
- package/src/commands/SubCommand/HostCommand.js +0 -22
- package/src/commands/SubCommand/PortCommand.js +0 -20
- package/src/commands/SubCommand/ProtocolCommand.js +0 -21
- package/src/commands/helper/AliasResolver.js +0 -13
- package/src/commands/helper/BindArgs.js +0 -53
- package/src/commands/helper/SharedArg.js +0 -32
- package/src/commands/utils.js +0 -96
- package/src/config/ConfigAbstract.js +0 -353
- package/src/config/ConfigManager.js +0 -70
- package/src/config/GlobalConfig.js +0 -14
- package/src/config/GlobalLocalShardConfigAbstract.js +0 -98
- package/src/config/LocalConfig.js +0 -7
- package/src/config/PropertyConfig.js +0 -122
- package/src/config/SystemConfig.js +0 -31
- package/src/core/FS/utils.js +0 -60
- package/src/core/Ref.js +0 -70
- package/src/lib/Flow/getCurrentIp.js +0 -18
- package/src/lib/Flow/getLatestVersion.js +0 -13
- package/src/lib/Flow/proxyUrl.js +0 -35
- package/src/lib/Flow/validateAuthToken.js +0 -19
- package/src/lib/HttpClient.js +0 -61
- package/src/lib/Proxy.js +0 -42
- package/src/lib/defs.js +0 -13
- package/src/net/IPV4.js +0 -139
- package/src/net/http/IncomingMessage.js +0 -92
- package/src/net/http/ServerResponse.js +0 -126
- package/src/net/http/TunliRequest.js +0 -1
- package/src/net/http/TunliResponse.js +0 -1
- package/src/net/http/TunnelRequest.js +0 -229
- package/src/net/http/TunnelResponse.js +0 -119
- package/src/tunnel-client/TunnelClient.js +0 -144
- package/src/utils/arrayFunctions.js +0 -45
- package/src/utils/checkFunctions.js +0 -182
- package/src/utils/cliFunctions.js +0 -63
- package/src/utils/createRequest.js +0 -12
- package/src/utils/hashFunctions.js +0 -9
- package/src/utils/httpFunction.js +0 -23
- package/src/utils/npmFunctions.js +0 -27
- package/src/utils/stringFunctions.js +0 -59
- package/types/index.d.ts +0 -119
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { render, Box, Text, useInput, useApp, useStdout } from 'ink';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import QRCode from 'qrcode';
|
|
6
|
+
import { readPackageJson } from '#package-json/packageJson';
|
|
7
|
+
import { setCursorVisibility } from '#utils/cliFunctions';
|
|
8
|
+
import { getAvailableUpdate, performUpdate } from '#cli-app/versionCheck';
|
|
9
|
+
import { CHECK_FOR_UPDATES } from "#lib/defs";
|
|
10
|
+
const SPINNER_CHARS = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
|
11
|
+
const Spinner = ({ spinning }) => {
|
|
12
|
+
const [index, setIndex] = useState(0);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (!spinning)
|
|
15
|
+
return;
|
|
16
|
+
const id = setInterval(() => setIndex(i => (i + 1) % SPINNER_CHARS.length), 100);
|
|
17
|
+
return () => clearInterval(id);
|
|
18
|
+
}, [spinning]);
|
|
19
|
+
return _jsx(Text, { children: spinning ? (SPINNER_CHARS[index] ?? ' ') : ' ' });
|
|
20
|
+
};
|
|
21
|
+
const InfoRow = ({ label, value }) => (_jsxs(Box, { children: [_jsx(Box, { minWidth: 30, children: _jsx(Text, { children: label }) }), _jsx(Text, { children: value })] }));
|
|
22
|
+
const QRModal = ({ text, onClose }) => {
|
|
23
|
+
const { stdout } = useStdout();
|
|
24
|
+
useInput((input, key) => {
|
|
25
|
+
if (key.escape || input === 'q')
|
|
26
|
+
onClose();
|
|
27
|
+
});
|
|
28
|
+
return (_jsx(Box, { width: "100%", height: stdout.rows, flexDirection: "column", alignItems: "center", justifyContent: "center", children: _jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", padding: 1, children: [_jsx(Text, { dimColor: true, children: "Press q or Escape to close" }), _jsx(Text, { children: text })] }) }));
|
|
29
|
+
};
|
|
30
|
+
const DashboardApp = ({ config, appEventEmitter }) => {
|
|
31
|
+
const { exit } = useApp();
|
|
32
|
+
const { stdout } = useStdout();
|
|
33
|
+
const packageJson = readPackageJson();
|
|
34
|
+
const [spinning, setSpinning] = useState(true);
|
|
35
|
+
const [connectionStatus, setConnectionStatus] = useState(chalk.yellow('offline'));
|
|
36
|
+
const [availableUpdate, setAvailableUpdate] = useState('');
|
|
37
|
+
const [latestVersion, setLatestVersion] = useState(null);
|
|
38
|
+
const [updatingPackage, setUpdatingPackage] = useState(false);
|
|
39
|
+
const [requestCount, setRequestCount] = useState(0);
|
|
40
|
+
const [blockedCount, setBlockedCount] = useState(0);
|
|
41
|
+
const [lastBlockedIp, setLastBlockedIp] = useState('');
|
|
42
|
+
const [accessLog, setAccessLog] = useState([]);
|
|
43
|
+
const [qrText, setQrText] = useState(null);
|
|
44
|
+
const [latency, setLatency] = useState(null);
|
|
45
|
+
const forwardingUrl = `${config.proxy.proxyURL} -> http://${config.target.host}:${config.target.port}/`;
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (!CHECK_FOR_UPDATES)
|
|
48
|
+
return;
|
|
49
|
+
if (!packageJson)
|
|
50
|
+
return;
|
|
51
|
+
void getAvailableUpdate(packageJson.version).then(version => {
|
|
52
|
+
if (version) {
|
|
53
|
+
setLatestVersion(version);
|
|
54
|
+
setAvailableUpdate(chalk.yellow(`update available (version ${version}, Ctrl-U to update)`));
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}, []);
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
appEventEmitter
|
|
60
|
+
.on('connect', () => {
|
|
61
|
+
setSpinning(false);
|
|
62
|
+
setConnectionStatus(chalk.bold(chalk.green('online')));
|
|
63
|
+
})
|
|
64
|
+
.on('disconnect', () => {
|
|
65
|
+
setSpinning(true);
|
|
66
|
+
setConnectionStatus(chalk.bold(chalk.red('offline')));
|
|
67
|
+
})
|
|
68
|
+
.on('connect_error', (e) => {
|
|
69
|
+
setSpinning(true);
|
|
70
|
+
setConnectionStatus(`${chalk.bold(chalk.red('error'))} - ${e.message}`);
|
|
71
|
+
})
|
|
72
|
+
.on('response', (req, res) => {
|
|
73
|
+
let rspMsg = `${res.statusCode} ${res.statusMessage}`;
|
|
74
|
+
if (res.statusCode >= 500)
|
|
75
|
+
rspMsg = chalk.red(rspMsg);
|
|
76
|
+
else if (res.statusCode >= 400)
|
|
77
|
+
rspMsg = chalk.blueBright(rspMsg);
|
|
78
|
+
else
|
|
79
|
+
rspMsg = chalk.green(rspMsg);
|
|
80
|
+
rspMsg = chalk.bold(rspMsg);
|
|
81
|
+
setRequestCount(c => c + 1);
|
|
82
|
+
setAccessLog(log => [...log, {
|
|
83
|
+
method: req.method,
|
|
84
|
+
path: req.path,
|
|
85
|
+
status: rspMsg,
|
|
86
|
+
id: Date.now()
|
|
87
|
+
}].slice(-30));
|
|
88
|
+
})
|
|
89
|
+
.on('client-blocked', (ip) => {
|
|
90
|
+
setBlockedCount(c => c + 1);
|
|
91
|
+
setLastBlockedIp(ip);
|
|
92
|
+
})
|
|
93
|
+
.on('latency', (ms) => setLatency(ms))
|
|
94
|
+
.on('request-count', (count) => setRequestCount(count));
|
|
95
|
+
}, []);
|
|
96
|
+
// Ctrl+C always active (even when QR modal is open)
|
|
97
|
+
useInput((input, key) => {
|
|
98
|
+
if (key.ctrl && input === 'c') {
|
|
99
|
+
exit();
|
|
100
|
+
process.exit(0);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
useInput((input, key) => {
|
|
104
|
+
if (key.ctrl && input === 'r') {
|
|
105
|
+
setAvailableUpdate(chalk.yellow('Restarting...'));
|
|
106
|
+
process.send?.('restart');
|
|
107
|
+
}
|
|
108
|
+
if (key.ctrl && input === 'q') {
|
|
109
|
+
QRCode.toString(config.proxy.proxyURL, { type: 'terminal' }, (err, url) => {
|
|
110
|
+
if (!err)
|
|
111
|
+
setQrText(url);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
if (key.ctrl && input === 'u' && latestVersion && !updatingPackage && packageJson) {
|
|
115
|
+
setUpdatingPackage(true);
|
|
116
|
+
setAvailableUpdate(chalk.yellow('Updating...'));
|
|
117
|
+
void performUpdate(packageJson.name, (result) => {
|
|
118
|
+
if (result.status === 'progress') {
|
|
119
|
+
setAvailableUpdate(chalk.yellow(result.message));
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
setUpdatingPackage(false);
|
|
123
|
+
if (result.status === 'success') {
|
|
124
|
+
setAvailableUpdate(chalk.green('Update done. Please restart tunli. (Ctrl+R to restart)'));
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
setAvailableUpdate(chalk.red(`Update failed: ${result.reason}`));
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}, { isActive: qrText === null });
|
|
132
|
+
const allowedCidr = config.allowedCidr.length ? config.allowedCidr : null;
|
|
133
|
+
const deniedCidr = config.deniedCidr.length ? config.deniedCidr : null;
|
|
134
|
+
if (qrText !== null) {
|
|
135
|
+
return _jsx(QRModal, { text: qrText, onClose: () => setQrText(null) });
|
|
136
|
+
}
|
|
137
|
+
return (_jsxs(Box, { flexDirection: "column", height: stdout.rows, children: [_jsxs(Box, { width: "100%", justifyContent: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { children: "tunli " }), _jsx(Spinner, { spinning: spinning })] }), _jsx(Text, { children: "(Ctrl+C to quit)" })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(InfoRow, { label: "Tunnel", value: connectionStatus }), packageJson ? _jsx(InfoRow, { label: "Version", value: packageJson.version }) : null, availableUpdate ? _jsx(InfoRow, { label: chalk.yellow('Update'), value: availableUpdate }) : null, _jsx(InfoRow, { label: "Profile", value: config.profileName }), _jsx(InfoRow, { label: "Config", value: config.filepath }), _jsx(InfoRow, { label: "QR-Code", value: "Ctrl-Q" }), (allowedCidr ?? deniedCidr) ? _jsx(Text, { children: " " }) : null, allowedCidr ? _jsx(InfoRow, { label: "Allowed", value: allowedCidr.join(', ') }) : null, deniedCidr ? _jsx(InfoRow, { label: "Denied", value: deniedCidr.join(', ') }) : null, (allowedCidr ?? deniedCidr) ? (_jsx(InfoRow, { label: "Blocked", value: `${blockedCount}${lastBlockedIp ? ` (${lastBlockedIp})` : ''}` })) : null, _jsx(Text, { children: " " }), _jsx(InfoRow, { label: "Latency", value: latency !== null ? `${latency}ms` : '—' }), _jsx(InfoRow, { label: "Forwarding", value: forwardingUrl }), _jsx(InfoRow, { label: "Connections", value: String(requestCount) })] }), _jsx(Text, { children: " " }), _jsx(Text, { children: " " }), _jsx(Text, { children: "HTTP Requests" }), _jsx(Text, { children: '─'.repeat(stdout.columns) }), _jsx(Box, { flexDirection: "column", children: [...accessLog].reverse().map(entry => (_jsxs(Box, { children: [_jsx(Box, { minWidth: 8, children: _jsx(Text, { children: entry.method }) }), _jsx(Box, { minWidth: 30, children: _jsx(Text, { children: entry.path }) }), _jsx(Text, { children: entry.status })] }, entry.id))) })] }));
|
|
138
|
+
};
|
|
139
|
+
export const initDashboard = (config, appEventEmitter) => {
|
|
140
|
+
process.stdout.write('\x1b[?1049h'); // enter alternate screen buffer
|
|
141
|
+
setCursorVisibility(false);
|
|
142
|
+
const restoreScreen = () => {
|
|
143
|
+
process.stdout.write('\x1b[?1049l'); // leave alternate screen buffer
|
|
144
|
+
setCursorVisibility(true);
|
|
145
|
+
};
|
|
146
|
+
process.once('exit', restoreScreen);
|
|
147
|
+
render(_jsx(DashboardApp, { config: config, appEventEmitter: appEventEmitter }), { exitOnCtrlC: false });
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=Dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dashboard.js","sourceRoot":"","sources":["../../src/cli-app/Dashboard.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveLog.d.ts","sourceRoot":"","sources":["../../src/cli-app/LiveLog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAE9D,eAAO,MAAM,WAAW,GAAI,SAAS,aAAa,EAAE,iBAAiB,eAAe,SA2BnF,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const initLiveLog = (_config, appEventEmitter) => {
|
|
2
|
+
const stdout = (msg) => process.stdout.write(`${msg}\n`);
|
|
3
|
+
appEventEmitter.on('response', (req, res) => {
|
|
4
|
+
stdout(`${req.method} ${req.path} - ${res.statusCode} ${res.statusMessage}`);
|
|
5
|
+
}).on('request', (req) => {
|
|
6
|
+
stdout(`→ ${req.method} ${req.path}`);
|
|
7
|
+
}).on('connect', () => {
|
|
8
|
+
stdout('client connected');
|
|
9
|
+
}).on('client-blocked', ip => {
|
|
10
|
+
stdout(`blocked ip ${ip}`);
|
|
11
|
+
}).on('disconnect', () => {
|
|
12
|
+
stdout('client disconnected');
|
|
13
|
+
}).on('connect_error', (e) => {
|
|
14
|
+
stdout(`connection error: ${e.message}`);
|
|
15
|
+
}).on('request-error', (e, meta) => {
|
|
16
|
+
if (meta.isUpgrade) {
|
|
17
|
+
stdout(`[upgrade] TCP error ${meta.requestId}: ${e.message}`);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
stdout(`[request] local error ${meta.requestId}: ${e.message}`);
|
|
21
|
+
}
|
|
22
|
+
}).on('ready', (info) => {
|
|
23
|
+
stdout('[auth] registered, token received');
|
|
24
|
+
stdout(`[tunnel] id=${info.proxyIdent}`);
|
|
25
|
+
stdout(`[tunnel] url=${info.proxyURL} → ${info.target.host}:${info.target.port}`);
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=LiveLog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LiveLog.js","sourceRoot":"","sources":["../../src/cli-app/LiveLog.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAsB,EAAE,eAAgC,EAAE,EAAE;IAEtF,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;IAEhE,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1C,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;QACvB,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IACvC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACpB,MAAM,CAAC,kBAAkB,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,EAAE;QAC3B,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QACvB,MAAM,CAAC,qBAAqB,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;QAC3B,MAAM,CAAC,qBAAqB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;QACjC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,CAAC,uBAAuB,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QAC/D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,yBAAyB,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QACjE,CAAC;IACH,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;QACtB,MAAM,CAAC,mCAAmC,CAAC,CAAA;QAC3C,MAAM,CAAC,eAAe,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;QACxC,MAAM,CAAC,gBAAgB,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACnF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli-app/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli-app/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { UpdateResult } from "./types.js";
|
|
2
|
+
export declare const getAvailableUpdate: (currentVersion: string) => Promise<string | null>;
|
|
3
|
+
export declare const performUpdate: (packageName: string, onComplete: (result: UpdateResult) => void) => Promise<void>;
|
|
4
|
+
//# sourceMappingURL=versionCheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versionCheck.d.ts","sourceRoot":"","sources":["../../src/cli-app/versionCheck.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,YAAY,CAAC;AAE7C,eAAO,MAAM,kBAAkB,GAAU,gBAAgB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAItF,CAAA;AAED,eAAO,MAAM,aAAa,GAAU,aAAa,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,KAAG,OAAO,CAAC,IAAI,CAgCjH,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { getLatestVersion } from '#lib/Flow/getLatestVersion';
|
|
2
|
+
import { checkGlobalInstallation, checkLocalInstallation } from '#utils/npmFunctions';
|
|
3
|
+
import { downloadBinaryUpdate } from '#lib/Flow/downloadBinaryUpdate';
|
|
4
|
+
import { exec } from 'node:child_process';
|
|
5
|
+
import { isSea } from 'node:sea';
|
|
6
|
+
export const getAvailableUpdate = async (currentVersion) => {
|
|
7
|
+
const version = await getLatestVersion().catch(() => null);
|
|
8
|
+
if (!version || version === currentVersion)
|
|
9
|
+
return null;
|
|
10
|
+
return version;
|
|
11
|
+
};
|
|
12
|
+
export const performUpdate = async (packageName, onComplete) => {
|
|
13
|
+
if (isSea()) {
|
|
14
|
+
await downloadBinaryUpdate(onComplete);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const isGlobal = await checkGlobalInstallation(packageName);
|
|
19
|
+
let modifier = '';
|
|
20
|
+
if (isGlobal) {
|
|
21
|
+
modifier = ' -g';
|
|
22
|
+
}
|
|
23
|
+
else if (!await checkLocalInstallation(packageName)) {
|
|
24
|
+
onComplete({ status: 'failed', reason: 'Not installed via npm' });
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const cmd = `npm${modifier} update ${packageName} --registry https://registry.npmjs.org`;
|
|
28
|
+
onComplete({ status: 'progress', message: 'Updating via npm...' });
|
|
29
|
+
await new Promise((resolve) => {
|
|
30
|
+
exec(cmd, (error, _stdout, stderr) => {
|
|
31
|
+
if (error || stderr) {
|
|
32
|
+
const reason = error?.message ?? stderr;
|
|
33
|
+
onComplete({ status: 'failed', reason: `npm update failed: ${reason}`.trimEnd() });
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
onComplete({ status: 'success' });
|
|
37
|
+
}
|
|
38
|
+
resolve();
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
onComplete({ status: 'failed', reason: e instanceof Error ? e.message : String(e) });
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=versionCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versionCheck.js","sourceRoot":"","sources":["../../src/cli-app/versionCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAC,uBAAuB,EAAE,sBAAsB,EAAC,MAAM,qBAAqB,CAAA;AACnF,OAAO,EAAC,oBAAoB,EAAC,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAC,IAAI,EAAC,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAC,KAAK,EAAC,MAAM,UAAU,CAAA;AAG9B,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,cAAsB,EAA0B,EAAE;IACzF,MAAM,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC1D,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,cAAc;QAAE,OAAO,IAAI,CAAA;IACvD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,WAAmB,EAAE,UAA0C,EAAiB,EAAE;IACpH,IAAI,KAAK,EAAE,EAAE,CAAC;QACZ,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAA;QACtC,OAAM;IACR,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAA;QAC3D,IAAI,QAAQ,GAAG,EAAE,CAAA;QACjB,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,GAAG,KAAK,CAAA;QAClB,CAAC;aAAM,IAAI,CAAC,MAAM,sBAAsB,CAAC,WAAW,CAAC,EAAE,CAAC;YACtD,UAAU,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,uBAAuB,EAAC,CAAC,CAAA;YAC/D,OAAM;QACR,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,QAAQ,WAAW,WAAW,wCAAwC,CAAA;QACxF,UAAU,CAAC,EAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,qBAAqB,EAAC,CAAC,CAAA;QAChE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;gBACnC,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;oBACpB,MAAM,MAAM,GAAG,KAAK,EAAE,OAAO,IAAI,MAAM,CAAA;oBACvC,UAAU,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,sBAAsB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAC,CAAC,CAAA;gBAClF,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,EAAC,MAAM,EAAE,SAAS,EAAC,CAAC,CAAA;gBACjC,CAAC;gBACD,OAAO,EAAE,CAAA;YACX,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,UAAU,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC,CAAA;IACpF,CAAC;AACH,CAAC,CAAA"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":""}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { readJsonFile } from "#core/FS/utils";
|
|
2
|
+
import { Option, program } from '#commander/index';
|
|
3
|
+
import { FOUND_LOCAL_CONFIG_FILEPATH, GLOBAL_CONFIG_FILEPATH, LOCAL_CONFIG_FILEPATH } from "#lib/defs";
|
|
4
|
+
import { createCommandConfig } from "#commands/CommandConfig/CommandConfig";
|
|
5
|
+
import { createCommandHttp } from "#commands/CommandHTTP/CommandHttp";
|
|
6
|
+
import { createCommandStartProfile } from "#commands/CommandUseProfile/CommandUseProfile";
|
|
7
|
+
import { createCommandRegister } from "#commands/CommandRegister/CommandRegister";
|
|
8
|
+
import { createLocalConfig } from "#config/utils";
|
|
9
|
+
import { createCommandAuth } from "#commands/CommandAuth/CommandAuth";
|
|
10
|
+
import { createCommandInit } from "#commands/CommandInit/CommandInit";
|
|
11
|
+
import { createCommandServer } from "#commands/CommandServer/CommandServer";
|
|
12
|
+
import { ParsedGlobalConfig } from "#config/ParsedGlobalConfig";
|
|
13
|
+
import { ParsedLocalConfig } from "#config/ParsedLocalConfig";
|
|
14
|
+
import { createCommandProfile } from "#commands/CommandProfile/CommandProfile";
|
|
15
|
+
import { createCommandDaemon } from "#commands/CommandDaemon/CommandDaemon";
|
|
16
|
+
import { createCommandList } from "#commands/CommandList/CommandList";
|
|
17
|
+
import { createCommandDashboard } from "#commands/CommandDashboard/CommandDashboard";
|
|
18
|
+
import { createCommandLogs } from "#commands/CommandLogs/CommandLogs";
|
|
19
|
+
import { createCommandStop } from "#commands/CommandStop/CommandStop";
|
|
20
|
+
import { createCommandRestart } from "#commands/CommandRestart/CommandRestart";
|
|
21
|
+
import { createCommandUpdate } from "#commands/CommandUpdate/CommandUpdate";
|
|
22
|
+
import { ApiClient } from "#api-client/ApiClient";
|
|
23
|
+
import { readPackageJson } from "#package-json/packageJson";
|
|
24
|
+
const globalConf = new ParsedGlobalConfig(readJsonFile(GLOBAL_CONFIG_FILEPATH), GLOBAL_CONFIG_FILEPATH);
|
|
25
|
+
const localConf = FOUND_LOCAL_CONFIG_FILEPATH ? new ParsedLocalConfig(readJsonFile(FOUND_LOCAL_CONFIG_FILEPATH), FOUND_LOCAL_CONFIG_FILEPATH) : undefined;
|
|
26
|
+
const packageJson = readPackageJson();
|
|
27
|
+
const ctx = {
|
|
28
|
+
config: {
|
|
29
|
+
global: globalConf,
|
|
30
|
+
local: localConf,
|
|
31
|
+
createLocalConfig: () => createLocalConfig(LOCAL_CONFIG_FILEPATH)
|
|
32
|
+
},
|
|
33
|
+
exit(code) {
|
|
34
|
+
process.exit(code ?? 0);
|
|
35
|
+
},
|
|
36
|
+
apiClient: new ApiClient(globalConf, localConf),
|
|
37
|
+
logger: {
|
|
38
|
+
info: console.info,
|
|
39
|
+
error: console.error,
|
|
40
|
+
warn: console.warn,
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
program
|
|
44
|
+
.name('tunli')
|
|
45
|
+
.description('HTTP tunnel client')
|
|
46
|
+
.addOption(new Option('version').short('v'));
|
|
47
|
+
program.addCommand(createCommandInit(ctx, program));
|
|
48
|
+
program.addCommand(createCommandConfig(ctx, program));
|
|
49
|
+
program.addCommand(createCommandHttp(ctx, program), { isDefault: true });
|
|
50
|
+
program.addCommand(createCommandRegister(ctx, program));
|
|
51
|
+
// program.addCommand(createCommandRefresh(program)) TBD
|
|
52
|
+
// program.addCommand(createCommandInvite(program)) TBD
|
|
53
|
+
program.addCommand(createCommandAuth(ctx, program));
|
|
54
|
+
program.addCommand(createCommandStartProfile(ctx, program));
|
|
55
|
+
program.addCommand(createCommandServer(ctx, program));
|
|
56
|
+
program.addCommand(createCommandProfile(ctx, program));
|
|
57
|
+
program.addCommand(createCommandDaemon(ctx, program));
|
|
58
|
+
program.addCommand(createCommandList(ctx, program));
|
|
59
|
+
program.addCommand(createCommandDashboard(ctx, program));
|
|
60
|
+
program.addCommand(createCommandLogs(ctx, program));
|
|
61
|
+
program.addCommand(createCommandStop(ctx, program));
|
|
62
|
+
program.addCommand(createCommandRestart(ctx, program));
|
|
63
|
+
program.addCommand(createCommandUpdate(ctx, program));
|
|
64
|
+
program.action(({ options }) => {
|
|
65
|
+
if (options.version) {
|
|
66
|
+
ctx.logger.info(`tunli: ${packageJson?.version}`);
|
|
67
|
+
ctx.exit(0);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
ctx.logger.error('Error: Command "tunli": missing required argument, option or subcommand');
|
|
71
|
+
ctx.exit(1);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
await program.parseAsync(process.argv);
|
|
75
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type ParseFn = (value: string, previous?: unknown) => unknown;
|
|
2
|
+
export interface ArgSpec {
|
|
3
|
+
name: string;
|
|
4
|
+
required: boolean;
|
|
5
|
+
many: boolean;
|
|
6
|
+
description?: string | undefined;
|
|
7
|
+
parse?: ParseFn | undefined;
|
|
8
|
+
defaultValue?: unknown;
|
|
9
|
+
}
|
|
10
|
+
export declare class Argument {
|
|
11
|
+
#private;
|
|
12
|
+
constructor(name: string, description?: string);
|
|
13
|
+
required(): this;
|
|
14
|
+
many(): this;
|
|
15
|
+
default(value: unknown): this;
|
|
16
|
+
parse(fn: (value: string, previous?: unknown) => unknown): this;
|
|
17
|
+
get spec(): ArgSpec;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=Argument.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Argument.d.ts","sourceRoot":"","sources":["../../src/commander/Argument.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;AAEpE,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,OAAO,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,qBAAa,QAAQ;;gBAGP,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IAI9C,QAAQ,IAAI,IAAI;IAKhB,IAAI,IAAI,IAAI;IAKZ,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAK7B,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,GAAG,IAAI;IAM/D,IAAI,IAAI,YAAwB;CACjC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export class Argument {
|
|
2
|
+
#spec;
|
|
3
|
+
constructor(name, description) {
|
|
4
|
+
this.#spec = { name, required: false, many: false, ...(description !== undefined && { description }) };
|
|
5
|
+
}
|
|
6
|
+
required() {
|
|
7
|
+
this.#spec.required = true;
|
|
8
|
+
return this;
|
|
9
|
+
}
|
|
10
|
+
many() {
|
|
11
|
+
this.#spec.many = true;
|
|
12
|
+
return this;
|
|
13
|
+
}
|
|
14
|
+
default(value) {
|
|
15
|
+
this.#spec.defaultValue = value;
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
parse(fn) {
|
|
19
|
+
this.#spec.parse = fn;
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
// ─── Package-internal ──────────────────────────────────────────────────────
|
|
23
|
+
get spec() { return this.#spec; }
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=Argument.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Argument.js","sourceRoot":"","sources":["../../src/commander/Argument.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,QAAQ;IACV,KAAK,CAAS;IAEvB,YAAY,IAAY,EAAE,WAAoB;QAC5C,IAAI,CAAC,KAAK,GAAG,EAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAC,WAAW,EAAC,CAAC,EAAC,CAAA;IACpG,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;QAC1B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI;QACF,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CAAC,KAAc;QACpB,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAA;QAC/B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,EAAkD;QACtD,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAa,CAAA;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,8EAA8E;IAC9E,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAA,CAAC,CAAC;CACjC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type ParseResult, type RequiresInput } from '#commands/helper/Parser';
|
|
2
|
+
import { Option } from './Option.js';
|
|
3
|
+
import { Argument } from './Argument.js';
|
|
4
|
+
export declare class Command {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(name?: string);
|
|
7
|
+
name(n: string): this;
|
|
8
|
+
description(d: string): this;
|
|
9
|
+
requires(fn: (matched: RequiresInput) => Partial<RequiresInput>): this;
|
|
10
|
+
alias(a: string): this;
|
|
11
|
+
addOption(opt: Option): this;
|
|
12
|
+
addArgument(arg: Argument): this;
|
|
13
|
+
addCommand(cmd: Command, options?: {
|
|
14
|
+
isDefault?: boolean;
|
|
15
|
+
}): this;
|
|
16
|
+
action<TArgs = Record<string, unknown>, TOpts = Record<string, unknown>>(fn: (result: ParseResult<TArgs, TOpts>) => void | Promise<void>): this;
|
|
17
|
+
addExample(example: string, description?: string): this;
|
|
18
|
+
extendUsage(): this;
|
|
19
|
+
opts<T = Record<string, unknown>>(): T;
|
|
20
|
+
parseAsync(argv: string[]): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
export declare const program: Command;
|
|
23
|
+
//# sourceMappingURL=Command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../src/commander/Command.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,WAAW,EAChB,KAAK,aAAa,EACnB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAClC,OAAO,EAAe,QAAQ,EAAe,MAAM,eAAe,CAAA;AAMlE,qBAAa,OAAO;;gBAgBN,IAAI,SAAK;IAIrB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKrB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAK5B,QAAQ,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAKtE,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKtB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAkB5B,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI;IAKhC,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAOjE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrE,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAC9D,IAAI;IAKP,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAKvD,WAAW,IAAI,IAAI;IAKnB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC;IAqDhC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CA4BhD;AAED,eAAO,MAAM,OAAO,SAAgB,CAAA"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { parse, ParseError } from '#commands/helper/Parser';
|
|
2
|
+
import { findCommand, formatHelp } from '#commands/helper/Help';
|
|
3
|
+
import { Option } from './Option.js';
|
|
4
|
+
import { Argument } from './Argument.js';
|
|
5
|
+
import { logException } from "#logger/logger";
|
|
6
|
+
const toCamelCase = (str) => str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
|
|
7
|
+
export class Command {
|
|
8
|
+
#name;
|
|
9
|
+
#description;
|
|
10
|
+
#requires;
|
|
11
|
+
#aliases = [];
|
|
12
|
+
#argSpecs = [];
|
|
13
|
+
#directOpts = [];
|
|
14
|
+
#children = new Map();
|
|
15
|
+
#defaultChild;
|
|
16
|
+
#action;
|
|
17
|
+
#examples = [];
|
|
18
|
+
#extendUsage = false;
|
|
19
|
+
// Populated before action is called so opts() works inside argument validators
|
|
20
|
+
#parsedOpts = {};
|
|
21
|
+
constructor(name = '') {
|
|
22
|
+
this.#name = name;
|
|
23
|
+
}
|
|
24
|
+
name(n) {
|
|
25
|
+
this.#name = n;
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
description(d) {
|
|
29
|
+
this.#description = d;
|
|
30
|
+
return this;
|
|
31
|
+
}
|
|
32
|
+
requires(fn) {
|
|
33
|
+
this.#requires = fn;
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
alias(a) {
|
|
37
|
+
this.#aliases.push(a);
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
addOption(opt) {
|
|
41
|
+
this.#directOpts.push(opt.def);
|
|
42
|
+
for (const aliasName of opt.aliases) {
|
|
43
|
+
this.#directOpts.push({
|
|
44
|
+
type: 'option',
|
|
45
|
+
name: aliasName,
|
|
46
|
+
key: opt.def.key ?? toCamelCase(opt.def.name),
|
|
47
|
+
...(opt.def.argument !== undefined && { argument: opt.def.argument }),
|
|
48
|
+
...(opt.def.many && { many: true }),
|
|
49
|
+
...(opt.def.parse !== undefined && { parse: opt.def.parse }),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (opt.defaultValue !== undefined) {
|
|
53
|
+
this.#parsedOpts[opt.def.key ?? opt.def.name] = opt.defaultValue;
|
|
54
|
+
}
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
addArgument(arg) {
|
|
58
|
+
this.#argSpecs.push(arg.spec);
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
addCommand(cmd, options) {
|
|
62
|
+
this.#children.set(cmd.#name, cmd);
|
|
63
|
+
for (const alias of cmd.#aliases)
|
|
64
|
+
this.#children.set(alias, cmd);
|
|
65
|
+
if (options?.isDefault)
|
|
66
|
+
this.#defaultChild = cmd;
|
|
67
|
+
return this;
|
|
68
|
+
}
|
|
69
|
+
action(fn) {
|
|
70
|
+
this.#action = fn;
|
|
71
|
+
return this;
|
|
72
|
+
}
|
|
73
|
+
addExample(example, description) {
|
|
74
|
+
this.#examples.push({ example, ...(description !== undefined && { description }) });
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
extendUsage() {
|
|
78
|
+
this.#extendUsage = true;
|
|
79
|
+
return this;
|
|
80
|
+
}
|
|
81
|
+
opts() {
|
|
82
|
+
return this.#parsedOpts;
|
|
83
|
+
}
|
|
84
|
+
// ─── Builder → CommandDef ─────────────────────────────────────────────────
|
|
85
|
+
#toNode() {
|
|
86
|
+
const self = this;
|
|
87
|
+
const children = [];
|
|
88
|
+
children.push(...this.#directOpts);
|
|
89
|
+
for (const spec of this.#argSpecs) {
|
|
90
|
+
const argDef = {
|
|
91
|
+
type: 'argument',
|
|
92
|
+
name: spec.name,
|
|
93
|
+
...(spec.required !== undefined && { required: spec.required }),
|
|
94
|
+
...(spec.many && { many: true }),
|
|
95
|
+
...(spec.description !== undefined && { description: spec.description }),
|
|
96
|
+
...(spec.defaultValue !== undefined && { defaultValue: spec.defaultValue }),
|
|
97
|
+
// Wrap parse so opts() works inside validators via #parsedOpts side-effect
|
|
98
|
+
...(spec.parse && {
|
|
99
|
+
parse: (value, result) => {
|
|
100
|
+
self.#parsedOpts = result.options;
|
|
101
|
+
return spec.parse(value);
|
|
102
|
+
}
|
|
103
|
+
}),
|
|
104
|
+
};
|
|
105
|
+
children.push(argDef);
|
|
106
|
+
}
|
|
107
|
+
const seen = new Set();
|
|
108
|
+
for (const cmd of this.#children.values()) {
|
|
109
|
+
if (seen.has(cmd))
|
|
110
|
+
continue;
|
|
111
|
+
seen.add(cmd);
|
|
112
|
+
const childDef = cmd.#toNode();
|
|
113
|
+
if (cmd === this.#defaultChild)
|
|
114
|
+
childDef.isDefault = true;
|
|
115
|
+
children.push(childDef);
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
type: 'command',
|
|
119
|
+
name: this.#name,
|
|
120
|
+
...(this.#requires && { requires: this.#requires }),
|
|
121
|
+
...(this.#description !== undefined && { description: this.#description }),
|
|
122
|
+
...(this.#aliases.length > 0 && { alias: this.#aliases[0] }),
|
|
123
|
+
...(this.#extendUsage && { showUsage: 'global' }),
|
|
124
|
+
...(this.#examples.length > 0 && { examples: this.#examples }),
|
|
125
|
+
...(children.length > 0 && { children }),
|
|
126
|
+
...(this.#action !== undefined && { action: this.#action }),
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
async parseAsync(argv) {
|
|
130
|
+
const rootDef = this.#toNode();
|
|
131
|
+
let result;
|
|
132
|
+
try {
|
|
133
|
+
result = parse(argv, rootDef);
|
|
134
|
+
}
|
|
135
|
+
catch (e) {
|
|
136
|
+
process.stderr.write(`Error: ${e instanceof Error ? e.message : e}\n`);
|
|
137
|
+
const hint = e instanceof ParseError ? e.commandPath.join(' ') : 'tunli';
|
|
138
|
+
process.stderr.write(`Run '${hint} --help' for usage information.\n`);
|
|
139
|
+
process.exit(1);
|
|
140
|
+
}
|
|
141
|
+
if (result.help) {
|
|
142
|
+
const subPath = result.command.slice(1);
|
|
143
|
+
const nodeDef = findCommand(rootDef, subPath) ?? rootDef;
|
|
144
|
+
process.stdout.write(formatHelp(nodeDef, result.command) + '\n');
|
|
145
|
+
process.exit(0);
|
|
146
|
+
}
|
|
147
|
+
if (result.action) {
|
|
148
|
+
try {
|
|
149
|
+
await result.action(result);
|
|
150
|
+
}
|
|
151
|
+
catch (e) {
|
|
152
|
+
logException(e);
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
export const program = new Command();
|
|
159
|
+
//# sourceMappingURL=Command.js.map
|