conversationalist 0.0.9 → 0.0.10
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 +63 -19
- package/dist/guards.d.ts +13 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/history.d.ts +17 -7
- package/dist/history.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1603 -23
- package/dist/index.js.map +7 -5
- package/dist/markdown/index.js +1579 -43
- package/dist/markdown/index.js.map +5 -4
- package/dist/schemas/index.d.ts +1 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +4 -4
- package/dist/schemas/index.js.map +3 -3
- package/dist/schemas.d.ts +2 -2
- package/dist/schemas.d.ts.map +1 -1
- package/package.json +2 -1
package/dist/markdown/index.js
CHANGED
|
@@ -2630,16 +2630,16 @@ var require_dumper = __commonJS((exports, module) => {
|
|
|
2630
2630
|
this.usedDuplicates = null;
|
|
2631
2631
|
}
|
|
2632
2632
|
function indentString(string, spaces) {
|
|
2633
|
-
var ind = common.repeat(" ", spaces), position = 0,
|
|
2633
|
+
var ind = common.repeat(" ", spaces), position = 0, next2 = -1, result = "", line, length = string.length;
|
|
2634
2634
|
while (position < length) {
|
|
2635
|
-
|
|
2635
|
+
next2 = string.indexOf(`
|
|
2636
2636
|
`, position);
|
|
2637
|
-
if (
|
|
2637
|
+
if (next2 === -1) {
|
|
2638
2638
|
line = string.slice(position);
|
|
2639
2639
|
position = length;
|
|
2640
2640
|
} else {
|
|
2641
|
-
line = string.slice(position,
|
|
2642
|
-
position =
|
|
2641
|
+
line = string.slice(position, next2 + 1);
|
|
2642
|
+
position = next2 + 1;
|
|
2643
2643
|
}
|
|
2644
2644
|
if (line.length && line !== `
|
|
2645
2645
|
`)
|
|
@@ -2800,17 +2800,17 @@ var require_dumper = __commonJS((exports, module) => {
|
|
|
2800
2800
|
return line;
|
|
2801
2801
|
var breakRe = / [^ ]/g;
|
|
2802
2802
|
var match;
|
|
2803
|
-
var start = 0, end, curr = 0,
|
|
2803
|
+
var start = 0, end, curr = 0, next2 = 0;
|
|
2804
2804
|
var result = "";
|
|
2805
2805
|
while (match = breakRe.exec(line)) {
|
|
2806
|
-
|
|
2807
|
-
if (
|
|
2808
|
-
end = curr > start ? curr :
|
|
2806
|
+
next2 = match.index;
|
|
2807
|
+
if (next2 - start > width) {
|
|
2808
|
+
end = curr > start ? curr : next2;
|
|
2809
2809
|
result += `
|
|
2810
2810
|
` + line.slice(start, end);
|
|
2811
2811
|
start = end + 1;
|
|
2812
2812
|
}
|
|
2813
|
-
curr =
|
|
2813
|
+
curr = next2;
|
|
2814
2814
|
}
|
|
2815
2815
|
result += `
|
|
2816
2816
|
`;
|
|
@@ -3491,6 +3491,1516 @@ var require_gray_matter = __commonJS((exports, module) => {
|
|
|
3491
3491
|
module.exports = matter;
|
|
3492
3492
|
});
|
|
3493
3493
|
|
|
3494
|
+
// node_modules/event-emission/dist/index.js
|
|
3495
|
+
var SymbolObservable = typeof Symbol === "function" && Symbol.observable || Symbol.for("@@observable");
|
|
3496
|
+
if (typeof Symbol === "function") {
|
|
3497
|
+
Symbol.observable = SymbolObservable;
|
|
3498
|
+
}
|
|
3499
|
+
function getMethod(obj, key) {
|
|
3500
|
+
if (obj === null || obj === undefined)
|
|
3501
|
+
return;
|
|
3502
|
+
const value = obj[key];
|
|
3503
|
+
if (value == null)
|
|
3504
|
+
return;
|
|
3505
|
+
if (typeof value !== "function") {
|
|
3506
|
+
throw new TypeError(value + " is not a function");
|
|
3507
|
+
}
|
|
3508
|
+
return value;
|
|
3509
|
+
}
|
|
3510
|
+
function hostReportError(e) {
|
|
3511
|
+
if (typeof queueMicrotask === "function") {
|
|
3512
|
+
queueMicrotask(() => {
|
|
3513
|
+
throw e;
|
|
3514
|
+
});
|
|
3515
|
+
} else {
|
|
3516
|
+
setTimeout(() => {
|
|
3517
|
+
throw e;
|
|
3518
|
+
});
|
|
3519
|
+
}
|
|
3520
|
+
}
|
|
3521
|
+
function SubscriptionObserverImpl(subscription) {
|
|
3522
|
+
this._subscription = subscription;
|
|
3523
|
+
}
|
|
3524
|
+
SubscriptionObserverImpl.prototype = Object.create(Object.prototype);
|
|
3525
|
+
Object.defineProperties(SubscriptionObserverImpl.prototype, {
|
|
3526
|
+
constructor: { value: Object, configurable: true, writable: true },
|
|
3527
|
+
closed: {
|
|
3528
|
+
get() {
|
|
3529
|
+
return this._subscription._closed;
|
|
3530
|
+
},
|
|
3531
|
+
configurable: true
|
|
3532
|
+
},
|
|
3533
|
+
next: {
|
|
3534
|
+
value: function next(value) {
|
|
3535
|
+
const subscription = this._subscription;
|
|
3536
|
+
if (subscription._closed)
|
|
3537
|
+
return;
|
|
3538
|
+
const observer = subscription._observer;
|
|
3539
|
+
try {
|
|
3540
|
+
const m = getMethod(observer, "next");
|
|
3541
|
+
if (!m)
|
|
3542
|
+
return;
|
|
3543
|
+
return m.call(observer, value);
|
|
3544
|
+
} catch (e) {
|
|
3545
|
+
try {
|
|
3546
|
+
this.error(e);
|
|
3547
|
+
} catch (err) {
|
|
3548
|
+
hostReportError(err);
|
|
3549
|
+
}
|
|
3550
|
+
}
|
|
3551
|
+
},
|
|
3552
|
+
configurable: true,
|
|
3553
|
+
writable: true
|
|
3554
|
+
},
|
|
3555
|
+
error: {
|
|
3556
|
+
value: function error(errorValue) {
|
|
3557
|
+
const subscription = this._subscription;
|
|
3558
|
+
if (subscription._closed)
|
|
3559
|
+
throw errorValue;
|
|
3560
|
+
subscription._closed = true;
|
|
3561
|
+
const observer = subscription._observer;
|
|
3562
|
+
try {
|
|
3563
|
+
const m = getMethod(observer, "error");
|
|
3564
|
+
if (m) {
|
|
3565
|
+
return m.call(observer, errorValue);
|
|
3566
|
+
}
|
|
3567
|
+
throw errorValue;
|
|
3568
|
+
} finally {
|
|
3569
|
+
subscription._cleanup();
|
|
3570
|
+
}
|
|
3571
|
+
},
|
|
3572
|
+
configurable: true,
|
|
3573
|
+
writable: true
|
|
3574
|
+
},
|
|
3575
|
+
complete: {
|
|
3576
|
+
value: function complete(value) {
|
|
3577
|
+
const subscription = this._subscription;
|
|
3578
|
+
if (subscription._closed)
|
|
3579
|
+
return;
|
|
3580
|
+
subscription._closed = true;
|
|
3581
|
+
const observer = subscription._observer;
|
|
3582
|
+
try {
|
|
3583
|
+
const m = getMethod(observer, "complete");
|
|
3584
|
+
if (m) {
|
|
3585
|
+
return m.call(observer, value);
|
|
3586
|
+
}
|
|
3587
|
+
return;
|
|
3588
|
+
} finally {
|
|
3589
|
+
subscription._cleanup();
|
|
3590
|
+
}
|
|
3591
|
+
},
|
|
3592
|
+
configurable: true,
|
|
3593
|
+
writable: true
|
|
3594
|
+
}
|
|
3595
|
+
});
|
|
3596
|
+
Object.defineProperty(SubscriptionObserverImpl.prototype.next, "length", { value: 1 });
|
|
3597
|
+
Object.defineProperty(SubscriptionObserverImpl.prototype.error, "length", { value: 1 });
|
|
3598
|
+
Object.defineProperty(SubscriptionObserverImpl.prototype.complete, "length", {
|
|
3599
|
+
value: 1
|
|
3600
|
+
});
|
|
3601
|
+
function Subscription(observer, subscriber) {
|
|
3602
|
+
this._observer = observer;
|
|
3603
|
+
this._cleanupFn = undefined;
|
|
3604
|
+
this._closed = false;
|
|
3605
|
+
const subscriptionObserver = new SubscriptionObserverImpl(this);
|
|
3606
|
+
try {
|
|
3607
|
+
const start = getMethod(observer, "start");
|
|
3608
|
+
if (start) {
|
|
3609
|
+
start.call(observer, this);
|
|
3610
|
+
}
|
|
3611
|
+
} catch (e) {
|
|
3612
|
+
hostReportError(e);
|
|
3613
|
+
}
|
|
3614
|
+
if (this._closed)
|
|
3615
|
+
return;
|
|
3616
|
+
try {
|
|
3617
|
+
const cleanup = subscriber(subscriptionObserver);
|
|
3618
|
+
if (cleanup != null) {
|
|
3619
|
+
if (typeof cleanup !== "function" && typeof cleanup.unsubscribe !== "function") {
|
|
3620
|
+
throw new TypeError(cleanup + " is not a function or a subscription");
|
|
3621
|
+
}
|
|
3622
|
+
this._cleanupFn = cleanup;
|
|
3623
|
+
if (this._closed) {
|
|
3624
|
+
this._cleanup();
|
|
3625
|
+
}
|
|
3626
|
+
}
|
|
3627
|
+
} catch (e) {
|
|
3628
|
+
subscriptionObserver.error(e);
|
|
3629
|
+
}
|
|
3630
|
+
}
|
|
3631
|
+
Subscription.prototype = Object.create(Object.prototype);
|
|
3632
|
+
Object.defineProperties(Subscription.prototype, {
|
|
3633
|
+
constructor: { value: Object, configurable: true, writable: true },
|
|
3634
|
+
closed: {
|
|
3635
|
+
get() {
|
|
3636
|
+
return this._closed;
|
|
3637
|
+
},
|
|
3638
|
+
configurable: true
|
|
3639
|
+
},
|
|
3640
|
+
unsubscribe: {
|
|
3641
|
+
value: function unsubscribe() {
|
|
3642
|
+
if (this._closed)
|
|
3643
|
+
return;
|
|
3644
|
+
this._closed = true;
|
|
3645
|
+
this._cleanup();
|
|
3646
|
+
},
|
|
3647
|
+
configurable: true,
|
|
3648
|
+
writable: true
|
|
3649
|
+
},
|
|
3650
|
+
_cleanup: {
|
|
3651
|
+
value: function _cleanup() {
|
|
3652
|
+
const cleanup = this._cleanupFn;
|
|
3653
|
+
if (!cleanup)
|
|
3654
|
+
return;
|
|
3655
|
+
this._cleanupFn = undefined;
|
|
3656
|
+
try {
|
|
3657
|
+
if (typeof cleanup === "function") {
|
|
3658
|
+
cleanup();
|
|
3659
|
+
} else if (cleanup && typeof cleanup.unsubscribe === "function") {
|
|
3660
|
+
cleanup.unsubscribe();
|
|
3661
|
+
}
|
|
3662
|
+
} catch (e) {
|
|
3663
|
+
hostReportError(e);
|
|
3664
|
+
}
|
|
3665
|
+
},
|
|
3666
|
+
configurable: true,
|
|
3667
|
+
writable: true
|
|
3668
|
+
}
|
|
3669
|
+
});
|
|
3670
|
+
|
|
3671
|
+
class Observable {
|
|
3672
|
+
_subscriber;
|
|
3673
|
+
constructor(subscriber) {
|
|
3674
|
+
if (typeof subscriber !== "function") {
|
|
3675
|
+
throw new TypeError("Observable initializer must be a function");
|
|
3676
|
+
}
|
|
3677
|
+
this._subscriber = subscriber;
|
|
3678
|
+
}
|
|
3679
|
+
subscribe(observerOrNext, error2, complete2) {
|
|
3680
|
+
let observer;
|
|
3681
|
+
if (typeof observerOrNext === "function") {
|
|
3682
|
+
observer = {
|
|
3683
|
+
next: observerOrNext,
|
|
3684
|
+
error: error2,
|
|
3685
|
+
complete: complete2
|
|
3686
|
+
};
|
|
3687
|
+
} else if (typeof observerOrNext !== "object" || observerOrNext === null) {
|
|
3688
|
+
throw new TypeError(observerOrNext + " is not an object");
|
|
3689
|
+
} else {
|
|
3690
|
+
observer = observerOrNext;
|
|
3691
|
+
}
|
|
3692
|
+
return new Subscription(observer, this._subscriber);
|
|
3693
|
+
}
|
|
3694
|
+
[SymbolObservable]() {
|
|
3695
|
+
return this;
|
|
3696
|
+
}
|
|
3697
|
+
static of(...items) {
|
|
3698
|
+
const C = typeof this === "function" ? this : Observable;
|
|
3699
|
+
return new C((observer) => {
|
|
3700
|
+
for (let i = 0;i < items.length; ++i) {
|
|
3701
|
+
observer.next(items[i]);
|
|
3702
|
+
if (observer.closed)
|
|
3703
|
+
return;
|
|
3704
|
+
}
|
|
3705
|
+
observer.complete();
|
|
3706
|
+
});
|
|
3707
|
+
}
|
|
3708
|
+
static from(x) {
|
|
3709
|
+
const C = typeof this === "function" ? this : Observable;
|
|
3710
|
+
if (x == null)
|
|
3711
|
+
throw new TypeError(x + " is not an object");
|
|
3712
|
+
const method = x[SymbolObservable];
|
|
3713
|
+
if (method != null) {
|
|
3714
|
+
if (typeof method !== "function") {
|
|
3715
|
+
throw new TypeError(method + " is not a function");
|
|
3716
|
+
}
|
|
3717
|
+
const observable = method.call(x);
|
|
3718
|
+
if (Object(observable) !== observable) {
|
|
3719
|
+
throw new TypeError(observable + " is not an object");
|
|
3720
|
+
}
|
|
3721
|
+
if (observable.constructor === C) {
|
|
3722
|
+
return observable;
|
|
3723
|
+
}
|
|
3724
|
+
return new C((observer) => observable.subscribe(observer));
|
|
3725
|
+
}
|
|
3726
|
+
if (Symbol.iterator in x) {
|
|
3727
|
+
return new C((observer) => {
|
|
3728
|
+
for (const item of x) {
|
|
3729
|
+
observer.next(item);
|
|
3730
|
+
if (observer.closed)
|
|
3731
|
+
return;
|
|
3732
|
+
}
|
|
3733
|
+
observer.complete();
|
|
3734
|
+
});
|
|
3735
|
+
}
|
|
3736
|
+
throw new TypeError(x + " is not observable");
|
|
3737
|
+
}
|
|
3738
|
+
}
|
|
3739
|
+
var PROXY_MARKER = Symbol.for("@lasercat/event-emission/proxy");
|
|
3740
|
+
var ORIGINAL_TARGET = Symbol.for("@lasercat/event-emission/original");
|
|
3741
|
+
var ARRAY_MUTATORS = new Set([
|
|
3742
|
+
"push",
|
|
3743
|
+
"pop",
|
|
3744
|
+
"shift",
|
|
3745
|
+
"unshift",
|
|
3746
|
+
"splice",
|
|
3747
|
+
"sort",
|
|
3748
|
+
"reverse",
|
|
3749
|
+
"fill",
|
|
3750
|
+
"copyWithin"
|
|
3751
|
+
]);
|
|
3752
|
+
function isProxyable(value) {
|
|
3753
|
+
return value !== null && typeof value === "object" && !isProxied(value) && !(value instanceof Date) && !(value instanceof RegExp) && !(value instanceof Map) && !(value instanceof Set) && !(value instanceof WeakMap) && !(value instanceof WeakSet) && !(value instanceof Promise) && !(value instanceof Error) && !(value instanceof ArrayBuffer) && !ArrayBuffer.isView(value);
|
|
3754
|
+
}
|
|
3755
|
+
function isProxied(value) {
|
|
3756
|
+
return typeof value === "object" && value !== null && value[PROXY_MARKER] === true;
|
|
3757
|
+
}
|
|
3758
|
+
function isArrayMutator(prop) {
|
|
3759
|
+
return typeof prop === "string" && ARRAY_MUTATORS.has(prop);
|
|
3760
|
+
}
|
|
3761
|
+
function cloneAlongPath(obj, path) {
|
|
3762
|
+
const isArray = Array.isArray(obj);
|
|
3763
|
+
const rootClone = isArray ? [...obj] : { ...obj };
|
|
3764
|
+
if (!path || isArray) {
|
|
3765
|
+
return rootClone;
|
|
3766
|
+
}
|
|
3767
|
+
const parts = path.split(".");
|
|
3768
|
+
const result = rootClone;
|
|
3769
|
+
let current = result;
|
|
3770
|
+
for (let i = 0;i < parts.length; i++) {
|
|
3771
|
+
const key = parts[i];
|
|
3772
|
+
const value = current[key];
|
|
3773
|
+
if (value !== null && typeof value === "object") {
|
|
3774
|
+
current[key] = Array.isArray(value) ? [...value] : { ...value };
|
|
3775
|
+
if (i < parts.length - 1) {
|
|
3776
|
+
current = current[key];
|
|
3777
|
+
}
|
|
3778
|
+
} else {
|
|
3779
|
+
break;
|
|
3780
|
+
}
|
|
3781
|
+
}
|
|
3782
|
+
return result;
|
|
3783
|
+
}
|
|
3784
|
+
function cloneForComparison(obj, strategy, changedPath, deepClone) {
|
|
3785
|
+
if (obj === null || typeof obj !== "object")
|
|
3786
|
+
return obj;
|
|
3787
|
+
switch (strategy) {
|
|
3788
|
+
case "shallow":
|
|
3789
|
+
return Array.isArray(obj) ? [...obj] : { ...obj };
|
|
3790
|
+
case "deep":
|
|
3791
|
+
if (deepClone) {
|
|
3792
|
+
return deepClone(obj);
|
|
3793
|
+
}
|
|
3794
|
+
if (typeof structuredClone !== "function") {
|
|
3795
|
+
throw new Error("structuredClone is not available in this runtime; provide observe.deepClone, or use cloneStrategy 'path' or 'shallow'.");
|
|
3796
|
+
}
|
|
3797
|
+
return structuredClone(obj);
|
|
3798
|
+
case "path":
|
|
3799
|
+
return cloneAlongPath(obj, changedPath);
|
|
3800
|
+
default:
|
|
3801
|
+
return obj;
|
|
3802
|
+
}
|
|
3803
|
+
}
|
|
3804
|
+
function computeArrayDiff(method, before, _after, args) {
|
|
3805
|
+
switch (method) {
|
|
3806
|
+
case "push":
|
|
3807
|
+
return { added: args };
|
|
3808
|
+
case "pop":
|
|
3809
|
+
return { removed: before.length > 0 ? [before[before.length - 1]] : [] };
|
|
3810
|
+
case "shift":
|
|
3811
|
+
return { removed: before.length > 0 ? [before[0]] : [] };
|
|
3812
|
+
case "unshift":
|
|
3813
|
+
return { added: args };
|
|
3814
|
+
case "splice": {
|
|
3815
|
+
const [start, deleteCount, ...items] = args;
|
|
3816
|
+
const actualStart = start < 0 ? Math.max(before.length + start, 0) : Math.min(start, before.length);
|
|
3817
|
+
const actualDeleteCount = Math.min(deleteCount ?? before.length - actualStart, before.length - actualStart);
|
|
3818
|
+
return {
|
|
3819
|
+
removed: before.slice(actualStart, actualStart + actualDeleteCount),
|
|
3820
|
+
added: items
|
|
3821
|
+
};
|
|
3822
|
+
}
|
|
3823
|
+
case "sort":
|
|
3824
|
+
case "reverse":
|
|
3825
|
+
case "fill":
|
|
3826
|
+
case "copyWithin":
|
|
3827
|
+
return {};
|
|
3828
|
+
default:
|
|
3829
|
+
return {};
|
|
3830
|
+
}
|
|
3831
|
+
}
|
|
3832
|
+
var proxyRegistry = new WeakMap;
|
|
3833
|
+
function getContextRegistry(target) {
|
|
3834
|
+
let contextMap = proxyRegistry.get(target);
|
|
3835
|
+
if (!contextMap) {
|
|
3836
|
+
contextMap = new WeakMap;
|
|
3837
|
+
proxyRegistry.set(target, contextMap);
|
|
3838
|
+
}
|
|
3839
|
+
return contextMap;
|
|
3840
|
+
}
|
|
3841
|
+
function createArrayMethodInterceptor(array, method, path, context) {
|
|
3842
|
+
const original = array[method];
|
|
3843
|
+
return function(...args) {
|
|
3844
|
+
const previousState = cloneForComparison(context.originalRoot, context.options.cloneStrategy, path, context.options.deepClone);
|
|
3845
|
+
const previousItems = [...array];
|
|
3846
|
+
const result = original.apply(this, args);
|
|
3847
|
+
const { added, removed } = computeArrayDiff(method, previousItems, array, args);
|
|
3848
|
+
const methodEventPath = path ? `update:${path}.${method}` : `update:${method}`;
|
|
3849
|
+
const arrayEventPath = path ? `update:${path}` : "update:";
|
|
3850
|
+
context.eventTarget.dispatchEvent({
|
|
3851
|
+
type: methodEventPath,
|
|
3852
|
+
detail: {
|
|
3853
|
+
method,
|
|
3854
|
+
args,
|
|
3855
|
+
result,
|
|
3856
|
+
added,
|
|
3857
|
+
removed,
|
|
3858
|
+
current: context.originalRoot,
|
|
3859
|
+
previous: previousState
|
|
3860
|
+
}
|
|
3861
|
+
});
|
|
3862
|
+
if (path) {
|
|
3863
|
+
context.eventTarget.dispatchEvent({
|
|
3864
|
+
type: arrayEventPath,
|
|
3865
|
+
detail: {
|
|
3866
|
+
value: array,
|
|
3867
|
+
current: context.originalRoot,
|
|
3868
|
+
previous: previousState
|
|
3869
|
+
}
|
|
3870
|
+
});
|
|
3871
|
+
}
|
|
3872
|
+
context.eventTarget.dispatchEvent({
|
|
3873
|
+
type: "update",
|
|
3874
|
+
detail: {
|
|
3875
|
+
current: context.originalRoot,
|
|
3876
|
+
previous: previousState
|
|
3877
|
+
}
|
|
3878
|
+
});
|
|
3879
|
+
return result;
|
|
3880
|
+
};
|
|
3881
|
+
}
|
|
3882
|
+
function createObservableProxyInternal(target, path, context) {
|
|
3883
|
+
const contextRegistry = getContextRegistry(target);
|
|
3884
|
+
const existing = contextRegistry.get(context);
|
|
3885
|
+
if (existing) {
|
|
3886
|
+
return existing.proxy;
|
|
3887
|
+
}
|
|
3888
|
+
const proxy = new Proxy(target, {
|
|
3889
|
+
get(obj, prop, receiver) {
|
|
3890
|
+
if (prop === PROXY_MARKER)
|
|
3891
|
+
return true;
|
|
3892
|
+
if (prop === ORIGINAL_TARGET)
|
|
3893
|
+
return obj;
|
|
3894
|
+
if (typeof prop === "symbol") {
|
|
3895
|
+
return Reflect.get(obj, prop, receiver);
|
|
3896
|
+
}
|
|
3897
|
+
const value = Reflect.get(obj, prop, receiver);
|
|
3898
|
+
if (Array.isArray(obj) && isArrayMutator(prop)) {
|
|
3899
|
+
return createArrayMethodInterceptor(obj, prop, path, context);
|
|
3900
|
+
}
|
|
3901
|
+
if (context.options.deep && isProxyable(value)) {
|
|
3902
|
+
const nestedPath = path ? `${path}.${prop}` : prop;
|
|
3903
|
+
return createObservableProxyInternal(value, nestedPath, context);
|
|
3904
|
+
}
|
|
3905
|
+
return value;
|
|
3906
|
+
},
|
|
3907
|
+
set(obj, prop, value, receiver) {
|
|
3908
|
+
if (typeof prop === "symbol") {
|
|
3909
|
+
return Reflect.set(obj, prop, value, receiver);
|
|
3910
|
+
}
|
|
3911
|
+
const oldValue = Reflect.get(obj, prop, receiver);
|
|
3912
|
+
if (Object.is(oldValue, value)) {
|
|
3913
|
+
return true;
|
|
3914
|
+
}
|
|
3915
|
+
const propPath = path ? `${path}.${prop}` : prop;
|
|
3916
|
+
const previousState = cloneForComparison(context.originalRoot, context.options.cloneStrategy, propPath, context.options.deepClone);
|
|
3917
|
+
const success = Reflect.set(obj, prop, value, receiver);
|
|
3918
|
+
if (success) {
|
|
3919
|
+
context.eventTarget.dispatchEvent({
|
|
3920
|
+
type: `update:${propPath}`,
|
|
3921
|
+
detail: {
|
|
3922
|
+
value,
|
|
3923
|
+
current: context.originalRoot,
|
|
3924
|
+
previous: previousState
|
|
3925
|
+
}
|
|
3926
|
+
});
|
|
3927
|
+
context.eventTarget.dispatchEvent({
|
|
3928
|
+
type: "update",
|
|
3929
|
+
detail: {
|
|
3930
|
+
current: context.originalRoot,
|
|
3931
|
+
previous: previousState
|
|
3932
|
+
}
|
|
3933
|
+
});
|
|
3934
|
+
}
|
|
3935
|
+
return success;
|
|
3936
|
+
},
|
|
3937
|
+
deleteProperty(obj, prop) {
|
|
3938
|
+
if (typeof prop === "symbol") {
|
|
3939
|
+
return Reflect.deleteProperty(obj, prop);
|
|
3940
|
+
}
|
|
3941
|
+
const propPath = path ? `${path}.${String(prop)}` : String(prop);
|
|
3942
|
+
const previousState = cloneForComparison(context.originalRoot, context.options.cloneStrategy, propPath, context.options.deepClone);
|
|
3943
|
+
const success = Reflect.deleteProperty(obj, prop);
|
|
3944
|
+
if (success) {
|
|
3945
|
+
context.eventTarget.dispatchEvent({
|
|
3946
|
+
type: `update:${propPath}`,
|
|
3947
|
+
detail: {
|
|
3948
|
+
value: undefined,
|
|
3949
|
+
current: context.originalRoot,
|
|
3950
|
+
previous: previousState
|
|
3951
|
+
}
|
|
3952
|
+
});
|
|
3953
|
+
context.eventTarget.dispatchEvent({
|
|
3954
|
+
type: "update",
|
|
3955
|
+
detail: {
|
|
3956
|
+
current: context.originalRoot,
|
|
3957
|
+
previous: previousState
|
|
3958
|
+
}
|
|
3959
|
+
});
|
|
3960
|
+
}
|
|
3961
|
+
return success;
|
|
3962
|
+
}
|
|
3963
|
+
});
|
|
3964
|
+
contextRegistry.set(context, {
|
|
3965
|
+
proxy,
|
|
3966
|
+
path
|
|
3967
|
+
});
|
|
3968
|
+
return proxy;
|
|
3969
|
+
}
|
|
3970
|
+
function isEventTarget(obj) {
|
|
3971
|
+
return typeof obj === "object" && obj !== null && typeof obj.addEventListener === "function" && typeof obj.removeEventListener === "function" && typeof obj.dispatchEvent === "function";
|
|
3972
|
+
}
|
|
3973
|
+
function setupEventForwarding(source, target) {
|
|
3974
|
+
const handlers = new Map;
|
|
3975
|
+
const sourceAddEventListener = source.addEventListener.bind(source);
|
|
3976
|
+
const sourceRemoveEventListener = source.removeEventListener.bind(source);
|
|
3977
|
+
const forwardHandler = (type) => (event) => {
|
|
3978
|
+
const detail = event.detail ?? event;
|
|
3979
|
+
target.dispatchEvent({
|
|
3980
|
+
type,
|
|
3981
|
+
detail
|
|
3982
|
+
});
|
|
3983
|
+
};
|
|
3984
|
+
const originalAddEventListener = target.addEventListener.bind(target);
|
|
3985
|
+
const wrappedAddEventListener = (type, listener, options2) => {
|
|
3986
|
+
if (!handlers.has(type) && type !== "update" && !type.startsWith("update:")) {
|
|
3987
|
+
const handler = forwardHandler(type);
|
|
3988
|
+
handlers.set(type, handler);
|
|
3989
|
+
sourceAddEventListener(type, handler);
|
|
3990
|
+
}
|
|
3991
|
+
return originalAddEventListener(type, listener, options2);
|
|
3992
|
+
};
|
|
3993
|
+
target.addEventListener = wrappedAddEventListener;
|
|
3994
|
+
return () => {
|
|
3995
|
+
target.addEventListener = originalAddEventListener;
|
|
3996
|
+
for (const [type, handler] of handlers) {
|
|
3997
|
+
sourceRemoveEventListener(type, handler);
|
|
3998
|
+
}
|
|
3999
|
+
handlers.clear();
|
|
4000
|
+
};
|
|
4001
|
+
}
|
|
4002
|
+
function createObservableProxy(target, eventTarget, options2) {
|
|
4003
|
+
const resolvedOptions = {
|
|
4004
|
+
deep: options2?.deep ?? true,
|
|
4005
|
+
cloneStrategy: options2?.cloneStrategy ?? "path",
|
|
4006
|
+
deepClone: options2?.deepClone
|
|
4007
|
+
};
|
|
4008
|
+
const context = {
|
|
4009
|
+
eventTarget,
|
|
4010
|
+
originalRoot: target,
|
|
4011
|
+
options: resolvedOptions
|
|
4012
|
+
};
|
|
4013
|
+
const proxy = createObservableProxyInternal(target, "", context);
|
|
4014
|
+
if (isEventTarget(target)) {
|
|
4015
|
+
const cleanupForwarding = setupEventForwarding(target, eventTarget);
|
|
4016
|
+
const maybeComplete = eventTarget.complete;
|
|
4017
|
+
if (typeof maybeComplete === "function") {
|
|
4018
|
+
const originalComplete = maybeComplete.bind(eventTarget);
|
|
4019
|
+
let cleaned = false;
|
|
4020
|
+
eventTarget.complete = () => {
|
|
4021
|
+
if (!cleaned) {
|
|
4022
|
+
cleaned = true;
|
|
4023
|
+
cleanupForwarding();
|
|
4024
|
+
}
|
|
4025
|
+
return originalComplete();
|
|
4026
|
+
};
|
|
4027
|
+
}
|
|
4028
|
+
}
|
|
4029
|
+
return proxy;
|
|
4030
|
+
}
|
|
4031
|
+
|
|
4032
|
+
class BufferOverflowError extends Error {
|
|
4033
|
+
constructor(eventType, bufferSize) {
|
|
4034
|
+
super(`Buffer overflow for event type "${eventType}" (max: ${bufferSize})`);
|
|
4035
|
+
this.name = "BufferOverflowError";
|
|
4036
|
+
}
|
|
4037
|
+
}
|
|
4038
|
+
function matchesWildcard(eventType, pattern) {
|
|
4039
|
+
if (pattern === "*")
|
|
4040
|
+
return true;
|
|
4041
|
+
return pattern.endsWith(":*") && eventType.startsWith(pattern.slice(0, -2) + ":");
|
|
4042
|
+
}
|
|
4043
|
+
var EVENT_STATE = Symbol("event-emission:event-state");
|
|
4044
|
+
function createEventTarget(targetOrOpts, opts) {
|
|
4045
|
+
if (opts?.observe === true && targetOrOpts && typeof targetOrOpts === "object") {
|
|
4046
|
+
const target = targetOrOpts;
|
|
4047
|
+
const eventTarget = createEventTargetInternal({
|
|
4048
|
+
onListenerError: opts.onListenerError
|
|
4049
|
+
});
|
|
4050
|
+
const proxy = createObservableProxy(target, eventTarget, {
|
|
4051
|
+
deep: opts.deep,
|
|
4052
|
+
cloneStrategy: opts.cloneStrategy,
|
|
4053
|
+
deepClone: opts.deepClone
|
|
4054
|
+
});
|
|
4055
|
+
const methodNames = [
|
|
4056
|
+
"addEventListener",
|
|
4057
|
+
"removeEventListener",
|
|
4058
|
+
"dispatchEvent",
|
|
4059
|
+
"clear",
|
|
4060
|
+
"on",
|
|
4061
|
+
"once",
|
|
4062
|
+
"removeAllListeners",
|
|
4063
|
+
"pipe",
|
|
4064
|
+
"addWildcardListener",
|
|
4065
|
+
"removeWildcardListener",
|
|
4066
|
+
"complete",
|
|
4067
|
+
"subscribe",
|
|
4068
|
+
"toObservable",
|
|
4069
|
+
"events"
|
|
4070
|
+
];
|
|
4071
|
+
for (const name of methodNames) {
|
|
4072
|
+
Object.defineProperty(proxy, name, {
|
|
4073
|
+
value: eventTarget[name],
|
|
4074
|
+
writable: false,
|
|
4075
|
+
enumerable: false,
|
|
4076
|
+
configurable: true
|
|
4077
|
+
});
|
|
4078
|
+
}
|
|
4079
|
+
Object.defineProperty(proxy, "completed", {
|
|
4080
|
+
get: () => eventTarget.completed,
|
|
4081
|
+
enumerable: false,
|
|
4082
|
+
configurable: true
|
|
4083
|
+
});
|
|
4084
|
+
return proxy;
|
|
4085
|
+
}
|
|
4086
|
+
return createEventTargetInternal(targetOrOpts);
|
|
4087
|
+
}
|
|
4088
|
+
function createEventTargetInternal(opts) {
|
|
4089
|
+
const listeners = new Map;
|
|
4090
|
+
const wildcardListeners = new Set;
|
|
4091
|
+
let isCompleted = false;
|
|
4092
|
+
const completionCallbacks = new Set;
|
|
4093
|
+
const now = () => typeof globalThis.performance?.now === "function" ? globalThis.performance.now() : Date.now();
|
|
4094
|
+
const initializeEventState = (state, type, bubbles, cancelable) => {
|
|
4095
|
+
state.initializedFlag = true;
|
|
4096
|
+
state.stopPropagationFlag = false;
|
|
4097
|
+
state.stopImmediatePropagationFlag = false;
|
|
4098
|
+
state.canceledFlag = false;
|
|
4099
|
+
state.isTrusted = false;
|
|
4100
|
+
state.target = null;
|
|
4101
|
+
state.currentTarget = null;
|
|
4102
|
+
state.eventPhase = 0;
|
|
4103
|
+
state.type = type;
|
|
4104
|
+
state.bubbles = bubbles;
|
|
4105
|
+
state.cancelable = cancelable;
|
|
4106
|
+
};
|
|
4107
|
+
const setCanceledFlag = (state) => {
|
|
4108
|
+
if (state.cancelable && !state.inPassiveListenerFlag) {
|
|
4109
|
+
state.canceledFlag = true;
|
|
4110
|
+
}
|
|
4111
|
+
};
|
|
4112
|
+
const createEvent = (type, detail, init) => {
|
|
4113
|
+
const state = {
|
|
4114
|
+
dispatchFlag: false,
|
|
4115
|
+
initializedFlag: true,
|
|
4116
|
+
stopPropagationFlag: false,
|
|
4117
|
+
stopImmediatePropagationFlag: false,
|
|
4118
|
+
canceledFlag: false,
|
|
4119
|
+
inPassiveListenerFlag: false,
|
|
4120
|
+
composedFlag: Boolean(init?.composed),
|
|
4121
|
+
eventPhase: init?.eventPhase ?? 0,
|
|
4122
|
+
currentTarget: init?.currentTarget ?? init?.target ?? null,
|
|
4123
|
+
target: init?.target ?? null,
|
|
4124
|
+
timeStamp: init?.timeStamp ?? now(),
|
|
4125
|
+
path: [],
|
|
4126
|
+
type,
|
|
4127
|
+
bubbles: Boolean(init?.bubbles),
|
|
4128
|
+
cancelable: Boolean(init?.cancelable),
|
|
4129
|
+
isTrusted: false
|
|
4130
|
+
};
|
|
4131
|
+
const event = { detail };
|
|
4132
|
+
Object.defineProperties(event, {
|
|
4133
|
+
type: {
|
|
4134
|
+
get: () => state.type,
|
|
4135
|
+
enumerable: true,
|
|
4136
|
+
configurable: true
|
|
4137
|
+
},
|
|
4138
|
+
bubbles: {
|
|
4139
|
+
get: () => state.bubbles,
|
|
4140
|
+
enumerable: true,
|
|
4141
|
+
configurable: true
|
|
4142
|
+
},
|
|
4143
|
+
cancelable: {
|
|
4144
|
+
get: () => state.cancelable,
|
|
4145
|
+
enumerable: true,
|
|
4146
|
+
configurable: true
|
|
4147
|
+
},
|
|
4148
|
+
cancelBubble: {
|
|
4149
|
+
get: () => state.stopPropagationFlag,
|
|
4150
|
+
set: (value) => {
|
|
4151
|
+
if (value)
|
|
4152
|
+
state.stopPropagationFlag = true;
|
|
4153
|
+
},
|
|
4154
|
+
enumerable: true,
|
|
4155
|
+
configurable: true
|
|
4156
|
+
},
|
|
4157
|
+
composed: {
|
|
4158
|
+
get: () => state.composedFlag,
|
|
4159
|
+
enumerable: true,
|
|
4160
|
+
configurable: true
|
|
4161
|
+
},
|
|
4162
|
+
currentTarget: {
|
|
4163
|
+
get: () => state.currentTarget,
|
|
4164
|
+
enumerable: true,
|
|
4165
|
+
configurable: true
|
|
4166
|
+
},
|
|
4167
|
+
defaultPrevented: {
|
|
4168
|
+
get: () => state.canceledFlag,
|
|
4169
|
+
enumerable: true,
|
|
4170
|
+
configurable: true
|
|
4171
|
+
},
|
|
4172
|
+
eventPhase: {
|
|
4173
|
+
get: () => state.eventPhase,
|
|
4174
|
+
enumerable: true,
|
|
4175
|
+
configurable: true
|
|
4176
|
+
},
|
|
4177
|
+
isTrusted: {
|
|
4178
|
+
get: () => state.isTrusted,
|
|
4179
|
+
enumerable: true,
|
|
4180
|
+
configurable: true
|
|
4181
|
+
},
|
|
4182
|
+
returnValue: {
|
|
4183
|
+
get: () => !state.canceledFlag,
|
|
4184
|
+
set: (value) => {
|
|
4185
|
+
if (value === false)
|
|
4186
|
+
setCanceledFlag(state);
|
|
4187
|
+
},
|
|
4188
|
+
enumerable: true,
|
|
4189
|
+
configurable: true
|
|
4190
|
+
},
|
|
4191
|
+
srcElement: {
|
|
4192
|
+
get: () => state.target,
|
|
4193
|
+
enumerable: true,
|
|
4194
|
+
configurable: true
|
|
4195
|
+
},
|
|
4196
|
+
target: {
|
|
4197
|
+
get: () => state.target,
|
|
4198
|
+
enumerable: true,
|
|
4199
|
+
configurable: true
|
|
4200
|
+
},
|
|
4201
|
+
timeStamp: {
|
|
4202
|
+
get: () => state.timeStamp,
|
|
4203
|
+
enumerable: true,
|
|
4204
|
+
configurable: true
|
|
4205
|
+
},
|
|
4206
|
+
composedPath: {
|
|
4207
|
+
value: () => state.path.map((entry) => entry.invocationTarget),
|
|
4208
|
+
enumerable: true,
|
|
4209
|
+
configurable: true
|
|
4210
|
+
},
|
|
4211
|
+
initEvent: {
|
|
4212
|
+
value: (newType, bubbles = false, cancelable = false) => {
|
|
4213
|
+
if (state.dispatchFlag)
|
|
4214
|
+
return;
|
|
4215
|
+
initializeEventState(state, newType, Boolean(bubbles), Boolean(cancelable));
|
|
4216
|
+
},
|
|
4217
|
+
enumerable: true,
|
|
4218
|
+
configurable: true
|
|
4219
|
+
},
|
|
4220
|
+
preventDefault: {
|
|
4221
|
+
value: () => setCanceledFlag(state),
|
|
4222
|
+
enumerable: true,
|
|
4223
|
+
configurable: true
|
|
4224
|
+
},
|
|
4225
|
+
stopImmediatePropagation: {
|
|
4226
|
+
value: () => {
|
|
4227
|
+
state.stopPropagationFlag = true;
|
|
4228
|
+
state.stopImmediatePropagationFlag = true;
|
|
4229
|
+
},
|
|
4230
|
+
enumerable: true,
|
|
4231
|
+
configurable: true
|
|
4232
|
+
},
|
|
4233
|
+
stopPropagation: {
|
|
4234
|
+
value: () => {
|
|
4235
|
+
state.stopPropagationFlag = true;
|
|
4236
|
+
},
|
|
4237
|
+
enumerable: true,
|
|
4238
|
+
configurable: true
|
|
4239
|
+
},
|
|
4240
|
+
NONE: { value: 0, enumerable: true, configurable: true },
|
|
4241
|
+
CAPTURING_PHASE: { value: 1, enumerable: true, configurable: true },
|
|
4242
|
+
AT_TARGET: { value: 2, enumerable: true, configurable: true },
|
|
4243
|
+
BUBBLING_PHASE: { value: 3, enumerable: true, configurable: true },
|
|
4244
|
+
[EVENT_STATE]: {
|
|
4245
|
+
value: state,
|
|
4246
|
+
enumerable: false,
|
|
4247
|
+
configurable: false
|
|
4248
|
+
}
|
|
4249
|
+
});
|
|
4250
|
+
return event;
|
|
4251
|
+
};
|
|
4252
|
+
const getEventState = (event) => event[EVENT_STATE];
|
|
4253
|
+
const normalizeAddListenerOptions = (options2) => {
|
|
4254
|
+
if (typeof options2 === "boolean") {
|
|
4255
|
+
return {
|
|
4256
|
+
capture: options2,
|
|
4257
|
+
passive: false,
|
|
4258
|
+
once: false,
|
|
4259
|
+
signal: null
|
|
4260
|
+
};
|
|
4261
|
+
}
|
|
4262
|
+
return {
|
|
4263
|
+
capture: Boolean(options2?.capture),
|
|
4264
|
+
passive: Boolean(options2?.passive),
|
|
4265
|
+
once: Boolean(options2?.once),
|
|
4266
|
+
signal: options2?.signal ?? null
|
|
4267
|
+
};
|
|
4268
|
+
};
|
|
4269
|
+
const normalizeCaptureOption = (options2) => {
|
|
4270
|
+
if (typeof options2 === "boolean")
|
|
4271
|
+
return options2;
|
|
4272
|
+
return Boolean(options2?.capture);
|
|
4273
|
+
};
|
|
4274
|
+
const removeListenerRecord = (type, record) => {
|
|
4275
|
+
if (record.removed)
|
|
4276
|
+
return;
|
|
4277
|
+
record.removed = true;
|
|
4278
|
+
const list = listeners.get(type);
|
|
4279
|
+
if (list) {
|
|
4280
|
+
const idx = list.indexOf(record);
|
|
4281
|
+
if (idx >= 0)
|
|
4282
|
+
list.splice(idx, 1);
|
|
4283
|
+
if (list.length === 0)
|
|
4284
|
+
listeners.delete(type);
|
|
4285
|
+
}
|
|
4286
|
+
if (record.signal && record.abortHandler) {
|
|
4287
|
+
record.signal.removeEventListener("abort", record.abortHandler);
|
|
4288
|
+
}
|
|
4289
|
+
};
|
|
4290
|
+
const handleListenerError = (eventType, error2) => {
|
|
4291
|
+
if (eventType === "error")
|
|
4292
|
+
return;
|
|
4293
|
+
if (opts?.onListenerError) {
|
|
4294
|
+
opts.onListenerError(eventType, error2);
|
|
4295
|
+
return;
|
|
4296
|
+
}
|
|
4297
|
+
const errorListeners = listeners.get("error");
|
|
4298
|
+
if (errorListeners && errorListeners.length > 0) {
|
|
4299
|
+
dispatchEvent({ type: "error", detail: error2 });
|
|
4300
|
+
} else {
|
|
4301
|
+
throw error2;
|
|
4302
|
+
}
|
|
4303
|
+
};
|
|
4304
|
+
const notifyWildcardListeners = (eventType, event) => {
|
|
4305
|
+
if (wildcardListeners.size === 0)
|
|
4306
|
+
return;
|
|
4307
|
+
for (const rec of Array.from(wildcardListeners)) {
|
|
4308
|
+
if (!matchesWildcard(eventType, rec.pattern))
|
|
4309
|
+
continue;
|
|
4310
|
+
const baseEvent = createEvent(rec.pattern, event.detail, {
|
|
4311
|
+
target,
|
|
4312
|
+
currentTarget: target,
|
|
4313
|
+
eventPhase: 2,
|
|
4314
|
+
bubbles: event.bubbles,
|
|
4315
|
+
cancelable: event.cancelable,
|
|
4316
|
+
composed: event.composed
|
|
4317
|
+
});
|
|
4318
|
+
const wildcardEvent = Object.defineProperties(baseEvent, {
|
|
4319
|
+
originalType: { value: eventType, enumerable: true, configurable: true }
|
|
4320
|
+
});
|
|
4321
|
+
try {
|
|
4322
|
+
const fn = rec.fn;
|
|
4323
|
+
const res = fn(wildcardEvent);
|
|
4324
|
+
if (res && typeof res.then === "function") {
|
|
4325
|
+
res.catch((error2) => {
|
|
4326
|
+
try {
|
|
4327
|
+
handleListenerError(eventType, error2);
|
|
4328
|
+
} catch (rethrown) {
|
|
4329
|
+
queueMicrotask(() => {
|
|
4330
|
+
throw rethrown;
|
|
4331
|
+
});
|
|
4332
|
+
}
|
|
4333
|
+
});
|
|
4334
|
+
}
|
|
4335
|
+
} catch (error2) {
|
|
4336
|
+
handleListenerError(eventType, error2);
|
|
4337
|
+
} finally {
|
|
4338
|
+
if (rec.once)
|
|
4339
|
+
wildcardListeners.delete(rec);
|
|
4340
|
+
}
|
|
4341
|
+
const state = getEventState(wildcardEvent);
|
|
4342
|
+
if (state?.stopImmediatePropagationFlag || state?.stopPropagationFlag) {
|
|
4343
|
+
break;
|
|
4344
|
+
}
|
|
4345
|
+
}
|
|
4346
|
+
};
|
|
4347
|
+
const addEventListener = (type, listener, options2) => {
|
|
4348
|
+
if (isCompleted || !listener) {
|
|
4349
|
+
return () => {};
|
|
4350
|
+
}
|
|
4351
|
+
const { capture, passive, once, signal } = normalizeAddListenerOptions(options2);
|
|
4352
|
+
let list = listeners.get(type);
|
|
4353
|
+
if (!list) {
|
|
4354
|
+
list = [];
|
|
4355
|
+
listeners.set(type, list);
|
|
4356
|
+
}
|
|
4357
|
+
for (const existing of list) {
|
|
4358
|
+
if (existing.original === listener && existing.capture === capture) {
|
|
4359
|
+
return () => removeEventListener(type, listener, options2);
|
|
4360
|
+
}
|
|
4361
|
+
}
|
|
4362
|
+
const original = listener;
|
|
4363
|
+
const callback = typeof listener === "function" ? listener : (event) => listener.handleEvent(event);
|
|
4364
|
+
const record = {
|
|
4365
|
+
type,
|
|
4366
|
+
original,
|
|
4367
|
+
callback,
|
|
4368
|
+
capture,
|
|
4369
|
+
passive,
|
|
4370
|
+
once,
|
|
4371
|
+
signal,
|
|
4372
|
+
removed: false
|
|
4373
|
+
};
|
|
4374
|
+
list.push(record);
|
|
4375
|
+
const unsubscribe2 = () => removeListenerRecord(type, record);
|
|
4376
|
+
if (signal) {
|
|
4377
|
+
const onAbort = () => removeListenerRecord(type, record);
|
|
4378
|
+
record.abortHandler = onAbort;
|
|
4379
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
4380
|
+
if (signal.aborted)
|
|
4381
|
+
onAbort();
|
|
4382
|
+
}
|
|
4383
|
+
return unsubscribe2;
|
|
4384
|
+
};
|
|
4385
|
+
const addWildcardListener = (pattern, listener, options2) => {
|
|
4386
|
+
if (isCompleted)
|
|
4387
|
+
return () => {};
|
|
4388
|
+
const opts2 = options2 ?? {};
|
|
4389
|
+
for (const existing of wildcardListeners) {
|
|
4390
|
+
if (existing.pattern === pattern && existing.fn === listener) {
|
|
4391
|
+
return () => removeWildcardListener(pattern, listener);
|
|
4392
|
+
}
|
|
4393
|
+
}
|
|
4394
|
+
const record = {
|
|
4395
|
+
fn: listener,
|
|
4396
|
+
pattern,
|
|
4397
|
+
once: opts2.once,
|
|
4398
|
+
signal: opts2.signal
|
|
4399
|
+
};
|
|
4400
|
+
wildcardListeners.add(record);
|
|
4401
|
+
const unsubscribe2 = () => {
|
|
4402
|
+
wildcardListeners.delete(record);
|
|
4403
|
+
if (record.signal && record.abortHandler) {
|
|
4404
|
+
record.signal.removeEventListener("abort", record.abortHandler);
|
|
4405
|
+
}
|
|
4406
|
+
};
|
|
4407
|
+
if (opts2.signal) {
|
|
4408
|
+
const onAbort = () => unsubscribe2();
|
|
4409
|
+
record.abortHandler = onAbort;
|
|
4410
|
+
opts2.signal.addEventListener("abort", onAbort, { once: true });
|
|
4411
|
+
if (opts2.signal.aborted)
|
|
4412
|
+
onAbort();
|
|
4413
|
+
}
|
|
4414
|
+
return unsubscribe2;
|
|
4415
|
+
};
|
|
4416
|
+
const removeWildcardListener = (pattern, listener) => {
|
|
4417
|
+
for (const record of Array.from(wildcardListeners)) {
|
|
4418
|
+
if (record.pattern === pattern && record.fn === listener) {
|
|
4419
|
+
wildcardListeners.delete(record);
|
|
4420
|
+
if (record.signal && record.abortHandler) {
|
|
4421
|
+
record.signal.removeEventListener("abort", record.abortHandler);
|
|
4422
|
+
}
|
|
4423
|
+
}
|
|
4424
|
+
}
|
|
4425
|
+
};
|
|
4426
|
+
const invokeListeners = (eventType, event, phase, listenersSnapshot) => {
|
|
4427
|
+
const state = getEventState(event);
|
|
4428
|
+
if (!state || state.stopPropagationFlag)
|
|
4429
|
+
return;
|
|
4430
|
+
state.currentTarget = target;
|
|
4431
|
+
state.target = target;
|
|
4432
|
+
state.eventPhase = event.AT_TARGET;
|
|
4433
|
+
for (const rec of listenersSnapshot) {
|
|
4434
|
+
if (rec.removed)
|
|
4435
|
+
continue;
|
|
4436
|
+
if (phase === "capturing" && !rec.capture)
|
|
4437
|
+
continue;
|
|
4438
|
+
if (phase === "bubbling" && rec.capture)
|
|
4439
|
+
continue;
|
|
4440
|
+
if (rec.once)
|
|
4441
|
+
removeListenerRecord(rec.type, rec);
|
|
4442
|
+
if (rec.passive)
|
|
4443
|
+
state.inPassiveListenerFlag = true;
|
|
4444
|
+
try {
|
|
4445
|
+
const res = rec.callback.call(state.currentTarget, event);
|
|
4446
|
+
if (res && typeof res.then === "function") {
|
|
4447
|
+
res.catch((error2) => {
|
|
4448
|
+
try {
|
|
4449
|
+
handleListenerError(eventType, error2);
|
|
4450
|
+
} catch (rethrown) {
|
|
4451
|
+
queueMicrotask(() => {
|
|
4452
|
+
throw rethrown;
|
|
4453
|
+
});
|
|
4454
|
+
}
|
|
4455
|
+
});
|
|
4456
|
+
}
|
|
4457
|
+
} catch (error2) {
|
|
4458
|
+
handleListenerError(eventType, error2);
|
|
4459
|
+
} finally {
|
|
4460
|
+
if (rec.passive)
|
|
4461
|
+
state.inPassiveListenerFlag = false;
|
|
4462
|
+
}
|
|
4463
|
+
if (state.stopImmediatePropagationFlag)
|
|
4464
|
+
break;
|
|
4465
|
+
}
|
|
4466
|
+
};
|
|
4467
|
+
const dispatchEvent = (eventInput) => {
|
|
4468
|
+
if (isCompleted)
|
|
4469
|
+
return false;
|
|
4470
|
+
let event;
|
|
4471
|
+
let state;
|
|
4472
|
+
if (eventInput && typeof eventInput === "object") {
|
|
4473
|
+
state = getEventState(eventInput);
|
|
4474
|
+
if (state) {
|
|
4475
|
+
event = eventInput;
|
|
4476
|
+
} else {
|
|
4477
|
+
const input = eventInput;
|
|
4478
|
+
if (typeof input.type !== "string") {
|
|
4479
|
+
throw new TypeError("Event type must be a string");
|
|
4480
|
+
}
|
|
4481
|
+
event = createEvent(input.type, input.detail, {
|
|
4482
|
+
bubbles: input.bubbles,
|
|
4483
|
+
cancelable: input.cancelable,
|
|
4484
|
+
composed: input.composed,
|
|
4485
|
+
timeStamp: input.timeStamp
|
|
4486
|
+
});
|
|
4487
|
+
state = getEventState(event);
|
|
4488
|
+
}
|
|
4489
|
+
} else {
|
|
4490
|
+
throw new TypeError("dispatchEvent expects an event object");
|
|
4491
|
+
}
|
|
4492
|
+
const dispatchState = state ?? getEventState(event);
|
|
4493
|
+
if (dispatchState.dispatchFlag || !dispatchState.initializedFlag) {
|
|
4494
|
+
const message = "Failed to execute dispatchEvent: event is already being dispatched";
|
|
4495
|
+
if (typeof globalThis.DOMException === "function") {
|
|
4496
|
+
throw new globalThis.DOMException(message, "InvalidStateError");
|
|
4497
|
+
}
|
|
4498
|
+
const err = new Error(message);
|
|
4499
|
+
err.name = "InvalidStateError";
|
|
4500
|
+
throw err;
|
|
4501
|
+
}
|
|
4502
|
+
dispatchState.isTrusted = false;
|
|
4503
|
+
dispatchState.dispatchFlag = true;
|
|
4504
|
+
dispatchState.path = [
|
|
4505
|
+
{
|
|
4506
|
+
invocationTarget: target,
|
|
4507
|
+
invocationTargetInShadowTree: false,
|
|
4508
|
+
shadowAdjustedTarget: target,
|
|
4509
|
+
relatedTarget: null,
|
|
4510
|
+
touchTargets: [],
|
|
4511
|
+
rootOfClosedTree: false,
|
|
4512
|
+
slotInClosedTree: false
|
|
4513
|
+
}
|
|
4514
|
+
];
|
|
4515
|
+
notifyWildcardListeners(dispatchState.type, event);
|
|
4516
|
+
const list = listeners.get(dispatchState.type);
|
|
4517
|
+
const snapshot = list ? list.slice() : [];
|
|
4518
|
+
invokeListeners(dispatchState.type, event, "capturing", snapshot);
|
|
4519
|
+
invokeListeners(dispatchState.type, event, "bubbling", snapshot);
|
|
4520
|
+
dispatchState.eventPhase = event.NONE;
|
|
4521
|
+
dispatchState.currentTarget = null;
|
|
4522
|
+
dispatchState.path = [];
|
|
4523
|
+
dispatchState.dispatchFlag = false;
|
|
4524
|
+
dispatchState.stopPropagationFlag = false;
|
|
4525
|
+
dispatchState.stopImmediatePropagationFlag = false;
|
|
4526
|
+
return !dispatchState.canceledFlag;
|
|
4527
|
+
};
|
|
4528
|
+
const removeEventListener = (type, listener, options2) => {
|
|
4529
|
+
if (!listener)
|
|
4530
|
+
return;
|
|
4531
|
+
const capture = normalizeCaptureOption(options2);
|
|
4532
|
+
const list = listeners.get(type);
|
|
4533
|
+
if (!list)
|
|
4534
|
+
return;
|
|
4535
|
+
for (const record of [...list]) {
|
|
4536
|
+
if (record.original === listener && record.capture === capture) {
|
|
4537
|
+
removeListenerRecord(type, record);
|
|
4538
|
+
}
|
|
4539
|
+
}
|
|
4540
|
+
};
|
|
4541
|
+
const clear = () => {
|
|
4542
|
+
for (const [type, list] of Array.from(listeners.entries())) {
|
|
4543
|
+
for (const record of [...list]) {
|
|
4544
|
+
removeListenerRecord(type, record);
|
|
4545
|
+
}
|
|
4546
|
+
}
|
|
4547
|
+
listeners.clear();
|
|
4548
|
+
for (const record of wildcardListeners) {
|
|
4549
|
+
if (record.signal && record.abortHandler) {
|
|
4550
|
+
record.signal.removeEventListener("abort", record.abortHandler);
|
|
4551
|
+
}
|
|
4552
|
+
}
|
|
4553
|
+
wildcardListeners.clear();
|
|
4554
|
+
};
|
|
4555
|
+
const on = (type, options2) => {
|
|
4556
|
+
return new Observable((observer) => {
|
|
4557
|
+
let opts2;
|
|
4558
|
+
if (typeof options2 === "boolean") {
|
|
4559
|
+
opts2 = { capture: options2 };
|
|
4560
|
+
} else {
|
|
4561
|
+
opts2 = options2 ?? {};
|
|
4562
|
+
}
|
|
4563
|
+
const handler = opts2.handler;
|
|
4564
|
+
const once = opts2.once;
|
|
4565
|
+
const eventHandler = (e) => {
|
|
4566
|
+
let success = false;
|
|
4567
|
+
try {
|
|
4568
|
+
if (handler) {
|
|
4569
|
+
handler(e);
|
|
4570
|
+
}
|
|
4571
|
+
observer.next(e);
|
|
4572
|
+
success = true;
|
|
4573
|
+
} finally {
|
|
4574
|
+
if (once && success) {
|
|
4575
|
+
observer.complete();
|
|
4576
|
+
}
|
|
4577
|
+
}
|
|
4578
|
+
};
|
|
4579
|
+
const errorHandler = (e) => {
|
|
4580
|
+
observer.error(e.detail);
|
|
4581
|
+
};
|
|
4582
|
+
const unsubscribeEvent = addEventListener(type, eventHandler, opts2);
|
|
4583
|
+
let unsubscribeError;
|
|
4584
|
+
if (opts2.receiveError) {
|
|
4585
|
+
unsubscribeError = addEventListener("error", errorHandler, opts2);
|
|
4586
|
+
}
|
|
4587
|
+
return () => {
|
|
4588
|
+
unsubscribeEvent();
|
|
4589
|
+
if (unsubscribeError) {
|
|
4590
|
+
unsubscribeError();
|
|
4591
|
+
}
|
|
4592
|
+
};
|
|
4593
|
+
});
|
|
4594
|
+
};
|
|
4595
|
+
const onceMethod = (type, listener, options2) => {
|
|
4596
|
+
if (typeof options2 === "boolean") {
|
|
4597
|
+
return addEventListener(type, listener, { capture: options2, once: true });
|
|
4598
|
+
}
|
|
4599
|
+
return addEventListener(type, listener, { ...options2 ?? {}, once: true });
|
|
4600
|
+
};
|
|
4601
|
+
const removeAllListeners = (type) => {
|
|
4602
|
+
if (type !== undefined) {
|
|
4603
|
+
const list = listeners.get(type);
|
|
4604
|
+
if (list) {
|
|
4605
|
+
for (const record of [...list]) {
|
|
4606
|
+
removeListenerRecord(type, record);
|
|
4607
|
+
}
|
|
4608
|
+
listeners.delete(type);
|
|
4609
|
+
}
|
|
4610
|
+
} else {
|
|
4611
|
+
for (const [eventType, list] of Array.from(listeners.entries())) {
|
|
4612
|
+
for (const record of [...list]) {
|
|
4613
|
+
removeListenerRecord(eventType, record);
|
|
4614
|
+
}
|
|
4615
|
+
}
|
|
4616
|
+
listeners.clear();
|
|
4617
|
+
for (const record of wildcardListeners) {
|
|
4618
|
+
if (record.signal && record.abortHandler) {
|
|
4619
|
+
record.signal.removeEventListener("abort", record.abortHandler);
|
|
4620
|
+
}
|
|
4621
|
+
}
|
|
4622
|
+
wildcardListeners.clear();
|
|
4623
|
+
}
|
|
4624
|
+
};
|
|
4625
|
+
const pipe = (target2, mapFn) => {
|
|
4626
|
+
if (isCompleted) {
|
|
4627
|
+
return () => {};
|
|
4628
|
+
}
|
|
4629
|
+
const unsubscribe2 = addWildcardListener("*", (event) => {
|
|
4630
|
+
if (mapFn) {
|
|
4631
|
+
const mapped = mapFn(createEvent(event.originalType, event.detail, {
|
|
4632
|
+
target: target2,
|
|
4633
|
+
currentTarget: target2,
|
|
4634
|
+
eventPhase: 2,
|
|
4635
|
+
bubbles: event.bubbles,
|
|
4636
|
+
cancelable: event.cancelable,
|
|
4637
|
+
composed: event.composed
|
|
4638
|
+
}));
|
|
4639
|
+
if (mapped !== null) {
|
|
4640
|
+
target2.dispatchEvent(mapped);
|
|
4641
|
+
}
|
|
4642
|
+
} else {
|
|
4643
|
+
target2.dispatchEvent({
|
|
4644
|
+
type: event.originalType,
|
|
4645
|
+
detail: event.detail
|
|
4646
|
+
});
|
|
4647
|
+
}
|
|
4648
|
+
});
|
|
4649
|
+
const completionUnsub = () => {
|
|
4650
|
+
unsubscribe2();
|
|
4651
|
+
};
|
|
4652
|
+
completionCallbacks.add(completionUnsub);
|
|
4653
|
+
return () => {
|
|
4654
|
+
completionCallbacks.delete(completionUnsub);
|
|
4655
|
+
unsubscribe2();
|
|
4656
|
+
};
|
|
4657
|
+
};
|
|
4658
|
+
const complete2 = () => {
|
|
4659
|
+
if (isCompleted)
|
|
4660
|
+
return;
|
|
4661
|
+
isCompleted = true;
|
|
4662
|
+
for (const cb of completionCallbacks) {
|
|
4663
|
+
try {
|
|
4664
|
+
cb();
|
|
4665
|
+
} catch (err) {
|
|
4666
|
+
try {
|
|
4667
|
+
handleListenerError("complete", err);
|
|
4668
|
+
} catch {}
|
|
4669
|
+
}
|
|
4670
|
+
}
|
|
4671
|
+
completionCallbacks.clear();
|
|
4672
|
+
for (const [eventType, list] of Array.from(listeners.entries())) {
|
|
4673
|
+
for (const record of [...list]) {
|
|
4674
|
+
removeListenerRecord(eventType, record);
|
|
4675
|
+
}
|
|
4676
|
+
}
|
|
4677
|
+
listeners.clear();
|
|
4678
|
+
for (const record of wildcardListeners) {
|
|
4679
|
+
if (record.signal && record.abortHandler) {
|
|
4680
|
+
record.signal.removeEventListener("abort", record.abortHandler);
|
|
4681
|
+
}
|
|
4682
|
+
}
|
|
4683
|
+
wildcardListeners.clear();
|
|
4684
|
+
};
|
|
4685
|
+
const subscribe = (type, observerOrNext, error2, completeHandler) => {
|
|
4686
|
+
let observer;
|
|
4687
|
+
if (typeof observerOrNext === "function") {
|
|
4688
|
+
observer = {
|
|
4689
|
+
next: observerOrNext,
|
|
4690
|
+
error: error2,
|
|
4691
|
+
complete: completeHandler
|
|
4692
|
+
};
|
|
4693
|
+
} else {
|
|
4694
|
+
observer = observerOrNext ?? {};
|
|
4695
|
+
}
|
|
4696
|
+
let closed = false;
|
|
4697
|
+
if (isCompleted) {
|
|
4698
|
+
if (observer.complete) {
|
|
4699
|
+
try {
|
|
4700
|
+
observer.complete();
|
|
4701
|
+
} catch {}
|
|
4702
|
+
}
|
|
4703
|
+
return {
|
|
4704
|
+
unsubscribe: () => {
|
|
4705
|
+
closed = true;
|
|
4706
|
+
},
|
|
4707
|
+
get closed() {
|
|
4708
|
+
return closed || isCompleted;
|
|
4709
|
+
}
|
|
4710
|
+
};
|
|
4711
|
+
}
|
|
4712
|
+
const unsub = addEventListener(type, (event) => {
|
|
4713
|
+
if (closed)
|
|
4714
|
+
return;
|
|
4715
|
+
if (observer.next) {
|
|
4716
|
+
try {
|
|
4717
|
+
observer.next(event);
|
|
4718
|
+
} catch (err) {
|
|
4719
|
+
if (observer.error) {
|
|
4720
|
+
try {
|
|
4721
|
+
observer.error(err);
|
|
4722
|
+
} catch {}
|
|
4723
|
+
}
|
|
4724
|
+
}
|
|
4725
|
+
}
|
|
4726
|
+
});
|
|
4727
|
+
const onComplete = () => {
|
|
4728
|
+
if (closed)
|
|
4729
|
+
return;
|
|
4730
|
+
closed = true;
|
|
4731
|
+
if (observer.complete) {
|
|
4732
|
+
try {
|
|
4733
|
+
observer.complete();
|
|
4734
|
+
} catch {}
|
|
4735
|
+
}
|
|
4736
|
+
};
|
|
4737
|
+
completionCallbacks.add(onComplete);
|
|
4738
|
+
return {
|
|
4739
|
+
unsubscribe: () => {
|
|
4740
|
+
if (closed)
|
|
4741
|
+
return;
|
|
4742
|
+
closed = true;
|
|
4743
|
+
completionCallbacks.delete(onComplete);
|
|
4744
|
+
unsub();
|
|
4745
|
+
},
|
|
4746
|
+
get closed() {
|
|
4747
|
+
return closed || isCompleted;
|
|
4748
|
+
}
|
|
4749
|
+
};
|
|
4750
|
+
};
|
|
4751
|
+
const toObservable = () => {
|
|
4752
|
+
return new Observable((observer) => {
|
|
4753
|
+
if (isCompleted) {
|
|
4754
|
+
observer.complete();
|
|
4755
|
+
return;
|
|
4756
|
+
}
|
|
4757
|
+
const wildcardListener = (event) => {
|
|
4758
|
+
observer.next(createEvent(event.originalType, event.detail, {
|
|
4759
|
+
target,
|
|
4760
|
+
currentTarget: target,
|
|
4761
|
+
eventPhase: 2,
|
|
4762
|
+
bubbles: event.bubbles,
|
|
4763
|
+
cancelable: event.cancelable,
|
|
4764
|
+
composed: event.composed
|
|
4765
|
+
}));
|
|
4766
|
+
};
|
|
4767
|
+
const unsubscribe2 = addWildcardListener("*", wildcardListener);
|
|
4768
|
+
const onComplete = () => {
|
|
4769
|
+
observer.complete();
|
|
4770
|
+
};
|
|
4771
|
+
completionCallbacks.add(onComplete);
|
|
4772
|
+
return () => {
|
|
4773
|
+
unsubscribe2();
|
|
4774
|
+
completionCallbacks.delete(onComplete);
|
|
4775
|
+
};
|
|
4776
|
+
});
|
|
4777
|
+
};
|
|
4778
|
+
function events(type, options2) {
|
|
4779
|
+
if (isCompleted) {
|
|
4780
|
+
return {
|
|
4781
|
+
[Symbol.asyncIterator]() {
|
|
4782
|
+
return this;
|
|
4783
|
+
},
|
|
4784
|
+
next() {
|
|
4785
|
+
return Promise.resolve({
|
|
4786
|
+
value: undefined,
|
|
4787
|
+
done: true
|
|
4788
|
+
});
|
|
4789
|
+
},
|
|
4790
|
+
return() {
|
|
4791
|
+
return Promise.resolve({
|
|
4792
|
+
value: undefined,
|
|
4793
|
+
done: true
|
|
4794
|
+
});
|
|
4795
|
+
}
|
|
4796
|
+
};
|
|
4797
|
+
}
|
|
4798
|
+
const signal = options2?.signal;
|
|
4799
|
+
const bufferSize = options2?.bufferSize ?? Infinity;
|
|
4800
|
+
const overflowStrategy = options2?.overflowStrategy ?? "drop-oldest";
|
|
4801
|
+
const buffer = [];
|
|
4802
|
+
let resolve = null;
|
|
4803
|
+
let done = false;
|
|
4804
|
+
let hasOverflow = false;
|
|
4805
|
+
let onAbort = null;
|
|
4806
|
+
const cleanupAbortListener = () => {
|
|
4807
|
+
if (signal && onAbort) {
|
|
4808
|
+
signal.removeEventListener("abort", onAbort);
|
|
4809
|
+
}
|
|
4810
|
+
};
|
|
4811
|
+
const unsub = addEventListener(type, (event) => {
|
|
4812
|
+
if (done)
|
|
4813
|
+
return;
|
|
4814
|
+
const typedEvent = event;
|
|
4815
|
+
if (resolve) {
|
|
4816
|
+
const r = resolve;
|
|
4817
|
+
resolve = null;
|
|
4818
|
+
r({ value: typedEvent, done: false });
|
|
4819
|
+
} else {
|
|
4820
|
+
if (buffer.length >= bufferSize && bufferSize !== Infinity) {
|
|
4821
|
+
switch (overflowStrategy) {
|
|
4822
|
+
case "drop-oldest":
|
|
4823
|
+
buffer.shift();
|
|
4824
|
+
buffer.push(typedEvent);
|
|
4825
|
+
break;
|
|
4826
|
+
case "drop-latest":
|
|
4827
|
+
break;
|
|
4828
|
+
case "throw":
|
|
4829
|
+
unsub();
|
|
4830
|
+
completionCallbacks.delete(onComplete);
|
|
4831
|
+
done = true;
|
|
4832
|
+
hasOverflow = true;
|
|
4833
|
+
cleanupAbortListener();
|
|
4834
|
+
return;
|
|
4835
|
+
}
|
|
4836
|
+
} else {
|
|
4837
|
+
buffer.push(typedEvent);
|
|
4838
|
+
}
|
|
4839
|
+
}
|
|
4840
|
+
});
|
|
4841
|
+
const onComplete = () => {
|
|
4842
|
+
done = true;
|
|
4843
|
+
cleanupAbortListener();
|
|
4844
|
+
if (resolve) {
|
|
4845
|
+
const r = resolve;
|
|
4846
|
+
resolve = null;
|
|
4847
|
+
r({ value: undefined, done: true });
|
|
4848
|
+
}
|
|
4849
|
+
};
|
|
4850
|
+
completionCallbacks.add(onComplete);
|
|
4851
|
+
if (signal) {
|
|
4852
|
+
onAbort = () => {
|
|
4853
|
+
done = true;
|
|
4854
|
+
completionCallbacks.delete(onComplete);
|
|
4855
|
+
unsub();
|
|
4856
|
+
if (resolve) {
|
|
4857
|
+
const r = resolve;
|
|
4858
|
+
resolve = null;
|
|
4859
|
+
r({ value: undefined, done: true });
|
|
4860
|
+
}
|
|
4861
|
+
};
|
|
4862
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
4863
|
+
if (signal.aborted)
|
|
4864
|
+
onAbort();
|
|
4865
|
+
}
|
|
4866
|
+
const iterator = {
|
|
4867
|
+
[Symbol.asyncIterator]() {
|
|
4868
|
+
return this;
|
|
4869
|
+
},
|
|
4870
|
+
async next() {
|
|
4871
|
+
if (buffer.length > 0) {
|
|
4872
|
+
return { value: buffer.shift(), done: false };
|
|
4873
|
+
}
|
|
4874
|
+
if (resolve !== null) {
|
|
4875
|
+
return Promise.reject(new Error("Concurrent calls to next() are not supported on this async iterator"));
|
|
4876
|
+
}
|
|
4877
|
+
return new Promise((_resolve, _reject) => {
|
|
4878
|
+
if (hasOverflow) {
|
|
4879
|
+
hasOverflow = false;
|
|
4880
|
+
_reject(new BufferOverflowError(type, bufferSize));
|
|
4881
|
+
return;
|
|
4882
|
+
}
|
|
4883
|
+
if (done) {
|
|
4884
|
+
_resolve({
|
|
4885
|
+
value: undefined,
|
|
4886
|
+
done: true
|
|
4887
|
+
});
|
|
4888
|
+
return;
|
|
4889
|
+
}
|
|
4890
|
+
resolve = _resolve;
|
|
4891
|
+
});
|
|
4892
|
+
},
|
|
4893
|
+
return() {
|
|
4894
|
+
if (resolve) {
|
|
4895
|
+
const r = resolve;
|
|
4896
|
+
resolve = null;
|
|
4897
|
+
r({ value: undefined, done: true });
|
|
4898
|
+
}
|
|
4899
|
+
done = true;
|
|
4900
|
+
completionCallbacks.delete(onComplete);
|
|
4901
|
+
unsub();
|
|
4902
|
+
cleanupAbortListener();
|
|
4903
|
+
return Promise.resolve({
|
|
4904
|
+
value: undefined,
|
|
4905
|
+
done: true
|
|
4906
|
+
});
|
|
4907
|
+
}
|
|
4908
|
+
};
|
|
4909
|
+
return iterator;
|
|
4910
|
+
}
|
|
4911
|
+
const target = {
|
|
4912
|
+
addEventListener,
|
|
4913
|
+
removeEventListener,
|
|
4914
|
+
dispatchEvent,
|
|
4915
|
+
clear,
|
|
4916
|
+
on,
|
|
4917
|
+
once: onceMethod,
|
|
4918
|
+
removeAllListeners,
|
|
4919
|
+
pipe,
|
|
4920
|
+
addWildcardListener,
|
|
4921
|
+
removeWildcardListener,
|
|
4922
|
+
complete: complete2,
|
|
4923
|
+
get completed() {
|
|
4924
|
+
return isCompleted;
|
|
4925
|
+
},
|
|
4926
|
+
subscribe,
|
|
4927
|
+
toObservable,
|
|
4928
|
+
events
|
|
4929
|
+
};
|
|
4930
|
+
target[SymbolObservable] = () => {
|
|
4931
|
+
return toObservable();
|
|
4932
|
+
};
|
|
4933
|
+
return target;
|
|
4934
|
+
}
|
|
4935
|
+
|
|
4936
|
+
class EventEmission {
|
|
4937
|
+
#target;
|
|
4938
|
+
constructor() {
|
|
4939
|
+
this.#target = createEventTarget();
|
|
4940
|
+
}
|
|
4941
|
+
addEventListener(type, listener, options2) {
|
|
4942
|
+
return this.#target.addEventListener(type, listener, options2);
|
|
4943
|
+
}
|
|
4944
|
+
removeEventListener(type, listener, options2) {
|
|
4945
|
+
this.#target.removeEventListener(type, listener, options2);
|
|
4946
|
+
}
|
|
4947
|
+
dispatchEvent(event) {
|
|
4948
|
+
return this.#target.dispatchEvent(event);
|
|
4949
|
+
}
|
|
4950
|
+
on(type, options2) {
|
|
4951
|
+
return this.#target.on(type, options2);
|
|
4952
|
+
}
|
|
4953
|
+
once(type, listener, options2) {
|
|
4954
|
+
return this.#target.once(type, listener, options2);
|
|
4955
|
+
}
|
|
4956
|
+
removeAllListeners(type) {
|
|
4957
|
+
this.#target.removeAllListeners(type);
|
|
4958
|
+
}
|
|
4959
|
+
clear() {
|
|
4960
|
+
this.#target.clear();
|
|
4961
|
+
}
|
|
4962
|
+
pipe(target, mapFn) {
|
|
4963
|
+
return this.#target.pipe(target, mapFn);
|
|
4964
|
+
}
|
|
4965
|
+
addWildcardListener(pattern, listener, options2) {
|
|
4966
|
+
return this.#target.addWildcardListener(pattern, listener, options2);
|
|
4967
|
+
}
|
|
4968
|
+
removeWildcardListener(pattern, listener) {
|
|
4969
|
+
this.#target.removeWildcardListener(pattern, listener);
|
|
4970
|
+
}
|
|
4971
|
+
subscribe(typeOrObserver, observerOrNext, error2, completeHandler) {
|
|
4972
|
+
if (typeof typeOrObserver === "string") {
|
|
4973
|
+
return this.#target.subscribe(typeOrObserver, observerOrNext, error2, completeHandler);
|
|
4974
|
+
}
|
|
4975
|
+
if (typeof typeOrObserver === "function") {
|
|
4976
|
+
return this.#target.toObservable().subscribe(typeOrObserver);
|
|
4977
|
+
}
|
|
4978
|
+
if (typeof typeOrObserver === "object" && typeOrObserver !== null) {
|
|
4979
|
+
const maybeObserver = typeOrObserver;
|
|
4980
|
+
if (typeof maybeObserver.next === "function" || typeof maybeObserver.error === "function" || typeof maybeObserver.complete === "function") {
|
|
4981
|
+
return this.#target.toObservable().subscribe(typeOrObserver);
|
|
4982
|
+
}
|
|
4983
|
+
return this.#target.toObservable().subscribe({});
|
|
4984
|
+
}
|
|
4985
|
+
throw new Error("subscribe() requires a string event type, callback function, or observer object");
|
|
4986
|
+
}
|
|
4987
|
+
toObservable() {
|
|
4988
|
+
return this.#target.toObservable();
|
|
4989
|
+
}
|
|
4990
|
+
[SymbolObservable]() {
|
|
4991
|
+
return this.toObservable();
|
|
4992
|
+
}
|
|
4993
|
+
complete() {
|
|
4994
|
+
this.#target.complete();
|
|
4995
|
+
}
|
|
4996
|
+
get completed() {
|
|
4997
|
+
return this.#target.completed;
|
|
4998
|
+
}
|
|
4999
|
+
events(type, options2) {
|
|
5000
|
+
return this.#target.events(type, options2);
|
|
5001
|
+
}
|
|
5002
|
+
}
|
|
5003
|
+
|
|
3494
5004
|
// src/utilities/content.ts
|
|
3495
5005
|
function normalizeContent(content) {
|
|
3496
5006
|
if (content === undefined)
|
|
@@ -3810,9 +5320,9 @@ var buildToolUseIndex = (messages) => messages.reduce((index, message) => {
|
|
|
3810
5320
|
return index;
|
|
3811
5321
|
}, new Map);
|
|
3812
5322
|
var registerToolUse = (index, toolCall) => {
|
|
3813
|
-
const
|
|
3814
|
-
|
|
3815
|
-
return
|
|
5323
|
+
const next2 = new Map(index);
|
|
5324
|
+
next2.set(toolCall.id, { name: toolCall.name });
|
|
5325
|
+
return next2;
|
|
3816
5326
|
};
|
|
3817
5327
|
var assertToolReference = (index, callId) => {
|
|
3818
5328
|
if (!index.has(callId)) {
|
|
@@ -3890,13 +5400,13 @@ function appendMessages(conversation, ...args) {
|
|
|
3890
5400
|
};
|
|
3891
5401
|
}, { toolUses: initialToolUses, messages: [] });
|
|
3892
5402
|
const messageIds = messages.map((message) => message.id);
|
|
3893
|
-
const
|
|
5403
|
+
const next2 = {
|
|
3894
5404
|
...conversation,
|
|
3895
5405
|
ids: [...conversation.ids, ...messageIds],
|
|
3896
5406
|
messages: { ...conversation.messages, ...toIdRecord(messages) },
|
|
3897
5407
|
updatedAt: now
|
|
3898
5408
|
};
|
|
3899
|
-
return toReadonly(
|
|
5409
|
+
return toReadonly(next2);
|
|
3900
5410
|
}
|
|
3901
5411
|
function appendUserMessage(conversation, content, metadata, environment) {
|
|
3902
5412
|
return environment ? appendMessages(conversation, { role: "user", content, metadata }, environment) : appendMessages(conversation, { role: "user", content, metadata });
|
|
@@ -4005,13 +5515,13 @@ function replaceSystemMessage(conversation, content, metadata, environment) {
|
|
|
4005
5515
|
toolResult: undefined,
|
|
4006
5516
|
tokenUsage: undefined
|
|
4007
5517
|
});
|
|
4008
|
-
const
|
|
5518
|
+
const next2 = {
|
|
4009
5519
|
...conversation,
|
|
4010
5520
|
ids: [...conversation.ids],
|
|
4011
5521
|
messages: { ...conversation.messages, [replaced.id]: replaced },
|
|
4012
5522
|
updatedAt: now
|
|
4013
5523
|
};
|
|
4014
|
-
return toReadonly(
|
|
5524
|
+
return toReadonly(next2);
|
|
4015
5525
|
}
|
|
4016
5526
|
function collapseSystemMessages(conversation, environment) {
|
|
4017
5527
|
const ordered = getOrderedMessages(conversation);
|
|
@@ -4067,13 +5577,13 @@ function collapseSystemMessages(conversation, environment) {
|
|
|
4067
5577
|
tokenUsage: message.tokenUsage
|
|
4068
5578
|
});
|
|
4069
5579
|
});
|
|
4070
|
-
const
|
|
5580
|
+
const next2 = {
|
|
4071
5581
|
...conversation,
|
|
4072
5582
|
ids: renumbered.map((message) => message.id),
|
|
4073
5583
|
messages: toIdRecord(renumbered),
|
|
4074
5584
|
updatedAt: now
|
|
4075
5585
|
};
|
|
4076
|
-
return toReadonly(
|
|
5586
|
+
return toReadonly(next2);
|
|
4077
5587
|
}
|
|
4078
5588
|
function redactMessageAtPosition(conversation, position, placeholder = "[REDACTED]", environment) {
|
|
4079
5589
|
if (position < 0 || position >= conversation.ids.length) {
|
|
@@ -4098,13 +5608,13 @@ function redactMessageAtPosition(conversation, position, placeholder = "[REDACTE
|
|
|
4098
5608
|
});
|
|
4099
5609
|
const resolvedEnvironment = resolveConversationEnvironment(environment);
|
|
4100
5610
|
const now = resolvedEnvironment.now();
|
|
4101
|
-
const
|
|
5611
|
+
const next2 = {
|
|
4102
5612
|
...conversation,
|
|
4103
5613
|
ids: [...conversation.ids],
|
|
4104
5614
|
messages: { ...conversation.messages, [redacted.id]: redacted },
|
|
4105
5615
|
updatedAt: now
|
|
4106
5616
|
};
|
|
4107
|
-
return toReadonly(
|
|
5617
|
+
return toReadonly(next2);
|
|
4108
5618
|
}
|
|
4109
5619
|
function migrateConversation(json) {
|
|
4110
5620
|
if (typeof json !== "object" || json === null || Array.isArray(json)) {
|
|
@@ -4192,8 +5702,8 @@ function deserializeConversation(json) {
|
|
|
4192
5702
|
updatedAt: migrated.updatedAt
|
|
4193
5703
|
};
|
|
4194
5704
|
return toReadonly(conv);
|
|
4195
|
-
} catch (
|
|
4196
|
-
throw createSerializationError(`failed to deserialize conversation: ${
|
|
5705
|
+
} catch (error2) {
|
|
5706
|
+
throw createSerializationError(`failed to deserialize conversation: ${error2 instanceof Error ? error2.message : String(error2)}`, error2);
|
|
4197
5707
|
}
|
|
4198
5708
|
}
|
|
4199
5709
|
function toChatMessages(conversation) {
|
|
@@ -4345,18 +5855,14 @@ function cancelStreamingMessage(conversation, messageId, environment) {
|
|
|
4345
5855
|
}
|
|
4346
5856
|
|
|
4347
5857
|
// src/history.ts
|
|
4348
|
-
class ConversationHistoryEvent extends CustomEvent {
|
|
4349
|
-
constructor(type, detail) {
|
|
4350
|
-
super(type, { detail });
|
|
4351
|
-
}
|
|
4352
|
-
}
|
|
4353
|
-
|
|
4354
5858
|
class ConversationHistory extends EventTarget {
|
|
4355
5859
|
currentNode;
|
|
4356
5860
|
environment;
|
|
5861
|
+
events;
|
|
4357
5862
|
constructor(initial = createConversation(), environment) {
|
|
4358
5863
|
super();
|
|
4359
5864
|
this.environment = resolveConversationEnvironment(environment);
|
|
5865
|
+
this.events = createEventTarget();
|
|
4360
5866
|
this.currentNode = {
|
|
4361
5867
|
conversation: initial,
|
|
4362
5868
|
parent: null,
|
|
@@ -4368,25 +5874,54 @@ class ConversationHistory extends EventTarget {
|
|
|
4368
5874
|
type,
|
|
4369
5875
|
conversation: this.current
|
|
4370
5876
|
};
|
|
4371
|
-
this.dispatchEvent(
|
|
4372
|
-
this.dispatchEvent(
|
|
5877
|
+
this.events.dispatchEvent({ type: "change", detail });
|
|
5878
|
+
this.events.dispatchEvent({ type, detail });
|
|
5879
|
+
}
|
|
5880
|
+
toAddListenerOptions(options2) {
|
|
5881
|
+
if (typeof options2 === "boolean" || options2 === undefined)
|
|
5882
|
+
return options2;
|
|
5883
|
+
const mapped = {};
|
|
5884
|
+
if (options2.capture !== undefined)
|
|
5885
|
+
mapped.capture = options2.capture;
|
|
5886
|
+
if (options2.once !== undefined)
|
|
5887
|
+
mapped.once = options2.once;
|
|
5888
|
+
if (options2.passive !== undefined)
|
|
5889
|
+
mapped.passive = options2.passive;
|
|
5890
|
+
if (options2.signal !== undefined) {
|
|
5891
|
+
mapped.signal = options2.signal;
|
|
5892
|
+
}
|
|
5893
|
+
return mapped;
|
|
5894
|
+
}
|
|
5895
|
+
toRemoveListenerOptions(options2) {
|
|
5896
|
+
if (typeof options2 === "boolean" || options2 === undefined)
|
|
5897
|
+
return options2;
|
|
5898
|
+
const mapped = {};
|
|
5899
|
+
if (options2.capture !== undefined)
|
|
5900
|
+
mapped.capture = options2.capture;
|
|
5901
|
+
return mapped;
|
|
4373
5902
|
}
|
|
4374
5903
|
addEventListener(type, callback, options2) {
|
|
4375
5904
|
if (!callback)
|
|
4376
5905
|
return;
|
|
4377
|
-
|
|
4378
|
-
|
|
4379
|
-
|
|
5906
|
+
return this.events.addEventListener(type, callback, this.toAddListenerOptions(options2));
|
|
5907
|
+
}
|
|
5908
|
+
removeEventListener(type, callback, options2) {
|
|
5909
|
+
if (!callback)
|
|
5910
|
+
return;
|
|
5911
|
+
this.events.removeEventListener(type, callback, this.toRemoveListenerOptions(options2));
|
|
5912
|
+
}
|
|
5913
|
+
dispatchEvent(event) {
|
|
5914
|
+
return this.events.dispatchEvent(event);
|
|
4380
5915
|
}
|
|
4381
5916
|
subscribe(run) {
|
|
4382
5917
|
run(this.current);
|
|
4383
5918
|
const handler = (event) => {
|
|
4384
|
-
if (event
|
|
5919
|
+
if (event?.detail?.conversation) {
|
|
4385
5920
|
run(event.detail.conversation);
|
|
4386
5921
|
}
|
|
4387
5922
|
};
|
|
4388
|
-
const
|
|
4389
|
-
return
|
|
5923
|
+
const unsubscribe2 = this.addEventListener("change", handler);
|
|
5924
|
+
return unsubscribe2 || (() => {});
|
|
4390
5925
|
}
|
|
4391
5926
|
getSnapshot() {
|
|
4392
5927
|
return this.current;
|
|
@@ -4417,9 +5952,9 @@ class ConversationHistory extends EventTarget {
|
|
|
4417
5952
|
get redoCount() {
|
|
4418
5953
|
return this.currentNode.children.length;
|
|
4419
5954
|
}
|
|
4420
|
-
push(
|
|
5955
|
+
push(next2) {
|
|
4421
5956
|
const newNode = {
|
|
4422
|
-
conversation:
|
|
5957
|
+
conversation: next2,
|
|
4423
5958
|
parent: this.currentNode,
|
|
4424
5959
|
children: []
|
|
4425
5960
|
};
|
|
@@ -4436,9 +5971,9 @@ class ConversationHistory extends EventTarget {
|
|
|
4436
5971
|
return;
|
|
4437
5972
|
}
|
|
4438
5973
|
redo(childIndex = 0) {
|
|
4439
|
-
const
|
|
4440
|
-
if (
|
|
4441
|
-
this.currentNode =
|
|
5974
|
+
const next2 = this.currentNode.children[childIndex];
|
|
5975
|
+
if (next2) {
|
|
5976
|
+
this.currentNode = next2;
|
|
4442
5977
|
this.notifyChange("redo");
|
|
4443
5978
|
return this.current;
|
|
4444
5979
|
}
|
|
@@ -4625,6 +6160,7 @@ class ConversationHistory extends EventTarget {
|
|
|
4625
6160
|
};
|
|
4626
6161
|
if (root)
|
|
4627
6162
|
clearNode(root);
|
|
6163
|
+
this.events.clear();
|
|
4628
6164
|
}
|
|
4629
6165
|
}
|
|
4630
6166
|
function isConversation(value) {
|
|
@@ -4966,4 +6502,4 @@ export {
|
|
|
4966
6502
|
LABEL_TO_ROLE
|
|
4967
6503
|
};
|
|
4968
6504
|
|
|
4969
|
-
//# debugId=
|
|
6505
|
+
//# debugId=C64E71F05A5A314564756E2164756E21
|