@capture.dev/event-logger 0.0.1

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 (92) hide show
  1. package/LICENSE.txt +7 -0
  2. package/dist/event-logger.d.ts +25 -0
  3. package/dist/event-logger.d.ts.map +1 -0
  4. package/dist/event-logger.js +42 -0
  5. package/dist/event-sink.d.ts +11 -0
  6. package/dist/event-sink.d.ts.map +1 -0
  7. package/dist/event-sink.js +32 -0
  8. package/dist/global-state.d.ts +14 -0
  9. package/dist/global-state.d.ts.map +1 -0
  10. package/dist/global-state.js +28 -0
  11. package/dist/index-internal.d.ts +20 -0
  12. package/dist/index-internal.d.ts.map +1 -0
  13. package/dist/index-internal.js +18 -0
  14. package/dist/index.d.ts +5 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +4 -0
  17. package/dist/register-logger.d.ts +8 -0
  18. package/dist/register-logger.d.ts.map +1 -0
  19. package/dist/register-logger.js +24 -0
  20. package/dist/register-state-logger.d.ts +5 -0
  21. package/dist/register-state-logger.d.ts.map +1 -0
  22. package/dist/register-state-logger.js +5 -0
  23. package/dist/snapshot-event-to-operation.d.ts +5 -0
  24. package/dist/snapshot-event-to-operation.d.ts.map +1 -0
  25. package/dist/snapshot-event-to-operation.js +7 -0
  26. package/dist/state-logger.d.ts +37 -0
  27. package/dist/state-logger.d.ts.map +1 -0
  28. package/dist/state-logger.js +90 -0
  29. package/dist/to-json/__tests__/serialize-class.test.d.ts +2 -0
  30. package/dist/to-json/__tests__/serialize-class.test.d.ts.map +1 -0
  31. package/dist/to-json/__tests__/serialize-class.test.js +79 -0
  32. package/dist/to-json/__tests__/serialize-date.test.d.ts +2 -0
  33. package/dist/to-json/__tests__/serialize-date.test.d.ts.map +1 -0
  34. package/dist/to-json/__tests__/serialize-date.test.js +20 -0
  35. package/dist/to-json/__tests__/serialize-error.test.d.ts +2 -0
  36. package/dist/to-json/__tests__/serialize-error.test.d.ts.map +1 -0
  37. package/dist/to-json/__tests__/serialize-error.test.js +71 -0
  38. package/dist/to-json/__tests__/serialize-function.test.d.ts +2 -0
  39. package/dist/to-json/__tests__/serialize-function.test.d.ts.map +1 -0
  40. package/dist/to-json/__tests__/serialize-function.test.js +84 -0
  41. package/dist/to-json/__tests__/serialize-map.test.d.ts +2 -0
  42. package/dist/to-json/__tests__/serialize-map.test.d.ts.map +1 -0
  43. package/dist/to-json/__tests__/serialize-map.test.js +90 -0
  44. package/dist/to-json/__tests__/serialize-object.test.d.ts +2 -0
  45. package/dist/to-json/__tests__/serialize-object.test.d.ts.map +1 -0
  46. package/dist/to-json/__tests__/serialize-object.test.js +138 -0
  47. package/dist/to-json/__tests__/serialize-regex.test.d.ts +2 -0
  48. package/dist/to-json/__tests__/serialize-regex.test.d.ts.map +1 -0
  49. package/dist/to-json/__tests__/serialize-regex.test.js +64 -0
  50. package/dist/to-json/__tests__/serialize-set.test.d.ts +2 -0
  51. package/dist/to-json/__tests__/serialize-set.test.d.ts.map +1 -0
  52. package/dist/to-json/__tests__/serialize-set.test.js +74 -0
  53. package/dist/to-json/__tests__/to-json.test.d.ts +2 -0
  54. package/dist/to-json/__tests__/to-json.test.d.ts.map +1 -0
  55. package/dist/to-json/__tests__/to-json.test.js +356 -0
  56. package/dist/to-json/serialize-class.d.ts +4 -0
  57. package/dist/to-json/serialize-class.d.ts.map +1 -0
  58. package/dist/to-json/serialize-class.js +14 -0
  59. package/dist/to-json/serialize-date.d.ts +3 -0
  60. package/dist/to-json/serialize-date.d.ts.map +1 -0
  61. package/dist/to-json/serialize-date.js +8 -0
  62. package/dist/to-json/serialize-error.d.ts +3 -0
  63. package/dist/to-json/serialize-error.d.ts.map +1 -0
  64. package/dist/to-json/serialize-error.js +22 -0
  65. package/dist/to-json/serialize-function.d.ts +3 -0
  66. package/dist/to-json/serialize-function.d.ts.map +1 -0
  67. package/dist/to-json/serialize-function.js +7 -0
  68. package/dist/to-json/serialize-map.d.ts +4 -0
  69. package/dist/to-json/serialize-map.d.ts.map +1 -0
  70. package/dist/to-json/serialize-map.js +10 -0
  71. package/dist/to-json/serialize-object.d.ts +4 -0
  72. package/dist/to-json/serialize-object.d.ts.map +1 -0
  73. package/dist/to-json/serialize-object.js +17 -0
  74. package/dist/to-json/serialize-regex.d.ts +3 -0
  75. package/dist/to-json/serialize-regex.d.ts.map +1 -0
  76. package/dist/to-json/serialize-regex.js +6 -0
  77. package/dist/to-json/serialize-set.d.ts +4 -0
  78. package/dist/to-json/serialize-set.d.ts.map +1 -0
  79. package/dist/to-json/serialize-set.js +10 -0
  80. package/dist/to-json/serialized-markers.d.ts +23 -0
  81. package/dist/to-json/serialized-markers.d.ts.map +1 -0
  82. package/dist/to-json/serialized-markers.js +22 -0
  83. package/dist/to-json/serialized-types.d.ts +55 -0
  84. package/dist/to-json/serialized-types.d.ts.map +1 -0
  85. package/dist/to-json/serialized-types.js +39 -0
  86. package/dist/to-json/to-json.constants.d.ts +11 -0
  87. package/dist/to-json/to-json.constants.d.ts.map +1 -0
  88. package/dist/to-json/to-json.constants.js +10 -0
  89. package/dist/to-json/to-json.d.ts +14 -0
  90. package/dist/to-json/to-json.d.ts.map +1 -0
  91. package/dist/to-json/to-json.js +141 -0
  92. package/package.json +51 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=serialize-function.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize-function.test.d.ts","sourceRoot":"","sources":["../../../src/to-json/__tests__/serialize-function.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { serializeFunction } from "../serialize-function.js";
