conversationalist 0.0.8 → 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.
@@ -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, next = -1, result = "", line, length = string.length;
2633
+ var ind = common.repeat(" ", spaces), position = 0, next2 = -1, result = "", line, length = string.length;
2634
2634
  while (position < length) {
2635
- next = string.indexOf(`
2635
+ next2 = string.indexOf(`
2636
2636
  `, position);
2637
- if (next === -1) {
2637
+ if (next2 === -1) {
2638
2638
  line = string.slice(position);
2639
2639
  position = length;
2640
2640
  } else {
2641
- line = string.slice(position, next + 1);
2642
- position = next + 1;
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, next = 0;
2803
+ var start = 0, end, curr = 0, next2 = 0;
2804
2804
  var result = "";
2805
2805
  while (match = breakRe.exec(line)) {
2806
- next = match.index;
2807
- if (next - start > width) {
2808
- end = curr > start ? curr : next;
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 = next;
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 next = new Map(index);
3814
- next.set(toolCall.id, { name: toolCall.name });
3815
- return next;
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 next = {
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(next);
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 next = {
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(next);
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 next = {
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(next);
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 next = {
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(next);
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 (error) {
4196
- throw createSerializationError(`failed to deserialize conversation: ${error instanceof Error ? error.message : String(error)}`, error);
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(new ConversationHistoryEvent("change", detail));
4372
- this.dispatchEvent(new ConversationHistoryEvent(type, detail));
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
- super.addEventListener(type, callback, options2);
4378
- const unsubscribe = () => this.removeEventListener(type, callback, options2);
4379
- return unsubscribe;
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 instanceof ConversationHistoryEvent) {
5919
+ if (event?.detail?.conversation) {
4385
5920
  run(event.detail.conversation);
4386
5921
  }
4387
5922
  };
4388
- const unsubscribe = this.addEventListener("change", handler);
4389
- return unsubscribe || (() => {});
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(next) {
5955
+ push(next2) {
4421
5956
  const newNode = {
4422
- conversation: next,
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 next = this.currentNode.children[childIndex];
4440
- if (next) {
4441
- this.currentNode = next;
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) {
@@ -4947,23 +6483,23 @@ function parseMarkdownSimple(body) {
4947
6483
  }
4948
6484
 
4949
6485
  // src/markdown/index.ts
4950
- function historyToMarkdown(history, options2) {
6486
+ function conversationHistoryToMarkdown(history, options2) {
4951
6487
  return toMarkdown(history.current, options2);
4952
6488
  }
4953
- function historyFromMarkdown(markdown, environment) {
6489
+ function conversationHistoryFromMarkdown(markdown, environment) {
4954
6490
  const conversation = fromMarkdown(markdown);
4955
6491
  return new ConversationHistory(conversation, environment);
4956
6492
  }
4957
6493
  export {
4958
6494
  toMarkdown,
4959
- historyToMarkdown,
4960
- historyFromMarkdown,
4961
6495
  getRoleLabel,
4962
6496
  getRoleFromLabel,
4963
6497
  fromMarkdown,
6498
+ conversationHistoryToMarkdown,
6499
+ conversationHistoryFromMarkdown,
4964
6500
  ROLE_LABELS,
4965
6501
  MarkdownParseError,
4966
6502
  LABEL_TO_ROLE
4967
6503
  };
4968
6504
 
4969
- //# debugId=12525694512E3BEC64756E2164756E21
6505
+ //# debugId=C64E71F05A5A314564756E2164756E21