rxjs-leak-finder 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/HOW_IT_WORKS.md +214 -0
- package/LICENSE +21 -0
- package/README.md +190 -0
- package/dist/cli/dashboard-server.d.ts +11 -0
- package/dist/cli/dashboard-server.js +241 -0
- package/dist/cli/dashboard-server.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.js +67 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/dashboard/assets/index-BqI1esY6.js +350 -0
- package/dist/dashboard/assets/mappings-Dhu04MXZ.wasm +0 -0
- package/dist/dashboard/index.html +25 -0
- package/dist/runtime/enable.d.ts +29 -0
- package/dist/runtime/enable.js +60 -0
- package/dist/runtime/enable.js.map +1 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.js +2 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/patch.d.ts +11 -0
- package/dist/runtime/patch.js +42 -0
- package/dist/runtime/patch.js.map +1 -0
- package/dist/runtime/recorder.d.ts +15 -0
- package/dist/runtime/recorder.js +94 -0
- package/dist/runtime/recorder.js.map +1 -0
- package/dist/runtime/route-tracker.d.ts +8 -0
- package/dist/runtime/route-tracker.js +130 -0
- package/dist/runtime/route-tracker.js.map +1 -0
- package/dist/runtime/transport.d.ts +12 -0
- package/dist/runtime/transport.js +85 -0
- package/dist/runtime/transport.js.map +1 -0
- package/dist/runtime/types.d.ts +96 -0
- package/dist/runtime/types.js +7 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/widget.d.ts +11 -0
- package/dist/runtime/widget.js +61 -0
- package/dist/runtime/widget.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard-server.js","sourceRoot":"","sources":["../../src/cli/dashboard-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { startServer } from './dashboard-server.js';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { existsSync } from 'node:fs';
|
|
6
|
+
const args = process.argv.slice(2);
|
|
7
|
+
const command = args[0];
|
|
8
|
+
if (command === 'dashboard') {
|
|
9
|
+
const portArg = args.find(a => a.startsWith('--port='))?.slice('--port='.length);
|
|
10
|
+
const port = portArg ? Number(portArg) : 7654;
|
|
11
|
+
const noOpen = args.includes('--no-open');
|
|
12
|
+
const cwdArg = args.find(a => a.startsWith('--cwd='))?.slice('--cwd='.length);
|
|
13
|
+
const cwd = cwdArg ? resolve(cwdArg) : process.cwd();
|
|
14
|
+
void runDashboard({ port, noOpen, cwd });
|
|
15
|
+
}
|
|
16
|
+
else if (command === '--help' || command === '-h' || !command) {
|
|
17
|
+
printHelp();
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
console.error(`Unknown command: ${command}`);
|
|
21
|
+
printHelp();
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
async function runDashboard({ port, noOpen, cwd }) {
|
|
25
|
+
const here = fileURLToPath(import.meta.url);
|
|
26
|
+
const staticDir = resolve(here, '../../dashboard');
|
|
27
|
+
const handle = await startServer({ port, cwd, staticDir: existsSync(staticDir) ? staticDir : undefined });
|
|
28
|
+
console.log(`rxjs-leak-finder dashboard listening at ${handle.url}`);
|
|
29
|
+
console.log(`Reports will be saved to ${cwd}/.rld/`);
|
|
30
|
+
if (!noOpen) {
|
|
31
|
+
await openInBrowser(handle.url);
|
|
32
|
+
}
|
|
33
|
+
// Keep alive
|
|
34
|
+
process.on('SIGINT', async () => {
|
|
35
|
+
console.log('\nShutting down…');
|
|
36
|
+
await handle.close();
|
|
37
|
+
process.exit(0);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
async function openInBrowser(url) {
|
|
41
|
+
const { spawn } = await import('node:child_process');
|
|
42
|
+
const cmd = process.platform === 'darwin' ? 'open'
|
|
43
|
+
: process.platform === 'win32' ? 'start'
|
|
44
|
+
: 'xdg-open';
|
|
45
|
+
spawn(cmd, [url], { stdio: 'ignore', detached: true }).unref();
|
|
46
|
+
}
|
|
47
|
+
function printHelp() {
|
|
48
|
+
console.log(`
|
|
49
|
+
rxjs-leak-finder — local dashboard for RxJS subscription leaks
|
|
50
|
+
|
|
51
|
+
Usage:
|
|
52
|
+
npx rxjs-leak-finder dashboard [options]
|
|
53
|
+
|
|
54
|
+
Options:
|
|
55
|
+
--port=<n> Port to listen on (default 7654)
|
|
56
|
+
--cwd=<path> Where to write .rld/ session files (default cwd)
|
|
57
|
+
--no-open Don't auto-open the browser
|
|
58
|
+
--help, -h Show this help
|
|
59
|
+
|
|
60
|
+
Environment:
|
|
61
|
+
RLD_EDITOR Editor launcher for "open in editor" links.
|
|
62
|
+
Recognized: code, cursor, idea, webstorm, pycharm,
|
|
63
|
+
phpstorm, goland, rubymine, subl, vim, nvim, emacs.
|
|
64
|
+
Defaults to 'code'.
|
|
65
|
+
`.trim());
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))n(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const i of r.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&n(i)}).observe(document,{childList:!0,subtree:!0});function t(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function n(s){if(s.ep)return;s.ep=!0;const r=t(s);fetch(s.href,r)}})();/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2019 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
5
|
+
*/const pe=globalThis,Me=pe.ShadowRoot&&(pe.ShadyCSS===void 0||pe.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,Ne=Symbol(),Ke=new WeakMap;let ct=class{constructor(e,t,n){if(this._$cssResult$=!0,n!==Ne)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const t=this.t;if(Me&&e===void 0){const n=t!==void 0&&t.length===1;n&&(e=Ke.get(t)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),n&&Ke.set(t,e))}return e}toString(){return this.cssText}};const Tt=o=>new ct(typeof o=="string"?o:o+"",void 0,Ne),w=(o,...e)=>{const t=o.length===1?o[0]:e.reduce((n,s,r)=>n+(i=>{if(i._$cssResult$===!0)return i.cssText;if(typeof i=="number")return i;throw Error("Value passed to 'css' function must be a 'css' function result: "+i+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(s)+o[r+1],o[0]);return new ct(t,o,Ne)},Ut=(o,e)=>{if(Me)o.adoptedStyleSheets=e.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const t of e){const n=document.createElement("style"),s=pe.litNonce;s!==void 0&&n.setAttribute("nonce",s),n.textContent=t.cssText,o.appendChild(n)}},Ve=Me?o=>o:o=>o instanceof CSSStyleSheet?(e=>{let t="";for(const n of e.cssRules)t+=n.cssText;return Tt(t)})(o):o;/**
|
|
6
|
+
* @license
|
|
7
|
+
* Copyright 2017 Google LLC
|
|
8
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
9
|
+
*/const{is:It,defineProperty:Ft,getOwnPropertyDescriptor:Dt,getOwnPropertyNames:zt,getOwnPropertySymbols:Bt,getPrototypeOf:Ht}=Object,C=globalThis,Je=C.trustedTypes,Wt=Je?Je.emptyScript:"",$e=C.reactiveElementPolyfillSupport,ee=(o,e)=>o,he={toAttribute(o,e){switch(e){case Boolean:o=o?Wt:null;break;case Object:case Array:o=o==null?o:JSON.stringify(o)}return o},fromAttribute(o,e){let t=o;switch(e){case Boolean:t=o!==null;break;case Number:t=o===null?null:Number(o);break;case Object:case Array:try{t=JSON.parse(o)}catch{t=null}}return t}},je=(o,e)=>!It(o,e),Qe={attribute:!0,type:String,converter:he,reflect:!1,useDefault:!1,hasChanged:je};Symbol.metadata??(Symbol.metadata=Symbol("metadata")),C.litPropertyMetadata??(C.litPropertyMetadata=new WeakMap);let M=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??(this.l=[])).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=Qe){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){const n=Symbol(),s=this.getPropertyDescriptor(e,n,t);s!==void 0&&Ft(this.prototype,e,s)}}static getPropertyDescriptor(e,t,n){const{get:s,set:r}=Dt(this.prototype,e)??{get(){return this[t]},set(i){this[t]=i}};return{get:s,set(i){const l=s==null?void 0:s.call(this);r==null||r.call(this,i),this.requestUpdate(e,l,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??Qe}static _$Ei(){if(this.hasOwnProperty(ee("elementProperties")))return;const e=Ht(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(ee("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(ee("properties"))){const t=this.properties,n=[...zt(t),...Bt(t)];for(const s of n)this.createProperty(s,t[s])}const e=this[Symbol.metadata];if(e!==null){const t=litPropertyMetadata.get(e);if(t!==void 0)for(const[n,s]of t)this.elementProperties.set(n,s)}this._$Eh=new Map;for(const[t,n]of this.elementProperties){const s=this._$Eu(t,n);s!==void 0&&this._$Eh.set(s,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const n=new Set(e.flat(1/0).reverse());for(const s of n)t.unshift(Ve(s))}else e!==void 0&&t.push(Ve(e));return t}static _$Eu(e,t){const n=t.attribute;return n===!1?void 0:typeof n=="string"?n:typeof e=="string"?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){var e;this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),(e=this.constructor.l)==null||e.forEach(t=>t(this))}addController(e){var t;(this._$EO??(this._$EO=new Set)).add(e),this.renderRoot!==void 0&&this.isConnected&&((t=e.hostConnected)==null||t.call(e))}removeController(e){var t;(t=this._$EO)==null||t.delete(e)}_$E_(){const e=new Map,t=this.constructor.elementProperties;for(const n of t.keys())this.hasOwnProperty(n)&&(e.set(n,this[n]),delete this[n]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return Ut(e,this.constructor.elementStyles),e}connectedCallback(){var e;this.renderRoot??(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(e=this._$EO)==null||e.forEach(t=>{var n;return(n=t.hostConnected)==null?void 0:n.call(t)})}enableUpdating(e){}disconnectedCallback(){var e;(e=this._$EO)==null||e.forEach(t=>{var n;return(n=t.hostDisconnected)==null?void 0:n.call(t)})}attributeChangedCallback(e,t,n){this._$AK(e,n)}_$ET(e,t){var r;const n=this.constructor.elementProperties.get(e),s=this.constructor._$Eu(e,n);if(s!==void 0&&n.reflect===!0){const i=(((r=n.converter)==null?void 0:r.toAttribute)!==void 0?n.converter:he).toAttribute(t,n.type);this._$Em=e,i==null?this.removeAttribute(s):this.setAttribute(s,i),this._$Em=null}}_$AK(e,t){var r,i;const n=this.constructor,s=n._$Eh.get(e);if(s!==void 0&&this._$Em!==s){const l=n.getPropertyOptions(s),a=typeof l.converter=="function"?{fromAttribute:l.converter}:((r=l.converter)==null?void 0:r.fromAttribute)!==void 0?l.converter:he;this._$Em=s;const c=a.fromAttribute(t,l.type);this[s]=c??((i=this._$Ej)==null?void 0:i.get(s))??c,this._$Em=null}}requestUpdate(e,t,n,s=!1,r){var i;if(e!==void 0){const l=this.constructor;if(s===!1&&(r=this[e]),n??(n=l.getPropertyOptions(e)),!((n.hasChanged??je)(r,t)||n.useDefault&&n.reflect&&r===((i=this._$Ej)==null?void 0:i.get(e))&&!this.hasAttribute(l._$Eu(e,n))))return;this.C(e,t,n)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(e,t,{useDefault:n,reflect:s,wrapped:r},i){n&&!(this._$Ej??(this._$Ej=new Map)).has(e)&&(this._$Ej.set(e,i??t??this[e]),r!==!0||i!==void 0)||(this._$AL.has(e)||(this.hasUpdated||n||(t=void 0),this._$AL.set(e,t)),s===!0&&this._$Em!==e&&(this._$Eq??(this._$Eq=new Set)).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var n;if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??(this.renderRoot=this.createRenderRoot()),this._$Ep){for(const[r,i]of this._$Ep)this[r]=i;this._$Ep=void 0}const s=this.constructor.elementProperties;if(s.size>0)for(const[r,i]of s){const{wrapped:l}=i,a=this[r];l!==!0||this._$AL.has(r)||a===void 0||this.C(r,void 0,i,a)}}let e=!1;const t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),(n=this._$EO)==null||n.forEach(s=>{var r;return(r=s.hostUpdate)==null?void 0:r.call(s)}),this.update(t)):this._$EM()}catch(s){throw e=!1,this._$EM(),s}e&&this._$AE(t)}willUpdate(e){}_$AE(e){var t;(t=this._$EO)==null||t.forEach(n=>{var s;return(s=n.hostUpdated)==null?void 0:s.call(n)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&(this._$Eq=this._$Eq.forEach(t=>this._$ET(t,this[t]))),this._$EM()}updated(e){}firstUpdated(e){}};M.elementStyles=[],M.shadowRootOptions={mode:"open"},M[ee("elementProperties")]=new Map,M[ee("finalized")]=new Map,$e==null||$e({ReactiveElement:M}),(C.reactiveElementVersions??(C.reactiveElementVersions=[])).push("2.1.2");/**
|
|
10
|
+
* @license
|
|
11
|
+
* Copyright 2017 Google LLC
|
|
12
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
13
|
+
*/const te=globalThis,Ze=o=>o,fe=te.trustedTypes,Xe=fe?fe.createPolicy("lit-html",{createHTML:o=>o}):void 0,ut="$lit$",S=`lit$${Math.random().toFixed(9).slice(2)}$`,dt="?"+S,qt=`<${dt}>`,L=document,se=()=>L.createComment(""),re=o=>o===null||typeof o!="object"&&typeof o!="function",Te=Array.isArray,Gt=o=>Te(o)||typeof(o==null?void 0:o[Symbol.iterator])=="function",we=`[
|
|
14
|
+
\f\r]`,J=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Ye=/-->/g,et=/>/g,O=RegExp(`>|${we}(?:([^\\s"'>=/]+)(${we}*=${we}*(?:[^
|
|
15
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),tt=/'/g,nt=/"/g,pt=/^(?:script|style|textarea|title)$/i,Kt=o=>(e,...t)=>({_$litType$:o,strings:e,values:t}),m=Kt(1),H=Symbol.for("lit-noChange"),_=Symbol.for("lit-nothing"),st=new WeakMap,R=L.createTreeWalker(L,129);function ht(o,e){if(!Te(o)||!o.hasOwnProperty("raw"))throw Error("invalid template strings array");return Xe!==void 0?Xe.createHTML(e):e}const Vt=(o,e)=>{const t=o.length-1,n=[];let s,r=e===2?"<svg>":e===3?"<math>":"",i=J;for(let l=0;l<t;l++){const a=o[l];let c,d,u=-1,p=0;for(;p<a.length&&(i.lastIndex=p,d=i.exec(a),d!==null);)p=i.lastIndex,i===J?d[1]==="!--"?i=Ye:d[1]!==void 0?i=et:d[2]!==void 0?(pt.test(d[2])&&(s=RegExp("</"+d[2],"g")),i=O):d[3]!==void 0&&(i=O):i===O?d[0]===">"?(i=s??J,u=-1):d[1]===void 0?u=-2:(u=i.lastIndex-d[2].length,c=d[1],i=d[3]===void 0?O:d[3]==='"'?nt:tt):i===nt||i===tt?i=O:i===Ye||i===et?i=J:(i=O,s=void 0);const f=i===O&&o[l+1].startsWith("/>")?" ":"";r+=i===J?a+qt:u>=0?(n.push(c),a.slice(0,u)+ut+a.slice(u)+S+f):a+S+(u===-2?l:f)}return[ht(o,r+(o[t]||"<?>")+(e===2?"</svg>":e===3?"</math>":"")),n]};class oe{constructor({strings:e,_$litType$:t},n){let s;this.parts=[];let r=0,i=0;const l=e.length-1,a=this.parts,[c,d]=Vt(e,t);if(this.el=oe.createElement(c,n),R.currentNode=this.el.content,t===2||t===3){const u=this.el.content.firstChild;u.replaceWith(...u.childNodes)}for(;(s=R.nextNode())!==null&&a.length<l;){if(s.nodeType===1){if(s.hasAttributes())for(const u of s.getAttributeNames())if(u.endsWith(ut)){const p=d[i++],f=s.getAttribute(u).split(S),k=/([.?@])?(.*)/.exec(p);a.push({type:1,index:r,name:k[2],strings:f,ctor:k[1]==="."?Qt:k[1]==="?"?Zt:k[1]==="@"?Xt:_e}),s.removeAttribute(u)}else u.startsWith(S)&&(a.push({type:6,index:r}),s.removeAttribute(u));if(pt.test(s.tagName)){const u=s.textContent.split(S),p=u.length-1;if(p>0){s.textContent=fe?fe.emptyScript:"";for(let f=0;f<p;f++)s.append(u[f],se()),R.nextNode(),a.push({type:2,index:++r});s.append(u[p],se())}}}else if(s.nodeType===8)if(s.data===dt)a.push({type:2,index:r});else{let u=-1;for(;(u=s.data.indexOf(S,u+1))!==-1;)a.push({type:7,index:r}),u+=S.length-1}r++}}static createElement(e,t){const n=L.createElement("template");return n.innerHTML=e,n}}function W(o,e,t=o,n){var i,l;if(e===H)return e;let s=n!==void 0?(i=t._$Co)==null?void 0:i[n]:t._$Cl;const r=re(e)?void 0:e._$litDirective$;return(s==null?void 0:s.constructor)!==r&&((l=s==null?void 0:s._$AO)==null||l.call(s,!1),r===void 0?s=void 0:(s=new r(o),s._$AT(o,t,n)),n!==void 0?(t._$Co??(t._$Co=[]))[n]=s:t._$Cl=s),s!==void 0&&(e=W(o,s._$AS(o,e.values),s,n)),e}class Jt{constructor(e,t){this._$AV=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(e){const{el:{content:t},parts:n}=this._$AD,s=((e==null?void 0:e.creationScope)??L).importNode(t,!0);R.currentNode=s;let r=R.nextNode(),i=0,l=0,a=n[0];for(;a!==void 0;){if(i===a.index){let c;a.type===2?c=new le(r,r.nextSibling,this,e):a.type===1?c=new a.ctor(r,a.name,a.strings,this,e):a.type===6&&(c=new Yt(r,this,e)),this._$AV.push(c),a=n[++l]}i!==(a==null?void 0:a.index)&&(r=R.nextNode(),i++)}return R.currentNode=L,s}p(e){let t=0;for(const n of this._$AV)n!==void 0&&(n.strings!==void 0?(n._$AI(e,n,t),t+=n.strings.length-2):n._$AI(e[t])),t++}}class le{get _$AU(){var e;return((e=this._$AM)==null?void 0:e._$AU)??this._$Cv}constructor(e,t,n,s){this.type=2,this._$AH=_,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=n,this.options=s,this._$Cv=(s==null?void 0:s.isConnected)??!0}get parentNode(){let e=this._$AA.parentNode;const t=this._$AM;return t!==void 0&&(e==null?void 0:e.nodeType)===11&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=W(this,e,t),re(e)?e===_||e==null||e===""?(this._$AH!==_&&this._$AR(),this._$AH=_):e!==this._$AH&&e!==H&&this._(e):e._$litType$!==void 0?this.$(e):e.nodeType!==void 0?this.T(e):Gt(e)?this.k(e):this._(e)}O(e){return this._$AA.parentNode.insertBefore(e,this._$AB)}T(e){this._$AH!==e&&(this._$AR(),this._$AH=this.O(e))}_(e){this._$AH!==_&&re(this._$AH)?this._$AA.nextSibling.data=e:this.T(L.createTextNode(e)),this._$AH=e}$(e){var r;const{values:t,_$litType$:n}=e,s=typeof n=="number"?this._$AC(e):(n.el===void 0&&(n.el=oe.createElement(ht(n.h,n.h[0]),this.options)),n);if(((r=this._$AH)==null?void 0:r._$AD)===s)this._$AH.p(t);else{const i=new Jt(s,this),l=i.u(this.options);i.p(t),this.T(l),this._$AH=i}}_$AC(e){let t=st.get(e.strings);return t===void 0&&st.set(e.strings,t=new oe(e)),t}k(e){Te(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let n,s=0;for(const r of e)s===t.length?t.push(n=new le(this.O(se()),this.O(se()),this,this.options)):n=t[s],n._$AI(r),s++;s<t.length&&(this._$AR(n&&n._$AB.nextSibling,s),t.length=s)}_$AR(e=this._$AA.nextSibling,t){var n;for((n=this._$AP)==null?void 0:n.call(this,!1,!0,t);e!==this._$AB;){const s=Ze(e).nextSibling;Ze(e).remove(),e=s}}setConnected(e){var t;this._$AM===void 0&&(this._$Cv=e,(t=this._$AP)==null||t.call(this,e))}}class _e{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(e,t,n,s,r){this.type=1,this._$AH=_,this._$AN=void 0,this.element=e,this.name=t,this._$AM=s,this.options=r,n.length>2||n[0]!==""||n[1]!==""?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=_}_$AI(e,t=this,n,s){const r=this.strings;let i=!1;if(r===void 0)e=W(this,e,t,0),i=!re(e)||e!==this._$AH&&e!==H,i&&(this._$AH=e);else{const l=e;let a,c;for(e=r[0],a=0;a<r.length-1;a++)c=W(this,l[n+a],t,a),c===H&&(c=this._$AH[a]),i||(i=!re(c)||c!==this._$AH[a]),c===_?e=_:e!==_&&(e+=(c??"")+r[a+1]),this._$AH[a]=c}i&&!s&&this.j(e)}j(e){e===_?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e??"")}}class Qt extends _e{constructor(){super(...arguments),this.type=3}j(e){this.element[this.name]=e===_?void 0:e}}class Zt extends _e{constructor(){super(...arguments),this.type=4}j(e){this.element.toggleAttribute(this.name,!!e&&e!==_)}}class Xt extends _e{constructor(e,t,n,s,r){super(e,t,n,s,r),this.type=5}_$AI(e,t=this){if((e=W(this,e,t,0)??_)===H)return;const n=this._$AH,s=e===_&&n!==_||e.capture!==n.capture||e.once!==n.once||e.passive!==n.passive,r=e!==_&&(n===_||s);s&&this.element.removeEventListener(this.name,this,n),r&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){var t;typeof this._$AH=="function"?this._$AH.call(((t=this.options)==null?void 0:t.host)??this.element,e):this._$AH.handleEvent(e)}}class Yt{constructor(e,t,n){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=n}get _$AU(){return this._$AM._$AU}_$AI(e){W(this,e)}}const xe=te.litHtmlPolyfillSupport;xe==null||xe(oe,le),(te.litHtmlVersions??(te.litHtmlVersions=[])).push("3.3.3");const en=(o,e,t)=>{const n=(t==null?void 0:t.renderBefore)??e;let s=n._$litPart$;if(s===void 0){const r=(t==null?void 0:t.renderBefore)??null;n._$litPart$=s=new le(e.insertBefore(se(),r),r,void 0,t??{})}return s._$AI(o),s};/**
|
|
16
|
+
* @license
|
|
17
|
+
* Copyright 2017 Google LLC
|
|
18
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
19
|
+
*/const P=globalThis;class y extends M{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){var t;const e=super.createRenderRoot();return(t=this.renderOptions).renderBefore??(t.renderBefore=e.firstChild),e}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=en(t,this.renderRoot,this.renderOptions)}connectedCallback(){var e;super.connectedCallback(),(e=this._$Do)==null||e.setConnected(!0)}disconnectedCallback(){var e;super.disconnectedCallback(),(e=this._$Do)==null||e.setConnected(!1)}render(){return H}}var at;y._$litElement$=!0,y.finalized=!0,(at=P.litElementHydrateSupport)==null||at.call(P,{LitElement:y});const Ae=P.litElementPolyfillSupport;Ae==null||Ae({LitElement:y});(P.litElementVersions??(P.litElementVersions=[])).push("4.2.2");/**
|
|
20
|
+
* @license
|
|
21
|
+
* Copyright 2017 Google LLC
|
|
22
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
23
|
+
*/const x=o=>(e,t)=>{t!==void 0?t.addInitializer(()=>{customElements.define(o,e)}):customElements.define(o,e)};/**
|
|
24
|
+
* @license
|
|
25
|
+
* Copyright 2017 Google LLC
|
|
26
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
27
|
+
*/const tn={attribute:!0,type:String,converter:he,reflect:!1,hasChanged:je},nn=(o=tn,e,t)=>{const{kind:n,metadata:s}=t;let r=globalThis.litPropertyMetadata.get(s);if(r===void 0&&globalThis.litPropertyMetadata.set(s,r=new Map),n==="setter"&&((o=Object.create(o)).wrapped=!0),r.set(t.name,o),n==="accessor"){const{name:i}=t;return{set(l){const a=e.get.call(this);e.set.call(this,l),this.requestUpdate(i,a,o,!0,l)},init(l){return l!==void 0&&this.C(i,void 0,o,l),l}}}if(n==="setter"){const{name:i}=t;return function(l){const a=this[i];e.call(this,l),this.requestUpdate(i,a,o,!0,l)}}throw Error("Unsupported decorator location: "+n)};function v(o){return(e,t)=>typeof t=="object"?nn(o,e,t):((n,s,r)=>{const i=s.hasOwnProperty(r);return s.constructor.createProperty(r,n),i?Object.getOwnPropertyDescriptor(s,r):void 0})(o,e,t)}/**
|
|
28
|
+
* @license
|
|
29
|
+
* Copyright 2017 Google LLC
|
|
30
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
31
|
+
*/function ae(o){return v({...o,state:!0,attribute:!1})}var ft=function(o,e,t,n){var s=arguments.length,r=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(o,e,t,n);else for(var l=o.length-1;l>=0;l--)(i=o[l])&&(r=(s<3?i(r):s>3?i(e,t,r):i(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r},N;let Ee=(N=class extends y{constructor(){super(...arguments),this.isRecording=!1,this.start=()=>this.dispatchEvent(new CustomEvent("rld-start",{bubbles:!0,composed:!0})),this.stop=()=>this.dispatchEvent(new CustomEvent("rld-stop",{bubbles:!0,composed:!0})),this.mark=()=>this.dispatchEvent(new CustomEvent("rld-mark",{bubbles:!0,composed:!0}))}render(){return this.isRecording?m`
|
|
32
|
+
<button data-action="stop" data-recording @click=${this.stop}>■ Stop</button>
|
|
33
|
+
<button data-action="mark" @click=${this.mark}>Mark Navigation</button>
|
|
34
|
+
`:m`<button data-action="start" @click=${this.start}>● Record</button>`}},N.styles=w`
|
|
35
|
+
:host { display: flex; gap: 6px; align-items: center; padding: 4px 0; }
|
|
36
|
+
button { background: #3c4043; color: #e8eaed; border: 1px solid #5f6368; padding: 4px 10px; cursor: pointer; font: inherit; }
|
|
37
|
+
button[data-recording] { background: #f28b82; color: #202124; }
|
|
38
|
+
`,N);ft([v({type:Boolean})],Ee.prototype,"isRecording",void 0);Ee=ft([x("record-controls")],Ee);var mt=function(o,e,t,n){var s=arguments.length,r=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(o,e,t,n);else for(var l=o.length-1;l>=0;l--)(i=o[l])&&(r=(s<3?i(r):s>3?i(e,t,r):i(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r},j;let ke=(j=class extends y{constructor(){super(...arguments),this.open=e=>{e.stopPropagation(),this.dispatchEvent(new CustomEvent("rld-open-source",{detail:{file:this.frame.file,line:this.frame.line,column:this.frame.column},bubbles:!0,composed:!0}))}}render(){const e=this.frame.functionName??"<anon>";return m`<div class=${this.frame.isFramework?"framework":""}>
|
|
39
|
+
${e} @ <a @click=${this.open}>${sn(this.frame.file)}:${this.frame.line}</a>
|
|
40
|
+
</div>`}},j.styles=w`
|
|
41
|
+
:host { display: block; padding: 2px 6px; font-family: inherit; }
|
|
42
|
+
.framework { color: #9aa0a6; }
|
|
43
|
+
a { color: #8ab4f8; cursor: pointer; text-decoration: none; }
|
|
44
|
+
a:hover { text-decoration: underline; }
|
|
45
|
+
`,j);mt([v({type:Object})],ke.prototype,"frame",void 0);ke=mt([x("stack-frame")],ke);function sn(o){return o.split("/").pop()??o}var gt=function(o,e,t,n){var s=arguments.length,r=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(o,e,t,n);else for(var l=o.length-1;l>=0;l--)(i=o[l])&&(r=(s<3?i(r):s>3?i(e,t,r):i(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r},T;let Oe=(T=class extends y{render(){return m`
|
|
46
|
+
<div class="section">
|
|
47
|
+
<h4>Observable</h4>
|
|
48
|
+
${this.leak.observableKind}
|
|
49
|
+
</div>
|
|
50
|
+
<div class="section">
|
|
51
|
+
<h4>Stack</h4>
|
|
52
|
+
${this.leak.stack.map(e=>m`<stack-frame .frame=${e}></stack-frame>`)}
|
|
53
|
+
</div>
|
|
54
|
+
${this.leak.retainerChain.length>0?m`
|
|
55
|
+
<div class="section">
|
|
56
|
+
<h4>Retainer chain</h4>
|
|
57
|
+
<div class="retainer">
|
|
58
|
+
${this.leak.retainerChain.map(e=>m`<span>${e.constructorName}</span>`)}
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
`:""}
|
|
62
|
+
`}},T.styles=w`
|
|
63
|
+
:host { display: block; padding: 8px; background: #1f1f1f; border-left: 2px solid #8ab4f8; }
|
|
64
|
+
h4 { margin: 0 0 4px; font-size: 11px; color: #9aa0a6; text-transform: uppercase; }
|
|
65
|
+
.section { margin-bottom: 10px; }
|
|
66
|
+
.retainer { color: #e8eaed; }
|
|
67
|
+
.retainer span + span::before { content: ' → '; color: #9aa0a6; }
|
|
68
|
+
`,T);gt([v({type:Object})],Oe.prototype,"leak",void 0);Oe=gt([x("leak-detail")],Oe);var Ue=function(o,e,t,n){var s=arguments.length,r=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(o,e,t,n);else for(var l=o.length-1;l>=0;l--)(i=o[l])&&(r=(s<3?i(r):s>3?i(e,t,r):i(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r},U;let me=(U=class extends y{constructor(){super(...arguments),this.expanded=!1,this.toggle=()=>{this.expanded=!this.expanded},this.openSource=e=>{e.stopPropagation();const t=this.leak.sourceLocation;this.dispatchEvent(new CustomEvent("rld-open-source",{detail:{file:t.file,line:t.line,column:t.column},bubbles:!0,composed:!0}))}}render(){const e=this.leak.sourceLocation,t=e.file.split("/").pop(),n=this.leak.leakKind??"unknown";return m`
|
|
69
|
+
<div>
|
|
70
|
+
<div class="summary" @click=${this.toggle}>
|
|
71
|
+
<span class="caret">${this.expanded?"▼":"▶"}</span>
|
|
72
|
+
<div class="main">
|
|
73
|
+
<div class="top">
|
|
74
|
+
${this.leak.componentName?m`<span class="component">${this.leak.componentName}</span>`:m`<span class="no-component">(no component)</span>`}
|
|
75
|
+
<span class="obs-kind">${this.leak.observableKind}</span>
|
|
76
|
+
</div>
|
|
77
|
+
<div class="file" title="Open ${e.file}:${e.line} in editor" @click=${this.openSource}>${t}:${e.line}:${e.column}</div>
|
|
78
|
+
</div>
|
|
79
|
+
<span class="badge route" title="Route at subscribe time">${this.leak.route||"/"}</span>
|
|
80
|
+
<span class="badge leak-kind ${n}">${n}</span>
|
|
81
|
+
</div>
|
|
82
|
+
${this.expanded?m`<leak-detail .leak=${this.leak}></leak-detail>`:""}
|
|
83
|
+
</div>
|
|
84
|
+
`}},U.styles=w`
|
|
85
|
+
:host { display: block; border-bottom: 1px solid #3c4043; }
|
|
86
|
+
.summary {
|
|
87
|
+
padding: 8px 10px;
|
|
88
|
+
cursor: pointer;
|
|
89
|
+
display: grid;
|
|
90
|
+
grid-template-columns: auto 1fr auto auto auto;
|
|
91
|
+
gap: 10px;
|
|
92
|
+
align-items: center;
|
|
93
|
+
}
|
|
94
|
+
.summary:hover { background: #3c4043; }
|
|
95
|
+
.caret { color: #9aa0a6; font-size: 10px; width: 10px; }
|
|
96
|
+
.main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
|
|
97
|
+
.top { display: flex; gap: 8px; align-items: center; min-width: 0; }
|
|
98
|
+
.component { color: #e8eaed; font-weight: 600; white-space: nowrap; }
|
|
99
|
+
.no-component { color: #9aa0a6; font-style: italic; }
|
|
100
|
+
.file { color: #8ab4f8; font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: pointer; }
|
|
101
|
+
.file:hover { text-decoration: underline; }
|
|
102
|
+
.obs-kind { color: #9aa0a6; font-style: italic; font-size: 11px; }
|
|
103
|
+
.badge {
|
|
104
|
+
font-size: 10px;
|
|
105
|
+
padding: 1px 7px;
|
|
106
|
+
border-radius: 8px;
|
|
107
|
+
background: #5f6368;
|
|
108
|
+
color: #fff;
|
|
109
|
+
white-space: nowrap;
|
|
110
|
+
}
|
|
111
|
+
.route { background: #3c4043; color: #aecbfa; border: 1px solid #5f6368; }
|
|
112
|
+
.leak-kind { font-weight: 600; }
|
|
113
|
+
.leak-kind.nested-subscribe { background: #c5221f; }
|
|
114
|
+
.leak-kind.async-init { background: #b06000; }
|
|
115
|
+
.leak-kind.ng-init { background: #1a73e8; }
|
|
116
|
+
.leak-kind.global-event { background: #9334e6; }
|
|
117
|
+
.leak-kind.timer { background: #188038; }
|
|
118
|
+
.leak-kind.subject { background: #0b8043; }
|
|
119
|
+
.leak-kind.unknown { background: #5f6368; }
|
|
120
|
+
`,U);Ue([v({type:Object})],me.prototype,"leak",void 0);Ue([ae()],me.prototype,"expanded",void 0);me=Ue([x("leak-row")],me);var ce=function(o,e,t,n){var s=arguments.length,r=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(o,e,t,n);else for(var l=o.length-1;l>=0;l--)(i=o[l])&&(r=(s<3?i(r):s>3?i(e,t,r):i(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r},I;let q=(I=class extends y{constructor(){super(...arguments),this.leaks=[],this.query="",this.kindFilter=null,this.routeFilter=null,this.onSearch=e=>{this.query=e.target.value.trim().toLowerCase()},this.clear=()=>{this.query="",this.kindFilter=null,this.routeFilter=null}}tally(e){const t=new Map;for(const n of this.leaks){const s=e(n);s&&t.set(s,(t.get(s)??0)+1)}return[...t.entries()].sort((n,s)=>s[1]-n[1])}toggleKind(e){this.kindFilter=this.kindFilter===e?null:e}toggleRoute(e){this.routeFilter=this.routeFilter===e?null:e}filtered(){const e=this.query;return this.leaks.filter(t=>this.kindFilter&&(t.leakKind??"unknown")!==this.kindFilter||this.routeFilter&&t.route!==this.routeFilter?!1:e?[t.componentName??"",t.observableKind,t.route,t.sourceLocation.file,t.leakKind??""].join(" ").toLowerCase().includes(e):!0)}render(){const e=this.tally(r=>r.leakKind??"unknown"),t=this.tally(r=>r.route),n=this.filtered(),s=this.query!==""||this.kindFilter!==null||this.routeFilter!==null;return m`
|
|
121
|
+
<div class="toolbar">
|
|
122
|
+
<input
|
|
123
|
+
class="search"
|
|
124
|
+
type="search"
|
|
125
|
+
placeholder="Search component, file, route, kind…"
|
|
126
|
+
.value=${this.query}
|
|
127
|
+
@input=${this.onSearch}
|
|
128
|
+
/>
|
|
129
|
+
${s?m`<span class="chip" @click=${this.clear} title="Clear filters">✕ clear</span>`:""}
|
|
130
|
+
</div>
|
|
131
|
+
${e.length>1?m`
|
|
132
|
+
<div class="toolbar">
|
|
133
|
+
<span style="color:#9aa0a6;font-size:11px">Kind:</span>
|
|
134
|
+
<div class="chips">
|
|
135
|
+
${e.map(([r,i])=>m`
|
|
136
|
+
<span
|
|
137
|
+
class="chip ${this.kindFilter===r?"active":""}"
|
|
138
|
+
@click=${()=>this.toggleKind(r)}
|
|
139
|
+
>${r}<span class="n">${i}</span></span>
|
|
140
|
+
`)}
|
|
141
|
+
</div>
|
|
142
|
+
</div>
|
|
143
|
+
`:""}
|
|
144
|
+
${t.length>1?m`
|
|
145
|
+
<div class="toolbar">
|
|
146
|
+
<span style="color:#9aa0a6;font-size:11px">Route:</span>
|
|
147
|
+
<div class="chips">
|
|
148
|
+
${t.map(([r,i])=>m`
|
|
149
|
+
<span
|
|
150
|
+
class="chip ${this.routeFilter===r?"active":""}"
|
|
151
|
+
@click=${()=>this.toggleRoute(r)}
|
|
152
|
+
>${r||"/"}<span class="n">${i}</span></span>
|
|
153
|
+
`)}
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
156
|
+
`:""}
|
|
157
|
+
<div class="results-meta">
|
|
158
|
+
Showing ${n.length} of ${this.leaks.length}
|
|
159
|
+
</div>
|
|
160
|
+
${n.length===0?m`<div class="none">No matches.</div>`:m`<div>${n.map(r=>m`<leak-row .leak=${r}></leak-row>`)}</div>`}
|
|
161
|
+
`}},I.styles=w`
|
|
162
|
+
:host { display: block; margin-top: 4px; }
|
|
163
|
+
.toolbar {
|
|
164
|
+
display: flex;
|
|
165
|
+
flex-wrap: wrap;
|
|
166
|
+
gap: 6px;
|
|
167
|
+
align-items: center;
|
|
168
|
+
padding: 6px 0;
|
|
169
|
+
border-bottom: 1px solid #3c4043;
|
|
170
|
+
}
|
|
171
|
+
input.search {
|
|
172
|
+
flex: 1 1 220px;
|
|
173
|
+
min-width: 200px;
|
|
174
|
+
background: #2d2e30;
|
|
175
|
+
color: #e8eaed;
|
|
176
|
+
border: 1px solid #3c4043;
|
|
177
|
+
border-radius: 4px;
|
|
178
|
+
padding: 4px 8px;
|
|
179
|
+
font: inherit;
|
|
180
|
+
outline: none;
|
|
181
|
+
}
|
|
182
|
+
input.search:focus { border-color: #8ab4f8; }
|
|
183
|
+
.chips { display: flex; gap: 4px; flex-wrap: wrap; }
|
|
184
|
+
.chip {
|
|
185
|
+
background: #3c4043;
|
|
186
|
+
color: #e8eaed;
|
|
187
|
+
border-radius: 12px;
|
|
188
|
+
padding: 2px 9px;
|
|
189
|
+
font-size: 11px;
|
|
190
|
+
cursor: pointer;
|
|
191
|
+
user-select: none;
|
|
192
|
+
border: 1px solid transparent;
|
|
193
|
+
}
|
|
194
|
+
.chip:hover { background: #4a4d51; }
|
|
195
|
+
.chip.active {
|
|
196
|
+
background: #8ab4f8;
|
|
197
|
+
color: #202124;
|
|
198
|
+
border-color: #8ab4f8;
|
|
199
|
+
}
|
|
200
|
+
.chip .n { opacity: 0.8; margin-left: 4px; }
|
|
201
|
+
.results-meta {
|
|
202
|
+
color: #9aa0a6;
|
|
203
|
+
font-size: 11px;
|
|
204
|
+
padding: 6px 0;
|
|
205
|
+
}
|
|
206
|
+
.group { margin-top: 10px; }
|
|
207
|
+
.group-header {
|
|
208
|
+
font-size: 11px;
|
|
209
|
+
color: #9aa0a6;
|
|
210
|
+
text-transform: uppercase;
|
|
211
|
+
letter-spacing: 0.5px;
|
|
212
|
+
padding: 6px 8px;
|
|
213
|
+
background: #2d2e30;
|
|
214
|
+
border-radius: 4px 4px 0 0;
|
|
215
|
+
}
|
|
216
|
+
.none { color: #5f6368; padding: 12px 8px; font-style: italic; }
|
|
217
|
+
`,I);ce([v({type:Array})],q.prototype,"leaks",void 0);ce([ae()],q.prototype,"query",void 0);ce([ae()],q.prototype,"kindFilter",void 0);ce([ae()],q.prototype,"routeFilter",void 0);q=ce([x("leak-list")],q);var _t=function(o,e,t,n){var s=arguments.length,r=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(o,e,t,n);else for(var l=o.length-1;l>=0;l--)(i=o[l])&&(r=(s<3?i(r):s>3?i(e,t,r):i(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r};function Se(o,e){const t=new Map;for(const n of o){const s=e(n);s&&t.set(s,(t.get(s)??0)+1)}return[...t.entries()].sort((n,s)=>s[1]-n[1])}var F;let Re=(F=class extends y{constructor(){super(...arguments),this.report=null}renderBreakdown(e,t){return m`
|
|
218
|
+
<div class="block">
|
|
219
|
+
<h4>${e}</h4>
|
|
220
|
+
${t.length===0?m`<div class="empty">none</div>`:t.slice(0,6).map(([n,s])=>m`
|
|
221
|
+
<div class="row">
|
|
222
|
+
<span class="name" title="${n}">${n}</span>
|
|
223
|
+
<span class="count">${s}</span>
|
|
224
|
+
</div>
|
|
225
|
+
`)}
|
|
226
|
+
</div>
|
|
227
|
+
`}render(){if(!this.report)return m``;const e=this.report,t=Se(e.leaks,i=>i.leakKind??"unknown"),n=Se(e.leaks,i=>i.route),s=Se(e.leaks,i=>i.componentName),r=e.leaks.length===0;return m`
|
|
228
|
+
<div class="kpis">
|
|
229
|
+
<div class="kpi ${r?"clean":"leaks"}">
|
|
230
|
+
<span class="value">${e.leaks.length}</span>
|
|
231
|
+
<span class="label">${r?"no leaks":e.leaks.length===1?"leak":"leaks"}</span>
|
|
232
|
+
</div>
|
|
233
|
+
<div class="kpi">
|
|
234
|
+
<span class="value">${e.totalSubscriptionsScanned}</span>
|
|
235
|
+
<span class="label">scanned</span>
|
|
236
|
+
</div>
|
|
237
|
+
<div class="kpi">
|
|
238
|
+
<span class="value">${e.ignoredFrameworkSubscriptions}</span>
|
|
239
|
+
<span class="label">framework</span>
|
|
240
|
+
</div>
|
|
241
|
+
<div class="kpi">
|
|
242
|
+
<span class="value">${e.longLivedServiceSubscriptions.length}</span>
|
|
243
|
+
<span class="label">long-lived</span>
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
246
|
+
<div class="breakdowns">
|
|
247
|
+
${this.renderBreakdown("By kind",t)}
|
|
248
|
+
${this.renderBreakdown("By route",n)}
|
|
249
|
+
${this.renderBreakdown("By component",s)}
|
|
250
|
+
</div>
|
|
251
|
+
`}},F.styles=w`
|
|
252
|
+
:host {
|
|
253
|
+
display: block;
|
|
254
|
+
padding: 8px 0 12px;
|
|
255
|
+
color: #e8eaed;
|
|
256
|
+
}
|
|
257
|
+
.kpis {
|
|
258
|
+
display: grid;
|
|
259
|
+
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
|
|
260
|
+
gap: 8px;
|
|
261
|
+
margin-bottom: 10px;
|
|
262
|
+
}
|
|
263
|
+
.kpi {
|
|
264
|
+
background: #3c4043;
|
|
265
|
+
border-radius: 6px;
|
|
266
|
+
padding: 8px 10px;
|
|
267
|
+
display: flex;
|
|
268
|
+
flex-direction: column;
|
|
269
|
+
gap: 2px;
|
|
270
|
+
}
|
|
271
|
+
.kpi .value { font-size: 20px; font-weight: 600; }
|
|
272
|
+
.kpi .label { font-size: 11px; color: #9aa0a6; text-transform: uppercase; letter-spacing: 0.5px; }
|
|
273
|
+
.kpi.leaks .value { color: #f28b82; }
|
|
274
|
+
.kpi.clean .value { color: #81c995; }
|
|
275
|
+
|
|
276
|
+
.breakdowns {
|
|
277
|
+
display: grid;
|
|
278
|
+
grid-template-columns: 1fr 1fr 1fr;
|
|
279
|
+
gap: 10px;
|
|
280
|
+
}
|
|
281
|
+
@media (max-width: 720px) {
|
|
282
|
+
.breakdowns { grid-template-columns: 1fr; }
|
|
283
|
+
}
|
|
284
|
+
.block {
|
|
285
|
+
background: #2d2e30;
|
|
286
|
+
border: 1px solid #3c4043;
|
|
287
|
+
border-radius: 6px;
|
|
288
|
+
padding: 8px;
|
|
289
|
+
}
|
|
290
|
+
.block h4 {
|
|
291
|
+
margin: 0 0 6px;
|
|
292
|
+
font-size: 11px;
|
|
293
|
+
color: #9aa0a6;
|
|
294
|
+
text-transform: uppercase;
|
|
295
|
+
letter-spacing: 0.5px;
|
|
296
|
+
}
|
|
297
|
+
.row {
|
|
298
|
+
display: flex;
|
|
299
|
+
justify-content: space-between;
|
|
300
|
+
align-items: center;
|
|
301
|
+
padding: 3px 0;
|
|
302
|
+
font-size: 12px;
|
|
303
|
+
}
|
|
304
|
+
.name { color: #e8eaed; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
305
|
+
.count {
|
|
306
|
+
background: #5f6368;
|
|
307
|
+
color: #fff;
|
|
308
|
+
border-radius: 9px;
|
|
309
|
+
padding: 1px 8px;
|
|
310
|
+
font-size: 11px;
|
|
311
|
+
font-weight: 600;
|
|
312
|
+
min-width: 22px;
|
|
313
|
+
text-align: center;
|
|
314
|
+
}
|
|
315
|
+
.empty { color: #5f6368; font-style: italic; font-size: 12px; }
|
|
316
|
+
`,F);_t([v({type:Object})],Re.prototype,"report",void 0);Re=_t([x("leak-summary")],Re);var Ie=function(o,e,t,n){var s=arguments.length,r=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(o,e,t,n);else for(var l=o.length-1;l>=0;l--)(i=o[l])&&(r=(s<3?i(r):s>3?i(e,t,r):i(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r},D;let ge=(D=class extends y{constructor(){super(...arguments),this.entries=[],this.expanded=!1}render(){return this.entries.length===0?m``:m`
|
|
317
|
+
<div>
|
|
318
|
+
<h3 @click=${()=>{this.expanded=!this.expanded}}>
|
|
319
|
+
${this.expanded?"▼":"▶"} ${this.entries.length} long-lived (not leaks)
|
|
320
|
+
</h3>
|
|
321
|
+
${this.expanded?m`<div>${this.entries.map(e=>m`
|
|
322
|
+
<div class="row">${e.componentName??"(unknown)"} · ${e.observableKind}</div>
|
|
323
|
+
`)}</div>`:""}
|
|
324
|
+
</div>
|
|
325
|
+
`}},D.styles=w`
|
|
326
|
+
:host { display: block; margin-top: 16px; border-top: 1px solid #3c4043; }
|
|
327
|
+
h3 { font-size: 11px; color: #9aa0a6; cursor: pointer; padding: 6px 0; margin: 0; }
|
|
328
|
+
.row { padding: 4px 8px; color: #e8eaed; }
|
|
329
|
+
`,D);Ie([v({type:Array})],ge.prototype,"entries",void 0);Ie([ae()],ge.prototype,"expanded",void 0);ge=Ie([x("long-lived-section")],ge);var bt=function(o,e,t,n){var s=arguments.length,r=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(o,e,t,n);else for(var l=o.length-1;l>=0;l--)(i=o[l])&&(r=(s<3?i(r):s>3?i(e,t,r):i(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r},z;let Pe=(z=class extends y{constructor(){super(...arguments),this.message="Click Record, navigate to a different page in your app, then Stop."}render(){return m`<div>${this.message}</div>`}},z.styles=w`
|
|
330
|
+
:host { display: block; padding: 40px 20px; text-align: center; color: #9aa0a6; }
|
|
331
|
+
`,z);bt([v()],Pe.prototype,"message",void 0);Pe=bt([x("empty-state")],Pe);var ue=function(o,e,t,n){var s=arguments.length,r=s<3?e:n===null?n=Object.getOwnPropertyDescriptor(e,t):n,i;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(o,e,t,n);else for(var l=o.length-1;l>=0;l--)(i=o[l])&&(r=(s<3?i(r):s>3?i(e,t,r):i(e,t))||r);return s>3&&r&&Object.defineProperty(e,t,r),r},B;let G=(B=class extends y{constructor(){super(...arguments),this.report=null,this.isRecording=!1,this.error=null,this.progressPhase=null}renderProgress(){return this.progressPhase?m`<div class="progress">${{capturing:"Capturing heap snapshot…","fetching-maps":"Fetching source maps…",analyzing:"Analyzing…"}[this.progressPhase]}</div>`:""}render(){return m`
|
|
332
|
+
<div>
|
|
333
|
+
<record-controls .isRecording=${this.isRecording}></record-controls>
|
|
334
|
+
${this.error?m`<div class="error">${this.error}</div>`:""}
|
|
335
|
+
${this.renderProgress()}
|
|
336
|
+
${this.report?m`
|
|
337
|
+
<div>
|
|
338
|
+
<leak-summary .report=${this.report}></leak-summary>
|
|
339
|
+
${this.report.leaks.length===0?m`<empty-state message="No leaks detected ✓"></empty-state>`:m`<leak-list .leaks=${this.report.leaks}></leak-list>`}
|
|
340
|
+
<long-lived-section .entries=${this.report.longLivedServiceSubscriptions}></long-lived-section>
|
|
341
|
+
</div>
|
|
342
|
+
`:m`<empty-state></empty-state>`}
|
|
343
|
+
</div>
|
|
344
|
+
`}},B.styles=w`
|
|
345
|
+
:host { display: block; padding: 8px; font: 12px monospace; color: #e8eaed; background: #2b2b2b; min-height: 100vh; }
|
|
346
|
+
.error { color: #f28b82; padding: 8px; border: 1px solid #f28b82; margin: 8px 0; }
|
|
347
|
+
.progress { color: #8ab4f8; padding: 8px; }
|
|
348
|
+
`,B);ue([v({type:Object})],G.prototype,"report",void 0);ue([v({type:Boolean})],G.prototype,"isRecording",void 0);ue([v()],G.prototype,"error",void 0);ue([v()],G.prototype,"progressPhase",void 0);G=ue([x("leak-detector-root")],G);function rn(o){if(o.__esModule)return o;var e=o.default;if(typeof e=="function"){var t=function n(){return this instanceof n?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};t.prototype=e.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(o).forEach(function(n){var s=Object.getOwnPropertyDescriptor(o,n);Object.defineProperty(t,n,s.get?s:{enumerable:!0,get:function(){return o[n]}})}),t}var yt={},vt={};const rt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");vt.encode=function(o){if(0<=o&&o<rt.length)return rt[o];throw new TypeError("Must be between 0 and 63: "+o)};const on=vt,$t=5,wt=1<<$t,ln=wt-1,an=wt;function cn(o){return o<0?(-o<<1)+1:(o<<1)+0}yt.encode=function(e){let t="",n,s=cn(e);do n=s&ln,s>>>=$t,s>0&&(n|=an),t+=on.encode(n);while(s>0);return t};var $={};const un={},dn=Object.freeze(Object.defineProperty({__proto__:null,default:un},Symbol.toStringTag,{value:"Module"})),pn=rn(dn);var hn=typeof URL=="function"?URL:pn.URL;const E=hn;function fn(o,e,t){if(e in o)return o[e];if(arguments.length===3)return t;throw new Error('"'+e+'" is a required argument.')}$.getArg=fn;const xt=function(){return!("__proto__"in Object.create(null))}();function At(o){return o}function mn(o){return St(o)?"$"+o:o}$.toSetString=xt?At:mn;function gn(o){return St(o)?o.slice(1):o}$.fromSetString=xt?At:gn;function St(o){if(!o)return!1;const e=o.length;if(e<9||o.charCodeAt(e-1)!==95||o.charCodeAt(e-2)!==95||o.charCodeAt(e-3)!==111||o.charCodeAt(e-4)!==116||o.charCodeAt(e-5)!==111||o.charCodeAt(e-6)!==114||o.charCodeAt(e-7)!==112||o.charCodeAt(e-8)!==95||o.charCodeAt(e-9)!==95)return!1;for(let t=e-10;t>=0;t--)if(o.charCodeAt(t)!==36)return!1;return!0}function ot(o,e){return o===e?0:o===null?1:e===null?-1:o>e?1:-1}function _n(o,e){let t=o.generatedLine-e.generatedLine;return t!==0||(t=o.generatedColumn-e.generatedColumn,t!==0)||(t=ot(o.source,e.source),t!==0)||(t=o.originalLine-e.originalLine,t!==0)||(t=o.originalColumn-e.originalColumn,t!==0)?t:ot(o.name,e.name)}$.compareByGeneratedPositionsInflated=_n;function bn(o){return JSON.parse(o.replace(/^\)]}'[^\n]*\n/,""))}$.parseSourceMapInput=bn;const Fe="http:",ne=`${Fe}//host`;function De(o){return e=>{const t=K(e),n=ze(e),s=new E(e,n);o(s);const r=s.toString();return t==="absolute"?r:t==="scheme-relative"?r.slice(Fe.length):t==="path-absolute"?r.slice(ne.length):Be(n,r)}}function A(o,e){return new E(o,e).toString()}function yn(o,e){let t=0;do{const n=o+t++;if(e.indexOf(n)===-1)return n}while(!0)}function ze(o){const e=o.split("..").length-1,t=yn("p",o);let n=`${ne}/`;for(let s=0;s<e;s++)n+=`${t}/`;return n}const vn=/^[A-Za-z0-9\+\-\.]+:/;function K(o){return o[0]==="/"?o[1]==="/"?"scheme-relative":"path-absolute":vn.test(o)?"absolute":"path-relative"}function Be(o,e){typeof o=="string"&&(o=new E(o)),typeof e=="string"&&(e=new E(e));const t=e.pathname.split("/"),n=o.pathname.split("/");for(n.length>0&&!n[n.length-1]&&n.pop();t.length>0&&n.length>0&&t[0]===n[0];)t.shift(),n.shift();return n.map(()=>"..").concat(t).join("/")+e.search+e.hash}const $n=De(o=>{o.pathname=o.pathname.replace(/\/?$/,"/")}),wn=De(o=>{o.href=new E(".",o.toString()).toString()}),ie=De(o=>{});$.normalize=ie;function Le(o,e){const t=K(e),n=K(o);if(o=$n(o),t==="absolute")return A(e,void 0);if(n==="absolute")return A(e,o);if(t==="scheme-relative")return ie(e);if(n==="scheme-relative")return A(e,A(o,ne)).slice(Fe.length);if(t==="path-absolute")return ie(e);if(n==="path-absolute")return A(e,A(o,ne)).slice(ne.length);const s=ze(e+o),r=A(e,A(o,s));return Be(s,r)}$.join=Le;function xn(o,e){const t=An(o,e);return typeof t=="string"?t:ie(e)}$.relative=xn;function An(o,e){if(K(o)!==K(e))return null;const n=ze(o+e),s=new E(o,n),r=new E(e,n);try{new E("",r.toString())}catch{return null}return r.protocol!==s.protocol||r.user!==s.user||r.password!==s.password||r.hostname!==s.hostname||r.port!==s.port?null:Be(s,r)}function Sn(o,e,t){o&&K(e)==="path-absolute"&&(e=e.replace(/^\//,""));let n=ie(e||"");return o&&(n=Le(o,n)),t&&(n=Le(wn(t),n)),n}$.computeSourceURL=Sn;var He={};let Cn=class Ct{constructor(){this._array=[],this._set=new Map}static fromArray(e,t){const n=new Ct;for(let s=0,r=e.length;s<r;s++)n.add(e[s],t);return n}size(){return this._set.size}add(e,t){const n=this.has(e),s=this._array.length;(!n||t)&&this._array.push(e),n||this._set.set(e,s)}has(e){return this._set.has(e)}indexOf(e){const t=this._set.get(e);if(t>=0)return t;throw new Error('"'+e+'" is not in the set.')}at(e){if(e>=0&&e<this._array.length)return this._array[e];throw new Error("No element indexed by "+e)}toArray(){return this._array.slice()}};He.ArraySet=Cn;var Et={};const kt=$;function En(o,e){const t=o.generatedLine,n=e.generatedLine,s=o.generatedColumn,r=e.generatedColumn;return n>t||n==t&&r>=s||kt.compareByGeneratedPositionsInflated(o,e)<=0}let kn=class{constructor(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}unsortedForEach(e,t){this._array.forEach(e,t)}add(e){En(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))}toArray(){return this._sorted||(this._array.sort(kt.compareByGeneratedPositionsInflated),this._sorted=!0),this._array}};Et.MappingList=kn;const Q=yt,g=$,de=He.ArraySet,On=Et.MappingList;class We{constructor(e){e||(e={}),this._file=g.getArg(e,"file",null),this._sourceRoot=g.getArg(e,"sourceRoot",null),this._skipValidation=g.getArg(e,"skipValidation",!1),this._sources=new de,this._names=new de,this._mappings=new On,this._sourcesContents=null}static fromSourceMap(e){const t=e.sourceRoot,n=new We({file:e.file,sourceRoot:t});return e.eachMapping(function(s){const r={generated:{line:s.generatedLine,column:s.generatedColumn}};s.source!=null&&(r.source=s.source,t!=null&&(r.source=g.relative(t,r.source)),r.original={line:s.originalLine,column:s.originalColumn},s.name!=null&&(r.name=s.name)),n.addMapping(r)}),e.sources.forEach(function(s){let r=s;t!=null&&(r=g.relative(t,s)),n._sources.has(r)||n._sources.add(r);const i=e.sourceContentFor(s);i!=null&&n.setSourceContent(s,i)}),n}addMapping(e){const t=g.getArg(e,"generated"),n=g.getArg(e,"original",null);let s=g.getArg(e,"source",null),r=g.getArg(e,"name",null);this._skipValidation||this._validateMapping(t,n,s,r),s!=null&&(s=String(s),this._sources.has(s)||this._sources.add(s)),r!=null&&(r=String(r),this._names.has(r)||this._names.add(r)),this._mappings.add({generatedLine:t.line,generatedColumn:t.column,originalLine:n&&n.line,originalColumn:n&&n.column,source:s,name:r})}setSourceContent(e,t){let n=e;this._sourceRoot!=null&&(n=g.relative(this._sourceRoot,n)),t!=null?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[g.toSetString(n)]=t):this._sourcesContents&&(delete this._sourcesContents[g.toSetString(n)],Object.keys(this._sourcesContents).length===0&&(this._sourcesContents=null))}applySourceMap(e,t,n){let s=t;if(t==null){if(e.file==null)throw new Error(`SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`);s=e.file}const r=this._sourceRoot;r!=null&&(s=g.relative(r,s));const i=this._mappings.toArray().length>0?new de:this._sources,l=new de;this._mappings.unsortedForEach(function(a){if(a.source===s&&a.originalLine!=null){const u=e.originalPositionFor({line:a.originalLine,column:a.originalColumn});u.source!=null&&(a.source=u.source,n!=null&&(a.source=g.join(n,a.source)),r!=null&&(a.source=g.relative(r,a.source)),a.originalLine=u.line,a.originalColumn=u.column,u.name!=null&&(a.name=u.name))}const c=a.source;c!=null&&!i.has(c)&&i.add(c);const d=a.name;d!=null&&!l.has(d)&&l.add(d)},this),this._sources=i,this._names=l,e.sources.forEach(function(a){const c=e.sourceContentFor(a);c!=null&&(n!=null&&(a=g.join(n,a)),r!=null&&(a=g.relative(r,a)),this.setSourceContent(a,c))},this)}_validateMapping(e,t,n,s){if(t&&typeof t.line!="number"&&typeof t.column!="number")throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if(!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0&&!t&&!n&&!s)){if(!(e&&"line"in e&&"column"in e&&t&&"line"in t&&"column"in t&&e.line>0&&e.column>=0&&t.line>0&&t.column>=0&&n))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:n,original:t,name:s}))}}_serializeMappings(){let e=0,t=1,n=0,s=0,r=0,i=0,l="",a,c,d,u;const p=this._mappings.toArray();for(let f=0,k=p.length;f<k;f++){if(c=p[f],a="",c.generatedLine!==t)for(e=0;c.generatedLine!==t;)a+=";",t++;else if(f>0){if(!g.compareByGeneratedPositionsInflated(c,p[f-1]))continue;a+=","}a+=Q.encode(c.generatedColumn-e),e=c.generatedColumn,c.source!=null&&(u=this._sources.indexOf(c.source),a+=Q.encode(u-i),i=u,a+=Q.encode(c.originalLine-1-s),s=c.originalLine-1,a+=Q.encode(c.originalColumn-n),n=c.originalColumn,c.name!=null&&(d=this._names.indexOf(c.name),a+=Q.encode(d-r),r=d)),l+=a}return l}_generateSourcesContent(e,t){return e.map(function(n){if(!this._sourcesContents)return null;t!=null&&(n=g.relative(t,n));const s=g.toSetString(n);return Object.prototype.hasOwnProperty.call(this._sourcesContents,s)?this._sourcesContents[s]:null},this)}toJSON(){const e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return this._file!=null&&(e.file=this._file),this._sourceRoot!=null&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e}toString(){return JSON.stringify(this.toJSON())}}We.prototype._version=3;var be={},Ot={};(function(o){o.GREATEST_LOWER_BOUND=1,o.LEAST_UPPER_BOUND=2;function e(t,n,s,r,i,l){const a=Math.floor((n-t)/2)+t,c=i(s,r[a],!0);return c===0?a:c>0?n-a>1?e(a,n,s,r,i,l):l===o.LEAST_UPPER_BOUND?n<r.length?n:-1:a:a-t>1?e(t,a,s,r,i,l):l==o.LEAST_UPPER_BOUND?a:t<0?-1:t}o.search=function(n,s,r,i){if(s.length===0)return-1;let l=e(-1,s.length,n,s,r,i||o.GREATEST_LOWER_BOUND);if(l<0)return-1;for(;l-1>=0&&r(s[l],s[l-1],!0)===0;)--l;return l}})(Ot);var qe={exports:{}};let Y=null;qe.exports=function(){if(typeof Y=="string")return fetch(Y).then(e=>e.arrayBuffer());if(Y instanceof ArrayBuffer)return Promise.resolve(Y);throw new Error("You must provide the string URL or ArrayBuffer contents of lib/mappings.wasm by calling SourceMapConsumer.initialize({ 'lib/mappings.wasm': ... }) before using SourceMapConsumer")};qe.exports.initialize=o=>{Y=o};var Rt=qe.exports;const Rn=Rt;function Pn(){this.generatedLine=0,this.generatedColumn=0,this.lastGeneratedColumn=null,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}let Z=null;var Ln=function(){if(Z)return Z;const e=[];return Z=Rn().then(t=>WebAssembly.instantiate(t,{env:{mapping_callback(n,s,r,i,l,a,c,d,u,p){const f=new Pn;f.generatedLine=n+1,f.generatedColumn=s,r&&(f.lastGeneratedColumn=i-1),l&&(f.source=a,f.originalLine=c+1,f.originalColumn=d,u&&(f.name=p)),e[e.length-1](f)},start_all_generated_locations_for(){console.time("all_generated_locations_for")},end_all_generated_locations_for(){console.timeEnd("all_generated_locations_for")},start_compute_column_spans(){console.time("compute_column_spans")},end_compute_column_spans(){console.timeEnd("compute_column_spans")},start_generated_location_for(){console.time("generated_location_for")},end_generated_location_for(){console.timeEnd("generated_location_for")},start_original_location_for(){console.time("original_location_for")},end_original_location_for(){console.timeEnd("original_location_for")},start_parse_mappings(){console.time("parse_mappings")},end_parse_mappings(){console.timeEnd("parse_mappings")},start_sort_by_generated_location(){console.time("sort_by_generated_location")},end_sort_by_generated_location(){console.timeEnd("sort_by_generated_location")},start_sort_by_original_location(){console.time("sort_by_original_location")},end_sort_by_original_location(){console.timeEnd("sort_by_original_location")}}})).then(t=>({exports:t.instance.exports,withMappingCallback:(n,s)=>{e.push(n);try{s()}finally{e.pop()}}})).then(null,t=>{throw Z=null,t}),Z};const h=$,Mn=Ot,Ce=He.ArraySet,Nn=Rt,jn=Ln,Ge=Symbol("smcInternal");let b=class Pt{constructor(e,t){return e==Ge?Promise.resolve(this):Tn(e,t)}static initialize(e){Nn.initialize(e["lib/mappings.wasm"])}static fromSourceMap(e,t){return Un(e,t)}static async with(e,t,n){const s=await new Pt(e,t);try{return await n(s)}finally{s.destroy()}}eachMapping(e,t,n){throw new Error("Subclasses must implement eachMapping")}allGeneratedPositionsFor(e){throw new Error("Subclasses must implement allGeneratedPositionsFor")}destroy(){throw new Error("Subclasses must implement destroy")}};b.prototype._version=3;b.GENERATED_ORDER=1;b.ORIGINAL_ORDER=2;b.GREATEST_LOWER_BOUND=1;b.LEAST_UPPER_BOUND=2;be.SourceMapConsumer=b;class V extends b{constructor(e,t){return super(Ge).then(n=>{let s=e;typeof e=="string"&&(s=h.parseSourceMapInput(e));const r=h.getArg(s,"version"),i=h.getArg(s,"sources").map(String),l=h.getArg(s,"names",[]),a=h.getArg(s,"sourceRoot",null),c=h.getArg(s,"sourcesContent",null),d=h.getArg(s,"mappings"),u=h.getArg(s,"file",null),p=h.getArg(s,"x_google_ignoreList",null);if(r!=n._version)throw new Error("Unsupported version: "+r);return n._sourceLookupCache=new Map,n._names=Ce.fromArray(l.map(String),!0),n._sources=Ce.fromArray(i,!0),n._absoluteSources=Ce.fromArray(n._sources.toArray().map(function(f){return h.computeSourceURL(a,f,t)}),!0),n.sourceRoot=a,n.sourcesContent=c,n._mappings=d,n._sourceMapURL=t,n.file=u,n.x_google_ignoreList=p,n._computedColumnSpans=!1,n._mappingsPtr=0,n._wasm=null,jn().then(f=>(n._wasm=f,n))})}_findSourceIndex(e){const t=this._sourceLookupCache.get(e);if(typeof t=="number")return t;const n=h.computeSourceURL(null,e,this._sourceMapURL);if(this._absoluteSources.has(n)){const r=this._absoluteSources.indexOf(n);return this._sourceLookupCache.set(e,r),r}const s=h.computeSourceURL(this.sourceRoot,e,this._sourceMapURL);if(this._absoluteSources.has(s)){const r=this._absoluteSources.indexOf(s);return this._sourceLookupCache.set(e,r),r}return-1}static fromSourceMap(e,t){return new V(e.toString())}get sources(){return this._absoluteSources.toArray()}_getMappingsPtr(){return this._mappingsPtr===0&&this._parseMappings(),this._mappingsPtr}_parseMappings(){const e=this._mappings,t=e.length,n=this._wasm.exports.allocate_mappings(t)>>>0,s=new Uint8Array(this._wasm.exports.memory.buffer,n,t);for(let i=0;i<t;i++)s[i]=e.charCodeAt(i);const r=this._wasm.exports.parse_mappings(n);if(!r){const i=this._wasm.exports.get_last_error();let l=`Error parsing mappings (code ${i}): `;switch(i){case 1:l+="the mappings contained a negative line, column, source index, or name index";break;case 2:l+="the mappings contained a number larger than 2**32";break;case 3:l+="reached EOF while in the middle of parsing a VLQ";break;case 4:l+="invalid base 64 character while parsing a VLQ";break;default:l+="unknown error code";break}throw new Error(l)}this._mappingsPtr=r}eachMapping(e,t,n){const s=t||null,r=n||b.GENERATED_ORDER;this._wasm.withMappingCallback(i=>{i.source!==null&&(i.source=this._absoluteSources.at(i.source),i.name!==null&&(i.name=this._names.at(i.name))),this._computedColumnSpans&&i.lastGeneratedColumn===null&&(i.lastGeneratedColumn=1/0),e.call(s,i)},()=>{switch(r){case b.GENERATED_ORDER:this._wasm.exports.by_generated_location(this._getMappingsPtr());break;case b.ORIGINAL_ORDER:this._wasm.exports.by_original_location(this._getMappingsPtr());break;default:throw new Error("Unknown order of iteration.")}})}allGeneratedPositionsFor(e){let t=h.getArg(e,"source");const n=h.getArg(e,"line"),s=e.column||0;if(t=this._findSourceIndex(t),t<0)return[];if(n<1)throw new Error("Line numbers must be >= 1");if(s<0)throw new Error("Column numbers must be >= 0");const r=[];return this._wasm.withMappingCallback(i=>{let l=i.lastGeneratedColumn;this._computedColumnSpans&&l===null&&(l=1/0),r.push({line:i.generatedLine,column:i.generatedColumn,lastColumn:l})},()=>{this._wasm.exports.all_generated_locations_for(this._getMappingsPtr(),t,n-1,"column"in e,s)}),r}destroy(){this._mappingsPtr!==0&&(this._wasm.exports.free_mappings(this._mappingsPtr),this._mappingsPtr=0)}computeColumnSpans(){this._computedColumnSpans||(this._wasm.exports.compute_column_spans(this._getMappingsPtr()),this._computedColumnSpans=!0)}originalPositionFor(e){const t={generatedLine:h.getArg(e,"line"),generatedColumn:h.getArg(e,"column")};if(t.generatedLine<1)throw new Error("Line numbers must be >= 1");if(t.generatedColumn<0)throw new Error("Column numbers must be >= 0");let n=h.getArg(e,"bias",b.GREATEST_LOWER_BOUND);n==null&&(n=b.GREATEST_LOWER_BOUND);let s;if(this._wasm.withMappingCallback(r=>s=r,()=>{this._wasm.exports.original_location_for(this._getMappingsPtr(),t.generatedLine-1,t.generatedColumn,n)}),s&&s.generatedLine===t.generatedLine){let r=h.getArg(s,"source",null);r!==null&&(r=this._absoluteSources.at(r));let i=h.getArg(s,"name",null);return i!==null&&(i=this._names.at(i)),{source:r,line:h.getArg(s,"originalLine",null),column:h.getArg(s,"originalColumn",null),name:i}}return{source:null,line:null,column:null,name:null}}hasContentsOfAllSources(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return e==null}):!1}sourceContentFor(e,t){if(!this.sourcesContent)return null;const n=this._findSourceIndex(e);if(n>=0)return this.sourcesContent[n];if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')}generatedPositionFor(e){let t=h.getArg(e,"source");if(t=this._findSourceIndex(t),t<0)return{line:null,column:null,lastColumn:null};const n={source:t,originalLine:h.getArg(e,"line"),originalColumn:h.getArg(e,"column")};if(n.originalLine<1)throw new Error("Line numbers must be >= 1");if(n.originalColumn<0)throw new Error("Column numbers must be >= 0");let s=h.getArg(e,"bias",b.GREATEST_LOWER_BOUND);s==null&&(s=b.GREATEST_LOWER_BOUND);let r;if(this._wasm.withMappingCallback(i=>r=i,()=>{this._wasm.exports.generated_location_for(this._getMappingsPtr(),n.source,n.originalLine-1,n.originalColumn,s)}),r&&r.source===n.source){let i=r.lastGeneratedColumn;return this._computedColumnSpans&&i===null&&(i=1/0),{line:h.getArg(r,"generatedLine",null),column:h.getArg(r,"generatedColumn",null),lastColumn:i}}return{line:null,column:null,lastColumn:null}}}V.prototype.consumer=b;be.BasicSourceMapConsumer=V;class Lt extends b{constructor(e,t){return super(Ge).then(n=>{let s=e;typeof e=="string"&&(s=h.parseSourceMapInput(e));const r=h.getArg(s,"version"),i=h.getArg(s,"sections");if(r!=n._version)throw new Error("Unsupported version: "+r);let l={line:-1,column:0};return Promise.all(i.map(a=>{if(a.url)throw new Error("Support for url field in sections not implemented.");const c=h.getArg(a,"offset"),d=h.getArg(c,"line"),u=h.getArg(c,"column");if(d<l.line||d===l.line&&u<l.column)throw new Error("Section offsets must be ordered and non-overlapping.");return l=c,new b(h.getArg(a,"map"),t).then(f=>({generatedOffset:{generatedLine:d+1,generatedColumn:u+1},consumer:f}))})).then(a=>(n._sections=a,n))})}get sources(){const e=[];for(let t=0;t<this._sections.length;t++)for(let n=0;n<this._sections[t].consumer.sources.length;n++)e.push(this._sections[t].consumer.sources[n]);return e}originalPositionFor(e){const t={generatedLine:h.getArg(e,"line"),generatedColumn:h.getArg(e,"column")},n=Mn.search(t,this._sections,function(r,i){const l=r.generatedLine-i.generatedOffset.generatedLine;return l||r.generatedColumn-(i.generatedOffset.generatedColumn-1)}),s=this._sections[n];return s?s.consumer.originalPositionFor({line:t.generatedLine-(s.generatedOffset.generatedLine-1),column:t.generatedColumn-(s.generatedOffset.generatedLine===t.generatedLine?s.generatedOffset.generatedColumn-1:0),bias:e.bias}):{source:null,line:null,column:null,name:null}}hasContentsOfAllSources(){return this._sections.every(function(e){return e.consumer.hasContentsOfAllSources()})}sourceContentFor(e,t){for(let n=0;n<this._sections.length;n++){const r=this._sections[n].consumer.sourceContentFor(e,!0);if(r)return r}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')}_findSectionIndex(e){for(let t=0;t<this._sections.length;t++){const{consumer:n}=this._sections[t];if(n._findSourceIndex(e)!==-1)return t}return-1}generatedPositionFor(e){const t=this._findSectionIndex(h.getArg(e,"source")),n=t>=0?this._sections[t]:null,s=t>=0&&t+1<this._sections.length?this._sections[t+1]:null,r=n&&n.consumer.generatedPositionFor(e);if(r&&r.line!==null){const i=n.generatedOffset.generatedLine-1,l=n.generatedOffset.generatedColumn-1;return r.line===1&&(r.column+=l,typeof r.lastColumn=="number"&&(r.lastColumn+=l)),r.lastColumn===1/0&&s&&r.line===s.generatedOffset.generatedLine&&(r.lastColumn=s.generatedOffset.generatedColumn-2),r.line+=i,r}return{line:null,column:null,lastColumn:null}}allGeneratedPositionsFor(e){const t=this._findSectionIndex(h.getArg(e,"source")),n=t>=0?this._sections[t]:null,s=t>=0&&t+1<this._sections.length?this._sections[t+1]:null;return n?n.consumer.allGeneratedPositionsFor(e).map(r=>{const i=n.generatedOffset.generatedLine-1,l=n.generatedOffset.generatedColumn-1;return r.line===1&&(r.column+=l,typeof r.lastColumn=="number"&&(r.lastColumn+=l)),r.lastColumn===1/0&&s&&r.line===s.generatedOffset.generatedLine&&(r.lastColumn=s.generatedOffset.generatedColumn-2),r.line+=i,r}):[]}eachMapping(e,t,n){this._sections.forEach((s,r)=>{const i=r+1<this._sections.length?this._sections[r+1]:null,{generatedOffset:l}=s,a=l.generatedLine-1,c=l.generatedColumn-1;s.consumer.eachMapping(function(d){d.generatedLine===1&&(d.generatedColumn+=c,typeof d.lastGeneratedColumn=="number"&&(d.lastGeneratedColumn+=c)),d.lastGeneratedColumn===1/0&&i&&d.generatedLine===i.generatedOffset.generatedLine&&(d.lastGeneratedColumn=i.generatedOffset.generatedColumn-2),d.generatedLine+=a,e.call(this,d)},t,n)})}computeColumnSpans(){for(let e=0;e<this._sections.length;e++)this._sections[e].consumer.computeColumnSpans()}destroy(){for(let e=0;e<this._sections.length;e++)this._sections[e].consumer.destroy()}}be.IndexedSourceMapConsumer=Lt;function Tn(o,e){let t=o;typeof o=="string"&&(t=h.parseSourceMapInput(o));const n=t.sections!=null?new Lt(t,e):new V(t,e);return Promise.resolve(n)}function Un(o,e){return V.fromSourceMap(o,e)}var Mt=be.SourceMapConsumer;const In=/\b_?([A-Z]\w*?(?:Component|Directive|Page|Dialog))\b/;function Fn(o){for(const e of o){if(e.isFramework)continue;const t=[e.functionName,e.rawFrame];for(const n of t){if(!n)continue;const s=n.match(In);if(s)return s[1]}}return null}function Dn(o,e,t){if((o.match(/patchedSubscribe/g)??[]).length>=2)return"nested-subscribe";if(/\b__async\b|\bZoneAwarePromise\b|\basync_/.test(o)&&/ngOnInit/.test(o))return"async-init";const r=e.find(l=>!l.isFramework),i=`${(r==null?void 0:r.functionName)??""} ${(r==null?void 0:r.rawFrame)??""}`;return/\.ngOnInit\b/.test(i)?"ng-init":/fromEvent|addEventListener/.test(o)?"global-event":t.includes("Subject")?"subject":/\binterval\b|\btimer\b/.test(o)||t==="Observable"?"timer":"unknown"}function zn(o){return o.filter(e=>!/runtime\/patch/.test(e.file)&&e.functionName!=="patchedSubscribe")}const Bn="/assets/mappings-Dhu04MXZ.wasm";Mt.initialize({"lib/mappings.wasm":Bn});const Hn=[/(?:^|\/)node_modules\//,/webpack[-/]runtime/,/^webpack:\/\/\/runtime\//],Wn=[/\/vite\/deps\//,/\/polyfills[-.]/,/\/runtime[-.]/,/\/zone\.js/,/^webpack:/],qn=/at\s+(?:(.+?)\s+\()?(.+?):(\d+):(\d+)\)?$/;function Gn(o){return Hn.some(e=>e.test(o))}function it(o){return Wn.some(e=>e.test(o))}async function Kn(){return(await fetch("/sessions")).json()}async function Vn(o){return(await fetch(`/sessions/${o}`)).json()}async function Jn(o){try{const n=await fetch(`/source-maps?url=${encodeURIComponent(o)}&raw=1`);if(n.ok){const i=(await n.text()).slice(-4096).match(/\/\/[#@]\s*sourceMappingURL=([^\s]+)/);if(i){const l=i[1].trim();if(l.startsWith("data:application/json")){const a=l.match(/base64,([A-Za-z0-9+/=]+)/);if(a)return JSON.parse(atob(a[1]))}else{const a=new URL(l,o).href,c=await fetch(`/source-maps?url=${encodeURIComponent(a)}`);if(c.ok)return await c.json()}}}}catch{}const e=[o+".map"],t=o.indexOf("?");if(t!==-1){const n=o.slice(0,t),s=o.slice(t);e.push(n+".map"),e.push(n+".map"+s)}for(const n of e)try{const s=await fetch(`/source-maps?url=${encodeURIComponent(n)}`);if(!s.ok)continue;return await s.json()}catch{}return null}function Qn(o,e){const t=[];for(const n of o.split(`
|
|
349
|
+
`)){const s=n.trim();if(!s.startsWith("at "))continue;const r=s.match(qn);if(!r)continue;const i=r[1]??null,l=r[2],a=Number(r[3]),c=Number(r[4]),d=l.split("?")[0],u=e.get(l)??e.get(d);if(!u){t.push({rawFrame:s,file:l,line:a,column:c,isFramework:it(l),functionName:i});continue}let p;try{p=u.originalPositionFor({line:a,column:c})}catch{p={source:null,line:null,column:null,name:null}}const f=p.source??l;t.push({rawFrame:s,file:f,line:p.line??a,column:p.column??c,isFramework:p.source?Gn(p.source):it(l),functionName:p.name??i})}return t}async function Zn(o){var r;const e=new Set;for(const i of o.subscriptions)for(const l of i.stackRaw.matchAll(/(https?:\/\/[^\s)]+?):\d+:\d+/g))e.add(l[1]);const t=new Map;await Promise.all([...e].map(async i=>{const l=await Jn(i);if(!l)return;t.set(i,l);const a=i.split("?")[0];a!==i&&t.set(a,l)}));const n=new Map,s=[];for(const[i,l]of t)try{n.set(i,await new Mt(l))}catch(a){s.push(`${i}: ${a instanceof Error?a.message:String(a)}`)}try{const i=new Set;for(const p of o.meta.navigations)i.add(p.fromRoute);const l=[];let a=0,c=0,d=0,u=0;for(const p of o.subscriptions){if(p.recordingId!==o.meta.recordingId)continue;if(c++,p.closed){d++;continue}if(!i.has(p.route)){u++;continue}const f=Qn(p.stackRaw,n);if(!f.some(ve=>!ve.isFramework)){a++;continue}if((r=f[1])!=null&&r.isFramework){a++;continue}const ye=f.find(ve=>!ve.isFramework),jt=zn(f);l.push({id:p.id,route:p.route,observableKind:p.observableKind,sourceLocation:{file:ye.file,line:ye.line,column:ye.column},componentName:Fn(f),leakKind:Dn(p.stackRaw,f,p.observableKind),stack:jt,retainerChain:[]})}return console.log("[rxjs-leak-finder] build report:",{scanned:c,leaks:l.length,ignored:a,skippedClosed:d,skippedCurrentRoute:u,leftRoutes:[...i],sourceMapsResolved:t.size,sourceMapsAttempted:e.size,consumersBuilt:n.size,consumerFailures:s.length}),s.length>0&&console.warn("[rxjs-leak-finder] consumer build failures:",s.slice(0,5)),{leaks:l,ignoredFrameworkSubscriptions:a,longLivedServiceSubscriptions:[],totalSubscriptionsScanned:c}}finally{for(const i of n.values())try{i.destroy()}catch{}}}const X=document.getElementById("root"),lt=document.getElementById("sessions");async function Nt(){const o=await Kn();o.sort((e,t)=>t.createdAt-e.createdAt),lt.innerHTML="";for(const e of o){const t=document.createElement("div");t.className="session",t.innerHTML=`<div>${new Date(e.createdAt).toLocaleString()}</div><div class="when">${e.subscriptionCount} subs · ${e.recordingId}</div>`,t.addEventListener("click",async()=>{document.querySelectorAll(".session").forEach(n=>n.classList.remove("active")),t.classList.add("active"),X.error=null,X.progressPhase="analyzing";try{const n=await Vn(e.id);X.report=await Zn(n)}catch(n){const s=n instanceof Error?`${n.message}
|
|
350
|
+
${n.stack??""}`:String(n);console.error("[rxjs-leak-finder] buildReport failed:",n),X.error=s}finally{X.progressPhase=null}}),lt.appendChild(t)}}document.addEventListener("rld-open-source",async o=>{const e=o.detail;try{const t=await fetch("/open",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(e)});if(!t.ok){const n=await t.json().catch(()=>({}));console.warn("[rxjs-leak-finder] open failed:",n)}}catch(t){console.warn("[rxjs-leak-finder] open error:",t)}});Nt();setInterval(Nt,3e3);
|
|
Binary file
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html><head><meta charset="utf-8"><title>RxJS Leak Detector</title>
|
|
3
|
+
<style>
|
|
4
|
+
body { margin: 0; font-family: 'SF Mono', Monaco, Consolas, monospace; font-size: 13px;
|
|
5
|
+
background: #2b2b2b; color: #e8eaed; display: grid;
|
|
6
|
+
grid-template-columns: 240px 1fr; min-height: 100vh; }
|
|
7
|
+
aside { background: #1f1f1f; border-right: 1px solid #3c4043; padding: 12px; }
|
|
8
|
+
aside h1 { font-size: 13px; margin: 0 0 12px; color: #9aa0a6; text-transform: uppercase; letter-spacing: 1px; }
|
|
9
|
+
.session { padding: 8px; cursor: pointer; border-radius: 4px; }
|
|
10
|
+
.session:hover { background: #3c4043; }
|
|
11
|
+
.session.active { background: #1a73e8; color: white; }
|
|
12
|
+
.session .when { color: #9aa0a6; font-size: 11px; }
|
|
13
|
+
main { padding: 12px; }
|
|
14
|
+
</style>
|
|
15
|
+
<script type="module" crossorigin src="/assets/index-BqI1esY6.js"></script>
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<aside>
|
|
19
|
+
<h1>Sessions</h1>
|
|
20
|
+
<div id="sessions"></div>
|
|
21
|
+
</aside>
|
|
22
|
+
<main>
|
|
23
|
+
<leak-detector-root id="root"></leak-detector-root>
|
|
24
|
+
</main>
|
|
25
|
+
</body></html>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { EnableConfig, PatchableObservable } from './types.js';
|
|
2
|
+
export type LeakDetectorController = {
|
|
3
|
+
/** Begin a recording session. Captured subscriptions are tracked until {@link stop}. */
|
|
4
|
+
start(): void;
|
|
5
|
+
/** End the current session and POST the report to the dashboard. */
|
|
6
|
+
stop(): Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* Force a route boundary in the recorder. The detector tracks navigations
|
|
9
|
+
* automatically via the History API; call this if your router bypasses it
|
|
10
|
+
* (rare).
|
|
11
|
+
*/
|
|
12
|
+
markNavigation(): void;
|
|
13
|
+
/** Whether {@link start} has been called and {@link stop} has not. */
|
|
14
|
+
readonly isRecording: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Tear down the patch and the widget. After this the page must reload before
|
|
17
|
+
* `enableRxjsLeakDetector` will work again. Useful in tests; rarely needed in apps.
|
|
18
|
+
*/
|
|
19
|
+
teardown(): void;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Patch `Observable.prototype.subscribe`, mount the floating widget, and return
|
|
23
|
+
* a controller. Calling twice in the same page is a no-op (the original
|
|
24
|
+
* controller is returned).
|
|
25
|
+
*
|
|
26
|
+
* Pass your application's `Observable` class — the one from your `rxjs` import.
|
|
27
|
+
* Do **not** call this in production builds.
|
|
28
|
+
*/
|
|
29
|
+
export declare function enableRxjsLeakDetector(ObservableCtor: PatchableObservable, config?: EnableConfig): LeakDetectorController | null;
|