@ace-fetch/vue
Version:
vue adapter for @ace-fetch/core.
56 lines (55 loc) • 2.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FetchVuePlugin = void 0;
var rootFetch_1 = require("./rootFetch");
function FetchVuePlugin(Vue) {
// Used to avoid multiple mixins being setup
// when in dev mode and hot module reload
// https://github.com/vuejs/vue/issues/5089#issuecomment-284260111
if (Vue.$__api_fetch_installed__)
return;
// eslint-disable-next-line @typescript-eslint/camelcase
Vue.$__api_fetch_installed__ = true;
// Equivalent of
// app.config.globalProperties.$fetch = fetch
Vue.mixin({
beforeCreate: function () {
var options = this.$options;
if (options.apiFetch || options.afetch) {
var fetch_1 = options.apiFetch || options.afetch;
// HACK: taken from provide(): https://github.com/vuejs/composition-api/blob/main/src/apis/inject.ts#L31
if (!this._provided) {
var provideCache_1 = {};
Object.defineProperty(this, '_provided', {
get: function () { return provideCache_1; },
set: function (v) { return Object.assign(provideCache_1, v); },
});
}
this._provided[rootFetch_1.FetchInjectKey] = fetch_1;
// propagate the fetch instance in an SSR friendly way
// avoid adding it to nuxt twice
// @Deprecated
if (!this.$afetch) {
this.$afetch = fetch_1;
}
if (!this.$apiFetch) {
this.$apiFetch = fetch_1;
}
// this allows calling useFetch() outside of a component setup after
(0, rootFetch_1.setActiveFetch)(fetch_1);
fetch_1._a = this;
}
else {
// @Deprecated
this.$afetch = (options.parent && options.parent.$afetch) || this;
this.$apiFetch = (options.parent && options.parent.$apiFetch) || this;
}
},
});
}
exports.FetchVuePlugin = FetchVuePlugin;
// Auto install if it is not done yet and `window` has `Vue` in Vue2.
// To allow users to avoid auto-installation in some cases,
if (typeof window !== 'undefined' && window.Vue) {
window.Vue.use(FetchVuePlugin);
}