code-server
Version:
Run VS Code on a remote server.
3 lines (2 loc) • 6.22 kB
JavaScript
;var w=Object.create;var l=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var x=(s,a)=>{for(var e in a)l(s,e,{get:a[e],enumerable:!0})},v=(s,a,e,t)=>{if(a&&typeof a=="object"||typeof a=="function")for(let r of m(a))!R.call(s,r)&&r!==e&&l(s,r,{get:()=>a[r],enumerable:!(t=y(a,r))||t.enumerable});return s};var h=(s,a,e)=>(e=s!=null?w(E(s)):{},v(a||!s||!s.__esModule?l(e,"default",{value:s,enumerable:!0}):e,s)),k=s=>v(l({},"__esModule",{value:!0}),s);var M={};x(M,{activate:()=>_});module.exports=k(M);var o=h(require("vscode")),f=h(require("util")),S=require("crypto"),A="listening on.* (https?://\\S+|[0-9]+)",T="http://localhost:%s",C="%s",P="${workspaceFolder}",F=/(?:\x1b\[|\x9b)[=?>!]?[\d;:]*["$#'* ]?[a-zA-Z@^`{}|~]/,W=/(?:\x1b\]|\x9d).*?(?:\x1b\\|\x07|\x9c)/,I=/\x1b(?:[ #%\(\)\*\+\-\.\/]?[a-zA-Z0-9\|}~@])/,O=new RegExp("(?:"+[F.source,W.source,I.source].join("|")+")","g");function U(s){return s&&(s=s.replace(O,"")),s}var b=class{_fired=!1;get hasFired(){return this._fired}fire(){this._fired=!0}},g=class s extends o.Disposable{constructor(e){super(()=>this.internalDispose());this.session=e;e.parentSession?this.trigger=s.start(e.parentSession)?.trigger??new b:this.trigger=new b,this.regexp=new RegExp(e.configuration.serverReadyAction.pattern||A,"i")}static detectors=new Map;static terminalDataListener;stoppedEmitter=new o.EventEmitter;onDidSessionStop=this.stoppedEmitter.event;disposables=new Set([]);trigger;shellPid;regexp;static start(e){if(e.configuration.serverReadyAction){let t=s.detectors.get(e);return t||(t=new s(e),s.detectors.set(e,t)),t}}static stop(e){let t=s.detectors.get(e);t&&(s.detectors.delete(e),t.sessionStopped(),t.dispose())}static rememberShellPid(e,t){let r=s.detectors.get(e);r&&(r.shellPid=t)}static async startListeningTerminalData(){this.terminalDataListener||(this.terminalDataListener=o.window.onDidWriteTerminalData(async e=>{let t=await e.terminal.processId,r=U(e.data);for(let[,i]of this.detectors)if(i.shellPid===t){i.detectPattern(r);return}for(let[,i]of this.detectors)if(i.detectPattern(r))return}))}internalDispose(){this.disposables.forEach(e=>e.dispose()),this.disposables.clear()}sessionStopped(){this.stoppedEmitter.fire()}detectPattern(e){if(!this.trigger.hasFired){let t=this.regexp.exec(e);if(t&&t.length>=1)return this.openExternalWithString(this.session,t.length>1?t[1]:""),this.trigger.fire(),!0}return!1}openExternalWithString(e,t){let r=e.configuration.serverReadyAction,i;if(t===""){let n=r.uriFormat||"";if(n.indexOf("%s")>=0){let d=o.l10n.t("Format uri ('{0}') uses a substitution placeholder but pattern did not capture anything.",n);o.window.showErrorMessage(d,{modal:!0}).then(c=>{});return}i=n}else{let n=r.uriFormat||(/^[0-9]+$/.test(t)?T:C);if(n.split("%s").length!==2){let c=o.l10n.t("Format uri ('{0}') must contain exactly one substitution placeholder.",n);o.window.showErrorMessage(c,{modal:!0}).then(u=>{});return}i=f.format(n,t)}this.openExternalWithUri(e,i)}async openExternalWithUri(e,t){let r=e.configuration.serverReadyAction;switch(r.action||"openExternally"){case"openExternally":await o.env.openExternal(o.Uri.parse(t));break;case"debugWithChrome":await this.debugWithBrowser("pwa-chrome",e,t);break;case"debugWithEdge":await this.debugWithBrowser("pwa-msedge",e,t);break;case"startDebugging":r.config?await this.startDebugSession(e,r.config.name,r.config):await this.startDebugSession(e,r.name||"unspecified");break;default:break}}async debugWithBrowser(e,t,r){if(!t.configuration.serverReadyAction.killOnServerStop){await this.startBrowserDebugSession(e,t,r);return}let n=(0,S.randomUUID)(),d=new o.CancellationTokenSource,c=this.catchStartedDebugSession(D=>D.configuration._debugServerReadySessionId===n,d.token);if(!await this.startBrowserDebugSession(e,t,r,n)){d.cancel(),d.dispose();return}let u=await c;if(d.dispose(),!u)return;let p=this.onDidSessionStop(async()=>{p.dispose(),this.disposables.delete(p),await o.debug.stopDebugging(u)});this.disposables.add(p)}startBrowserDebugSession(e,t,r,i){return o.debug.startDebugging(t.workspaceFolder,{type:e,name:"Browser Debug",request:"launch",url:r,webRoot:t.configuration.serverReadyAction.webRoot||P,_debugServerReadySessionId:i})}async startDebugSession(e,t,r){if(!e.configuration.serverReadyAction.killOnServerStop){await o.debug.startDebugging(e.workspaceFolder,r??t);return}let n=new o.CancellationTokenSource,d=this.catchStartedDebugSession(p=>p.name===t,n.token);if(!await o.debug.startDebugging(e.workspaceFolder,r??t)){n.cancel(),n.dispose();return}let c=await d;if(n.dispose(),!c)return;let u=this.onDidSessionStop(async()=>{u.dispose(),this.disposables.delete(u),await o.debug.stopDebugging(c)});this.disposables.add(u)}catchStartedDebugSession(e,t){return new Promise(r=>{let i=c=>{d.dispose(),n.dispose(),this.disposables.delete(d),this.disposables.delete(n),r(c)},n=t.onCancellationRequested(i),d=o.debug.onDidStartDebugSession(c=>{e(c)&&i(c)});this.disposables.add(d),this.disposables.add(n)})}};function _(s){s.subscriptions.push(o.debug.onDidStartDebugSession(e=>{e.configuration.serverReadyAction&&g.start(e)&&g.startListeningTerminalData()})),s.subscriptions.push(o.debug.onDidTerminateDebugSession(e=>{g.stop(e)}));let a=new Set;s.subscriptions.push(o.debug.registerDebugConfigurationProvider("*",{resolveDebugConfigurationWithSubstitutedVariables(e,t){return t.type&&t.serverReadyAction&&(a.has(t.type)||(a.add(t.type),L(s,t.type))),t}}))}function L(s,a){s.subscriptions.push(o.debug.registerDebugAdapterTrackerFactory(a,{createDebugAdapterTracker(e){let t=g.start(e);if(t){let r;return{onDidSendMessage:i=>{if(i.type==="event"&&i.event==="output"&&i.body)switch(i.body.category){case"console":case"stderr":case"stdout":i.body.output&&t.detectPattern(i.body.output);break;default:break}i.type==="request"&&i.command==="runInTerminal"&&i.arguments&&i.arguments.kind==="integrated"&&(r=i.seq)},onWillReceiveMessage:i=>{r&&i.type==="response"&&i.command==="runInTerminal"&&i.body&&r===i.request_seq&&(r=void 0,g.rememberShellPid(e,i.body.shellProcessId))}}}}}))}0&&(module.exports={activate});
//# sourceMappingURL=extension.js.map