@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 5.97 kB
JavaScript
import*as Common from"../../core/common/common.js";import*as Host from"../../core/host/host.js";import*as Diff from"../../third_party/diff/diff.js";import*as FormatterModule from"../formatter/formatter.js";import*as Persistence from"../persistence/persistence.js";import*as Workspace from"../workspace/workspace.js";export class WorkspaceDiffImpl extends Common.ObjectWrapper.ObjectWrapper{uiSourceCodeDiffs;loadingUISourceCodes;modifiedUISourceCodesInternal;constructor(e){super(),this.uiSourceCodeDiffs=new WeakMap,this.loadingUISourceCodes=new Map,this.modifiedUISourceCodesInternal=new Set,e.addEventListener(Workspace.Workspace.Events.WorkingCopyChanged,this.uiSourceCodeChanged,this),e.addEventListener(Workspace.Workspace.Events.WorkingCopyCommitted,this.uiSourceCodeChanged,this),e.addEventListener(Workspace.Workspace.Events.UISourceCodeAdded,this.uiSourceCodeAdded,this),e.addEventListener(Workspace.Workspace.Events.UISourceCodeRemoved,this.uiSourceCodeRemoved,this),e.addEventListener(Workspace.Workspace.Events.ProjectRemoved,this.projectRemoved,this),e.uiSourceCodes().forEach(this.updateModifiedState.bind(this))}requestDiff(e,o){return this.uiSourceCodeDiff(e).requestDiff(o)}subscribeToDiffChange(e,o,t){this.uiSourceCodeDiff(e).addEventListener(UISourceCodeDiffEvents.DiffChanged,o,t)}unsubscribeFromDiffChange(e,o,t){this.uiSourceCodeDiff(e).removeEventListener(UISourceCodeDiffEvents.DiffChanged,o,t)}modifiedUISourceCodes(){return Array.from(this.modifiedUISourceCodesInternal)}isUISourceCodeModified(e){return this.modifiedUISourceCodesInternal.has(e)||this.loadingUISourceCodes.has(e)}uiSourceCodeDiff(e){let o=this.uiSourceCodeDiffs.get(e);return o||(o=new UISourceCodeDiff(e),this.uiSourceCodeDiffs.set(e,o)),o}uiSourceCodeChanged(e){const o=e.data.uiSourceCode;this.updateModifiedState(o)}uiSourceCodeAdded(e){const o=e.data;this.updateModifiedState(o)}uiSourceCodeRemoved(e){const o=e.data;this.removeUISourceCode(o)}projectRemoved(e){const o=e.data;for(const e of o.uiSourceCodes())this.removeUISourceCode(e)}removeUISourceCode(e){this.loadingUISourceCodes.delete(e);const o=this.uiSourceCodeDiffs.get(e);o&&(o.dispose=!0),this.markAsUnmodified(e)}markAsUnmodified(e){this.uiSourceCodeProcessedForTest(),this.modifiedUISourceCodesInternal.delete(e)&&this.dispatchEventToListeners("ModifiedStatusChanged",{uiSourceCode:e,isModified:!1})}markAsModified(e){this.uiSourceCodeProcessedForTest(),this.modifiedUISourceCodesInternal.has(e)||(this.modifiedUISourceCodesInternal.add(e),this.dispatchEventToListeners("ModifiedStatusChanged",{uiSourceCode:e,isModified:!0}))}uiSourceCodeProcessedForTest(){}async updateModifiedState(e){if(this.loadingUISourceCodes.delete(e),e.project().type()!==Workspace.Workspace.projectTypes.Network)return void this.markAsUnmodified(e);if(e.isDirty())return void this.markAsModified(e);if(!e.hasCommits())return void this.markAsUnmodified(e);const o=Promise.all([this.requestOriginalContentForUISourceCode(e),e.requestContent().then((e=>e.content))]);this.loadingUISourceCodes.set(e,o);const t=await o;this.loadingUISourceCodes.get(e)===o&&(this.loadingUISourceCodes.delete(e),null!==t[0]&&null!==t[1]&&t[0]!==t[1]?this.markAsModified(e):this.markAsUnmodified(e))}requestOriginalContentForUISourceCode(e){return this.uiSourceCodeDiff(e).originalContent()}revertToOriginal(e){return Host.userMetrics.actionTaken(Host.UserMetrics.Action.RevisionApplied),this.requestOriginalContentForUISourceCode(e).then((function(o){"string"==typeof o&&e.addRevision(o)}))}}export class UISourceCodeDiff extends Common.ObjectWrapper.ObjectWrapper{uiSourceCode;requestDiffPromise;pendingChanges;dispose;constructor(e){super(),this.uiSourceCode=e,e.addEventListener(Workspace.UISourceCode.Events.WorkingCopyChanged,this.uiSourceCodeChanged,this),e.addEventListener(Workspace.UISourceCode.Events.WorkingCopyCommitted,this.uiSourceCodeChanged,this),this.requestDiffPromise=null,this.pendingChanges=null,this.dispose=!1}uiSourceCodeChanged(){this.pendingChanges&&(clearTimeout(this.pendingChanges),this.pendingChanges=null),this.requestDiffPromise=null;const e=this.uiSourceCode.content(),o=!e||e.length<65536?0:UpdateTimeout;this.pendingChanges=window.setTimeout(function(){if(this.dispose)return;this.dispatchEventToListeners(UISourceCodeDiffEvents.DiffChanged),this.pendingChanges=null}.bind(this),o)}requestDiff(e){return this.requestDiffPromise||(this.requestDiffPromise=this.innerRequestDiff(e)),this.requestDiffPromise}async originalContent(){const e=Persistence.NetworkPersistenceManager.NetworkPersistenceManager.instance().originalContentForUISourceCode(this.uiSourceCode);if(e)return e;const o=await this.uiSourceCode.project().requestFileContent(this.uiSourceCode);return o.content||"error"in o&&o.error||""}async innerRequestDiff({shouldFormatDiff:e}){if(this.dispose)return null;let o=await this.originalContent();if(null===o)return null;if(o.length>1048576)return null;if(this.dispose)return null;let t,i=this.uiSourceCode.workingCopy();if(i||this.uiSourceCode.contentLoaded()||(i=(await this.uiSourceCode.requestContent()).content),i.length>1048576)return null;if(this.dispose)return null;if(null===i||null===o)return null;if(e){o=(await FormatterModule.ScriptFormatter.format(this.uiSourceCode.contentType(),this.uiSourceCode.mimeType(),o)).formattedContent;const e=await FormatterModule.ScriptFormatter.format(this.uiSourceCode.contentType(),this.uiSourceCode.mimeType(),i);i=e.formattedContent,t=e.formattedMapping}const r=/\r\n?|\n/;return{diff:Diff.Diff.DiffWrapper.lineDiff(o.split(r),i.split(r)),formattedCurrentMapping:t}}}export var UISourceCodeDiffEvents;!function(e){e.DiffChanged="DiffChanged"}(UISourceCodeDiffEvents||(UISourceCodeDiffEvents={}));let _instance=null;export function workspaceDiff(){return _instance||(_instance=new WorkspaceDiffImpl(Workspace.Workspace.WorkspaceImpl.instance())),_instance}export class DiffUILocation{uiSourceCode;constructor(e){this.uiSourceCode=e}}export const UpdateTimeout=200;