// ==UserScript==
// @name ChatGPT: 語音輸入與語音合成功能 (支援中/英/日/韓語言)
// @version 2.5.0
// @description 讓你可以透過語音輸入要問 ChatGPT 的問題並支援語音合成功能 (支援中文、英文、日文、韓文)
// @license MIT
// @homepage https://blog.miniasp.com/
// @homepageURL https://blog.miniasp.com/
// @website https://www.facebook.com/will.fans
// @source https://github.com/doggy8088/TampermonkeyUserscripts/raw/main/src/ChatGPTVoiceInput.user.js
// @namespace https://github.com/doggy8088/TampermonkeyUserscripts/raw/main/src/ChatGPTVoiceInput.user.js
// @match *://chat.openai.com/
// @match *://chat.openai.com/*
// @author Will Huang
// @run-at document-idle
// @icon https://www.google.com/s2/favicons?sz=64&domain=openai.com
// ==/UserScript==
(() => {
// node_modules/tslib/tslib.es6.mjs
var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {
d2.__proto__ = b2;
} || function(d2, b2) {
for (var p in b2)
if (Object.prototype.hasOwnProperty.call(b2, p))
d2[p] = b2[p];
};
return extendStatics(d, b);
};
function __extends(d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() {
this.constructor = d;
}
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P ? value : new P(function(resolve) {
resolve(value);
});
}
return new (P || (P = Promise))(function(resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
function __generator(thisArg, body) {
var _ = { label: 0, sent: function() {
if (t[0] & 1)
throw t[1];
return t[1];
}, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
return this;
}), g;
function verb(n) {
return function(v) {
return step([n, v]);
};
}
function step(op) {
if (f)
throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _)
try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
return t;
if (y = 0, t)
op = [op[0] & 2, t.value];
switch (op[0]) {
case 0:
case 1:
t = op;
break;
case 4:
_.label++;
return { value: op[1], done: false };
case 5:
_.label++;
y = op[1];
op = [0];
continue;
case 7:
op = _.ops.pop();
_.trys.pop();
continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
_ = 0;
continue;
}
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
_.label = op[1];
break;
}
if (op[0] === 6 && _.label < t[1]) {
_.label = t[1];
t = op;
break;
}
if (t && _.label < t[2]) {
_.label = t[2];
_.ops.push(op);
break;
}
if (t[2])
_.ops.pop();
_.trys.pop();
continue;
}
op = body.call(thisArg, _);
} catch (e) {
op = [6, e];
y = 0;
} finally {
f = t = 0;
}
if (op[0] & 5)
throw op[1];
return { value: op[0] ? op[1] : void 0, done: true };
}
}
function __values(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m)
return m.call(o);
if (o && typeof o.length === "number")
return {
next: function() {
if (o && i >= o.length)
o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
}
function __read(o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m)
return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
ar.push(r.value);
} catch (error) {
e = { error };
} finally {
try {
if (r && !r.done && (m = i["return"]))
m.call(i);
} finally {
if (e)
throw e.error;
}
}
return ar;
}
function __spreadArray(to, from2, pack) {
if (pack || arguments.length === 2)
for (var i = 0, l = from2.length, ar; i < l; i++) {
if (ar || !(i in from2)) {
if (!ar)
ar = Array.prototype.slice.call(from2, 0, i);
ar[i] = from2[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from2));
}
function __await(v) {
return this instanceof __await ? (this.v = v, this) : new __await(v);
}
function __asyncGenerator(thisArg, _arguments, generator) {
if (!Symbol.asyncIterator)
throw new TypeError("Symbol.asyncIterator is not defined.");
var g = generator.apply(thisArg, _arguments || []), i, q = [];
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() {
return this;
}, i;
function verb(n) {
if (g[n])
i[n] = function(v) {
return new Promise(function(a, b) {
q.push([n, v, a, b]) > 1 || resume(n, v);
});
};
}
function resume(n, v) {
try {
step(g[n](v));
} catch (e) {
settle(q[0][3], e);
}
}
function step(r) {
r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);
}
function fulfill(value) {
resume("next", value);
}
function reject(value) {
resume("throw", value);
}
function settle(f, v) {
if (f(v), q.shift(), q.length)
resume(q[0][0], q[0][1]);
}
}
function __asyncValues(o) {
if (!Symbol.asyncIterator)
throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o[Symbol.asyncIterator], i;
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function() {
return this;
}, i);
function verb(n) {
i[n] = o[n] && function(v) {
return new Promise(function(resolve, reject) {
v = o[n](v), settle(resolve, reject, v.done, v.value);
});
};
}
function settle(resolve, reject, d, v) {
Promise.resolve(v).then(function(v2) {
resolve({ value: v2, done: d });
}, reject);
}
}
// node_modules/rxjs/dist/esm5/internal/util/isFunction.js
function isFunction(value) {
return typeof value === "function";
}
// node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js
function createErrorClass(createImpl) {
var _super = function(instance) {
Error.call(instance);
instance.stack = new Error().stack;
};
var ctorFunc = createImpl(_super);
ctorFunc.prototype = Object.create(Error.prototype);
ctorFunc.prototype.constructor = ctorFunc;
return ctorFunc;
}
// node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js
var UnsubscriptionError = createErrorClass(function(_super) {
return function UnsubscriptionErrorImpl(errors) {
_super(this);
this.message = errors ? errors.length + " errors occurred during unsubscription:\n" + errors.map(function(err, i) {
return i + 1 + ") " + err.toString();
}).join("\n ") : "";
this.name = "UnsubscriptionError";
this.errors = errors;
};
});
// node_modules/rxjs/dist/esm5/internal/util/arrRemove.js
function arrRemove(arr, item) {
if (arr) {
var index = arr.indexOf(item);
0 <= index && arr.splice(index, 1);
}
}
// node_modules/rxjs/dist/esm5/internal/Subscription.js
var Subscription = function() {
function Subscription2(initialTeardown) {
this.initialTeardown = initialTeardown;
this.closed = false;
this._parentage = null;
this._finalizers = null;
}
Subscription2.prototype.unsubscribe = function() {
var e_1, _a, e_2, _b;
var errors;
if (!this.closed) {
this.closed = true;
var _parentage = this._parentage;
if (_parentage) {
this._parentage = null;
if (Array.isArray(_parentage)) {
try {
for (var _parentage_1 = __values(_parentage), _parentage_1_1 = _parentage_1.next(); !_parentage_1_1.done; _parentage_1_1 = _parentage_1.next()) {
var parent_1 = _parentage_1_1.value;
parent_1.remove(this);
}
} catch (e_1_1) {
e_1 = { error: e_1_1 };
} finally {
try {
if (_parentage_1_1 && !_parentage_1_1.done && (_a = _parentage_1.return))
_a.call(_parentage_1);
} finally {
if (e_1)
throw e_1.error;
}
}
} else {
_parentage.remove(this);
}
}
var initialFinalizer = this.initialTeardown;
if (isFunction(initialFinalizer)) {
try {
initialFinalizer();
} catch (e) {
errors = e instanceof UnsubscriptionError ? e.errors : [e];
}
}
var _finalizers = this._finalizers;
if (_finalizers) {
this._finalizers = null;
try {
for (var _finalizers_1 = __values(_finalizers), _finalizers_1_1 = _finalizers_1.next(); !_finalizers_1_1.done; _finalizers_1_1 = _finalizers_1.next()) {
var finalizer = _finalizers_1_1.value;
try {
execFinalizer(finalizer);
} catch (err) {
errors = errors !== null && errors !== void 0 ? errors : [];
if (err instanceof UnsubscriptionError) {
errors = __spreadArray(__spreadArray([], __read(errors)), __read(err.errors));
} else {
errors.push(err);
}
}
}
} catch (e_2_1) {
e_2 = { error: e_2_1 };
} finally {
try {
if (_finalizers_1_1 && !_finalizers_1_1.done && (_b = _finalizers_1.return))
_b.call(_finalizers_1);
} finally {
if (e_2)
throw e_2.error;
}
}
}
if (errors) {
throw new UnsubscriptionError(errors);
}
}
};
Subscription2.prototype.add = function(teardown) {
var _a;
if (teardown && teardown !== this) {
if (this.closed) {
execFinalizer(teardown);
} else {
if (teardown instanceof Subscription2) {
if (teardown.closed || teardown._hasParent(this)) {
return;
}
teardown._addParent(this);
}
(this._finalizers = (_a = this._finalizers) !== null && _a !== void 0 ? _a : []).push(teardown);
}
}
};
Subscription2.prototype._hasParent = function(parent) {
var _parentage = this._parentage;
return _parentage === parent || Array.isArray(_parentage) && _parentage.includes(parent);
};
Subscription2.prototype._addParent = function(parent) {
var _parentage = this._parentage;
this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;
};
Subscription2.prototype._removeParent = function(parent) {
var _parentage = this._parentage;
if (_parentage === parent) {
this._parentage = null;
} else if (Array.isArray(_parentage)) {
arrRemove(_parentage, parent);
}
};
Subscription2.prototype.remove = function(teardown) {
var _finalizers = this._finalizers;
_finalizers && arrRemove(_finalizers, teardown);
if (teardown instanceof Subscription2) {
teardown._removeParent(this);
}
};
Subscription2.EMPTY = function() {
var empty = new Subscription2();
empty.closed = true;
return empty;
}();
return Subscription2;
}();
var EMPTY_SUBSCRIPTION = Subscription.EMPTY;
function isSubscription(value) {
return value instanceof Subscription || value && "closed" in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe);
}
function execFinalizer(finalizer) {
if (isFunction(finalizer)) {
finalizer();
} else {
finalizer.unsubscribe();
}
}
// node_modules/rxjs/dist/esm5/internal/config.js
var config = {
onUnhandledError: null,
onStoppedNotification: null,
Promise: void 0,
useDeprecatedSynchronousErrorHandling: false,
useDeprecatedNextContext: false
};
// node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js
var timeoutProvider = {
setTimeout: function(handler, timeout) {
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
var delegate = timeoutProvider.delegate;
if (delegate === null || delegate === void 0 ? void 0 : delegate.setTimeout) {
return delegate.setTimeout.apply(delegate, __spreadArray([handler, timeout], __read(args)));
}
return setTimeout.apply(void 0, __spreadArray([handler, timeout], __read(args)));
},
clearTimeout: function(handle) {
var delegate = timeoutProvider.delegate;
return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearTimeout) || clearTimeout)(handle);
},
delegate: void 0
};
// node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js
function reportUnhandledError(err) {
timeoutProvider.setTimeout(function() {
var onUnhandledError = config.onUnhandledError;
if (onUnhandledError) {
onUnhandledError(err);
} else {
throw err;
}
});
}
// node_modules/rxjs/dist/esm5/internal/util/noop.js
function noop() {
}
// node_modules/rxjs/dist/esm5/internal/NotificationFactories.js
var COMPLETE_NOTIFICATION = function() {
return createNotification("C", void 0, void 0);
}();
function errorNotification(error) {
return createNotification("E", void 0, error);
}
function nextNotification(value) {
return createNotification("N", value, void 0);
}
function createNotification(kind, value, error) {
return {
kind,
value,
error
};
}
// node_modules/rxjs/dist/esm5/internal/util/errorContext.js
var context = null;
function errorContext(cb) {
if (config.useDeprecatedSynchronousErrorHandling) {
var isRoot = !context;
if (isRoot) {
context = { errorThrown: false, error: null };
}
cb();
if (isRoot) {
var _a = context, errorThrown = _a.errorThrown, error = _a.error;
context = null;
if (errorThrown) {
throw error;
}
}
} else {
cb();
}
}
function captureError(err) {
if (config.useDeprecatedSynchronousErrorHandling && context) {
context.errorThrown = true;
context.error = err;
}
}
// node_modules/rxjs/dist/esm5/internal/Subscriber.js
var Subscriber = function(_super) {
__extends(Subscriber2, _super);
function Subscriber2(destination) {
var _this = _super.call(this) || this;
_this.isStopped = false;
if (destination) {
_this.destination = destination;
if (isSubscription(destination)) {
destination.add(_this);
}
} else {
_this.destination = EMPTY_OBSERVER;
}
return _this;
}
Subscriber2.create = function(next, error, complete) {
return new SafeSubscriber(next, error, complete);
};
Subscriber2.prototype.next = function(value) {
if (this.isStopped) {
handleStoppedNotification(nextNotification(value), this);
} else {
this._next(value);
}
};
Subscriber2.prototype.error = function(err) {
if (this.isStopped) {
handleStoppedNotification(errorNotification(err), this);
} else {
this.isStopped = true;
this._error(err);
}
};
Subscriber2.prototype.complete = function() {
if (this.isStopped) {
handleStoppedNotification(COMPLETE_NOTIFICATION, this);
} else {
this.isStopped = true;
this._complete();
}
};
Subscriber2.prototype.unsubscribe = function() {
if (!this.closed) {
this.isStopped = true;
_super.prototype.unsubscribe.call(this);
this.destination = null;
}
};
Subscriber2.prototype._next = function(value) {
this.destination.next(value);
};
Subscriber2.prototype._error = function(err) {
try {
this.destination.error(err);
} finally {
this.unsubscribe();
}
};
Subscriber2.prototype._complete = function() {
try {
this.destination.complete();
} finally {
this.unsubscribe();
}
};
return Subscriber2;
}(Subscription);
var _bind = Function.prototype.bind;
function bind(fn, thisArg) {
return _bind.call(fn, thisArg);
}
var ConsumerObserver = function() {
function ConsumerObserver2(partialObserver) {
this.partialObserver = partialObserver;
}
ConsumerObserver2.prototype.next = function(value) {
var partialObserver = this.partialObserver;
if (partialObserver.next) {
try {
partialObserver.next(value);
} catch (error) {
handleUnhandledError(error);
}
}
};
ConsumerObserver2.prototype.error = function(err) {
var partialObserver = this.partialObserver;
if (partialObserver.error) {
try {
partialObserver.error(err);
} catch (error) {
handleUnhandledError(error);
}
} else {
handleUnhandledError(err);
}
};
ConsumerObserver2.prototype.complete = function() {
var partialObserver = this.partialObserver;
if (partialObserver.complete) {
try {
partialObserver.complete();
} catch (error) {
handleUnhandledError(error);
}
}
};
return ConsumerObserver2;
}();
var SafeSubscriber = function(_super) {
__extends(SafeSubscriber2, _super);
function SafeSubscriber2(observerOrNext, error, complete) {
var _this = _super.call(this) || this;
var partialObserver;
if (isFunction(observerOrNext) || !observerOrNext) {
partialObserver = {
next: observerOrNext !== null && observerOrNext !== void 0 ? observerOrNext : void 0,
error: error !== null && error !== void 0 ? error : void 0,
complete: complete !== null && complete !== void 0 ? complete : void 0
};
} else {
var context_1;
if (_this && config.useDeprecatedNextContext) {
context_1 = Object.create(observerOrNext);
context_1.unsubscribe = function() {
return _this.unsubscribe();
};
partialObserver = {
next: observerOrNext.next && bind(observerOrNext.next, context_1),
error: observerOrNext.error && bind(observerOrNext.error, context_1),
complete: observerOrNext.complete && bind(observerOrNext.complete, context_1)
};
} else {
partialObserver = observerOrNext;
}
}
_this.destination = new ConsumerObserver(partialObserver);
return _this;
}
return SafeSubscriber2;
}(Subscriber);
function handleUnhandledError(error) {
if (config.useDeprecatedSynchronousErrorHandling) {
captureError(error);
} else {
reportUnhandledError(error);
}
}
function defaultErrorHandler(err) {
throw err;
}
function handleStoppedNotification(notification, subscriber) {
var onStoppedNotification = config.onStoppedNotification;
onStoppedNotification && timeoutProvider.setTimeout(function() {
return onStoppedNotification(notification, subscriber);
});
}
var EMPTY_OBSERVER = {
closed: true,
next: noop,
error: defaultErrorHandler,
complete: noop
};
// node_modules/rxjs/dist/esm5/internal/symbol/observable.js
var observable = function() {
return typeof Symbol === "function" && Symbol.observable || "@@observable";
}();
// node_modules/rxjs/dist/esm5/internal/util/identity.js
function identity(x) {
return x;
}
// node_modules/rxjs/dist/esm5/internal/util/pipe.js
function pipeFromArray(fns) {
if (fns.length === 0) {
return identity;
}
if (fns.length === 1) {
return fns[0];
}
return function piped(input) {
return fns.reduce(function(prev, fn) {
return fn(prev);
}, input);
};
}
// node_modules/rxjs/dist/esm5/internal/Observable.js
var Observable = function() {
function Observable2(subscribe) {
if (subscribe) {
this._subscribe = subscribe;
}
}
Observable2.prototype.lift = function(operator) {
var observable2 = new Observable2();
observable2.source = this;
observable2.operator = operator;
return observable2;
};
Observable2.prototype.subscribe = function(observerOrNext, error, complete) {
var _this = this;
var subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);
errorContext(function() {
var _a = _this, operator = _a.operator, source = _a.source;
subscriber.add(operator ? operator.call(subscriber, source) : source ? _this._subscribe(subscriber) : _this._trySubscribe(subscriber));
});
return subscriber;
};
Observable2.prototype._trySubscribe = function(sink) {
try {
return this._subscribe(sink);
} catch (err) {
sink.error(err);
}
};
Observable2.prototype.forEach = function(next, promiseCtor) {
var _this = this;
promiseCtor = getPromiseCtor(promiseCtor);
return new promiseCtor(function(resolve, reject) {
var subscriber = new SafeSubscriber({
next: function(value) {
try {
next(value);
} catch (err) {
reject(err);
subscriber.unsubscribe();
}
},
error: reject,
complete: resolve
});
_this.subscribe(subscriber);
});
};
Observable2.prototype._subscribe = function(subscriber) {
var _a;
return (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber);
};
Observable2.prototype[observable] = function() {
return this;
};
Observable2.prototype.pipe = function() {
var operations = [];
for (var _i = 0; _i < arguments.length; _i++) {
operations[_i] = arguments[_i];
}
return pipeFromArray(operations)(this);
};
Observable2.prototype.toPromise = function(promiseCtor) {
var _this = this;
promiseCtor = getPromiseCtor(promiseCtor);
return new promiseCtor(function(resolve, reject) {
var value;
_this.subscribe(function(x) {
return value = x;
}, function(err) {
return reject(err);
}, function() {
return resolve(value);
});
});
};
Observable2.create = function(subscribe) {
return new Observable2(subscribe);
};
return Observable2;
}();
function getPromiseCtor(promiseCtor) {
var _a;
return (_a = promiseCtor !== null && promiseCtor !== void 0 ? promiseCtor : config.Promise) !== null && _a !== void 0 ? _a : Promise;
}
function isObserver(value) {
return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);
}
function isSubscriber(value) {
return value && value instanceof Subscriber || isObserver(value) && isSubscription(value);
}
// node_modules/rxjs/dist/esm5/internal/util/lift.js
function hasLift(source) {
return isFunction(source === null || source === void 0 ? void 0 : source.lift);
}
function operate(init) {
return function(source) {
if (hasLift(source)) {
return source.lift(function(liftedSource) {
try {
return init(liftedSource, this);
} catch (err) {
this.error(err);
}
});
}
throw new TypeError("Unable to lift unknown Observable type");
};
}
// node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js
function createOperatorSubscriber(destination, onNext, onComplete, onError, onFinalize) {
return new OperatorSubscriber(destination, onNext, onComplete, onError, onFinalize);
}
var OperatorSubscriber = function(_super) {
__extends(OperatorSubscriber2, _super);
function OperatorSubscriber2(destination, onNext, onComplete, onError, onFinalize, shouldUnsubscribe) {
var _this = _super.call(this, destination) || this;
_this.onFinalize = onFinalize;
_this.shouldUnsubscribe = shouldUnsubscribe;
_this._next = onNext ? function(value) {
try {
onNext(value);
} catch (err) {
destination.error(err);
}
} : _super.prototype._next;
_this._error = onError ? function(err) {
try {
onError(err);
} catch (err2) {
destination.error(err2);
} finally {
this.unsubscribe();
}
} : _super.prototype._error;
_this._complete = onComplete ? function() {
try {
onComplete();
} catch (err) {
destination.error(err);
} finally {
this.unsubscribe();
}
} : _super.prototype._complete;
return _this;
}
OperatorSubscriber2.prototype.unsubscribe = function() {
var _a;
if (!this.shouldUnsubscribe || this.shouldUnsubscribe()) {
var closed_1 = this.closed;
_super.prototype.unsubscribe.call(this);
!closed_1 && ((_a = this.onFinalize) === null || _a === void 0 ? void 0 : _a.call(this));
}
};
return OperatorSubscriber2;
}(Subscriber);
// node_modules/rxjs/dist/esm5/internal/util/ObjectUnsubscribedError.js
var ObjectUnsubscribedError = createErrorClass(function(_super) {
return function ObjectUnsubscribedErrorImpl() {
_super(this);
this.name = "ObjectUnsubscribedError";
this.message = "object unsubscribed";
};
});
// node_modules/rxjs/dist/esm5/internal/Subject.js
var Subject = function(_super) {
__extends(Subject2, _super);
function Subject2() {
var _this = _super.call(this) || this;
_this.closed = false;
_this.currentObservers = null;
_this.observers = [];
_this.isStopped = false;
_this.hasError = false;
_this.thrownError = null;
return _this;
}
Subject2.prototype.lift = function(operator) {
var subject = new AnonymousSubject(this, this);
subject.operator = operator;
return subject;
};
Subject2.prototype._throwIfClosed = function() {
if (this.closed) {
throw new ObjectUnsubscribedError();
}
};
Subject2.prototype.next = function(value) {
var _this = this;
errorContext(function() {
var e_1, _a;
_this._throwIfClosed();
if (!_this.isStopped) {
if (!_this.currentObservers) {
_this.currentObservers = Array.from(_this.observers);
}
try {
for (var _b = __values(_this.currentObservers), _c = _b.next(); !_c.done; _c = _b.next()) {
var observer = _c.value;
observer.next(value);
}
} catch (e_1_1) {
e_1 = { error: e_1_1 };
} finally {
try {
if (_c && !_c.done && (_a = _b.return))
_a.call(_b);
} finally {
if (e_1)
throw e_1.error;
}
}
}
});
};
Subject2.prototype.error = function(err) {
var _this = this;
errorContext(function() {
_this._throwIfClosed();
if (!_this.isStopped) {
_this.hasError = _this.isStopped = true;
_this.thrownError = err;
var observers = _this.observers;
while (observers.length) {
observers.shift().error(err);
}
}
});
};
Subject2.prototype.complete = function() {
var _this = this;
errorContext(function() {
_this._throwIfClosed();
if (!_this.isStopped) {
_this.isStopped = true;
var observers = _this.observers;
while (observers.length) {
observers.shift().complete();
}
}
});
};
Subject2.prototype.unsubscribe = function() {
this.isStopped = this.closed = true;
this.observers = this.currentObservers = null;
};
Object.defineProperty(Subject2.prototype, "observed", {
get: function() {
var _a;
return ((_a = this.observers) === null || _a === void 0 ? void 0 : _a.length) > 0;
},
enumerable: false,
configurable: true
});
Subject2.prototype._trySubscribe = function(subscriber) {
this._throwIfClosed();
return _super.prototype._trySubscribe.call(this, subscriber);
};
Subject2.prototype._subscribe = function(subscriber) {
this._throwIfClosed();
this._checkFinalizedStatuses(subscriber);
return this._innerSubscribe(subscriber);
};
Subject2.prototype._innerSubscribe = function(subscriber) {
var _this = this;
var _a = this, hasError = _a.hasError, isStopped = _a.isStopped, observers = _a.observers;
if (hasError || isStopped) {
return EMPTY_SUBSCRIPTION;
}
this.currentObservers = null;
observers.push(subscriber);
return new Subscription(function() {
_this.currentObservers = null;
arrRemove(observers, subscriber);
});
};
Subject2.prototype._checkFinalizedStatuses = function(subscriber) {
var _a = this, hasError = _a.hasError, thrownError = _a.thrownError, isStopped = _a.isStopped;
if (hasError) {
subscriber.error(thrownError);
} else if (isStopped) {
subscriber.complete();
}
};
Subject2.prototype.asObservable = function() {
var observable2 = new Observable();
observable2.source = this;
return observable2;
};
Subject2.create = function(destination, source) {
return new AnonymousSubject(destination, source);
};
return Subject2;
}(Observable);
var AnonymousSubject = function(_super) {
__extends(AnonymousSubject2, _super);
function AnonymousSubject2(destination, source) {
var _this = _super.call(this) || this;
_this.destination = destination;
_this.source = source;
return _this;
}
AnonymousSubject2.prototype.next = function(value) {
var _a, _b;
(_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.next) === null || _b === void 0 ? void 0 : _b.call(_a, value);
};
AnonymousSubject2.prototype.error = function(err) {
var _a, _b;
(_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.error) === null || _b === void 0 ? void 0 : _b.call(_a, err);
};
AnonymousSubject2.prototype.complete = function() {
var _a, _b;
(_b = (_a = this.destination) === null || _a === void 0 ? void 0 : _a.complete) === null || _b === void 0 ? void 0 : _b.call(_a);
};
AnonymousSubject2.prototype._subscribe = function(subscriber) {
var _a, _b;
return (_b = (_a = this.source) === null || _a === void 0 ? void 0 : _a.subscribe(subscriber)) !== null && _b !== void 0 ? _b : EMPTY_SUBSCRIPTION;
};
return AnonymousSubject2;
}(Subject);
// node_modules/rxjs/dist/esm5/internal/scheduler/dateTimestampProvider.js
var dateTimestampProvider = {
now: function() {
return (dateTimestampProvider.delegate || Date).now();
},
delegate: void 0
};
// node_modules/rxjs/dist/esm5/internal/scheduler/Action.js
var Action = function(_super) {
__extends(Action2, _super);
function Action2(scheduler, work) {
return _super.call(this) || this;
}
Action2.prototype.schedule = function(state, delay) {
if (delay === void 0) {
delay = 0;
}
return this;
};
return Action2;
}(Subscription);
// node_modules/rxjs/dist/esm5/internal/scheduler/intervalProvider.js
var intervalProvider = {
setInterval: function(handler, timeout) {
var args = [];
for (var _i = 2; _i < arguments.length; _i++) {
args[_i - 2] = arguments[_i];
}
var delegate = intervalProvider.delegate;
if (delegate === null || delegate === void 0 ? void 0 : delegate.setInterval) {
return delegate.setInterval.apply(delegate, __spreadArray([handler, timeout], __read(args)));
}
return setInterval.apply(void 0, __spreadArray([handler, timeout], __read(args)));
},
clearInterval: function(handle) {
var delegate = intervalProvider.delegate;
return ((delegate === null || delegate === void 0 ? void 0 : delegate.clearInterval) || clearInterval)(handle);
},
delegate: void 0
};
// node_modules/rxjs/dist/esm5/internal/scheduler/AsyncAction.js
var AsyncAction = function(_super) {
__extends(AsyncAction2, _super);
function AsyncAction2(scheduler, work) {
var _this = _super.call(this, scheduler, work) || this;
_this.scheduler = scheduler;
_this.work = work;
_this.pending = false;
return _this;
}
AsyncAction2.prototype.schedule = function(state, delay) {
var _a;
if (delay === void 0) {
delay = 0;
}
if (this.closed) {
return this;
}
this.state = state;
var id = this.id;
var scheduler = this.scheduler;
if (id != null) {
this.id = this.recycleAsyncId(scheduler, id, delay);
}
this.pending = true;
this.delay = delay;
this.id = (_a = this.id) !== null && _a !== void 0 ? _a : this.requestAsyncId(scheduler, this.id, delay);
return this;
};
AsyncAction2.prototype.requestAsyncId = function(scheduler, _id, delay) {
if (delay === void 0) {
delay = 0;
}
return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);
};
AsyncAction2.prototype.recycleAsyncId = function(_scheduler, id, delay) {
if (delay === void 0) {
delay = 0;
}
if (delay != null && this.delay === delay && this.pending === false) {
return id;
}
if (id != null) {
intervalProvider.clearInterval(id);
}
return void 0;
};
AsyncAction2.prototype.execute = function(state, delay) {
if (this.closed) {
return new Error("executing a cancelled action");
}
this.pending = false;
var error = this._execute(state, delay);
if (error) {
return error;
} else if (this.pending === false && this.id != null) {
this.id = this.recycleAsyncId(this.scheduler, this.id, null);
}
};
AsyncAction2.prototype._execute = function(state, _delay) {
var errored = false;
var errorValue;
try {
this.work(state);
} catch (e) {
errored = true;
errorValue = e ? e : new Error("Scheduled action threw falsy error");
}
if (errored) {
this.unsubscribe();
return errorValue;
}
};
AsyncAction2.prototype.unsubscribe = function() {
if (!this.closed) {
var _a = this, id = _a.id, scheduler = _a.scheduler;
var actions = scheduler.actions;
this.work = this.state = this.scheduler = null;
this.pending = false;
arrRemove(actions, this);
if (id != null) {
this.id = this.recycleAsyncId(scheduler, id, null);
}
this.delay = null;
_super.prototype.unsubscribe.call(this);
}
};
return AsyncAction2;
}(Action);
// node_modules/rxjs/dist/esm5/internal/Scheduler.js
var Scheduler = function() {
function Scheduler2(schedulerActionCtor, now) {
if (now === void 0) {
now = Scheduler2.now;
}
this.schedulerActionCtor = schedulerActionCtor;
this.now = now;
}
Scheduler2.prototype.schedule = function(work, delay, state) {
if (delay === void 0) {
delay = 0;
}
return new this.schedulerActionCtor(this, work).schedule(state, delay);
};
Scheduler2.now = dateTimestampProvider.now;
return Scheduler2;
}();
// node_modules/rxjs/dist/esm5/internal/scheduler/AsyncScheduler.js
var AsyncScheduler = function(_super) {
__extends(AsyncScheduler2, _super);
function AsyncScheduler2(SchedulerAction, now) {
if (now === void 0) {
now = Scheduler.now;
}
var _this = _super.call(this, SchedulerAction, now) || this;
_this.actions = [];
_this._active = false;
return _this;
}
AsyncScheduler2.prototype.flush = function(action) {
var actions = this.actions;
if (this._active) {
actions.push(action);
return;
}
var error;
this._active = true;
do {
if (error = action.execute(action.state, action.delay)) {
break;
}
} while (action = actions.shift());
this._active = false;
if (error) {
while (action = actions.shift()) {
action.unsubscribe();
}
throw error;
}
};
return AsyncScheduler2;
}(Scheduler);
// node_modules/rxjs/dist/esm5/internal/scheduler/async.js
var asyncScheduler = new AsyncScheduler(AsyncAction);
var async = asyncScheduler;
// node_modules/rxjs/dist/esm5/internal/observable/empty.js
var EMPTY = new Observable(function(subscriber) {
return subscriber.complete();
});
// node_modules/rxjs/dist/esm5/internal/util/isScheduler.js
function isScheduler(value) {
return value && isFunction(value.schedule);
}
// node_modules/rxjs/dist/esm5/internal/util/args.js
function last(arr) {
return arr[arr.length - 1];
}
function popScheduler(args) {
return isScheduler(last(args)) ? args.pop() : void 0;
}
// node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js
var isArrayLike = function(x) {
return x && typeof x.length === "number" && typeof x !== "function";
};
// node_modules/rxjs/dist/esm5/internal/util/isPromise.js
function isPromise(value) {
return isFunction(value === null || value === void 0 ? void 0 : value.then);
}
// node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js
function isInteropObservable(input) {
return isFunction(input[observable]);
}
// node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js
function isAsyncIterable(obj) {
return Symbol.asyncIterator && isFunction(obj === null || obj === void 0 ? void 0 : obj[Symbol.asyncIterator]);
}
// node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js
function createInvalidObservableTypeError(input) {
return new TypeError("You provided " + (input !== null && typeof input === "object" ? "an invalid object" : "'" + input + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
}
// node_modules/rxjs/dist/esm5/internal/symbol/iterator.js
function getSymbolIterator() {
if (typeof Symbol !== "function" || !Symbol.iterator) {
return "@@iterator";
}
return Symbol.iterator;
}
var iterator = getSymbolIterator();
// node_modules/rxjs/dist/esm5/internal/util/isIterable.js
function isIterable(input) {
return isFunction(input === null || input === void 0 ? void 0 : input[iterator]);
}
// node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js
function readableStreamLikeToAsyncGenerator(readableStream) {
return __asyncGenerator(this, arguments, function readableStreamLikeToAsyncGenerator_1() {
var reader, _a, value, done;
return __generator(this, function(_b) {
switch (_b.label) {
case 0:
reader = readableStream.getReader();
_b.label = 1;
case 1:
_b.trys.push([1, , 9, 10]);
_b.label = 2;
case 2:
if (false)
return [3, 8];
return [4, __await(reader.read())];
case 3:
_a = _b.sent(), value = _a.value, done = _a.done;
if (!done)
return [3, 5];
return [4, __await(void 0)];
case 4:
return [2, _b.sent()];
case 5:
return [4, __await(value)];
case 6:
return [4, _b.sent()];
case 7:
_b.sent();
return [3, 2];
case 8:
return [3, 10];
case 9:
reader.releaseLock();
return [7];
case 10:
return [2];
}
});
});
}
function isReadableStreamLike(obj) {
return isFunction(obj === null || obj === void 0 ? void 0 : obj.getReader);
}
// node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js
function innerFrom(input) {
if (input instanceof Observable) {
return input;
}
if (input != null) {
if (isInteropObservable(input)) {
return fromInteropObservable(input);
}
if (isArrayLike(input)) {
return fromArrayLike(input);
}
if (isPromise(input)) {
return fromPromise(input);
}
if (isAsyncIterable(input)) {
return fromAsyncIterable(input);
}
if (isIterable(input)) {
return fromIterable(input);
}
if (isReadableStreamLike(input)) {
return fromReadableStreamLike(input);
}
}
throw createInvalidObservableTypeError(input);
}
function fromInteropObservable(obj) {
return new Observable(function(subscriber) {
var obs = obj[observable]();
if (isFunction(obs.subscribe)) {
return obs.subscribe(subscriber);
}
throw new TypeError("Provided object does not correctly implement Symbol.observable");
});
}
function fromArrayLike(array) {
return new Observable(function(subscriber) {
for (var i = 0; i < array.length && !subscriber.closed; i++) {
subscriber.next(array[i]);
}
subscriber.complete();
});
}
function fromPromise(promise) {
return new Observable(function(subscriber) {
promise.then(function(value) {
if (!subscriber.closed) {
subscriber.next(value);
subscriber.complete();
}
}, function(err) {
return subscriber.error(err);
}).then(null, reportUnhandledError);
});
}
function fromIterable(iterable) {
return new Observable(function(subscriber) {
var e_1, _a;
try {
for (var iterable_1 = __values(iterable), iterable_1_1 = iterable_1.next(); !iterable_1_1.done; iterable_1_1 = iterable_1.next()) {
var value = iterable_1_1.value;
subscriber.next(value);
if (subscriber.closed) {
return;
}
}
} catch (e_1_1) {
e_1 = { error: e_1_1 };
} finally {
try {
if (iterable_1_1 && !iterable_1_1.done && (_a = iterable_1.return))
_a.call(iterable_1);
} finally {
if (e_1)
throw e_1.error;
}
}
subscriber.complete();
});
}
function fromAsyncIterable(asyncIterable) {
return new Observable(function(subscriber) {
process(asyncIterable, subscriber).catch(function(err) {
return subscriber.error(err);
});
});
}
function fromReadableStreamLike(readableStream) {
return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));
}
function process(asyncIterable, subscriber) {
var asyncIterable_1, asyncIterable_1_1;
var e_2, _a;
return __awaiter(this, void 0, void 0, function() {
var value, e_2_1;
return __generator(this, function(_b) {
switch (_b.label) {
case 0:
_b.trys.push([0, 5, 6, 11]);
asyncIterable_1 = __asyncValues(asyncIterable);
_b.label = 1;
case 1:
return [4, asyncIterable_1.next()];
case 2:
if (!(asyncIterable_1_1 = _b.sent(), !asyncIterable_1_1.done))
return [3, 4];
value = asyncIterable_1_1.value;
subscriber.next(value);
if (subscriber.closed) {
return [2];
}
_b.label = 3;
case 3:
return [3, 1];
case 4:
return [3, 11];
case 5:
e_2_1 = _b.sent();
e_2 = { error: e_2_1 };
return [3, 11];
case 6:
_b.trys.push([6, , 9, 10]);
if (!(asyncIterable_1_1 && !asyncIterable_1_1.done && (_a = asyncIterable_1.return)))
return [3, 8];
return [4, _a.call(asyncIterable_1)];
case 7:
_b.sent();
_b.label = 8;
case 8:
return [3, 10];
case 9:
if (e_2)
throw e_2.error;
return [7];
case 10:
return [7];
case 11:
subscriber.complete();
return [2];
}
});
});
}
// node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js
function executeSchedule(parentSubscription, scheduler, work, delay, repeat) {
if (delay === void 0) {
delay = 0;
}
if (repeat === void 0) {
repeat = false;
}
var scheduleSubscription = scheduler.schedule(function() {
work();
if (repeat) {
parentSubscription.add(this.schedule(null, delay));
} else {
this.unsubscribe();
}
}, delay);
parentSubscription.add(scheduleSubscription);
if (!repeat) {
return scheduleSubscription;
}
}
// node_modules/rxjs/dist/esm5/internal/operators/observeOn.js
function observeOn(scheduler, delay) {
if (delay === void 0) {
delay = 0;
}
return operate(function(source, subscriber) {
source.subscribe(createOperatorSubscriber(subscriber, function(value) {
return executeSchedule(subscriber, scheduler, function() {
return subscriber.next(value);
}, delay);
}, function() {
return executeSchedule(subscriber, scheduler, function() {
return subscriber.complete();
}, delay);
}, function(err) {
return executeSchedule(subscriber, scheduler, function() {
return subscriber.error(err);
}, delay);
}));
});
}
// node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js
function subscribeOn(scheduler, delay) {
if (delay === void 0) {
delay = 0;
}
return operate(function(source, subscriber) {
subscriber.add(scheduler.schedule(function() {
return source.subscribe(subscriber);
}, delay));
});
}
// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js
function scheduleObservable(input, scheduler) {
return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));
}
// node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js
function schedulePromise(input, scheduler) {
return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));
}
// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js
function scheduleArray(input, scheduler) {
return new Observable(function(subscriber) {
var i = 0;
return scheduler.schedule(function() {
if (i === input.length) {
subscriber.complete();
} else {
subscriber.next(input[i++]);
if (!subscriber.closed) {
this.schedule();
}
}
});
});
}
// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js
function scheduleIterable(input, scheduler) {
return new Observable(function(subscriber) {
var iterator2;
executeSchedule(subscriber, scheduler, function() {
iterator2 = input[iterator]();
executeSchedule(subscriber, scheduler, function() {
var _a;
var value;
var done;
try {
_a = iterator2.next(), value = _a.value, done = _a.done;
} catch (err) {
subscriber.error(err);
return;
}
if (done) {
subscriber.complete();
} else {
subscriber.next(value);
}
}, 0, true);
});
return function() {
return isFunction(iterator2 === null || iterator2 === void 0 ? void 0 : iterator2.return) && iterator2.return();
};
});
}
// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js
function scheduleAsyncIterable(input, scheduler) {
if (!input) {
throw new Error("Iterable cannot be null");
}
return new Observable(function(subscriber) {
executeSchedule(subscriber, scheduler, function() {
var iterator2 = input[Symbol.asyncIterator]();
executeSchedule(subscriber, scheduler, function() {
iterator2.next().then(function(result) {
if (result.done) {
subscriber.complete();
} else {
subscriber.next(result.value);
}
});
}, 0, true);
});
});
}
// node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js
function scheduleReadableStreamLike(input, scheduler) {
return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);
}
// node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js
function scheduled(input, scheduler) {
if (input != null) {
if (isInteropObservable(input)) {
return scheduleObservable(input, scheduler);
}
if (isArrayLike(input)) {
return scheduleArray(input, scheduler);
}
if (isPromise(input)) {
return schedulePromise(input, scheduler);
}
if (isAsyncIterable(input)) {
return scheduleAsyncIterable(input, scheduler);
}
if (isIterable(input)) {
return scheduleIterable(input, scheduler);
}
if (isReadableStreamLike(input)) {
return scheduleReadableStreamLike(input, scheduler);
}
}
throw createInvalidObservableTypeError(input);
}
// node_modules/rxjs/dist/esm5/internal/observable/from.js
function from(input, scheduler) {
return scheduler ? scheduled(input, scheduler) : innerFrom(input);
}
// node_modules/rxjs/dist/esm5/internal/observable/of.js
function of() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var scheduler = popScheduler(args);
return from(args, scheduler);
}
// node_modules/rxjs/dist/esm5/internal/util/isDate.js
function isValidDate(value) {
return value instanceof Date && !isNaN(value);
}
// node_modules/rxjs/dist/esm5/internal/operators/map.js
function map(project, thisArg) {
return operate(function(source, subscriber) {
var index = 0;
source.subscribe(createOperatorSubscriber(subscriber, function(value) {
subscriber.next(project.call(thisArg, value, index++));
}));
});
}
// node_modules/rxjs/dist/esm5/internal/util/mapOneOrManyArgs.js
var isArray = Array.isArray;
function callOrApply(fn, args) {
return isArray(args) ? fn.apply(void 0, __spreadArray([], __read(args))) : fn(args);
}
function mapOneOrManyArgs(fn) {
return map(function(args) {
return callOrApply(fn, args);
});
}
// node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js
function mergeInternals(source, subscriber, project, concurrent, onBeforeNext, expand, innerSubScheduler, additionalFinalizer) {
var buffer = [];
var active = 0;
var index = 0;
var isComplete = false;
var checkComplete = function() {
if (isComplete && !buffer.length && !active) {
subscriber.complete();
}
};
var outerNext = function(value) {
return active < concurrent ? doInnerSub(value) : buffer.push(value);
};
var doInnerSub = function(value) {
expand && subscriber.next(value);
active++;
var innerComplete = false;
innerFrom(project(value, index++)).subscribe(createOperatorSubscriber(subscriber, function(innerValue) {
onBeforeNext === null || onBeforeNext === void 0 ? void 0 : onBeforeNext(innerValue);
if (expand) {
outerNext(innerValue);
} else {
subscriber.next(innerValue);
}
}, function() {
innerComplete = true;
}, void 0, function() {
if (innerComplete) {
try {
active--;
var _loop_1 = function() {
var bufferedValue = buffer.shift();
if (innerSubScheduler) {
executeSchedule(subscriber, innerSubScheduler, function() {
return doInnerSub(bufferedValue);
});
} else {
doInnerSub(bufferedValue);
}
};
while (buffer.length && active < concurrent) {
_loop_1();
}
checkComplete();
} catch (err) {
subscriber.error(err);
}
}
}));
};
source.subscribe(createOperatorSubscriber(subscriber, outerNext, function() {
isComplete = true;
checkComplete();
}));
return function() {
additionalFinalizer === null || additionalFinalizer === void 0 ? void 0 : additionalFinalizer();
};
}
// node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js
function mergeMap(project, resultSelector, concurrent) {
if (concurrent === void 0) {
concurrent = Infinity;
}
if (isFunction(resultSelector)) {
return mergeMap(function(a, i) {
return map(function(b, ii) {
return resultSelector(a, b, i, ii);
})(innerFrom(project(a, i)));
}, concurrent);
} else if (typeof resultSelector === "number") {
concurrent = resultSelector;
}
return operate(function(source, subscriber) {
return mergeInternals(source, subscriber, project, concurrent);
});
}
// node_modules/rxjs/dist/esm5/internal/observable/defer.js
function defer(observableFactory) {
return new Observable(function(subscriber) {
innerFrom(observableFactory()).subscribe(subscriber);
});
}
// node_modules/rxjs/dist/esm5/internal/observable/fromEvent.js
var nodeEventEmitterMethods = ["addListener", "removeListener"];
var eventTargetMethods = ["addEventListener", "removeEventListener"];
var jqueryMethods = ["on", "off"];
function fromEvent(target, eventName, options, resultSelector) {
if (isFunction(options)) {
resultSelector = options;
options = void 0;
}
if (resultSelector) {
return fromEvent(target, eventName, options).pipe(mapOneOrManyArgs(resultSelector));
}
var _a = __read(isEventTarget(target) ? eventTargetMethods.map(function(methodName) {
return function(handler) {
return target[methodName](eventName, handler, options);
};
}) : isNodeStyleEventEmitter(target) ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName)) : isJQueryStyleEventEmitter(target) ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName)) : [], 2), add = _a[0], remove = _a[1];
if (!add) {
if (isArrayLike(target)) {
return mergeMap(function(subTarget) {
return fromEvent(subTarget, eventName, options);
})(innerFrom(target));
}
}
if (!add) {
throw new TypeError("Invalid event target");
}
return new Observable(function(subscriber) {
var handler = function() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return subscriber.next(1 < args.length ? args : args[0]);
};
add(handler);
return function() {
return remove(handler);
};
});
}
function toCommonHandlerRegistry(target, eventName) {
return function(methodName) {
return function(handler) {
return target[methodName](eventName, handler);
};
};
}
function isNodeStyleEventEmitter(target) {
return isFunction(target.addListener) && isFunction(target.removeListener);
}
function isJQueryStyleEventEmitter(target) {
return isFunction(target.on) && isFunction(target.off);
}
function isEventTarget(target) {
return isFunction(target.addEventListener) && isFunction(target.removeEventListener);
}
// node_modules/rxjs/dist/esm5/internal/observable/timer.js
function timer(dueTime, intervalOrScheduler, scheduler) {
if (dueTime === void 0) {
dueTime = 0;
}
if (scheduler === void 0) {
scheduler = async;
}
var intervalDuration = -1;
if (intervalOrScheduler != null) {
if (isScheduler(intervalOrScheduler)) {
scheduler = intervalOrScheduler;
} else {
intervalDuration = intervalOrScheduler;
}
}
return new Observable(function(subscriber) {
var due = isValidDate(dueTime) ? +dueTime - scheduler.now() : dueTime;
if (due < 0) {
due = 0;
}
var n = 0;
return scheduler.schedule(function() {
if (!subscriber.closed) {
subscriber.next(n++);
if (0 <= intervalDuration) {
this.schedule(void 0, intervalDuration);
} else {
subscriber.complete();
}
}
}, due);
});
}
// node_modules/rxjs/dist/esm5/internal/observable/interval.js
function interval(period, scheduler) {
if (period === void 0) {
period = 0;
}
if (scheduler === void 0) {
scheduler = asyncScheduler;
}
if (period < 0) {
period = 0;
}
return timer(period, period, scheduler);
}
// node_modules/rxjs/dist/esm5/internal/operators/filter.js
function filter(predicate, thisArg) {
return operate(function(source, subscriber) {
var index = 0;
source.subscribe(createOperatorSubscriber(subscriber, function(value) {
return predicate.call(thisArg, value, index++) && subscriber.next(value);
}));
});
}
// node_modules/rxjs/dist/esm5/internal/operators/catchError.js
function catchError(selector) {
return operate(function(source, subscriber) {
var innerSub = null;
var syncUnsub = false;
var handledResult;
innerSub = source.subscribe(createOperatorSubscriber(subscriber, void 0, void 0, function(err) {
handledResult = innerFrom(selector(err, catchError(selector)(source)));
if (innerSub) {
innerSub.unsubscribe();
innerSub = null;
handledResult.subscribe(subscriber);
} else {
syncUnsub = true;
}
}));
if (syncUnsub) {
innerSub.unsubscribe();
innerSub = null;
handledResult.subscribe(subscriber);
}
});
}
// node_modules/rxjs/dist/esm5/internal/operators/take.js
function take(count) {
return count <= 0 ? function() {
return EMPTY;
} : operate(function(source, subscriber) {
var seen = 0;
source.subscribe(createOperatorSubscriber(subscriber, function(value) {
if (++seen <= count) {
subscriber.next(value);
if (count <= seen) {
subscriber.complete();
}
}
}));
});
}
// node_modules/rxjs/dist/esm5/internal/operators/retry.js
function retry(configOrCount) {
if (configOrCount === void 0) {
configOrCount = Infinity;
}
var config2;
if (configOrCount && typeof configOrCount === "object") {
config2 = configOrCount;
} else {
config2 = {
count: configOrCount
};
}
var _a = config2.count, count = _a === void 0 ? Infinity : _a, delay = config2.delay, _b = config2.resetOnSuccess, resetOnSuccess = _b === void 0 ? false : _b;
return count <= 0 ? identity : operate(function(source, subscriber) {
var soFar = 0;
var innerSub;
var subscribeForRetry = function() {
var syncUnsub = false;
innerSub = source.subscribe(createOperatorSubscriber(subscriber, function(value) {
if (resetOnSuccess) {
soFar = 0;
}
subscriber.next(value);
}, void 0, function(err) {
if (soFar++ < count) {
var resub_1 = function() {
if (innerSub) {
innerSub.unsubscribe();
innerSub = null;
subscribeForRetry();
} else {
syncUnsub = true;
}
};
if (delay != null) {
var notifier = typeof delay === "number" ? timer(delay) : innerFrom(delay(err, soFar));
var notifierSubscriber_1 = createOperatorSubscriber(subscriber, function() {
notifierSubscriber_1.unsubscribe();
resub_1();
}, function() {
subscriber.complete();
});
notifier.subscribe(notifierSubscriber_1);
} else {
resub_1();
}
} else {
subscriber.error(err);
}
}));
if (syncUnsub) {
innerSub.unsubscribe();
innerSub = null;
subscribeForRetry();
}
};
subscribeForRetry();
});
}
// node_modules/rxjs/dist/esm5/internal/operators/switchMap.js
function switchMap(project, resultSelector) {
return operate(function(source, subscriber) {
var innerSubscriber = null;
var index = 0;
var isComplete = false;
var checkComplete = function() {
return isComplete && !innerSubscriber && subscriber.complete();
};
source.subscribe(createOperatorSubscriber(subscriber, function(value) {
innerSubscriber === null || innerSubscriber === void 0 ? void 0 : innerSubscriber.unsubscribe();
var innerIndex = 0;
var outerIndex = index++;
innerFrom(project(value, outerIndex)).subscribe(innerSubscriber = createOperatorSubscriber(subscriber, function(innerValue) {
return subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue);
}, function() {
innerSubscriber = null;
checkComplete();
}));
}, function() {
isComplete = true;
checkComplete();
}));
});
}
// node_modules/rxjs/dist/esm5/internal/operators/tap.js
function tap(observerOrNext, error, complete) {
var tapObserver = isFunction(observerOrNext) || error || complete ? { next: observerOrNext, error, complete } : observerOrNext;
return tapObserver ? operate(function(source, subscriber) {
var _a;
(_a = tapObserver.subscribe) === null || _a === void 0 ? void 0 : _a.call(tapObserver);
var isUnsub = true;
source.subscribe(createOperatorSubscriber(subscriber, function(value) {
var _a2;
(_a2 = tapObserver.next) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver, value);
subscriber.next(value);
}, function() {
var _a2;
isUnsub = false;
(_a2 = tapObserver.complete) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver);
subscriber.complete();
}, function(err) {
var _a2;
isUnsub = false;
(_a2 = tapObserver.error) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver, err);
subscriber.error(err);
}, function() {
var _a2, _b;
if (isUnsub) {
(_a2 = tapObserver.unsubscribe) === null || _a2 === void 0 ? void 0 : _a2.call(tapObserver);
}
(_b = tapObserver.finalize) === null || _b === void 0 ? void 0 : _b.call(tapObserver);
}));
}) : identity;
}
// ChatGPTVoiceInput.user.src.js
(async function() {
"use strict";
const logLevel = 0;
const defaultLang = "cmn-Hant-TW";
let currentVoice = void 0;
window.speechSynthesis.onvoiceschanged = function() {
currentVoice = speechSynthesis.getVoices().filter((x) => x.lang === "zh-TW").pop();
};
const isMac = () => navigator.userAgentData.platform.toUpperCase().includes("MAC");
let textAreaElement = void 0;
let Parts = [];
let submitButtonElement = void 0;
const svgMicOn = '';
const svgMicOff = '';
const microphoneButtonElement = document.createElement("button");
microphoneButtonElement.id = "btn-microphone";
microphoneButtonElement.type = "button";
microphoneButtonElement.classList = "absolute p-1 rounded-md text-gray-500 bottom-1.5 right-1 md:bottom-3.5 md:right-2 hover:bg-gray-100 dark:hover:text-gray-400 dark:hover:bg-gray-900 disabled:hover:bg-transparent dark:disabled:hover:bg-transparent";
microphoneButtonElement.style.right = "3rem";
microphoneButtonElement.title = `\u958B\u555F\u8A9E\u97F3\u8FA8\u8B58\u529F\u80FD (${isMac() ? "command+option+s" : "alt+s"})`;
microphoneButtonElement.innerHTML = svgMicOff;
microphoneButtonElement.addEventListener("click", () => {
if (isSpeechRecognitionEnabled()) {
speechRecognitionStop$.next();
} else {
speechRecognitionStart$.next();
}
});
microphoneButtonElement.changeLanguage = function(language) {
if (language) {
console.log("\u5207\u63DB\u8A9E\u8A00\u5230", language);
speechRecognitionStop$.next();
speechRecognition.lang = language;
setTimeout(() => {
speechRecognitionStart$.next();
}, 1e3);
}
};
microphoneButtonElement.addEventListener("contextmenu", function(event) {
event.preventDefault();
var contextMenu = document.createElement("div");
contextMenu.close = function() {
this.remove();
};
contextMenu.setDefault = function(select) {
console.log("set default to " + speechRecognition.lang);
select.value = speechRecognition.lang;
};
contextMenu.id = "microphoneButtonElementContextMenu";
contextMenu.style.position = "absolute";
contextMenu.style.backgroundColor = "white";
contextMenu.style.border = "1px solid black";
contextMenu.style.padding = "10px";
const styleElement = document.createElement("style");
styleElement.textContent = `
/* Light Theme */
select {
color: black;
background-color: white;
border: 1px solid black;
}
/* Dark Theme */
@media (prefers-color-scheme: dark) {
select {
color: white;
background-color: black;
border: 1px solid white;
}
}`;
contextMenu.appendChild(styleElement);
const selectElement = document.createElement("select");
selectElement.addEventListener("change", function(event2) {
microphoneButtonElement.changeLanguage(this.value);
contextMenu.close();
});
const option1 = document.createElement("option");
option1.value = "";
option1.text = "\u8ACB\u9078\u64C7\u8A9E\u97F3\u8FA8\u8B58\u7684\u6163\u7528\u8A9E\u8A00";
selectElement.add(option1);
var options = [
{ value: "cmn-Hant-TW", text: "\u4E2D\u6587 (\u53F0\u7063)" },
{ value: "cmn-Hans-CN", text: "\u666E\u901A\u8BDD (\u4E2D\u56FD\u5927\u9646)" },
{ value: "en-US", text: "English (United States)" },
{ value: "en-GB", text: "English (United Kingdom)" },
{ value: "en-AU", text: "English (Australia)" },
{ value: "en-CA", text: "English (Canada)" },
{ value: "en-IN", text: "English (India)" },
{ value: "ja-JP", text: "\u65E5\u672C\u8A9E" },
{ value: "ko-KR", text: "\uD55C\uAD6D\uC5B4" }
];
options.forEach(function(item) {
const option = document.createElement("option");
option.value = item.value;
option.text = item.text;
option.selected = item.value == speechRecognition.lang;
selectElement.add(option);
});
contextMenu.appendChild(selectElement);
contextMenu.style.left = event.clientX + "px";
contextMenu.style.top = event.clientY + "px";
document.body.appendChild(contextMenu);
document.addEventListener("click", function(ev) {
if (!contextMenu.contains(ev.target)) {
contextMenu.remove();
}
});
});
const svgSpeakerOn = '';
const svgSpeakerOff = '';
const speakerButtonElement = document.createElement("button");
speakerButtonElement.id = "btn-speaker";
speakerButtonElement.type = "button";
speakerButtonElement.classList = "absolute p-1 rounded-md text-gray-500 bottom-1.5 right-1 md:bottom-3.5 md:right-2 hover:bg-gray-100 dark:hover:text-gray-400 dark:hover:bg-gray-900 disabled:hover:bg-transparent dark:disabled:hover:bg-transparent";
speakerButtonElement.style.right = "5rem";
speakerButtonElement.innerHTML = svgSpeakerOff;
speakerButtonElement.title = `\u958B\u555F\u8A9E\u97F3\u5408\u6210\u529F\u80FD (${isMac() ? "command+option+m" : "alt+m"})`;
speakerButtonElement.addEventListener("click", () => {
const enabled = isSpeechSynthesisEnabled();
if (enabled) {
speechSynthesisStop$.next();
} else {
speechSynthesisStart$.next();
}
});
speakerButtonElement.addEventListener("contextmenu", function(event) {
event.preventDefault();
var contextMenu = document.createElement("div");
contextMenu.close = function() {
this.remove();
};
contextMenu.id = "speakerButtonElementContextMenu";
contextMenu.style.position = "absolute";
contextMenu.style.backgroundColor = "white";
contextMenu.style.border = "1px solid black";
contextMenu.style.padding = "10px";
const styleElement = document.createElement("style");
styleElement.textContent = `
/* Light Theme */
select {
color: black;
background-color: white;
border: 1px solid black;
}
/* Dark Theme */
@media (prefers-color-scheme: dark) {
select {
color: white;
background-color: black;
border: 1px solid white;
}
}`;
contextMenu.appendChild(styleElement);
const selectElement = document.createElement("select");
selectElement.addEventListener("change", function(event2) {
currentVoice = speechSynthesis.getVoices().filter((x) => x.voiceURI === this.value).pop();
console.log("\u4F60\u76EE\u524D\u9078\u4E2D\u7684\u8A9E\u97F3\u5408\u6210\u8072\u97F3\u662F: ", currentVoice);
speechSynthesisStart$.next();
contextMenu.close();
});
const option1 = document.createElement("option");
option1.value = "";
option1.text = "\u8ACB\u9078\u64C7\u8A9E\u97F3\u5408\u6210\u7684\u6163\u7528\u8072\u97F3";
selectElement.add(option1);
speechSynthesis.getVoices().forEach(function(item) {
const option = document.createElement("option");
option.value = item.voiceURI;
option.text = item.name;
option.selected = item == currentVoice;
selectElement.add(option);
});
contextMenu.appendChild(selectElement);
contextMenu.style.left = event.clientX + "px";
contextMenu.style.top = event.clientY + "px";
document.body.appendChild(contextMenu);
document.addEventListener("click", function(ev) {
if (!contextMenu.contains(ev.target)) {
contextMenu.remove();
}
});
});
function isSpeechSynthesisEnabled() {
return speakerButtonElement.innerHTML === svgSpeakerOn;
}
;
function isSpeechRecognitionEnabled() {
return microphoneButtonElement.innerHTML === svgMicOn;
}
;
var ChatGPTRunningStatus = false;
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const speechRecognition = new SpeechRecognition();
speechRecognition.continuous = true;
speechRecognition.interimResults = true;
speechRecognition.lang = defaultLang;
speechRecognition.onstart = (event) => {
logLevel >= 1 && console.log("\u958B\u59CB\u9032\u884C SpeechRecognition \u8A9E\u97F3\u8FA8\u8B58");
};
speechRecognition.onerror = (event) => {
logLevel >= 1 && console.log("SpeechRecognition \u8A9E\u97F3\u8FA8\u8B58\u932F\u8AA4(error)\u6216\u4E2D\u65B7(abort)!", event);
};
speechRecognition.onend = (event) => {
logLevel >= 1 && console.log("\u505C\u6B62 SpeechRecognition \u8A9E\u97F3\u8FA8\u8B58!", event);
speechRecognitionStop$.next();
};
speechRecognition.onresult = async (event) => {
await processSpeechRecognitionResult(event);
};
async function processSpeechRecognitionResult(event) {
logLevel >= 2 && console.log("\u8A9E\u97F3\u8B58\u5225\u4E8B\u4EF6: ", event);
let results = event.results[event.resultIndex];
logLevel >= 2 && console.log("results.length", results.length);
let transcript = results[0].transcript;
logLevel >= 1 && console.log("\u8A9E\u97F3\u8F38\u5165: " + transcript, "isFinal: ", results.isFinal);
if (Parts.length == 0) {
Parts[0] = transcript;
} else {
Parts[Parts.length - 1] = transcript;
}
textAreaElement.value = Parts.join("") + "\u2026";
textAreaElement.dispatchEvent(new Event("input", { bubbles: true }));
textAreaElement.focus();
textAreaElement.setSelectionRange(textAreaElement.value.length, textAreaElement.value.length);
textAreaElement.scrollTop = textAreaElement.scrollHeight;
if (results.isFinal) {
logLevel >= 2 && console.log("Final Result: ", results);
let id = getVoiceCommandByTranscript(Parts[Parts.length - 1]);
logLevel >= 2 && console.log("id = ", id);
switch (id) {
case "enter":
Parts.pop();
if (Parts.length > 0) {
textAreaElement.value = Parts.join("");
textAreaElement.dispatchEvent(new Event("input", { bubbles: true }));
textAreaElement.focus();
textAreaElement.setSelectionRange(textAreaElement.value.length, textAreaElement.value.length);
textAreaElement.scrollTop = textAreaElement.scrollHeight;
submitButtonElement.click();
Parts = [];
speechRecognitionStop$.next();
}
break;
case "clear":
Parts = [];
break;
case "reload":
location.reload();
break;
case "delete":
Parts.pop();
Parts.pop();
break;
case "\u63DB\u884C":
Parts[Parts.length - 1] = "\r\n";
break;
case "\u91CD\u7F6E":
reset();
break;
case "\u5207\u63DB\u81F3\u4E2D\u6587\u6A21\u5F0F":
logLevel >= 2 && console.log("\u5207\u63DB\u81F3\u4E2D\u6587\u6A21\u5F0F");
microphoneButtonElement.changeLanguage("cmn-Hant-TW");
Parts[Parts.length - 1] = "";
break;
case "\u5207\u63DB\u81F3\u82F1\u6587\u6A21\u5F0F":
logLevel >= 2 && console.log("\u5207\u63DB\u81F3\u82F1\u6587\u6A21\u5F0F");
microphoneButtonElement.changeLanguage("en-US");
Parts[Parts.length - 1] = "";
break;
case "\u5207\u63DB\u81F3\u65E5\u6587\u6A21\u5F0F":
case "\u5207\u63DB\u81F3\u65E5\u6587":
logLevel >= 2 && console.log("\u5207\u63DB\u81F3\u65E5\u6587\u6A21\u5F0F");
microphoneButtonElement.changeLanguage("ja-JP");
Parts[Parts.length - 1] = "";
break;
case "\u5207\u63DB\u81F3\u97D3\u6587\u6A21\u5F0F":
logLevel >= 2 && console.log("\u5207\u63DB\u81F3\u97D3\u6587\u6A21\u5F0F");
microphoneButtonElement.changeLanguage("ko-KR");
Parts[Parts.length - 1] = "";
break;
case "\u95DC\u9589\u8A9E\u97F3\u8FA8\u8B58":
logLevel >= 2 && console.log("\u95DC\u9589\u8A9E\u97F3\u8FA8\u8B58");
speechRecognitionStop$.next();
break;
case "paste":
Parts.pop();
logLevel >= 2 && console.log("\u8CBC\u4E0A\u526A\u8CBC\u7C3F");
Parts = [...Parts, "\r\n\r\n"];
Parts = [...Parts, await window.navigator.clipboard.readText()];
Parts = [...Parts, "\r\n\r\n"];
break;
case "explain_code":
Parts[Parts.length - 1] = Parts[Parts.length - 1].replace(/…$/g, "");
logLevel >= 2 && console.log("\u78BA\u8A8D\u8F38\u5165 (\u8AAA\u660E\u7A0B\u5F0F\u78BC)");
Parts = [...Parts, "\r\n\r\n"];
Parts = [...Parts, await window.navigator.clipboard.readText()];
Parts = [...Parts, "\r\n\r\n"];
break;
default:
Parts[Parts.length - 1] = Parts[Parts.length - 1].replace(/…$/g, "");
logLevel >= 2 && console.log("\u78BA\u8A8D\u8F38\u5165", Parts);
break;
}
Parts = [...Parts, ""];
textAreaElement.value = Parts.join("");
textAreaElement.dispatchEvent(new Event("input", { bubbles: true }));
textAreaElement.focus();
textAreaElement.setSelectionRange(textAreaElement.value.length, textAreaElement.value.length);
textAreaElement.scrollTop = textAreaElement.scrollHeight;
}
}
const speechRecognitionStart$ = new Subject();
speechRecognitionStart$.subscribe(() => {
logLevel >= 1 && console.log("speechRecognitionStart$");
speechSynthesisStop$.next();
microphoneButtonElement.innerHTML = svgMicOn;
microphoneButtonElement.title = `\u95DC\u9589\u8A9E\u97F3\u8FA8\u8B58\u529F\u80FD (${isMac() ? "command+option+s" : "alt+s"})`;
if (textAreaElement.value) {
Parts = [textAreaElement.value, ""];
} else {
Parts = [];
}
speechRecognition.start();
logLevel >= 1 && console.log("speechRecognitionStart$ Started", Parts, textAreaElement.value);
});
const speechRecognitionStop$ = new Subject();
speechRecognitionStop$.subscribe(() => {
logLevel >= 1 && console.log("speechRecognitionStop$");
microphoneButtonElement.innerHTML = svgMicOff;
microphoneButtonElement.title = `\u958B\u555F\u8A9E\u97F3\u8FA8\u8B58\u529F\u80FD (${isMac() ? "command+option+s" : "alt+s"})`;
if (Parts.length > 0) {
textAreaElement.value = textAreaElement.value.replace(/…$/, "");
textAreaElement.dispatchEvent(new Event("input", { bubbles: true }));
textAreaElement.focus();
textAreaElement.setSelectionRange(textAreaElement.value.length, textAreaElement.value.length);
textAreaElement.scrollTop = textAreaElement.scrollHeight;
Parts = [];
}
speechRecognition.abort();
});
const speechSynthesisStart$ = new Subject();
speechSynthesisStart$.subscribe(() => {
logLevel >= 1 && console.log("speechSynthesisStart$");
speechRecognitionStop$.next();
speakerButtonElement.innerHTML = svgSpeakerOn;
speakerButtonElement.title = `\u95DC\u9589\u8A9E\u97F3\u5408\u6210\u529F\u80FD (${isMac() ? "command+option+m" : "alt+m"})`;
});
const speechSynthesisStop$ = new Subject();
speechSynthesisStop$.subscribe(() => {
logLevel >= 1 && console.log("speechSynthesisStop$");
speakerButtonElement.innerHTML = svgSpeakerOff;
speakerButtonElement.title = `\u958B\u555F\u8A9E\u97F3\u5408\u6210\u529F\u80FD (${isMac() ? "command+option+m" : "alt+m"})`;
checkAudio().subscribe({
next: (audioStream) => {
audioStream.getTracks().forEach(function(track) {
track.stop();
});
},
error: (error) => {
logLevel >= 2 && console.error("Microphone is not usable: " + error);
}
});
if (speechSynthesis.speaking) {
logLevel >= 2 && console.log("\u6B63\u5728\u64AD\u653E\u5408\u6210\u8A9E\u97F3\u4E2D\uFF0C\u53D6\u6D88\u672C\u6B21\u64AD\u653E\uFF01");
speechSynthesis.cancel();
}
});
function getVoiceCommandByTranscript(str) {
const voice_commands = {
enter: {
terms: [
"enter",
"Run",
"go",
// 繁體字
"\u9001\u51FA",
"\u53BB\u5427",
"\u958B\u59CB",
"\u72C2\u5954\u5427",
"\u8DD1\u8D77\u4F86",
// 簡體字
"\u56DE\u8F66"
],
match: "exact"
// prefix, exact, postfix
},
reload: {
terms: [
"reload",
"\u91CD\u65B0\u6574\u7406",
"\u91CD\u8F09\u9801\u9762"
],
match: "exact"
// prefix, exact, postfix
},
clear: {
terms: [
"clear",
"\u91CD\u65B0\u8F38\u5165",
"\u6E05\u9664",
"\u6E05\u7A7A",
"\u6DE8\u7A7A"
],
match: "exact"
// prefix, exact, postfix
},
delete: {
terms: [
"delete",
// 繁體字
"\u522A\u9664",
"\u522A\u9664\u4E0A\u4E00\u53E5",
// 簡體字
"\u5220\u9664"
],
match: "exact"
// prefix, exact, postfix
},
paste: {
terms: [
"paste",
"\u8CBC\u4E0A",
"\u8CBC\u4E0A\u526A\u8CBC\u7C3F"
],
match: "exact"
// prefix, exact, postfix
},
explain_code: {
terms: [
"\u8ACB\u8AAA\u660E\u4EE5\u4E0B\u7A0B\u5F0F\u78BC",
"\u8ACB\u8AAA\u660E\u4E00\u4E0B\u7A0B\u5F0F\u78BC",
"\u8AAA\u660E\u4E00\u4E0B\u7A0B\u5F0F\u78BC",
"\u8AAA\u660E\u4EE5\u4E0B\u7A0B\u5F0F\u78BC"
],
match: "exact"
// prefix, exact, postfix
},
\u9017\u9EDE: {
terms: [
"comma",
"\u9017\u865F",
"\u9017\u9EDE"
],
match: "exact"
// prefix, exact, postfix
},
\u53E5\u9EDE: {
terms: [
"period",
"\u53E5\u865F",
"\u53E5\u9EDE"
],
match: "exact"
// prefix, exact, postfix
},
\u554F\u865F: {
terms: [
"questionmark",
"\u554F\u865F"
],
match: "exact"
// prefix, exact, postfix
},
\u63DB\u884C: {
terms: [
"newline",
"\u63DB\u884C",
"\u65B7\u884C"
],
match: "exact"
// prefix, exact, postfix
},
\u91CD\u7F6E: {
terms: [
"reset",
"\u91CD\u7F6E",
"\u91CD\u65B0\u958B\u59CB",
"\u30EA\u30BB\u30C3\u30C8",
// Risetto
"\uCD08\uAE30\uD654"
// chogihwa
],
match: "exact"
// prefix, exact, postfix
},
\u5207\u63DB\u81F3\u4E2D\u6587\u6A21\u5F0F: {
terms: [
"\u5207\u63DB\u81F3\u4E2D\u6587\u6A21\u5F0F",
"\u5207\u63DB\u5230\u4E2D\u6587\u6A21\u5F0F",
"\u5207\u63DB\u81F3\u4E2D\u6587",
"\u5207\u63DB\u5230\u4E2D\u6587",
"\u5207\u63DB\u81F3\u4E2D\u8A9E\u6A21\u5F0F",
"\u5207\u63DB\u5230\u4E2D\u8A9E\u6A21\u5F0F",
"\u5207\u63DB\u81F3\u4E2D\u8A9E",
"\u5207\u63DB\u5230\u4E2D\u8A9E",
"switch to Chinese mode"
],
match: "exact"
// prefix, exact, postfix
},
\u5207\u63DB\u81F3\u82F1\u6587\u6A21\u5F0F: {
terms: [
"\u5207\u63DB\u81F3\u82F1\u6587\u6A21\u5F0F",
"\u5207\u63DB\u5230\u82F1\u6587\u6A21\u5F0F",
"\u5207\u63DB\u81F3\u82F1\u6587",
"\u5207\u63DB\u5230\u82F1\u6587",
"\u5207\u63DB\u81F3\u82F1\u8A9E\u6A21\u5F0F",
"\u5207\u63DB\u5230\u82F1\u8A9E\u6A21\u5F0F",
"\u5207\u63DB\u81F3\u82F1\u8A9E",
"\u5207\u63DB\u5230\u82F1\u8A9E",
"switch to English mode"
],
match: "exact"
// prefix, exact, postfix
},
\u5207\u63DB\u81F3\u65E5\u6587\u6A21\u5F0F: {
terms: [
"\u5207\u63DB\u81F3\u65E5\u6587\u6A21\u5F0F",
"\u5207\u63DB\u5230\u65E5\u6587\u6A21\u5F0F",
"\u5207\u63DB\u81F3\u65E5\u6587",
"\u5207\u63DB\u5230\u65E5\u6587",
"\u5207\u63DB\u81F3\u65E5\u8A9E\u6A21\u5F0F",
"\u5207\u63DB\u5230\u65E5\u8A9E\u6A21\u5F0F",
"\u5207\u63DB\u81F3\u65E5\u8A9E",
"\u5207\u63DB\u5230\u65E5\u8A9E",
"switch to Japanese mode"
],
match: "exact"
// prefix, exact, postfix
},
\u5207\u63DB\u81F3\u97D3\u6587\u6A21\u5F0F: {
terms: [
"\u5207\u63DB\u81F3\u97D3\u6587\u6A21\u5F0F",
"\u5207\u63DB\u5230\u97D3\u6587\u6A21\u5F0F",
"\u5207\u63DB\u81F3\u97D3\u6587",
"\u5207\u63DB\u5230\u97D3\u6587",
"\u5207\u63DB\u81F3\u97D3\u8A9E\u6A21\u5F0F",
"\u5207\u63DB\u5230\u97D3\u8A9E\u6A21\u5F0F",
"\u5207\u63DB\u81F3\u97D3\u8A9E",
"\u5207\u63DB\u5230\u97D3\u8A9E",
"switch to Korea mode"
],
match: "exact"
// prefix, exact, postfix
},
\u95DC\u9589\u8A9E\u97F3\u8FA8\u8B58: {
terms: [
"\u95DC\u9589\u8A9E\u97F3\u8FA8\u8B58",
"\u95DC\u9589\u8A9E\u97F3"
],
match: "exact"
// prefix, exact, postfix
}
};
str = str.trim();
if (navigator.userAgent.indexOf("Edg/") >= 0 && str.substr(str.length - 1, 1) == "\u3002") {
str = str.slice(0, -1);
}
for (const commandId in voice_commands) {
if (Object.hasOwnProperty.call(voice_commands, commandId)) {
const cmd = voice_commands[commandId];
for (const term of cmd.terms) {
let regex = new RegExp("^" + term + "$", "i");
if (cmd.match === "prefix") {
regex = new RegExp("^" + term, "i");
}
if (cmd.match === "postfix") {
regex = new RegExp(term + "$", "i");
}
logLevel >= 2 && console.log("term = ", term, ", str = ", str, ", match = ", cmd.match, ", UA = ", navigator.userAgent);
if (str.search(regex) !== -1) {
return commandId;
}
}
}
}
return "";
}
const createUtteranceTextListener = () => {
return new Observable((subscriber) => {
var lastParagraphElement;
var observer = new MutationObserver((mutations) => {
logLevel >= 2 && console.log(`\u76E3\u6E2C\u5230 ${mutations.length} \u500B\u8B8A\u66F4`, mutations);
mutations.forEach((mutation) => {
logLevel >= 2 && console.log(`TYPE: ${mutation.type}, \u65B0\u589E ${mutation.addedNodes.length} \u500B\u7BC0\u9EDE\uFF0C\u522A\u9664 ${mutation.removedNodes.length} \u500B\u7BC0\u9EDE`);
if (mutation.type === "characterData" && (mutation.target.parentNode.tagName === "P" || mutation.target.parentNode.tagName === "LI")) {
logLevel >= 2 && console.log(mutation.target);
logLevel >= 2 && console.log(lastParagraphElement);
logLevel >= 2 && console.log(mutation.target.parentNode);
ChatGPTRunningStatus = true;
if (lastParagraphElement && lastParagraphElement != mutation.target.parentNode) {
logLevel >= 2 && console.log("lastParagraphElement = ", lastParagraphElement);
subscriber.next(lastParagraphElement.textContent);
}
lastParagraphElement = mutation.target.parentNode;
}
if (mutation.type === "childList" && mutation.target.tagName === "BUTTON" && mutation.target.type !== "button" && mutation.addedNodes.length === 1 && mutation.addedNodes[0].nodeName === "svg" && mutation.addedNodes[0].textContent === "") {
logLevel >= 2 && console.log("!!\u52A0\u5165\u8A9E\u97F3\u4F47\u5217!!", lastParagraphElement);
setTimeout(() => {
ChatGPTRunningStatus = false;
}, 1e3);
if (!!lastParagraphElement.textContent) {
subscriber.next(lastParagraphElement.textContent);
}
lastParagraphElement = void 0;
}
});
});
var target = document.getElementsByTagName("main")[0];
var config2 = {
attributes: false,
// 監測屬性變更
childList: true,
// 監測子節點的變更
subtree: true,
// 監測所有從 target 開始的子節點
characterData: true
};
observer.observe(target, config2);
});
};
const listenUtteranceTextAndSpeak = () => {
defer(() => createUtteranceTextListener()).pipe(
switchMap((lastParagraphTextFromChatGPT) => SpeakText(lastParagraphTextFromChatGPT)),
retry()
).subscribe({
error: (err) => logLevel >= 1 && console.error("\u76E3\u807D\u4E26\u9032\u884C\u8A9E\u97F3\u5408\u6210\u932F\u8AA4", err),
complete: () => logLevel >= 1 && console.log("\u76E3\u807D\u4E26\u9032\u884C\u8A9E\u97F3\u5408\u6210\u7D50\u675F")
});
};
const SpeakText = (text) => {
return new Observable((subscriber) => {
if (!isSpeechSynthesisEnabled()) {
return;
}
logLevel >= 1 && console.log(`\u6E96\u5099\u5408\u6210\u95B1\u8B80\u6587\u7AE0\u8A9E\u97F3: ${text}`, currentVoice);
let utterance = new SpeechSynthesisUtterance(text);
utterance.voice = currentVoice;
if (currentVoice.lang === "zh-TW") {
utterance.rate = 1.3;
} else {
utterance.rate = 1;
}
utterance.onstart = (evt) => {
logLevel >= 2 && console.log("\u958B\u59CB\u767C\u97F3", evt);
subscriber.next(evt);
};
utterance.onend = (evt) => {
logLevel >= 2 && console.log("\u7D50\u675F\u767C\u97F3", evt);
subscriber.complete();
};
utterance.onerror = (evt) => {
logLevel >= 2 && console.log("\u767C\u97F3\u904E\u7A0B\u5931\u6557", evt);
subscriber.error(evt);
};
speechSynthesis.speak(utterance);
});
};
const checkAudio = () => {
logLevel >= 2 && console.log("Checking Audio availability!");
return new Observable((subscriber) => {
navigator.getUserMedia(
{ audio: true },
function(stream) {
subscriber.next(stream);
subscriber.complete();
},
function(error) {
subscriber.error(error);
}
);
});
};
const selectTextToSpeak = () => {
const toDocumentSelectedText = () => (observable2) => observable2.pipe(
map(() => window.getSelection()),
filter((selection) => selection.rangeCount > 0 && !selection.isCollapsed),
map((selection) => selection.getRangeAt(0).toString())
);
fromEvent(document, "selectionchange").pipe(
toDocumentSelectedText(),
tap((selectedText) => {
logLevel >= 2 && console.log("Get the selected text: ", selectedText);
}),
tap(() => {
speechSynthesis.cancel();
}),
switchMap((selectedText) => timer(1e3).pipe(switchMap(() => SpeakText(selectedText)))),
catchError((err) => of(err))
).subscribe();
};
const keydown$ = fromEvent(document, "keydown");
const registerHotKeys = () => {
const altOrCommandOption = (event) => {
return event.altKey && (isMac() ? event.metaKey : true);
};
const keydownEscape$ = keydown$.pipe(filter((ev) => ev.key === "Escape" && !(ev.altKey || ev.ctrlKey || ev.metaKey || ev.shiftKey)));
const keydownEnter$ = keydown$.pipe(filter((ev) => ev.key === "Enter" && ev.target.nodeName === "TEXTAREA" && !(ev.altKey || ev.ctrlKey || ev.metaKey || ev.shiftKey)));
const keydownAltS$ = keydown$.pipe(filter((ev) => altOrCommandOption(ev) && ev.code === "KeyS"));
const keydownAltT$ = keydown$.pipe(filter((ev) => altOrCommandOption(ev) && ev.code === "KeyT"));
const keydownAltR$ = keydown$.pipe(filter((ev) => altOrCommandOption(ev) && ev.code === "KeyR"));
const keydownAltM$ = keydown$.pipe(filter((ev) => altOrCommandOption(ev) && ev.code === "KeyM"));
keydownAltT$.subscribe((ev) => {
speechSynthesisStop$.next();
speechRecognitionStop$.next();
});
keydownAltS$.subscribe((ev) => {
microphoneButtonElement.dispatchEvent(new Event("click", { bubbles: true }));
});
keydownAltM$.subscribe((ev) => {
speakerButtonElement.dispatchEvent(new Event("click", { bubbles: true }));
});
keydownAltR$.subscribe((ev) => {
reset();
});
keydownEscape$.subscribe((ev) => {
reset();
});
};
function initializeTextboxInputEvent() {
textAreaElement.addEventListener("input", (ev) => {
if (isSpeechRecognitionEnabled()) {
logLevel >= 1 && console.log("initializeTextboxInputEvent", ev);
if (!!ev.inputType) {
speechRecognitionStop$.next();
}
}
});
}
function addButtons() {
submitButtonElement = textAreaElement.nextSibling;
submitButtonElement.addEventListener("click", (ev) => {
this.submit();
setTimeout(() => {
reset();
}, 500);
});
textAreaElement.parentElement.insertBefore(microphoneButtonElement, submitButtonElement);
textAreaElement.parentElement.insertBefore(speakerButtonElement, microphoneButtonElement);
textAreaElement.style.paddingRight = "90px";
}
function reset() {
Parts = [];
speechSynthesisStop$.next();
speechRecognitionStop$.next();
textAreaElement.value = "";
textAreaElement.dispatchEvent(new Event("input", { bubbles: true }));
textAreaElement.focus();
textAreaElement.setSelectionRange(textAreaElement.value.length, textAreaElement.value.length);
textAreaElement.scrollTop = textAreaElement.scrollHeight;
if (document.querySelector("#microphoneButtonElementContextMenu")) {
document.querySelector("#microphoneButtonElementContextMenu").close();
}
if (document.querySelector("#speakerButtonElementContextMenu")) {
document.querySelector("#speakerButtonElementContextMenu").close();
}
speakerButtonElement.innerHTML = svgSpeakerOff;
microphoneButtonElement.innerHTML = svgMicOff;
}
setTimeout(() => {
setInterval(() => {
if (document.querySelector("#btn-speaker") === null) {
logLevel >= 1 && console.log("\u5075\u6E2C\u5230\u63DB\u9801\u4E8B\u4EF6");
reset();
setTimeout(() => {
textAreaElement = document.activeElement;
addButtons();
initializeTextboxInputEvent();
}, 300);
}
}, 300);
}, 5e3);
interval(100).pipe(
map(() => document.activeElement),
filter((element) => element.tagName === "TEXTAREA" && element.nextSibling.tagName === "BUTTON"),
take(1)
).subscribe((textarea) => {
textAreaElement = textarea;
setTimeout(() => {
addButtons();
registerHotKeys();
listenUtteranceTextAndSpeak();
selectTextToSpeak();
initializeTextboxInputEvent();
}, 300);
});
})();
})();
// @license MIT