@reckona/mreact-devtools 0.0.86 → 0.0.88

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/README.md CHANGED
@@ -29,7 +29,9 @@ if (import.meta.env.DEV) {
29
29
 
30
30
  ## Core APIs
31
31
 
32
- - `createDevtools()` creates an isolated event bus.
32
+ - `createDevtools()` creates an isolated event bus with a retained history capped at 1,000 events by default.
33
+ - `createDevtools({ maxEvents })` customizes the retained event history limit. Live subscribers still receive every emitted event immediately; the limit only affects `devtools.events()`.
34
+ - `defaultDevtoolsMaxEvents` exposes the default retained history limit.
33
35
  - `installDevtools()` installs a devtools instance on `globalThis`.
34
36
  - `getInstalledDevtools()` returns the currently installed instance.
35
37
  - `devtools.emit()` and `devtools.subscribe()` move runtime events.
package/dist/index.d.ts CHANGED
@@ -5,6 +5,10 @@ export interface DevtoolsEvent {
5
5
  [key: string]: unknown;
6
6
  }
7
7
  export type DevtoolsListener = (event: DevtoolsEvent) => void;
8
+ export declare const defaultDevtoolsMaxEvents = 1000;
9
+ export interface CreateDevtoolsOptions {
10
+ maxEvents?: number | undefined;
11
+ }
8
12
  export interface Devtools {
9
13
  dispose(): void;
10
14
  emit(event: DevtoolsEvent): void;
@@ -14,7 +18,7 @@ export interface Devtools {
14
18
  declare global {
15
19
  var __mreactDevtools: Devtools | undefined;
16
20
  }
17
- export declare function createDevtools(): Devtools;
21
+ export declare function createDevtools(options?: CreateDevtoolsOptions): Devtools;
18
22
  export declare function installDevtools(devtools?: Devtools): Devtools;
19
23
  export declare function getInstalledDevtools(): Devtools | undefined;
20
24
  export declare function emitMreactDevtoolsEvent(packageName: string, event: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAE9D,MAAM,WAAW,QAAQ;IACvB,OAAO,IAAI,IAAI,CAAC;IAChB,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC,MAAM,IAAI,aAAa,EAAE,CAAC;IAC1B,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAAC;CACnD;AAED,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,gBAAgB,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC5C;AAED,wBAAgB,cAAc,IAAI,QAAQ,CA8BzC;AAED,wBAAgB,eAAe,CAAC,QAAQ,GAAE,QAA2B,GAAG,QAAQ,CAI/E;AAED,wBAAgB,oBAAoB,IAAI,QAAQ,GAAG,SAAS,CAE3D;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChD,IAAI,CAMN"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAE9D,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,IAAI,IAAI,CAAC;IAChB,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC,MAAM,IAAI,aAAa,EAAE,CAAC;IAC1B,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAAC;CACnD;AAED,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,gBAAgB,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC5C;AAED,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,QAAQ,CAoC5E;AAUD,wBAAgB,eAAe,CAAC,QAAQ,GAAE,QAA2B,GAAG,QAAQ,CAI/E;AAED,wBAAgB,oBAAoB,IAAI,QAAQ,GAAG,SAAS,CAE3D;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChD,IAAI,CAMN"}
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
- export function createDevtools() {
1
+ export const defaultDevtoolsMaxEvents = 1_000;
2
+ export function createDevtools(options = {}) {
3
+ const maxEvents = normalizeMaxEvents(options.maxEvents);
2
4
  const recorded = [];
3
5
  const listeners = new Set();
4
6
  return {
@@ -10,7 +12,12 @@ export function createDevtools() {
10
12
  }
11
13
  },
12
14
  emit(event) {
13
- recorded.push(event);
15
+ if (maxEvents > 0) {
16
+ recorded.push(event);
17
+ if (recorded.length > maxEvents) {
18
+ recorded.splice(0, recorded.length - maxEvents);
19
+ }
20
+ }
14
21
  for (const listener of Array.from(listeners)) {
15
22
  listener(event);
16
23
  }
@@ -26,6 +33,12 @@ export function createDevtools() {
26
33
  },
27
34
  };
28
35
  }
36
+ function normalizeMaxEvents(maxEvents) {
37
+ if (maxEvents === undefined) {
38
+ return defaultDevtoolsMaxEvents;
39
+ }
40
+ return Math.max(0, Math.floor(maxEvents));
41
+ }
29
42
  export function installDevtools(devtools = createDevtools()) {
30
43
  globalThis.__mreactDevtools = devtools;
31
44
  return devtools;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE9C,OAAO;QACL,OAAO;YACL,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACpB,IAAI,UAAU,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;gBACzC,UAAU,CAAC,gBAAgB,GAAG,SAAS,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK;YACR,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAErB,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,MAAM;YACJ,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;QACvB,CAAC;QACD,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAExB,OAAO,GAAG,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAqB,cAAc,EAAE;IACnE,UAAU,CAAC,gBAAgB,GAAG,QAAQ,CAAC;IAEvC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,UAAU,CAAC,gBAAgB,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,WAAmB,EACnB,KAAiD;IAEjD,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;QAClC,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,GAAG,KAAK;KACT,CAAC,CAAC;AACL,CAAC","sourcesContent":["export interface DevtoolsEvent {\n package: string;\n timestamp?: number;\n type: string;\n [key: string]: unknown;\n}\n\nexport type DevtoolsListener = (event: DevtoolsEvent) => void;\n\nexport interface Devtools {\n dispose(): void;\n emit(event: DevtoolsEvent): void;\n events(): DevtoolsEvent[];\n subscribe(listener: DevtoolsListener): () => void;\n}\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __mreactDevtools: Devtools | undefined;\n}\n\nexport function createDevtools(): Devtools {\n const recorded: DevtoolsEvent[] = [];\n const listeners = new Set<DevtoolsListener>();\n\n return {\n dispose() {\n listeners.clear();\n recorded.length = 0;\n if (globalThis.__mreactDevtools === this) {\n globalThis.__mreactDevtools = undefined;\n }\n },\n emit(event) {\n recorded.push(event);\n\n for (const listener of Array.from(listeners)) {\n listener(event);\n }\n },\n events() {\n return [...recorded];\n },\n subscribe(listener) {\n listeners.add(listener);\n\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n\nexport function installDevtools(devtools: Devtools = createDevtools()): Devtools {\n globalThis.__mreactDevtools = devtools;\n\n return devtools;\n}\n\nexport function getInstalledDevtools(): Devtools | undefined {\n return globalThis.__mreactDevtools;\n}\n\nexport function emitMreactDevtoolsEvent(\n packageName: string,\n event: { type: string } & Record<string, unknown>,\n): void {\n globalThis.__mreactDevtools?.emit?.({\n package: packageName,\n timestamp: Date.now(),\n ...event,\n });\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAkB9C,MAAM,UAAU,cAAc,CAAC,UAAiC,EAAE;IAChE,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE9C,OAAO;QACL,OAAO;YACL,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACpB,IAAI,UAAU,CAAC,gBAAgB,KAAK,IAAI,EAAE,CAAC;gBACzC,UAAU,CAAC,gBAAgB,GAAG,SAAS,CAAC;YAC1C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK;YACR,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrB,IAAI,QAAQ,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;oBAChC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;YAED,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7C,QAAQ,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,MAAM;YACJ,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;QACvB,CAAC;QACD,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAExB,OAAO,GAAG,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,SAA6B;IACvD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,wBAAwB,CAAC;IAClC,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAqB,cAAc,EAAE;IACnE,UAAU,CAAC,gBAAgB,GAAG,QAAQ,CAAC;IAEvC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,UAAU,CAAC,gBAAgB,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,WAAmB,EACnB,KAAiD;IAEjD,UAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;QAClC,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,GAAG,KAAK;KACT,CAAC,CAAC;AACL,CAAC","sourcesContent":["export interface DevtoolsEvent {\n package: string;\n timestamp?: number;\n type: string;\n [key: string]: unknown;\n}\n\nexport type DevtoolsListener = (event: DevtoolsEvent) => void;\n\nexport const defaultDevtoolsMaxEvents = 1_000;\n\nexport interface CreateDevtoolsOptions {\n maxEvents?: number | undefined;\n}\n\nexport interface Devtools {\n dispose(): void;\n emit(event: DevtoolsEvent): void;\n events(): DevtoolsEvent[];\n subscribe(listener: DevtoolsListener): () => void;\n}\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __mreactDevtools: Devtools | undefined;\n}\n\nexport function createDevtools(options: CreateDevtoolsOptions = {}): Devtools {\n const maxEvents = normalizeMaxEvents(options.maxEvents);\n const recorded: DevtoolsEvent[] = [];\n const listeners = new Set<DevtoolsListener>();\n\n return {\n dispose() {\n listeners.clear();\n recorded.length = 0;\n if (globalThis.__mreactDevtools === this) {\n globalThis.__mreactDevtools = undefined;\n }\n },\n emit(event) {\n if (maxEvents > 0) {\n recorded.push(event);\n if (recorded.length > maxEvents) {\n recorded.splice(0, recorded.length - maxEvents);\n }\n }\n\n for (const listener of Array.from(listeners)) {\n listener(event);\n }\n },\n events() {\n return [...recorded];\n },\n subscribe(listener) {\n listeners.add(listener);\n\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n\nfunction normalizeMaxEvents(maxEvents: number | undefined): number {\n if (maxEvents === undefined) {\n return defaultDevtoolsMaxEvents;\n }\n\n return Math.max(0, Math.floor(maxEvents));\n}\n\nexport function installDevtools(devtools: Devtools = createDevtools()): Devtools {\n globalThis.__mreactDevtools = devtools;\n\n return devtools;\n}\n\nexport function getInstalledDevtools(): Devtools | undefined {\n return globalThis.__mreactDevtools;\n}\n\nexport function emitMreactDevtoolsEvent(\n packageName: string,\n event: { type: string } & Record<string, unknown>,\n): void {\n globalThis.__mreactDevtools?.emit?.({\n package: packageName,\n timestamp: Date.now(),\n ...event,\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reckona/mreact-devtools",
3
- "version": "0.0.86",
3
+ "version": "0.0.88",
4
4
  "description": "Runtime event bridge for mreact developer tooling.",
5
5
  "keywords": [
6
6
  "debugging",
package/src/index.ts CHANGED
@@ -7,6 +7,12 @@ export interface DevtoolsEvent {
7
7
 
8
8
  export type DevtoolsListener = (event: DevtoolsEvent) => void;
9
9
 
10
+ export const defaultDevtoolsMaxEvents = 1_000;
11
+
12
+ export interface CreateDevtoolsOptions {
13
+ maxEvents?: number | undefined;
14
+ }
15
+
10
16
  export interface Devtools {
11
17
  dispose(): void;
12
18
  emit(event: DevtoolsEvent): void;
@@ -19,7 +25,8 @@ declare global {
19
25
  var __mreactDevtools: Devtools | undefined;
20
26
  }
21
27
 
22
- export function createDevtools(): Devtools {
28
+ export function createDevtools(options: CreateDevtoolsOptions = {}): Devtools {
29
+ const maxEvents = normalizeMaxEvents(options.maxEvents);
23
30
  const recorded: DevtoolsEvent[] = [];
24
31
  const listeners = new Set<DevtoolsListener>();
25
32
 
@@ -32,7 +39,12 @@ export function createDevtools(): Devtools {
32
39
  }
33
40
  },
34
41
  emit(event) {
35
- recorded.push(event);
42
+ if (maxEvents > 0) {
43
+ recorded.push(event);
44
+ if (recorded.length > maxEvents) {
45
+ recorded.splice(0, recorded.length - maxEvents);
46
+ }
47
+ }
36
48
 
37
49
  for (const listener of Array.from(listeners)) {
38
50
  listener(event);
@@ -51,6 +63,14 @@ export function createDevtools(): Devtools {
51
63
  };
52
64
  }
53
65
 
66
+ function normalizeMaxEvents(maxEvents: number | undefined): number {
67
+ if (maxEvents === undefined) {
68
+ return defaultDevtoolsMaxEvents;
69
+ }
70
+
71
+ return Math.max(0, Math.floor(maxEvents));
72
+ }
73
+
54
74
  export function installDevtools(devtools: Devtools = createDevtools()): Devtools {
55
75
  globalThis.__mreactDevtools = devtools;
56
76