@openrewrite/rewrite 8.63.0 → 8.63.2
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/dist/java/index.d.ts +1 -0
- package/dist/java/index.d.ts.map +1 -1
- package/dist/java/index.js +1 -0
- package/dist/java/index.js.map +1 -1
- package/dist/java/rpc.d.ts +2 -0
- package/dist/java/rpc.d.ts.map +1 -1
- package/dist/java/rpc.js +749 -410
- package/dist/java/rpc.js.map +1 -1
- package/dist/java/tree.d.ts +1 -1
- package/dist/java/tree.d.ts.map +1 -1
- package/dist/java/type-visitor.d.ts +48 -0
- package/dist/java/type-visitor.d.ts.map +1 -0
- package/dist/java/type-visitor.js +260 -0
- package/dist/java/type-visitor.js.map +1 -0
- package/dist/java/type.d.ts +2 -0
- package/dist/java/type.d.ts.map +1 -1
- package/dist/java/type.js +0 -317
- package/dist/java/type.js.map +1 -1
- package/dist/java/visitor.d.ts.map +1 -1
- package/dist/java/visitor.js +579 -363
- package/dist/java/visitor.js.map +1 -1
- package/dist/javascript/preconditions.d.ts +1 -1
- package/dist/javascript/preconditions.d.ts.map +1 -1
- package/dist/javascript/preconditions.js +7 -6
- package/dist/javascript/preconditions.js.map +1 -1
- package/dist/javascript/rpc.js +430 -350
- package/dist/javascript/rpc.js.map +1 -1
- package/dist/javascript/tree.d.ts +1 -1
- package/dist/javascript/tree.d.ts.map +1 -1
- package/dist/javascript/type-mapping.d.ts.map +1 -1
- package/dist/javascript/type-mapping.js +7 -0
- package/dist/javascript/type-mapping.js.map +1 -1
- package/dist/javascript/visitor.d.ts.map +1 -1
- package/dist/javascript/visitor.js +504 -309
- package/dist/javascript/visitor.js.map +1 -1
- package/dist/json/visitor.d.ts.map +1 -1
- package/dist/json/visitor.js +46 -21
- package/dist/json/visitor.js.map +1 -1
- package/dist/rpc/queue.d.ts +7 -4
- package/dist/rpc/queue.d.ts.map +1 -1
- package/dist/rpc/queue.js +22 -32
- package/dist/rpc/queue.js.map +1 -1
- package/dist/rpc/request/generate.d.ts.map +1 -1
- package/dist/rpc/request/generate.js +2 -3
- package/dist/rpc/request/generate.js.map +1 -1
- package/dist/rpc/request/get-languages.d.ts.map +1 -1
- package/dist/rpc/request/get-languages.js +4 -3
- package/dist/rpc/request/get-languages.js.map +1 -1
- package/dist/rpc/request/get-object.d.ts +1 -1
- package/dist/rpc/request/get-object.d.ts.map +1 -1
- package/dist/rpc/request/get-object.js +8 -7
- package/dist/rpc/request/get-object.js.map +1 -1
- package/dist/rpc/request/get-recipes.d.ts.map +1 -1
- package/dist/rpc/request/get-recipes.js +2 -2
- package/dist/rpc/request/get-recipes.js.map +1 -1
- package/dist/rpc/request/index.d.ts +1 -0
- package/dist/rpc/request/index.d.ts.map +1 -1
- package/dist/rpc/request/index.js +1 -0
- package/dist/rpc/request/index.js.map +1 -1
- package/dist/rpc/request/install-recipes.d.ts.map +1 -1
- package/dist/rpc/request/install-recipes.js +30 -21
- package/dist/rpc/request/install-recipes.js.map +1 -1
- package/dist/rpc/request/metrics.d.ts +10 -10
- package/dist/rpc/request/metrics.d.ts.map +1 -1
- package/dist/rpc/request/metrics.js +38 -31
- package/dist/rpc/request/metrics.js.map +1 -1
- package/dist/rpc/request/parse.d.ts.map +1 -1
- package/dist/rpc/request/parse.js +10 -12
- package/dist/rpc/request/parse.js.map +1 -1
- package/dist/rpc/request/prepare-recipe.d.ts.map +1 -1
- package/dist/rpc/request/prepare-recipe.js +4 -4
- package/dist/rpc/request/prepare-recipe.js.map +1 -1
- package/dist/rpc/request/print.d.ts +1 -1
- package/dist/rpc/request/print.d.ts.map +1 -1
- package/dist/rpc/request/print.js +10 -6
- package/dist/rpc/request/print.js.map +1 -1
- package/dist/rpc/request/trace-get-object.d.ts +5 -0
- package/dist/rpc/request/trace-get-object.d.ts.map +1 -0
- package/dist/rpc/request/trace-get-object.js +3 -0
- package/dist/rpc/request/trace-get-object.js.map +1 -0
- package/dist/rpc/request/visit.d.ts.map +1 -1
- package/dist/rpc/request/visit.js +2 -3
- package/dist/rpc/request/visit.js.map +1 -1
- package/dist/rpc/rewrite-rpc.d.ts +2 -3
- package/dist/rpc/rewrite-rpc.d.ts.map +1 -1
- package/dist/rpc/rewrite-rpc.js +14 -5
- package/dist/rpc/rewrite-rpc.js.map +1 -1
- package/dist/rpc/server.d.ts.map +1 -1
- package/dist/rpc/server.js +15 -44
- package/dist/rpc/server.js.map +1 -1
- package/dist/rpc/trace.d.ts +1 -1
- package/dist/rpc/trace.d.ts.map +1 -1
- package/dist/rpc/trace.js +3 -3
- package/dist/rpc/trace.js.map +1 -1
- package/dist/util.d.ts +6 -0
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +14 -0
- package/dist/util.js.map +1 -1
- package/dist/version.txt +1 -1
- package/package.json +1 -1
- package/src/java/index.ts +1 -0
- package/src/java/rpc.ts +726 -537
- package/src/java/tree.ts +1 -1
- package/src/java/type-visitor.ts +241 -0
- package/src/java/type.ts +13 -277
- package/src/java/visitor.ts +581 -378
- package/src/javascript/preconditions.ts +7 -6
- package/src/javascript/rpc.ts +431 -360
- package/src/javascript/tree.ts +1 -1
- package/src/javascript/type-mapping.ts +7 -0
- package/src/javascript/visitor.ts +505 -310
- package/src/json/visitor.ts +47 -22
- package/src/rpc/queue.ts +20 -17
- package/src/rpc/request/generate.ts +31 -25
- package/src/rpc/request/get-languages.ts +18 -10
- package/src/rpc/request/get-object.ts +42 -34
- package/src/rpc/request/get-recipes.ts +15 -8
- package/src/rpc/request/index.ts +1 -0
- package/src/rpc/request/install-recipes.ts +96 -79
- package/src/rpc/request/metrics.ts +54 -48
- package/src/rpc/request/parse.ts +31 -25
- package/src/rpc/request/prepare-recipe.ts +31 -23
- package/src/rpc/request/print.ts +28 -14
- package/src/rpc/request/trace-get-object.ts +4 -0
- package/src/rpc/request/visit.ts +22 -16
- package/src/rpc/rewrite-rpc.ts +23 -10
- package/src/rpc/server.ts +17 -52
- package/src/rpc/trace.ts +3 -3
- package/src/util.ts +14 -0
- package/dist/rpc/chrome-profiler.d.ts +0 -25
- package/dist/rpc/chrome-profiler.d.ts.map +0 -1
- package/dist/rpc/chrome-profiler.js +0 -405
- package/dist/rpc/chrome-profiler.js.map +0 -1
- package/src/rpc/chrome-profiler.ts +0 -373
package/src/util.ts
CHANGED
|
@@ -49,3 +49,17 @@ export function trimIndent(str: string | null | undefined): string {
|
|
|
49
49
|
.join("\n")
|
|
50
50
|
.trim();
|
|
51
51
|
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Helper function to create a new object only if any properties have changed.
|
|
55
|
+
* Compares each property in updates with the original object.
|
|
56
|
+
* Returns the original object if nothing changed, or a new object with updates applied.
|
|
57
|
+
*/
|
|
58
|
+
export function updateIfChanged<O extends object>(original: O, updates: Partial<O>): O {
|
|
59
|
+
for (const key in updates) {
|
|
60
|
+
if (updates[key] !== original[key]) {
|
|
61
|
+
return { ...original, ...updates };
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return original;
|
|
65
|
+
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export declare class ChromeProfiler {
|
|
2
|
-
private traceEvents;
|
|
3
|
-
private memoryInterval?;
|
|
4
|
-
private saveInterval?;
|
|
5
|
-
private session?;
|
|
6
|
-
private readonly pid;
|
|
7
|
-
private readonly tid;
|
|
8
|
-
private readonly tracePath;
|
|
9
|
-
private exitHandlersRegistered;
|
|
10
|
-
private startTime;
|
|
11
|
-
private ttsCounter;
|
|
12
|
-
private lastProfileTime;
|
|
13
|
-
private profileNodes;
|
|
14
|
-
constructor(outputPath?: string);
|
|
15
|
-
start(): Promise<void>;
|
|
16
|
-
private enableCpuProfiling;
|
|
17
|
-
private addMetadataEvents;
|
|
18
|
-
private startMemoryTracking;
|
|
19
|
-
private saveTrace;
|
|
20
|
-
private collectCpuProfile;
|
|
21
|
-
stop(): Promise<void>;
|
|
22
|
-
private addCpuProfileSamples;
|
|
23
|
-
private registerExitHandlers;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=chrome-profiler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chrome-profiler.d.ts","sourceRoot":"","sources":["../../src/rpc/chrome-profiler.ts"],"names":[],"mappings":"AAoBA,qBAAa,cAAc;IACvB,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,OAAO,CAAC,CAAoB;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,YAAY,CAAa;gBAErB,UAAU,CAAC,EAAE,MAAM;IAIzB,KAAK;YA8BG,kBAAkB;IAoChC,OAAO,CAAC,iBAAiB;IAgDzB,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,SAAS;YA8BH,iBAAiB;IA2CzB,IAAI;IAwBV,OAAO,CAAC,oBAAoB;IAsF5B,OAAO,CAAC,oBAAoB;CAS/B"}
|
|
@@ -1,405 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
-
exports.ChromeProfiler = void 0;
|
|
46
|
-
/*
|
|
47
|
-
* Copyright 2025 the original author or authors.
|
|
48
|
-
* <p>
|
|
49
|
-
* Licensed under the Moderne Source Available License (the "License");
|
|
50
|
-
* you may not use this file except in compliance with the License.
|
|
51
|
-
* You may obtain a copy of the License at
|
|
52
|
-
* <p>
|
|
53
|
-
* https://docs.moderne.io/licensing/moderne-source-available-license
|
|
54
|
-
* <p>
|
|
55
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
56
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
57
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
58
|
-
* See the License for the specific language governing permissions and
|
|
59
|
-
* limitations under the License.
|
|
60
|
-
*/
|
|
61
|
-
const fs = __importStar(require("fs"));
|
|
62
|
-
const path = __importStar(require("path"));
|
|
63
|
-
const v8 = __importStar(require("v8"));
|
|
64
|
-
const inspector = __importStar(require("inspector"));
|
|
65
|
-
class ChromeProfiler {
|
|
66
|
-
constructor(outputPath) {
|
|
67
|
-
this.traceEvents = [];
|
|
68
|
-
this.pid = process.pid;
|
|
69
|
-
this.tid = 1; // Main thread
|
|
70
|
-
this.exitHandlersRegistered = false;
|
|
71
|
-
this.startTime = 0;
|
|
72
|
-
this.ttsCounter = 0;
|
|
73
|
-
this.lastProfileTime = 0;
|
|
74
|
-
this.profileNodes = new Map();
|
|
75
|
-
this.tracePath = outputPath || path.join(process.cwd(), 'chrome-trace.json');
|
|
76
|
-
}
|
|
77
|
-
start() {
|
|
78
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
-
this.startTime = Date.now() * 1000; // Convert to microseconds
|
|
80
|
-
this.lastProfileTime = this.startTime;
|
|
81
|
-
// Add initial metadata events
|
|
82
|
-
this.addMetadataEvents();
|
|
83
|
-
// Start V8 Inspector session for CPU profiling
|
|
84
|
-
this.session = new inspector.Session();
|
|
85
|
-
this.session.connect();
|
|
86
|
-
// Enable and start CPU profiling
|
|
87
|
-
yield this.enableCpuProfiling();
|
|
88
|
-
// Start collecting memory data
|
|
89
|
-
this.startMemoryTracking();
|
|
90
|
-
// Save trace periodically and collect CPU profile samples
|
|
91
|
-
this.saveInterval = setInterval(() => __awaiter(this, void 0, void 0, function* () {
|
|
92
|
-
yield this.collectCpuProfile();
|
|
93
|
-
this.saveTrace();
|
|
94
|
-
}), 10000); // Save every 10 seconds
|
|
95
|
-
// Register exit handlers
|
|
96
|
-
if (!this.exitHandlersRegistered) {
|
|
97
|
-
this.registerExitHandlers();
|
|
98
|
-
this.exitHandlersRegistered = true;
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
enableCpuProfiling() {
|
|
103
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
-
if (!this.session)
|
|
105
|
-
return;
|
|
106
|
-
// Enable profiler
|
|
107
|
-
yield new Promise((resolve, reject) => {
|
|
108
|
-
this.session.post('Profiler.enable', (err) => {
|
|
109
|
-
if (err)
|
|
110
|
-
reject(err);
|
|
111
|
-
else
|
|
112
|
-
resolve();
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
// Start sampling
|
|
116
|
-
yield new Promise((resolve, reject) => {
|
|
117
|
-
this.session.post('Profiler.start', {
|
|
118
|
-
// Sample at high frequency for detailed profiling
|
|
119
|
-
samplingInterval: 100
|
|
120
|
-
}, (err) => {
|
|
121
|
-
if (err)
|
|
122
|
-
reject(err);
|
|
123
|
-
else
|
|
124
|
-
resolve();
|
|
125
|
-
});
|
|
126
|
-
});
|
|
127
|
-
// Subscribe to console profile events
|
|
128
|
-
this.session.on('Profiler.consoleProfileStarted', (params) => {
|
|
129
|
-
this.traceEvents.push({
|
|
130
|
-
cat: 'disabled-by-default-devtools.timeline',
|
|
131
|
-
name: 'Profile',
|
|
132
|
-
ph: 'P',
|
|
133
|
-
id: params.id || '1',
|
|
134
|
-
pid: this.pid,
|
|
135
|
-
tid: this.tid,
|
|
136
|
-
ts: Date.now() * 1000
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
addMetadataEvents() {
|
|
142
|
-
// Thread name metadata
|
|
143
|
-
this.traceEvents.push({
|
|
144
|
-
args: { name: 'CrRendererMain' },
|
|
145
|
-
cat: '__metadata',
|
|
146
|
-
name: 'thread_name',
|
|
147
|
-
ph: 'M',
|
|
148
|
-
pid: this.pid,
|
|
149
|
-
tid: this.tid,
|
|
150
|
-
ts: 0
|
|
151
|
-
});
|
|
152
|
-
// Process name metadata
|
|
153
|
-
this.traceEvents.push({
|
|
154
|
-
args: { name: 'Node.js' },
|
|
155
|
-
cat: '__metadata',
|
|
156
|
-
name: 'process_name',
|
|
157
|
-
ph: 'M',
|
|
158
|
-
pid: this.pid,
|
|
159
|
-
tid: 0,
|
|
160
|
-
ts: 0
|
|
161
|
-
});
|
|
162
|
-
// TracingStartedInBrowser event - required for Chrome DevTools
|
|
163
|
-
this.traceEvents.push({
|
|
164
|
-
args: {
|
|
165
|
-
data: {
|
|
166
|
-
frameTreeNodeId: 1,
|
|
167
|
-
frames: [{
|
|
168
|
-
frame: '0x1',
|
|
169
|
-
name: '',
|
|
170
|
-
processId: this.pid,
|
|
171
|
-
url: 'node://process'
|
|
172
|
-
}],
|
|
173
|
-
persistentIds: true
|
|
174
|
-
}
|
|
175
|
-
},
|
|
176
|
-
cat: 'disabled-by-default-devtools.timeline',
|
|
177
|
-
name: 'TracingStartedInBrowser',
|
|
178
|
-
ph: 'I',
|
|
179
|
-
pid: this.pid,
|
|
180
|
-
s: 't',
|
|
181
|
-
tid: this.tid,
|
|
182
|
-
ts: this.startTime,
|
|
183
|
-
tts: this.ttsCounter++
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
startMemoryTracking() {
|
|
187
|
-
// Collect memory data every 50ms (matching Chrome's frequency)
|
|
188
|
-
this.memoryInterval = setInterval(() => {
|
|
189
|
-
const memStats = v8.getHeapStatistics();
|
|
190
|
-
const timestamp = Date.now() * 1000;
|
|
191
|
-
// UpdateCounters event with correct format
|
|
192
|
-
this.traceEvents.push({
|
|
193
|
-
args: {
|
|
194
|
-
data: {
|
|
195
|
-
jsHeapSizeUsed: memStats.used_heap_size,
|
|
196
|
-
jsEventListeners: 0,
|
|
197
|
-
documents: 1,
|
|
198
|
-
nodes: 0
|
|
199
|
-
}
|
|
200
|
-
},
|
|
201
|
-
cat: 'disabled-by-default-devtools.timeline',
|
|
202
|
-
name: 'UpdateCounters',
|
|
203
|
-
ph: 'I', // Instant event, not Counter
|
|
204
|
-
pid: this.pid,
|
|
205
|
-
s: 't', // Required for instant events
|
|
206
|
-
tid: this.tid,
|
|
207
|
-
ts: timestamp,
|
|
208
|
-
tts: this.ttsCounter++
|
|
209
|
-
});
|
|
210
|
-
}, 50); // Every 50ms
|
|
211
|
-
}
|
|
212
|
-
saveTrace() {
|
|
213
|
-
const trace = {
|
|
214
|
-
metadata: {
|
|
215
|
-
'command-line': process.argv.join(' '),
|
|
216
|
-
'cpu-brand': 'Node.js V8',
|
|
217
|
-
'dataOrigin': 'TraceEvents',
|
|
218
|
-
'highres-ticks': true,
|
|
219
|
-
'hostname': 'localhost',
|
|
220
|
-
'num-cpus': require('os').cpus().length,
|
|
221
|
-
'physical-memory': require('os').totalmem(),
|
|
222
|
-
'platform': process.platform,
|
|
223
|
-
'process-uptime': process.uptime(),
|
|
224
|
-
'product-version': `Node.js ${process.version}`,
|
|
225
|
-
'protocol-version': '1.0',
|
|
226
|
-
'source': 'NodeProfiler',
|
|
227
|
-
'startTime': new Date(this.startTime / 1000).toISOString(),
|
|
228
|
-
'trace-config': '',
|
|
229
|
-
'user-agent': `Node.js/${process.version}`,
|
|
230
|
-
'v8-version': process.versions.v8
|
|
231
|
-
},
|
|
232
|
-
traceEvents: this.traceEvents
|
|
233
|
-
};
|
|
234
|
-
try {
|
|
235
|
-
fs.writeFileSync(this.tracePath, JSON.stringify(trace, null, 2));
|
|
236
|
-
}
|
|
237
|
-
catch (e) {
|
|
238
|
-
// Ignore write errors
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
collectCpuProfile() {
|
|
242
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
243
|
-
if (!this.session)
|
|
244
|
-
return;
|
|
245
|
-
try {
|
|
246
|
-
// Stop current profiling to get samples
|
|
247
|
-
const profile = yield new Promise((resolve, reject) => {
|
|
248
|
-
this.session.post('Profiler.stop', (err, params) => {
|
|
249
|
-
if (err)
|
|
250
|
-
reject(err);
|
|
251
|
-
else
|
|
252
|
-
resolve(params.profile);
|
|
253
|
-
});
|
|
254
|
-
});
|
|
255
|
-
// Convert CPU profile samples to trace events
|
|
256
|
-
if (profile && profile.samples) {
|
|
257
|
-
this.addCpuProfileSamples(profile);
|
|
258
|
-
}
|
|
259
|
-
// Restart profiling for the next interval
|
|
260
|
-
yield new Promise((resolve, reject) => {
|
|
261
|
-
this.session.post('Profiler.start', {
|
|
262
|
-
samplingInterval: 100
|
|
263
|
-
}, (err) => {
|
|
264
|
-
if (err)
|
|
265
|
-
reject(err);
|
|
266
|
-
else
|
|
267
|
-
resolve();
|
|
268
|
-
});
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
catch (e) {
|
|
272
|
-
// Ignore errors and try to restart
|
|
273
|
-
try {
|
|
274
|
-
yield new Promise((resolve, reject) => {
|
|
275
|
-
this.session.post('Profiler.start', {
|
|
276
|
-
samplingInterval: 100
|
|
277
|
-
}, (err) => {
|
|
278
|
-
if (err)
|
|
279
|
-
reject(err);
|
|
280
|
-
else
|
|
281
|
-
resolve();
|
|
282
|
-
});
|
|
283
|
-
});
|
|
284
|
-
}
|
|
285
|
-
catch (e2) {
|
|
286
|
-
// Ignore restart errors
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
stop() {
|
|
292
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
293
|
-
// Clear intervals
|
|
294
|
-
if (this.memoryInterval) {
|
|
295
|
-
clearInterval(this.memoryInterval);
|
|
296
|
-
this.memoryInterval = undefined;
|
|
297
|
-
}
|
|
298
|
-
if (this.saveInterval) {
|
|
299
|
-
clearInterval(this.saveInterval);
|
|
300
|
-
this.saveInterval = undefined;
|
|
301
|
-
}
|
|
302
|
-
// Collect final CPU profile
|
|
303
|
-
yield this.collectCpuProfile();
|
|
304
|
-
// Disconnect session
|
|
305
|
-
if (this.session) {
|
|
306
|
-
this.session.disconnect();
|
|
307
|
-
this.session = undefined;
|
|
308
|
-
}
|
|
309
|
-
// Save final trace
|
|
310
|
-
this.saveTrace();
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
addCpuProfileSamples(profile) {
|
|
314
|
-
if (!profile.samples || !profile.timeDeltas || !profile.nodes)
|
|
315
|
-
return;
|
|
316
|
-
// Use the last profile time as starting point to maintain continuity
|
|
317
|
-
let currentTime = this.lastProfileTime;
|
|
318
|
-
// Update nodes map with new nodes
|
|
319
|
-
profile.nodes.forEach((node) => {
|
|
320
|
-
this.profileNodes.set(node.id, node);
|
|
321
|
-
});
|
|
322
|
-
// Convert samples to trace events with actual function names
|
|
323
|
-
profile.samples.forEach((nodeId, index) => {
|
|
324
|
-
const node = this.profileNodes.get(nodeId);
|
|
325
|
-
if (!node)
|
|
326
|
-
return;
|
|
327
|
-
currentTime += (profile.timeDeltas[index] || 0);
|
|
328
|
-
const callFrame = node.callFrame;
|
|
329
|
-
if (callFrame) {
|
|
330
|
-
// Clean up function name for display
|
|
331
|
-
let functionName = callFrame.functionName || '(anonymous)';
|
|
332
|
-
if (functionName === '' || functionName === '(root)') {
|
|
333
|
-
functionName = '(program)';
|
|
334
|
-
}
|
|
335
|
-
// Extract filename from URL or use a meaningful default
|
|
336
|
-
let url = callFrame.url || '';
|
|
337
|
-
let fileName;
|
|
338
|
-
if (url) {
|
|
339
|
-
// Clean up the URL for display
|
|
340
|
-
if (url.startsWith('file://')) {
|
|
341
|
-
url = url.substring(7);
|
|
342
|
-
}
|
|
343
|
-
const parts = url.split('/');
|
|
344
|
-
fileName = parts[parts.length - 1] || url;
|
|
345
|
-
// Special handling for node internals
|
|
346
|
-
if (url.startsWith('node:')) {
|
|
347
|
-
fileName = url;
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
else {
|
|
351
|
-
// No URL - try to provide context from function name
|
|
352
|
-
if (functionName === '(garbage collector)') {
|
|
353
|
-
fileName = 'v8::gc';
|
|
354
|
-
}
|
|
355
|
-
else if (functionName === '(idle)') {
|
|
356
|
-
fileName = 'v8::idle';
|
|
357
|
-
}
|
|
358
|
-
else if (functionName === '(program)') {
|
|
359
|
-
fileName = 'main';
|
|
360
|
-
}
|
|
361
|
-
else if (functionName.includes('::')) {
|
|
362
|
-
// C++ internal function
|
|
363
|
-
fileName = 'native';
|
|
364
|
-
}
|
|
365
|
-
else {
|
|
366
|
-
// JavaScript code without source mapping
|
|
367
|
-
fileName = 'javascript';
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
this.traceEvents.push({
|
|
371
|
-
args: {
|
|
372
|
-
data: {
|
|
373
|
-
columnNumber: callFrame.columnNumber || 0,
|
|
374
|
-
frame: `0x${nodeId.toString(16)}`,
|
|
375
|
-
functionName: functionName,
|
|
376
|
-
lineNumber: callFrame.lineNumber || 0,
|
|
377
|
-
scriptId: String(callFrame.scriptId || 0),
|
|
378
|
-
url: url || fileName // Use fileName as URL if no real URL
|
|
379
|
-
}
|
|
380
|
-
},
|
|
381
|
-
cat: 'devtools.timeline',
|
|
382
|
-
dur: Math.max(profile.timeDeltas[index] || 1, 1),
|
|
383
|
-
name: 'FunctionCall',
|
|
384
|
-
ph: 'X',
|
|
385
|
-
pid: this.pid,
|
|
386
|
-
tid: this.tid,
|
|
387
|
-
ts: Math.floor(currentTime),
|
|
388
|
-
tts: this.ttsCounter++
|
|
389
|
-
});
|
|
390
|
-
}
|
|
391
|
-
});
|
|
392
|
-
// Update lastProfileTime to maintain continuity for the next batch
|
|
393
|
-
this.lastProfileTime = currentTime;
|
|
394
|
-
}
|
|
395
|
-
registerExitHandlers() {
|
|
396
|
-
const cleanup = () => __awaiter(this, void 0, void 0, function* () {
|
|
397
|
-
yield this.stop();
|
|
398
|
-
});
|
|
399
|
-
process.once('beforeExit', cleanup);
|
|
400
|
-
process.once('SIGINT', cleanup);
|
|
401
|
-
process.once('SIGTERM', cleanup);
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
exports.ChromeProfiler = ChromeProfiler;
|
|
405
|
-
//# sourceMappingURL=chrome-profiler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chrome-profiler.js","sourceRoot":"","sources":["../../src/rpc/chrome-profiler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;GAcG;AACH,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,qDAAuC;AAEvC,MAAa,cAAc;IAcvB,YAAY,UAAmB;QAbvB,gBAAW,GAAU,EAAE,CAAC;QAIf,QAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QAClB,QAAG,GAAG,CAAC,CAAC,CAAC,cAAc;QAEhC,2BAAsB,GAAG,KAAK,CAAC;QAC/B,cAAS,GAAW,CAAC,CAAC;QACtB,eAAU,GAAW,CAAC,CAAC;QACvB,oBAAe,GAAW,CAAC,CAAC;QAC5B,iBAAY,GAAG,IAAI,GAAG,EAAE,CAAC;QAG7B,IAAI,CAAC,SAAS,GAAG,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACjF,CAAC;IAEK,KAAK;;YACP,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,0BAA0B;YAC9D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC;YAEtC,8BAA8B;YAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAEzB,+CAA+C;YAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAEvB,iCAAiC;YACjC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAEhC,+BAA+B;YAC/B,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAE3B,0DAA0D;YAC1D,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAS,EAAE;gBACvC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC/B,IAAI,CAAC,SAAS,EAAE,CAAC;YACrB,CAAC,CAAA,EAAE,KAAK,CAAC,CAAC,CAAC,wBAAwB;YAEnC,yBAAyB;YACzB,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC/B,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAC5B,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;YACvC,CAAC;QACL,CAAC;KAAA;IAEa,kBAAkB;;YAC5B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE1B,kBAAkB;YAClB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACxC,IAAI,CAAC,OAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC1C,IAAI,GAAG;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;wBAChB,OAAO,EAAE,CAAC;gBACnB,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,iBAAiB;YACjB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACxC,IAAI,CAAC,OAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE;oBACjC,kDAAkD;oBAClD,gBAAgB,EAAE,GAAG;iBACxB,EAAE,CAAC,GAAG,EAAE,EAAE;oBACP,IAAI,GAAG;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;wBAChB,OAAO,EAAE,CAAC;gBACnB,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,sCAAsC;YACtC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,gCAAgC,EAAE,CAAC,MAAW,EAAE,EAAE;gBAC9D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;oBAClB,GAAG,EAAE,uCAAuC;oBAC5C,IAAI,EAAE,SAAS;oBACf,EAAE,EAAE,GAAG;oBACP,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,GAAG;oBACpB,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;iBACxB,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC;KAAA;IAEO,iBAAiB;QACrB,uBAAuB;QACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAClB,IAAI,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;YAChC,GAAG,EAAE,YAAY;YACjB,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE,GAAG;YACP,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,EAAE,EAAE,CAAC;SACR,CAAC,CAAC;QAEH,wBAAwB;QACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAClB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;YACzB,GAAG,EAAE,YAAY;YACjB,IAAI,EAAE,cAAc;YACpB,EAAE,EAAE,GAAG;YACP,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,GAAG,EAAE,CAAC;YACN,EAAE,EAAE,CAAC;SACR,CAAC,CAAC;QAEH,+DAA+D;QAC/D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAClB,IAAI,EAAE;gBACF,IAAI,EAAE;oBACF,eAAe,EAAE,CAAC;oBAClB,MAAM,EAAE,CAAC;4BACL,KAAK,EAAE,KAAK;4BACZ,IAAI,EAAE,EAAE;4BACR,SAAS,EAAE,IAAI,CAAC,GAAG;4BACnB,GAAG,EAAE,gBAAgB;yBACxB,CAAC;oBACF,aAAa,EAAE,IAAI;iBACtB;aACJ;YACD,GAAG,EAAE,uCAAuC;YAC5C,IAAI,EAAE,yBAAyB;YAC/B,EAAE,EAAE,GAAG;YACP,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,CAAC,EAAE,GAAG;YACN,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,EAAE,EAAE,IAAI,CAAC,SAAS;YAClB,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE;SACzB,CAAC,CAAC;IACP,CAAC;IAEO,mBAAmB;QACvB,+DAA+D;QAC/D,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;YACnC,MAAM,QAAQ,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YAEpC,2CAA2C;YAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBAClB,IAAI,EAAE;oBACF,IAAI,EAAE;wBACF,cAAc,EAAE,QAAQ,CAAC,cAAc;wBACvC,gBAAgB,EAAE,CAAC;wBACnB,SAAS,EAAE,CAAC;wBACZ,KAAK,EAAE,CAAC;qBACX;iBACJ;gBACD,GAAG,EAAE,uCAAuC;gBAC5C,IAAI,EAAE,gBAAgB;gBACtB,EAAE,EAAE,GAAG,EAAE,6BAA6B;gBACtC,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,CAAC,EAAE,GAAG,EAAE,8BAA8B;gBACtC,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,EAAE,EAAE,SAAS;gBACb,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE;aACzB,CAAC,CAAC;QACP,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa;IACzB,CAAC;IAEO,SAAS;QACb,MAAM,KAAK,GAAG;YACV,QAAQ,EAAE;gBACN,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBACtC,WAAW,EAAE,YAAY;gBACzB,YAAY,EAAE,aAAa;gBAC3B,eAAe,EAAE,IAAI;gBACrB,UAAU,EAAE,WAAW;gBACvB,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM;gBACvC,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;gBAC3C,UAAU,EAAE,OAAO,CAAC,QAAQ;gBAC5B,gBAAgB,EAAE,OAAO,CAAC,MAAM,EAAE;gBAClC,iBAAiB,EAAE,WAAW,OAAO,CAAC,OAAO,EAAE;gBAC/C,kBAAkB,EAAE,KAAK;gBACzB,QAAQ,EAAE,cAAc;gBACxB,WAAW,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;gBAC1D,cAAc,EAAE,EAAE;gBAClB,YAAY,EAAE,WAAW,OAAO,CAAC,OAAO,EAAE;gBAC1C,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;aACpC;YACD,WAAW,EAAE,IAAI,CAAC,WAAW;SAChC,CAAC;QAEF,IAAI,CAAC;YACD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,sBAAsB;QAC1B,CAAC;IACL,CAAC;IAEa,iBAAiB;;YAC3B,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAE1B,IAAI,CAAC;gBACD,wCAAwC;gBACxC,MAAM,OAAO,GAAG,MAAM,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBACvD,IAAI,CAAC,OAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;wBAChD,IAAI,GAAG;4BAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;4BAChB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACjC,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;gBAEH,8CAA8C;gBAC9C,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;oBAC7B,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;gBACvC,CAAC;gBAED,0CAA0C;gBAC1C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBACxC,IAAI,CAAC,OAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE;wBACjC,gBAAgB,EAAE,GAAG;qBACxB,EAAE,CAAC,GAAG,EAAE,EAAE;wBACP,IAAI,GAAG;4BAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;4BAChB,OAAO,EAAE,CAAC;oBACnB,CAAC,CAAC,CAAC;gBACP,CAAC,CAAC,CAAC;YACP,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,mCAAmC;gBACnC,IAAI,CAAC;oBACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;wBACxC,IAAI,CAAC,OAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE;4BACjC,gBAAgB,EAAE,GAAG;yBACxB,EAAE,CAAC,GAAG,EAAE,EAAE;4BACP,IAAI,GAAG;gCAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;gCAChB,OAAO,EAAE,CAAC;wBACnB,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;gBACP,CAAC;gBAAC,OAAO,EAAE,EAAE,CAAC;oBACV,wBAAwB;gBAC5B,CAAC;YACL,CAAC;QACL,CAAC;KAAA;IAEK,IAAI;;YACN,kBAAkB;YAClB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACnC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YACpC,CAAC;YACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACjC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;YAClC,CAAC;YAED,4BAA4B;YAC5B,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAE/B,qBAAqB;YACrB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC1B,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YAC7B,CAAC;YAED,mBAAmB;YACnB,IAAI,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC;KAAA;IAEO,oBAAoB,CAAC,OAAY;QACrC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO;QAEtE,qEAAqE;QACrE,IAAI,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC;QAEvC,kCAAkC;QAClC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;YAChC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,6DAA6D;QAC7D,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAc,EAAE,KAAa,EAAE,EAAE;YACtD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI;gBAAE,OAAO;YAElB,WAAW,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAEhD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YACjC,IAAI,SAAS,EAAE,CAAC;gBACZ,qCAAqC;gBACrC,IAAI,YAAY,GAAG,SAAS,CAAC,YAAY,IAAI,aAAa,CAAC;gBAC3D,IAAI,YAAY,KAAK,EAAE,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;oBACnD,YAAY,GAAG,WAAW,CAAC;gBAC/B,CAAC;gBAED,wDAAwD;gBACxD,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC9B,IAAI,QAAgB,CAAC;gBAErB,IAAI,GAAG,EAAE,CAAC;oBACN,+BAA+B;oBAC/B,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;wBAC5B,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC3B,CAAC;oBACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC7B,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;oBAE1C,sCAAsC;oBACtC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC1B,QAAQ,GAAG,GAAG,CAAC;oBACnB,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,qDAAqD;oBACrD,IAAI,YAAY,KAAK,qBAAqB,EAAE,CAAC;wBACzC,QAAQ,GAAG,QAAQ,CAAC;oBACxB,CAAC;yBAAM,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;wBACnC,QAAQ,GAAG,UAAU,CAAC;oBAC1B,CAAC;yBAAM,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;wBACtC,QAAQ,GAAG,MAAM,CAAC;oBACtB,CAAC;yBAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBACrC,wBAAwB;wBACxB,QAAQ,GAAG,QAAQ,CAAC;oBACxB,CAAC;yBAAM,CAAC;wBACJ,yCAAyC;wBACzC,QAAQ,GAAG,YAAY,CAAC;oBAC5B,CAAC;gBACL,CAAC;gBAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;oBAClB,IAAI,EAAE;wBACF,IAAI,EAAE;4BACF,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,CAAC;4BACzC,KAAK,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;4BACjC,YAAY,EAAE,YAAY;4BAC1B,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,CAAC;4BACrC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,QAAQ,IAAI,CAAC,CAAC;4BACzC,GAAG,EAAE,GAAG,IAAI,QAAQ,CAAE,qCAAqC;yBAC9D;qBACJ;oBACD,GAAG,EAAE,mBAAmB;oBACxB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAChD,IAAI,EAAE,cAAc;oBACpB,EAAE,EAAE,GAAG;oBACP,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;oBAC3B,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE;iBACzB,CAAC,CAAC;YACP,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,mEAAmE;QACnE,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;IACvC,CAAC;IAEO,oBAAoB;QACxB,MAAM,OAAO,GAAG,GAAS,EAAE;YACvB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC,CAAA,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;CACJ;AAhWD,wCAgWC"}
|