@lessonkit/core 1.0.1 → 1.0.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/index.cjs +37 -17
- package/dist/index.js +37 -17
- package/package.json +3 -2
package/dist/index.cjs
CHANGED
|
@@ -279,6 +279,11 @@ function invokeTrackingSink(sink, event) {
|
|
|
279
279
|
function createTrackingClient(opts) {
|
|
280
280
|
const sink = opts?.sink;
|
|
281
281
|
const batchSink = opts?.batchSink;
|
|
282
|
+
if (batchSink != null && opts?.batch?.enabled === false) {
|
|
283
|
+
throw new Error(
|
|
284
|
+
"[lessonkit] tracking.batchSink cannot be used with batch.enabled: false; omit batch.enabled or set it to true"
|
|
285
|
+
);
|
|
286
|
+
}
|
|
282
287
|
const batchEnabled = opts?.batch?.enabled ?? Boolean(batchSink);
|
|
283
288
|
const flushIntervalMs = opts?.batch?.flushIntervalMs ?? 5e3;
|
|
284
289
|
const maxBatchSize = opts?.batch?.maxBatchSize ?? 25;
|
|
@@ -350,7 +355,7 @@ function createTrackingClient(opts) {
|
|
|
350
355
|
if (disposed || disposing) return;
|
|
351
356
|
if (buffer.length >= maxBufferSize) {
|
|
352
357
|
buffer.shift();
|
|
353
|
-
if (!warnedBufferCap &&
|
|
358
|
+
if (!warnedBufferCap && isDevEnvironment()) {
|
|
354
359
|
warnedBufferCap = true;
|
|
355
360
|
console.warn(
|
|
356
361
|
`[lessonkit] telemetry batch buffer capped at ${maxBufferSize} events; oldest events are dropped while the sink is unavailable.`
|
|
@@ -539,7 +544,8 @@ function createMemoryBackedSessionStorage(session) {
|
|
|
539
544
|
const warnPersistFailure = () => {
|
|
540
545
|
if (warnedPersistFailure) return;
|
|
541
546
|
warnedPersistFailure = true;
|
|
542
|
-
|
|
547
|
+
const g = globalThis;
|
|
548
|
+
if (typeof g.process !== "undefined" && g.process.env?.NODE_ENV === "development") {
|
|
543
549
|
console.warn(
|
|
544
550
|
"[lessonkit] sessionStorage is unavailable or failed; using in-memory session dedupe for this tab (may reset on full reload)."
|
|
545
551
|
);
|
|
@@ -580,23 +586,37 @@ function createMemoryBackedSessionStorage(session) {
|
|
|
580
586
|
function resetStoragePortForTests(storage) {
|
|
581
587
|
storage.resetForTests?.();
|
|
582
588
|
}
|
|
589
|
+
function createInMemorySessionStoragePort() {
|
|
590
|
+
const memory = /* @__PURE__ */ new Map();
|
|
591
|
+
return {
|
|
592
|
+
getItem: (key) => memory.get(key) ?? null,
|
|
593
|
+
setItem: (key, value) => {
|
|
594
|
+
memory.set(key, value);
|
|
595
|
+
},
|
|
596
|
+
removeItem: (key) => {
|
|
597
|
+
memory.delete(key);
|
|
598
|
+
},
|
|
599
|
+
resetForTests: () => {
|
|
600
|
+
memory.clear();
|
|
601
|
+
}
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
function resolveBrowserSessionStorage() {
|
|
605
|
+
try {
|
|
606
|
+
if (typeof sessionStorage === "undefined" || sessionStorage == null) {
|
|
607
|
+
return null;
|
|
608
|
+
}
|
|
609
|
+
return sessionStorage;
|
|
610
|
+
} catch {
|
|
611
|
+
return null;
|
|
612
|
+
}
|
|
613
|
+
}
|
|
583
614
|
function createSessionStoragePort() {
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
return
|
|
587
|
-
getItem: (key) => memory.get(key) ?? null,
|
|
588
|
-
setItem: (key, value) => {
|
|
589
|
-
memory.set(key, value);
|
|
590
|
-
},
|
|
591
|
-
removeItem: (key) => {
|
|
592
|
-
memory.delete(key);
|
|
593
|
-
},
|
|
594
|
-
resetForTests: () => {
|
|
595
|
-
memory.clear();
|
|
596
|
-
}
|
|
597
|
-
};
|
|
615
|
+
const session = resolveBrowserSessionStorage();
|
|
616
|
+
if (!session) {
|
|
617
|
+
return createInMemorySessionStoragePort();
|
|
598
618
|
}
|
|
599
|
-
return createMemoryBackedSessionStorage(
|
|
619
|
+
return createMemoryBackedSessionStorage(session);
|
|
600
620
|
}
|
|
601
621
|
function createGlobalTimer() {
|
|
602
622
|
return {
|
package/dist/index.js
CHANGED
|
@@ -206,6 +206,11 @@ function invokeTrackingSink(sink, event) {
|
|
|
206
206
|
function createTrackingClient(opts) {
|
|
207
207
|
const sink = opts?.sink;
|
|
208
208
|
const batchSink = opts?.batchSink;
|
|
209
|
+
if (batchSink != null && opts?.batch?.enabled === false) {
|
|
210
|
+
throw new Error(
|
|
211
|
+
"[lessonkit] tracking.batchSink cannot be used with batch.enabled: false; omit batch.enabled or set it to true"
|
|
212
|
+
);
|
|
213
|
+
}
|
|
209
214
|
const batchEnabled = opts?.batch?.enabled ?? Boolean(batchSink);
|
|
210
215
|
const flushIntervalMs = opts?.batch?.flushIntervalMs ?? 5e3;
|
|
211
216
|
const maxBatchSize = opts?.batch?.maxBatchSize ?? 25;
|
|
@@ -277,7 +282,7 @@ function createTrackingClient(opts) {
|
|
|
277
282
|
if (disposed || disposing) return;
|
|
278
283
|
if (buffer.length >= maxBufferSize) {
|
|
279
284
|
buffer.shift();
|
|
280
|
-
if (!warnedBufferCap &&
|
|
285
|
+
if (!warnedBufferCap && isDevEnvironment()) {
|
|
281
286
|
warnedBufferCap = true;
|
|
282
287
|
console.warn(
|
|
283
288
|
`[lessonkit] telemetry batch buffer capped at ${maxBufferSize} events; oldest events are dropped while the sink is unavailable.`
|
|
@@ -466,7 +471,8 @@ function createMemoryBackedSessionStorage(session) {
|
|
|
466
471
|
const warnPersistFailure = () => {
|
|
467
472
|
if (warnedPersistFailure) return;
|
|
468
473
|
warnedPersistFailure = true;
|
|
469
|
-
|
|
474
|
+
const g = globalThis;
|
|
475
|
+
if (typeof g.process !== "undefined" && g.process.env?.NODE_ENV === "development") {
|
|
470
476
|
console.warn(
|
|
471
477
|
"[lessonkit] sessionStorage is unavailable or failed; using in-memory session dedupe for this tab (may reset on full reload)."
|
|
472
478
|
);
|
|
@@ -507,23 +513,37 @@ function createMemoryBackedSessionStorage(session) {
|
|
|
507
513
|
function resetStoragePortForTests(storage) {
|
|
508
514
|
storage.resetForTests?.();
|
|
509
515
|
}
|
|
516
|
+
function createInMemorySessionStoragePort() {
|
|
517
|
+
const memory = /* @__PURE__ */ new Map();
|
|
518
|
+
return {
|
|
519
|
+
getItem: (key) => memory.get(key) ?? null,
|
|
520
|
+
setItem: (key, value) => {
|
|
521
|
+
memory.set(key, value);
|
|
522
|
+
},
|
|
523
|
+
removeItem: (key) => {
|
|
524
|
+
memory.delete(key);
|
|
525
|
+
},
|
|
526
|
+
resetForTests: () => {
|
|
527
|
+
memory.clear();
|
|
528
|
+
}
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
function resolveBrowserSessionStorage() {
|
|
532
|
+
try {
|
|
533
|
+
if (typeof sessionStorage === "undefined" || sessionStorage == null) {
|
|
534
|
+
return null;
|
|
535
|
+
}
|
|
536
|
+
return sessionStorage;
|
|
537
|
+
} catch {
|
|
538
|
+
return null;
|
|
539
|
+
}
|
|
540
|
+
}
|
|
510
541
|
function createSessionStoragePort() {
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
return
|
|
514
|
-
getItem: (key) => memory.get(key) ?? null,
|
|
515
|
-
setItem: (key, value) => {
|
|
516
|
-
memory.set(key, value);
|
|
517
|
-
},
|
|
518
|
-
removeItem: (key) => {
|
|
519
|
-
memory.delete(key);
|
|
520
|
-
},
|
|
521
|
-
resetForTests: () => {
|
|
522
|
-
memory.clear();
|
|
523
|
-
}
|
|
524
|
-
};
|
|
542
|
+
const session = resolveBrowserSessionStorage();
|
|
543
|
+
if (!session) {
|
|
544
|
+
return createInMemorySessionStoragePort();
|
|
525
545
|
}
|
|
526
|
-
return createMemoryBackedSessionStorage(
|
|
546
|
+
return createMemoryBackedSessionStorage(session);
|
|
527
547
|
}
|
|
528
548
|
function createGlobalTimer() {
|
|
529
549
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lessonkit/core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Shared types and telemetry primitives for LessonKit.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -48,8 +48,9 @@
|
|
|
48
48
|
"lint": "echo \"(no lint configured yet)\""
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
+
"@types/node": "^22.13.10",
|
|
51
52
|
"tsup": "^8.5.0",
|
|
52
53
|
"typescript": "^5.8.3",
|
|
53
|
-
"vitest": "^
|
|
54
|
+
"vitest": "^4.1.8"
|
|
54
55
|
}
|
|
55
56
|
}
|