mirror of
https://github.com/hanzoai/agency.git
synced 2026-11-02 19:13:28 +00:00
165 lines
5.1 KiB
Plaintext
165 lines
5.1 KiB
Plaintext
"use strict";
|
|
var __defProp = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
var __export = (target, all) => {
|
|
for (var name in all)
|
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames(from))
|
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
|
|
// src/mutationObserver.ts
|
|
var mutationObserver_exports = {};
|
|
__export(mutationObserver_exports, {
|
|
MutationObserver: () => MutationObserver
|
|
});
|
|
module.exports = __toCommonJS(mutationObserver_exports);
|
|
var import_mutation = require("./mutation.cjs");
|
|
var import_notifyManager = require("./notifyManager.cjs");
|
|
var import_subscribable = require("./subscribable.cjs");
|
|
var import_utils = require("./utils.cjs");
|
|
var MutationObserver = class extends import_subscribable.Subscribable {
|
|
#client;
|
|
#currentResult = void 0;
|
|
#currentMutation;
|
|
#mutateOptions;
|
|
constructor(client, options) {
|
|
super();
|
|
this.#client = client;
|
|
this.setOptions(options);
|
|
this.bindMethods();
|
|
this.#updateResult();
|
|
}
|
|
bindMethods() {
|
|
this.mutate = this.mutate.bind(this);
|
|
this.reset = this.reset.bind(this);
|
|
}
|
|
setOptions(options) {
|
|
const prevOptions = this.options;
|
|
this.options = this.#client.defaultMutationOptions(options);
|
|
if (!(0, import_utils.shallowEqualObjects)(this.options, prevOptions)) {
|
|
this.#client.getMutationCache().notify({
|
|
type: "observerOptionsUpdated",
|
|
mutation: this.#currentMutation,
|
|
observer: this
|
|
});
|
|
}
|
|
if (prevOptions?.mutationKey && this.options.mutationKey && (0, import_utils.hashKey)(prevOptions.mutationKey) !== (0, import_utils.hashKey)(this.options.mutationKey)) {
|
|
this.reset();
|
|
} else if (this.#currentMutation?.state.status === "pending") {
|
|
this.#currentMutation.setOptions(this.options);
|
|
}
|
|
}
|
|
onUnsubscribe() {
|
|
if (!this.hasListeners()) {
|
|
this.#currentMutation?.removeObserver(this);
|
|
}
|
|
}
|
|
onMutationUpdate(action) {
|
|
this.#updateResult();
|
|
this.#notify(action);
|
|
}
|
|
getCurrentResult() {
|
|
return this.#currentResult;
|
|
}
|
|
reset() {
|
|
this.#currentMutation?.removeObserver(this);
|
|
this.#currentMutation = void 0;
|
|
this.#updateResult();
|
|
this.#notify();
|
|
}
|
|
mutate(variables, options) {
|
|
this.#mutateOptions = options;
|
|
this.#currentMutation?.removeObserver(this);
|
|
this.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options);
|
|
this.#currentMutation.addObserver(this);
|
|
return this.#currentMutation.execute(variables);
|
|
}
|
|
#updateResult() {
|
|
const state = this.#currentMutation?.state ?? (0, import_mutation.getDefaultState)();
|
|
this.#currentResult = {
|
|
...state,
|
|
isPending: state.status === "pending",
|
|
isSuccess: state.status === "success",
|
|
isError: state.status === "error",
|
|
isIdle: state.status === "idle",
|
|
mutate: this.mutate,
|
|
reset: this.reset
|
|
};
|
|
}
|
|
#notify(action) {
|
|
import_notifyManager.notifyManager.batch(() => {
|
|
if (this.#mutateOptions && this.hasListeners()) {
|
|
const variables = this.#currentResult.variables;
|
|
const onMutateResult = this.#currentResult.context;
|
|
const context = {
|
|
client: this.#client,
|
|
meta: this.options.meta,
|
|
mutationKey: this.options.mutationKey
|
|
};
|
|
if (action?.type === "success") {
|
|
try {
|
|
this.#mutateOptions.onSuccess?.(
|
|
action.data,
|
|
variables,
|
|
onMutateResult,
|
|
context
|
|
);
|
|
} catch (e) {
|
|
void Promise.reject(e);
|
|
}
|
|
try {
|
|
this.#mutateOptions.onSettled?.(
|
|
action.data,
|
|
null,
|
|
variables,
|
|
onMutateResult,
|
|
context
|
|
);
|
|
} catch (e) {
|
|
void Promise.reject(e);
|
|
}
|
|
} else if (action?.type === "error") {
|
|
try {
|
|
this.#mutateOptions.onError?.(
|
|
action.error,
|
|
variables,
|
|
onMutateResult,
|
|
context
|
|
);
|
|
} catch (e) {
|
|
void Promise.reject(e);
|
|
}
|
|
try {
|
|
this.#mutateOptions.onSettled?.(
|
|
void 0,
|
|
action.error,
|
|
variables,
|
|
onMutateResult,
|
|
context
|
|
);
|
|
} catch (e) {
|
|
void Promise.reject(e);
|
|
}
|
|
}
|
|
}
|
|
this.listeners.forEach((listener) => {
|
|
listener(this.#currentResult);
|
|
});
|
|
});
|
|
}
|
|
};
|
|
// Annotate the CommonJS export names for ESM import in node:
|
|
0 && (module.exports = {
|
|
MutationObserver
|
|
});
|
|
//# sourceMappingURL=mutationObserver.cjs.map |