@player-tools/devtools-profiler-web-plugin 0.6.1--canary.125.2996

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.
Files changed (38) hide show
  1. package/dist/cjs/index.cjs +847 -0
  2. package/dist/cjs/index.cjs.map +1 -0
  3. package/dist/index.legacy-esm.js +812 -0
  4. package/dist/index.mjs +812 -0
  5. package/dist/index.mjs.map +1 -0
  6. package/package.json +42 -0
  7. package/src/WrapperComponent.tsx +121 -0
  8. package/src/__tests__/__snapshots__/index.test.tsx.snap +90 -0
  9. package/src/__tests__/index.test.tsx +307 -0
  10. package/src/constants/index.ts +28 -0
  11. package/src/content/common/Screen.tsx +20 -0
  12. package/src/content/common/index.ts +1 -0
  13. package/src/content/index.ts +19 -0
  14. package/src/content/navigation/index.ts +27 -0
  15. package/src/content/schema/index.ts +22 -0
  16. package/src/content/views/ProfilerView.tsx +75 -0
  17. package/src/content/views/index.ts +3 -0
  18. package/src/helpers/__tests__/genDataChangeTransaction.test.ts +40 -0
  19. package/src/helpers/__tests__/profiler.test.ts +104 -0
  20. package/src/helpers/genDataChangeTransaction.ts +39 -0
  21. package/src/helpers/index.ts +2 -0
  22. package/src/helpers/profiler.ts +111 -0
  23. package/src/index.tsx +490 -0
  24. package/src/types.ts +26 -0
  25. package/types/WrapperComponent.d.ts +4 -0
  26. package/types/constants/index.d.ts +15 -0
  27. package/types/content/common/Screen.d.ts +8 -0
  28. package/types/content/common/index.d.ts +2 -0
  29. package/types/content/index.d.ts +31 -0
  30. package/types/content/navigation/index.d.ts +7 -0
  31. package/types/content/schema/index.d.ts +23 -0
  32. package/types/content/views/ProfilerView.d.ts +3 -0
  33. package/types/content/views/index.d.ts +3 -0
  34. package/types/helpers/genDataChangeTransaction.d.ts +16 -0
  35. package/types/helpers/index.d.ts +3 -0
  36. package/types/helpers/profiler.d.ts +18 -0
  37. package/types/index.d.ts +7 -0
  38. package/types/types.d.ts +29 -0
