UNPKG

@minecraft/creator-tools

Version:

Minecraft Creator Tools command line and libraries.

277 lines (275 loc) 13.1 kB
"use strict"; // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", { value: true }); exports.AppServiceProxyCommands = void 0; const Utilities_1 = require("./../core/Utilities"); const Log_1 = require("./../core/Log"); const ste_events_1 = require("ste-events"); const CartoApp_1 = require("../app/CartoApp"); var AppServiceProxyCommands; (function (AppServiceProxyCommands) { AppServiceProxyCommands["fsExists"] = "fsExists"; AppServiceProxyCommands["fsFolderExists"] = "fsFolderExists"; AppServiceProxyCommands["fsMkdir"] = "fsMkdir"; AppServiceProxyCommands["fsReadUtf8File"] = "fsReadUtf8File"; AppServiceProxyCommands["fsReadFile"] = "fsReadFile"; AppServiceProxyCommands["fsWriteUtf8File"] = "fsWriteUtf8File"; AppServiceProxyCommands["fsWriteFile"] = "fsWriteFile"; AppServiceProxyCommands["fsReaddir"] = "fsReaddir"; AppServiceProxyCommands["fsStat"] = "fsStat"; AppServiceProxyCommands["getDirname"] = "getDirname"; AppServiceProxyCommands["getDedicatedServerStatus"] = "getDedicatedServerStatus"; AppServiceProxyCommands["getDedicatedServerProjectDeployDir"] = "getDedicatedServerProjectDir"; AppServiceProxyCommands["getDedicatedServerWorldDeployDir"] = "getDedicatedServerWorldDir"; AppServiceProxyCommands["getMinecraftGameProjectDeployDir"] = "getMinecraftGameProjectDeployDir"; AppServiceProxyCommands["getMinecraftGameWorldDeployDir"] = "getMinecraftGameWorldDeployDir"; AppServiceProxyCommands["getIsDev"] = "getIsDev"; AppServiceProxyCommands["openFolder"] = "openFolder"; AppServiceProxyCommands["shellOpenPath"] = "shellOpenPath"; AppServiceProxyCommands["shellOpenFolderInExplorer"] = "shellOpenFolderInExplorer"; AppServiceProxyCommands["webSocketCommand"] = "webSocketCommand"; AppServiceProxyCommands["dedicatedServerCommand"] = "dedicatedServerCommand"; AppServiceProxyCommands["startWebSocketServer"] = "startWebSocketServer"; AppServiceProxyCommands["stopWebSocketServer"] = "stopWebSocketServer"; AppServiceProxyCommands["startDedicatedServer"] = "startDedicatedServer"; AppServiceProxyCommands["stopDedicatedServer"] = "stopDedicatedServer"; AppServiceProxyCommands["shellRecycleItem"] = "shellRecycleItem"; AppServiceProxyCommands["reloadMct"] = "reloadMct"; AppServiceProxyCommands["minecraftShell"] = "minecraftShell"; AppServiceProxyCommands["windowClose"] = "windowClose"; AppServiceProxyCommands["windowRestore"] = "windowRestore"; AppServiceProxyCommands["windowMove"] = "windowMove"; AppServiceProxyCommands["logToConsole"] = "logToConsole"; AppServiceProxyCommands["windowMinimize"] = "windowMinimize"; AppServiceProxyCommands["windowMaximize"] = "windowMaximize"; AppServiceProxyCommands["windowUpdate"] = "windowUpdate"; AppServiceProxyCommands["windowLeftSide"] = "windowLeftSide"; AppServiceProxyCommands["windowRightSide"] = "windowRightSide"; AppServiceProxyCommands["getWindowState"] = "getWindowState"; AppServiceProxyCommands["appGetPath"] = "appGetPath"; AppServiceProxyCommands["updateIAgree"] = "updateIAgree"; AppServiceProxyCommands["convertFile"] = "convertFile"; })(AppServiceProxyCommands = exports.AppServiceProxyCommands || (exports.AppServiceProxyCommands = {})); class AppServiceProxy { static get onMessage() { return AppServiceProxy._onMessage.asEvent(); } static get hasAppService() { return AppServiceProxy._api !== undefined; } static get hasAppServiceOrDebug() { return AppServiceProxy._api !== undefined || Utilities_1.default.isDebug; } static get hasAppServiceOrSim() { return AppServiceProxy._api !== undefined || Utilities_1.default.isAppSim; } static init() { // @ts-ignore if (typeof window !== "undefined") { // @ts-ignore AppServiceProxy._api = window.api; if (AppServiceProxy._api && CartoApp_1.default.hostType !== CartoApp_1.HostType.vsCodeMainWeb && CartoApp_1.default.hostType !== CartoApp_1.HostType.vsCodeWebWeb) { CartoApp_1.default.hostType = CartoApp_1.HostType.electronWeb; } } if (AppServiceProxy._api !== undefined) { AppServiceProxy._api.receive("appsvc", AppServiceProxy._handleNewMessage); Log_1.default.onItemAdded.subscribe(AppServiceProxy._handleLog); } } static _handleLog(log, item) { AppServiceProxy.logToConsole(item.message); } static async logToConsole(message) { await AppServiceProxy.sendAsync(AppServiceProxyCommands.logToConsole, message); } static send(commandName, data) { if (AppServiceProxy._api === undefined) { if (Utilities_1.default.isAppSim) { Log_1.default.debugAlert("Command: " + commandName + " Data: " + data); return; } throw new Error("Not an Electron API"); } if (commandName === AppServiceProxyCommands.fsWriteFile) { let content = data.content; if (content instanceof Uint8Array) { content = Utilities_1.default.uint8ArrayToBase64(content); } else if (data instanceof ArrayBuffer) { content = Utilities_1.default.arrayBufferToBase64(content); } else if (data instanceof Uint16Array || data instanceof Uint32Array || data instanceof Uint8ClampedArray || data instanceof BigUint64Array) { Log_1.default.fail("Unsupported binary type encountered." + data); } data.content = content; } let result = undefined; try { result = AppServiceProxy._api.send("appweb", commandName, data); } catch (e) { let dataStr = data; if (typeof data === "object") { dataStr = JSON.stringify(data); } throw new Error("Error running command " + commandName + ", data: " + dataStr + ", error: " + e); } if (commandName === AppServiceProxyCommands.fsReadFile) { if (result === undefined || result.length === 0) { return undefined; } return Utilities_1.default.base64ToArrayBuffer(result); } return result; } static sendAsyncBinary(commandName, data) { const promise = new Promise(AppServiceProxy._arrayBufferPromiseHandler); if (AppServiceProxy._api === undefined) { if (Utilities_1.default.isAppSim) { Log_1.default.debugAlert("Command: " + commandName + " Data: " + data); return promise; } throw new Error("Not an Electron API"); } const position = AppServiceProxy._pendingArrayBufferPromiseResolvers.length - 1; const commandStr = "bsync" + commandName + "|" + position; // Log.verbose("Sending async command '" + commandStr + "' + data: " + data); AppServiceProxy._api.send("appweb", commandStr, data); return promise; } static sendBinaryAsync(commandName, data) { const promise = new Promise(AppServiceProxy._stringPromiseHandler); if (AppServiceProxy._api === undefined) { if (Utilities_1.default.isAppSim) { Log_1.default.debugAlert("Command: " + commandName + " Data: " + data); return promise; } throw new Error("Not an Electron API"); } let content = data.content; if (content instanceof Uint8Array) { content = Utilities_1.default.uint8ArrayToBase64(content); } else if (data instanceof ArrayBuffer) { content = Utilities_1.default.arrayBufferToBase64(content); } else if (data instanceof Uint16Array || data instanceof Uint32Array || data instanceof Uint8ClampedArray || data instanceof BigUint64Array) { Log_1.default.fail("Unsupported binary type encountered." + data); } data.content = content; const position = AppServiceProxy._pendingStringPromiseResolvers.length - 1; const commandStr = "async" + commandName + "|" + position; // Log.verbose("Sending async command '" + commandStr + "' + data: " + data); AppServiceProxy._api.send("appweb", commandStr, data); return promise; } static sendAsync(commandName, data, ignoreInSim) { const promise = new Promise(AppServiceProxy._stringPromiseHandler); if (AppServiceProxy._api === undefined) { if (Utilities_1.default.isAppSim) { if (!ignoreInSim) { Log_1.default.debugAlert("Command: " + commandName + " Data: " + data); } return promise; } throw new Error("Not an Electron API"); } const position = AppServiceProxy._pendingStringPromiseResolvers.length - 1; const commandStr = "async" + commandName + "|" + position; // Do not uncomment this as it'll cause a loop. // Log.verbose("Sending async command '" + commandStr + "' + data: " + data); AppServiceProxy._api.send("appweb", commandStr, data); return promise; } static sendHost(serviceName, commandName, data) { if (AppServiceProxy._api === undefined) { throw new Error("Not an Electron API"); } if (typeof data === "object") { data = JSON.stringify(data); } else if (typeof data !== "string") { data = data.toString(); } AppServiceProxy._api.send(serviceName, commandName, data); } static openLinkExternal(url) { try { // @ts-ignore if (typeof window !== "undefined") { // @ts-ignore window.open(url, "_blank"); } } catch (e) { } } static _arrayBufferPromiseHandler(resolve, reject) { const position = AppServiceProxy._pendingArrayBufferPromiseResolvers.length; AppServiceProxy._pendingArrayBufferPromiseResolvers[position] = resolve; AppServiceProxy._pendingStringPromiseRejecters[position] = reject; } static _stringPromiseHandler(resolve, reject) { const position = AppServiceProxy._pendingStringPromiseResolvers.length; AppServiceProxy._pendingStringPromiseResolvers[position] = resolve; AppServiceProxy._pendingStringPromiseRejecters[position] = reject; } static _handleNewMessage(args) { if (args !== null && args.length > 0) { if (args.startsWith("async")) { const argSplit = args.split("|"); if (argSplit.length > 2) { const index = parseInt(argSplit[1]); if (index >= 0) { const promiseResolver = AppServiceProxy._pendingStringPromiseResolvers[index]; // NOTE: Since logging goes from browser to client and then async is complete, // DO NOT log inside of here or otherwise you may cause a loop. let val = argSplit[2]; if (val === "<undefined>") { val = undefined; } promiseResolver(val); } } } else if (args.startsWith("bsync")) { const argSplit = args.split("|"); if (argSplit.length > 2) { const index = parseInt(argSplit[1]); if (index >= 0) { const promiseResolver = AppServiceProxy._pendingArrayBufferPromiseResolvers[index]; // NOTE: Since logging goes from browser to client and then async is complete, // DO NOT log inside of here or otherwise you may cause a loop. let val = undefined; if (argSplit[2] !== "<undefined>") { val = Utilities_1.default.base64ToArrayBuffer(argSplit[2]); } promiseResolver(val); } } } else { const firstPipe = args.indexOf("|"); if (firstPipe >= 0) { AppServiceProxy._onMessage.dispatch(args.substring(0, firstPipe), args.substring(firstPipe + 1, args.length)); } } } } } exports.default = AppServiceProxy; AppServiceProxy._pendingStringPromiseResolvers = []; AppServiceProxy._pendingArrayBufferPromiseResolvers = []; AppServiceProxy._pendingStringPromiseRejecters = []; AppServiceProxy._pendingArrayPromiseRejecters = []; AppServiceProxy._onMessage = new ste_events_1.EventDispatcher(); //# sourceMappingURL=../maps/core/AppServiceProxy.js.map