UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 4.69 kB
import*as Common from"../../core/common/common.js";import*as i18n from"../../core/i18n/i18n.js";import*as Platform from"../../core/platform/platform.js";import*as SDK from"../../core/sdk/sdk.js";import*as Persistence from"../../models/persistence/persistence.js";import*as UI from"../../ui/legacy/legacy.js";import*as Workspace from"../../models/workspace/workspace.js";const UIStrings={scriptSnippet:"Script snippet #{PH1}",linkedTo:"Linked to {PH1}"},str_=i18n.i18n.registerUIStrings("panels/snippets/ScriptSnippetFileSystem.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);function escapeSnippetName(e){return Common.ParsedURL.ParsedURL.rawPathToEncodedPathString(e)}function unescapeSnippetName(e){return Common.ParsedURL.ParsedURL.encodedPathToRawPathString(e)}export class SnippetFileSystem extends Persistence.PlatformFileSystem.PlatformFileSystem{lastSnippetIdentifierSetting;snippetsSetting;constructor(){super("snippet://","snippets"),this.lastSnippetIdentifierSetting=Common.Settings.Settings.instance().createSetting("scriptSnippets_lastIdentifier",0),this.snippetsSetting=Common.Settings.Settings.instance().createSetting("scriptSnippets",[])}initialFilePaths(){return this.snippetsSetting.get().map((e=>escapeSnippetName(e.name)))}async createFile(e,t){const n=this.lastSnippetIdentifierSetting.get()+1;this.lastSnippetIdentifierSetting.set(n);const s=i18nString(UIStrings.scriptSnippet,{PH1:n}),i=this.snippetsSetting.get();return i.push({name:s,content:""}),this.snippetsSetting.set(i),escapeSnippetName(s)}async deleteFile(e){const t=unescapeSnippetName(Common.ParsedURL.ParsedURL.substring(e,1)),n=this.snippetsSetting.get(),s=n.filter((e=>e.name!==t));return n.length!==s.length&&(this.snippetsSetting.set(s),!0)}async requestFileContent(e){const t=unescapeSnippetName(Common.ParsedURL.ParsedURL.substring(e,1)),n=this.snippetsSetting.get().find((e=>e.name===t));return n?{content:n.content,isEncoded:!1}:{content:null,isEncoded:!1,error:`A snippet with name '${t}' was not found`}}async setFileContent(e,t,n){const s=unescapeSnippetName(Common.ParsedURL.ParsedURL.substring(e,1)),i=this.snippetsSetting.get(),o=i.find((e=>e.name===s));return!!o&&(o.content=t,this.snippetsSetting.set(i),!0)}renameFile(e,t,n){const s=unescapeSnippetName(Common.ParsedURL.ParsedURL.substring(e,1)),i=this.snippetsSetting.get(),o=i.find((e=>e.name===s));t=Common.ParsedURL.ParsedURL.trim(t),o&&0!==t.length&&!i.find((e=>e.name===t))?(o.name=t,this.snippetsSetting.set(i),n(!0,t)):n(!1)}async searchInPath(e,t){const n=new RegExp(Platform.StringUtilities.escapeForRegExp(e),"i");return this.snippetsSetting.get().filter((e=>e.content.match(n))).map((e=>`snippet:///${escapeSnippetName(e.name)}`))}mimeFromPath(e){return"text/javascript"}contentType(e){return Common.ResourceType.resourceTypes.Script}tooltipForURL(e){return i18nString(UIStrings.linkedTo,{PH1:unescapeSnippetName(Common.ParsedURL.ParsedURL.sliceUrlToEncodedPathString(e,this.path().length))})}supportsAutomapping(){return!0}}export async function evaluateScriptSnippet(e){if(!e.url().startsWith("snippet://"))return;const t=UI.Context.Context.instance().flavor(SDK.RuntimeModel.ExecutionContext);if(!t)return;const n=t.runtimeModel,s=t.target().model(SDK.ConsoleModel.ConsoleModel);await e.requestContent(),e.commitWorkingCopy();const i=e.workingCopy();Common.Console.Console.instance().show();const o=e.url(),r=await t.evaluate({expression:`${i}\n//# sourceURL=${o}`,objectGroup:"console",silent:!1,includeCommandLineAPI:!0,returnByValue:!1,generatePreview:!0,replMode:!0},!0,!0);if("exceptionDetails"in r&&r.exceptionDetails)return void s?.addMessage(SDK.ConsoleModel.ConsoleMessage.fromException(n,r.exceptionDetails,void 0,void 0,o));if(!("object"in r)||!r.object)return;const p=t.debuggerModel.scriptsForSourceURL(o);if(p.length<1)return;const a=p[p.length-1].scriptId,c={type:SDK.ConsoleModel.FrontendMessageType.Result,url:o,parameters:[r.object],executionContextId:t.id,scriptId:a};s?.addMessage(new SDK.ConsoleModel.ConsoleMessage(n,"javascript","info","",c))}export function isSnippetsUISourceCode(e){return e.url().startsWith("snippet://")}export function isSnippetsProject(e){return e.type()===Workspace.Workspace.projectTypes.FileSystem&&"snippets"===Persistence.FileSystemWorkspaceBinding.FileSystemWorkspaceBinding.fileSystemType(e)}export function findSnippetsProject(){const e=Workspace.Workspace.WorkspaceImpl.instance().projectsForType(Workspace.Workspace.projectTypes.FileSystem).find((e=>"snippets"===Persistence.FileSystemWorkspaceBinding.FileSystemWorkspaceBinding.fileSystemType(e)));if(!e)throw new Error("Unable to find workspace project for the snippets file system");return e}