convex-audit-log 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.
Files changed (63) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +408 -0
  3. package/dist/client/_generated/_ignore.d.ts +1 -0
  4. package/dist/client/_generated/_ignore.d.ts.map +1 -0
  5. package/dist/client/_generated/_ignore.js +3 -0
  6. package/dist/client/_generated/_ignore.js.map +1 -0
  7. package/dist/client/index.d.ts +336 -0
  8. package/dist/client/index.d.ts.map +1 -0
  9. package/dist/client/index.js +297 -0
  10. package/dist/client/index.js.map +1 -0
  11. package/dist/component/_generated/api.d.ts +36 -0
  12. package/dist/component/_generated/api.d.ts.map +1 -0
  13. package/dist/component/_generated/api.js +31 -0
  14. package/dist/component/_generated/api.js.map +1 -0
  15. package/dist/component/_generated/component.d.ts +317 -0
  16. package/dist/component/_generated/component.d.ts.map +1 -0
  17. package/dist/component/_generated/component.js +11 -0
  18. package/dist/component/_generated/component.js.map +1 -0
  19. package/dist/component/_generated/dataModel.d.ts +46 -0
  20. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  21. package/dist/component/_generated/dataModel.js +11 -0
  22. package/dist/component/_generated/dataModel.js.map +1 -0
  23. package/dist/component/_generated/server.d.ts +121 -0
  24. package/dist/component/_generated/server.d.ts.map +1 -0
  25. package/dist/component/_generated/server.js +78 -0
  26. package/dist/component/_generated/server.js.map +1 -0
  27. package/dist/component/convex.config.d.ts +3 -0
  28. package/dist/component/convex.config.d.ts.map +1 -0
  29. package/dist/component/convex.config.js +3 -0
  30. package/dist/component/convex.config.js.map +1 -0
  31. package/dist/component/lib.d.ts +341 -0
  32. package/dist/component/lib.d.ts.map +1 -0
  33. package/dist/component/lib.js +598 -0
  34. package/dist/component/lib.js.map +1 -0
  35. package/dist/component/schema.d.ts +87 -0
  36. package/dist/component/schema.d.ts.map +1 -0
  37. package/dist/component/schema.js +71 -0
  38. package/dist/component/schema.js.map +1 -0
  39. package/dist/component/shared.d.ts +203 -0
  40. package/dist/component/shared.d.ts.map +1 -0
  41. package/dist/component/shared.js +94 -0
  42. package/dist/component/shared.js.map +1 -0
  43. package/dist/react/index.d.ts +247 -0
  44. package/dist/react/index.d.ts.map +1 -0
  45. package/dist/react/index.js +196 -0
  46. package/dist/react/index.js.map +1 -0
  47. package/package.json +115 -0
  48. package/src/client/_generated/_ignore.ts +1 -0
  49. package/src/client/index.test.ts +61 -0
  50. package/src/client/index.ts +525 -0
  51. package/src/client/setup.test.ts +26 -0
  52. package/src/component/_generated/api.ts +52 -0
  53. package/src/component/_generated/component.ts +392 -0
  54. package/src/component/_generated/dataModel.ts +60 -0
  55. package/src/component/_generated/server.ts +161 -0
  56. package/src/component/convex.config.ts +3 -0
  57. package/src/component/lib.test.ts +171 -0
  58. package/src/component/lib.ts +722 -0
  59. package/src/component/schema.ts +93 -0
  60. package/src/component/setup.test.ts +11 -0
  61. package/src/component/shared.ts +167 -0
  62. package/src/react/index.ts +305 -0
  63. package/src/test.ts +18 -0
