56 lines
1.9 KiB
JavaScript
56 lines
1.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.init = void 0;
|
|
var vue_1 = require("vue");
|
|
function updateLifeCycle(lifecycles, setupLifecycles, fn) {
|
|
if (fn) {
|
|
if (fn.lifecycles) {
|
|
fn.lifecycles.forEach(function (item) {
|
|
if (!setupLifecycles.includes(item)) {
|
|
setupLifecycles.push(item);
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
var fnString_1 = fn.toString();
|
|
lifecycles.forEach(function (item) {
|
|
if (!setupLifecycles.includes(item) && (new RegExp("\\b(".concat(item, ")\\b"))).test(fnString_1)) {
|
|
setupLifecycles.push(item);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
function init(lifecycles) {
|
|
var setup = vue_1.default.config.optionMergeStrategies.setup;
|
|
var extend = vue_1.default.extend;
|
|
vue_1.default.extend = function () {
|
|
var extendedVue = extend.apply(this, arguments);
|
|
var newOptions = extendedVue.options;
|
|
var setup = newOptions.setup;
|
|
if (setup && setup.lifecycles) {
|
|
setup.lifecycles.forEach(function (item) {
|
|
newOptions[item] = newOptions[item] || [function noop() { }];
|
|
});
|
|
}
|
|
return extendedVue;
|
|
};
|
|
Object.defineProperty(vue_1.default.config.optionMergeStrategies, 'setup', {
|
|
set: function (fn) {
|
|
setup = fn;
|
|
},
|
|
get: function () {
|
|
return function (to, from) {
|
|
if (typeof setup === 'function') {
|
|
var newSetup = setup.apply(this, arguments);
|
|
newSetup.lifecycles = newSetup.lifecycles || [];
|
|
updateLifeCycle(lifecycles, newSetup.lifecycles, from);
|
|
updateLifeCycle(lifecycles, newSetup.lifecycles, to);
|
|
return newSetup;
|
|
}
|
|
};
|
|
}
|
|
});
|
|
}
|
|
exports.init = init;
|