3
+ describe("serializeFunction", () => {
4
+ it("serializes a named function", () => {
5
+ function myFunction() {
6
+ return 42;
7
+ }
8
+ const result = serializeFunction(myFunction);
9
+ expect(result).toEqual({
10
+ __CAPTURE_TYPE__: "function",
11
+ name: "myFunction",
12
+ });
13
+ });
14
+ it("serializes an anonymous function as (anonymous)", () => {
15
+ const fn = function () {
16
+ return 42;
17
+ };
18
+ // Override the name to simulate truly anonymous
19
+ Object.defineProperty(fn, "name", { value: "" });
20
+ const result = serializeFunction(fn);
21
+ expect(result).toEqual({
22
+ __CAPTURE_TYPE__: "function",
23
+ name: "(anonymous)",
24
+ });
25
+ });
26
+ it("serializes an arrow function with inferred name", () => {
27
+ const arrowFn = () => 42;
28
+ const result = serializeFunction(arrowFn);
29
+ expect(result).toEqual({
30
+ __CAPTURE_TYPE__: "function",
31
+ name: "arrowFn",
32
+ });
33
+ });
34
+ it("serializes a method reference", () => {
35
+ const obj = {
36
+ myMethod() {
37
+ return 42;
38
+ },
39
+ };
40
+ const result = serializeFunction(obj.myMethod);
41
+ expect(result).toEqual({
42
+ __CAPTURE_TYPE__: "function",
43
+ name: "myMethod",
44
+ });
45
+ });
46
+ it("serializes native functions", () => {
47
+ const result = serializeFunction(Array.isArray);
48
+ expect(result).toEqual({
49
+ __CAPTURE_TYPE__: "function",
50
+ name: "isArray",
51
+ });
52
+ });
53
+ it("serializes bound functions", () => {
54
+ function original() {
55
+ return 42;
56
+ }
57
+ const bound = original.bind(null);
58
+ const result = serializeFunction(bound);
59
+ expect(result).toEqual({
60
+ __CAPTURE_TYPE__: "function",
61
+ name: "bound original",
62
+ });
63
+ });
64
+ it("serializes async functions", () => {
65
+ async function asyncFn() {
66
+ return 42;
67
+ }
68
+ const result = serializeFunction(asyncFn);
69
+ expect(result).toEqual({
70
+ __CAPTURE_TYPE__: "function",
71
+ name: "asyncFn",
72
+ });
73
+ });
74
+ it("serializes generator functions", () => {
75
+ function* generatorFn() {
76
+ yield 42;
77
+ }
78
+ const result = serializeFunction(generatorFn);
79
+ expect(result).toEqual({
80
+ __CAPTURE_TYPE__: "function",
81
+ name: "generatorFn",
82
+ });
83
+ });
84
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=serialize-map.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize-map.test.d.ts","sourceRoot":"","sources":["../../../src/to-json/__tests__/serialize-map.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,90 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { serializeMap } from "../serialize-map.js";
3
+ const identity = (value) => value;
4
+ describe("serializeMap", () => {
5
+ it("serializes an empty map", () => {
6
+ const map = new Map();
7
+ const result = serializeMap(map, identity);
8
+ expect(result).toEqual({
9
+ __CAPTURE_TYPE__: "map",
10
+ entries: [],
11
+ });
12
+ });
13
+ it("serializes a map with string keys and values", () => {
14
+ const map = new Map([
15
+ ["key1", "value1"],
16
+ ["key2", "value2"],
17
+ ]);
18
+ const result = serializeMap(map, identity);
19
+ expect(result).toEqual({
20
+ __CAPTURE_TYPE__: "map",
21
+ entries: [
22
+ ["key1", "value1"],
23
+ ["key2", "value2"],
24
+ ],
25
+ });
26
+ });
27
+ it("serializes a map with number keys", () => {
28
+ const map = new Map([
29
+ [1, "one"],
30
+ [2, "two"],
31
+ ]);
32
+ const result = serializeMap(map, identity);
33
+ expect(result).toEqual({
34
+ __CAPTURE_TYPE__: "map",
35
+ entries: [
36
+ [1, "one"],
37
+ [2, "two"],
38
+ ],
39
+ });
40
+ });
41
+ it("serializes a map with object values", () => {
42
+ const map = new Map([["user", { name: "Alice", age: 30 }]]);
43
+ const result = serializeMap(map, identity);
44
+ expect(result).toEqual({
45
+ __CAPTURE_TYPE__: "map",
46
+ entries: [["user", { name: "Alice", age: 30 }]],
47
+ });
48
+ });
49
+ it("calls visitor function for each key and value", () => {
50
+ const map = new Map([
51
+ ["a", 1],
52
+ ["b", 2],
53
+ ]);
54
+ const visited = [];
55
+ const visitor = (value) => {
56
+ visited.push(value);
57
+ return value;
58
+ };
59
+ serializeMap(map, visitor);
60
+ expect(visited).toEqual(["a", 1, "b", 2]);
61
+ });
62
+ it("applies visitor transformation to values", () => {
63
+ const map = new Map([
64
+ ["count", 5],
65
+ ["total", 10],
66
+ ]);
67
+ const doubler = (value) => {
68
+ if (typeof value === "number")
69
+ return value * 2;
70
+ return value;
71
+ };
72
+ const result = serializeMap(map, doubler);
73
+ expect(result.entries).toEqual([
74
+ ["count", 10],
75
+ ["total", 20],
76
+ ]);
77
+ });
78
+ it("preserves insertion order", () => {
79
+ const map = new Map();
80
+ map.set("third", 3);
81
+ map.set("first", 1);
82
+ map.set("second", 2);
83
+ const result = serializeMap(map, identity);
84
+ expect(result.entries.map(([k]) => k)).toEqual([
85
+ "third",
86
+ "first",
87
+ "second",
88
+ ]);
89
+ });
90
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=serialize-object.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize-object.test.d.ts","sourceRoot":"","sources":["../../../src/to-json/__tests__/serialize-object.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,138 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { serializeObject } from "../serialize-object.js";
3
+ const identity = (value) => value;
4
+ describe("serializeObject", () => {
5
+ it("serializes a class instance with its name", () => {
6
+ class User {
7
+ name = "Alice";
8
+ age = 30;
9
+ }
10
+ const user = new User();
11
+ const result = serializeObject(user, identity);
12
+ expect(result).toEqual({
13
+ __CAPTURE_TYPE__: "object",
14
+ name: "User",
15
+ properties: {
16
+ name: "Alice",
17
+ age: 30,
18
+ },
19
+ });
20
+ });
21
+ it("serializes an object created with Object.create(null)", () => {
22
+ const obj = Object.create(null);
23
+ obj.foo = "bar";
24
+ const result = serializeObject(obj, identity);
25
+ expect(result).toEqual({
26
+ __CAPTURE_TYPE__: "object",
27
+ name: "Object",
28
+ properties: {
29
+ foo: "bar",
30
+ },
31
+ });
32
+ });
33
+ it("captures class name from inheritance chain", () => {
34
+ class Animal {
35
+ species = "unknown";
36
+ }
37
+ class Dog extends Animal {
38
+ breed = "labrador";
39
+ }
40
+ const dog = new Dog();
41
+ const result = serializeObject(dog, identity);
42
+ expect(result.name).toBe("Dog");
43
+ expect(result.properties).toEqual({
44
+ species: "unknown",
45
+ breed: "labrador",
46
+ });
47
+ });
48
+ it("only serializes own enumerable properties", () => {
49
+ class Example {
50
+ visible = "yes";
51
+ constructor() {
52
+ Object.defineProperty(this, "hidden", {
53
+ value: "no",
54
+ enumerable: false,
55
+ });
56
+ }
57
+ }
58
+ const obj = new Example();
59
+ const result = serializeObject(obj, identity);
60
+ expect(result.properties).toEqual({
61
+ visible: "yes",
62
+ });
63
+ expect(result.properties).not.toHaveProperty("hidden");
64
+ });
65
+ it("calls visitor function for each property value", () => {
66
+ class Data {
67
+ a = 1;
68
+ b = 2;
69
+ }
70
+ const visited = [];
71
+ const visitor = (value) => {
72
+ visited.push(value);
73
+ return value;
74
+ };
75
+ serializeObject(new Data(), visitor);
76
+ expect(visited).toEqual([1, 2]);
77
+ });
78
+ it("applies visitor transformation to property values", () => {
79
+ class Numbers {
80
+ x = 5;
81
+ y = 10;
82
+ }
83
+ const doubler = (value) => {
84
+ if (typeof value === "number")
85
+ return value * 2;
86
+ return value;
87
+ };
88
+ const result = serializeObject(new Numbers(), doubler);
89
+ expect(result.properties).toEqual({
90
+ x: 10,
91
+ y: 20,
92
+ });
93
+ });
94
+ it("handles empty class instance", () => {
95
+ class Empty {
96
+ }
97
+ const obj = new Empty();
98
+ const result = serializeObject(obj, identity);
99
+ expect(result).toEqual({
100
+ __CAPTURE_TYPE__: "object",
101
+ name: "Empty",
102
+ properties: {},
103
+ });
104
+ });
105
+ it("handles property access errors gracefully", () => {
106
+ class Problematic {
107
+ safe = "value";
108
+ get throwing() {
109
+ throw new Error("Cannot access");
110
+ }
111
+ }
112
+ const obj = new Problematic();
113
+ Object.defineProperty(obj, "throwing", {
114
+ enumerable: true,
115
+ get() {
116
+ throw new Error("Cannot access");
117
+ },
118
+ });
119
+ const result = serializeObject(obj, identity);
120
+ expect(result.properties.safe).toBe("value");
121
+ expect(result.properties.throwing).toBe("[Throws]");
122
+ });
123
+ it("serializes built-in object types", () => {
124
+ const url = new URL("https://example.com");
125
+ const result = serializeObject(url, identity);
126
+ expect(result.name).toBe("URL");
127
+ expect(result.__CAPTURE_TYPE__).toBe("object");
128
+ });
129
+ it("serializes anonymous class instances", () => {
130
+ const AnonymousClass = class {
131
+ value = 42;
132
+ };
133
+ const obj = new AnonymousClass();
134
+ const result = serializeObject(obj, identity);
135
+ expect(result.name).toBe("AnonymousClass");
136
+ expect(result.properties).toEqual({ value: 42 });
137
+ });
138
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=serialize-regex.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize-regex.test.d.ts","sourceRoot":"","sources":["../../../src/to-json/__tests__/serialize-regex.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,64 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { serializeRegex } from "../serialize-regex.js";
3
+ describe("serializeRegex", () => {
4
+ it("serializes a simple regex", () => {
5
+ const regex = /hello/;
6
+ const result = serializeRegex(regex);
7
+ expect(result).toEqual({
8
+ __CAPTURE_TYPE__: "regex",
9
+ pattern: "/hello/",
10
+ });
11
+ });
12
+ it("serializes a regex with global flag", () => {
13
+ const regex = /test/g;
14
+ const result = serializeRegex(regex);
15
+ expect(result).toEqual({
16
+ __CAPTURE_TYPE__: "regex",
17
+ pattern: "/test/g",
18
+ });
19
+ });
20
+ it("serializes a regex with multiple flags", () => {
21
+ const regex = /pattern/gim;
22
+ const result = serializeRegex(regex);
23
+ expect(result.__CAPTURE_TYPE__).toBe("regex");
24
+ expect(result.pattern).toContain("/pattern/");
25
+ expect(result.pattern).toContain("g");
26
+ expect(result.pattern).toContain("i");
27
+ expect(result.pattern).toContain("m");
28
+ });
29
+ it("serializes a regex with special characters", () => {
30
+ const regex = /\d+\.\d{2}/;
31
+ const result = serializeRegex(regex);
32
+ expect(result).toEqual({
33
+ __CAPTURE_TYPE__: "regex",
34
+ pattern: "/\\d+\\.\\d{2}/",
35
+ });
36
+ });
37
+ it("serializes a regex created with RegExp constructor", () => {
38
+ const regex = new RegExp("foo|bar", "i");
39
+ const result = serializeRegex(regex);
40
+ expect(result).toEqual({
41
+ __CAPTURE_TYPE__: "regex",
42
+ pattern: "/foo|bar/i",
43
+ });
44
+ });
45
+ it("serializes a complex email regex", () => {
46
+ const regex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
47
+ const result = serializeRegex(regex);
48
+ expect(result.__CAPTURE_TYPE__).toBe("regex");
49
+ expect(result.pattern).toBe("/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/");
50
+ });
51
+ it("serializes a regex with unicode flag", () => {
52
+ const regex = /\p{L}+/u;
53
+ const result = serializeRegex(regex);
54
+ expect(result.pattern).toContain("u");
55
+ });
56
+ it("serializes an empty regex", () => {
57
+ const regex = new RegExp("");
58
+ const result = serializeRegex(regex);
59
+ expect(result).toEqual({
60
+ __CAPTURE_TYPE__: "regex",
61
+ pattern: "/(?:)/",
62
+ });
63
+ });
64
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=serialize-set.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize-set.test.d.ts","sourceRoot":"","sources":["../../../src/to-json/__tests__/serialize-set.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { serializeSet } from "../serialize-set.js";
3
+ const identity = (value) => value;
4
+ describe("serializeSet", () => {
5
+ it("serializes an empty set", () => {
6
+ const set = new Set();
7
+ const result = serializeSet(set, identity);
8
+ expect(result).toEqual({
9
+ __CAPTURE_TYPE__: "set",
10
+ values: [],
11
+ });
12
+ });
13
+ it("serializes a set of strings", () => {
14
+ const set = new Set(["apple", "banana", "cherry"]);
15
+ const result = serializeSet(set, identity);
16
+ expect(result).toEqual({
17
+ __CAPTURE_TYPE__: "set",
18
+ values: ["apple", "banana", "cherry"],
19
+ });
20
+ });
21
+ it("serializes a set of numbers", () => {
22
+ const set = new Set([1, 2, 3]);
23
+ const result = serializeSet(set, identity);
24
+ expect(result).toEqual({
25
+ __CAPTURE_TYPE__: "set",
26
+ values: [1, 2, 3],
27
+ });
28
+ });
29
+ it("serializes a set of mixed types", () => {
30
+ const set = new Set([1, "two", true, null]);
31
+ const result = serializeSet(set, identity);
32
+ expect(result).toEqual({
33
+ __CAPTURE_TYPE__: "set",
34
+ values: [1, "two", true, null],
35
+ });
36
+ });
37
+ it("serializes a set with object values", () => {
38
+ const obj = { id: 1 };
39
+ const set = new Set([obj]);
40
+ const result = serializeSet(set, identity);
41
+ expect(result).toEqual({
42
+ __CAPTURE_TYPE__: "set",
43
+ values: [{ id: 1 }],
44
+ });
45
+ });
46
+ it("calls visitor function for each value", () => {
47
+ const set = new Set(["a", "b", "c"]);
48
+ const visited = [];
49
+ const visitor = (value) => {
50
+ visited.push(value);
51
+ return value;
52
+ };
53
+ serializeSet(set, visitor);
54
+ expect(visited).toEqual(["a", "b", "c"]);
55
+ });
56
+ it("applies visitor transformation to values", () => {
57
+ const set = new Set([1, 2, 3]);
58
+ const doubler = (value) => {
59
+ if (typeof value === "number")
60
+ return value * 2;
61
+ return value;
62
+ };
63
+ const result = serializeSet(set, doubler);
64
+ expect(result.values).toEqual([2, 4, 6]);
65
+ });
66
+ it("preserves insertion order", () => {
67
+ const set = new Set();
68
+ set.add("third");
69
+ set.add("first");
70
+ set.add("second");
71
+ const result = serializeSet(set, identity);
72
+ expect(result.values).toEqual(["third", "first", "second"]);
73
+ });
74
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=to-json.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-json.test.d.ts","sourceRoot":"","sources":["../../../src/to-json/__tests__/to-json.test.ts"],"names":[],"mappings":""}