@@ -0,0 +1,598 @@
1
+ import { v } from "convex/values";
2
+ import { mutation, query, internalMutation, internalQuery, } from "./_generated/server.js";
3
+ import { internal } from "./_generated/api.js";
4
+ import schema from "./schema.js";
5
+ import { vSeverity, vAuditEventInput, vChangeEventInput, vQueryFilters, vPagination, vCleanupOptions, vConfigOptions, } from "./shared.js";
6
+ const auditLogValidator = schema.tables.auditLogs.validator.extend({
7
+ _id: v.id("auditLogs"),
8
+ _creationTime: v.number(),
9
+ });
10
+ /**
11
+ * Log a single audit event.
12
+ */
13
+ export const log = mutation({
14
+ args: vAuditEventInput.fields,
15
+ returns: v.id("auditLogs"),
16
+ handler: async (ctx, args) => {
17
+ const timestamp = Date.now();
18
+ const logId = await ctx.db.insert("auditLogs", {
19
+ ...args,
20
+ timestamp,
21
+ });
22
+ return logId;
23
+ },
24
+ });
25
+ /**
26
+ * Log a change event with before/after states and optional diff generation.
27
+ */
28
+ export const logChange = mutation({
29
+ args: vChangeEventInput.fields,
30
+ returns: v.id("auditLogs"),
31
+ handler: async (ctx, args) => {
32
+ const timestamp = Date.now();
33
+ let diff;
34
+ if (args.generateDiff && args.before && args.after) {
35
+ diff = generateDiff(args.before, args.after);
36
+ }
37
+ const logId = await ctx.db.insert("auditLogs", {
38
+ action: args.action,
39
+ actorId: args.actorId,
40
+ resourceType: args.resourceType,
41
+ resourceId: args.resourceId,
42
+ before: args.before,
43
+ after: args.after,
44
+ diff,
45
+ severity: args.severity ?? "info",
46
+ ipAddress: args.ipAddress,
47
+ userAgent: args.userAgent,
48
+ sessionId: args.sessionId,
49
+ tags: args.tags,
50
+ retentionCategory: args.retentionCategory,
51
+ timestamp,
52
+ });
53
+ return logId;
54
+ },
55
+ });
56
+ /**
57
+ * Log multiple audit events in a single transaction.
58
+ */
59
+ export const logBulk = mutation({
60
+ args: {
61
+ events: v.array(vAuditEventInput),
62
+ },
63
+ returns: v.array(v.id("auditLogs")),
64
+ handler: async (ctx, args) => {
65
+ const timestamp = Date.now();
66
+ const ids = [];
67
+ for (const event of args.events) {
68
+ const logId = await ctx.db.insert("auditLogs", {
69
+ ...event,
70
+ timestamp,
71
+ });
72
+ ids.push(logId);
73
+ }
74
+ return ids;
75
+ },
76
+ });
77
+ /**
78
+ * Query audit logs by resource.
79
+ */
80
+ export const queryByResource = query({
81
+ args: {
82
+ resourceType: v.string(),
83
+ resourceId: v.string(),
84
+ limit: v.optional(v.number()),
85
+ fromTimestamp: v.optional(v.number()),
86
+ },
87
+ returns: v.array(auditLogValidator),
88
+ handler: async (ctx, args) => {
89
+ let q = ctx.db
90
+ .query("auditLogs")
91
+ .withIndex("by_resource", (q) => q.eq("resourceType", args.resourceType).eq("resourceId", args.resourceId))
92
+ .order("desc");
93
+ if (args.fromTimestamp) {
94
+ q = ctx.db
95
+ .query("auditLogs")
96
+ .withIndex("by_resource", (q) => q
97
+ .eq("resourceType", args.resourceType)
98
+ .eq("resourceId", args.resourceId)
99
+ .gte("timestamp", args.fromTimestamp))
100
+ .order("desc");
101
+ }
102
+ return await q.take(args.limit ?? 50);
103
+ },
104
+ });
105
+ /**
106
+ * Query audit logs by actor (user).
107
+ */
108
+ export const queryByActor = query({
109
+ args: {
110
+ actorId: v.string(),
111
+ limit: v.optional(v.number()),
112
+ fromTimestamp: v.optional(v.number()),
113
+ actions: v.optional(v.array(v.string())),
114
+ },
115
+ returns: v.array(auditLogValidator),
116
+ handler: async (ctx, args) => {
117
+ let results = await ctx.db
118
+ .query("auditLogs")
119
+ .withIndex("by_actor_timestamp", (q) => q.eq("actorId", args.actorId))
120
+ .order("desc")
121
+ .take(args.limit ?? 50);
122
+ if (args.fromTimestamp) {
123
+ results = results.filter((log) => log.timestamp >= args.fromTimestamp);
124
+ }
125
+ if (args.actions && args.actions.length > 0) {
126
+ results = results.filter((log) => args.actions.includes(log.action));
127
+ }
128
+ return results;
129
+ },
130
+ });
131
+ /**
132
+ * Query audit logs by severity level.
133
+ */
134
+ export const queryBySeverity = query({
135
+ args: {
136
+ severity: v.array(vSeverity),
137
+ limit: v.optional(v.number()),
138
+ fromTimestamp: v.optional(v.number()),
139
+ },
140
+ returns: v.array(auditLogValidator),
141
+ handler: async (ctx, args) => {
142
+ const allResults = [];
143
+ for (const sev of args.severity) {
144
+ const results = await ctx.db
145
+ .query("auditLogs")
146
+ .withIndex("by_severity_timestamp", (q) => q.eq("severity", sev))
147
+ .order("desc")
148
+ .take(args.limit ?? 50);
149
+ allResults.push(...results);
150
+ }
151
+ return allResults
152
+ .filter((log) => args.fromTimestamp ? log.timestamp >= args.fromTimestamp : true)
153
+ .sort((a, b) => b.timestamp - a.timestamp)
154
+ .slice(0, args.limit ?? 50);
155
+ },
156
+ });
157
+ /**
158
+ * Query audit logs by action type.
159
+ */
160
+ export const queryByAction = query({
161
+ args: {
162
+ action: v.string(),
163
+ limit: v.optional(v.number()),
164
+ fromTimestamp: v.optional(v.number()),
165
+ },
166
+ returns: v.array(auditLogValidator),
167
+ handler: async (ctx, args) => {
168
+ let results = await ctx.db
169
+ .query("auditLogs")
170
+ .withIndex("by_action_timestamp", (q) => q.eq("action", args.action))
171
+ .order("desc")
172
+ .take(args.limit ?? 50);
173
+ if (args.fromTimestamp) {
174
+ results = results.filter((log) => log.timestamp >= args.fromTimestamp);
175
+ }
176
+ return results;
177
+ },
178
+ });
179
+ /**
180
+ * Advanced search with multiple filters.
181
+ */
182
+ export const search = query({
183
+ args: {
184
+ filters: vQueryFilters,
185
+ pagination: vPagination,
186
+ },
187
+ returns: v.object({
188
+ items: v.array(auditLogValidator),
189
+ cursor: v.union(v.string(), v.null()),
190
+ hasMore: v.boolean(),
191
+ }),
192
+ handler: async (ctx, args) => {
193
+ const { filters, pagination } = args;
194
+ const limit = pagination.limit;
195
+ let results = await ctx.db
196
+ .query("auditLogs")
197
+ .withIndex("by_timestamp")
198
+ .order("desc")
199
+ .take(limit * 10);
200
+ if (filters.fromTimestamp) {
201
+ results = results.filter((log) => log.timestamp >= filters.fromTimestamp);
202
+ }
203
+ if (filters.toTimestamp) {
204
+ results = results.filter((log) => log.timestamp <= filters.toTimestamp);
205
+ }
206
+ if (filters.severity && filters.severity.length > 0) {
207
+ results = results.filter((log) => filters.severity.includes(log.severity));
208
+ }
209
+ if (filters.actions && filters.actions.length > 0) {
210
+ results = results.filter((log) => filters.actions.includes(log.action));
211
+ }
212
+ if (filters.resourceTypes && filters.resourceTypes.length > 0) {
213
+ results = results.filter((log) => log.resourceType && filters.resourceTypes.includes(log.resourceType));
214
+ }
215
+ if (filters.actorIds && filters.actorIds.length > 0) {
216
+ results = results.filter((log) => log.actorId && filters.actorIds.includes(log.actorId));
217
+ }
218
+ if (filters.tags && filters.tags.length > 0) {
219
+ results = results.filter((log) => log.tags && filters.tags.some((tag) => log.tags.includes(tag)));
220
+ }
221
+ // Apply cursor-based pagination
222
+ let startIndex = 0;
223
+ if (pagination.cursor) {
224
+ const cursorIndex = results.findIndex((log) => log._id === pagination.cursor);
225
+ if (cursorIndex !== -1) {
226
+ startIndex = cursorIndex + 1;
227
+ }
228
+ }
229
+ const paginatedResults = results.slice(startIndex, startIndex + limit);
230
+ const hasMore = startIndex + limit < results.length;
231
+ const cursor = paginatedResults.length > 0
232
+ ? paginatedResults[paginatedResults.length - 1]._id
233
+ : null;
234
+ return {
235
+ items: paginatedResults,
236
+ cursor,
237
+ hasMore,
238
+ };
239
+ },
240
+ });
241
+ /**
242
+ * Watch for critical events (real-time subscription).
243
+ */
244
+ export const watchCritical = query({
245
+ args: {
246
+ severity: v.optional(v.array(vSeverity)),
247
+ limit: v.optional(v.number()),
248
+ },
249
+ returns: v.array(auditLogValidator),
250
+ handler: async (ctx, args) => {
251
+ const severityLevels = args.severity ?? ["error", "critical"];
252
+ const limit = args.limit ?? 20;
253
+ const allResults = [];
254
+ for (const sev of severityLevels) {
255
+ const results = await ctx.db
256
+ .query("auditLogs")
257
+ .withIndex("by_severity_timestamp", (q) => q.eq("severity", sev))
258
+ .order("desc")
259
+ .take(limit);
260
+ allResults.push(...results);
261
+ }
262
+ return allResults
263
+ .sort((a, b) => b.timestamp - a.timestamp)
264
+ .slice(0, limit);
265
+ },
266
+ });
267
+ /**
268
+ * Get a single audit log by ID.
269
+ */
270
+ export const get = query({
271
+ args: {
272
+ id: v.string(),
273
+ },
274
+ returns: v.union(v.null(), auditLogValidator),
275
+ handler: async (ctx, args) => {
276
+ try {
277
+ const result = await ctx.db.get(args.id);
278
+ // Only return if it's an audit log (not a config document)
279
+ if (result && "action" in result) {
280
+ return result;
281
+ }
282
+ return null;
283
+ }
284
+ catch {
285
+ return null;
286
+ }
287
+ },
288
+ });
289
+ /**
290
+ * Clean up old audit logs based on retention policies.
291
+ */
292
+ export const cleanup = mutation({
293
+ args: vCleanupOptions.fields,
294
+ returns: v.number(),
295
+ handler: async (ctx, args) => {
296
+ const batchSize = args.batchSize ?? 100;
297
+ const olderThanDays = args.olderThanDays ?? 90;
298
+ const cutoffTimestamp = Date.now() - olderThanDays * 24 * 60 * 60 * 1000;
299
+ const preserveSeverity = args.preserveSeverity ?? [];
300
+ // Get logs older than cutoff
301
+ const oldLogs = await ctx.db
302
+ .query("auditLogs")
303
+ .withIndex("by_timestamp", (q) => q.lt("timestamp", cutoffTimestamp))
304
+ .take(batchSize);
305
+ let deletedCount = 0;
306
+ for (const log of oldLogs) {
307
+ // Skip preserved severity levels
308
+ if (preserveSeverity.includes(log.severity)) {
309
+ continue;
310
+ }
311
+ // Skip specific retention categories if specified
312
+ if (args.retentionCategory && log.retentionCategory !== args.retentionCategory) {
313
+ continue;
314
+ }
315
+ await ctx.db.delete(log._id);
316
+ deletedCount++;
317
+ }
318
+ return deletedCount;
319
+ },
320
+ });
321
+ /**
322
+ * Get current configuration.
323
+ */
324
+ export const getConfig = query({
325
+ args: {},
326
+ returns: v.union(v.null(), v.object({
327
+ _id: v.id("config"),
328
+ _creationTime: v.number(),
329
+ defaultRetentionDays: v.number(),
330
+ criticalRetentionDays: v.number(),
331
+ piiFieldsToRedact: v.array(v.string()),
332
+ samplingEnabled: v.boolean(),
333
+ samplingRate: v.number(),
334
+ customRetention: v.optional(v.array(v.object({
335
+ category: v.string(),
336
+ retentionDays: v.number(),
337
+ }))),
338
+ })),
339
+ handler: async (ctx) => {
340
+ return await ctx.db.query("config").first();
341
+ },
342
+ });
343
+ /**
344
+ * Update configuration.
345
+ */
346
+ export const updateConfig = mutation({
347
+ args: vConfigOptions.fields,
348
+ returns: v.id("config"),
349
+ handler: async (ctx, args) => {
350
+ const existing = await ctx.db.query("config").first();
351
+ if (existing) {
352
+ await ctx.db.patch(existing._id, {
353
+ ...(args.defaultRetentionDays !== undefined && {
354
+ defaultRetentionDays: args.defaultRetentionDays,
355
+ }),
356
+ ...(args.criticalRetentionDays !== undefined && {
357
+ criticalRetentionDays: args.criticalRetentionDays,
358
+ }),
359
+ ...(args.piiFieldsToRedact !== undefined && {
360
+ piiFieldsToRedact: args.piiFieldsToRedact,
361
+ }),
362
+ ...(args.samplingEnabled !== undefined && {
363
+ samplingEnabled: args.samplingEnabled,
364
+ }),
365
+ ...(args.samplingRate !== undefined && {
366
+ samplingRate: args.samplingRate,
367
+ }),
368
+ ...(args.customRetention !== undefined && {
369
+ customRetention: args.customRetention,
370
+ }),
371
+ });
372
+ return existing._id;
373
+ }
374
+ // Create new config with defaults
375
+ return await ctx.db.insert("config", {
376
+ defaultRetentionDays: args.defaultRetentionDays ?? 90,
377
+ criticalRetentionDays: args.criticalRetentionDays ?? 365,
378
+ piiFieldsToRedact: args.piiFieldsToRedact ?? [],
379
+ samplingEnabled: args.samplingEnabled ?? false,
380
+ samplingRate: args.samplingRate ?? 1.0,
381
+ customRetention: args.customRetention,
382
+ });
383
+ },
384
+ });
385
+ /**
386
+ * Detect anomalies based on event frequency patterns.
387
+ */
388
+ export const detectAnomalies = query({
389
+ args: {
390
+ patterns: v.array(v.object({
391
+ action: v.string(),
392
+ threshold: v.number(),
393
+ windowMinutes: v.number(),
394
+ })),
395
+ },
396
+ returns: v.array(v.object({
397
+ action: v.string(),
398
+ count: v.number(),
399
+ threshold: v.number(),
400
+ windowMinutes: v.number(),
401
+ detectedAt: v.number(),
402
+ })),
403
+ handler: async (ctx, args) => {
404
+ const anomalies = [];
405
+ const now = Date.now();
406
+ for (const pattern of args.patterns) {
407
+ const windowStart = now - pattern.windowMinutes * 60 * 1000;
408
+ const events = await ctx.db
409
+ .query("auditLogs")
410
+ .withIndex("by_action_timestamp", (q) => q.eq("action", pattern.action).gte("timestamp", windowStart))
411
+ .collect();
412
+ if (events.length >= pattern.threshold) {
413
+ anomalies.push({
414
+ action: pattern.action,
415
+ count: events.length,
416
+ threshold: pattern.threshold,
417
+ windowMinutes: pattern.windowMinutes,
418
+ detectedAt: now,
419
+ });
420
+ }
421
+ }
422
+ return anomalies;
423
+ },
424
+ });
425
+ /**
426
+ * Generate a report of audit logs.
427
+ */
428
+ export const generateReport = query({
429
+ args: {
430
+ startDate: v.number(),
431
+ endDate: v.number(),
432
+ format: v.union(v.literal("json"), v.literal("csv")),
433
+ includeFields: v.optional(v.array(v.string())),
434
+ groupBy: v.optional(v.string()),
435
+ },
436
+ returns: v.object({
437
+ format: v.union(v.literal("json"), v.literal("csv")),
438
+ data: v.string(),
439
+ generatedAt: v.number(),
440
+ recordCount: v.number(),
441
+ }),
442
+ handler: async (ctx, args) => {
443
+ const logs = await ctx.db
444
+ .query("auditLogs")
445
+ .withIndex("by_timestamp", (q) => q.gte("timestamp", args.startDate).lte("timestamp", args.endDate))
446
+ .collect();
447
+ const includeFields = args.includeFields ?? [
448
+ "timestamp",
449
+ "action",
450
+ "actorId",
451
+ "resourceType",
452
+ "resourceId",
453
+ "severity",
454
+ ];
455
+ const filteredLogs = logs.map((log) => {
456
+ const filtered = {};
457
+ for (const field of includeFields) {
458
+ if (field in log) {
459
+ filtered[field] = log[field];
460
+ }
461
+ }
462
+ return filtered;
463
+ });
464
+ let data;
465
+ if (args.format === "csv") {
466
+ // Generate CSV
467
+ const headers = includeFields.join(",");
468
+ const rows = filteredLogs.map((log) => includeFields
469
+ .map((field) => {
470
+ const value = log[field];
471
+ if (value === undefined || value === null)
472
+ return "";
473
+ if (typeof value === "string")
474
+ return `"${value.replace(/"/g, '""')}"`;
475
+ return String(value);
476
+ })
477
+ .join(","));
478
+ data = [headers, ...rows].join("\n");
479
+ }
480
+ else {
481
+ // Generate JSON
482
+ if (args.groupBy && includeFields.includes(args.groupBy)) {
483
+ // Group by specified field
484
+ const grouped = {};
485
+ for (const log of filteredLogs) {
486
+ const key = String(log[args.groupBy] ?? "unknown");
487
+ if (!grouped[key])
488
+ grouped[key] = [];
489
+ grouped[key].push(log);
490
+ }
491
+ data = JSON.stringify(grouped, null, 2);
492
+ }
493
+ else {
494
+ data = JSON.stringify(filteredLogs, null, 2);
495
+ }
496
+ }
497
+ return {
498
+ format: args.format,
499
+ data,
500
+ generatedAt: Date.now(),
501
+ recordCount: filteredLogs.length,
502
+ };
503
+ },
504
+ });
505
+ /**
506
+ * Get statistics for audit logs.
507
+ */
508
+ export const getStats = query({
509
+ args: {
510
+ fromTimestamp: v.optional(v.number()),
511
+ toTimestamp: v.optional(v.number()),
512
+ },
513
+ returns: v.object({
514
+ totalCount: v.number(),
515
+ bySeverity: v.object({
516
+ info: v.number(),
517
+ warning: v.number(),
518
+ error: v.number(),
519
+ critical: v.number(),
520
+ }),
521
+ topActions: v.array(v.object({
522
+ action: v.string(),
523
+ count: v.number(),
524
+ })),
525
+ topActors: v.array(v.object({
526
+ actorId: v.string(),
527
+ count: v.number(),
528
+ })),
529
+ }),
530
+ handler: async (ctx, args) => {
531
+ const fromTimestamp = args.fromTimestamp ?? Date.now() - 24 * 60 * 60 * 1000;
532
+ const toTimestamp = args.toTimestamp ?? Date.now();
533
+ const logs = await ctx.db
534
+ .query("auditLogs")
535
+ .withIndex("by_timestamp", (q) => q.gte("timestamp", fromTimestamp).lte("timestamp", toTimestamp))
536
+ .collect();
537
+ // Count by severity
538
+ const bySeverity = {
539
+ info: 0,
540
+ warning: 0,
541
+ error: 0,
542
+ critical: 0,
543
+ };
544
+ const actionCounts = {};
545
+ const actorCounts = {};
546
+ for (const log of logs) {
547
+ bySeverity[log.severity]++;
548
+ actionCounts[log.action] = (actionCounts[log.action] ?? 0) + 1;
549
+ if (log.actorId) {
550
+ actorCounts[log.actorId] = (actorCounts[log.actorId] ?? 0) + 1;
551
+ }
552
+ }
553
+ // Get top 10 actions
554
+ const topActions = Object.entries(actionCounts)
555
+ .sort((a, b) => b[1] - a[1])
556
+ .slice(0, 10)
557
+ .map(([action, count]) => ({ action, count }));
558
+ // Get top 10 actors
559
+ const topActors = Object.entries(actorCounts)
560
+ .sort((a, b) => b[1] - a[1])
561
+ .slice(0, 10)
562
+ .map(([actorId, count]) => ({ actorId, count }));
563
+ return {
564
+ totalCount: logs.length,
565
+ bySeverity,
566
+ topActions,
567
+ topActors,
568
+ };
569
+ },
570
+ });
571
+ /**
572
+ * Generate a simple diff between two objects.
573
+ */
574
+ function generateDiff(before, after) {
575
+ const changes = [];
576
+ if (typeof before !== "object" || typeof after !== "object") {
577
+ return `Changed from ${JSON.stringify(before)} to ${JSON.stringify(after)}`;
578
+ }
579
+ const beforeObj = before;
580
+ const afterObj = after;
581
+ // Check for removed keys
582
+ for (const key of Object.keys(beforeObj)) {
583
+ if (!(key in afterObj)) {
584
+ changes.push(`- ${key}: ${JSON.stringify(beforeObj[key])}`);
585
+ }
586
+ }
587
+ // Check for added or changed keys
588
+ for (const key of Object.keys(afterObj)) {
589
+ if (!(key in beforeObj)) {
590
+ changes.push(`+ ${key}: ${JSON.stringify(afterObj[key])}`);
591
+ }
592
+ else if (JSON.stringify(beforeObj[key]) !== JSON.stringify(afterObj[key])) {
593
+ changes.push(`~ ${key}: ${JSON.stringify(beforeObj[key])} → ${JSON.stringify(afterObj[key])}`);
594
+ }
595
+ }
596
+ return changes.join("\n");
597
+ }
598
+ //# sourceMappingURL=lib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/component/lib.ts"],"names":[],"mappings":"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"}