package/src/index.tsx ADDED
@@ -0,0 +1,490 @@
1
+ import type { ReactPlayer, ReactPlayerPlugin } from "@player-ui/react";
2
+ import React from "react";
3
+ import { PLUGIN_ID } from "./constants";
4
+ import { ProfilerNode } from "./types";
5
+ import { WrapperComponent } from "./WrapperComponent";
6
+ import { profiler } from "./helpers";
7
+
8
+ export class ProfilerPlugin implements ReactPlayerPlugin {
9
+ name = PLUGIN_ID;
10
+
11
+ checkIfDevtoolsIsActive() {
12
+ return localStorage.getItem("player-ui-devtools-active") === "true";
13
+ }
14
+
15
+ applyReact({ player, hooks: { webComponent } }: ReactPlayer) {
16
+ if (!this.checkIfDevtoolsIsActive()) {
17
+ return;
18
+ }
19
+
20
+ const { start, startTimer, endTimer, stopProfiler } = profiler();
21
+
22
+ /** function to tap into hooks and start the profiler */
23
+ const startProfiler = () => {
24
+ start();
25
+
26
+ player.hooks.onStart.intercept({
27
+ call: () => {
28
+ startTimer("onStart");
29
+ },
30
+ });
31
+
32
+ player.hooks.onStart.tap(this.name, () => {
33
+ endTimer({ hookName: "onStart" });
34
+ });
35
+
36
+ player.hooks.flowController.intercept({
37
+ call: (fc) => {
38
+ startTimer("flowController");
39
+ fc.hooks.flow.intercept({
40
+ call: () => {
41
+ startTimer("flow");
42
+ },
43
+ });
44
+ },
45
+ });
46
+
47
+ player.hooks.flowController.tap(this.name, (fc) => {
48
+ let flowControllerNode: ProfilerNode = {
49
+ name: "flowController",
50
+ children: [],
51
+ };
52
+
53
+ fc.hooks.flow.tap(this.name, () => {
54
+ endTimer({ hookName: "flow", parentNode: flowControllerNode });
55
+ });
56
+
57
+ flowControllerNode = endTimer({
58
+ hookName: flowControllerNode.name,
59
+ children: flowControllerNode.children,
60
+ });
61
+ });
62
+
63
+ player.hooks.viewController.intercept({
64
+ call: (vc) => {
65
+ startTimer("viewController");
66
+ vc.hooks.resolveView.intercept({
67
+ call: () => {
68
+ startTimer("resolveView");
69
+ },
70
+ });
71
+ vc.hooks.view.intercept({
72
+ call: () => {
73
+ startTimer("view");
74
+ },
75
+ });
76
+ },
77
+ });
78
+
79
+ player.hooks.viewController.tap(this.name, (vc) => {
80
+ let viewControllerNode: ProfilerNode = {
81
+ name: "viewController",
82
+ children: [],
83
+ };
84
+
85
+ vc.hooks.resolveView.tap(this.name, (asset) => {
86
+ endTimer({ hookName: "resolveView", parentNode: viewControllerNode });
87
+ return asset;
88
+ });
89
+
90
+ viewControllerNode = endTimer({
91
+ hookName: viewControllerNode.name,
92
+ children: viewControllerNode.children,
93
+ });
94
+ });
95
+
96
+ player.hooks.view.intercept({
97
+ call: (view) => {
98
+ startTimer("view");
99
+
100
+ view.hooks.onUpdate.intercept({
101
+ call: () => {
102
+ startTimer("onUpdate");
103
+ },
104
+ });
105
+
106
+ view.hooks.parser.intercept({
107
+ call: () => {
108
+ startTimer("parser");
109
+ },
110
+ });
111
+
112
+ view.hooks.resolver.intercept({
113
+ call: () => {
114
+ startTimer("resolver");
115
+ },
116
+ });
117
+
118
+ view.hooks.templatePlugin.intercept({
119
+ call: () => {
120
+ startTimer("templatePlugin");
121
+ },
122
+ });
123
+ },
124
+ });
125
+
126
+ player.hooks.view.tap(this.name, (view) => {
127
+ let viewNode: ProfilerNode = {
128
+ name: "view",
129
+ children: [],
130
+ };
131
+
132
+ view.hooks.onUpdate.tap(this.name, () => {
133
+ endTimer({ hookName: "onUpdate", parentNode: viewNode });
134
+ });
135
+
136
+ view.hooks.parser.tap(this.name, () => {
137
+ endTimer({ hookName: "parser", parentNode: viewNode });
138
+ });
139
+
140
+ view.hooks.resolver.tap(this.name, () => {
141
+ endTimer({ hookName: "resolver", parentNode: viewNode });
142
+ });
143
+
144
+ view.hooks.templatePlugin.tap(this.name, () => {
145
+ endTimer({ hookName: "templatePlugin", parentNode: viewNode });
146
+ });
147
+
148
+ viewNode = endTimer({
149
+ hookName: viewNode.name,
150
+ children: viewNode.children,
151
+ });
152
+ });
153
+
154
+ player.hooks.expressionEvaluator.intercept({
155
+ call: (ev) => {
156
+ startTimer("expressionEvaluator");
157
+
158
+ ev.hooks.resolve.intercept({
159
+ call: () => {
160
+ startTimer("resolve");
161
+ },
162
+ });
163
+
164
+ ev.hooks.onError.intercept({
165
+ call: () => {
166
+ startTimer("onError");
167
+ },
168
+ });
169
+ },
170
+ });
171
+
172
+ player.hooks.expressionEvaluator.tap(this.name, (ev) => {
173
+ let expressionEvaluatorNode: ProfilerNode = {
174
+ name: "expressionEvaluator",
175
+ children: [],
176
+ };
177
+
178
+ ev.hooks.resolve.tap(this.name, () => {
179
+ endTimer({
180
+ hookName: "resolve",
181
+ parentNode: expressionEvaluatorNode,
182
+ });
183
+ });
184
+
185
+ ev.hooks.onError.tap(this.name, () => {
186
+ endTimer({
187
+ hookName: "onError",
188
+ parentNode: expressionEvaluatorNode,
189
+ });
190
+ return undefined;
191
+ });
192
+
193
+ expressionEvaluatorNode = endTimer({
194
+ hookName: expressionEvaluatorNode.name,
195
+ children: expressionEvaluatorNode.children,
196
+ });
197
+ });
198
+
199
+ player.hooks.dataController.intercept({
200
+ call: (dc) => {
201
+ startTimer("dataController");
202
+
203
+ dc.hooks.resolve.intercept({
204
+ call: () => {
205
+ startTimer("resolve");
206
+ },
207
+ });
208
+ dc.hooks.resolveDataStages.intercept({
209
+ call: () => {
210
+ startTimer("resolveDataStages");
211
+ },
212
+ });
213
+ dc.hooks.resolveDefaultValue.intercept({
214
+ call: () => {
215
+ startTimer("resolveDefaultValue");
216
+ },
217
+ });
218
+ dc.hooks.onDelete.intercept({
219
+ call: () => {
220
+ startTimer("onDelete");
221
+ },
222
+ });
223
+ dc.hooks.onSet.intercept({
224
+ call: () => {
225
+ startTimer("onSet");
226
+ },
227
+ });
228
+ dc.hooks.onGet.intercept({
229
+ call: () => {
230
+ startTimer("onGet");
231
+ },
232
+ });
233
+ dc.hooks.onUpdate.intercept({
234
+ call: () => {
235
+ startTimer("onUpdate");
236
+ },
237
+ });
238
+ dc.hooks.format.intercept({
239
+ call: () => {
240
+ startTimer("resolve");
241
+ },
242
+ });
243
+ dc.hooks.deformat.intercept({
244
+ call: () => {
245
+ startTimer("deformat");
246
+ },
247
+ });
248
+ dc.hooks.serialize.intercept({
249
+ call: () => {
250
+ startTimer("serialize");
251
+ },
252
+ });
253
+ },
254
+ });
255
+
256
+ player.hooks.dataController.tap(this.name, (dc) => {
257
+ let dataControllerNode: ProfilerNode = {
258
+ name: "dataController",
259
+ children: [],
260
+ };
261
+
262
+ dc.hooks.resolve.tap(this.name, () => {
263
+ endTimer({ hookName: "resolve", parentNode: dataControllerNode });
264
+ });
265
+
266
+ dc.hooks.resolveDataStages.tap(this.name, (dataPipeline) => {
267
+ endTimer({
268
+ hookName: "resolveDataStages",
269
+ parentNode: dataControllerNode,
270
+ });
271
+ return dataPipeline;
272
+ });
273
+
274
+ dc.hooks.resolveDefaultValue.tap(this.name, () => {
275
+ endTimer({
276
+ hookName: "resolveDefaultValue",
277
+ parentNode: dataControllerNode,
278
+ });
279
+ });
280
+
281
+ dc.hooks.onDelete.tap(this.name, () => {
282
+ endTimer({ hookName: "onDelete", parentNode: dataControllerNode });
283
+ });
284
+
285
+ dc.hooks.onSet.tap(this.name, () => {
286
+ endTimer({ hookName: "onSet", parentNode: dataControllerNode });
287
+ });
288
+
289
+ dc.hooks.onGet.tap(this.name, () => {
290
+ endTimer({ hookName: "onGet", parentNode: dataControllerNode });
291
+ });
292
+
293
+ dc.hooks.onUpdate.tap(this.name, () => {
294
+ endTimer({ hookName: "onUpdate", parentNode: dataControllerNode });
295
+ });
296
+
297
+ dc.hooks.format.tap(this.name, () => {
298
+ endTimer({ hookName: "format", parentNode: dataControllerNode });
299
+ });
300
+
301
+ dc.hooks.deformat.tap(this.name, () => {
302
+ endTimer({ hookName: "deformat", parentNode: dataControllerNode });
303
+ });
304
+
305
+ dc.hooks.serialize.tap(this.name, () => {
306
+ endTimer({ hookName: "serialize", parentNode: dataControllerNode });
307
+ });
308
+
309
+ dataControllerNode = endTimer({
310
+ hookName: dataControllerNode.name,
311
+ children: dataControllerNode.children,
312
+ });
313
+ });
314
+
315
+ player.hooks.schema.intercept({
316
+ call: (sc) => {
317
+ startTimer("schema");
318
+ sc.hooks.resolveTypeForBinding.intercept({
319
+ call: () => {
320
+ startTimer("resolveTypeForBinding");
321
+ },
322
+ });
323
+ },
324
+ });
325
+
326
+ player.hooks.schema.tap(this.name, (sc) => {
327
+ let schemaNode: ProfilerNode = {
328
+ name: "schema",
329
+ children: [],
330
+ };
331
+
332
+ sc.hooks.resolveTypeForBinding.tap(this.name, (dataType) => {
333
+ endTimer({
334
+ hookName: "resolveTypeForBinding",
335
+ parentNode: schemaNode,
336
+ });
337
+ return dataType;
338
+ });
339
+
340
+ schemaNode = endTimer({
341
+ hookName: schemaNode.name,
342
+ children: schemaNode.children,
343
+ });
344
+ });
345
+
346
+ player.hooks.validationController.intercept({
347
+ call: (vc) => {
348
+ startTimer("validationController");
349
+
350
+ vc.hooks.createValidatorRegistry.intercept({
351
+ call: () => {
352
+ startTimer("createValidatorRegistry");
353
+ },
354
+ });
355
+ vc.hooks.onAddValidation.intercept({
356
+ call: () => {
357
+ startTimer("onAddValidation");
358
+ },
359
+ });
360
+ vc.hooks.onRemoveValidation.intercept({
361
+ call: () => {
362
+ startTimer("onRemoveValidation");
363
+ },
364
+ });
365
+ },
366
+ });
367
+
368
+ player.hooks.validationController.tap(this.name, (vc) => {
369
+ let validationControllerNode: ProfilerNode = {
370
+ name: "validationController",
371
+ children: [],
372
+ };
373
+
374
+ vc.hooks.createValidatorRegistry.tap(this.name, () => {
375
+ endTimer({
376
+ hookName: "createValidatorRegistry",
377
+ parentNode: validationControllerNode,
378
+ });
379
+ });
380
+
381
+ vc.hooks.onAddValidation.tap(this.name, (validationResponse) => {
382
+ endTimer({
383
+ hookName: "onAddValidation",
384
+ parentNode: validationControllerNode,
385
+ });
386
+ return validationResponse;
387
+ });
388
+
389
+ vc.hooks.onRemoveValidation.tap(this.name, (validationResponse) => {
390
+ endTimer({
391
+ hookName: "onRemoveValidation",
392
+ parentNode: validationControllerNode,
393
+ });
394
+ return validationResponse;
395
+ });
396
+
397
+ validationControllerNode = endTimer({
398
+ hookName: validationControllerNode.name,
399
+ children: validationControllerNode.children,
400
+ });
401
+ });
402
+
403
+ player.hooks.bindingParser.intercept({
404
+ call: (bp) => {
405
+ startTimer("bindingParser");
406
+ bp.hooks.skipOptimization.intercept({
407
+ call: () => {
408
+ startTimer("skipOptimization");
409
+ },
410
+ });
411
+ bp.hooks.beforeResolveNode.intercept({
412
+ call: () => {
413
+ startTimer("beforeResolveNode");
414
+ },
415
+ });
416
+ },
417
+ });
418
+
419
+ player.hooks.bindingParser.tap(this.name, (bp) => {
420
+ let bindingParserNode: ProfilerNode = {
421
+ name: "bindingParser",
422
+ children: [],
423
+ };
424
+
425
+ bp.hooks.skipOptimization.tap(this.name, () => {
426
+ endTimer({
427
+ hookName: "skipOptimization",
428
+ parentNode: bindingParserNode,
429
+ });
430
+ return undefined;
431
+ });
432
+ bp.hooks.beforeResolveNode.tap(this.name, (node) => {
433
+ endTimer({
434
+ hookName: "beforeResolveNode",
435
+ parentNode: bindingParserNode,
436
+ });
437
+ return node;
438
+ });
439
+
440
+ bindingParserNode = endTimer({
441
+ hookName: bindingParserNode.name,
442
+ children: bindingParserNode.children,
443
+ });
444
+ });
445
+
446
+ player.hooks.state.intercept({
447
+ call: () => {
448
+ startTimer("state");
449
+ },
450
+ });
451
+
452
+ player.hooks.state.tap(this.name, () => {
453
+ endTimer({ hookName: "state" });
454
+ });
455
+
456
+ player.hooks.onEnd.intercept({
457
+ call: () => {
458
+ startTimer("onEnd");
459
+ },
460
+ });
461
+
462
+ player.hooks.onEnd.tap(this.name, () => {
463
+ endTimer({ hookName: "onEnd" });
464
+ });
465
+
466
+ player.hooks.resolveFlowContent.intercept({
467
+ call: () => {
468
+ startTimer("resolveFlowContent");
469
+ },
470
+ });
471
+
472
+ player.hooks.resolveFlowContent.tap(this.name, (flow) => {
473
+ endTimer({ hookName: "resolveFlowContent" });
474
+ return flow;
475
+ });
476
+ };
477
+
478
+ // eslint-disable-next-line react/display-name
479
+ webComponent.tap(this.name, (Comp) => () => {
480
+ return (
481
+ <WrapperComponent
482
+ startProfiler={startProfiler}
483
+ stopProfiler={stopProfiler}
484
+ >
485
+ <Comp />
486
+ </WrapperComponent>
487
+ );
488
+ });
489
+ }
490
+ }
package/src/types.ts ADDED
@@ -0,0 +1,26 @@
1
+ export type ProfilerNode = {
2
+ /** hook name */
3
+ name: string;
4
+ /* startTime of the hook */
5
+ startTime?: number;
6
+ /** endTime of the hook */
7
+ endTime?: number;
8
+ /** duration casted to a positive integer (multiplied by 1000) */
9
+ value?: number;
10
+ /** tooltip to be shown on hover */
11
+ tooltip?: string;
12
+ /** subhook profiler nodes */
13
+ children: ProfilerNode[];
14
+ };
15
+
16
+ export interface WrapperComponentProps {
17
+ /** component's children */
18
+ readonly children: React.ReactNode;
19
+ /** Start profiler */
20
+ startProfiler: () => void;
21
+ /** Stop profiler */
22
+ stopProfiler: () => {
23
+ rootNode: ProfilerNode;
24
+ durations: { name: string; duration: string }[];
25
+ };
26
+ }
@@ -0,0 +1,4 @@
1
+ import type { WrapperComponentProps } from "./types";
2
+ /** Defines the content to be rendered into the extension Player UI and process changes */
3
+ export declare const WrapperComponent: ({ children, startProfiler, stopProfiler, }: WrapperComponentProps) => JSX.Element;
4
+ //# sourceMappingURL=WrapperComponent.d.ts.map
@@ -0,0 +1,15 @@
1
+ import type { PluginData } from "@player-tools/devtools-types";
2
+ export declare const PLUGIN_ID = "player-ui-profiler-plugin";
3
+ export declare const PLUGIN_NAME = "Player UI Profiler";
4
+ export declare const PLUGIN_DESCRIPTION = "Standard Player UI Profiler";
5
+ export declare const PLUGIN_VERSION = "0.0.1";
6
+ export declare const VIEWS_IDS: {
7
+ PROFILER: string;
8
+ };
9
+ export declare const INTERACTIONS: {
10
+ START_PROFILING: string;
11
+ STOP_PROFILING: string;
12
+ };
13
+ export declare const BASE_PLUGIN_DATA: Omit<PluginData, "flow">;
14
+ export declare const PLUGIN_INACTIVE_WARNING = "The plugin has been registered, but the Player development tools are not active. If you are working in a production environment, it is recommended to remove the plugin. Either way, you can activate the Player development tools by clicking on the extension popup and refreshing the page.";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ export declare const Screen: ({ main, header, footer, id, }: {
3
+ id: string;
4
+ main: React.ReactNode;
5
+ header?: React.ReactNode;
6
+ footer?: React.ReactNode;
7
+ }) => React.JSX.Element;
8
+ //# sourceMappingURL=Screen.d.ts.map
@@ -0,0 +1,2 @@
1
+ export * from "./Screen";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,31 @@
1
+ /// <reference types="react" />
2
+ declare const _default: {
3
+ id: string;
4
+ views: import("react").JSX.Element[];
5
+ navigation: {
6
+ BEGIN: string;
7
+ Plugin: {
8
+ startState: string;
9
+ };
10
+ };
11
+ schema: {
12
+ playerConfig: import("@player-ui/types").Schema.DataType<Record<string, unknown>>;
13
+ rootNode: import("@player-ui/types").Schema.DataType<Record<string, unknown>>;
14
+ profiling: import("@player-ui/types").Schema.DataType<boolean>;
15
+ displayFlameGraph: import("@player-ui/types").Schema.DataType<boolean>;
16
+ durations: [import("@player-tools/dsl").DSLSchema<Omit<import("@player-ui/types").Schema.DataType<unknown>, "type" | "validation"> & {
17
+ type: string | number;
18
+ validation?: import("@player-ui/types").Validation.Reference[] | undefined;
19
+ }>];
20
+ };
21
+ data: {
22
+ rootNode: {
23
+ name: string;
24
+ value: number;
25
+ };
26
+ displayFlameGraph: boolean;
27
+ profiling: boolean;
28
+ };
29
+ };
30
+ export default _default;
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,7 @@
1
+ export declare const navigation: {
2
+ BEGIN: string;
3
+ Plugin: {
4
+ startState: string;
5
+ };
6
+ };
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,23 @@
1
+ import type { Schema } from "@player-ui/types";
2
+ import { DSLSchema } from "@player-tools/dsl";
3
+ export declare const schema: {
4
+ playerConfig: Schema.DataType<Record<string, unknown>>;
5
+ rootNode: Schema.DataType<Record<string, unknown>>;
6
+ profiling: Schema.DataType<boolean>;
7
+ displayFlameGraph: Schema.DataType<boolean>;
8
+ durations: [DSLSchema<Omit<Schema.DataType<unknown>, "type" | "validation"> & {
9
+ type: string | number;
10
+ validation?: import("@player-ui/types").Validation.Reference[] | undefined;
11
+ }>];
12
+ };
13
+ export declare const bindings: import("@player-tools/dsl").MakeBindingRefable<{
14
+ playerConfig: Schema.DataType<Record<string, unknown>>;
15
+ rootNode: Schema.DataType<Record<string, unknown>>;
16
+ profiling: Schema.DataType<boolean>;
17
+ displayFlameGraph: Schema.DataType<boolean>;
18
+ durations: [DSLSchema<Omit<Schema.DataType<unknown>, "type" | "validation"> & {
19
+ type: string | number;
20
+ validation?: import("@player-ui/types").Validation.Reference[] | undefined;
21
+ }>];
22
+ }>;
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ export declare const ProfilerView: React.JSX.Element;
3
+ //# sourceMappingURL=ProfilerView.d.ts.map
@@ -0,0 +1,3 @@
1
+ /// <reference types="react" />
2
+ export declare const views: import("react").JSX.Element[];
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,16 @@
1
+ import type { DevtoolsDataChangeEvent, Transaction } from "@player-tools/devtools-types";
2
+ import type { Flow } from "@player-ui/react";
3
+ /**
4
+ * Generates a data change transaction for the player devtools plugin.
5
+ *
6
+ * This function creates a transaction object that represents a change in data
7
+ * within a player devtools plugin. The transaction includes details such as the
8
+ * plugin ID, the changed data, and the player ID. It is used to communicate
9
+ * changes between the plugin and devtools.
10
+ */
11
+ export declare const genDataChangeTransaction: ({ playerID, data, pluginID, }: {
12
+ playerID: string;
13
+ data: Flow["data"];
14
+ pluginID: string;
15
+ }) => Transaction<DevtoolsDataChangeEvent>;
16
+ //# sourceMappingURL=genDataChangeTransaction.d.ts.map
@@ -0,0 +1,3 @@
1
+ export { genDataChangeTransaction } from "./genDataChangeTransaction";
2
+ export { profiler } from "./profiler";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,18 @@
1
+ import type { ProfilerNode } from "../types";
2
+ export declare const profiler: () => {
3
+ start: () => void;
4
+ startTimer: (hookName: string) => void;
5
+ endTimer: ({ hookName, parentNode, children, }: {
6
+ hookName: string;
7
+ parentNode?: ProfilerNode | undefined;
8
+ children?: ProfilerNode[] | undefined;
9
+ }) => ProfilerNode;
10
+ stopProfiler: () => {
11
+ rootNode: ProfilerNode;
12
+ durations: {
13
+ name: string;
14
+ duration: string;
15
+ }[];
16
+ };
17
+ };
18
+ //# sourceMappingURL=profiler.d.ts.map
@@ -0,0 +1,7 @@
1
+ import type { ReactPlayer, ReactPlayerPlugin } from "@player-ui/react";
2
+ export declare class ProfilerPlugin implements ReactPlayerPlugin {
3
+ name: string;
4
+ checkIfDevtoolsIsActive(): boolean;
5
+ applyReact({ player, hooks: { webComponent } }: ReactPlayer): void;
6
+ }
7
+ //# sourceMappingURL=index.d.ts.map